igniteui-webcomponents 7.3.0-beta.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/animations/player.d.ts +7 -2
- package/animations/player.js +1 -2
- package/animations/player.js.map +1 -1
- package/components/accordion/accordion.js +4 -16
- package/components/accordion/accordion.js.map +1 -1
- package/components/avatar/avatar.d.ts +0 -1
- package/components/avatar/avatar.js +5 -9
- package/components/avatar/avatar.js.map +1 -1
- package/components/badge/badge.d.ts +1 -3
- package/components/badge/badge.js +4 -8
- package/components/badge/badge.js.map +1 -1
- package/components/banner/banner.d.ts +6 -5
- package/components/banner/banner.js +19 -17
- package/components/banner/banner.js.map +1 -1
- package/components/button/button-base.d.ts +1 -1
- package/components/button/button-base.js.map +1 -1
- package/components/button-group/button-group.d.ts +0 -1
- package/components/button-group/button-group.js +12 -17
- package/components/button-group/button-group.js.map +1 -1
- package/components/calendar/base.d.ts +3 -13
- package/components/calendar/base.js +10 -31
- package/components/calendar/base.js.map +1 -1
- package/components/calendar/calendar.d.ts +2 -2
- package/components/calendar/months-view/months-view.d.ts +1 -1
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/carousel/carousel-indicator.d.ts +1 -1
- package/components/carousel/carousel-indicator.js +13 -13
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.d.ts +0 -2
- package/components/carousel/carousel-slide.js +7 -9
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.d.ts +52 -35
- package/components/carousel/carousel.js +136 -122
- package/components/carousel/carousel.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/chat/chat-input.d.ts +1 -1
- package/components/chat/chat-input.js +21 -21
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat.d.ts +0 -2
- package/components/chat/chat.js +6 -12
- package/components/chat/chat.js.map +1 -1
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/checkbox.d.ts +3 -5
- package/components/checkbox/checkbox.js +33 -44
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.d.ts +1 -1
- package/components/checkbox/switch.js +23 -34
- package/components/checkbox/switch.js.map +1 -1
- package/components/chip/chip.d.ts +1 -14
- package/components/chip/chip.js +12 -33
- package/components/chip/chip.js.map +1 -1
- package/components/color-picker/color-picker.d.ts +261 -0
- package/components/color-picker/color-picker.js +620 -0
- package/components/color-picker/color-picker.js.map +1 -0
- package/components/color-picker/common.d.ts +37 -0
- package/components/color-picker/common.js +55 -0
- package/components/color-picker/common.js.map +1 -0
- package/components/color-picker/converters.d.ts +18 -0
- package/components/color-picker/converters.js +173 -0
- package/components/color-picker/converters.js.map +1 -0
- package/components/color-picker/model.d.ts +120 -0
- package/components/color-picker/model.js +174 -0
- package/components/color-picker/model.js.map +1 -0
- package/components/color-picker/picker-canvas.d.ts +95 -0
- package/components/color-picker/picker-canvas.js +154 -0
- package/components/color-picker/picker-canvas.js.map +1 -0
- package/components/color-picker/themes/color-picker.base.css.d.ts +1 -0
- package/components/color-picker/themes/color-picker.base.css.js +3 -0
- package/components/color-picker/themes/color-picker.base.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/dark/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/dark/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/dark/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/light/color-picker.shared.css.d.ts +1 -0
- package/components/color-picker/themes/light/color-picker.shared.css.js +3 -0
- package/components/color-picker/themes/light/color-picker.shared.css.js.map +1 -0
- package/components/color-picker/themes/picker-canvas.base.css.d.ts +1 -0
- package/components/color-picker/themes/picker-canvas.base.css.js +3 -0
- package/components/color-picker/themes/picker-canvas.base.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.bootstrap.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.common.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.common.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.common.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.fluent.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.indigo.css.js.map +1 -0
- package/components/color-picker/themes/shared/color-picker.material.css.d.ts +1 -0
- package/components/color-picker/themes/shared/color-picker.material.css.js +3 -0
- package/components/color-picker/themes/shared/color-picker.material.css.js.map +1 -0
- package/components/color-picker/themes/themes.d.ts +2 -0
- package/components/color-picker/themes/themes.js +50 -0
- package/components/color-picker/themes/themes.js.map +1 -0
- package/components/color-picker/validators.d.ts +3 -0
- package/components/color-picker/validators.js +5 -0
- package/components/color-picker/validators.js.map +1 -0
- package/components/combo/combo-item.d.ts +1 -3
- package/components/combo/combo-item.js +5 -12
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo.d.ts +7 -20
- package/components/combo/combo.js +59 -81
- package/components/combo/combo.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +12 -9
- package/components/date-picker/date-picker.base.js +24 -31
- 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 +3 -5
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-range-picker/date-range-input.d.ts +2 -4
- package/components/date-range-picker/date-range-input.js +6 -37
- package/components/date-range-picker/date-range-input.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +2 -5
- package/components/date-range-picker/date-range-picker.js +15 -28
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.d.ts +2 -2
- package/components/date-range-picker/predefined-ranges-area.js +4 -6
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/validators.d.ts +1 -1
- package/components/date-range-picker/validators.js +5 -18
- package/components/date-range-picker/validators.js.map +1 -1
- package/components/date-time-input/date-part.d.ts +2 -1
- package/components/date-time-input/date-part.js +38 -75
- package/components/date-time-input/date-part.js.map +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +31 -12
- package/components/date-time-input/date-time-input.base.js +43 -11
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/date-time-input/date-time-input.d.ts +1 -3
- package/components/date-time-input/date-time-input.js +7 -40
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/datetime-mask-parser.d.ts +8 -0
- package/components/date-time-input/datetime-mask-parser.js +8 -8
- package/components/date-time-input/datetime-mask-parser.js.map +1 -1
- package/components/date-time-input/validators.js +3 -14
- package/components/date-time-input/validators.js.map +1 -1
- package/components/dialog/dialog.d.ts +6 -7
- package/components/dialog/dialog.js +21 -26
- package/components/dialog/dialog.js.map +1 -1
- package/components/divider/divider.d.ts +1 -4
- package/components/divider/divider.js +8 -17
- package/components/divider/divider.js.map +1 -1
- package/components/dropdown/dropdown-group.js +1 -6
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/expansion-panel/expansion-panel.d.ts +15 -5
- package/components/expansion-panel/expansion-panel.js +23 -34
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/file-input/file-input.d.ts +2 -14
- package/components/file-input/file-input.js +5 -23
- package/components/file-input/file-input.js.map +1 -1
- package/components/highlight/highlight.d.ts +6 -8
- package/components/highlight/highlight.js +12 -20
- package/components/highlight/highlight.js.map +1 -1
- package/components/icon/icon-references.js +1 -0
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/icon.d.ts +1 -1
- package/components/icon/internal-icons-lib.js +3 -0
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/icon/registry/types.d.ts +1 -1
- package/components/icon/registry/types.js.map +1 -1
- package/components/input/input.d.ts +9 -19
- package/components/input/input.js +30 -60
- package/components/input/input.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/mask-input/mask-input.d.ts +1 -1
- package/components/mask-input/mask-input.js +2 -4
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/nav-drawer/nav-drawer.d.ts +7 -7
- package/components/nav-drawer/nav-drawer.js +12 -23
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/progress/base.d.ts +4 -7
- package/components/progress/base.js +21 -45
- package/components/progress/base.js.map +1 -1
- package/components/qr-code/qr-code.d.ts +1 -1
- package/components/qr-code/qr-code.js +3 -2
- package/components/qr-code/qr-code.js.map +1 -1
- package/components/qr-code/types.d.ts +1 -1
- package/components/qr-code/types.js.map +1 -1
- package/components/radio/controller.d.ts +2 -30
- package/components/radio/controller.js +8 -94
- package/components/radio/controller.js.map +1 -1
- package/components/radio/radio.d.ts +5 -5
- package/components/radio/radio.js +48 -58
- package/components/radio/radio.js.map +1 -1
- package/components/radio-group/radio-group.d.ts +1 -2
- package/components/radio-group/radio-group.js +2 -9
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.d.ts +24 -12
- package/components/rating/rating.js +79 -73
- package/components/rating/rating.js.map +1 -1
- package/components/resize-container/default-ghost.js +4 -3
- package/components/resize-container/default-ghost.js.map +1 -1
- package/components/resize-container/resize-container.d.ts +1 -1
- package/components/resize-container/resize-container.js +5 -3
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/resize-container/resize-controller.js +4 -3
- package/components/resize-container/resize-controller.js.map +1 -1
- package/components/select/select-group.d.ts +2 -1
- package/components/select/select-group.js +7 -11
- package/components/select/select-group.js.map +1 -1
- package/components/select/select.d.ts +3 -4
- package/components/select/select.js +23 -28
- package/components/select/select.js.map +1 -1
- package/components/slider/range-slider.d.ts +3 -2
- package/components/slider/range-slider.js +22 -70
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.d.ts +9 -6
- package/components/slider/slider-base.js +27 -28
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider.js +9 -5
- package/components/slider/slider.js.map +1 -1
- package/components/splitter/splitter.d.ts +1 -1
- package/components/splitter/splitter.js.map +1 -1
- package/components/stepper/step.d.ts +3 -0
- package/components/stepper/step.js +9 -5
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.d.ts +0 -11
- package/components/stepper/stepper.js +21 -86
- package/components/stepper/stepper.js.map +1 -1
- package/components/tabs/tab.d.ts +1 -1
- package/components/tabs/tab.js +6 -5
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.d.ts +1 -5
- package/components/tabs/tabs.js +12 -34
- package/components/tabs/tabs.js.map +1 -1
- package/components/textarea/textarea.d.ts +6 -7
- package/components/textarea/textarea.js +3 -10
- package/components/textarea/textarea.js.map +1 -1
- package/components/theme-provider/theme-provider.d.ts +2 -4
- package/components/theme-provider/theme-provider.js +11 -21
- package/components/theme-provider/theme-provider.js.map +1 -1
- package/components/tile-manager/tile-manager.d.ts +10 -21
- package/components/tile-manager/tile-manager.js +43 -74
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +10 -18
- package/components/tile-manager/tile.js +50 -67
- package/components/tile-manager/tile.js.map +1 -1
- package/components/tooltip/tooltip.d.ts +4 -7
- package/components/tooltip/tooltip.js +20 -28
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/tree.d.ts +1 -14
- package/components/tree/tree.js +5 -23
- package/components/tree/tree.js.map +1 -1
- package/components/tree/tree.navigation.d.ts +1 -1
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/types.d.ts +2 -0
- package/components/types.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +1 -2
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +40 -38
- package/components/virtualization/engine.js.map +1 -1
- package/components/virtualization/types.d.ts +6 -5
- package/components/virtualization/types.js.map +1 -1
- package/components/virtualization/virtualization.d.ts +94 -80
- package/components/virtualization/virtualization.js +10 -2
- package/components/virtualization/virtualization.js.map +1 -1
- package/custom-elements.json +31948 -26708
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internals/controllers/aria-projection.d.ts +6 -6
- package/internals/controllers/aria-projection.js.map +1 -1
- package/internals/controllers/context-provider.d.ts +48 -0
- package/internals/controllers/context-provider.js +29 -0
- package/internals/controllers/context-provider.js.map +1 -0
- package/internals/controllers/drag.js +6 -6
- package/internals/controllers/drag.js.map +1 -1
- package/internals/controllers/gestures.js +3 -0
- package/internals/controllers/gestures.js.map +1 -1
- package/internals/controllers/group.d.ts +64 -0
- package/internals/controllers/group.js +104 -0
- package/internals/controllers/group.js.map +1 -0
- package/internals/controllers/internals.d.ts +16 -3
- package/internals/controllers/internals.js +10 -3
- package/internals/controllers/internals.js.map +1 -1
- package/internals/controllers/key-bindings.d.ts +6 -0
- package/internals/controllers/key-bindings.js +3 -0
- package/internals/controllers/key-bindings.js.map +1 -1
- package/internals/controllers/roving-focus.d.ts +72 -0
- package/internals/controllers/roving-focus.js +61 -0
- package/internals/controllers/roving-focus.js.map +1 -0
- package/internals/controllers/slot.d.ts +8 -0
- package/internals/controllers/slot.js +4 -0
- package/internals/controllers/slot.js.map +1 -1
- package/internals/controllers/toggle.d.ts +96 -0
- package/internals/controllers/toggle.js +65 -0
- package/internals/controllers/toggle.js.map +1 -0
- package/internals/date/converters.js +2 -5
- package/internals/date/converters.js.map +1 -1
- package/internals/date/model.d.ts +4 -0
- package/internals/date/model.js +6 -0
- package/internals/date/model.js.map +1 -1
- package/internals/decorators/coerced-property.d.ts +47 -0
- package/internals/decorators/coerced-property.js +36 -0
- package/internals/decorators/coerced-property.js.map +1 -0
- package/internals/definitions/defineAllComponents.js +2 -0
- package/internals/definitions/defineAllComponents.js.map +1 -1
- package/internals/i18n/i18n-controller.d.ts +22 -3
- package/internals/i18n/i18n-controller.js +28 -6
- package/internals/i18n/i18n-controller.js.map +1 -1
- package/internals/mixins/alert.d.ts +1 -1
- package/internals/mixins/alert.js +5 -3
- package/internals/mixins/alert.js.map +1 -1
- package/internals/mixins/combo-box.d.ts +3 -12
- package/internals/mixins/combo-box.js +6 -32
- package/internals/mixins/combo-box.js.map +1 -1
- package/internals/mixins/forms/associated.js +18 -0
- package/internals/mixins/forms/associated.js.map +1 -1
- package/internals/mixins/forms/types.d.ts +20 -1
- package/internals/mixins/forms/types.js.map +1 -1
- package/internals/mixins/i18n.d.ts +31 -0
- package/internals/mixins/i18n.js +36 -0
- package/internals/mixins/i18n.js.map +1 -0
- package/internals/mixins/mask-behavior.d.ts +6 -5
- package/internals/mixins/mask-behavior.js +1 -2
- package/internals/mixins/mask-behavior.js.map +1 -1
- package/internals/mixins/option.js +4 -2
- package/internals/mixins/option.js.map +1 -1
- package/internals/templates/masked-input.d.ts +1 -1
- package/internals/templates/masked-input.js.map +1 -1
- package/internals/templates/slotted-icon.d.ts +32 -0
- package/internals/templates/slotted-icon.js +19 -0
- package/internals/templates/slotted-icon.js.map +1 -0
- package/internals/templates/toggle-shell.d.ts +46 -0
- package/internals/templates/toggle-shell.js +38 -0
- package/internals/templates/toggle-shell.js.map +1 -0
- package/internals/timing.d.ts +32 -0
- package/internals/timing.js +20 -0
- package/internals/timing.js.map +1 -0
- package/internals/utils/arrays.d.ts +2 -2
- package/internals/utils/arrays.js.map +1 -1
- package/internals/utils/dom.d.ts +22 -0
- package/internals/utils/dom.js +15 -1
- package/internals/utils/dom.js.map +1 -1
- package/internals/utils/math.d.ts +1 -1
- package/internals/utils/math.js.map +1 -1
- package/internals/utils/types.d.ts +1 -1
- package/internals/utils/types.js.map +1 -1
- package/internals/validators.d.ts +23 -0
- package/internals/validators.js +21 -0
- package/internals/validators.js.map +1 -1
- package/package.json +3 -1
- package/theming/theming-controller.d.ts +3 -3
- package/theming/theming-controller.js.map +1 -1
- package/web-types.json +2 -2
- package/internals/decorators/watch.d.ts +0 -5
- package/internals/decorators/watch.js +0 -19
- package/internals/decorators/watch.js.map +0 -1
|
@@ -11,6 +11,7 @@ import { addAnimationController } from '#animations/player.js';
|
|
|
11
11
|
import { fadeIn, fadeOut } from '#animations/presets/fade/index.js';
|
|
12
12
|
import { addCommandController } from '#internals/controllers/command.js';
|
|
13
13
|
import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
14
|
+
import { addToggleController } from '#internals/controllers/toggle.js';
|
|
14
15
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
15
16
|
import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
|
|
16
17
|
import { partMap } from '#internals/part-map.js';
|
|
@@ -40,6 +41,22 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
|
|
|
40
41
|
});
|
|
41
42
|
this._dialogRef = createRef();
|
|
42
43
|
this._player = addAnimationController(this, this._dialogRef);
|
|
44
|
+
this._toggleController = addToggleController(this, {
|
|
45
|
+
transition: async (open) => {
|
|
46
|
+
if (open) {
|
|
47
|
+
this.open = true;
|
|
48
|
+
this._animating = false;
|
|
49
|
+
return this._player.playExclusive(fadeIn());
|
|
50
|
+
}
|
|
51
|
+
this._animating = true;
|
|
52
|
+
const completed = await this._player.playExclusive(fadeOut());
|
|
53
|
+
this._animating = false;
|
|
54
|
+
if (completed) {
|
|
55
|
+
this.open = false;
|
|
56
|
+
}
|
|
57
|
+
return completed;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
43
60
|
this._animating = false;
|
|
44
61
|
this.keepOpenOnEscape = false;
|
|
45
62
|
this.closeOnOutsideClick = false;
|
|
@@ -85,39 +102,17 @@ export default class IgcDialogComponent extends EventEmitterMixin(LitElement) {
|
|
|
85
102
|
this._closeWithEvent();
|
|
86
103
|
}
|
|
87
104
|
}
|
|
88
|
-
async _hide(emitEvent = false) {
|
|
89
|
-
if (!this.open || (emitEvent && !this._emitClosing())) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
this._animating = true;
|
|
93
|
-
await this._player.playExclusive(fadeOut());
|
|
94
|
-
this.open = false;
|
|
95
|
-
this._animating = false;
|
|
96
|
-
if (emitEvent) {
|
|
97
|
-
await this.updateComplete;
|
|
98
|
-
this.emitEvent('igcClosed');
|
|
99
|
-
}
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
_emitClosing() {
|
|
103
|
-
return this.emitEvent('igcClosing', { cancelable: true });
|
|
104
|
-
}
|
|
105
105
|
_closeWithEvent() {
|
|
106
|
-
this.
|
|
106
|
+
this._toggleController.hide(true);
|
|
107
107
|
}
|
|
108
108
|
async show() {
|
|
109
|
-
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
this.open = true;
|
|
113
|
-
await this._player.playExclusive(fadeIn());
|
|
114
|
-
return true;
|
|
109
|
+
return this._toggleController.show();
|
|
115
110
|
}
|
|
116
111
|
async hide() {
|
|
117
|
-
return this.
|
|
112
|
+
return this._toggleController.hide();
|
|
118
113
|
}
|
|
119
114
|
async toggle() {
|
|
120
|
-
return this.
|
|
115
|
+
return this._toggleController.toggle();
|
|
121
116
|
}
|
|
122
117
|
_renderBackdrop() {
|
|
123
118
|
return html `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAOzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAwC1C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,iBAAiB,CAG/D,UAAU,CAAC;aACY,YAAO,GAAG,YAAY,AAAf,CAAgB;aAChC,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAGjC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAmBD,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IA4ED;QACE,KAAK,EAAE,CAAC;QA9FO,aAAQ,GAAG,MAAM,EAAE,CAAC;QAEpB,WAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;SAC9C,CAAC,CAAC;QAEc,eAAU,GAAG,SAAS,EAAqB,CAAC;QAC5C,YAAO,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAMjE,eAAU,GAAG,KAAK,CAAC;QAoBpB,qBAAgB,GAAG,KAAK,CAAC;QAWzB,wBAAmB,GAAG,KAAK,CAAC;QAW5B,sBAAiB,GAAG,KAAK,CAAC;QAa1B,SAAI,GAAG,KAAK,CAAC;QA4BlB,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,oBAAoB,CAAC,IAAI,CAAC;aACvB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;aACxB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;aACxB,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAEkB,OAAO,CAAC,UAAgC;QACzD,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IAMS,iBAAiB,CAAC,KAAkB;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAY;QAChC,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,YAAY;QAIlB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAgB;QAC7D,IACE,IAAI,CAAC,mBAAmB;YACxB,IAAI,CAAC,OAAO,KAAK,MAAM;YACvB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACrD,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAMO,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;QACnC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAYM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAQM,KAAK,CAAC,IAAI;QACf,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAQM,KAAK,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAMS,eAAe;QACvB,OAAO,IAAI,CAAA;;sBAEO,CAAC,IAAI,CAAC,IAAI;eACjB,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;;KAEjE,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAA;gCACiB,IAAI,CAAC,QAAQ;;kBAE3B,IAAI,CAAC,KAAK;;;KAGvB,CAAC;IACJ,CAAC;IAES,cAAc;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAA;;uCAEwB,CAAC,UAAU;wBAC1B,IAAI,CAAC,iBAAiB;;KAEzC,CAAC;IACJ,CAAC;IAES,aAAa;QACrB,OAAO,IAAI,CAAA;;;YAIH,IAAI,CAAC,iBAAiB;YACpB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAA;sDACkC,IAAI,CAAC,eAAe;;;iBAIhE;;;KAGL,CAAC;IACJ,CAAC;IAEkB,MAAM;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1E,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEnD,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,eAAe,EAAE;;UAEpB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;eACf,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;qBAEtD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;0BACjC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC;iBACvC,IAAI,CAAC,YAAY;kBAChB,IAAI,CAAC,aAAa;iBACnB,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC;;UAEvD,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;;KAE1E,CAAC;IACJ,CAAC;;AA3RO;IADP,KAAK,EAAE;sDACmB;AAoBpB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;4DAC9B;AAWzB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;+DAC9B;AAW5B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;6DAC7B;AAa1B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDACvB;AASJ;IADf,QAAQ,EAAE;iDACoB;AAUxB;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;uDACH;AA4N9B,SAAS,YAAY,CACnB,SAAmC;IAEnC,OAAO,SAAS,IAAI,IAAI,CAAC;AAC3B,CAAC","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeIn, fadeOut } from '#animations/presets/fade/index.js';\nimport { addCommandController } from '#internals/controllers/command.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.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 { isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('title');\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * A modal dialog component built on the native `<dialog>` element.\n *\n * The dialog traps focus while open and blocks interaction with the rest\n * of the page (modal semantics). It supports animated open/close\n * transitions, an optional backdrop overlay, and multiple content areas\n * through named slots.\n *\n * The component integrates with the\n * [Invoker Commands API](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API):\n * an Ignite button or a native `<button>` with `command=\"--show\"` / `\"--hide\"` / `\"--toggle\"`\n * and `commandfor` pointing to this element will call the corresponding method\n * declaratively without any JavaScript.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitted just before the dialog closes. Cancelable —\n * call `event.preventDefault()` to abort the closing sequence.\n * @fires igcClosed - Emitted after the dialog has fully closed and its\n * exit animation has completed.\n *\n * @slot - General-purpose content area. Also the target for any\n * `<form method=\"dialog\">` placed inside the dialog.\n * @slot title - Content rendered in the dialog header. Falls back to the\n * `title` attribute when empty.\n * @slot message - A dedicated message/body area rendered above the default\n * slot. Hidden when no content is assigned.\n * @slot footer - Content rendered in the dialog footer. When empty, a\n * default \"OK\" close button is shown (unless `hide-default-action` is set).\n *\n * @csspart base - The native `<dialog>` element.\n * @csspart title - The `<header>` element wrapping the title slot.\n * @csspart content - The `<section>` element wrapping the message and default slots.\n * @csspart footer - The `<footer>` element wrapping the footer slot.\n * @csspart backdrop - The decorative backdrop overlay element.\n * @csspart animating - Applied to the backdrop while an animation is running.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = nextId();\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement | undefined {\n return this._dialogRef.value;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * When set, pressing the `Escape` key will not close the dialog.\n *\n * By default the browser closes a modal dialog on `Escape`. Enable this\n * option when the dialog guards unsaved work and should require an explicit\n * user action to dismiss.\n * @attr keep-open-on-escape\n * @default false\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * When set, clicking on the backdrop area outside the dialog surface\n * will close it (emitting close events).\n *\n * Has no effect when the dialog is not yet open.\n * @attr close-on-outside-click\n * @default false\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * When set, the built-in \"OK\" close button in the footer is not rendered.\n *\n * Has no effect when content is projected into the `footer` slot, since\n * the slot content replaces the default button entirely.\n * @attr hide-default-action\n * @default false\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is open.\n *\n * Setting this property programmatically will open or close the dialog\n * without animation and without emitting close events.\n * Prefer the `show()`, `hide()`, and `toggle()` methods for animated\n * transitions.\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * The title displayed in the dialog header.\n *\n * Overridden by any content projected into the `title` slot.\n * @attr title\n */\n @property()\n public override title!: string;\n\n /**\n * The return value of the dialog.\n *\n * Automatically set to the `value` of the submitter element when a\n * `<form method=\"dialog\">` inside the dialog is submitted. Can also\n * be set programmatically before calling `hide()`.\n */\n @property({ attribute: false })\n public returnValue?: string;\n\n //#endregion\n\n //#region Lifecycle\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addCommandController(this)\n .set('--show', this.show)\n .set('--hide', this.hide)\n .set('--toggle', this.toggle);\n }\n\n protected override updated(properties: PropertyValues<this>): void {\n if (properties.has('open')) {\n this.open ? this._dialog?.showModal() : this._dialog?.close();\n }\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._closeWithEvent();\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._closeWithEvent();\n }\n }\n\n private _handleClose(): void {\n // When a non-cancelable close event is fired (e.g., from repeated Escape presses),\n // reopen the dialog to prevent the broken state with visible backdrop.\n // Note that this handler is invoked only when `keepOpenOnEscape` is true.\n if (this.open) {\n this._dialog?.showModal();\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (\n this.closeOnOutsideClick &&\n this._dialog === target &&\n !isPointInsideElement(this._dialog, clientX, clientY)\n ) {\n this._closeWithEvent();\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private async _hide(emitEvent = false): Promise<boolean> {\n if (!this.open || (emitEvent && !this._emitClosing())) {\n return false;\n }\n\n this._animating = true;\n await this._player.playExclusive(fadeOut());\n this.open = false;\n this._animating = false;\n\n if (emitEvent) {\n await this.updateComplete;\n this.emitEvent('igcClosed');\n }\n\n return true;\n }\n\n private _emitClosing(): boolean {\n return this.emitEvent('igcClosing', { cancelable: true });\n }\n\n private _closeWithEvent(): void {\n this._hide(true);\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Opens the dialog with an animated fade-in transition.\n *\n * Returns `true` when the dialog was successfully opened, or `false` if\n * it was already open.\n */\n public async show(): Promise<boolean> {\n if (this.open) {\n return false;\n }\n\n this.open = true;\n await this._player.playExclusive(fadeIn());\n return true;\n }\n\n /**\n * Closes the dialog with an animated fade-out transition.\n *\n * Returns `true` when the dialog was successfully closed, or `false` if\n * it was already closed.\n */\n public async hide(): Promise<boolean> {\n return this._hide();\n }\n\n /**\n * Toggles the dialog open or closed depending on its current state.\n *\n * Equivalent to calling `show()` when closed and `hide()` when open.\n * Returns `true` when the transition completed successfully.\n */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${\n this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${this._closeWithEvent}>\n OK\n </igc-button>\n `\n }\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${bindIf(this.ariaLabel, this.ariaLabel)}\n aria-labelledby=${bindIf(labelledBy, labelledBy)}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n @close=${bindIf(this.keepOpenOnEscape, this._handleClose)}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { fadeIn, fadeOut } from '#animations/presets/fade/index.js';\nimport { addCommandController } from '#internals/controllers/command.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { addToggleController } from '#internals/controllers/toggle.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 { isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { styles } from './themes/dialog.base.css.js';\nimport { styles as shared } from './themes/shared/dialog.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcDialogComponentEventMap {\n igcClosing: CustomEvent<void>;\n igcClosed: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('title');\n\n/* blazorAdditionalDependency: IgcButtonComponent */\n/**\n * A modal dialog component built on the native `<dialog>` element.\n *\n * The dialog traps focus while open and blocks interaction with the rest\n * of the page (modal semantics). It supports animated open/close\n * transitions, an optional backdrop overlay, and multiple content areas\n * through named slots.\n *\n * The component integrates with the\n * [Invoker Commands API](https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API):\n * an Ignite button or a native `<button>` with `command=\"--show\"` / `\"--hide\"` / `\"--toggle\"`\n * and `commandfor` pointing to this element will call the corresponding method\n * declaratively without any JavaScript.\n *\n * @element igc-dialog\n *\n * @fires igcClosing - Emitted just before the dialog closes. Cancelable -\n * call `event.preventDefault()` to abort the closing sequence.\n * @fires igcClosed - Emitted after the dialog has fully closed and its\n * exit animation has completed.\n *\n * @slot - General-purpose content area. Also the target for any\n * `<form method=\"dialog\">` placed inside the dialog.\n * @slot title - Content rendered in the dialog header. Falls back to the\n * `title` attribute when empty.\n * @slot message - A dedicated message/body area rendered above the default\n * slot. Hidden when no content is assigned.\n * @slot footer - Content rendered in the dialog footer. When empty, a\n * default \"OK\" close button is shown (unless `hide-default-action` is set).\n *\n * @csspart base - The native `<dialog>` element.\n * @csspart title - The `<header>` element wrapping the title slot.\n * @csspart content - The `<section>` element wrapping the message and default slots.\n * @csspart footer - The `<footer>` element wrapping the footer slot.\n * @csspart backdrop - The decorative backdrop overlay element.\n * @csspart animating - Applied to the backdrop while an animation is running.\n */\nexport default class IgcDialogComponent extends EventEmitterMixin<\n IgcDialogComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-dialog';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDialogComponent, IgcButtonComponent);\n }\n\n //#region Private state and properties\n\n private readonly _titleId = nextId();\n\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'message', 'footer'),\n });\n\n private readonly _dialogRef = createRef<HTMLDialogElement>();\n private readonly _player = addAnimationController(this, this._dialogRef);\n\n private readonly _toggleController = addToggleController(this, {\n transition: async (open) => {\n if (open) {\n this.open = true;\n // A superseded exit clears this too, but only once its animation\n // reports the cancellation - too late for this render.\n this._animating = false;\n return this._player.playExclusive(fadeIn());\n }\n\n this._animating = true;\n const completed = await this._player.playExclusive(fadeOut());\n this._animating = false;\n\n // An interrupted exit animation means a newer `show()` took over.\n if (completed) {\n this.open = false;\n }\n\n return completed;\n },\n });\n\n /**\n * Backdrop animation helper.\n */\n @state()\n private _animating = false;\n\n private get _dialog(): HTMLDialogElement | undefined {\n return this._dialogRef.value;\n }\n\n //#endregion\n\n //#region Public properties\n\n /**\n * When set, pressing the `Escape` key will not close the dialog.\n *\n * By default the browser closes a modal dialog on `Escape`. Enable this\n * option when the dialog guards unsaved work and should require an explicit\n * user action to dismiss.\n * @attr keep-open-on-escape\n * @default false\n */\n @property({ type: Boolean, attribute: 'keep-open-on-escape' })\n public keepOpenOnEscape = false;\n\n /**\n * When set, clicking on the backdrop area outside the dialog surface\n * will close it (emitting close events).\n *\n * Has no effect when the dialog is not yet open.\n * @attr close-on-outside-click\n * @default false\n */\n @property({ type: Boolean, attribute: 'close-on-outside-click' })\n public closeOnOutsideClick = false;\n\n /**\n * When set, the built-in \"OK\" close button in the footer is not rendered.\n *\n * Has no effect when content is projected into the `footer` slot, since\n * the slot content replaces the default button entirely.\n * @attr hide-default-action\n * @default false\n */\n @property({ type: Boolean, attribute: 'hide-default-action' })\n public hideDefaultAction = false;\n\n /**\n * Whether the dialog is open.\n *\n * Setting this property programmatically will open or close the dialog\n * without animation and without emitting close events.\n * Prefer the `show()`, `hide()`, and `toggle()` methods for animated\n * transitions.\n * @attr open\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * The title displayed in the dialog header.\n *\n * Overridden by any content projected into the `title` slot.\n * @attr title\n */\n @property()\n public override title!: string;\n\n /**\n * The return value of the dialog.\n *\n * Automatically set to the `value` of the submitter element when a\n * `<form method=\"dialog\">` inside the dialog is submitted. Can also\n * be set programmatically before calling `hide()`.\n */\n @property({ attribute: false })\n public returnValue?: string;\n\n //#endregion\n\n //#region Lifecycle\n\n constructor() {\n super();\n\n addThemingController(this, all);\n addCommandController(this)\n .set('--show', this.show)\n .set('--hide', this.hide)\n .set('--toggle', this.toggle);\n }\n\n protected override updated(properties: PropertyValues<this>): void {\n if (properties.has('open')) {\n this.open ? this._dialog?.showModal() : this._dialog?.close();\n }\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected _handleFormSubmit(event: SubmitEvent): void {\n const form = event.target as HTMLFormElement;\n\n if (form.method === 'dialog') {\n if (hasSubmitter(event.submitter)) {\n this.returnValue = event.submitter.value ?? '';\n }\n\n if (!event.defaultPrevented) {\n this._closeWithEvent();\n }\n }\n }\n\n private _handleCancel(event: Event): void {\n event.preventDefault();\n\n if (!this.keepOpenOnEscape) {\n this._closeWithEvent();\n }\n }\n\n private _handleClose(): void {\n // When a non-cancelable close event is fired (e.g., from repeated Escape presses),\n // reopen the dialog to prevent the broken state with visible backdrop.\n // Note that this handler is invoked only when `keepOpenOnEscape` is true.\n if (this.open) {\n this._dialog?.showModal();\n }\n }\n\n private _handleClick({ clientX, clientY, target }: PointerEvent): void {\n if (\n this.closeOnOutsideClick &&\n this._dialog === target &&\n !isPointInsideElement(this._dialog, clientX, clientY)\n ) {\n this._closeWithEvent();\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private _closeWithEvent(): void {\n this._toggleController.hide(true);\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Opens the dialog with an animated fade-in transition.\n *\n * Returns `true` when the dialog was successfully opened, or `false` if it\n * was already open or the transition was superseded by a newer one.\n */\n public async show(): Promise<boolean> {\n return this._toggleController.show();\n }\n\n /**\n * Closes the dialog with an animated fade-out transition.\n *\n * Returns `true` when the dialog was successfully closed, or `false` if it\n * was already closed or the transition was superseded by a newer one.\n */\n public async hide(): Promise<boolean> {\n return this._toggleController.hide();\n }\n\n /**\n * Toggles the dialog open or closed depending on its current state.\n *\n * Equivalent to calling `show()` when closed and `hide()` when open.\n * Returns `true` when the transition completed successfully.\n */\n public async toggle(): Promise<boolean> {\n return this._toggleController.toggle();\n }\n\n //#endregion\n\n //#region Render methods\n\n protected _renderBackdrop() {\n return html`\n <div\n aria-hidden=${!this.open}\n part=${partMap({ backdrop: true, animating: this._animating })}\n ></div>\n `;\n }\n\n protected _renderHeader() {\n return html`\n <header part=\"title\" id=${this._titleId}>\n <slot name=\"title\">\n <span>${this.title}</span>\n </slot>\n </header>\n `;\n }\n\n protected _renderContent() {\n const hasMessage = this._slots.hasAssignedElements('message');\n return html`\n <section part=\"content\">\n <slot name=\"message\" ?hidden=${!hasMessage}></slot>\n <slot @submit=${this._handleFormSubmit}></slot>\n </section>\n `;\n }\n\n protected _renderFooter() {\n return html`\n <footer part=\"footer\">\n <slot name=\"footer\">\n ${\n this.hideDefaultAction\n ? nothing\n : html`\n <igc-button variant=\"flat\" @click=${this._closeWithEvent}>\n OK\n </igc-button>\n `\n }\n </slot>\n </footer>\n `;\n }\n\n protected override render() {\n const hasTitle = this._slots.hasAssignedElements('title') || !!this.title;\n const hasFooter =\n this._slots.hasAssignedElements('footer') || !this.hideDefaultAction;\n const labelledBy = this.ariaLabel ?? this._titleId;\n\n return html`\n ${this._renderBackdrop()}\n <dialog\n ${ref(this._dialogRef)}\n part=${partMap({ base: true, titled: hasTitle, footed: hasFooter })}\n role=\"dialog\"\n aria-label=${bindIf(this.ariaLabel, this.ariaLabel)}\n aria-labelledby=${bindIf(labelledBy, labelledBy)}\n @click=${this._handleClick}\n @cancel=${this._handleCancel}\n @close=${bindIf(this.keepOpenOnEscape, this._handleClose)}\n >\n ${this._renderHeader()} ${this._renderContent()} ${this._renderFooter()}\n </dialog>\n `;\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dialog': IgcDialogComponent;\n }\n}\n\nfunction hasSubmitter(\n submitter: SubmitEvent['submitter']\n): submitter is HTMLButtonElement | HTMLInputElement {\n return submitter != null;\n}\n"]}
|
|
@@ -14,15 +14,12 @@ export default class IgcDividerComponent extends LitElement {
|
|
|
14
14
|
static readonly tagName = "igc-divider";
|
|
15
15
|
static styles: import("lit").CSSResult[];
|
|
16
16
|
static register(): void;
|
|
17
|
-
private readonly _internals;
|
|
18
|
-
private _vertical;
|
|
19
17
|
/**
|
|
20
18
|
* Whether to render a vertical divider line.
|
|
21
19
|
* @attr
|
|
22
20
|
* @default false
|
|
23
21
|
*/
|
|
24
|
-
|
|
25
|
-
get vertical(): boolean;
|
|
22
|
+
vertical: boolean;
|
|
26
23
|
/**
|
|
27
24
|
* When set and inset is provided, it will shrink the divider line from both sides.
|
|
28
25
|
* @attr
|
|
@@ -18,27 +18,18 @@ export default class IgcDividerComponent extends LitElement {
|
|
|
18
18
|
static register() {
|
|
19
19
|
registerComponent(IgcDividerComponent);
|
|
20
20
|
}
|
|
21
|
-
set vertical(value) {
|
|
22
|
-
this._vertical = Boolean(value);
|
|
23
|
-
this._internals.setARIA({
|
|
24
|
-
ariaOrientation: this._vertical ? 'vertical' : 'horizontal',
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
get vertical() {
|
|
28
|
-
return this._vertical;
|
|
29
|
-
}
|
|
30
21
|
constructor() {
|
|
31
22
|
super();
|
|
32
|
-
this.
|
|
33
|
-
initialARIA: {
|
|
34
|
-
role: 'separator',
|
|
35
|
-
ariaOrientation: 'vertical',
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
this._vertical = false;
|
|
23
|
+
this.vertical = false;
|
|
39
24
|
this.middle = false;
|
|
40
25
|
this.type = 'solid';
|
|
41
26
|
addThemingController(this, all);
|
|
27
|
+
addInternalsController(this, {
|
|
28
|
+
initialARIA: { role: 'separator' },
|
|
29
|
+
aria: () => ({
|
|
30
|
+
ariaOrientation: this.vertical ? 'vertical' : 'horizontal',
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
42
33
|
}
|
|
43
34
|
render() {
|
|
44
35
|
return html ``;
|
|
@@ -46,7 +37,7 @@ export default class IgcDividerComponent extends LitElement {
|
|
|
46
37
|
}
|
|
47
38
|
__decorate([
|
|
48
39
|
property({ type: Boolean, reflect: true })
|
|
49
|
-
], IgcDividerComponent.prototype, "vertical",
|
|
40
|
+
], IgcDividerComponent.prototype, "vertical", void 0);
|
|
50
41
|
__decorate([
|
|
51
42
|
property({ type: Boolean, reflect: true })
|
|
52
43
|
], IgcDividerComponent.prototype, "middle", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divider.js","sourceRoot":"","sources":["../../../src/components/divider/divider.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAYzC,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;aAClC,YAAO,GAAG,aAAa,AAAhB,CAAiB;aACxB,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAG1C,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"divider.js","sourceRoot":"","sources":["../../../src/components/divider/divider.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAYzC,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;aAClC,YAAO,GAAG,aAAa,AAAhB,CAAiB;aACxB,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAG1C,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IA2BD;QACE,KAAK,EAAE,CAAC;QApBH,aAAQ,GAAG,KAAK,CAAC;QAQjB,WAAM,GAAG,KAAK,CAAC;QASf,SAAI,GAAgB,OAAO,CAAC;QAIjC,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEhC,sBAAsB,CAAC,IAAI,EAAE;YAC3B,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAClC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACX,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;aAC3D,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;;AAjCM;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qDACnB;AAQjB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDACrB;AASf;IADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDACO","sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type { DividerType } from '../types.js';\nimport { styles } from './themes/divider.base.css.js';\nimport { styles as shared } from './themes/shared/divider.common.css.js';\nimport { all } from './themes/themes.js';\n\n/**\n * The divider allows the content author to easily create a horizontal/vertical\n * rule as a break between content, to better organize information on a page.\n *\n * @element igc-divider\n *\n * @cssproperty --color - Sets the color of the divider.\n * @cssproperty --inset - Shrinks the divider by the given amount from the start. If `middle` is set it will shrink from both sides.\n *\n */\nexport default class IgcDividerComponent extends LitElement {\n public static readonly tagName = 'igc-divider';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDividerComponent);\n }\n\n /**\n * Whether to render a vertical divider line.\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n /**\n * When set and inset is provided, it will shrink the divider line from both sides.\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public middle = false;\n\n /* alternateName: lineType */\n /**\n * Whether to render a solid or a dashed divider line.\n * @attr type\n * @default 'solid'\n */\n @property({ reflect: true })\n public type: DividerType = 'solid';\n\n constructor() {\n super();\n addThemingController(this, all);\n\n addInternalsController(this, {\n initialARIA: { role: 'separator' },\n aria: () => ({\n ariaOrientation: this.vertical ? 'vertical' : 'horizontal',\n }),\n });\n }\n\n protected override render() {\n return html``;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-divider': IgcDividerComponent;\n }\n}\n"]}
|
|
@@ -36,12 +36,7 @@ export default class IgcDropdownGroupComponent extends LitElement {
|
|
|
36
36
|
addThemingController(this, all);
|
|
37
37
|
}
|
|
38
38
|
_labelChange() {
|
|
39
|
-
const label = this._slots
|
|
40
|
-
.getAssignedNodes('label', true)
|
|
41
|
-
.map((node) => node.textContent ?? '')
|
|
42
|
-
.join('')
|
|
43
|
-
.trim()
|
|
44
|
-
.replace(/\s+/gu, ' ');
|
|
39
|
+
const label = this._slots.getAssignedText('label', true);
|
|
45
40
|
this._internals.setARIA({ ariaLabel: label || null });
|
|
46
41
|
}
|
|
47
42
|
render() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-group.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown-group.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,wBAAwB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,oDAAoD,CAAC;AAEtF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAYhC,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAAU;aACxC,YAAO,GAAG,oBAAoB,AAAvB,CAAwB;aAC/B,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAG1C,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAsBD;QACE,KAAK,EAAE,CAAC;QArBO,eAAU,GAAG,sBAAsB,CAAC,IAAI,EAAE;YACzD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO;aACd;SACF,CAAC,CAAC;QAEc,WAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,YAAY;SAC5B,CAAC,CAAC;QAaD,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAMO,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM
|
|
1
|
+
{"version":3,"file":"dropdown-group.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown-group.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,wBAAwB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,oDAAoD,CAAC;AAEtF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AAYhC,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAAU;aACxC,YAAO,GAAG,oBAAoB,AAAvB,CAAwB;aAC/B,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAG1C,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAsBD;QACE,KAAK,EAAE,CAAC;QArBO,eAAU,GAAG,sBAAsB,CAAC,IAAI,EAAE;YACzD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO;aACd;SACF,CAAC,CAAC;QAEc,WAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,YAAY;SAC5B,CAAC,CAAC;QAaD,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAMO,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;;AAxBM;IAJN,qBAAqB,CAAC;QACrB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,wBAAwB,CAAC,OAAO;KAC3C,CAAC;wDAC6C","sourcesContent":["import { html, LitElement } from 'lit';\nimport { queryAssignedElements } from 'lit/decorators.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcDropdownItemComponent from './dropdown-item.js';\nimport { styles } from './themes/dropdown-group.base.css.js';\nimport { all } from './themes/group.js';\nimport { styles as shared } from './themes/shared/group/dropdown-group.common.css.js';\n\nconst Slots = setSlots('label');\n\n/**\n * A container for a group of dropdown items.\n *\n * @element igc-dropdown-group\n *\n * @slot label - Contains the group's label.\n * @slot - Intended to contain the items belonging to this group.\n *\n * @csspart label - The native label element.\n */\nexport default class IgcDropdownGroupComponent extends LitElement {\n public static readonly tagName = 'igc-dropdown-group';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDropdownGroupComponent);\n }\n\n private readonly _internals = addInternalsController(this, {\n initialARIA: {\n role: 'group',\n },\n });\n\n private readonly _slots = addSlotController(this, {\n slots: Slots,\n initial: true,\n onChange: this._labelChange,\n });\n\n /* blazorSuppress */\n /** All child dropdown items. */\n @queryAssignedElements({\n flatten: true,\n selector: IgcDropdownItemComponent.tagName,\n })\n public items!: Array<IgcDropdownItemComponent>;\n\n constructor() {\n super();\n\n addThemingController(this, all);\n }\n\n /**\n * The label is rendered into this shadow root, out of reach of an\n * `aria-labelledby` on the host, so its text names the `group` directly.\n */\n private _labelChange(): void {\n const label = this._slots.getAssignedText('label', true);\n this._internals.setARIA({ ariaLabel: label || null });\n }\n\n protected override render() {\n return html`\n <label part=\"label\">\n <slot name=\"label\"></slot>\n </label>\n <slot></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-dropdown-group': IgcDropdownGroupComponent;\n }\n}\n"]}
|
|
@@ -41,6 +41,7 @@ export default class IgcExpansionPanelComponent extends IgcExpansionPanelCompone
|
|
|
41
41
|
private readonly _panelRef;
|
|
42
42
|
private readonly _player;
|
|
43
43
|
private readonly _slots;
|
|
44
|
+
private readonly _toggleController;
|
|
44
45
|
/**
|
|
45
46
|
* Indicates whether the contents of the control should be visible.
|
|
46
47
|
* @attr
|
|
@@ -60,10 +61,17 @@ export default class IgcExpansionPanelComponent extends IgcExpansionPanelCompone
|
|
|
60
61
|
/** @internal */
|
|
61
62
|
connectedCallback(): void;
|
|
62
63
|
private _handleClick;
|
|
63
|
-
private _setOpenState;
|
|
64
64
|
private _toggle;
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Opens the panel, emitting its toggle events.
|
|
67
|
+
* @hidden @internal
|
|
68
|
+
*/
|
|
69
|
+
_show(): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Closes the panel, emitting its toggle events.
|
|
72
|
+
* @hidden @internal
|
|
73
|
+
*/
|
|
74
|
+
_hide(): Promise<boolean>;
|
|
67
75
|
/**
|
|
68
76
|
* Toggles the panel open/close state.
|
|
69
77
|
* @returns `true` when the open state was successfully changed.
|
|
@@ -71,12 +79,14 @@ export default class IgcExpansionPanelComponent extends IgcExpansionPanelCompone
|
|
|
71
79
|
toggle(): Promise<boolean>;
|
|
72
80
|
/**
|
|
73
81
|
* Hides the panel content.
|
|
74
|
-
* @returns `true` when the panel was successfully closed, or `false` if
|
|
82
|
+
* @returns `true` when the panel was successfully closed, or `false` if it was
|
|
83
|
+
* already closed or the transition was superseded by a newer one.
|
|
75
84
|
*/
|
|
76
85
|
hide(): Promise<boolean>;
|
|
77
86
|
/**
|
|
78
87
|
* Shows the panel content.
|
|
79
|
-
* @returns `true` when the panel was successfully opened, or `false` if
|
|
88
|
+
* @returns `true` when the panel was successfully opened, or `false` if it was
|
|
89
|
+
* already open or the transition was superseded by a newer one.
|
|
80
90
|
*/
|
|
81
91
|
show(): Promise<boolean>;
|
|
82
92
|
private _renderIndicator;
|
|
@@ -11,8 +11,10 @@ import { addAnimationController } from '#animations/player.js';
|
|
|
11
11
|
import { growVerIn, growVerOut } from '#animations/presets/grow/index.js';
|
|
12
12
|
import { addKeybindings, altKey, arrowDown, arrowUp, } from '#internals/controllers/key-bindings.js';
|
|
13
13
|
import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
14
|
+
import { addToggleController } from '#internals/controllers/toggle.js';
|
|
14
15
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
15
16
|
import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
|
|
17
|
+
import { renderSlottedIcon } from '#internals/templates/slotted-icon.js';
|
|
16
18
|
import { createIdGenerator } from '#internals/utils/strings.js';
|
|
17
19
|
import { addThemingController } from '#theming/theming-controller.js';
|
|
18
20
|
import IgcIconComponent from '../icon/icon.js';
|
|
@@ -35,6 +37,13 @@ export default class IgcExpansionPanelComponent extends EventEmitterMixin(LitEle
|
|
|
35
37
|
this._slots = addSlotController(this, {
|
|
36
38
|
slots: setSlots('title', 'subtitle', 'indicator', 'indicator-expanded'),
|
|
37
39
|
});
|
|
40
|
+
this._toggleController = addToggleController(this, {
|
|
41
|
+
detail: () => this,
|
|
42
|
+
transition: (open) => {
|
|
43
|
+
this.open = open;
|
|
44
|
+
return this._player.playExclusive(open ? growVerIn() : growVerOut());
|
|
45
|
+
},
|
|
46
|
+
});
|
|
38
47
|
this.open = false;
|
|
39
48
|
this.disabled = false;
|
|
40
49
|
this.indicatorPosition = 'start';
|
|
@@ -55,55 +64,35 @@ export default class IgcExpansionPanelComponent extends EventEmitterMixin(LitEle
|
|
|
55
64
|
this._headerRef.value?.focus();
|
|
56
65
|
this._toggle();
|
|
57
66
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return;
|
|
61
|
-
const args = { detail: this };
|
|
62
|
-
const event = state ? 'igcOpening' : 'igcClosing';
|
|
63
|
-
const eventDone = state ? 'igcOpened' : 'igcClosed';
|
|
64
|
-
const animation = state ? growVerIn : growVerOut;
|
|
65
|
-
if (withEvent && !this.emitEvent(event, { cancelable: true, ...args })) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
this.open = state;
|
|
69
|
-
if (await this._player.playExclusive(animation())) {
|
|
70
|
-
if (withEvent) {
|
|
71
|
-
this.emitEvent(eventDone, args);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
async _toggle() {
|
|
76
|
-
this.open ? await this._hide() : await this._show();
|
|
67
|
+
_toggle() {
|
|
68
|
+
return this._toggleController.toggle(true);
|
|
77
69
|
}
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
_show() {
|
|
71
|
+
return this._toggleController.show(true);
|
|
80
72
|
}
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
_hide() {
|
|
74
|
+
return this._toggleController.hide(true);
|
|
83
75
|
}
|
|
84
76
|
async toggle() {
|
|
85
77
|
return this.open ? this.hide() : this.show();
|
|
86
78
|
}
|
|
87
79
|
async hide() {
|
|
88
|
-
|
|
89
|
-
return false;
|
|
90
|
-
await this._setOpenState({ state: false });
|
|
91
|
-
return true;
|
|
80
|
+
return this._toggleController.hide();
|
|
92
81
|
}
|
|
93
82
|
async show() {
|
|
94
|
-
|
|
95
|
-
return false;
|
|
96
|
-
await this._setOpenState({ state: true });
|
|
97
|
-
return true;
|
|
83
|
+
return this._toggleController.show();
|
|
98
84
|
}
|
|
99
85
|
_renderIndicator() {
|
|
100
86
|
const iconName = this.open ? 'collapse' : 'expand';
|
|
101
87
|
const indicatorHidden = this.open && this._slots.hasAssignedElements('indicator-expanded');
|
|
102
88
|
return html `
|
|
103
89
|
<div part="indicator" aria-hidden="true">
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
90
|
+
${renderSlottedIcon({
|
|
91
|
+
slot: 'indicator',
|
|
92
|
+
icon: iconName,
|
|
93
|
+
hidden: indicatorHidden,
|
|
94
|
+
ariaHidden: false,
|
|
95
|
+
})}
|
|
107
96
|
<slot name="indicator-expanded" ?hidden=${!indicatorHidden}></slot>
|
|
108
97
|
</div>
|
|
109
98
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expansion-panel.js","sourceRoot":"","sources":["../../../src/components/expansion-panel/expansion-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { growVerIn, growVerOut } from '#animations/presets/grow/index.js';\nimport {\n addKeybindings,\n altKey,\n arrowDown,\n arrowUp,\n} from '#internals/controllers/key-bindings.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.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 { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport type { ExpansionPanelIndicatorPosition } from '../types.js';\nimport { styles } from './themes/expansion-panel.base.css.js';\nimport { styles as shared } from './themes/shared/expansion-panel.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcExpansionPanelComponentEventMap {\n igcOpening: CustomEvent<IgcExpansionPanelComponent>;\n igcOpened: CustomEvent<IgcExpansionPanelComponent>;\n igcClosing: CustomEvent<IgcExpansionPanelComponent>;\n igcClosed: CustomEvent<IgcExpansionPanelComponent>;\n}\n\nconst nextId = createIdGenerator('igc-expansion-panel');\n\n/**\n * The Expansion Panel Component provides a way to display information in a toggleable way -\n * compact summary view containing title and description and expanded detail view containing\n * additional content to the summary header.\n *\n * @element igc-expansion-panel\n *\n * @slot - renders the default content of the panel\n * @slot title - renders the title of the panel's header\n * @slot subtitle - renders the subtitle of the panel's header\n * @slot indicator - renders the expand/collapsed indicator\n * @slot indicator-expanded - renders the expanded state of the indicator\n *\n * @fires igcOpening - Emitted before opening the expansion panel.\n * @fires igcOpened - Emitted after the expansion panel is opened.\n * @fires igcClosing - Emitted before closing the expansion panel.\n * @fires igcClosed - Emitted after the expansion panel is closed.\n *\n * @csspart header - The container of the expansion indicator, title and subtitle.\n * @csspart title - The title container.\n * @csspart subtitle - The subtitle container.\n * @csspart indicator - The indicator container.\n * @csspart content - The expansion panel's content wrapper.\n */\nexport default class IgcExpansionPanelComponent extends EventEmitterMixin<\n IgcExpansionPanelComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-expansion-panel';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcExpansionPanelComponent, IgcIconComponent);\n }\n\n private _panelId = nextId();\n private readonly _headerRef = createRef<HTMLElement>();\n private readonly _panelRef = createRef<HTMLElement>();\n\n private readonly _player = addAnimationController(this, this._panelRef);\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'subtitle', 'indicator', 'indicator-expanded'),\n });\n\n /**\n * Indicates whether the contents of the control should be visible.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Get/Set whether the expansion panel is disabled. Disabled panels are ignored for user interactions.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n /**\n * The indicator position of the expansion panel.\n * @attr indicator-position\n */\n @property({ reflect: true, attribute: 'indicator-position' })\n public indicatorPosition: ExpansionPanelIndicatorPosition = 'start';\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addKeybindings(this, {\n ref: this._headerRef,\n skip: () => this.disabled,\n })\n .setActivateHandler(this._toggle)\n .set([altKey, arrowDown], this._show)\n .set([altKey, arrowUp], this._hide);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this._panelId = this.id || this._panelId;\n }\n\n private _handleClick(): void {\n this._headerRef.value?.focus();\n this._toggle();\n }\n\n private async _setOpenState({\n state,\n withEvent,\n }: {\n state: boolean;\n withEvent?: boolean;\n }): Promise<void> {\n if (this.open === state) return;\n\n const args = { detail: this };\n const event = state ? 'igcOpening' : 'igcClosing';\n const eventDone = state ? 'igcOpened' : 'igcClosed';\n const animation = state ? growVerIn : growVerOut;\n\n if (withEvent && !this.emitEvent(event, { cancelable: true, ...args })) {\n return;\n }\n\n this.open = state;\n\n if (await this._player.playExclusive(animation())) {\n if (withEvent) {\n this.emitEvent(eventDone, args);\n }\n }\n }\n\n private async _toggle(): Promise<void> {\n this.open ? await this._hide() : await this._show();\n }\n\n private async _show(): Promise<void> {\n await this._setOpenState({ state: true, withEvent: true });\n }\n\n private async _hide(): Promise<void> {\n await this._setOpenState({ state: false, withEvent: true });\n }\n\n /**\n * Toggles the panel open/close state.\n * @returns `true` when the open state was successfully changed.\n */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n /**\n * Hides the panel content.\n * @returns `true` when the panel was successfully closed, or `false` if already closed.\n */\n public async hide(): Promise<boolean> {\n if (!this.open) return false;\n\n await this._setOpenState({ state: false });\n return true;\n }\n\n /**\n * Shows the panel content.\n * @returns `true` when the panel was successfully opened, or `false` if already closed.\n */\n public async show(): Promise<boolean> {\n if (this.open) return false;\n\n await this._setOpenState({ state: true });\n return true;\n }\n\n private _renderIndicator() {\n const iconName = this.open ? 'collapse' : 'expand';\n const indicatorHidden =\n this.open && this._slots.hasAssignedElements('indicator-expanded');\n\n return html`\n <div part=\"indicator\" aria-hidden=\"true\">\n <slot name=\"indicator\" ?hidden=${indicatorHidden}>\n <igc-icon name=${iconName} collection=\"default\"></igc-icon>\n </slot>\n <slot name=\"indicator-expanded\" ?hidden=${!indicatorHidden}></slot>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div\n ${ref(this._headerRef)}\n part=\"header\"\n id=\"${this._panelId}-header\"\n role=\"button\"\n aria-expanded=${this.open}\n aria-disabled=${this.disabled}\n aria-controls=\"${this._panelId}-content\"\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this.disabled ? nothing : this._handleClick}\n >\n ${this._renderIndicator()}\n <div>\n <slot name=\"title\" part=\"title\"></slot>\n <slot name=\"subtitle\" part=\"subtitle\"></slot>\n </div>\n </div>\n `;\n }\n\n private _renderPanel() {\n return html`\n <div\n ${ref(this._panelRef)}\n part=\"content\"\n role=\"region\"\n id=\"${this._panelId}-content\"\n aria-labelledby=\"${this._panelId}-header\"\n .inert=${!this.open}\n aria-hidden=${!this.open}\n >\n <slot></slot>\n </div>\n `;\n }\n\n protected override render() {\n return html`${this._renderHeader()}${this._renderPanel()}`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-expansion-panel': IgcExpansionPanelComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"expansion-panel.js","sourceRoot":"","sources":["../../../src/components/expansion-panel/expansion-panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { addAnimationController } from '#animations/player.js';\nimport { growVerIn, growVerOut } from '#animations/presets/grow/index.js';\nimport {\n addKeybindings,\n altKey,\n arrowDown,\n arrowUp,\n} from '#internals/controllers/key-bindings.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { addToggleController } from '#internals/controllers/toggle.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 { renderSlottedIcon } from '#internals/templates/slotted-icon.js';\nimport { createIdGenerator } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport type { ExpansionPanelIndicatorPosition } from '../types.js';\nimport { styles } from './themes/expansion-panel.base.css.js';\nimport { styles as shared } from './themes/shared/expansion-panel.common.css.js';\nimport { all } from './themes/themes.js';\n\nexport interface IgcExpansionPanelComponentEventMap {\n igcOpening: CustomEvent<IgcExpansionPanelComponent>;\n igcOpened: CustomEvent<IgcExpansionPanelComponent>;\n igcClosing: CustomEvent<IgcExpansionPanelComponent>;\n igcClosed: CustomEvent<IgcExpansionPanelComponent>;\n}\n\nconst nextId = createIdGenerator('igc-expansion-panel');\n\n/**\n * The Expansion Panel Component provides a way to display information in a toggleable way -\n * compact summary view containing title and description and expanded detail view containing\n * additional content to the summary header.\n *\n * @element igc-expansion-panel\n *\n * @slot - renders the default content of the panel\n * @slot title - renders the title of the panel's header\n * @slot subtitle - renders the subtitle of the panel's header\n * @slot indicator - renders the expand/collapsed indicator\n * @slot indicator-expanded - renders the expanded state of the indicator\n *\n * @fires igcOpening - Emitted before opening the expansion panel.\n * @fires igcOpened - Emitted after the expansion panel is opened.\n * @fires igcClosing - Emitted before closing the expansion panel.\n * @fires igcClosed - Emitted after the expansion panel is closed.\n *\n * @csspart header - The container of the expansion indicator, title and subtitle.\n * @csspart title - The title container.\n * @csspart subtitle - The subtitle container.\n * @csspart indicator - The indicator container.\n * @csspart content - The expansion panel's content wrapper.\n */\nexport default class IgcExpansionPanelComponent extends EventEmitterMixin<\n IgcExpansionPanelComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-expansion-panel';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcExpansionPanelComponent, IgcIconComponent);\n }\n\n private _panelId = nextId();\n private readonly _headerRef = createRef<HTMLElement>();\n private readonly _panelRef = createRef<HTMLElement>();\n\n private readonly _player = addAnimationController(this, this._panelRef);\n private readonly _slots = addSlotController(this, {\n slots: setSlots('title', 'subtitle', 'indicator', 'indicator-expanded'),\n });\n\n private readonly _toggleController = addToggleController(this, {\n detail: () => this,\n transition: (open) => {\n this.open = open;\n return this._player.playExclusive(open ? growVerIn() : growVerOut());\n },\n });\n\n /**\n * Indicates whether the contents of the control should be visible.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public open = false;\n\n /**\n * Get/Set whether the expansion panel is disabled. Disabled panels are ignored for user interactions.\n * @attr\n */\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n /**\n * The indicator position of the expansion panel.\n * @attr indicator-position\n */\n @property({ reflect: true, attribute: 'indicator-position' })\n public indicatorPosition: ExpansionPanelIndicatorPosition = 'start';\n\n constructor() {\n super();\n\n addThemingController(this, all);\n\n addKeybindings(this, {\n ref: this._headerRef,\n skip: () => this.disabled,\n })\n .setActivateHandler(this._toggle)\n .set([altKey, arrowDown], this._show)\n .set([altKey, arrowUp], this._hide);\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this._panelId = this.id || this._panelId;\n }\n\n private _handleClick(): void {\n this._headerRef.value?.focus();\n this._toggle();\n }\n\n private _toggle(): Promise<boolean> {\n return this._toggleController.toggle(true);\n }\n\n /**\n * Opens the panel, emitting its toggle events.\n * @hidden @internal\n */\n public _show(): Promise<boolean> {\n return this._toggleController.show(true);\n }\n\n /**\n * Closes the panel, emitting its toggle events.\n * @hidden @internal\n */\n public _hide(): Promise<boolean> {\n return this._toggleController.hide(true);\n }\n\n /**\n * Toggles the panel open/close state.\n * @returns `true` when the open state was successfully changed.\n */\n public async toggle(): Promise<boolean> {\n return this.open ? this.hide() : this.show();\n }\n\n /**\n * Hides the panel content.\n * @returns `true` when the panel was successfully closed, or `false` if it was\n * already closed or the transition was superseded by a newer one.\n */\n public async hide(): Promise<boolean> {\n return this._toggleController.hide();\n }\n\n /**\n * Shows the panel content.\n * @returns `true` when the panel was successfully opened, or `false` if it was\n * already open or the transition was superseded by a newer one.\n */\n public async show(): Promise<boolean> {\n return this._toggleController.show();\n }\n\n private _renderIndicator() {\n const iconName = this.open ? 'collapse' : 'expand';\n const indicatorHidden =\n this.open && this._slots.hasAssignedElements('indicator-expanded');\n\n return html`\n <div part=\"indicator\" aria-hidden=\"true\">\n ${renderSlottedIcon({\n slot: 'indicator',\n icon: iconName,\n hidden: indicatorHidden,\n ariaHidden: false,\n })}\n <slot name=\"indicator-expanded\" ?hidden=${!indicatorHidden}></slot>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div\n ${ref(this._headerRef)}\n part=\"header\"\n id=\"${this._panelId}-header\"\n role=\"button\"\n aria-expanded=${this.open}\n aria-disabled=${this.disabled}\n aria-controls=\"${this._panelId}-content\"\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this.disabled ? nothing : this._handleClick}\n >\n ${this._renderIndicator()}\n <div>\n <slot name=\"title\" part=\"title\"></slot>\n <slot name=\"subtitle\" part=\"subtitle\"></slot>\n </div>\n </div>\n `;\n }\n\n private _renderPanel() {\n return html`\n <div\n ${ref(this._panelRef)}\n part=\"content\"\n role=\"region\"\n id=\"${this._panelId}-content\"\n aria-labelledby=\"${this._panelId}-header\"\n .inert=${!this.open}\n aria-hidden=${!this.open}\n >\n <slot></slot>\n </div>\n `;\n }\n\n protected override render() {\n return html`${this._renderHeader()}${this._renderPanel()}`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-expansion-panel': IgcExpansionPanelComponent;\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ export interface IgcFileInputComponentEventMap extends Omit<IgcInputComponentEve
|
|
|
5
5
|
igcCancel: CustomEvent<FileList>;
|
|
6
6
|
igcChange: CustomEvent<FileList>;
|
|
7
7
|
}
|
|
8
|
-
declare const IgcFileInputComponent_base: import("#internals/mixins/constructor.js").Constructor<import("#internals/mixins/event-emitter.js").EventEmitterInterface<IgcFileInputComponentEventMap>> & AbstractConstructor<IgcInputBaseComponent>;
|
|
8
|
+
declare const IgcFileInputComponent_base: AbstractConstructor<import("#internals/mixins/i18n.js").I18nInterface<IFileInputResourceStrings, Required<IFileInputResourceStrings>>> & import("#internals/mixins/constructor.js").Constructor<import("#internals/mixins/event-emitter.js").EventEmitterInterface<IgcFileInputComponentEventMap>> & AbstractConstructor<IgcInputBaseComponent>;
|
|
9
9
|
/**
|
|
10
10
|
* @element igc-file-input
|
|
11
11
|
*
|
|
@@ -35,9 +35,8 @@ export default class IgcFileInputComponent extends IgcFileInputComponent_base {
|
|
|
35
35
|
static styles: import("lit").CSSResult[];
|
|
36
36
|
static register(): void;
|
|
37
37
|
protected readonly _themes: import("#theming/theming-controller.js").ThemingController;
|
|
38
|
-
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "
|
|
38
|
+
protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "helper-text" | "[default]" | "suffix" | "value-missing" | "custom-error" | "file-selector-text" | "file-missing-text">;
|
|
39
39
|
protected readonly _formValue: import("#internals/mixins/forms/form-value.js").FormValue<FileList | null>;
|
|
40
|
-
protected readonly _i18nController: import("#internals/i18n/i18n-controller.js").I18nController<IFileInputResourceStrings>;
|
|
41
40
|
protected get __validators(): import("../../internals/validators.js").Validator<IgcFileInputComponent>[];
|
|
42
41
|
private get _fileNames();
|
|
43
42
|
/**
|
|
@@ -52,17 +51,6 @@ export default class IgcFileInputComponent extends IgcFileInputComponent_base {
|
|
|
52
51
|
*/
|
|
53
52
|
set value(value: string);
|
|
54
53
|
get value(): string;
|
|
55
|
-
/**
|
|
56
|
-
* The resource strings for localization.
|
|
57
|
-
*/
|
|
58
|
-
set resourceStrings(value: IFileInputResourceStrings);
|
|
59
|
-
get resourceStrings(): IFileInputResourceStrings;
|
|
60
|
-
/**
|
|
61
|
-
* Gets/Sets the locale used for getting language, affecting resource strings.
|
|
62
|
-
* @attr locale
|
|
63
|
-
*/
|
|
64
|
-
set locale(value: string);
|
|
65
|
-
get locale(): string;
|
|
66
54
|
/**
|
|
67
55
|
* Whether the control allows the user to select more than one file.
|
|
68
56
|
*
|
|
@@ -10,10 +10,10 @@ import { property, state } from 'lit/decorators.js';
|
|
|
10
10
|
import { ariaBindings } from '#internals/controllers/aria-projection.js';
|
|
11
11
|
import { addSlotController, setSlots } from '#internals/controllers/slot.js';
|
|
12
12
|
import { registerComponent } from '#internals/definitions/register.js';
|
|
13
|
-
import { addI18nController } from '#internals/i18n/i18n-controller.js';
|
|
14
13
|
import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
|
|
15
14
|
import { FormValueFileListTransformers } from '#internals/mixins/forms/form-transformers.js';
|
|
16
15
|
import { createFormValueState } from '#internals/mixins/forms/form-value.js';
|
|
16
|
+
import { I18nMixin } from '#internals/mixins/i18n.js';
|
|
17
17
|
import { partMap } from '#internals/part-map.js';
|
|
18
18
|
import { hasFiles } from '#internals/utils/dom.js';
|
|
19
19
|
import { bindIf } from '#internals/utils/lit.js';
|
|
@@ -27,7 +27,10 @@ import { styles } from './themes/file-input.base.css.js';
|
|
|
27
27
|
import { all } from './themes/themes.js';
|
|
28
28
|
import { fileValidators } from './validators.js';
|
|
29
29
|
const Slots = setSlots('prefix', 'suffix', 'helper-text', 'file-selector-text', 'file-missing-text', 'value-missing', 'custom-error', 'invalid');
|
|
30
|
-
|
|
30
|
+
const i18n = {
|
|
31
|
+
defaultEN: FileInputResourceStringsEN,
|
|
32
|
+
};
|
|
33
|
+
export default class IgcFileInputComponent extends I18nMixin(EventEmitterMixin(IgcInputBaseComponent), i18n) {
|
|
31
34
|
constructor() {
|
|
32
35
|
super(...arguments);
|
|
33
36
|
this._themes = addThemingController(this, all);
|
|
@@ -38,9 +41,6 @@ export default class IgcFileInputComponent extends EventEmitterMixin(IgcInputBas
|
|
|
38
41
|
initialValue: null,
|
|
39
42
|
transformers: FormValueFileListTransformers,
|
|
40
43
|
});
|
|
41
|
-
this._i18nController = addI18nController(this, {
|
|
42
|
-
defaultEN: FileInputResourceStringsEN,
|
|
43
|
-
});
|
|
44
44
|
this._filePickerActive = false;
|
|
45
45
|
this.multiple = false;
|
|
46
46
|
this.accept = '';
|
|
@@ -69,18 +69,6 @@ export default class IgcFileInputComponent extends EventEmitterMixin(IgcInputBas
|
|
|
69
69
|
get value() {
|
|
70
70
|
return this._input?.value ?? '';
|
|
71
71
|
}
|
|
72
|
-
set resourceStrings(value) {
|
|
73
|
-
this._i18nController.resourceStrings = value;
|
|
74
|
-
}
|
|
75
|
-
get resourceStrings() {
|
|
76
|
-
return this._i18nController.resourceStrings;
|
|
77
|
-
}
|
|
78
|
-
set locale(value) {
|
|
79
|
-
this._i18nController.locale = value;
|
|
80
|
-
}
|
|
81
|
-
get locale() {
|
|
82
|
-
return this._i18nController.locale;
|
|
83
|
-
}
|
|
84
72
|
get files() {
|
|
85
73
|
return this._input?.files ?? new DataTransfer().files;
|
|
86
74
|
}
|
|
@@ -161,12 +149,6 @@ __decorate([
|
|
|
161
149
|
__decorate([
|
|
162
150
|
property()
|
|
163
151
|
], IgcFileInputComponent.prototype, "value", null);
|
|
164
|
-
__decorate([
|
|
165
|
-
property({ attribute: false })
|
|
166
|
-
], IgcFileInputComponent.prototype, "resourceStrings", null);
|
|
167
|
-
__decorate([
|
|
168
|
-
property()
|
|
169
|
-
], IgcFileInputComponent.prototype, "locale", null);
|
|
170
152
|
__decorate([
|
|
171
153
|
property({ type: Boolean, reflect: true })
|
|
172
154
|
], IgcFileInputComponent.prototype, "multiple", void 0);
|