igniteui-webcomponents 7.3.2 → 7.4.1
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/CHANGELOG.md +87 -0
- package/animations/easings.d.ts +21 -31
- package/animations/easings.js +21 -34
- package/animations/easings.js.map +1 -1
- package/animations/player.d.ts +8 -16
- package/animations/player.js +5 -8
- package/animations/player.js.map +1 -1
- package/animations/view-transition.d.ts +10 -10
- package/animations/view-transition.js +26 -37
- package/animations/view-transition.js.map +1 -1
- package/components/breadcrumb/breadcrumb.d.ts +74 -0
- package/components/breadcrumb/breadcrumb.js +107 -0
- package/components/breadcrumb/breadcrumb.js.map +1 -0
- package/components/breadcrumb/breadcrumbs.d.ts +60 -0
- package/components/breadcrumb/breadcrumbs.js +50 -0
- package/components/breadcrumb/breadcrumbs.js.map +1 -0
- package/components/breadcrumb/themes/breadcrumb.base.css.js +3 -0
- package/components/breadcrumb/themes/breadcrumb.base.css.js.map +1 -0
- package/components/breadcrumb/themes/breadcrumbs.base.css.d.ts +1 -0
- package/components/{resize-container/themes/resize-container.base.css.js → breadcrumb/themes/breadcrumbs.base.css.js} +2 -2
- package/components/breadcrumb/themes/breadcrumbs.base.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/dark/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.d.ts +1 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.js +3 -0
- package/components/breadcrumb/themes/light/breadcrumb.shared.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.common.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js.map +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.d.ts +1 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.js +3 -0
- package/components/breadcrumb/themes/shared/breadcrumb.material.css.js.map +1 -0
- package/components/breadcrumb/themes/themes.d.ts +2 -0
- package/components/breadcrumb/themes/themes.js +50 -0
- package/components/breadcrumb/themes/themes.js.map +1 -0
- package/components/button/button.d.ts +0 -2
- package/components/button/button.js.map +1 -1
- package/components/button-group/button-group.d.ts +42 -12
- package/components/button-group/button-group.js +82 -34
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/toggle-button.d.ts +6 -1
- package/components/button-group/toggle-button.js +28 -2
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/base.js +2 -1
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +2 -3
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.d.ts +2 -2
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/carousel/carousel-indicator.js +1 -0
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +1 -1
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +3 -3
- package/components/carousel/carousel.js.map +1 -1
- package/components/chat/chat-input.d.ts +1 -2
- package/components/chat/chat-input.js +1 -1
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat-state.d.ts +8 -9
- package/components/chat/chat-state.js.map +1 -1
- package/components/chat/chat.d.ts +1 -3
- package/components/chat/chat.js +2 -2
- package/components/chat/chat.js.map +1 -1
- package/components/chat/message-attachments.d.ts +6 -15
- package/components/chat/message-attachments.js.map +1 -1
- package/components/chat/utils.d.ts +0 -1
- package/components/chat/utils.js +1 -1
- package/components/chat/utils.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +3 -1
- package/components/checkbox/checkbox-base.js +4 -0
- package/components/checkbox/checkbox-base.js.map +1 -1
- package/components/checkbox/checkbox.js +4 -12
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.js +1 -8
- package/components/checkbox/switch.js.map +1 -1
- package/components/chip/chip.d.ts +2 -2
- package/components/chip/chip.js.map +1 -1
- package/components/color-picker/color-picker.d.ts +35 -34
- package/components/color-picker/color-picker.js +12 -7
- package/components/color-picker/color-picker.js.map +1 -1
- package/components/color-picker/common.d.ts +0 -2
- package/components/color-picker/common.js +2 -2
- package/components/color-picker/common.js.map +1 -1
- package/components/color-picker/converters.js.map +1 -1
- package/components/color-picker/picker-canvas.js.map +1 -1
- package/components/combo/combo.d.ts +24 -24
- package/components/combo/combo.js +21 -26
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/data.d.ts +7 -10
- package/components/combo/controllers/data.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +22 -27
- package/components/date-picker/date-picker.base.js +9 -3
- package/components/date-picker/date-picker.base.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -1
- package/components/date-picker/date-picker.js +5 -3
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-range-picker/date-range-input.d.ts +0 -2
- package/components/date-range-picker/date-range-input.js +0 -6
- package/components/date-range-picker/date-range-input.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +22 -31
- package/components/date-range-picker/date-range-picker.js +7 -7
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/i18n.d.ts +21 -0
- package/components/date-range-picker/i18n.js +10 -0
- package/components/date-range-picker/i18n.js.map +1 -0
- package/components/date-range-picker/predefined-ranges-area.d.ts +3 -3
- package/components/date-range-picker/predefined-ranges-area.js +2 -5
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/validators.d.ts +0 -4
- package/components/date-range-picker/validators.js +4 -4
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +42 -40
- package/components/date-time-input/date-time-input.base.js +9 -5
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +1 -11
- package/components/date-time-input/date-time-input.js +0 -6
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/datetime-mask-parser.d.ts +0 -10
- package/components/date-time-input/datetime-mask-parser.js +1 -1
- package/components/date-time-input/datetime-mask-parser.js.map +1 -1
- package/components/dialog/dialog.js.map +1 -1
- package/components/dropdown/dropdown-group.d.ts +2 -10
- package/components/dropdown/dropdown-group.js +2 -27
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown.d.ts +17 -23
- package/components/dropdown/dropdown.js +5 -17
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/file-input/file-input.d.ts +7 -2
- package/components/file-input/file-input.js +4 -0
- package/components/file-input/file-input.js.map +1 -1
- package/components/icon/icon.d.ts +1 -1
- package/components/icon/icon.registry.d.ts +6 -6
- package/components/icon/icon.registry.js.map +1 -1
- package/components/input/input-base.d.ts +2 -2
- package/components/input/input-base.js +3 -5
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +3 -3
- package/components/input/input.js.map +1 -1
- package/components/mask-input/mask-history.d.ts +22 -18
- package/components/mask-input/mask-history.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +1 -1
- package/components/mask-input/mask-parser.d.ts +11 -13
- package/components/mask-input/mask-parser.js.map +1 -1
- package/components/popover/popover.d.ts +45 -34
- package/components/popover/popover.js +54 -122
- package/components/popover/popover.js.map +1 -1
- package/components/popover/position/arrow.d.ts +19 -0
- package/components/popover/position/arrow.js +33 -0
- package/components/popover/position/arrow.js.map +1 -0
- package/components/popover/position/floating.d.ts +40 -0
- package/components/popover/position/floating.js +146 -0
- package/components/popover/position/floating.js.map +1 -0
- package/components/popover/position/native.d.ts +45 -0
- package/components/popover/position/native.js +158 -0
- package/components/popover/position/native.js.map +1 -0
- package/components/popover/position/strategy.d.ts +37 -0
- package/components/popover/position/strategy.js +21 -0
- package/components/popover/position/strategy.js.map +1 -0
- package/components/popover/position/types.d.ts +26 -0
- package/components/popover/position/types.js +15 -0
- package/components/popover/position/types.js.map +1 -0
- package/components/popover/themes/light/popover.base.css.js +1 -1
- package/components/popover/themes/light/popover.base.css.js.map +1 -1
- package/components/progress/circular-progress.d.ts +0 -5
- package/components/progress/circular-progress.js.map +1 -1
- package/components/qr-code/qr-code.d.ts +1 -1
- package/components/radio/radio.d.ts +6 -4
- package/components/radio/radio.js +24 -25
- package/components/radio/radio.js.map +1 -1
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.d.ts +9 -6
- package/components/rating/rating.js +17 -18
- package/components/rating/rating.js.map +1 -1
- package/components/select/select-group.d.ts +5 -10
- package/components/select/select-group.js +10 -34
- package/components/select/select-group.js.map +1 -1
- package/components/select/select.d.ts +12 -20
- package/components/select/select.js +5 -15
- package/components/select/select.js.map +1 -1
- package/components/slider/range-slider.d.ts +0 -1
- package/components/slider/range-slider.js +6 -11
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.d.ts +4 -1
- package/components/slider/slider-base.js +20 -18
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider.d.ts +2 -0
- package/components/slider/slider.js +5 -1
- package/components/slider/slider.js.map +1 -1
- package/components/splitter/splitter.d.ts +6 -6
- package/components/splitter/splitter.js.map +1 -1
- package/components/textarea/textarea.d.ts +2 -5
- package/components/textarea/textarea.js +3 -5
- package/components/textarea/textarea.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +6 -7
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +3 -3
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/toast.d.ts +0 -2
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/controller.js.map +1 -1
- package/components/tooltip/service.js +4 -5
- package/components/tooltip/service.js.map +1 -1
- package/components/tooltip/tooltip.d.ts +34 -13
- package/components/tooltip/tooltip.js +8 -4
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/tree-item.d.ts +6 -6
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.navigation.d.ts +5 -6
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/tree/tree.selection.js.map +1 -1
- package/components/types.d.ts +1 -1
- package/components/types.js.map +1 -1
- package/components/validation-container/validation-container.js +2 -1
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +40 -9
- package/components/virtualization/engine.js +126 -61
- package/components/virtualization/engine.js.map +1 -1
- package/components/virtualization/recycle.d.ts +13 -0
- package/components/virtualization/recycle.js +152 -0
- package/components/virtualization/recycle.js.map +1 -0
- package/components/virtualization/virtualization.d.ts +84 -65
- package/components/virtualization/virtualization.js +20 -16
- package/components/virtualization/virtualization.js.map +1 -1
- package/custom-elements.json +18455 -19551
- package/igniteui-webcomponents.css-data.json +2 -2
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +3 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/internals/abort-handler.d.ts +13 -25
- package/internals/abort-handler.js +4 -6
- package/internals/abort-handler.js.map +1 -1
- package/internals/context.d.ts +13 -7
- package/internals/context.js +2 -1
- package/internals/context.js.map +1 -1
- package/internals/controllers/adopt-styles.d.ts +19 -20
- package/internals/controllers/adopt-styles.js +3 -8
- package/internals/controllers/adopt-styles.js.map +1 -1
- package/internals/controllers/aria-projection.d.ts +100 -61
- package/internals/controllers/aria-projection.js +81 -31
- package/internals/controllers/aria-projection.js.map +1 -1
- package/internals/controllers/async-consumer.js.map +1 -1
- package/internals/controllers/command.d.ts +15 -30
- package/internals/controllers/command.js +2 -7
- package/internals/controllers/command.js.map +1 -1
- package/internals/controllers/context-provider.d.ts +7 -13
- package/internals/controllers/context-provider.js.map +1 -1
- package/internals/controllers/focus-ring.d.ts +10 -30
- package/internals/controllers/focus-ring.js +6 -12
- package/internals/controllers/focus-ring.js.map +1 -1
- package/internals/controllers/fullscreen.d.ts +7 -23
- package/internals/controllers/fullscreen.js +3 -9
- package/internals/controllers/fullscreen.js.map +1 -1
- package/internals/controllers/gestures.d.ts +10 -29
- package/internals/controllers/gestures.js +1 -3
- package/internals/controllers/gestures.js.map +1 -1
- package/internals/controllers/group.d.ts +13 -30
- package/internals/controllers/group.js.map +1 -1
- package/internals/controllers/host-listeners.d.ts +28 -0
- package/internals/controllers/host-listeners.js +27 -0
- package/internals/controllers/host-listeners.js.map +1 -0
- package/internals/controllers/id-resolver.d.ts +8 -9
- package/internals/controllers/id-resolver.js +6 -14
- package/internals/controllers/id-resolver.js.map +1 -1
- package/internals/controllers/internals.d.ts +53 -104
- package/internals/controllers/internals.js +40 -13
- package/internals/controllers/internals.js.map +1 -1
- package/internals/controllers/key-bindings.d.ts +61 -158
- package/internals/controllers/key-bindings.js +68 -67
- package/internals/controllers/key-bindings.js.map +1 -1
- package/internals/controllers/keys.d.ts +32 -0
- package/internals/controllers/keys.js +20 -0
- package/internals/controllers/keys.js.map +1 -0
- package/internals/controllers/mutation-observer.d.ts +14 -37
- package/internals/controllers/mutation-observer.js +1 -1
- package/internals/controllers/mutation-observer.js.map +1 -1
- package/internals/controllers/resize-observer.d.ts +9 -19
- package/internals/controllers/resize-observer.js.map +1 -1
- package/internals/controllers/root-click.d.ts +11 -42
- package/internals/controllers/root-click.js +4 -6
- package/internals/controllers/root-click.js.map +1 -1
- package/internals/controllers/roving-focus.d.ts +16 -35
- package/internals/controllers/roving-focus.js.map +1 -1
- package/internals/controllers/slot.d.ts +25 -54
- package/internals/controllers/slot.js +6 -6
- package/internals/controllers/slot.js.map +1 -1
- package/internals/controllers/toggle.d.ts +44 -48
- package/internals/controllers/toggle.js.map +1 -1
- package/internals/date/compare.js.map +1 -1
- package/internals/date/converters.d.ts +10 -7
- package/internals/date/converters.js.map +1 -1
- package/internals/date/model.d.ts +9 -16
- package/internals/date/model.js +22 -25
- package/internals/date/model.js.map +1 -1
- package/internals/decorators/blazorAdditionalDependencies.d.ts +4 -2
- package/internals/decorators/blazorAdditionalDependencies.js.map +1 -1
- package/internals/decorators/blazorDeepImport.d.ts +1 -3
- package/internals/decorators/blazorDeepImport.js.map +1 -1
- package/internals/decorators/blazorInclude.d.ts +3 -2
- package/internals/decorators/blazorInclude.js.map +1 -1
- package/internals/decorators/blazorIndirectRender.d.ts +1 -3
- package/internals/decorators/blazorIndirectRender.js.map +1 -1
- package/internals/decorators/blazorSuppressComponent.d.ts +1 -3
- package/internals/decorators/blazorSuppressComponent.js.map +1 -1
- package/internals/decorators/coerced-property.d.ts +14 -20
- package/internals/decorators/coerced-property.js.map +1 -1
- package/internals/decorators/shadow-options.d.ts +2 -5
- package/internals/decorators/shadow-options.js.map +1 -1
- package/internals/definitions/defineAllComponents.js +2 -0
- package/internals/definitions/defineAllComponents.js.map +1 -1
- package/internals/directives/drag.d.ts +51 -81
- package/internals/directives/drag.js +27 -89
- package/internals/directives/drag.js.map +1 -1
- package/internals/directives/pointer-operation.d.ts +75 -0
- package/internals/directives/pointer-operation.js +92 -0
- package/internals/directives/pointer-operation.js.map +1 -0
- package/internals/directives/resize.d.ts +36 -64
- package/internals/directives/resize.js +18 -85
- package/internals/directives/resize.js.map +1 -1
- package/internals/i18n/EN/calendar.resources.d.ts +8 -2
- package/internals/i18n/EN/calendar.resources.js +2 -2
- package/internals/i18n/EN/calendar.resources.js.map +1 -1
- package/internals/i18n/EN/chat.resources.d.ts +8 -2
- package/internals/i18n/EN/chat.resources.js +3 -10
- package/internals/i18n/EN/chat.resources.js.map +1 -1
- package/internals/i18n/EN/date-picker.resources.d.ts +6 -4
- package/internals/i18n/EN/date-picker.resources.js +1 -7
- package/internals/i18n/EN/date-picker.resources.js.map +1 -1
- package/internals/i18n/EN/date-range-picker.resources.d.ts +9 -2
- package/internals/i18n/EN/date-range-picker.resources.js +2 -2
- package/internals/i18n/EN/date-range-picker.resources.js.map +1 -1
- package/internals/i18n/i18n-controller.d.ts +44 -46
- package/internals/i18n/i18n-controller.js +46 -33
- package/internals/i18n/i18n-controller.js.map +1 -1
- package/internals/i18n/utils.d.ts +9 -4
- package/internals/i18n/utils.js +4 -27
- package/internals/i18n/utils.js.map +1 -1
- package/internals/mixins/alert.d.ts +10 -25
- package/internals/mixins/alert.js.map +1 -1
- package/internals/mixins/combo-box.d.ts +21 -11
- package/internals/mixins/combo-box.js +16 -22
- package/internals/mixins/combo-box.js.map +1 -1
- package/internals/mixins/event-emitter.js +9 -11
- package/internals/mixins/event-emitter.js.map +1 -1
- package/internals/mixins/forms/associated-required.d.ts +4 -4
- package/internals/mixins/forms/associated-required.js.map +1 -1
- package/internals/mixins/forms/associated.d.ts +4 -2
- package/internals/mixins/forms/associated.js +42 -19
- package/internals/mixins/forms/associated.js.map +1 -1
- package/internals/mixins/forms/form-transformers.js.map +1 -1
- package/internals/mixins/forms/types.d.ts +27 -78
- package/internals/mixins/forms/types.js.map +1 -1
- package/internals/mixins/group.d.ts +18 -0
- package/internals/mixins/group.js +37 -0
- package/internals/mixins/group.js.map +1 -0
- package/internals/mixins/i18n.d.ts +10 -16
- package/internals/mixins/i18n.js.map +1 -1
- package/internals/mixins/mask-behavior.d.ts +8 -22
- package/internals/mixins/mask-behavior.js +1 -2
- package/internals/mixins/mask-behavior.js.map +1 -1
- package/internals/mixins/option.d.ts +1 -2
- package/internals/mixins/option.js +2 -1
- package/internals/mixins/option.js.map +1 -1
- package/internals/part-map.d.ts +4 -2
- package/internals/part-map.js +1 -1
- package/internals/part-map.js.map +1 -1
- package/internals/templates/input-shell.d.ts +8 -17
- package/internals/templates/input-shell.js +4 -1
- package/internals/templates/input-shell.js.map +1 -1
- package/internals/templates/masked-input.d.ts +7 -8
- package/internals/templates/masked-input.js.map +1 -1
- package/internals/templates/slotted-icon.d.ts +7 -12
- package/internals/templates/slotted-icon.js.map +1 -1
- package/internals/templates/toggle-shell.d.ts +19 -19
- package/internals/templates/toggle-shell.js +12 -8
- package/internals/templates/toggle-shell.js.map +1 -1
- package/internals/timing.d.ts +5 -14
- package/internals/timing.js.map +1 -1
- package/internals/utils/arrays.d.ts +21 -21
- package/internals/utils/arrays.js +14 -0
- package/internals/utils/arrays.js.map +1 -1
- package/internals/utils/dom.d.ts +53 -41
- package/internals/utils/dom.js +3 -4
- package/internals/utils/dom.js.map +1 -1
- package/internals/utils/events.d.ts +29 -16
- package/internals/utils/events.js +9 -1
- package/internals/utils/events.js.map +1 -1
- package/internals/utils/lit.d.ts +5 -2
- package/internals/utils/lit.js.map +1 -1
- package/internals/utils/math.d.ts +8 -6
- package/internals/utils/math.js.map +1 -1
- package/internals/utils/objects.d.ts +3 -20
- package/internals/utils/objects.js +1 -39
- package/internals/utils/objects.js.map +1 -1
- package/internals/utils/strings.d.ts +9 -11
- package/internals/utils/strings.js.map +1 -1
- package/internals/utils/types.d.ts +16 -3
- package/internals/utils/types.js +3 -0
- package/internals/utils/types.js.map +1 -1
- package/internals/validators.d.ts +9 -8
- package/internals/validators.js +12 -6
- package/internals/validators.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +4 -3
- package/skills/igniteui-wc-choose-components/SKILL.md +2 -1
- package/skills/igniteui-wc-customize-component-theme/SKILL.md +2 -1
- package/skills/igniteui-wc-figma-to-app/SKILL.md +328 -0
- package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +343 -0
- package/skills/igniteui-wc-figma-to-app/references/design-provenance.md +199 -0
- package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +489 -0
- package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +370 -0
- package/skills/igniteui-wc-figma-to-app/references/figma-exploration.md +222 -0
- package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +363 -0
- package/skills/igniteui-wc-figma-to-app/references/project-setup.md +105 -0
- package/skills/igniteui-wc-figma-to-app/references/theme-generation.md +180 -0
- package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +370 -0
- package/skills/igniteui-wc-generate-from-image-design/SKILL.md +2 -1
- package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +3 -3
- package/skills/igniteui-wc-grids/SKILL.md +133 -0
- package/skills/igniteui-wc-integrate-with-framework/SKILL.md +2 -1
- package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +2 -1
- package/skills/igniteui-wc-optimize-bundle-size/SKILL.md +2 -1
- package/theming/config.d.ts +14 -5
- package/theming/config.js +38 -18
- package/theming/config.js.map +1 -1
- package/theming/context.d.ts +1 -23
- package/theming/context.js.map +1 -1
- package/theming/theming-controller.d.ts +2 -32
- package/theming/theming-controller.js +15 -21
- package/theming/theming-controller.js.map +1 -1
- package/theming/theming-event.d.ts +0 -7
- package/theming/theming-event.js +0 -13
- package/theming/theming-event.js.map +1 -1
- package/theming/types.d.ts +1 -8
- package/theming/types.js.map +1 -1
- package/web-types.json +3 -3
- package/animations/presets/slide/index.d.ts +0 -3
- package/animations/presets/slide/index.js +0 -16
- package/animations/presets/slide/index.js.map +0 -1
- package/components/resize-container/themes/resize-container.base.css.js.map +0 -1
- package/internals/controllers/root-scroll.d.ts +0 -31
- package/internals/controllers/root-scroll.js +0 -71
- package/internals/controllers/root-scroll.js.map +0 -1
- package/theming/utils.d.ts +0 -11
- package/theming/utils.js +0 -20
- package/theming/utils.js.map +0 -1
- /package/components/{resize-container/themes/resize-container.base.css.d.ts → breadcrumb/themes/breadcrumb.base.css.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/components/tooltip/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/components/tooltip/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjE,MAAM,sBAAsB;IAA5B;QACU,gBAAW,GAAG,IAAI,GAAG,EAA4C,CAAC;IA4C5E,CAAC;IAzCS,aAAa;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,mBAAmB,CACjB,UAAU,EACV,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAC1B,SAAS,EACT,IAAI,CACL,CAAC;IACJ,CAAC;IAEM,GAAG,CACR,QAA6B,EAC7B,YAAiC;QAEjC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEM,MAAM,CAAC,QAA6B;QACzC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAGM,KAAK,CAAC,WAAW,CAAC,KAAoB;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAGD,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAC7C,eAAe,OAAO,CAAC","sourcesContent":["import { isServer } from 'lit';\nimport { escapeKey, isKey } from '#internals/controllers/keys.js';\nimport { isEmpty, lastOf } from '#internals/utils/arrays.js';\nimport { toggleEventListener } from '#internals/utils/events.js';\nimport type IgcTooltipComponent from './tooltip.js';\n\ntype TooltipHideCallback = () => unknown;\n\nclass TooltipEscapeCallbacks {\n private _collection = new Map<IgcTooltipComponent, TooltipHideCallback>();\n\n /** Keeps the global `keydown` listener bound while any tooltip is shown. */\n private _syncListener(): void {\n /* c8 ignore next 3 */\n if (isServer) {\n return;\n }\n\n toggleEventListener(\n globalThis,\n !isEmpty(this._collection),\n 'keydown',\n this\n );\n }\n\n public add(\n instance: IgcTooltipComponent,\n hideCallback: TooltipHideCallback\n ): void {\n if (this._collection.has(instance)) {\n return;\n }\n\n this._collection.set(instance, hideCallback);\n this._syncListener();\n }\n\n public remove(instance: IgcTooltipComponent): void {\n if (this._collection.delete(instance)) {\n this._syncListener();\n }\n }\n\n /** @internal */\n public async handleEvent(event: KeyboardEvent): Promise<void> {\n if (!isKey(event, escapeKey)) {\n return;\n }\n\n // The last registered tooltip is the last one shown.\n await lastOf(Array.from(this._collection.values()))?.();\n }\n}\n\nconst service = new TooltipEscapeCallbacks();\nexport default service;\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LitElement, type PropertyValues } from 'lit';
|
|
2
2
|
import type { Constructor } from '#internals/mixins/constructor.js';
|
|
3
3
|
import { type PopoverPlacement } from '../popover/popover.js';
|
|
4
|
+
import type { PopoverScrollStrategy } from '../types.js';
|
|
4
5
|
export interface IgcTooltipComponentEventMap {
|
|
5
6
|
igcOpening: CustomEvent<void>;
|
|
6
7
|
igcOpened: CustomEvent<void>;
|
|
@@ -44,17 +45,17 @@ export default class IgcTooltipComponent extends IgcTooltipComponent_base {
|
|
|
44
45
|
private _transitionId;
|
|
45
46
|
private _animating;
|
|
46
47
|
/**
|
|
47
|
-
* The state the tooltip
|
|
48
|
-
* popover renders
|
|
48
|
+
* The state the tooltip moves to. A show commits `open` first, so that the
|
|
49
|
+
* popover renders. A hide commits it after the animation ends.
|
|
49
50
|
*/
|
|
50
51
|
private _requestedState;
|
|
51
52
|
private readonly _popover;
|
|
52
53
|
private readonly _arrowElement;
|
|
53
54
|
private get _arrowOffset();
|
|
54
55
|
/**
|
|
55
|
-
* Whether the consumer
|
|
56
|
-
*
|
|
57
|
-
*
|
|
56
|
+
* Whether the consumer put content into the default slot. The query does not
|
|
57
|
+
* flatten, because a flattened query reports the rendered `message`, which is
|
|
58
|
+
* the fallback content of the slot, as content of the consumer.
|
|
58
59
|
*/
|
|
59
60
|
private get _hasProjectedContent();
|
|
60
61
|
/**
|
|
@@ -86,6 +87,20 @@ export default class IgcTooltipComponent extends IgcTooltipComponent_base {
|
|
|
86
87
|
* @default bottom
|
|
87
88
|
*/
|
|
88
89
|
placement: PopoverPlacement;
|
|
90
|
+
/**
|
|
91
|
+
* Sets the behavior of the tooltip when the parent container scrolls.
|
|
92
|
+
*
|
|
93
|
+
* If the value is `hide`, the tooltip hides while the anchor is fully out
|
|
94
|
+
* of view. `hide` is the default value.
|
|
95
|
+
*
|
|
96
|
+
* If the value is `scroll`, the tooltip stays visible and anchored.
|
|
97
|
+
*
|
|
98
|
+
* If the value is `close`, the tooltip closes on each scroll. The tooltip
|
|
99
|
+
* also closes if you set the `sticky` property. The Escape key behaves the
|
|
100
|
+
* same way.
|
|
101
|
+
* @attr scroll-strategy
|
|
102
|
+
*/
|
|
103
|
+
scrollStrategy: PopoverScrollStrategy;
|
|
89
104
|
/**
|
|
90
105
|
* An element instance or an IDREF to use as the anchor for the tooltip.
|
|
91
106
|
*
|
|
@@ -147,17 +162,16 @@ export default class IgcTooltipComponent extends IgcTooltipComponent_base {
|
|
|
147
162
|
protected willUpdate(changedProperties: PropertyValues<this>): void;
|
|
148
163
|
private _emitEvent;
|
|
149
164
|
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
* @returns Whether the aborted transition was mid-animation.
|
|
165
|
+
* Cancels the queued or running transition, and resolves a delayed one with
|
|
166
|
+
* `false`. The caller must settle the state that stays behind. Returns
|
|
167
|
+
* whether the cancelled transition was in its animation.
|
|
154
168
|
*/
|
|
155
169
|
private _abortTransition;
|
|
156
170
|
/** Lands the tooltip on `state` after its transition was aborted. */
|
|
157
171
|
private _settleState;
|
|
158
172
|
/**
|
|
159
|
-
* Drops a queued or running transition and settles on `state
|
|
160
|
-
* the state the tooltip is
|
|
173
|
+
* Drops a queued or running transition and settles on `state`. The default is
|
|
174
|
+
* the state the tooltip is committed to.
|
|
161
175
|
*/
|
|
162
176
|
private _cancelTransition;
|
|
163
177
|
private _applyTooltipState;
|
|
@@ -189,8 +203,15 @@ export default class IgcTooltipComponent extends IgcTooltipComponent_base {
|
|
|
189
203
|
protected _hideWithEvent(): Promise<boolean>;
|
|
190
204
|
private _showOnInteraction;
|
|
191
205
|
private _hideOnInteraction;
|
|
192
|
-
/**
|
|
193
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Closes the tooltip and emits the events. Ignores `hideDelay`, and also
|
|
208
|
+
* `sticky`, which `_hideOnInteraction` obeys.
|
|
209
|
+
*
|
|
210
|
+
* @remarks
|
|
211
|
+
* The close button of a sticky tooltip calls this method, as does the `close`
|
|
212
|
+
* scroll strategy, which closes a sticky tooltip too.
|
|
213
|
+
*/
|
|
214
|
+
private _hideImmediately;
|
|
194
215
|
private _hideOnEscape;
|
|
195
216
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
196
217
|
}
|
|
@@ -99,6 +99,7 @@ export default class IgcTooltipComponent extends EventEmitterMixin(LitElement) {
|
|
|
99
99
|
this.withArrow = false;
|
|
100
100
|
this.offset = 6;
|
|
101
101
|
this.placement = 'bottom';
|
|
102
|
+
this.scrollStrategy = 'hide';
|
|
102
103
|
this.showDelay = 200;
|
|
103
104
|
this.hideDelay = 300;
|
|
104
105
|
this.message = '';
|
|
@@ -236,7 +237,7 @@ export default class IgcTooltipComponent extends EventEmitterMixin(LitElement) {
|
|
|
236
237
|
this._hideWithEvent();
|
|
237
238
|
}
|
|
238
239
|
}
|
|
239
|
-
|
|
240
|
+
_hideImmediately() {
|
|
240
241
|
this._applyTooltipState({ show: false, withEvents: true });
|
|
241
242
|
}
|
|
242
243
|
async _hideOnEscape() {
|
|
@@ -256,16 +257,16 @@ export default class IgcTooltipComponent extends EventEmitterMixin(LitElement) {
|
|
|
256
257
|
.offset=${this.offset}
|
|
257
258
|
.anchor=${this._controller.anchor ?? undefined}
|
|
258
259
|
.arrowOffset=${this._arrowOffset}
|
|
259
|
-
.
|
|
260
|
+
.scrollStrategy=${this.scrollStrategy}
|
|
260
261
|
?open=${this.open}
|
|
261
262
|
flip
|
|
262
|
-
|
|
263
|
+
@igcPopoverScrollClose=${this._hideImmediately}
|
|
263
264
|
>
|
|
264
265
|
<div ${ref(this._containerRef)} part=${partMap(parts)}>
|
|
265
266
|
<slot>${this.message}</slot>
|
|
266
267
|
${this.sticky
|
|
267
268
|
? html `
|
|
268
|
-
<slot name="close-button" @click=${this.
|
|
269
|
+
<slot name="close-button" @click=${this._hideImmediately}>
|
|
269
270
|
<button
|
|
270
271
|
type="button"
|
|
271
272
|
part="close-button"
|
|
@@ -304,6 +305,9 @@ __decorate([
|
|
|
304
305
|
__decorate([
|
|
305
306
|
property()
|
|
306
307
|
], IgcTooltipComponent.prototype, "placement", void 0);
|
|
308
|
+
__decorate([
|
|
309
|
+
property({ attribute: 'scroll-strategy' })
|
|
310
|
+
], IgcTooltipComponent.prototype, "scrollStrategy", void 0);
|
|
307
311
|
__decorate([
|
|
308
312
|
property()
|
|
309
313
|
], IgcTooltipComponent.prototype, "anchor", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { EaseOut } from '#animations/easings.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeOut } from '#animations/presets/fade/index.js';\nimport { scaleInCenter } from '#animations/presets/scale/index.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport {\n coercedProperty,\n type CoercedPropertyConfig,\n} from '#internals/decorators/coerced-property.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { partMap } from '#internals/part-map.js';\nimport { isElement, isLTR } from '#internals/utils/dom.js';\nimport { asNumber } from '#internals/utils/math.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcPopoverComponent, {\n type PopoverPlacement,\n} from '../popover/popover.js';\nimport { addTooltipController } from './controller.js';\nimport { styles as shared } from './themes/shared/tooltip.common.css.js';\nimport { all } from './themes/themes.js';\nimport { styles } from './themes/tooltip.base.css.js';\n\nexport interface IgcTooltipComponentEventMap {\n igcOpening: CustomEvent<void>;\n igcOpened: CustomEvent<void>;\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\n/** Additional offset applied to the arrow element for aligned placements. */\nconst ARROW_OFFSET = 8;\n\ntype TooltipStateOptions = {\n show: boolean;\n withDelay?: boolean;\n withEvents?: boolean;\n};\n\n/**\n * Provides a way to display supplementary information related to an element when a user interacts with it (e.g., hover, focus).\n * It offers features such as placement customization, delays, sticky mode, and animations.\n *\n * @element igc-tooltip\n *\n * @slot - Default slot of the tooltip component.\n * @slot close-button - Slot for custom sticky-mode close action (e.g., an icon/button).\n *\n * @csspart base - The wrapping container of the tooltip content.\n * @csspart simple-text - The container where the message property of the tooltip is rendered.\n * @csspart close-button - The default sticky-mode close button.\n *\n * @fires igcOpening - Emitted before the tooltip begins to open. Can be canceled to prevent opening.\n * @fires igcOpened - Emitted after the tooltip has successfully opened and is visible.\n * @fires igcClosing - Emitted before the tooltip begins to close. Can be canceled to prevent closing.\n * @fires igcClosed - Emitted after the tooltip has been fully removed from view.\n */\nexport default class IgcTooltipComponent extends EventEmitterMixin<\n IgcTooltipComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-tooltip';\n public static styles = [styles, shared];\n\n /** Shared config for the delay properties - a negative delay is no delay. */\n private static readonly _delay: CoercedPropertyConfig<\n number,\n IgcTooltipComponent\n > = {\n transform: ({ value }) => Math.max(0, asNumber(value)),\n };\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcTooltipComponent,\n IgcPopoverComponent,\n IgcIconComponent\n );\n }\n\n private readonly _controller = addTooltipController(this, {\n onShow: () => this._showOnInteraction(),\n onHide: () => this._hideOnInteraction(),\n onEscape: () => this._hideOnEscape(),\n onClick: () => this._cancelTransition(),\n // The controller dropped the anchor the tooltip is bound to.\n onReset: () => this._cancelTransition(false),\n });\n\n private readonly _containerRef = createRef<HTMLElement>();\n private readonly _player = addAnimationController(this, this._containerRef);\n private readonly _slots = addSlotController(this, {\n slots: setSlots('close-button'),\n });\n\n private readonly _showAnimation = scaleInCenter({\n duration: 150,\n easing: EaseOut.Quad,\n });\n\n private readonly _hideAnimation = fadeOut({\n duration: 75,\n easing: EaseOut.Sine,\n });\n\n /** The queued, not yet committed transition, if a delay is in effect. */\n private _pending?: {\n timer: ReturnType<typeof setTimeout>;\n resolve: (value: boolean) => void;\n };\n\n /** A commit that finishes with a stale id has been superseded. */\n private _transitionId = 0;\n\n private _animating = false;\n\n /**\n * The state the tooltip is heading to. A show commits `open` upfront so the\n * popover renders; a hide commits it only once its animation is done.\n */\n private _requestedState = false;\n\n @query('igc-popover', true)\n private readonly _popover!: IgcPopoverComponent;\n\n @query('#arrow')\n private readonly _arrowElement!: HTMLElement;\n\n private get _arrowOffset(): number {\n const [side, alignment] = this.placement.split('-');\n\n if (!alignment) {\n return 0;\n }\n\n const offset = alignment === 'start' ? -ARROW_OFFSET : ARROW_OFFSET;\n const isHorizontal = side === 'left' || side === 'right';\n\n // Only the vertical placements follow the writing direction.\n return isHorizontal || isLTR(this) ? offset : -offset;\n }\n\n /**\n * Whether the consumer projected anything into the default slot. Queried\n * without flattening, which would report the rendered `message` - the slot's\n * own fallback content - as if it came from the consumer.\n */\n private get _hasProjectedContent(): boolean {\n return this._slots\n .getAssignedNodes('[default]')\n .some(\n (node) =>\n isElement(node) ||\n (node.nodeType === Node.TEXT_NODE &&\n Boolean(node.textContent?.trim()))\n );\n }\n\n /**\n * Whether the tooltip is showing.\n *\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public set open(value: boolean) {\n this._requestedState = value;\n this._controller.open = value;\n }\n\n public get open(): boolean {\n return this._controller.open;\n }\n\n /**\n * Whether to render an arrow indicator for the tooltip.\n *\n * @attr with-arrow\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'with-arrow' })\n public withArrow = false;\n\n /**\n * The offset of the tooltip from the anchor in pixels.\n *\n * @attr offset\n * @default 6\n */\n @property({ type: Number })\n public offset = 6;\n\n /**\n * Where to place the tooltip relative to its anchor element.\n *\n * @attr placement\n * @default bottom\n */\n @property()\n public placement: PopoverPlacement = 'bottom';\n\n /**\n * An element instance or an IDREF to use as the anchor for the tooltip.\n *\n * @remarks\n * Trying to bind to an IDREF that does not exist in the current DOM root will not work.\n * In such scenarios, it is better to get a DOM reference and pass it to the tooltip instance.\n *\n * @attr anchor\n */\n @property()\n public anchor?: Element | string;\n\n /**\n * Which event triggers will show the tooltip.\n * Expects a comma separated string of different event triggers.\n *\n * @attr show-triggers\n * @default pointerenter,focusin\n */\n @property({ attribute: 'show-triggers' })\n public set showTriggers(value: string) {\n this._controller.showTriggers = value;\n }\n\n public get showTriggers(): string {\n return this._controller.showTriggers;\n }\n\n /**\n * Which event triggers will hide the tooltip.\n * Expects a comma separated string of different event triggers.\n *\n * @attr hide-triggers\n * @default pointerleave,click,focusout\n */\n @property({ attribute: 'hide-triggers' })\n public set hideTriggers(value: string) {\n this._controller.hideTriggers = value;\n }\n\n public get hideTriggers(): string {\n return this._controller.hideTriggers;\n }\n\n /**\n * Specifies the number of milliseconds that should pass before showing the tooltip.\n *\n * @attr show-delay\n * @default 200\n */\n @property({ attribute: 'show-delay', type: Number })\n @coercedProperty(IgcTooltipComponent._delay)\n public showDelay = 200;\n\n /**\n * Specifies the number of milliseconds that should pass before hiding the tooltip.\n *\n * @attr hide-delay\n * @default 300\n */\n @property({ attribute: 'hide-delay', type: Number })\n @coercedProperty(IgcTooltipComponent._delay)\n public hideDelay = 300;\n\n /**\n * Specifies plain text as the tooltip content.\n *\n * @attr message\n */\n @property()\n public message = '';\n\n /**\n * Specifies if the tooltip remains visible until the user closes it via the close button or Esc key.\n *\n * @attr sticky\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public sticky = false;\n\n constructor() {\n super();\n addThemingController(this, all);\n\n addInternalsController(this, {\n initialARIA: {\n role: 'tooltip',\n ariaAtomic: 'true',\n ariaLive: 'polite',\n },\n aria: () => ({ role: this.sticky ? 'status' : 'tooltip' }),\n });\n }\n\n protected override firstUpdated(): void {\n if (this.open) {\n this.updateComplete.then(() => {\n this._player.playExclusive(this._showAnimation);\n });\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n // The arrow is created by the render that just committed, so the popover\n // can only be handed it afterwards.\n if (changedProperties.has('withArrow')) {\n this._popover.arrow = this.withArrow ? this._arrowElement : null;\n }\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('anchor')) {\n this._controller.resolveAnchor(this.anchor);\n }\n }\n\n private _emitEvent(name: keyof IgcTooltipComponentEventMap): boolean {\n return this.emitEvent(name, {\n cancelable: name === 'igcOpening' || name === 'igcClosing',\n });\n }\n\n /**\n * Invalidates the queued and/or running transition, resolving a delayed one\n * with `false`. The caller must settle the state it left behind.\n *\n * @returns Whether the aborted transition was mid-animation.\n */\n private _abortTransition(): boolean {\n const wasAnimating = this._animating;\n\n this._transitionId++;\n this._animating = false;\n\n clearTimeout(this._pending?.timer);\n this._pending?.resolve(false);\n this._pending = undefined;\n\n return wasAnimating;\n }\n\n /** Lands the tooltip on `state` after its transition was aborted. */\n private _settleState(state: boolean, wasAnimating: boolean): void {\n this._requestedState = state;\n\n if (wasAnimating) {\n this._player.cancelAll();\n this.inert = false;\n }\n\n // Via the accessor - it drives the reflection and the render.\n if (this.open !== state) {\n this.open = state;\n }\n }\n\n /**\n * Drops a queued or running transition and settles on `state`, by default\n * the state the tooltip is already committed to.\n */\n private _cancelTransition(state = this.open): void {\n this._settleState(state, this._abortTransition());\n }\n\n private async _applyTooltipState({\n show,\n withDelay = false,\n withEvents = false,\n }: TooltipStateOptions): Promise<boolean> {\n if (show === this._requestedState) {\n return false;\n }\n\n // Supersede whatever transition is queued or already running.\n const wasAnimating = this._abortTransition();\n this._requestedState = show;\n\n // A superseded transition that never animated leaves the tooltip already\n // in the requested state.\n if (show === this.open && !wasAnimating) {\n return false;\n }\n\n // Vetoed - the first guard proves we were at `!show`.\n if (withEvents && !this._emitEvent(show ? 'igcOpening' : 'igcClosing')) {\n this._settleState(!show, wasAnimating);\n return false;\n }\n\n const id = this._transitionId;\n\n const commitStateChange = async () => {\n if (show) {\n this.open = true;\n }\n\n // Make the tooltip ignore most interactions while the animation\n // is running. In the rare case when the popover overlaps its anchor\n // this will prevent looping between the anchor and tooltip handlers.\n this.inert = true;\n this._animating = true;\n\n const animationComplete = await this._player.playExclusive(\n show ? this._showAnimation : this._hideAnimation\n );\n\n // Superseded while animating - the newer transition owns the state now.\n if (id !== this._transitionId) {\n return false;\n }\n\n this._animating = false;\n this.inert = false;\n this.open = show;\n\n if (animationComplete && withEvents) {\n this._emitEvent(show ? 'igcOpened' : 'igcClosed');\n }\n\n return animationComplete;\n };\n\n if (!withDelay) {\n return commitStateChange();\n }\n\n return new Promise<boolean>((resolve) => {\n const timer = setTimeout(\n () => {\n this._pending = undefined;\n commitStateChange().then(resolve);\n },\n show ? this.showDelay : this.hideDelay\n );\n\n this._pending = { timer, resolve };\n });\n }\n\n /**\n * Shows the tooltip if not already showing.\n * If a target is provided, sets it as a transient anchor.\n *\n * @remarks\n * Bypasses `showDelay` and does not emit `igcOpening`/`igcOpened`.\n * Resolves with whether the tooltip transitioned to a shown state.\n */\n public async show(target?: Element | string): Promise<boolean> {\n if (target) {\n this._cancelTransition();\n this._controller.setAnchor(target, true);\n }\n\n return await this._applyTooltipState({ show: true });\n }\n\n /**\n * Hides the tooltip if not already hidden.\n *\n * @remarks\n * Bypasses `hideDelay` and does not emit `igcClosing`/`igcClosed`.\n * Resolves with whether the tooltip transitioned to a hidden state.\n */\n public async hide(): Promise<boolean> {\n return await this._applyTooltipState({ show: false });\n }\n\n /**\n * Toggles the tooltip between shown/hidden state.\n *\n * @remarks\n * Resolves with whether the tooltip transitioned to the opposite state.\n */\n public async toggle(): Promise<boolean> {\n return await (this.open ? this.hide() : this.show());\n }\n\n protected _showWithEvent(): Promise<boolean> {\n return this._applyTooltipState({\n show: true,\n withDelay: true,\n withEvents: true,\n });\n }\n\n protected _hideWithEvent(): Promise<boolean> {\n return this._applyTooltipState({\n show: false,\n withDelay: true,\n withEvents: true,\n });\n }\n\n private _showOnInteraction(): void {\n this._cancelTransition();\n this._showWithEvent();\n }\n\n private _hideOnInteraction(): void {\n if (!this.sticky) {\n this._hideWithEvent();\n }\n }\n\n /** Sticky mode close action - closes without waiting out `hideDelay`. */\n private _hideOnCloseClick(): void {\n this._applyTooltipState({ show: false, withEvents: true });\n }\n\n private async _hideOnEscape(): Promise<void> {\n // `hide()` is silent, so announce the close here - if there was one.\n if (await this.hide()) {\n this._emitEvent('igcClosed');\n }\n }\n\n protected override render() {\n const parts = {\n base: true,\n 'simple-text': !this._hasProjectedContent,\n };\n\n return html`\n <igc-popover\n .inert=${!this.open}\n .placement=${this.placement}\n .offset=${this.offset}\n .anchor=${this._controller.anchor ?? undefined}\n .arrowOffset=${this._arrowOffset}\n .shiftPadding=${8}\n ?open=${this.open}\n flip\n shift\n >\n <div ${ref(this._containerRef)} part=${partMap(parts)}>\n <slot>${this.message}</slot>\n ${\n this.sticky\n ? html`\n <slot name=\"close-button\" @click=${this._hideOnCloseClick}>\n <button\n type=\"button\"\n part=\"close-button\"\n aria-label=\"Close\"\n >\n <igc-icon\n name=\"input_clear\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </button>\n </slot>\n `\n : nothing\n }\n ${this.withArrow ? html`<div id=\"arrow\"></div>` : nothing}\n </div>\n </igc-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tooltip': IgcTooltipComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { EaseOut } from '#animations/easings.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeOut } from '#animations/presets/fade/index.js';\nimport { scaleInCenter } from '#animations/presets/scale/index.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport {\n coercedProperty,\n type CoercedPropertyConfig,\n} from '#internals/decorators/coerced-property.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { partMap } from '#internals/part-map.js';\nimport { isElement, isLTR } from '#internals/utils/dom.js';\nimport { asNumber } from '#internals/utils/math.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcPopoverComponent, {\n type PopoverPlacement,\n} from '../popover/popover.js';\nimport type { PopoverScrollStrategy } from '../types.js';\nimport { addTooltipController } from './controller.js';\nimport { styles as shared } from './themes/shared/tooltip.common.css.js';\nimport { all } from './themes/themes.js';\nimport { styles } from './themes/tooltip.base.css.js';\n\nexport interface IgcTooltipComponentEventMap {\n igcOpening: CustomEvent<void>;\n igcOpened: CustomEvent<void>;\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\n/** Additional offset applied to the arrow element for aligned placements. */\nconst ARROW_OFFSET = 8;\n\ntype TooltipStateOptions = {\n show: boolean;\n withDelay?: boolean;\n withEvents?: boolean;\n};\n\n/**\n * Provides a way to display supplementary information related to an element when a user interacts with it (e.g., hover, focus).\n * It offers features such as placement customization, delays, sticky mode, and animations.\n *\n * @element igc-tooltip\n *\n * @slot - Default slot of the tooltip component.\n * @slot close-button - Slot for custom sticky-mode close action (e.g., an icon/button).\n *\n * @csspart base - The wrapping container of the tooltip content.\n * @csspart simple-text - The container where the message property of the tooltip is rendered.\n * @csspart close-button - The default sticky-mode close button.\n *\n * @fires igcOpening - Emitted before the tooltip begins to open. Can be canceled to prevent opening.\n * @fires igcOpened - Emitted after the tooltip has successfully opened and is visible.\n * @fires igcClosing - Emitted before the tooltip begins to close. Can be canceled to prevent closing.\n * @fires igcClosed - Emitted after the tooltip has been fully removed from view.\n */\nexport default class IgcTooltipComponent extends EventEmitterMixin<\n IgcTooltipComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-tooltip';\n public static styles = [styles, shared];\n\n /** Shared config for the delay properties - a negative delay is no delay. */\n private static readonly _delay: CoercedPropertyConfig<\n number,\n IgcTooltipComponent\n > = {\n transform: ({ value }) => Math.max(0, asNumber(value)),\n };\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcTooltipComponent,\n IgcPopoverComponent,\n IgcIconComponent\n );\n }\n\n private readonly _controller = addTooltipController(this, {\n onShow: () => this._showOnInteraction(),\n onHide: () => this._hideOnInteraction(),\n onEscape: () => this._hideOnEscape(),\n onClick: () => this._cancelTransition(),\n // The controller dropped the anchor the tooltip is bound to.\n onReset: () => this._cancelTransition(false),\n });\n\n private readonly _containerRef = createRef<HTMLElement>();\n private readonly _player = addAnimationController(this, this._containerRef);\n private readonly _slots = addSlotController(this, {\n slots: setSlots('close-button'),\n });\n\n private readonly _showAnimation = scaleInCenter({\n duration: 150,\n easing: EaseOut.Quad,\n });\n\n private readonly _hideAnimation = fadeOut({\n duration: 75,\n easing: EaseOut.Sine,\n });\n\n /** The queued, not yet committed transition, if a delay is in effect. */\n private _pending?: {\n timer: ReturnType<typeof setTimeout>;\n resolve: (value: boolean) => void;\n };\n\n /** A commit that finishes with a stale id has been superseded. */\n private _transitionId = 0;\n\n private _animating = false;\n\n /**\n * The state the tooltip moves to. A show commits `open` first, so that the\n * popover renders. A hide commits it after the animation ends.\n */\n private _requestedState = false;\n\n @query('igc-popover', true)\n private readonly _popover!: IgcPopoverComponent;\n\n @query('#arrow')\n private readonly _arrowElement!: HTMLElement;\n\n private get _arrowOffset(): number {\n const [side, alignment] = this.placement.split('-');\n\n if (!alignment) {\n return 0;\n }\n\n const offset = alignment === 'start' ? -ARROW_OFFSET : ARROW_OFFSET;\n const isHorizontal = side === 'left' || side === 'right';\n\n // Only the vertical placements follow the writing direction.\n return isHorizontal || isLTR(this) ? offset : -offset;\n }\n\n /**\n * Whether the consumer put content into the default slot. The query does not\n * flatten, because a flattened query reports the rendered `message`, which is\n * the fallback content of the slot, as content of the consumer.\n */\n private get _hasProjectedContent(): boolean {\n return this._slots\n .getAssignedNodes('[default]')\n .some(\n (node) =>\n isElement(node) ||\n (node.nodeType === Node.TEXT_NODE &&\n Boolean(node.textContent?.trim()))\n );\n }\n\n /**\n * Whether the tooltip is showing.\n *\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public set open(value: boolean) {\n this._requestedState = value;\n this._controller.open = value;\n }\n\n public get open(): boolean {\n return this._controller.open;\n }\n\n /**\n * Whether to render an arrow indicator for the tooltip.\n *\n * @attr with-arrow\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'with-arrow' })\n public withArrow = false;\n\n /**\n * The offset of the tooltip from the anchor in pixels.\n *\n * @attr offset\n * @default 6\n */\n @property({ type: Number })\n public offset = 6;\n\n /**\n * Where to place the tooltip relative to its anchor element.\n *\n * @attr placement\n * @default bottom\n */\n @property()\n public placement: PopoverPlacement = 'bottom';\n\n /**\n * Sets the behavior of the tooltip when the parent container scrolls.\n *\n * If the value is `hide`, the tooltip hides while the anchor is fully out\n * of view. `hide` is the default value.\n *\n * If the value is `scroll`, the tooltip stays visible and anchored.\n *\n * If the value is `close`, the tooltip closes on each scroll. The tooltip\n * also closes if you set the `sticky` property. The Escape key behaves the\n * same way.\n * @attr scroll-strategy\n */\n @property({ attribute: 'scroll-strategy' })\n public scrollStrategy: PopoverScrollStrategy = 'hide';\n\n /**\n * An element instance or an IDREF to use as the anchor for the tooltip.\n *\n * @remarks\n * Trying to bind to an IDREF that does not exist in the current DOM root will not work.\n * In such scenarios, it is better to get a DOM reference and pass it to the tooltip instance.\n *\n * @attr anchor\n */\n @property()\n public anchor?: Element | string;\n\n /**\n * Which event triggers will show the tooltip.\n * Expects a comma separated string of different event triggers.\n *\n * @attr show-triggers\n * @default pointerenter,focusin\n */\n @property({ attribute: 'show-triggers' })\n public set showTriggers(value: string) {\n this._controller.showTriggers = value;\n }\n\n public get showTriggers(): string {\n return this._controller.showTriggers;\n }\n\n /**\n * Which event triggers will hide the tooltip.\n * Expects a comma separated string of different event triggers.\n *\n * @attr hide-triggers\n * @default pointerleave,click,focusout\n */\n @property({ attribute: 'hide-triggers' })\n public set hideTriggers(value: string) {\n this._controller.hideTriggers = value;\n }\n\n public get hideTriggers(): string {\n return this._controller.hideTriggers;\n }\n\n /**\n * Specifies the number of milliseconds that should pass before showing the tooltip.\n *\n * @attr show-delay\n * @default 200\n */\n @property({ attribute: 'show-delay', type: Number })\n @coercedProperty(IgcTooltipComponent._delay)\n public showDelay = 200;\n\n /**\n * Specifies the number of milliseconds that should pass before hiding the tooltip.\n *\n * @attr hide-delay\n * @default 300\n */\n @property({ attribute: 'hide-delay', type: Number })\n @coercedProperty(IgcTooltipComponent._delay)\n public hideDelay = 300;\n\n /**\n * Specifies plain text as the tooltip content.\n *\n * @attr message\n */\n @property()\n public message = '';\n\n /**\n * Specifies if the tooltip remains visible until the user closes it via the close button or Esc key.\n *\n * @attr sticky\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public sticky = false;\n\n constructor() {\n super();\n addThemingController(this, all);\n\n addInternalsController(this, {\n initialARIA: {\n role: 'tooltip',\n ariaAtomic: 'true',\n ariaLive: 'polite',\n },\n aria: () => ({ role: this.sticky ? 'status' : 'tooltip' }),\n });\n }\n\n protected override firstUpdated(): void {\n if (this.open) {\n this.updateComplete.then(() => {\n this._player.playExclusive(this._showAnimation);\n });\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n // The arrow is created by the render that just committed, so the popover\n // can only be handed it afterwards.\n if (changedProperties.has('withArrow')) {\n this._popover.arrow = this.withArrow ? this._arrowElement : null;\n }\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('anchor')) {\n this._controller.resolveAnchor(this.anchor);\n }\n }\n\n private _emitEvent(name: keyof IgcTooltipComponentEventMap): boolean {\n return this.emitEvent(name, {\n cancelable: name === 'igcOpening' || name === 'igcClosing',\n });\n }\n\n /**\n * Cancels the queued or running transition, and resolves a delayed one with\n * `false`. The caller must settle the state that stays behind. Returns\n * whether the cancelled transition was in its animation.\n */\n private _abortTransition(): boolean {\n const wasAnimating = this._animating;\n\n this._transitionId++;\n this._animating = false;\n\n clearTimeout(this._pending?.timer);\n this._pending?.resolve(false);\n this._pending = undefined;\n\n return wasAnimating;\n }\n\n /** Lands the tooltip on `state` after its transition was aborted. */\n private _settleState(state: boolean, wasAnimating: boolean): void {\n this._requestedState = state;\n\n if (wasAnimating) {\n this._player.cancelAll();\n this.inert = false;\n }\n\n // Via the accessor - it drives the reflection and the render.\n if (this.open !== state) {\n this.open = state;\n }\n }\n\n /**\n * Drops a queued or running transition and settles on `state`. The default is\n * the state the tooltip is committed to.\n */\n private _cancelTransition(state = this.open): void {\n this._settleState(state, this._abortTransition());\n }\n\n private async _applyTooltipState({\n show,\n withDelay = false,\n withEvents = false,\n }: TooltipStateOptions): Promise<boolean> {\n if (show === this._requestedState) {\n return false;\n }\n\n // Supersede whatever transition is queued or already running.\n const wasAnimating = this._abortTransition();\n this._requestedState = show;\n\n // A superseded transition that never animated leaves the tooltip already\n // in the requested state.\n if (show === this.open && !wasAnimating) {\n return false;\n }\n\n // Vetoed - the first guard proves we were at `!show`.\n if (withEvents && !this._emitEvent(show ? 'igcOpening' : 'igcClosing')) {\n this._settleState(!show, wasAnimating);\n return false;\n }\n\n const id = this._transitionId;\n\n const commitStateChange = async () => {\n if (show) {\n this.open = true;\n }\n\n // Make the tooltip ignore most interactions during the animation. If the\n // popover overlaps its anchor, this stops a loop between the anchor and the\n // tooltip handlers.\n this.inert = true;\n this._animating = true;\n\n const animationComplete = await this._player.playExclusive(\n show ? this._showAnimation : this._hideAnimation\n );\n\n // Superseded while animating - the newer transition owns the state now.\n if (id !== this._transitionId) {\n return false;\n }\n\n this._animating = false;\n this.inert = false;\n this.open = show;\n\n if (animationComplete && withEvents) {\n this._emitEvent(show ? 'igcOpened' : 'igcClosed');\n }\n\n return animationComplete;\n };\n\n if (!withDelay) {\n return commitStateChange();\n }\n\n return new Promise<boolean>((resolve) => {\n const timer = setTimeout(\n () => {\n this._pending = undefined;\n commitStateChange().then(resolve);\n },\n show ? this.showDelay : this.hideDelay\n );\n\n this._pending = { timer, resolve };\n });\n }\n\n /**\n * Shows the tooltip if not already showing.\n * If a target is provided, sets it as a transient anchor.\n *\n * @remarks\n * Bypasses `showDelay` and does not emit `igcOpening`/`igcOpened`.\n * Resolves with whether the tooltip transitioned to a shown state.\n */\n public async show(target?: Element | string): Promise<boolean> {\n if (target) {\n this._cancelTransition();\n this._controller.setAnchor(target, true);\n }\n\n return await this._applyTooltipState({ show: true });\n }\n\n /**\n * Hides the tooltip if not already hidden.\n *\n * @remarks\n * Bypasses `hideDelay` and does not emit `igcClosing`/`igcClosed`.\n * Resolves with whether the tooltip transitioned to a hidden state.\n */\n public async hide(): Promise<boolean> {\n return await this._applyTooltipState({ show: false });\n }\n\n /**\n * Toggles the tooltip between shown/hidden state.\n *\n * @remarks\n * Resolves with whether the tooltip transitioned to the opposite state.\n */\n public async toggle(): Promise<boolean> {\n return await (this.open ? this.hide() : this.show());\n }\n\n protected _showWithEvent(): Promise<boolean> {\n return this._applyTooltipState({\n show: true,\n withDelay: true,\n withEvents: true,\n });\n }\n\n protected _hideWithEvent(): Promise<boolean> {\n return this._applyTooltipState({\n show: false,\n withDelay: true,\n withEvents: true,\n });\n }\n\n private _showOnInteraction(): void {\n this._cancelTransition();\n this._showWithEvent();\n }\n\n private _hideOnInteraction(): void {\n if (!this.sticky) {\n this._hideWithEvent();\n }\n }\n\n /**\n * Closes the tooltip and emits the events. Ignores `hideDelay`, and also\n * `sticky`, which `_hideOnInteraction` obeys.\n *\n * @remarks\n * The close button of a sticky tooltip calls this method, as does the `close`\n * scroll strategy, which closes a sticky tooltip too.\n */\n private _hideImmediately(): void {\n this._applyTooltipState({ show: false, withEvents: true });\n }\n\n private async _hideOnEscape(): Promise<void> {\n // `hide()` is silent, so announce the close here - if there was one.\n if (await this.hide()) {\n this._emitEvent('igcClosed');\n }\n }\n\n protected override render() {\n const parts = {\n base: true,\n 'simple-text': !this._hasProjectedContent,\n };\n\n return html`\n <igc-popover\n .inert=${!this.open}\n .placement=${this.placement}\n .offset=${this.offset}\n .anchor=${this._controller.anchor ?? undefined}\n .arrowOffset=${this._arrowOffset}\n .scrollStrategy=${this.scrollStrategy}\n ?open=${this.open}\n flip\n @igcPopoverScrollClose=${this._hideImmediately}\n >\n <div ${ref(this._containerRef)} part=${partMap(parts)}>\n <slot>${this.message}</slot>\n ${\n this.sticky\n ? html`\n <slot name=\"close-button\" @click=${this._hideImmediately}>\n <button\n type=\"button\"\n part=\"close-button\"\n aria-label=\"Close\"\n >\n <igc-icon\n name=\"input_clear\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </button>\n </slot>\n `\n : nothing\n }\n ${this.withArrow ? html`<div id=\"arrow\"></div>` : nothing}\n </div>\n </igc-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tooltip': IgcTooltipComponent;\n }\n}\n"]}
|
|
@@ -97,8 +97,8 @@ export default class IgcTreeItemComponent extends LitElement {
|
|
|
97
97
|
protected updated(changed: PropertyValues<this>): void;
|
|
98
98
|
/**
|
|
99
99
|
* @hidden @internal
|
|
100
|
-
* Appends
|
|
101
|
-
*
|
|
100
|
+
* Appends each descendant to `out` in pre-order. One shared array keeps the
|
|
101
|
+
* flatten cost of a deep tree linear, not quadratic.
|
|
102
102
|
*/
|
|
103
103
|
_collectDescendants(out: IgcTreeItemComponent[]): void;
|
|
104
104
|
/**
|
|
@@ -119,10 +119,10 @@ export default class IgcTreeItemComponent extends LitElement {
|
|
|
119
119
|
/** Applies `value` as the tabIndex of every focusable element in the label. */
|
|
120
120
|
private _setTabbable;
|
|
121
121
|
/**
|
|
122
|
-
* The element
|
|
123
|
-
* first focusable element
|
|
124
|
-
* the
|
|
125
|
-
*
|
|
122
|
+
* The element that holds the `treeitem` semantics of the item: the host, or
|
|
123
|
+
* the first focusable element of the label slot. The keyboard then reaches
|
|
124
|
+
* what the screen reader announces. All ARIA state moves with the role,
|
|
125
|
+
* because a `role="none"` host ignores it.
|
|
126
126
|
*/
|
|
127
127
|
private get _ariaTarget();
|
|
128
128
|
private _syncAria;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-item.js","sourceRoot":"","sources":["../../../src/components/tree/tree-item.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { growVerIn, growVerOut } from '#animations/presets/grow/index.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { partMap } from '#internals/part-map.js';\nimport { scrollIntoView } from '#internals/utils/dom.js';\nimport {\n addSafeEventListener,\n getElementFromPath,\n} from '#internals/utils/events.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcCheckboxComponent from '../checkbox/checkbox.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcCircularProgressComponent from '../progress/circular-progress.js';\nimport { styles } from './themes/item.base.css.js';\nimport { all } from './themes/item.js';\nimport { styles as shared } from './themes/shared/item.common.css.js';\nimport {\n clearTreeItemAria,\n getTreeItemChildren,\n hasTreeItemChildren,\n setAriaState,\n TREE_ITEM_TAG,\n TREE_TAG,\n} from './tree.common.js';\nimport type IgcTreeComponent from './tree.js';\nimport type { IgcTreeNavigationService } from './tree.navigation.js';\nimport type { IgcTreeSelectionService } from './tree.selection.js';\n\n/**\n * The tree-item component represents a child item of the tree component or another tree item.\n *\n * @element igc-tree-item\n *\n * @slot - Renders nested tree-item component.\n * @slot label - Renders the tree item container.\n * @slot indicator - Renders the expand indicator container.\n * @slot loading - Renders the tree item loading indicator container.\n * @slot indentation - Renders the container (by default the space) before the tree item.\n *\n * @csspart wrapper - The wrapper for the tree item.\n * @csspart selected - Indicates selected state. Applies to `wrapper`.\n * @csspart focused - Indicates focused state. Applies to `wrapper`.\n * @csspart active - Indicates an active state. Applies to `wrapper`.\n * @csspart indicator - The expand indicator of the tree item.\n * @csspart label - The tree item content.\n * @csspart text - The tree item displayed text.\n * @csspart select - The checkbox of the tree item when selection is enabled.\n */\nexport default class IgcTreeItemComponent extends LitElement {\n public static readonly tagName = TREE_ITEM_TAG;\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcTreeItemComponent,\n IgcIconComponent,\n IgcCheckboxComponent,\n IgcCircularProgressComponent\n );\n }\n\n private _tabbableEl?: HTMLElement[];\n private _focusedProgrammatically = false;\n private _ariaDelegate?: HTMLElement;\n\n private _groupRef: Ref<HTMLElement> = createRef();\n\n private _animationPlayer = addAnimationController(this, this._groupRef);\n\n private _tree?: IgcTreeComponent;\n\n /* blazorSuppress */\n /**\n * A reference to the tree the item is a part of.\n */\n public get tree(): IgcTreeComponent | undefined {\n return this._tree;\n }\n\n /** The parent item of the current tree item (if any) */\n public parent: IgcTreeItemComponent | null = null;\n\n /** @hidden @internal */\n public init = false;\n\n @queryAssignedElements({ slot: 'label', flatten: true })\n private _contentList!: Array<HTMLElement>;\n\n private get _selectionService(): IgcTreeSelectionService | undefined {\n return this.tree?.selectionService;\n }\n\n private get _navService(): IgcTreeNavigationService | undefined {\n return this.tree?.navService;\n }\n\n private get _parts() {\n return {\n wrapper: true,\n selected: this.selected,\n focused: this._isFocused,\n active: this.active,\n };\n }\n\n /** Direct `igc-tree-item` light-DOM children. */\n private get _directChildren(): IgcTreeItemComponent[] {\n return getTreeItemChildren(this);\n }\n\n private get _allChildren(): IgcTreeItemComponent[] {\n const result: IgcTreeItemComponent[] = [];\n this._collectDescendants(result);\n return result;\n }\n\n /** @hidden @internal */\n @query('#wrapper')\n public wrapper!: HTMLElement;\n\n @state()\n private _isFocused = false;\n\n /** @hidden @internal */\n @state()\n public hasChildren = false;\n\n /** The depth of the item, relative to the root. */\n @state()\n public level = 0;\n\n /** @hidden @internal */\n @state()\n public indeterminate = false;\n\n /**\n * The tree item label.\n * @attr\n */\n @property()\n public label = '';\n\n /**\n * The tree item expansion state.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public expanded = false;\n\n /**\n * Marks the item as the tree's active item.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public active = false;\n\n /**\n * Get/Set whether the tree item is disabled. Disabled items are ignored for user interactions.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public disabled = false;\n\n /**\n * The tree item selection state.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public selected = false;\n\n /**\n * To be used for load-on-demand scenarios in order to specify whether the item is loading data.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public loading = false;\n\n /**\n * The value entry that the tree item is visualizing. Required for searching through items.\n * @type any\n * @attr\n */\n @property({ attribute: true })\n public value: any = undefined;\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addSafeEventListener(this, 'click', this._itemClick);\n addSafeEventListener(this, 'focus', this._onFocus);\n addSafeEventListener(this, 'blur', this._onBlur);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._tree =\n (this.closest(TREE_TAG) as IgcTreeComponent | null) ?? undefined;\n this.parent =\n this.parentElement?.tagName.toLowerCase() === TREE_ITEM_TAG\n ? (this.parentElement as IgcTreeItemComponent)\n : null;\n this.level = this.parent ? this.parent.level + 1 : 0;\n this._syncAria();\n this._activeChange();\n // if the item is not added/moved runtime\n if (this.init) {\n this._selectedChange();\n } else {\n // re-trigger the item selection state in order to update the collections within the selectionService\n // and to handle correctly the itemParents recursively to the top-most ancestor\n this._selectionService?.retriggerItemState(this);\n }\n this.init = false;\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._selectionService?.ensureStateOnItemDelete(this);\n this._navService?.handleItemDisconnect(this);\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n super.willUpdate(changed);\n\n if (changed.has('expanded')) {\n const oldValue = changed.get('expanded') as boolean;\n if (oldValue !== this.expanded) {\n this._expandedChange(oldValue);\n }\n }\n\n if (this.hasUpdated && changed.has('active')) {\n const oldValue = changed.get('active') as boolean;\n if (oldValue !== this.active) {\n this._activeChange();\n }\n }\n\n if (this.hasUpdated && changed.has('selected')) {\n const oldValue = changed.get('selected') as boolean;\n if (oldValue !== this.selected) {\n this._selectedChange();\n }\n }\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n // ARIA state lives outside the shadow template, so it is refreshed once per\n // update rather than tracked per property.\n this._syncAria();\n }\n\n /**\n * @hidden @internal\n * Appends every descendant (pre-order) into `out`. Accumulating into a single\n * array keeps a deep tree's flatten cost linear rather than quadratic.\n */\n public _collectDescendants(out: IgcTreeItemComponent[]): void {\n for (const child of getTreeItemChildren(this)) {\n out.push(child);\n child._collectDescendants(out);\n }\n }\n\n /**\n * The full path to the tree item, starting from the top-most ancestor.\n *\n * `parent` is read into a local first: reading `parent.path` twice per level\n * would make a single access cost 2^depth instead of `depth`.\n */\n public get path(): IgcTreeItemComponent[] {\n const parent = this.parent;\n return parent ? [...parent.path, this] : [this];\n }\n\n private _itemClick(event: MouseEvent): void {\n if (this.disabled || this !== getElementFromPath(this.tagName, event)) {\n return;\n }\n this.tabIndex = 0;\n if (this.tree?.toggleNodeOnClick && event.button === 0) {\n this.expanded ? this.collapseWithEvent() : this.expandWithEvent();\n }\n this._navService?.setFocusedAndActiveItem(this, true, true);\n }\n\n private _expandIndicatorClick(): void {\n if (this.disabled || this.tree?.toggleNodeOnClick) {\n return;\n }\n this.expanded ? this.collapseWithEvent() : this.expandWithEvent();\n }\n\n private _selectorClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.tree?.toggleNodeOnClick) {\n event.stopPropagation();\n }\n if (event.shiftKey) {\n this._selectionService?.selectMultipleItems(this);\n return;\n }\n this.selected\n ? this._selectionService?.deselectItem(this)\n : this._selectionService?.selectItem(this);\n }\n\n private _onFocus(): void {\n if (this.disabled) {\n return;\n }\n if (this._navService?.focusedItem !== this) {\n this._navService?.focusItem(this, false);\n scrollIntoView(this.wrapper, { behavior: 'smooth' });\n }\n if (this._tabbableEl?.length) {\n this._setTabbable(0);\n this._focusedProgrammatically = true;\n this._tabbableEl[0].focus();\n return;\n }\n this._isFocused = true;\n }\n\n private _onBlur(): void {\n this._isFocused = false;\n }\n\n private _onFocusIn(ev: Event): void {\n ev?.stopPropagation();\n if (!this.disabled) {\n // clicking directly over tabbable element when the item is not focused\n if (!this._focusedProgrammatically) {\n this._setTabbable(0);\n }\n this.removeAttribute('tabIndex');\n this._isFocused = true;\n this._focusedProgrammatically = false;\n }\n }\n\n private _onFocusOut(ev: Event): void {\n ev?.stopPropagation();\n this._isFocused = false;\n this._setTabbable(-1);\n\n if (this._navService?.focusedItem === this) {\n // called twice when clicking on already focused item with link (itemClick handler)\n this.setAttribute('tabindex', '0');\n }\n }\n\n private _labelChange(): void {\n const firstElement = this._contentList[0];\n const tabbableSelector =\n 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])';\n\n this._tabbableEl = [\n ...firstElement.querySelectorAll<HTMLElement>(tabbableSelector),\n ];\n if (firstElement.matches(tabbableSelector)) {\n this._tabbableEl.splice(0, 0, firstElement);\n }\n\n this._setTabbable(-1);\n this._syncAria();\n }\n\n /** Applies `value` as the tabIndex of every focusable element in the label. */\n private _setTabbable(value: number): void {\n for (const element of this._tabbableEl ?? []) {\n element.tabIndex = value;\n }\n }\n\n /**\n * The element carrying the item's `treeitem` semantics: the host, or the\n * first focusable element in the label slot when there is one, so that what\n * the user reaches by keyboard is what gets announced. All ARIA state has to\n * move with the role - left on a `role=\"none\"` host it would be ignored.\n */\n private get _ariaTarget(): HTMLElement {\n return this._tabbableEl?.length ? this._tabbableEl[0] : this;\n }\n\n private _syncAria(): void {\n const target = this._ariaTarget;\n const delegated = target !== this;\n\n if (this._ariaDelegate && this._ariaDelegate !== target) {\n clearTreeItemAria(this._ariaDelegate);\n this._ariaDelegate.removeAttribute('role');\n }\n this._ariaDelegate = delegated ? target : undefined;\n\n this.setAttribute('role', delegated ? 'none' : 'treeitem');\n if (delegated) {\n target.setAttribute('role', 'treeitem');\n clearTreeItemAria(this);\n }\n\n setAriaState(\n target,\n 'aria-expanded',\n this.hasChildren ? String(this.expanded) : null\n );\n setAriaState(\n target,\n 'aria-selected',\n this.tree && this.tree.selection !== 'none' ? String(this.selected) : null\n );\n setAriaState(target, 'aria-disabled', this.disabled ? 'true' : null);\n }\n\n private async _toggleAnimation(dir: 'open' | 'close') {\n const animation = dir === 'open' ? growVerIn : growVerOut;\n return this._animationPlayer.playExclusive(animation());\n }\n\n private _expandedChange(oldValue: boolean): void {\n if (!oldValue) {\n return;\n }\n // await for load on demand children\n Promise.resolve().then(() => {\n if (this._navService?.focusedItem !== this && !this._isFocused) {\n scrollIntoView(this._navService?.focusedItem?.wrapper, {\n behavior: 'smooth',\n });\n }\n });\n }\n\n private _activeChange(): void {\n if (\n (this.active && this._navService?.activeItem === this) ||\n !this.active\n ) {\n return;\n }\n if (this._navService) {\n this._navService.setActiveItem(this, false);\n }\n // Expand and scroll to the newly active item\n this.tree?.expandToItem(this);\n // Await for expanding\n Promise.resolve().then(() => {\n scrollIntoView(this.wrapper, { behavior: 'smooth' });\n });\n }\n\n private _selectedChange(): void {\n if (this.selected && !this._selectionService?.isItemSelected(this)) {\n this._selectionService?.selectItemsWithNoEvent([this]);\n }\n if (!this.selected && this._selectionService?.isItemSelected(this)) {\n this._selectionService?.deselectItemsWithNoEvent([this]);\n }\n }\n\n private _handleChange(): void {\n this.hasChildren = hasTreeItemChildren(this);\n }\n\n /* blazorSuppress */\n /**\n * Returns a collection of child items.\n * If the parameter value is true returns all tree item's direct children,\n * otherwise - only the direct children.\n */\n public getChildren(\n options: { flatten: boolean } = { flatten: false }\n ): IgcTreeItemComponent[] {\n return options.flatten ? this._allChildren : this._directChildren;\n }\n\n /**\n * @hidden @internal\n * Expands the tree item.\n */\n public async expandWithEvent() {\n if (this.expanded) {\n return;\n }\n const args = {\n detail: this,\n cancelable: true,\n };\n\n const allowed = this.tree?.emitEvent('igcItemExpanding', args);\n\n if (!allowed) {\n return;\n }\n\n if (this.tree?.singleBranchExpand) {\n const ancestors = new Set(this.path.slice(0, -1));\n for (const item of this.tree.items) {\n if (!ancestors.has(item)) {\n item.collapseWithEvent();\n }\n }\n }\n\n this.expanded = true;\n if (await this._toggleAnimation('open')) {\n this.tree?.emitEvent('igcItemExpanded', { detail: this });\n }\n }\n\n /**\n * @hidden @internal\n * Collapses the tree item.\n */\n public async collapseWithEvent() {\n if (!this.expanded) {\n return;\n }\n const args = {\n detail: this,\n cancelable: true,\n };\n\n const allowed = this.tree?.emitEvent('igcItemCollapsing', args);\n\n if (!allowed) {\n return;\n }\n\n this.expanded = false;\n if (await this._toggleAnimation('close')) {\n this.tree?.emitEvent('igcItemCollapsed', { detail: this });\n }\n }\n\n /** Toggles tree item expansion state. */\n public toggle(): void {\n this.expanded = !this.expanded;\n }\n\n /** Expands the tree item. */\n public expand(): void {\n this.expanded = true;\n }\n\n /** Collapses the tree item. */\n public collapse(): void {\n this.expanded = false;\n }\n\n protected override render() {\n return html`\n <div id=\"wrapper\" part=${partMap(this._parts)}>\n <div\n style=\"width: calc(${this.level} * var(--igc-tree-indentation-size))\"\n part=\"indentation\"\n aria-hidden=\"true\"\n >\n <slot name=\"indentation\"></slot>\n </div>\n <div part=\"indicator\" aria-hidden=\"true\">\n ${\n this.loading\n ? html`\n <slot name=\"loading\">\n <igc-circular-progress\n indeterminate\n ></igc-circular-progress>\n </slot>\n `\n : html`\n <slot name=\"indicator\" @click=${this._expandIndicatorClick}>\n ${\n this.hasChildren\n ? html`\n <igc-icon\n aria-label=${ifDefined(\n this.expanded\n ? this.tree?.resourceStrings.collapse\n : this.tree?.resourceStrings.expand\n )}\n name=${\n this.expanded ? 'tree_collapse' : 'tree_expand'\n }\n collection=\"default\"\n >\n </igc-icon>\n `\n : ''\n }\n </slot>\n `\n }\n </div>\n ${\n this.tree?.selection !== 'none'\n ? html`\n <div part=\"select\" aria-hidden=\"true\">\n <igc-checkbox\n tabindex=\"-1\"\n @click=${this._selectorClick}\n .checked=${this.selected}\n .indeterminate=${this.indeterminate}\n .disabled=${this.disabled}\n >\n </igc-checkbox>\n </div>\n `\n : ''\n }\n <div part=\"label\">\n <slot\n name=\"label\"\n @slotchange=${this._labelChange}\n @focusin=${this._onFocusIn}\n @focusout=${this._onFocusOut}\n >\n <span part=\"text\">${this.label}</span>\n </slot>\n </div>\n </div>\n <div ${ref(this._groupRef)} role=\"group\" .inert=${!this.expanded}>\n <slot @slotchange=${this._handleChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tree-item': IgcTreeItemComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tree-item.js","sourceRoot":"","sources":["../../../src/components/tree/tree-item.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport {\n property,\n query,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { growVerIn, growVerOut } from '#animations/presets/grow/index.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { partMap } from '#internals/part-map.js';\nimport { scrollIntoView } from '#internals/utils/dom.js';\nimport {\n addSafeEventListener,\n getElementFromPath,\n} from '#internals/utils/events.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcCheckboxComponent from '../checkbox/checkbox.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcCircularProgressComponent from '../progress/circular-progress.js';\nimport { styles } from './themes/item.base.css.js';\nimport { all } from './themes/item.js';\nimport { styles as shared } from './themes/shared/item.common.css.js';\nimport {\n clearTreeItemAria,\n getTreeItemChildren,\n hasTreeItemChildren,\n setAriaState,\n TREE_ITEM_TAG,\n TREE_TAG,\n} from './tree.common.js';\nimport type IgcTreeComponent from './tree.js';\nimport type { IgcTreeNavigationService } from './tree.navigation.js';\nimport type { IgcTreeSelectionService } from './tree.selection.js';\n\n/**\n * The tree-item component represents a child item of the tree component or another tree item.\n *\n * @element igc-tree-item\n *\n * @slot - Renders nested tree-item component.\n * @slot label - Renders the tree item container.\n * @slot indicator - Renders the expand indicator container.\n * @slot loading - Renders the tree item loading indicator container.\n * @slot indentation - Renders the container (by default the space) before the tree item.\n *\n * @csspart wrapper - The wrapper for the tree item.\n * @csspart selected - Indicates selected state. Applies to `wrapper`.\n * @csspart focused - Indicates focused state. Applies to `wrapper`.\n * @csspart active - Indicates an active state. Applies to `wrapper`.\n * @csspart indicator - The expand indicator of the tree item.\n * @csspart label - The tree item content.\n * @csspart text - The tree item displayed text.\n * @csspart select - The checkbox of the tree item when selection is enabled.\n */\nexport default class IgcTreeItemComponent extends LitElement {\n public static readonly tagName = TREE_ITEM_TAG;\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcTreeItemComponent,\n IgcIconComponent,\n IgcCheckboxComponent,\n IgcCircularProgressComponent\n );\n }\n\n private _tabbableEl?: HTMLElement[];\n private _focusedProgrammatically = false;\n private _ariaDelegate?: HTMLElement;\n\n private _groupRef: Ref<HTMLElement> = createRef();\n\n private _animationPlayer = addAnimationController(this, this._groupRef);\n\n private _tree?: IgcTreeComponent;\n\n /* blazorSuppress */\n /**\n * A reference to the tree the item is a part of.\n */\n public get tree(): IgcTreeComponent | undefined {\n return this._tree;\n }\n\n /** The parent item of the current tree item (if any) */\n public parent: IgcTreeItemComponent | null = null;\n\n /** @hidden @internal */\n public init = false;\n\n @queryAssignedElements({ slot: 'label', flatten: true })\n private _contentList!: Array<HTMLElement>;\n\n private get _selectionService(): IgcTreeSelectionService | undefined {\n return this.tree?.selectionService;\n }\n\n private get _navService(): IgcTreeNavigationService | undefined {\n return this.tree?.navService;\n }\n\n private get _parts() {\n return {\n wrapper: true,\n selected: this.selected,\n focused: this._isFocused,\n active: this.active,\n };\n }\n\n /** Direct `igc-tree-item` light-DOM children. */\n private get _directChildren(): IgcTreeItemComponent[] {\n return getTreeItemChildren(this);\n }\n\n private get _allChildren(): IgcTreeItemComponent[] {\n const result: IgcTreeItemComponent[] = [];\n this._collectDescendants(result);\n return result;\n }\n\n /** @hidden @internal */\n @query('#wrapper')\n public wrapper!: HTMLElement;\n\n @state()\n private _isFocused = false;\n\n /** @hidden @internal */\n @state()\n public hasChildren = false;\n\n /** The depth of the item, relative to the root. */\n @state()\n public level = 0;\n\n /** @hidden @internal */\n @state()\n public indeterminate = false;\n\n /**\n * The tree item label.\n * @attr\n */\n @property()\n public label = '';\n\n /**\n * The tree item expansion state.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public expanded = false;\n\n /**\n * Marks the item as the tree's active item.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public active = false;\n\n /**\n * Get/Set whether the tree item is disabled. Disabled items are ignored for user interactions.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public disabled = false;\n\n /**\n * The tree item selection state.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public selected = false;\n\n /**\n * To be used for load-on-demand scenarios in order to specify whether the item is loading data.\n * @attr\n */\n @property({ reflect: true, type: Boolean })\n public loading = false;\n\n /**\n * The value entry that the tree item is visualizing. Required for searching through items.\n * @type any\n * @attr\n */\n @property({ attribute: true })\n public value: any = undefined;\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addSafeEventListener(this, 'click', this._itemClick);\n addSafeEventListener(this, 'focus', this._onFocus);\n addSafeEventListener(this, 'blur', this._onBlur);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._tree =\n (this.closest(TREE_TAG) as IgcTreeComponent | null) ?? undefined;\n this.parent =\n this.parentElement?.tagName.toLowerCase() === TREE_ITEM_TAG\n ? (this.parentElement as IgcTreeItemComponent)\n : null;\n this.level = this.parent ? this.parent.level + 1 : 0;\n this._syncAria();\n this._activeChange();\n // if the item is not added/moved runtime\n if (this.init) {\n this._selectedChange();\n } else {\n // re-trigger the item selection state in order to update the collections within the selectionService\n // and to handle correctly the itemParents recursively to the top-most ancestor\n this._selectionService?.retriggerItemState(this);\n }\n this.init = false;\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._selectionService?.ensureStateOnItemDelete(this);\n this._navService?.handleItemDisconnect(this);\n }\n\n protected override willUpdate(changed: PropertyValues<this>): void {\n super.willUpdate(changed);\n\n if (changed.has('expanded')) {\n const oldValue = changed.get('expanded') as boolean;\n if (oldValue !== this.expanded) {\n this._expandedChange(oldValue);\n }\n }\n\n if (this.hasUpdated && changed.has('active')) {\n const oldValue = changed.get('active') as boolean;\n if (oldValue !== this.active) {\n this._activeChange();\n }\n }\n\n if (this.hasUpdated && changed.has('selected')) {\n const oldValue = changed.get('selected') as boolean;\n if (oldValue !== this.selected) {\n this._selectedChange();\n }\n }\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n super.updated(changed);\n\n // ARIA state lives outside the shadow template, so it is refreshed once per\n // update rather than tracked per property.\n this._syncAria();\n }\n\n /**\n * @hidden @internal\n * Appends each descendant to `out` in pre-order. One shared array keeps the\n * flatten cost of a deep tree linear, not quadratic.\n */\n public _collectDescendants(out: IgcTreeItemComponent[]): void {\n for (const child of getTreeItemChildren(this)) {\n out.push(child);\n child._collectDescendants(out);\n }\n }\n\n /**\n * The full path to the tree item, starting from the top-most ancestor.\n *\n * `parent` is read into a local first: reading `parent.path` twice per level\n * would make a single access cost 2^depth instead of `depth`.\n */\n public get path(): IgcTreeItemComponent[] {\n const parent = this.parent;\n return parent ? [...parent.path, this] : [this];\n }\n\n private _itemClick(event: MouseEvent): void {\n if (this.disabled || this !== getElementFromPath(this.tagName, event)) {\n return;\n }\n this.tabIndex = 0;\n if (this.tree?.toggleNodeOnClick && event.button === 0) {\n this.expanded ? this.collapseWithEvent() : this.expandWithEvent();\n }\n this._navService?.setFocusedAndActiveItem(this, true, true);\n }\n\n private _expandIndicatorClick(): void {\n if (this.disabled || this.tree?.toggleNodeOnClick) {\n return;\n }\n this.expanded ? this.collapseWithEvent() : this.expandWithEvent();\n }\n\n private _selectorClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.tree?.toggleNodeOnClick) {\n event.stopPropagation();\n }\n if (event.shiftKey) {\n this._selectionService?.selectMultipleItems(this);\n return;\n }\n this.selected\n ? this._selectionService?.deselectItem(this)\n : this._selectionService?.selectItem(this);\n }\n\n private _onFocus(): void {\n if (this.disabled) {\n return;\n }\n if (this._navService?.focusedItem !== this) {\n this._navService?.focusItem(this, false);\n scrollIntoView(this.wrapper, { behavior: 'smooth' });\n }\n if (this._tabbableEl?.length) {\n this._setTabbable(0);\n this._focusedProgrammatically = true;\n this._tabbableEl[0].focus();\n return;\n }\n this._isFocused = true;\n }\n\n private _onBlur(): void {\n this._isFocused = false;\n }\n\n private _onFocusIn(ev: Event): void {\n ev?.stopPropagation();\n if (!this.disabled) {\n // clicking directly over tabbable element when the item is not focused\n if (!this._focusedProgrammatically) {\n this._setTabbable(0);\n }\n this.removeAttribute('tabIndex');\n this._isFocused = true;\n this._focusedProgrammatically = false;\n }\n }\n\n private _onFocusOut(ev: Event): void {\n ev?.stopPropagation();\n this._isFocused = false;\n this._setTabbable(-1);\n\n if (this._navService?.focusedItem === this) {\n // called twice when clicking on already focused item with link (itemClick handler)\n this.setAttribute('tabindex', '0');\n }\n }\n\n private _labelChange(): void {\n const firstElement = this._contentList[0];\n const tabbableSelector =\n 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"])';\n\n this._tabbableEl = [\n ...firstElement.querySelectorAll<HTMLElement>(tabbableSelector),\n ];\n if (firstElement.matches(tabbableSelector)) {\n this._tabbableEl.splice(0, 0, firstElement);\n }\n\n this._setTabbable(-1);\n this._syncAria();\n }\n\n /** Applies `value` as the tabIndex of every focusable element in the label. */\n private _setTabbable(value: number): void {\n for (const element of this._tabbableEl ?? []) {\n element.tabIndex = value;\n }\n }\n\n /**\n * The element that holds the `treeitem` semantics of the item: the host, or\n * the first focusable element of the label slot. The keyboard then reaches\n * what the screen reader announces. All ARIA state moves with the role,\n * because a `role=\"none\"` host ignores it.\n */\n private get _ariaTarget(): HTMLElement {\n return this._tabbableEl?.length ? this._tabbableEl[0] : this;\n }\n\n private _syncAria(): void {\n const target = this._ariaTarget;\n const delegated = target !== this;\n\n if (this._ariaDelegate && this._ariaDelegate !== target) {\n clearTreeItemAria(this._ariaDelegate);\n this._ariaDelegate.removeAttribute('role');\n }\n this._ariaDelegate = delegated ? target : undefined;\n\n this.setAttribute('role', delegated ? 'none' : 'treeitem');\n if (delegated) {\n target.setAttribute('role', 'treeitem');\n clearTreeItemAria(this);\n }\n\n setAriaState(\n target,\n 'aria-expanded',\n this.hasChildren ? String(this.expanded) : null\n );\n setAriaState(\n target,\n 'aria-selected',\n this.tree && this.tree.selection !== 'none' ? String(this.selected) : null\n );\n setAriaState(target, 'aria-disabled', this.disabled ? 'true' : null);\n }\n\n private async _toggleAnimation(dir: 'open' | 'close') {\n const animation = dir === 'open' ? growVerIn : growVerOut;\n return this._animationPlayer.playExclusive(animation());\n }\n\n private _expandedChange(oldValue: boolean): void {\n if (!oldValue) {\n return;\n }\n // await for load on demand children\n Promise.resolve().then(() => {\n if (this._navService?.focusedItem !== this && !this._isFocused) {\n scrollIntoView(this._navService?.focusedItem?.wrapper, {\n behavior: 'smooth',\n });\n }\n });\n }\n\n private _activeChange(): void {\n if (\n (this.active && this._navService?.activeItem === this) ||\n !this.active\n ) {\n return;\n }\n if (this._navService) {\n this._navService.setActiveItem(this, false);\n }\n // Expand and scroll to the newly active item\n this.tree?.expandToItem(this);\n // Await for expanding\n Promise.resolve().then(() => {\n scrollIntoView(this.wrapper, { behavior: 'smooth' });\n });\n }\n\n private _selectedChange(): void {\n if (this.selected && !this._selectionService?.isItemSelected(this)) {\n this._selectionService?.selectItemsWithNoEvent([this]);\n }\n if (!this.selected && this._selectionService?.isItemSelected(this)) {\n this._selectionService?.deselectItemsWithNoEvent([this]);\n }\n }\n\n private _handleChange(): void {\n this.hasChildren = hasTreeItemChildren(this);\n }\n\n /* blazorSuppress */\n /**\n * Returns a collection of child items.\n * If the parameter value is true returns all tree item's direct children,\n * otherwise - only the direct children.\n */\n public getChildren(\n options: { flatten: boolean } = { flatten: false }\n ): IgcTreeItemComponent[] {\n return options.flatten ? this._allChildren : this._directChildren;\n }\n\n /**\n * @hidden @internal\n * Expands the tree item.\n */\n public async expandWithEvent() {\n if (this.expanded) {\n return;\n }\n const args = {\n detail: this,\n cancelable: true,\n };\n\n const allowed = this.tree?.emitEvent('igcItemExpanding', args);\n\n if (!allowed) {\n return;\n }\n\n if (this.tree?.singleBranchExpand) {\n const ancestors = new Set(this.path.slice(0, -1));\n for (const item of this.tree.items) {\n if (!ancestors.has(item)) {\n item.collapseWithEvent();\n }\n }\n }\n\n this.expanded = true;\n if (await this._toggleAnimation('open')) {\n this.tree?.emitEvent('igcItemExpanded', { detail: this });\n }\n }\n\n /**\n * @hidden @internal\n * Collapses the tree item.\n */\n public async collapseWithEvent() {\n if (!this.expanded) {\n return;\n }\n const args = {\n detail: this,\n cancelable: true,\n };\n\n const allowed = this.tree?.emitEvent('igcItemCollapsing', args);\n\n if (!allowed) {\n return;\n }\n\n this.expanded = false;\n if (await this._toggleAnimation('close')) {\n this.tree?.emitEvent('igcItemCollapsed', { detail: this });\n }\n }\n\n /** Toggles tree item expansion state. */\n public toggle(): void {\n this.expanded = !this.expanded;\n }\n\n /** Expands the tree item. */\n public expand(): void {\n this.expanded = true;\n }\n\n /** Collapses the tree item. */\n public collapse(): void {\n this.expanded = false;\n }\n\n protected override render() {\n return html`\n <div id=\"wrapper\" part=${partMap(this._parts)}>\n <div\n style=\"width: calc(${this.level} * var(--igc-tree-indentation-size))\"\n part=\"indentation\"\n aria-hidden=\"true\"\n >\n <slot name=\"indentation\"></slot>\n </div>\n <div part=\"indicator\" aria-hidden=\"true\">\n ${\n this.loading\n ? html`\n <slot name=\"loading\">\n <igc-circular-progress\n indeterminate\n ></igc-circular-progress>\n </slot>\n `\n : html`\n <slot name=\"indicator\" @click=${this._expandIndicatorClick}>\n ${\n this.hasChildren\n ? html`\n <igc-icon\n aria-label=${ifDefined(\n this.expanded\n ? this.tree?.resourceStrings.collapse\n : this.tree?.resourceStrings.expand\n )}\n name=${\n this.expanded ? 'tree_collapse' : 'tree_expand'\n }\n collection=\"default\"\n >\n </igc-icon>\n `\n : ''\n }\n </slot>\n `\n }\n </div>\n ${\n this.tree?.selection !== 'none'\n ? html`\n <div part=\"select\" aria-hidden=\"true\">\n <igc-checkbox\n tabindex=\"-1\"\n @click=${this._selectorClick}\n .checked=${this.selected}\n .indeterminate=${this.indeterminate}\n .disabled=${this.disabled}\n >\n </igc-checkbox>\n </div>\n `\n : ''\n }\n <div part=\"label\">\n <slot\n name=\"label\"\n @slotchange=${this._labelChange}\n @focusin=${this._onFocusIn}\n @focusout=${this._onFocusOut}\n >\n <span part=\"text\">${this.label}</span>\n </slot>\n </div>\n </div>\n <div ${ref(this._groupRef)} role=\"group\" .inert=${!this.expanded}>\n <slot @slotchange=${this._handleChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-tree-item': IgcTreeItemComponent;\n }\n}\n"]}
|
|
@@ -2,13 +2,12 @@ import type IgcTreeItemComponent from './tree-item.js';
|
|
|
2
2
|
import type IgcTreeComponent from './tree.js';
|
|
3
3
|
import type { IgcTreeSelectionService } from './tree.selection.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* for the tree.
|
|
5
|
+
* Keyboard navigation and active/focused item tracking for the tree.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* The navigable set is not cached. A keypress derives it with a lazy walk that
|
|
9
|
+
* skips collapsed branches, so an item mount, expand or disable does no work,
|
|
10
|
+
* and a caller that needs one item stops at that item.
|
|
12
11
|
*
|
|
13
12
|
* @hidden @internal
|
|
14
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.navigation.js","sourceRoot":"","sources":["../../../src/components/tree/tree.navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n endKey,\n enterKey,\n homeKey,\n shiftKey,\n spaceBar,\n} from '#internals/controllers/key-bindings.js';\nimport { isLTR, scrollIntoView } from '#internals/utils/dom.js';\nimport type IgcTreeItemComponent from './tree-item.js';\nimport type IgcTreeComponent from './tree.js';\nimport type { IgcTreeSelectionService } from './tree.selection.js';\n\n/**\n * Handles roving-tabindex keyboard navigation and active/focused item tracking\n * for the tree.\n *\n * The navigable set is never cached. It is derived on demand, only on an actual\n * keypress, by a lazy walk that prunes collapsed branches - so no work happens\n * on item mount/expand/disable, and callers needing a single item stop as soon\n * as they have it.\n *\n * @hidden @internal\n */\nexport class IgcTreeNavigationService {\n private _focusedItem: IgcTreeItemComponent | null = null;\n private _activeItem: IgcTreeItemComponent | null = null;\n\n constructor(\n private readonly tree: IgcTreeComponent,\n private readonly selection: IgcTreeSelectionService\n ) {\n addKeybindings(tree, {\n bindingDefaults: { preventDefault: true, repeat: true },\n })\n .set(homeKey, () => this.setFocusedAndActiveItem(this._firstNavigable()))\n .set(endKey, () => this.setFocusedAndActiveItem(this._lastNavigable()))\n .set(arrowLeft, this._arrowLeft)\n .set(arrowRight, this._arrowRight)\n .set(arrowUp, () => this._arrowVertical(-1, true))\n .set(arrowDown, () => this._arrowVertical(1, true))\n .set([ctrlKey, arrowUp], () => this._arrowVertical(-1, false))\n .set([ctrlKey, arrowDown], () => this._arrowVertical(1, false))\n .set('*', this._asterisk)\n .set(spaceBar, () => this._space(false))\n .set([shiftKey, spaceBar], () => this._space(true))\n .set(enterKey, this._enter, { preventDefault: false });\n }\n\n public get focusedItem(): IgcTreeItemComponent | null {\n return this._focusedItem;\n }\n\n public get activeItem(): IgcTreeItemComponent | null {\n return this._activeItem;\n }\n\n public focusItem(\n value: IgcTreeItemComponent | null,\n shouldFocus = true\n ): void {\n if (this._focusedItem === value) {\n return;\n }\n\n this._focusedItem?.removeAttribute('tabindex');\n this._focusedItem = value;\n\n if (this._focusedItem && shouldFocus) {\n this._focusedItem.tabIndex = 0;\n this._focusedItem.focus({ preventScroll: true });\n scrollIntoView(this._focusedItem.wrapper);\n }\n }\n\n public setActiveItem(\n value: IgcTreeItemComponent | null,\n shouldEmit = true\n ): void {\n if (this._activeItem === value) {\n return;\n }\n\n if (this._activeItem) {\n this._activeItem.active = false;\n }\n\n this._activeItem = value;\n\n if (this._activeItem) {\n this._activeItem.active = true;\n if (shouldEmit) {\n this.tree.emitEvent('igcActiveItem', { detail: this._activeItem });\n }\n }\n }\n\n /** Sets the item as focused (and optionally active). */\n public setFocusedAndActiveItem(\n item: IgcTreeItemComponent | undefined,\n isActive = true,\n shouldFocus = true\n ): void {\n if (!item) {\n return;\n }\n if (isActive) {\n this.setActiveItem(item);\n }\n this.focusItem(item, shouldFocus);\n }\n\n /** Called by a tree item on `disconnectedCallback`. */\n public handleItemDisconnect(item: IgcTreeItemComponent): void {\n if (this._activeItem === item) {\n this.setActiveItem(null);\n }\n if (this._focusedItem === item) {\n this.focusItem(null, false);\n const next = this.tree.items.find((i) => !i.disabled);\n if (next) {\n next.tabIndex = 0;\n this.focusItem(next, false);\n }\n }\n }\n\n //#region Visible/navigable item resolution (computed on demand, not cached)\n\n /**\n * Yields the keyboard-navigable items in document order.\n *\n * A disabled item is skipped but does not hide its subtree: only a\n * *collapsed* ancestor removes descendants from the navigable set.\n */\n private *_navigable(\n items: IgcTreeItemComponent[] = this.tree._rootItems\n ): Generator<IgcTreeItemComponent, undefined> {\n for (const item of items) {\n if (!item.disabled) {\n yield item;\n }\n if (item.expanded) {\n yield* this._navigable(item.getChildren());\n }\n }\n }\n\n private _firstNavigable(): IgcTreeItemComponent | undefined {\n return this._navigable().next().value;\n }\n\n private _lastNavigable(): IgcTreeItemComponent | undefined {\n let last: IgcTreeItemComponent | undefined;\n for (const item of this._navigable()) {\n last = item;\n }\n return last;\n }\n\n /**\n * Next/previous navigable item relative to `item`, or `item` itself if there\n * isn't one.\n */\n private _adjacent(\n item: IgcTreeItemComponent,\n dir: 1 | -1\n ): IgcTreeItemComponent {\n const items = this._navigable();\n let first: IgcTreeItemComponent | undefined;\n let previous: IgcTreeItemComponent | undefined;\n\n for (const current of items) {\n first ??= current;\n\n if (current === item) {\n if (dir === -1) {\n return previous ?? item;\n }\n const next = items.next();\n return next.done ? item : next.value;\n }\n previous = current;\n }\n\n // `item` is not navigable itself - it can be focused while an ancestor is\n // collapsed out from under it. Going forward that lands on the first\n // navigable item; going backwards it stays put.\n return (dir === 1 ? first : undefined) ?? item;\n }\n\n //#endregion\n\n //#region Keyboard handlers\n\n private readonly _arrowLeft = (): void => {\n isLTR(this.tree)\n ? this._collapseOrGoToParent()\n : this._expandOrGoToFirstChild();\n };\n\n private readonly _arrowRight = (): void => {\n isLTR(this.tree)\n ? this._expandOrGoToFirstChild()\n : this._collapseOrGoToParent();\n };\n\n private _collapseOrGoToParent(): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n if (item.expanded && item.getChildren().length) {\n this.setActiveItem(item);\n item.collapseWithEvent();\n return;\n }\n if (item.parent && !item.parent.disabled) {\n this.setFocusedAndActiveItem(item.parent);\n }\n }\n\n private _expandOrGoToFirstChild(): void {\n const item = this._focusedItem;\n if (!item || item.getChildren().length === 0) {\n return;\n }\n if (!item.expanded) {\n this.setActiveItem(item);\n item.expandWithEvent();\n return;\n }\n const firstChild = item.getChildren().find((child) => !child.disabled);\n if (firstChild) {\n this.setFocusedAndActiveItem(firstChild);\n }\n }\n\n private _arrowVertical(dir: 1 | -1, shouldActivate: boolean): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n const next = this._adjacent(item, dir);\n if (next === item) {\n return;\n }\n this.setFocusedAndActiveItem(next, shouldActivate);\n }\n\n private readonly _asterisk = (): void => {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n const siblings = item.parent\n ? item.parent.getChildren()\n : this.tree._rootItems;\n\n for (const sibling of siblings) {\n if (!sibling.disabled && !sibling.expanded && sibling.hasChildren) {\n sibling.expandWithEvent();\n }\n }\n };\n\n private _space(shiftKey: boolean): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n\n this.setActiveItem(item);\n\n if (this.tree.selection === 'none') {\n return;\n }\n\n if (shiftKey) {\n this.selection.selectMultipleItems(item);\n return;\n }\n\n item.selected\n ? this.selection.deselectItem(item)\n : this.selection.selectItem(item);\n }\n\n private readonly _enter = (): void => {\n if (this._focusedItem) {\n this.setActiveItem(this._focusedItem);\n }\n };\n\n //#endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tree.navigation.js","sourceRoot":"","sources":["../../../src/components/tree/tree.navigation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n endKey,\n enterKey,\n homeKey,\n shiftKey,\n spaceBar,\n} from '#internals/controllers/key-bindings.js';\nimport { isLTR, scrollIntoView } from '#internals/utils/dom.js';\nimport type IgcTreeItemComponent from './tree-item.js';\nimport type IgcTreeComponent from './tree.js';\nimport type { IgcTreeSelectionService } from './tree.selection.js';\n\n/**\n * Keyboard navigation and active/focused item tracking for the tree.\n *\n * @remarks\n * The navigable set is not cached. A keypress derives it with a lazy walk that\n * skips collapsed branches, so an item mount, expand or disable does no work,\n * and a caller that needs one item stops at that item.\n *\n * @hidden @internal\n */\nexport class IgcTreeNavigationService {\n private _focusedItem: IgcTreeItemComponent | null = null;\n private _activeItem: IgcTreeItemComponent | null = null;\n\n constructor(\n private readonly tree: IgcTreeComponent,\n private readonly selection: IgcTreeSelectionService\n ) {\n addKeybindings(tree, {\n bindingDefaults: { preventDefault: true, repeat: true },\n })\n .set(homeKey, () => this.setFocusedAndActiveItem(this._firstNavigable()))\n .set(endKey, () => this.setFocusedAndActiveItem(this._lastNavigable()))\n .set(arrowLeft, this._arrowLeft)\n .set(arrowRight, this._arrowRight)\n .set(arrowUp, () => this._arrowVertical(-1, true))\n .set(arrowDown, () => this._arrowVertical(1, true))\n .set([ctrlKey, arrowUp], () => this._arrowVertical(-1, false))\n .set([ctrlKey, arrowDown], () => this._arrowVertical(1, false))\n .set('*', this._asterisk)\n .set(spaceBar, () => this._space(false))\n .set([shiftKey, spaceBar], () => this._space(true))\n .set(enterKey, this._enter, { preventDefault: false });\n }\n\n public get focusedItem(): IgcTreeItemComponent | null {\n return this._focusedItem;\n }\n\n public get activeItem(): IgcTreeItemComponent | null {\n return this._activeItem;\n }\n\n public focusItem(\n value: IgcTreeItemComponent | null,\n shouldFocus = true\n ): void {\n if (this._focusedItem === value) {\n return;\n }\n\n this._focusedItem?.removeAttribute('tabindex');\n this._focusedItem = value;\n\n if (this._focusedItem && shouldFocus) {\n this._focusedItem.tabIndex = 0;\n this._focusedItem.focus({ preventScroll: true });\n scrollIntoView(this._focusedItem.wrapper);\n }\n }\n\n public setActiveItem(\n value: IgcTreeItemComponent | null,\n shouldEmit = true\n ): void {\n if (this._activeItem === value) {\n return;\n }\n\n if (this._activeItem) {\n this._activeItem.active = false;\n }\n\n this._activeItem = value;\n\n if (this._activeItem) {\n this._activeItem.active = true;\n if (shouldEmit) {\n this.tree.emitEvent('igcActiveItem', { detail: this._activeItem });\n }\n }\n }\n\n /** Sets the item as focused (and optionally active). */\n public setFocusedAndActiveItem(\n item: IgcTreeItemComponent | undefined,\n isActive = true,\n shouldFocus = true\n ): void {\n if (!item) {\n return;\n }\n if (isActive) {\n this.setActiveItem(item);\n }\n this.focusItem(item, shouldFocus);\n }\n\n /** Called by a tree item on `disconnectedCallback`. */\n public handleItemDisconnect(item: IgcTreeItemComponent): void {\n if (this._activeItem === item) {\n this.setActiveItem(null);\n }\n if (this._focusedItem === item) {\n this.focusItem(null, false);\n const next = this.tree.items.find((i) => !i.disabled);\n if (next) {\n next.tabIndex = 0;\n this.focusItem(next, false);\n }\n }\n }\n\n //#region Visible/navigable item resolution (computed on demand, not cached)\n\n /**\n * Yields the keyboard-navigable items in document order.\n *\n * A disabled item is skipped but does not hide its subtree: only a\n * *collapsed* ancestor removes descendants from the navigable set.\n */\n private *_navigable(\n items: IgcTreeItemComponent[] = this.tree._rootItems\n ): Generator<IgcTreeItemComponent, undefined> {\n for (const item of items) {\n if (!item.disabled) {\n yield item;\n }\n if (item.expanded) {\n yield* this._navigable(item.getChildren());\n }\n }\n }\n\n private _firstNavigable(): IgcTreeItemComponent | undefined {\n return this._navigable().next().value;\n }\n\n private _lastNavigable(): IgcTreeItemComponent | undefined {\n let last: IgcTreeItemComponent | undefined;\n for (const item of this._navigable()) {\n last = item;\n }\n return last;\n }\n\n /**\n * Next/previous navigable item relative to `item`, or `item` itself if there\n * isn't one.\n */\n private _adjacent(\n item: IgcTreeItemComponent,\n dir: 1 | -1\n ): IgcTreeItemComponent {\n const items = this._navigable();\n let first: IgcTreeItemComponent | undefined;\n let previous: IgcTreeItemComponent | undefined;\n\n for (const current of items) {\n first ??= current;\n\n if (current === item) {\n if (dir === -1) {\n return previous ?? item;\n }\n const next = items.next();\n return next.done ? item : next.value;\n }\n previous = current;\n }\n\n // `item` is not navigable. It can hold focus while an ancestor collapses.\n // Forward then moves to the first navigable item, and backward stays.\n return (dir === 1 ? first : undefined) ?? item;\n }\n\n //#endregion\n\n //#region Keyboard handlers\n\n private readonly _arrowLeft = (): void => {\n isLTR(this.tree)\n ? this._collapseOrGoToParent()\n : this._expandOrGoToFirstChild();\n };\n\n private readonly _arrowRight = (): void => {\n isLTR(this.tree)\n ? this._expandOrGoToFirstChild()\n : this._collapseOrGoToParent();\n };\n\n private _collapseOrGoToParent(): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n if (item.expanded && item.getChildren().length) {\n this.setActiveItem(item);\n item.collapseWithEvent();\n return;\n }\n if (item.parent && !item.parent.disabled) {\n this.setFocusedAndActiveItem(item.parent);\n }\n }\n\n private _expandOrGoToFirstChild(): void {\n const item = this._focusedItem;\n if (!item || item.getChildren().length === 0) {\n return;\n }\n if (!item.expanded) {\n this.setActiveItem(item);\n item.expandWithEvent();\n return;\n }\n const firstChild = item.getChildren().find((child) => !child.disabled);\n if (firstChild) {\n this.setFocusedAndActiveItem(firstChild);\n }\n }\n\n private _arrowVertical(dir: 1 | -1, shouldActivate: boolean): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n const next = this._adjacent(item, dir);\n if (next === item) {\n return;\n }\n this.setFocusedAndActiveItem(next, shouldActivate);\n }\n\n private readonly _asterisk = (): void => {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n const siblings = item.parent\n ? item.parent.getChildren()\n : this.tree._rootItems;\n\n for (const sibling of siblings) {\n if (!sibling.disabled && !sibling.expanded && sibling.hasChildren) {\n sibling.expandWithEvent();\n }\n }\n };\n\n private _space(shiftKey: boolean): void {\n const item = this._focusedItem;\n if (!item) {\n return;\n }\n\n this.setActiveItem(item);\n\n if (this.tree.selection === 'none') {\n return;\n }\n\n if (shiftKey) {\n this.selection.selectMultipleItems(item);\n return;\n }\n\n item.selected\n ? this.selection.deselectItem(item)\n : this.selection.selectItem(item);\n }\n\n private readonly _enter = (): void => {\n if (this._focusedItem) {\n this.setActiveItem(this._focusedItem);\n }\n };\n\n //#endregion\n}\n"]}
|