@infineon/infineon-design-system-stencil 38.0.0--canary.1954.2e876da3ab7a5b6c0fd09a30a0866dbb0381178d.0 → 38.0.0--canary.1954.025edc54dd9ef58411246fbb0e4c4729d11567e8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/framework-detection-78986016.js +93 -0
- package/dist/cjs/framework-detection-78986016.js.map +1 -0
- package/dist/cjs/ifx-accordion_2.cjs.entry.js +4 -3
- package/dist/cjs/ifx-accordion_2.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-alert_2.cjs.entry.js +3 -2
- package/dist/cjs/ifx-alert_2.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-badge.cjs.entry.js +4 -3
- package/dist/cjs/ifx-badge.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-basic-table.cjs.entry.js +4 -3
- package/dist/cjs/ifx-basic-table.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-breadcrumb.cjs.entry.js +4 -3
- package/dist/cjs/ifx-breadcrumb.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-button.cjs.entry.js +4 -3
- package/dist/cjs/ifx-button.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-card.cjs.entry.js +6 -5
- package/dist/cjs/ifx-card.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-checkbox-group.cjs.entry.js +4 -3
- package/dist/cjs/ifx-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-checkbox.cjs.entry.js +6 -5
- package/dist/cjs/ifx-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-chip_3.cjs.entry.js +14 -12
- package/dist/cjs/ifx-chip_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-content-switcher.cjs.entry.js +4 -3
- package/dist/cjs/ifx-content-switcher.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-date-picker.cjs.entry.js +5 -4
- package/dist/cjs/ifx-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-dropdown.cjs.entry.js +4 -3
- package/dist/cjs/ifx-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-file-upload.cjs.entry.js +5 -4
- package/dist/cjs/ifx-file-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-footer.cjs.entry.js +7 -6
- package/dist/cjs/ifx-footer.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-icon-button.cjs.entry.js +4 -3
- package/dist/cjs/ifx-icon-button.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-icon.cjs.entry.js +4 -3
- package/dist/cjs/ifx-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-indicator.cjs.entry.js +5 -4
- package/dist/cjs/ifx-indicator.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-link.cjs.entry.js +4 -3
- package/dist/cjs/ifx-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-modal.cjs.entry.js +5 -4
- package/dist/cjs/ifx-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-multiselect_2.cjs.entry.js +3 -2
- package/dist/cjs/ifx-multiselect_2.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-navbar.cjs.entry.js +6 -5
- package/dist/cjs/ifx-navbar.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-notification.cjs.entry.js +5 -4
- package/dist/cjs/ifx-notification.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-progress-bar.cjs.entry.js +4 -3
- package/dist/cjs/ifx-progress-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-radio-button-group.cjs.entry.js +4 -3
- package/dist/cjs/ifx-radio-button-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-radio-button.cjs.entry.js +5 -4
- package/dist/cjs/ifx-radio-button.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-search-bar.cjs.entry.js +4 -3
- package/dist/cjs/ifx-search-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-search-field.cjs.entry.js +6 -233
- package/dist/cjs/ifx-search-field.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-segmented-control.cjs.entry.js +5 -4
- package/dist/cjs/ifx-segmented-control.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-select.cjs.entry.js +5 -4
- package/dist/cjs/ifx-select.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-sidebar.cjs.entry.js +8 -7
- package/dist/cjs/ifx-sidebar.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-slider.cjs.entry.js +5 -4
- package/dist/cjs/ifx-slider.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-spinner_2.cjs.entry.js +11 -9
- package/dist/cjs/ifx-spinner_2.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-status.cjs.entry.js +4 -3
- package/dist/cjs/ifx-status.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-stepper.cjs.entry.js +5 -4
- package/dist/cjs/ifx-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-switch.cjs.entry.js +4 -3
- package/dist/cjs/ifx-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-table.cjs.entry.js +5 -4
- package/dist/cjs/ifx-table.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-tabs.cjs.entry.js +5 -4
- package/dist/cjs/ifx-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-tag.cjs.entry.js +4 -3
- package/dist/cjs/ifx-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-textarea.cjs.entry.js +4 -3
- package/dist/cjs/ifx-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-tooltip.cjs.entry.js +7 -6
- package/dist/cjs/ifx-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/ifx-tree-view.cjs.entry.js +4 -3
- package/dist/cjs/ifx-tree-view.cjs.entry.js.map +1 -1
- package/dist/collection/components/accordion/accordion.js +4 -2
- package/dist/collection/components/accordion/accordion.js.map +1 -1
- package/dist/collection/components/alert/alert.js +3 -1
- package/dist/collection/components/alert/alert.js.map +1 -1
- package/dist/collection/components/badge/badge.js +4 -2
- package/dist/collection/components/badge/badge.js.map +1 -1
- package/dist/collection/components/breadcrumb/breadcrumb.js +4 -2
- package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/collection/components/button/button.js +4 -2
- package/dist/collection/components/button/button.js.map +1 -1
- package/dist/collection/components/card/card.js +6 -4
- package/dist/collection/components/card/card.js.map +1 -1
- package/dist/collection/components/checkbox/checkbox.js +6 -4
- package/dist/collection/components/checkbox/checkbox.js.map +1 -1
- package/dist/collection/components/checkbox-group/checkbox-group.js +4 -2
- package/dist/collection/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/collection/components/chip/chip.js +11 -9
- package/dist/collection/components/chip/chip.js.map +1 -1
- package/dist/collection/components/content-switcher/content-switcher.js +4 -2
- package/dist/collection/components/content-switcher/content-switcher.js.map +1 -1
- package/dist/collection/components/date-picker/date-picker.js +5 -3
- package/dist/collection/components/date-picker/date-picker.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.js +4 -2
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/file-upload/file-upload.js +5 -3
- package/dist/collection/components/file-upload/file-upload.js.map +1 -1
- package/dist/collection/components/footer/footer.js +7 -5
- package/dist/collection/components/footer/footer.js.map +1 -1
- package/dist/collection/components/icon/infineonIconStencil.js +4 -2
- package/dist/collection/components/icon/infineonIconStencil.js.map +1 -1
- package/dist/collection/components/icon-button/icon-button.js +4 -2
- package/dist/collection/components/icon-button/icon-button.js.map +1 -1
- package/dist/collection/components/indicator/indicator.js +5 -3
- package/dist/collection/components/indicator/indicator.js.map +1 -1
- package/dist/collection/components/link/link.js +4 -2
- package/dist/collection/components/link/link.js.map +1 -1
- package/dist/collection/components/modal/modal.js +5 -3
- package/dist/collection/components/modal/modal.js.map +1 -1
- package/dist/collection/components/navigation/navbar/navbar.js +6 -4
- package/dist/collection/components/navigation/navbar/navbar.js.map +1 -1
- package/dist/collection/components/navigation/sidebar/sidebar.js +8 -6
- package/dist/collection/components/navigation/sidebar/sidebar.js.map +1 -1
- package/dist/collection/components/notification/notification.js +5 -3
- package/dist/collection/components/notification/notification.js.map +1 -1
- package/dist/collection/components/pagination/pagination.js +4 -2
- package/dist/collection/components/pagination/pagination.js.map +1 -1
- package/dist/collection/components/progress-bar/progress-bar.js +4 -2
- package/dist/collection/components/progress-bar/progress-bar.js.map +1 -1
- package/dist/collection/components/radio-button/radio-button.js +5 -3
- package/dist/collection/components/radio-button/radio-button.js.map +1 -1
- package/dist/collection/components/radio-button-group/radio-button-group.js +4 -2
- package/dist/collection/components/radio-button-group/radio-button-group.js.map +1 -1
- package/dist/collection/components/search-bar/search-bar.js +4 -2
- package/dist/collection/components/search-bar/search-bar.js.map +1 -1
- package/dist/collection/components/search-field/search-field.js +10 -236
- package/dist/collection/components/search-field/search-field.js.map +1 -1
- package/dist/collection/components/segmented-control/segmented-control.js +5 -3
- package/dist/collection/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/collection/components/select/multi-select/multiselect.js +3 -1
- package/dist/collection/components/select/multi-select/multiselect.js.map +1 -1
- package/dist/collection/components/select/single-select/select.js +5 -3
- package/dist/collection/components/select/single-select/select.js.map +1 -1
- package/dist/collection/components/slider/slider.js +5 -3
- package/dist/collection/components/slider/slider.js.map +1 -1
- package/dist/collection/components/spinner/spinner.js +5 -3
- package/dist/collection/components/spinner/spinner.js.map +1 -1
- package/dist/collection/components/status/status.js +4 -2
- package/dist/collection/components/status/status.js.map +1 -1
- package/dist/collection/components/stepper/stepper.js +5 -3
- package/dist/collection/components/stepper/stepper.js.map +1 -1
- package/dist/collection/components/switch/switch.js +4 -2
- package/dist/collection/components/switch/switch.js.map +1 -1
- package/dist/collection/components/table-advanced-version/table.js +5 -3
- package/dist/collection/components/table-advanced-version/table.js.map +1 -1
- package/dist/collection/components/table-basic-version/table.js +4 -2
- package/dist/collection/components/table-basic-version/table.js.map +1 -1
- package/dist/collection/components/tabs/tabs.js +5 -3
- package/dist/collection/components/tabs/tabs.js.map +1 -1
- package/dist/collection/components/tag/tag.js +4 -2
- package/dist/collection/components/tag/tag.js.map +1 -1
- package/dist/collection/components/text-field/text-field.js +7 -5
- package/dist/collection/components/text-field/text-field.js.map +1 -1
- package/dist/collection/components/textarea/textarea.js +4 -2
- package/dist/collection/components/textarea/textarea.js.map +1 -1
- package/dist/collection/components/tooltip/tooltip.js +7 -5
- package/dist/collection/components/tooltip/tooltip.js.map +1 -1
- package/dist/collection/components/tree-view/tree-view.js +4 -2
- package/dist/collection/components/tree-view/tree-view.js.map +1 -1
- package/dist/collection/global/utils/framework-detection.js +50 -0
- package/dist/collection/global/utils/framework-detection.js.map +1 -0
- package/dist/collection/global/utils/tracking.js +3 -2
- package/dist/collection/global/utils/tracking.js.map +1 -1
- package/dist/components/ifx-accordion-item.js +1 -1
- package/dist/components/ifx-accordion.js +1 -1
- package/dist/components/ifx-alert.js +1 -1
- package/dist/components/ifx-badge.js +4 -3
- package/dist/components/ifx-badge.js.map +1 -1
- package/dist/components/ifx-basic-table.js +4 -3
- package/dist/components/ifx-basic-table.js.map +1 -1
- package/dist/components/ifx-breadcrumb-item-label.js +1 -1
- package/dist/components/ifx-breadcrumb.js +4 -3
- package/dist/components/ifx-breadcrumb.js.map +1 -1
- package/dist/components/ifx-button.js +1 -1
- package/dist/components/ifx-card.js +6 -5
- package/dist/components/ifx-card.js.map +1 -1
- package/dist/components/ifx-checkbox-group.js +5 -4
- package/dist/components/ifx-checkbox-group.js.map +1 -1
- package/dist/components/ifx-checkbox.js +1 -1
- package/dist/components/ifx-chip-item.js +1 -1
- package/dist/components/ifx-chip.js +1 -1
- package/dist/components/ifx-content-switcher.js +4 -3
- package/dist/components/ifx-content-switcher.js.map +1 -1
- package/dist/components/ifx-date-picker.js +6 -5
- package/dist/components/ifx-date-picker.js.map +1 -1
- package/dist/components/ifx-download.js +1 -1
- package/dist/components/ifx-dropdown-item.js +1 -1
- package/dist/components/ifx-dropdown-trigger-button.js +2 -2
- package/dist/components/ifx-dropdown.js +4 -3
- package/dist/components/ifx-dropdown.js.map +1 -1
- package/dist/components/ifx-faq.js +3 -3
- package/dist/components/ifx-file-upload.js +9 -8
- package/dist/components/ifx-file-upload.js.map +1 -1
- package/dist/components/ifx-filter-accordion.js +2 -2
- package/dist/components/ifx-filter-bar.js +2 -2
- package/dist/components/ifx-filter-search.js +2 -2
- package/dist/components/ifx-footer.js +7 -6
- package/dist/components/ifx-footer.js.map +1 -1
- package/dist/components/ifx-icon-button.js +1 -1
- package/dist/components/ifx-icon.js +1 -1
- package/dist/components/ifx-icons-preview.js +4 -4
- package/dist/components/ifx-indicator.js +1 -1
- package/dist/components/ifx-link.js +1 -1
- package/dist/components/ifx-list-entry.js +3 -3
- package/dist/components/ifx-list.js +2 -2
- package/dist/components/ifx-modal.js +7 -6
- package/dist/components/ifx-modal.js.map +1 -1
- package/dist/components/ifx-multiselect-option.js +1 -1
- package/dist/components/ifx-multiselect.js +1 -1
- package/dist/components/ifx-navbar-item.js +2 -2
- package/dist/components/ifx-navbar.js +7 -6
- package/dist/components/ifx-navbar.js.map +1 -1
- package/dist/components/ifx-notification.js +1 -1
- package/dist/components/ifx-overview-table.js +3 -3
- package/dist/components/ifx-pagination.js +1 -1
- package/dist/components/ifx-progress-bar.js +1 -1
- package/dist/components/ifx-radio-button-group.js +5 -4
- package/dist/components/ifx-radio-button-group.js.map +1 -1
- package/dist/components/ifx-radio-button.js +1 -1
- package/dist/components/ifx-search-bar.js +6 -5
- package/dist/components/ifx-search-bar.js.map +1 -1
- package/dist/components/ifx-search-field.js +1 -1
- package/dist/components/ifx-segment.js +1 -1
- package/dist/components/ifx-segmented-control.js +6 -5
- package/dist/components/ifx-segmented-control.js.map +1 -1
- package/dist/components/ifx-select.js +1 -1
- package/dist/components/ifx-set-filter.js +7 -7
- package/dist/components/ifx-sidebar-item.js +2 -2
- package/dist/components/ifx-sidebar.js +8 -7
- package/dist/components/ifx-sidebar.js.map +1 -1
- package/dist/components/ifx-slider.js +6 -5
- package/dist/components/ifx-slider.js.map +1 -1
- package/dist/components/ifx-spinner.js +1 -1
- package/dist/components/ifx-status.js +4 -3
- package/dist/components/ifx-status.js.map +1 -1
- package/dist/components/ifx-step.js +1 -1
- package/dist/components/ifx-stepper.js +5 -4
- package/dist/components/ifx-stepper.js.map +1 -1
- package/dist/components/ifx-switch.js +4 -3
- package/dist/components/ifx-switch.js.map +1 -1
- package/dist/components/ifx-table.js +14 -13
- package/dist/components/ifx-table.js.map +1 -1
- package/dist/components/ifx-tabs.js +6 -5
- package/dist/components/ifx-tabs.js.map +1 -1
- package/dist/components/ifx-tag.js +5 -4
- package/dist/components/ifx-tag.js.map +1 -1
- package/dist/components/ifx-template.js +1 -1
- package/dist/components/ifx-templates-ui.js +8 -8
- package/dist/components/ifx-text-field.js +1 -1
- package/dist/components/ifx-textarea.js +4 -3
- package/dist/components/ifx-textarea.js.map +1 -1
- package/dist/components/ifx-tooltip.js +8 -7
- package/dist/components/ifx-tooltip.js.map +1 -1
- package/dist/components/ifx-tree-view-item.js +2 -2
- package/dist/components/ifx-tree-view.js +4 -3
- package/dist/components/ifx-tree-view.js.map +1 -1
- package/dist/components/{p-0e4632d4.js → p-28bc54da.js} +5 -4
- package/dist/components/p-28bc54da.js.map +1 -0
- package/dist/components/{p-cca71d97.js → p-29a39b8c.js} +5 -4
- package/dist/components/p-29a39b8c.js.map +1 -0
- package/dist/components/{p-0218abcd.js → p-2b48c8b6.js} +9 -8
- package/dist/components/p-2b48c8b6.js.map +1 -0
- package/dist/components/{p-ab4beff7.js → p-307b57c7.js} +8 -7
- package/dist/components/p-307b57c7.js.map +1 -0
- package/dist/components/{p-5853a3c8.js → p-35ea1255.js} +8 -7
- package/dist/components/p-35ea1255.js.map +1 -0
- package/dist/components/{p-b1ca5daf.js → p-4f6ab2e4.js} +6 -5
- package/dist/components/p-4f6ab2e4.js.map +1 -0
- package/dist/components/{p-f9815000.js → p-5084c36c.js} +5 -4
- package/dist/components/p-5084c36c.js.map +1 -0
- package/dist/components/{p-0590639e.js → p-6ff767df.js} +2 -2
- package/dist/components/{p-0590639e.js.map → p-6ff767df.js.map} +1 -1
- package/dist/components/{p-331ca3f3.js → p-72aae821.js} +8 -7
- package/dist/components/p-72aae821.js.map +1 -0
- package/dist/components/{p-c7297dfd.js → p-78e57415.js} +8 -235
- package/dist/components/p-78e57415.js.map +1 -0
- package/dist/components/{p-9ea9e274.js → p-80bd74d1.js} +5 -4
- package/dist/components/p-80bd74d1.js.map +1 -0
- package/dist/components/{p-940ee336.js → p-862de1e8.js} +3 -3
- package/dist/components/{p-940ee336.js.map → p-862de1e8.js.map} +1 -1
- package/dist/components/{p-94da6823.js → p-88385a57.js} +6 -5
- package/dist/components/p-88385a57.js.map +1 -0
- package/dist/components/{p-f9c7ad2e.js → p-a042d13d.js} +3 -3
- package/dist/components/{p-f9c7ad2e.js.map → p-a042d13d.js.map} +1 -1
- package/dist/components/{p-43438af8.js → p-abe3ddf7.js} +6 -6
- package/dist/components/{p-43438af8.js.map → p-abe3ddf7.js.map} +1 -1
- package/dist/components/{p-927d5fd1.js → p-b8d74876.js} +14 -13
- package/dist/components/p-b8d74876.js.map +1 -0
- package/dist/components/{p-c601034d.js → p-b8f1ae15.js} +7 -6
- package/dist/components/p-b8f1ae15.js.map +1 -0
- package/dist/components/{p-6d95b3c1.js → p-bb9b541f.js} +5 -4
- package/dist/components/p-bb9b541f.js.map +1 -0
- package/dist/components/{p-122e79fc.js → p-bbdf3f55.js} +7 -6
- package/dist/components/p-bbdf3f55.js.map +1 -0
- package/dist/components/{p-54b39a91.js → p-bfd161fb.js} +6 -5
- package/dist/components/p-bfd161fb.js.map +1 -0
- package/dist/components/{p-96237222.js → p-c8084dc5.js} +6 -5
- package/dist/components/p-c8084dc5.js.map +1 -0
- package/dist/components/{p-816b2612.js → p-e7f270c1.js} +5 -4
- package/dist/components/p-e7f270c1.js.map +1 -0
- package/dist/components/p-e8504e6b.js +90 -0
- package/dist/components/p-e8504e6b.js.map +1 -0
- package/dist/esm/framework-detection-198a17af.js +90 -0
- package/dist/esm/framework-detection-198a17af.js.map +1 -0
- package/dist/esm/ifx-accordion_2.entry.js +4 -3
- package/dist/esm/ifx-accordion_2.entry.js.map +1 -1
- package/dist/esm/ifx-alert_2.entry.js +3 -2
- package/dist/esm/ifx-alert_2.entry.js.map +1 -1
- package/dist/esm/ifx-badge.entry.js +4 -3
- package/dist/esm/ifx-badge.entry.js.map +1 -1
- package/dist/esm/ifx-basic-table.entry.js +4 -3
- package/dist/esm/ifx-basic-table.entry.js.map +1 -1
- package/dist/esm/ifx-breadcrumb.entry.js +4 -3
- package/dist/esm/ifx-breadcrumb.entry.js.map +1 -1
- package/dist/esm/ifx-button.entry.js +4 -3
- package/dist/esm/ifx-button.entry.js.map +1 -1
- package/dist/esm/ifx-card.entry.js +6 -5
- package/dist/esm/ifx-card.entry.js.map +1 -1
- package/dist/esm/ifx-checkbox-group.entry.js +4 -3
- package/dist/esm/ifx-checkbox-group.entry.js.map +1 -1
- package/dist/esm/ifx-checkbox.entry.js +6 -5
- package/dist/esm/ifx-checkbox.entry.js.map +1 -1
- package/dist/esm/ifx-chip_3.entry.js +14 -12
- package/dist/esm/ifx-chip_3.entry.js.map +1 -1
- package/dist/esm/ifx-content-switcher.entry.js +4 -3
- package/dist/esm/ifx-content-switcher.entry.js.map +1 -1
- package/dist/esm/ifx-date-picker.entry.js +5 -4
- package/dist/esm/ifx-date-picker.entry.js.map +1 -1
- package/dist/esm/ifx-dropdown.entry.js +4 -3
- package/dist/esm/ifx-dropdown.entry.js.map +1 -1
- package/dist/esm/ifx-file-upload.entry.js +5 -4
- package/dist/esm/ifx-file-upload.entry.js.map +1 -1
- package/dist/esm/ifx-footer.entry.js +7 -6
- package/dist/esm/ifx-footer.entry.js.map +1 -1
- package/dist/esm/ifx-icon-button.entry.js +4 -3
- package/dist/esm/ifx-icon-button.entry.js.map +1 -1
- package/dist/esm/ifx-icon.entry.js +4 -3
- package/dist/esm/ifx-icon.entry.js.map +1 -1
- package/dist/esm/ifx-indicator.entry.js +5 -4
- package/dist/esm/ifx-indicator.entry.js.map +1 -1
- package/dist/esm/ifx-link.entry.js +4 -3
- package/dist/esm/ifx-link.entry.js.map +1 -1
- package/dist/esm/ifx-modal.entry.js +5 -4
- package/dist/esm/ifx-modal.entry.js.map +1 -1
- package/dist/esm/ifx-multiselect_2.entry.js +3 -2
- package/dist/esm/ifx-multiselect_2.entry.js.map +1 -1
- package/dist/esm/ifx-navbar.entry.js +6 -5
- package/dist/esm/ifx-navbar.entry.js.map +1 -1
- package/dist/esm/ifx-notification.entry.js +5 -4
- package/dist/esm/ifx-notification.entry.js.map +1 -1
- package/dist/esm/ifx-progress-bar.entry.js +4 -3
- package/dist/esm/ifx-progress-bar.entry.js.map +1 -1
- package/dist/esm/ifx-radio-button-group.entry.js +4 -3
- package/dist/esm/ifx-radio-button-group.entry.js.map +1 -1
- package/dist/esm/ifx-radio-button.entry.js +5 -4
- package/dist/esm/ifx-radio-button.entry.js.map +1 -1
- package/dist/esm/ifx-search-bar.entry.js +4 -3
- package/dist/esm/ifx-search-bar.entry.js.map +1 -1
- package/dist/esm/ifx-search-field.entry.js +6 -233
- package/dist/esm/ifx-search-field.entry.js.map +1 -1
- package/dist/esm/ifx-segmented-control.entry.js +5 -4
- package/dist/esm/ifx-segmented-control.entry.js.map +1 -1
- package/dist/esm/ifx-select.entry.js +5 -4
- package/dist/esm/ifx-select.entry.js.map +1 -1
- package/dist/esm/ifx-sidebar.entry.js +8 -7
- package/dist/esm/ifx-sidebar.entry.js.map +1 -1
- package/dist/esm/ifx-slider.entry.js +5 -4
- package/dist/esm/ifx-slider.entry.js.map +1 -1
- package/dist/esm/ifx-spinner_2.entry.js +11 -9
- package/dist/esm/ifx-spinner_2.entry.js.map +1 -1
- package/dist/esm/ifx-status.entry.js +4 -3
- package/dist/esm/ifx-status.entry.js.map +1 -1
- package/dist/esm/ifx-stepper.entry.js +5 -4
- package/dist/esm/ifx-stepper.entry.js.map +1 -1
- package/dist/esm/ifx-switch.entry.js +4 -3
- package/dist/esm/ifx-switch.entry.js.map +1 -1
- package/dist/esm/ifx-table.entry.js +5 -4
- package/dist/esm/ifx-table.entry.js.map +1 -1
- package/dist/esm/ifx-tabs.entry.js +5 -4
- package/dist/esm/ifx-tabs.entry.js.map +1 -1
- package/dist/esm/ifx-tag.entry.js +4 -3
- package/dist/esm/ifx-tag.entry.js.map +1 -1
- package/dist/esm/ifx-textarea.entry.js +4 -3
- package/dist/esm/ifx-textarea.entry.js.map +1 -1
- package/dist/esm/ifx-tooltip.entry.js +7 -6
- package/dist/esm/ifx-tooltip.entry.js.map +1 -1
- package/dist/esm/ifx-tree-view.entry.js +4 -3
- package/dist/esm/ifx-tree-view.entry.js.map +1 -1
- package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js +1 -1
- package/dist/infineon-design-system-stencil/p-0b4463ab.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-0b4463ab.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-13ae34b7.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-13ae34b7.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-172693c5.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-172693c5.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-1dd9671c.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-1dd9671c.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-218c8275.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-218c8275.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-2db6075a.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-2db6075a.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-35377154.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-35377154.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/{p-b393c1e7.entry.js → p-3ccd9313.entry.js} +3 -3
- package/dist/infineon-design-system-stencil/p-3ccd9313.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-40be6362.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-40be6362.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-41d133b0.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-41d133b0.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-431d50b8.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-431d50b8.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-44a61708.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-44a61708.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-47e35811.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-47e35811.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-47fbcdf1.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-47fbcdf1.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-486f1f73.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-486f1f73.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-4ef0a41f.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-4ef0a41f.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-507107be.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-507107be.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-5f433868.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-5f433868.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-6417bc5b.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-6417bc5b.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-65af7ef8.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-65af7ef8.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-707385f2.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-707385f2.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-7097e349.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-7097e349.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-754c7267.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-754c7267.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-7f9e8260.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-7f9e8260.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-80d389ab.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-80d389ab.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-816d8d89.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-816d8d89.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-9078ad60.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-9078ad60.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-939b06c8.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-939b06c8.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-97c37974.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-97c37974.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-9e9f166d.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-9e9f166d.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-9f4f024a.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-9f4f024a.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-a1d02e8e.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-a1d02e8e.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-bb8d7729.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-bb8d7729.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-bc216f6d.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-bc216f6d.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-bed1cceb.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-bed1cceb.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-c3acb336.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-c3acb336.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-ce0db9fb.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-ce0db9fb.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-d327ea88.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-d327ea88.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-d448d22c.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-d448d22c.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-e45947e8.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-e45947e8.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-e5fe179a.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-e5fe179a.entry.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-e8504e6b.js +2 -0
- package/dist/infineon-design-system-stencil/p-e8504e6b.js.map +1 -0
- package/dist/infineon-design-system-stencil/p-f47071d5.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-f47071d5.entry.js.map +1 -0
- package/dist/types/components/search-field/search-field.d.ts +3 -17
- package/dist/types/components.d.ts +6 -6
- package/dist/types/global/utils/framework-detection.d.ts +1 -0
- package/dist/types/global/utils/tracking.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/tracking-f00364dc.js +0 -41
- package/dist/cjs/tracking-f00364dc.js.map +0 -1
- package/dist/components/p-0218abcd.js.map +0 -1
- package/dist/components/p-0e4632d4.js.map +0 -1
- package/dist/components/p-122e79fc.js.map +0 -1
- package/dist/components/p-331ca3f3.js.map +0 -1
- package/dist/components/p-54b39a91.js.map +0 -1
- package/dist/components/p-5853a3c8.js.map +0 -1
- package/dist/components/p-6d95b3c1.js.map +0 -1
- package/dist/components/p-6ecb6a6f.js +0 -39
- package/dist/components/p-6ecb6a6f.js.map +0 -1
- package/dist/components/p-816b2612.js.map +0 -1
- package/dist/components/p-927d5fd1.js.map +0 -1
- package/dist/components/p-94da6823.js.map +0 -1
- package/dist/components/p-96237222.js.map +0 -1
- package/dist/components/p-9ea9e274.js.map +0 -1
- package/dist/components/p-ab4beff7.js.map +0 -1
- package/dist/components/p-b1ca5daf.js.map +0 -1
- package/dist/components/p-c601034d.js.map +0 -1
- package/dist/components/p-c7297dfd.js.map +0 -1
- package/dist/components/p-cca71d97.js.map +0 -1
- package/dist/components/p-f9815000.js.map +0 -1
- package/dist/esm/tracking-a7efdbcd.js +0 -39
- package/dist/esm/tracking-a7efdbcd.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-0c60ce87.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-0c60ce87.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-10ef115a.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-10ef115a.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-14525860.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-14525860.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-14842bbb.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-14842bbb.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-1e7646b7.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-1e7646b7.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-1fd80576.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-1fd80576.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-227fa186.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-227fa186.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-26c73456.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-26c73456.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-3dd8bdf4.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-3dd8bdf4.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-52420868.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-52420868.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-5493e6f5.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-5493e6f5.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-6d72ad32.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-6d72ad32.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-6ecb6a6f.js +0 -2
- package/dist/infineon-design-system-stencil/p-6ecb6a6f.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-706a8ead.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-706a8ead.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-76914839.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-76914839.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-796675ed.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-796675ed.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-82c59e6b.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-82c59e6b.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-877e1d37.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-877e1d37.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-8a7bfe65.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-8a7bfe65.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-8e838717.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-8e838717.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-8eab207b.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-8eab207b.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-9be0905e.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-9be0905e.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-9cfe025d.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-9cfe025d.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-a0006775.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-a0006775.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-ae8110b7.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-ae8110b7.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-aeaa6d0b.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-aeaa6d0b.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-b17a0e8c.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-b17a0e8c.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-b393c1e7.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-b83380f8.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-b83380f8.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-bb7b2a3c.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-bb7b2a3c.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-c88876dc.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-c88876dc.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-d4b4107a.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-d4b4107a.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-d660ebea.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-d660ebea.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-d8a57524.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-d8a57524.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e0978af0.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e0978af0.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e196740d.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e196740d.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e45d85fc.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e45d85fc.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e5018880.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e5018880.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-e61d3fc6.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-e61d3fc6.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-ed869b07.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-ed869b07.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-f3f8d603.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-f3f8d603.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-f84af2e3.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-f84af2e3.entry.js.map +0 -1
- package/dist/infineon-design-system-stencil/p-fe22fc31.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-fe22fc31.entry.js.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["infineonIconStencilCss","IfxIconStyle0","InfineonIconStencil","constructor","hostRef","this","icon","updateIcon","newIcon","internalIcon","setIcon","convertStringToHtml","htmlString","div","document","createElement","innerHTML","firstChild","convertHtmlToObject","htmlElement","pathToObject","Array","from","attributes","name","value","reduce","acc","current","convertPathsToVnode","htmlPath","svgPaths","parentPath","parentPathToVnode","h","push","paths","querySelectorAll","pathLength","length","i","objToVnode","getSVG","svgPath","ifxIcon","width","getAttribute","height","fill","viewBox","class","xmlns","constructIcon","SVG","console","error","consoleError","emit","toCamelCase","str","replace","_","chr","toUpperCase","m","toLowerCase","iconName","getIcon","isInsideAgGrid","el","_a","className","startsWith","parentElement","isInsideChoices","componentWillLoad","isNestedInIfxComponent","framework","detectFramework","trackComponent","render","Host","key"],"sources":["src/components/icon/infineonIconStencil.scss?tag=ifx-icon","src/components/icon/infineonIconStencil.tsx"],"sourcesContent":["ifx-icon {\n display: inline-flex;\n justify-content: center;\n\n &:empty {\n display: none;\n }\n}","import { Component, Prop, h, Host, Event, EventEmitter, Watch, State, Element } from '@stencil/core';\nimport { getIcon } from '@infineon/infineon-icons'\nimport { trackComponent } from '../../global/utils/tracking'; \nimport { isNestedInIfxComponent } from '../../global/utils/dom-utils';\nimport { detectFramework } from '../../global/utils/framework-detection';\n\n\n@Component({\n tag: 'ifx-icon',\n styleUrl: './infineonIconStencil.scss'\n})\n\nexport class InfineonIconStencil {\n @Element() el: HTMLElement;\n @Prop({ mutable: true }) icon: string = \"\"\n @Prop({ mutable: true }) ifxIcon: any;\n @State() internalIcon: string;\n @Event() consoleError: EventEmitter<boolean>;\n\n @Watch('icon')\n updateIcon(newIcon: string) { \n this.internalIcon = newIcon;\n this.setIcon()\n }\n\n convertStringToHtml(htmlString) { \n const div = document.createElement('div')\n div.innerHTML = htmlString\n return div.firstChild\n }\n\n convertHtmlToObject(htmlElement) { \n let pathToObject = Array\n .from(htmlElement.attributes, ({ name, value }) => ({ name, value }))\n .reduce((acc, current) => {\n acc[current.name] = current.value\n return acc\n }, {})\n\n return pathToObject\n }\n\n convertPathsToVnode(htmlPath) { \n let svgPaths = []\n const parentPath = this.convertHtmlToObject(htmlPath);\n const parentPathToVnode = h(\"path\", parentPath);\n svgPaths.push(parentPathToVnode)\n if(htmlPath.firstChild) { \n const paths = htmlPath.querySelectorAll('path');\n const pathLength = htmlPath.querySelectorAll('path').length;\n for(let i = 0; i < pathLength; i++) { \n let pathToObject = this.convertHtmlToObject(paths[i])\n let objToVnode = h(\"path\", pathToObject)\n svgPaths.push(objToVnode)\n } \n }\n return svgPaths\n }\n\n getSVG(svgPath) {\n const htmlPath = this.convertStringToHtml(this.ifxIcon) as SVGElement;\n const width = htmlPath.getAttribute('width');\n const height = htmlPath.getAttribute('height');\n const fill = htmlPath.getAttribute('fill');\n const viewBox = htmlPath.getAttribute('viewBox');\n \n return <svg class=\"inline-svg\" width={width} height={height} xmlns=\"http://www.w3.org/2000/svg\" fill={fill} viewBox={viewBox}>{...svgPath}</svg>\n }\n\n constructIcon() {\n if(this.ifxIcon) {\n const htmlPath = this.convertStringToHtml(this.ifxIcon)\n const svgPath = this.convertPathsToVnode(htmlPath)\n const SVG = this.getSVG(svgPath)\n return SVG;\n } else if(this.icon !== \"\") {\n console.error('Icon not found!')\n this.consoleError.emit(true)\n return;\n } else { \n return;\n }\n }\n\nsetIcon() { \n const toCamelCase = str =>\n str\n .replace(/[-_]+(.)/g, (_, chr) => chr.toUpperCase()) // handle - and _ to uppercase\n .replace(/^(.)/, (m) => m.toLowerCase()); // ensure first letter is lowercase\n\n const iconName = toCamelCase(this.internalIcon);\n this.ifxIcon = getIcon(iconName);\n}\n\n isInsideAgGrid(el: HTMLElement): boolean {\n let current = el;\n while (current) {\n if (current.className?.toLowerCase().startsWith('ag-')) {\n return true;\n }\n current = current.parentElement;\n }\n return false;\n}\n\n isInsideChoices(el: HTMLElement): boolean {\n let current = el;\n while (current) {\n if (current.className?.toLowerCase().startsWith('choices__')) {\n return true;\n }\n current = current.parentElement;\n }\n return false;\n }\n\n componentWillLoad() {\n this.internalIcon = this.icon;\n this.setIcon()\n\n if(!isNestedInIfxComponent(this.el)) { \n if(!this.isInsideAgGrid(this.el) && !this.isInsideChoices(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-icon', framework)\n }\n }\n }\n\n render() {\n return (\n <Host>\n {this.constructIcon()}\n </Host>\n );\n }\n}"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as t,c as i,h as s,g as e}from"./p-b7a462e5.js";import{d as a,t as o}from"./p-e8504e6b.js";import{i as n}from"./p-1ecafb97.js";const r=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:flex}.tabs{display:flex;font-family:var(--ifx-font-family);width:100%}.tabs.horizontal{flex-direction:column}.tabs.vertical{flex-direction:row}.tabs-list{display:flex;list-style:none;padding:0;margin:0;position:relative;font-weight:600}.tabs-list:focus-within .active-border{display:none}.active-border{content:"";position:absolute;transition:left 0.3s ease-in-out, top 0.3s ease-in-out, height 0.3s ease-in-out}.tabs.horizontal .active-border{bottom:0;left:0;height:2px;background-color:#0A8276}.tabs.vertical .tabs-list{flex-direction:column;border-bottom:none}.tabs.vertical .tab-content{padding-top:0px;padding-left:32px}.tabs:not(.vertical) .tab-item.full-width{flex:1}.tab-item{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;cursor:pointer;position:relative}.tab-item.icon__right{flex-direction:row-reverse;justify-content:flex-end}.tab-item:hover{color:#0A8276}.tab-item:active,.tab-item.active{color:#0A8276}.tab-item:focus,.tab-item.focus{outline:none;border-radius:1px;box-shadow:0 0 0 2px #FFFFFF, 0 0 0 4px #0A8276}.tab-item:focus+.active-border,.tab-item.focus+.active-border{display:none}.tab-item.disabled{color:#BFBBBB;pointer-events:none}.tabs.vertical .tab-item{border-right:2px solid transparent;min-width:7em}.tabs.vertical .active-border{left:0;top:0;width:2px;background-color:#0A8276}.tab-content{padding-top:24px;padding-left:0px;flex-grow:1}.tabs.small .tab-item{font-size:0.875rem}';const h=r;const l=class{constructor(s){t(this,s);this.ifxChange=i(this,"ifxChange",7);this.orientation="horizontal";this.activeTabIndex=0;this.fullWidth=false;this.internalActiveTabIndex=0;this.internalFocusedTabIndex=0;this.tabRefs=[];this.tabHeaderRefs=[];this.disabledTabs=[];this.tabObjects=[]}updateBorderOnWindowResize(){this.updateBorderAndFocus()}setActiveAndFocusedTab(t){var i;if(t>=this.tabObjects.length){t=this.tabObjects.length-1}if(t<0){t=0}if(!((i=this.tabObjects[t])===null||i===void 0?void 0:i.disabled)){this.internalActiveTabIndex=t;this.internalFocusedTabIndex=t}}handleTabHeaderChange(t){const i=t.target.getAttribute("slot").replace("tab-","");this.tabObjects[i].header=t.detail;this.tabObjects=[...this.tabObjects]}activeTabIndexChanged(t,i){if(t!==i){this.setActiveAndFocusedTab(t)}}componentWillLoad(){if(!n(this.el)){const t=a();o("ifx-tabs",t)}this.internalOrientation=this.orientation.toLowerCase()==="vertical"?"vertical":"horizontal";if(this.internalActiveTabIndex!==this.activeTabIndex){this.ifxChange.emit({previousTab:this.internalActiveTabIndex,currentTab:this.activeTabIndex})}this.onSlotChange();this.setActiveAndFocusedTab(this.activeTabIndex);this.updateTabStyles()}updateTabStyles(){this.tabHeaderRefs.forEach(((t,i)=>{t.classList.toggle("active",i===this.internalActiveTabIndex);t.setAttribute("aria-selected",i===this.internalActiveTabIndex?"true":"false")}))}reRenderBorder(){const t=this.el.shadowRoot.querySelector(".active-border");if(t&&this.tabHeaderRefs[this.internalActiveTabIndex]){if(this.orientation==="horizontal"){t.style.left=`${this.tabHeaderRefs[this.internalActiveTabIndex].offsetLeft}px`;t.style.width=`${this.tabHeaderRefs[this.internalActiveTabIndex].offsetWidth}px`;t.style.top="";t.style.height=""}else{t.style.top=`${this.tabHeaderRefs[this.internalActiveTabIndex].offsetTop}px`;t.style.height=`${this.tabHeaderRefs[this.internalActiveTabIndex].offsetHeight}px`;t.style.left="";t.style.width=""}}}onSlotChange(){const t=this.el.querySelectorAll("ifx-tab");this.tabObjects=Array.from(t).map((t=>({header:t===null||t===void 0?void 0:t.header,disabled:(t===null||t===void 0?void 0:t.disabled)===true,icon:t===null||t===void 0?void 0:t.icon,iconPosition:t===null||t===void 0?void 0:t.iconPosition})));this.tabRefs=Array.from(t);this.tabRefs.forEach(((t,i)=>{t.setAttribute("slot",`tab-${i}`)}))}setDefaultOrientation(){const t=["horizontal","vertical"];const i=this.orientation.toLowerCase();if(!t.includes(i)){this.internalOrientation="horizontal"}else this.internalOrientation=this.orientation}componentDidLoad(){this.updateBorderAndFocus();this.tabHeaderRefs.forEach(((t,i)=>{t.addEventListener("focus",this.onTabFocus(i))}))}onTabFocus(t){return()=>{this.internalFocusedTabIndex=t}}disconnectedCallback(){this.tabHeaderRefs.forEach(((t,i)=>{t.removeEventListener("focus",this.onTabFocus(i))}))}componentDidUpdate(){this.updateBorderAndFocus()}updateBorderAndFocus(){this.reRenderBorder();this.updateTabFocusability()}updateTabFocusability(){this.tabHeaderRefs.forEach(((t,i)=>{t.tabIndex=i===this.internalActiveTabIndex?0:-1}))}focusNextTab(){let t=this.internalFocusedTabIndex+1;while(t<this.tabHeaderRefs.length&&this.tabObjects[t].disabled){t++}if(t>=0&&t<this.tabHeaderRefs.length){this.internalFocusedTabIndex=t;this.tabHeaderRefs[t].focus()}}focusPreviousTab(){let t=this.internalFocusedTabIndex-1;while(t>=0&&this.tabObjects[t].disabled){t--}if(t>=0&&t<this.tabHeaderRefs.length){this.internalFocusedTabIndex=t;this.tabHeaderRefs[t].focus()}}getTabItemClass(t){const i=t===this.internalActiveTabIndex&&!this.tabObjects[t].disabled;const s=this.tabObjects[t].disabled;const e=this.tabObjects[t].iconPosition;return`tab-item ${this.fullWidth?"full-width":""} ${i?"active":""} ${s?"disabled":""} ${"icon__"+e}`}handleClick(t,i){this.ifxChange.emit({previousTab:this.internalActiveTabIndex,currentTab:i});if(!t.disabled)this.internalActiveTabIndex=i}handleKeyDown(t){if(t.key==="Tab"){if(t.shiftKey){if(this.internalFocusedTabIndex===0){return}else{t.preventDefault();this.focusPreviousTab()}}else{if(this.internalFocusedTabIndex===this.tabHeaderRefs.length-1){return}else{t.preventDefault();this.focusNextTab()}}}else if(t.key==="Enter"){const i=t.composedPath();const s=i.some((t=>this.tabHeaderRefs.includes(t)));if(!s){return}if(this.internalFocusedTabIndex!==-1&&!this.tabObjects[this.internalFocusedTabIndex].disabled){const t=this.internalActiveTabIndex;this.internalActiveTabIndex=this.internalFocusedTabIndex;this.ifxChange.emit({previousTab:t,currentTab:this.internalFocusedTabIndex})}}}render(){var t;return s("div",{key:"55cca82e5f75cc60390b622e624fcaec59b5d6a5","aria-label":"navigation tabs",class:`tabs ${this.internalOrientation}`},s("ul",{key:"d4209e8e12d47900ca545c18ff85252dec102c67",role:"tablist",class:"tabs-list"},(t=this.tabObjects)===null||t===void 0?void 0:t.map(((t,i)=>s("li",{class:this.getTabItemClass(i),ref:t=>this.tabHeaderRefs[i]=t,onMouseDown:t=>t.preventDefault(),onClick:()=>this.handleClick(t,i),"aria-selected":i===this.internalActiveTabIndex?"true":"false","aria-disabled":t.disabled?"true":"false",role:"tab"},(t===null||t===void 0?void 0:t.icon)?s("ifx-icon",{icon:t.icon}):"",t===null||t===void 0?void 0:t.header))),s("div",{key:"9a4df8c983a964b359d585b2376381b9fef8e312",class:"active-border"})),s("div",{key:"0058828da0f3ed7db5b189f6311fe65a1020b2f8",class:"tab-content"},Array.from(this.tabObjects).map(((t,i)=>s("div",{style:{display:i===this.internalActiveTabIndex?"block":"none"}},s("slot",{name:`tab-${i}`}))))))}get el(){return e(this)}static get watchers(){return{activeTabIndex:["activeTabIndexChanged"]}}};l.style=h;export{l as ifx_tabs};
|
2
|
+
//# sourceMappingURL=p-d327ea88.entry.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["tabsCss","IfxTabsStyle0","IfxTabs","constructor","hostRef","this","orientation","activeTabIndex","fullWidth","internalActiveTabIndex","internalFocusedTabIndex","tabRefs","tabHeaderRefs","disabledTabs","tabObjects","updateBorderOnWindowResize","updateBorderAndFocus","setActiveAndFocusedTab","index","length","_a","disabled","handleTabHeaderChange","e","tabIndex","target","getAttribute","replace","header","detail","activeTabIndexChanged","newValue","oldValue","componentWillLoad","isNestedInIfxComponent","el","framework","detectFramework","trackComponent","internalOrientation","toLowerCase","ifxChange","emit","previousTab","currentTab","onSlotChange","updateTabStyles","forEach","tab","classList","toggle","setAttribute","reRenderBorder","borderElement","shadowRoot","querySelector","style","left","offsetLeft","width","offsetWidth","top","height","offsetTop","offsetHeight","tabs","querySelectorAll","Array","from","map","icon","iconPosition","setDefaultOrientation","validOrientations","lowercaseOrientation","includes","componentDidLoad","addEventListener","onTabFocus","disconnectedCallback","removeEventListener","componentDidUpdate","updateTabFocusability","focusNextTab","nextIndex","focus","focusPreviousTab","prevIndex","getTabItemClass","isActive","isDisabled","handleClick","handleKeyDown","ev","key","shiftKey","preventDefault","path","composedPath","isTabHeader","some","previouslyActiveTabIndex","render","h","class","role","ref","onMouseDown","event","onClick","_","display","name"],"sources":["src/components/tabs/tabs.scss?tag=ifx-tabs&encapsulation=shadow","src/components/tabs/tabs.tsx"],"sourcesContent":["//ifxTabs.scss\n@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: flex;\n}\n\n.tabs {\n display: flex;\n font-family: var(--ifx-font-family); // tokens.$ifxFontFamilyBody;\n\n\n width: 100%;\n}\n\n.tabs.horizontal {\n flex-direction: column;\n}\n\n.tabs.vertical {\n flex-direction: row;\n}\n\n.tabs-list {\n display: flex;\n list-style: none;\n padding: 0;\n margin: 0;\n position: relative;\n font-weight: tokens.$ifxFontWeightSemibold;\n}\n\n.tabs-list:focus-within .active-border {\n display: none;\n}\n\n.active-border {\n content: \"\";\n position: absolute;\n transition: left 0.3s ease-in-out, top 0.3s ease-in-out, height 0.3s ease-in-out;\n}\n\n.tabs.horizontal .active-border {\n bottom: 0;\n left: 0;\n height: 2px;\n background-color: tokens.$ifxColorOcean500;\n}\n\n.tabs.vertical .tabs-list {\n flex-direction: column;\n border-bottom: none;\n}\n\n.tabs.vertical .tab-content {\n padding-top: 0px;\n padding-left: 32px;\n}\n\n.tabs:not(.vertical) {\n & .tab-item {\n &.full-width { \n flex: 1;\n }\n }\n}\n\n.tab-item {\n // Reduced padding values\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n cursor: pointer;\n position: relative;\n\n &.icon__right {\n flex-direction: row-reverse;\n justify-content: flex-end;\n }\n \n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n \n &:active,\n &.active {\n color: tokens.$ifxColorOcean500;\n }\n\n &:focus,\n &.focus {\n outline: none;\n border-radius: 1px;\n box-shadow: 0 0 0 2px tokens.$ifxColorBaseWhite, 0 0 0 4px tokens.$ifxColorOcean500;\n \n // Assuming .active-border is a sibling of .tab-item\n +.active-border {\n display: none; // Hide the active border when the tab is in focus\n }\n }\n \n &.disabled {\n color: tokens.$ifxColorEngineering300;\n pointer-events: none;\n }\n}\n\n.tabs.vertical .tab-item {\n border-right: 2px solid transparent;\n min-width: 7em;\n}\n\n.tabs.vertical .active-border {\n left: 0;\n top: 0;\n width: 2px;\n background-color: tokens.$ifxColorOcean500;\n}\n\n\n.tab-content {\n padding-top: 24px;\n padding-left: 0px;\n flex-grow: 1;\n}\n\n.tabs.small .tab-item {\n font-size: tokens.$ifxFontSizeS;\n}","import { Component, h, Prop, State, Element, Listen, Event, EventEmitter, Watch } from '@stencil/core';\nimport { trackComponent } from '../../global/utils/tracking';\nimport { isNestedInIfxComponent } from '../../global/utils/dom-utils';\nimport { detectFramework } from '../../global/utils/framework-detection';\n\n@Component({\n tag: 'ifx-tabs',\n styleUrl: 'tabs.scss',\n shadow: true\n})\nexport class IfxTabs {\n @Element() el: HTMLElement;\n\n @Prop() orientation: string = \"horizontal\";\n @Prop({ mutable: true }) activeTabIndex: number = 0;\n @Prop() fullWidth: boolean = false;\n\n @State() internalOrientation: string;\n @State() internalActiveTabIndex: number = 0;\n @State() internalFocusedTabIndex: number = 0;\n @State() tabRefs: HTMLElement[] = [];\n @State() tabHeaderRefs: HTMLElement[] = [];\n @State() disabledTabs: string[] = [];\n @State() tabObjects: any[] = [];\n\n @Event() ifxChange: EventEmitter;\n\n @Listen('resize', {target: 'window'})\n updateBorderOnWindowResize() {\n this.updateBorderAndFocus();\n }\n\n setActiveAndFocusedTab(index: number) {\n if (index >= this.tabObjects.length) {\n index = this.tabObjects.length - 1;\n }\n if (index < 0) {\n index = 0;\n }\n if (!this.tabObjects[index]?.disabled) {\n this.internalActiveTabIndex = index;\n this.internalFocusedTabIndex = index;\n }\n }\n\n @Listen('tabHeaderChange')\n handleTabHeaderChange(e) { \n const tabIndex = e.target.getAttribute('slot').replace('tab-', '');\n this.tabObjects[tabIndex].header = e.detail;\n this.tabObjects = [...this.tabObjects]; \n }\n \n\n @Watch('activeTabIndex')\n activeTabIndexChanged(newValue: number, oldValue: number) {\n if (newValue !== oldValue) {\n this.setActiveAndFocusedTab(newValue);\n }\n }\n\n componentWillLoad() {\n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-tabs', framework)\n }\n this.internalOrientation = this.orientation.toLowerCase() === 'vertical' ? 'vertical' : 'horizontal';\n if (this.internalActiveTabIndex !== this.activeTabIndex) {\n this.ifxChange.emit({ previousTab: this.internalActiveTabIndex, currentTab: this.activeTabIndex });\n };\n this.onSlotChange();\n this.setActiveAndFocusedTab(this.activeTabIndex);\n this.updateTabStyles();\n }\n\n updateTabStyles() {\n this.tabHeaderRefs.forEach((tab, index) => {\n tab.classList.toggle('active', index === this.internalActiveTabIndex);\n tab.setAttribute('aria-selected', index === this.internalActiveTabIndex ? 'true' : 'false')\n });\n }\n\n\n // needed for smooth border transition\n reRenderBorder() {\n const borderElement = this.el.shadowRoot.querySelector('.active-border') as HTMLElement;\n if (borderElement && this.tabHeaderRefs[this.internalActiveTabIndex]) {\n if (this.orientation === 'horizontal') {\n\n borderElement.style.left = `${this.tabHeaderRefs[this.internalActiveTabIndex].offsetLeft}px`;\n borderElement.style.width = `${this.tabHeaderRefs[this.internalActiveTabIndex].offsetWidth}px`;\n borderElement.style.top = '';\n borderElement.style.height = '';\n } else {\n borderElement.style.top = `${this.tabHeaderRefs[this.internalActiveTabIndex].offsetTop}px`;\n borderElement.style.height = `${this.tabHeaderRefs[this.internalActiveTabIndex].offsetHeight}px`;\n borderElement.style.left = '';\n borderElement.style.width = '';\n }\n }\n }\n\n\n // when a slot is removed / added\n @Listen('slotchange')\n onSlotChange() {\n const tabs = this.el.querySelectorAll('ifx-tab');\n this.tabObjects = Array.from(tabs).map((tab) => {\n return {\n header: tab?.header,\n disabled: tab?.disabled === true,\n icon: tab?.icon,\n iconPosition: tab?.iconPosition\n }\n });\n\n this.tabRefs = Array.from(tabs);\n this.tabRefs.forEach((tab, index) => {\n tab.setAttribute('slot', `tab-${index}`);\n });\n }\n\n setDefaultOrientation() {\n const validOrientations = ['horizontal', 'vertical'];\n const lowercaseOrientation = this.orientation.toLowerCase();\n\n if (!validOrientations.includes(lowercaseOrientation)) {\n this.internalOrientation = 'horizontal';\n } else this.internalOrientation = this.orientation;\n }\n\n componentDidLoad() {\n this.updateBorderAndFocus();\n // Add keyboard event listeners for each tab header\n this.tabHeaderRefs.forEach((tab, index) => {\n tab.addEventListener('focus', this.onTabFocus(index));\n });\n\n }\n\n onTabFocus(index) {\n return () => {\n this.internalFocusedTabIndex = index;\n };\n }\n\n disconnectedCallback() {\n // Remove keyboard event listeners when component is unmounted\n this.tabHeaderRefs.forEach((tab, index) => {\n tab.removeEventListener('focus', this.onTabFocus(index));\n });\n }\n componentDidUpdate() {\n this.updateBorderAndFocus();\n }\n\n private updateBorderAndFocus() {\n this.reRenderBorder()\n this.updateTabFocusability();\n }\n\n private updateTabFocusability() {\n this.tabHeaderRefs.forEach((tab, index) => {\n tab.tabIndex = index === this.internalActiveTabIndex ? 0 : -1;\n })\n }\n\n\n private focusNextTab() {\n let nextIndex = this.internalFocusedTabIndex + 1;\n while (nextIndex < this.tabHeaderRefs.length && this.tabObjects[nextIndex].disabled) {\n nextIndex++;\n }\n if (nextIndex >= 0 && nextIndex < this.tabHeaderRefs.length) {\n this.internalFocusedTabIndex = nextIndex;\n this.tabHeaderRefs[nextIndex].focus();\n }\n }\n\n private focusPreviousTab() {\n let prevIndex = this.internalFocusedTabIndex - 1;\n while ((prevIndex >= 0) && (this.tabObjects[prevIndex].disabled)) {\n prevIndex--;\n }\n if ((prevIndex >= 0) && (prevIndex < this.tabHeaderRefs.length)) {\n this.internalFocusedTabIndex = prevIndex;\n this.tabHeaderRefs[prevIndex].focus();\n }\n }\n\n\n private getTabItemClass(index: number) {\n const isActive = index === this.internalActiveTabIndex && !this.tabObjects[index].disabled;\n const isDisabled = this.tabObjects[index].disabled;\n const iconPosition = this.tabObjects[index].iconPosition\n return `tab-item ${this.fullWidth ? 'full-width' : \"\"} ${isActive ? 'active' : ''} ${isDisabled ? 'disabled' : ''} ${'icon__'+iconPosition}`;\n }\n\n private handleClick(tab, index) {\n this.ifxChange.emit({ previousTab: this.internalActiveTabIndex, currentTab: index })\n if (!tab.disabled) this.internalActiveTabIndex = index;\n\n }\n\n\n\n @Listen('keydown')\n handleKeyDown(ev: KeyboardEvent) {\n if (ev.key === 'Tab') {\n\n if (ev.shiftKey) {\n // Shift + Tab\n if (this.internalFocusedTabIndex === 0) {\n // Allow default behavior to move focus out of component\n return;\n } else {\n ev.preventDefault();\n this.focusPreviousTab();\n }\n } else {\n // Tab\n if (this.internalFocusedTabIndex === this.tabHeaderRefs.length - 1) {\n // Allow default behavior to move focus out of component\n return;\n } else {\n ev.preventDefault();\n this.focusNextTab();\n }\n }\n } else if (ev.key === 'Enter') {\n const path = ev.composedPath();\n const isTabHeader = path.some(el => this.tabHeaderRefs.includes(el as HTMLElement));\n if (!isTabHeader) {\n return;\n }\n \n if (this.internalFocusedTabIndex !== -1 && !this.tabObjects[this.internalFocusedTabIndex].disabled) {\n const previouslyActiveTabIndex = this.internalActiveTabIndex;\n this.internalActiveTabIndex = this.internalFocusedTabIndex;\n this.ifxChange.emit({ previousTab: previouslyActiveTabIndex, currentTab: this.internalFocusedTabIndex })\n }\n }\n }\n\n\n render() {\n return (\n <div aria-label=\"navigation tabs\" class={`tabs ${this.internalOrientation}`}>\n <ul role=\"tablist\" class=\"tabs-list\">\n {this.tabObjects?.map((tab, index) => (\n <li\n class={this.getTabItemClass(index)}\n ref={(el) => (this.tabHeaderRefs[index] = el)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => this.handleClick(tab, index)}\n aria-selected={index === this.internalActiveTabIndex ? 'true' : 'false'}\n aria-disabled={tab.disabled ? 'true' : 'false'}\n role=\"tab\"\n > \n {tab?.icon ? <ifx-icon icon = {tab.icon}></ifx-icon> : ''}\n {tab?.header}\n </li>\n ))}\n <div class=\"active-border\"></div>\n </ul>\n <div class=\"tab-content\">\n {Array.from(this.tabObjects).map((_, index) => (\n <div style={{ display: index === this.internalActiveTabIndex ? 'block' : 'none' }}>\n <slot name={`tab-${index}`} />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n}"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as t,c as i,h as e,a as s,g as h}from"./p-b7a462e5.js";import{d as r,t as n}from"./p-e8504e6b.js";import{i as c}from"./p-1ecafb97.js";const o=".ifx-content-switcher{background-color:#FFFFFF;border:1px solid #BFBBBB;border-radius:9999px;height:36px;width:fit-content;box-sizing:border-box;display:flex;flex-direction:row;align-items:center}.ifx-content-switcher ::slotted(ifx-content-switcher-item){position:relative}.ifx-content-switcher ::slotted(ifx-content-switcher-item:first-child){left:-1px;margin-right:-1px}.ifx-content-switcher ::slotted(ifx-content-switcher-item:last-child){right:-1px;margin-left:-1px}.ifx-content-switcher ::slotted(.ifx-content-switcher-divider){width:1px;height:20px;background-color:#8D8786;margin:0px 1px;visibility:visible}.ifx-content-switcher ::slotted(.ifx-content-switcher-divider.hidden){visibility:hidden}";const d=o;const l=class{constructor(e){t(this,e);this.ifxChange=i(this,"ifxChange",7);this.activeIndex=-1;this.hoverIndex=-1;this.focusIndex=-1;this.dividers=Array();this.eventHandlers=new Map}componentWillLoad(){this.items=Array.from(this.el.children);this.initializeDividers();this.addEventListeners();this.ensureSingleSelectedItem();if(!c(this.el)){const t=r();n("ifx-content-switcher",t)}}disconnectedCallback(){this.removeEventListeners()}initializeDividers(){this.items.forEach(((t,i)=>{if(i<this.items.length-1){const i=document.createElement("div");i.classList.add("ifx-content-switcher-divider");t.after(i);this.dividers.push(i)}}))}addEventListeners(){this.items.forEach(((t,i)=>{const e={click:()=>this.selectItem(i),mouseenter:()=>this.handleHover(i,true),mouseleave:()=>this.handleHover(i,false),focus:()=>this.handleFocus(i,true),blur:()=>this.handleFocus(i,false)};Object.keys(e).forEach((i=>{t.addEventListener(i,e[i])}));this.eventHandlers.set(t,e)}))}removeEventListeners(){this.eventHandlers.forEach(((t,i)=>{Object.keys(t).forEach((e=>{i.removeEventListener(e,t[e])}))}));this.eventHandlers.clear()}ensureSingleSelectedItem(){this.items.forEach(((t,i)=>{const e=t.getAttribute("selected")==="true"||t.selected;if(e){if(this.activeIndex<0){this.selectItem(i)}else{t.removeAttribute("selected");t.selected=false}}}))}handleHover(t,i){this.hoverIndex=i?t:-1;this.updateDividersOfItem(t)}handleFocus(t,i){this.focusIndex=i?t:-1;this.updateDividersOfItem(t)}updateDividersOfItem(t){if(t<this.items.length-1){this.updateDividerVisibility(t)}if(t>0){this.updateDividerVisibility(t-1)}}updateDividerVisibility(t){const i=new Set([this.activeIndex,this.activeIndex-1,this.hoverIndex,this.hoverIndex-1,this.focusIndex,this.focusIndex-1]);this.setDividerVisibility(t,i.has(t))}setDividerVisibility(t,i){if(this.dividers[t]){this.dividers[t].classList.toggle("hidden",i)}}selectItem(t){if(t===this.activeIndex)return;const i=this.activeIndex;if(i>=0){this.items[i].removeAttribute("selected")}this.activeIndex=t;this.items[t].setAttribute("selected","true");this.ifxChange.emit({oldValue:this.getValueOfItem(i),newValue:this.getValueOfItem(t)});this.updateDividersOfItem(i);this.updateDividersOfItem(t)}getValueOfItem(t){if(this.items[t]==null)return t.toLocaleString();return this.items[t].getAttribute("value")||t.toLocaleString()}render(){return e(s,{key:"7a17194a411d28a7ed2c2e023806544b07b1a812"},e("div",{key:"1f13bedb6a6667b4ae12b0fa79c7f29d1d292c38",class:"ifx-content-switcher",role:"group"},e("slot",{key:"7103ff1529b399632fde43740bd1c05966cdbf69"})))}get el(){return h(this)}};l.style=d;export{l as ifx_content_switcher};
|
2
|
+
//# sourceMappingURL=p-d448d22c.entry.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["contentSwitcherCss","IfxContentSwitcherStyle0","ContentSwitcher","constructor","hostRef","this","activeIndex","hoverIndex","focusIndex","dividers","Array","eventHandlers","Map","componentWillLoad","items","from","el","children","initializeDividers","addEventListeners","ensureSingleSelectedItem","isNestedInIfxComponent","framework","detectFramework","trackComponent","disconnectedCallback","removeEventListeners","forEach","item","index","length","divider","document","createElement","classList","add","after","push","handlers","click","selectItem","mouseenter","handleHover","mouseleave","focus","handleFocus","blur","Object","keys","event","addEventListener","set","removeEventListener","clear","isSelected","getAttribute","selected","removeAttribute","isActive","updateDividersOfItem","itemIndex","updateDividerVisibility","dividerIndex","hiddenDividers","Set","setDividerVisibility","has","hidden","toggle","oldIndex","setAttribute","ifxChange","emit","oldValue","getValueOfItem","newValue","toLocaleString","render","h","Host","key","class","role"],"sources":["src/components/content-switcher/content-switcher.scss?tag=ifx-content-switcher&encapsulation=shadow","src/components/content-switcher/content-switcher.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n\n.ifx-content-switcher {\n background-color: tokens.$ifxColorBaseWhite;\n border: 1px solid tokens.$ifxColorEngineering300;\n border-radius: tokens.$ifxBorderRadiusRound;\n height: tokens.$ifxSize450;\n width: fit-content;\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n align-items: center;\n\n & ::slotted(ifx-content-switcher-item) {\n position: relative;\n // top: -1px;\n }\n\n & ::slotted(ifx-content-switcher-item:first-child) {\n left: -1px;\n margin-right: -1px;\n }\n\n & ::slotted(ifx-content-switcher-item:last-child) {\n right: -1px;\n margin-left: -1px;\n }\n\n // Dividers\n & ::slotted(.ifx-content-switcher-divider) {\n width: tokens.$ifxSize12;\n height: tokens.$ifxSize250;\n background-color: tokens.$ifxColorEngineering400;\n margin: 0px 1px;\n visibility: visible;\n }\n\n & ::slotted(.ifx-content-switcher-divider.hidden) {\n visibility: hidden;\n }\n}","import { Component, h, Element, Event, EventEmitter, Host, State } from '@stencil/core';\nimport { trackComponent } from '../../global/utils/tracking';\nimport { isNestedInIfxComponent } from '../../global/utils/dom-utils';\nimport { detectFramework } from '../../global/utils/framework-detection';\n\nexport type ChangeEvent = { oldValue: string; newValue: string };\n\ntype ContentSwitcherItem = Element & {\n selected: boolean;\n};\n\n@Component({\n tag: 'ifx-content-switcher',\n styleUrl: './content-switcher.scss',\n shadow: true,\n})\nexport class ContentSwitcher {\n @Element() el: HTMLElement;\n\n @State() items: Element[];\n @State() activeIndex = -1;\n @State() hoverIndex: number = -1;\n @State() focusIndex: number = -1;\n\n @State() dividers: Element[] = Array();\n\n @Event() ifxChange: EventEmitter<ChangeEvent>;\n\n private eventHandlers: Map<Element, { [key: string]: EventListener }> = new Map();\n\n componentWillLoad() {\n this.items = Array.from(this.el.children);\n this.initializeDividers();\n this.addEventListeners();\n this.ensureSingleSelectedItem();\n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-content-switcher', framework)\n }\n }\n\n disconnectedCallback() {\n this.removeEventListeners();\n }\n\n /**\n * Initialize the dividers between items.\n */\n initializeDividers() {\n this.items.forEach((item, index) => {\n if (index < this.items.length - 1) {\n const divider = document.createElement('div');\n divider.classList.add('ifx-content-switcher-divider');\n item.after(divider);\n this.dividers.push(divider);\n }\n });\n }\n\n /**\n * Add event listeners for each item.\n */\n addEventListeners() {\n this.items.forEach((item, index) => {\n const handlers = {\n click: () => this.selectItem(index),\n mouseenter: () => this.handleHover(index, true),\n mouseleave: () => this.handleHover(index, false),\n focus: () => this.handleFocus(index, true),\n blur: () => this.handleFocus(index, false),\n };\n\n Object.keys(handlers).forEach(event => {\n item.addEventListener(event, handlers[event]);\n });\n\n this.eventHandlers.set(item, handlers);\n });\n }\n\n /**\n * Remove all event listeners.\n */\n removeEventListeners() {\n this.eventHandlers.forEach((handlers, item) => {\n Object.keys(handlers).forEach(event => {\n item.removeEventListener(event, handlers[event]);\n });\n });\n this.eventHandlers.clear();\n }\n\n ensureSingleSelectedItem() {\n this.items.forEach((item, index) => {\n const isSelected = (item.getAttribute('selected') === 'true') || (item as ContentSwitcherItem).selected;\n if (isSelected) {\n if (this.activeIndex < 0) {\n this.selectItem(index);\n } else {\n item.removeAttribute('selected');\n (item as ContentSwitcherItem).selected = false;\n }\n }\n });\n }\n\n /**\n * Handle hover events on an item.\n * @param index - Index of the item.\n * @param isActive - Whether the item is hovered.\n */\n handleHover(index: number, isActive: boolean) {\n this.hoverIndex = isActive ? index : -1;\n this.updateDividersOfItem(index);\n }\n\n /**\n * Handle hover events on an item.\n * @param index - Index of the item.\n * @param isActive - Whether the item is focused.\n */\n handleFocus(index: number, isActive: boolean) {\n this.focusIndex = isActive ? index : -1;\n this.updateDividersOfItem(index);\n }\n\n /**\n * Update visibility of dividers adjacent to a specific item.\n * @param itemIndex - Index of the item.\n */\n updateDividersOfItem(itemIndex: number) {\n if (itemIndex < this.items.length - 1) {\n this.updateDividerVisibility(itemIndex);\n }\n if (itemIndex > 0) {\n this.updateDividerVisibility(itemIndex - 1);\n }\n }\n\n /**\n * Update visibility of a specific divider.\n * @param dividerIndex - Index of the divider.\n */\n updateDividerVisibility(dividerIndex: number) {\n const hiddenDividers = new Set([this.activeIndex, this.activeIndex - 1, this.hoverIndex, this.hoverIndex - 1, this.focusIndex, this.focusIndex - 1]);\n this.setDividerVisibility(dividerIndex, hiddenDividers.has(dividerIndex));\n }\n\n /**\n * Set the visibility of a specific divider.\n * @param dividerIndex - Index of the divider.\n * @param hidden - Whether the divider should be hidden.\n */\n setDividerVisibility(dividerIndex: number, hidden: boolean) {\n if (this.dividers[dividerIndex]) {\n this.dividers[dividerIndex].classList.toggle('hidden', hidden);\n }\n }\n\n /**\n * Select a specific item.\n * @param itemIndex - Index of the item to be selected.\n */\n selectItem(itemIndex: number) {\n if (itemIndex === this.activeIndex) return;\n const oldIndex = this.activeIndex;\n if (oldIndex >= 0) {\n this.items[oldIndex].removeAttribute('selected');\n }\n\n this.activeIndex = itemIndex;\n this.items[itemIndex].setAttribute('selected', 'true');\n\n this.ifxChange.emit({ oldValue: this.getValueOfItem(oldIndex), newValue: this.getValueOfItem(itemIndex) });\n this.updateDividersOfItem(oldIndex);\n this.updateDividersOfItem(itemIndex);\n }\n\n /**\n * Get the value property of the item at a specific index.\n * Falls back to the index if no value is set.\n * \n * @param index - Index of the item. \n * @returns The value of the item.\n */\n getValueOfItem(index: number): string {\n if (this.items[index] == null) return index.toLocaleString();\n return this.items[index].getAttribute('value') || index.toLocaleString();\n }\n\n render() {\n return (\n <Host>\n <div class=\"ifx-content-switcher\" role=\"group\">\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as s,c as e,h as i,g as n}from"./p-b7a462e5.js";import{d as t,t as o}from"./p-e8504e6b.js";import{i as r}from"./p-1ecafb97.js";import{c as a}from"./p-5cdc6210.js";const h=':root {\n --ifx-font-family: "Source Sans 3", "Arial, sans-serif";\n}\n\n:host {\n display: flex;\n}\n\n.search-field {\n box-sizing: border-box;\n background-color: #FFFFFF;\n width: 100%;\n font-family: var(--ifx-font-family);\n position: relative;\n}\n.search-field .search-field__wrapper {\n box-sizing: border-box;\n height: 40px;\n display: flex;\n align-items: center;\n border: 1px solid #8D8786;\n border-radius: 1px;\n padding: 8px 16px;\n gap: 12px;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n position: relative;\n width: 100%;\n outline: none;\n color: #8D8786;\n}\n.search-field .search-field__wrapper.focused {\n border: 1px solid #0A8276;\n}\n.search-field .search-field__wrapper.focused ifx-icon {\n color: #575352;\n}\n.search-field .search-field__wrapper.search-field__wrapper-s {\n height: 36px;\n}\n.search-field .search-field__wrapper:hover:not(.focused, :focus) {\n border: 1px solid #3C3A39;\n}\n.search-field .search-field__wrapper:focus {\n outline: none;\n border: 1px solid #0A8276;\n}\n.search-field .search-field__wrapper .delete-icon {\n right: 12px;\n cursor: pointer;\n}\n.search-field .search-field__wrapper input[type=text] {\n font-style: normal;\n font-weight: 400;\n font-size: 16px;\n color: #8D8786;\n border: none;\n width: 100%;\n outline: none;\n height: 16px;\n}\n.search-field .search-field__wrapper input[type=text]:focus {\n outline: none;\n color: #1d1d1d;\n}\n.search-field .search-field__wrapper input[type=text]:disabled {\n background-color: #EEEDED;\n}\n.search-field .search-field__wrapper:has(input[disabled]) {\n background-color: #EEEDED;\n}\n.search-field .suggestions-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: #FFFFFF;\n margin-top: 4px;\n border: 1px solid #EEEDED;\n box-shadow: 0px 6px 9px 0px rgba(29, 29, 29, 0.1);\n z-index: 1000;\n max-height: 300px;\n overflow-y: auto;\n container-type: inline-size;\n}\n.search-field .suggestions-dropdown .suggestions-header {\n font-family: Source Sans 3;\n font-size: 0.8125rem;\n font-weight: 600;\n line-height: 1.25rem;\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: #575352;\n border-bottom: 1px solid #EEEDED;\n padding: 12px 16px;\n}\n.search-field .suggestions-dropdown .suggestion-item {\n padding: 12px 16px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n}\n.search-field .suggestions-dropdown .suggestion-item:last-child {\n border-bottom: none;\n}\n.search-field .suggestions-dropdown .suggestion-item:hover, .search-field .suggestions-dropdown .suggestion-item--selected {\n background-color: #EEEDED;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-icon {\n color: #575352;\n flex-shrink: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-icon--history {\n color: #575352;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text {\n flex: 1;\n display: flex;\n align-items: center;\n min-width: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-main-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 1;\n min-width: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-scope {\n color: #8D8786;\n flex-shrink: 0;\n white-space: nowrap;\n margin-left: 2px;\n font-weight: 600;\n font-size: 0.75rem;\n}\n@container (max-width: 320px) {\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text {\n flex-direction: column;\n align-items: flex-start;\n }\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-main-text {\n width: 100%;\n max-width: 100%;\n }\n .search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-text .suggestion-scope {\n margin-left: 0;\n margin-top: 0;\n width: 100%;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 1;\n }\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-count {\n color: #8D8786;\n margin-left: auto;\n flex-shrink: 0;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-delete-icon {\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease, visibility 0.2s ease;\n cursor: pointer;\n margin-left: auto;\n flex-shrink: 0;\n color: #575352;\n}\n.search-field .suggestions-dropdown .suggestion-item .suggestion-content .suggestion-delete-icon:hover {\n color: #3C3A39;\n}\n.search-field .suggestions-dropdown .suggestion-item:hover .suggestion-delete-icon {\n opacity: 1;\n visibility: visible;\n}\n.search-field .search-field__wrapper.dropdown-open {\n border-radius: 1px 1px 0 0;\n border-color: #0A8276;\n}';const c=h;const l=class{constructor(i){s(this,i);this.ifxInput=e(this,"ifxInput",7);this.ifxSuggestionRequested=e(this,"ifxSuggestionRequested",7);this.ifxSuggestionSelected=e(this,"ifxSuggestionSelected",7);this.ifxFocus=e(this,"ifxFocus",7);this.ifxBlur=e(this,"ifxBlur",7);this.value="";this.suggestions=[];this.showSuggestions=false;this.maxSuggestions=10;this.maxHistoryItems=5;this.enableHistory=true;this.historyKey="ifx-search-history";this.historyHeaderText="Recent Searches";this.ariaLabel="Search Field";this.deleteIconAriaLabel="Clear search";this.historyDeleteAriaLabel="Remove from history";this.dropdownAriaLabel="Search suggestions and history";this.suggestionAriaLabel="Search suggestion";this.historyItemAriaLabel="Search history item";this.showDropdown=false;this.filteredSuggestions=[];this.selectedSuggestionIndex=-1;this.searchHistory=[];this.showDeleteIcon=false;this.showDeleteIconInternalState=false;this.disabled=false;this.size="l";this.isFocused=false;this.placeholder="Search...";this.autocomplete="off";this.maxlength=null;this.focusEmitted=false;this.handleInput=()=>{const s=this.inputElement.value;this.value=s;this.ifxInput.emit(this.value);if(this.showSuggestions){this.showDropdown=true;this.selectedSuggestionIndex=-1;this.requestSuggestions(s)}};this.handleDelete=()=>{this.inputElement.value="";this.value="";this.ifxInput.emit(this.value);this.hideDropdown()};this.handleSearch=()=>{if(this.value.trim()&&this.enableHistory){if(this.filteredSuggestions.length>0){this.addToHistory(this.value)}}this.hideDropdown()}}componentDidLoad(){this.loadSearchHistory()}handleOutsideClick(s){const e=s.composedPath();if(!e.includes(this.inputElement)&&!e.includes(this.dropdownElement)){this.hideDropdown()}}handleKeyDown(s){if(!this.showDropdown)return;switch(s.key){case"ArrowDown":s.preventDefault();this.navigateSuggestions(1);break;case"ArrowUp":s.preventDefault();this.navigateSuggestions(-1);break;case"Enter":s.preventDefault();if(this.selectedSuggestionIndex>=0){this.selectSuggestion(this.filteredSuggestions[this.selectedSuggestionIndex])}else{this.handleSearch()}break;case"Escape":this.hideDropdown();break}}valueWatcher(s){if(this.inputElement&&s!==this.inputElement.value){this.inputElement.value=s}this.updateSuggestions()}suggestionsWatcher(){this.updateSuggestions()}focusInput(){if(document.activeElement!==this.inputElement){this.inputElement.focus()}if(!this.focusEmitted){this.focusEmitted=true;this.isFocused=true;this.ifxFocus.emit()}if(this.showSuggestions){if(this.value.length===0){this.showHistoryDropdown();this.showDropdown=this.enableHistory&&this.searchHistory.length>0}else{this.updateSuggestions();this.showDropdown=this.filteredSuggestions.length>0}}}componentWillLoad(){if(!r(this.el)){const s=t();o("ifx-search-field",s)}}componentWillUpdate(){if(this.value!==""){this.showDeleteIconInternalState=true}else this.showDeleteIconInternalState=false}render(){return i("div",{key:"17700e18db215ece946bdf0a12cf0aa46677e1fb","aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledBy,"aria-describedby":this.ariaDescribedBy,"aria-disabled":this.disabled,"aria-value":this.value,class:"search-field"},i("div",{key:"c4019708f20c7efe340a508cdbbc41d4c799caf8",class:this.getWrapperClassNames(),tabindex:1,onClick:()=>this.focusInput()},i("ifx-icon",{key:"d17c79f9b7b781cc2dac6a4fa6f053dd39785b5e",icon:"search-16",class:"search-icon"}),i("input",{key:"1b012748a5390f1a8e61ebc289c02684b8f7c2fb",ref:s=>this.inputElement=s,type:"text",autocomplete:this.autocomplete,onInput:()=>this.handleInput(),onFocus:()=>this.focusInput(),onBlur:()=>this.blurInput(),placeholder:this.placeholder,disabled:this.disabled,maxlength:this.maxlength,value:this.value,role:"combobox","aria-expanded":this.showDropdown,"aria-autocomplete":"list","aria-haspopup":"listbox","aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledBy,"aria-describedby":this.ariaDescribedBy,"aria-owns":this.showDropdown?"suggestions-dropdown":undefined,"aria-activedescendant":this.selectedSuggestionIndex>=0?`suggestion-${this.selectedSuggestionIndex}`:undefined}),this.showDeleteIcon&&this.showDeleteIconInternalState?i("ifx-icon",{icon:"cRemove16",class:"delete-icon",onClick:this.handleDelete,role:"button",tabindex:"0","aria-label":this.deleteIconAriaLabel,onKeyDown:s=>{if(s.key==="Enter"||s.key===" "){s.preventDefault();this.handleDelete()}}}):null),this.showDropdown&&this.filteredSuggestions.length>0&&i("div",{key:"f57b85cf37664279849cf3c646d55254c71582c7",ref:s=>this.dropdownElement=s,id:"suggestions-dropdown",class:"suggestions-dropdown",role:"listbox","aria-label":this.dropdownAriaLabel},this.isShowingOnlyHistory()&&i("div",{key:"345e3fde60177d1f413a62fc9b8f3693fdf7cabf",class:"suggestions-header"},this.historyHeaderText),this.filteredSuggestions.map(((s,e)=>i("div",{key:s.id,id:`suggestion-${e}`,class:this.getSuggestionClassNames(e),role:"option","aria-selected":e===this.selectedSuggestionIndex,"aria-label":`${s.type==="history"?this.historyItemAriaLabel:this.suggestionAriaLabel}: ${s.text}${s.scope?`, ${s.scope}`:""}${s.resultCount?`, ${s.resultCount} results`:""}`,onClick:()=>this.selectSuggestion(s),onMouseEnter:()=>this.selectedSuggestionIndex=e},i("div",{class:"suggestion-content"},s.type==="history"&&i("ifx-icon",{icon:"history-16",class:"suggestion-icon suggestion-icon--history"}),s.type==="suggestion"&&i("ifx-icon",{icon:"search-16",class:"suggestion-icon suggestion-icon--suggestion"}),i("span",{class:"suggestion-text"},i("span",{class:"suggestion-main-text"},this.renderHighlightedText(s.text,this.value)),s.scope&&i("span",{class:"suggestion-scope"},"– ",s.scope)),s.resultCount!==undefined&&s.scope&&i("span",{class:"suggestion-count"},s.resultCount),s.type==="history"&&i("ifx-icon",{icon:"cross16",class:"suggestion-delete-icon",role:"button",tabindex:"0","aria-label":`${this.historyDeleteAriaLabel}: ${s.text}`,onClick:e=>this.handleHistoryDelete(e,s.text),onKeyDown:e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault();this.handleHistoryDelete(e,s.text)}}})))))))}getSizeClass(){return`${this.size}`==="s"?"search-field__wrapper-s":""}getWrapperClassNames(){return a(`search-field__wrapper`,`search-field__wrapper ${this.getSizeClass()}`,`${this.isFocused?"focused":""}`,`${this.showDropdown?"dropdown-open":""}`)}getSuggestionClassNames(s){var e;return a("suggestion-item",{"suggestion-item--selected":s===this.selectedSuggestionIndex,"suggestion-item--history":((e=this.filteredSuggestions[s])===null||e===void 0?void 0:e.type)==="history"})}get el(){return n(this)}static get watchers(){return{value:["valueWatcher"],suggestions:["suggestionsWatcher"]}}};l.style=c;export{l as ifx_search_field};
|
2
|
+
//# sourceMappingURL=p-e45947e8.entry.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["searchFieldCss","IfxSearchFieldStyle0","SearchField","constructor","hostRef","this","value","suggestions","showSuggestions","maxSuggestions","maxHistoryItems","enableHistory","historyKey","historyHeaderText","ariaLabel","deleteIconAriaLabel","historyDeleteAriaLabel","dropdownAriaLabel","suggestionAriaLabel","historyItemAriaLabel","showDropdown","filteredSuggestions","selectedSuggestionIndex","searchHistory","showDeleteIcon","showDeleteIconInternalState","disabled","size","isFocused","placeholder","autocomplete","maxlength","focusEmitted","handleInput","query","inputElement","ifxInput","emit","requestSuggestions","handleDelete","hideDropdown","handleSearch","trim","length","addToHistory","componentDidLoad","loadSearchHistory","handleOutsideClick","event","path","composedPath","includes","dropdownElement","handleKeyDown","key","preventDefault","navigateSuggestions","selectSuggestion","valueWatcher","newValue","updateSuggestions","suggestionsWatcher","focusInput","document","activeElement","focus","ifxFocus","showHistoryDropdown","componentWillLoad","isNestedInIfxComponent","el","framework","detectFramework","trackComponent","componentWillUpdate","render","h","ariaLabelledBy","ariaDescribedBy","class","getWrapperClassNames","tabindex","onClick","icon","ref","type","onInput","onFocus","onBlur","blurInput","role","undefined","onKeyDown","id","isShowingOnlyHistory","map","suggestion","index","getSuggestionClassNames","text","scope","resultCount","onMouseEnter","renderHighlightedText","handleHistoryDelete","getSizeClass","classNames","_a"],"sources":["src/components/search-field/search-field.scss?tag=ifx-search-field&encapsulation=shadow","src/components/search-field/search-field.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: flex;\n}\n\n.search-field {\n box-sizing: border-box;\n background-color: tokens.$ifxColorBaseWhite;\n width: 100%;\n font-family: var(--ifx-font-family);\n position: relative; // Wichtig für absolute positioning des Dropdowns\n\n .search-field__wrapper {\n box-sizing: border-box;\n height: tokens.$ifxSize500;\n display: flex;\n align-items: center;\n border: 1px solid #8D8786;\n border-radius: tokens.$ifxBorderRadius12;\n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n gap: tokens.$ifxSpace150;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n position: relative;\n width: 100%;\n outline: none;\n color: tokens.$ifxColorEngineering400;\n\n &.focused {\n border: 1px solid tokens.$ifxColorOcean500;\n\n & ifx-icon {\n color: tokens.$ifxColorEngineering500;\n }\n }\n\n &.search-field__wrapper-s {\n height: 36px;\n }\n\n\n &:hover:not(.focused, :focus) {\n border: 1px solid #3C3A39;\n }\n\n &:focus {\n outline: none;\n border: 1px solid #0A8276;\n }\n\n\n .delete-icon {\n right: 12px;\n cursor: pointer;\n }\n\n input[type='text'] {\n font-style: normal;\n font-weight: 400;\n font-size: 16px;\n //line-height: 24px;\n color: #8D8786;\n border: none;\n width: 100%;\n outline: none;\n //height: 100%;\n height: 16px;\n\n &:focus {\n outline: none;\n color: #1d1d1d;\n }\n\n &:disabled {\n background-color: #EEEDED;\n }\n }\n\n &:has(input[disabled]) {\n background-color: #EEEDED;\n }\n }\n\n // Suggestions Dropdown Styles\n .suggestions-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n background: tokens.$ifxColorBaseWhite;\n margin-top: tokens.$ifxSpace50;\n border: 1px solid tokens.$ifxColorEngineering200;\n box-shadow: 0px 6px 9px 0px rgba(29, 29, 29, 0.10);\n z-index: 1000;\n max-height: 300px;\n overflow-y: auto;\n container-type: inline-size; // Enable container queries\n\n .suggestions-header {\n // font: tokens.$ifxEyebrowEyebrow02; TODO\n font-family: Source Sans 3;\n font-size: 0.8125rem;\n font-weight: 600;\n line-height: 1.25rem;\n\n letter-spacing: 0.25em;\n text-transform: uppercase;\n color: tokens.$ifxColorEngineering500;\n border-bottom: 1px solid tokens.$ifxColorEngineering200;\n padding: tokens.$ifxSpace150 tokens.$ifxSpace200;\n }\n\n .suggestion-item {\n padding: tokens.$ifxSpace150 tokens.$ifxSpace200;\n cursor: pointer;\n transition: background-color 0.2s ease;\n\n &:last-child {\n border-bottom: none;\n }\n\n &:hover,\n &--selected {\n background-color: tokens.$ifxColorEngineering200;\n }\n\n .suggestion-content {\n display: flex;\n align-items: center;\n gap: tokens.$ifxSpace150;\n\n .suggestion-icon {\n color: tokens.$ifxColorEngineering500;\n flex-shrink: 0;\n\n &--history {\n color: tokens.$ifxColorEngineering500;\n }\n }\n\n .suggestion-text {\n flex: 1;\n display: flex;\n align-items: center;\n min-width: 0; // Important for flexbox truncation\n\n .suggestion-main-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-shrink: 1;\n min-width: 0;\n }\n\n .suggestion-scope {\n color: tokens.$ifxColorEngineering400;\n flex-shrink: 0; // Never truncate the scope\n white-space: nowrap;\n margin-left: tokens.$ifxSpace25; // Add space before the scope\n font-weight: tokens.$ifxFontWeightSemibold;\n font-size: tokens.$ifxFontSizeXs;\n }\n\n // When container is narrow, stack scope below main text\n @container (max-width: 320px) {\n flex-direction: column;\n align-items: flex-start;\n\n .suggestion-main-text {\n width: 100%;\n max-width: 100%;\n }\n\n .suggestion-scope {\n margin-left: 0;\n margin-top: 0;\n width: 100%;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 1; // Allow truncation when narrow\n }\n }\n }\n\n .suggestion-count {\n color: tokens.$ifxColorEngineering400;\n margin-left: auto;\n flex-shrink: 0;\n }\n\n .suggestion-delete-icon {\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease, visibility 0.2s ease;\n cursor: pointer;\n margin-left: auto;\n flex-shrink: 0;\n color: tokens.$ifxColorEngineering500;\n\n &:hover {\n color: tokens.$ifxColorEngineering600;\n }\n }\n }\n\n &:hover {\n .suggestion-delete-icon {\n opacity: 1;\n visibility: visible;\n }\n }\n }\n }\n\n // Wrapper modifications when dropdown is open\n .search-field__wrapper.dropdown-open {\n border-radius: tokens.$ifxBorderRadius12 tokens.$ifxBorderRadius12 0 0;\n border-color: tokens.$ifxColorOcean500;\n }\n}\n","import { Component, EventEmitter, h, Event, Prop, Watch, State, Listen, Element } from '@stencil/core';\nimport { trackComponent } from '../../global/utils/tracking';\nimport { isNestedInIfxComponent } from '../../global/utils/dom-utils';\nimport { detectFramework } from '../../global/utils/framework-detection';\nimport classNames from 'classnames';\n\nexport interface SuggestionItem {\n id: string;\n text: string;\n type?: 'suggestion' | 'history';\n scope?: string;\n resultCount?: number;\n metadata?: any;\n}\n\n@Component({\n tag: 'ifx-search-field',\n styleUrl: 'search-field.scss',\n shadow: true\n})\n\nexport class SearchField {\n @Element() el;\n private inputElement: HTMLInputElement;\n private dropdownElement: HTMLDivElement;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop() suggestions: SuggestionItem[] = [];\n @Prop() showSuggestions: boolean = false;\n @Prop() maxSuggestions: number = 10;\n @Prop() maxHistoryItems: number = 5;\n @Prop() enableHistory: boolean = true;\n @Prop() historyKey: string = 'ifx-search-history';\n @Prop() historyHeaderText: string = 'Recent Searches';\n\n // ARIA Labels and Accessibility Props\n @Prop() ariaLabel: string | null = \"Search Field\"\n @Prop() ariaLabelledBy?: string | null;\n @Prop() ariaDescribedBy?: string | null;\n @Prop() deleteIconAriaLabel: string = 'Clear search';\n @Prop() historyDeleteAriaLabel: string = 'Remove from history';\n @Prop() dropdownAriaLabel: string = 'Search suggestions and history';\n @Prop() suggestionAriaLabel: string = 'Search suggestion';\n @Prop() historyItemAriaLabel: string = 'Search history item';\n\n @Event() ifxInput: EventEmitter<string>;\n @Event() ifxSuggestionRequested: EventEmitter<string>;\n @Event() ifxSuggestionSelected: EventEmitter<SuggestionItem>;\n @Event() ifxFocus: EventEmitter<void>;\n @Event() ifxBlur: EventEmitter<void>;\n\n @State() showDropdown: boolean = false;\n @State() filteredSuggestions: SuggestionItem[] = [];\n @State() selectedSuggestionIndex: number = -1;\n @State() searchHistory: string[] = [];\n\n @Prop() showDeleteIcon: boolean = false;\n @State() showDeleteIconInternalState: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() size: string = 'l';\n @State() isFocused: boolean = false;\n @Prop() placeholder: string = \"Search...\";\n @Prop() autocomplete: string = \"off\";\n @Prop() maxlength?: number = null;\n\n private focusEmitted: boolean = false;\n\n componentDidLoad() {\n this.loadSearchHistory();\n }\n\n @Listen('mousedown', { target: 'document' })\n handleOutsideClick(event: MouseEvent) {\n const path = event.composedPath();\n if (!path.includes(this.inputElement) && !path.includes(this.dropdownElement)) {\n this.hideDropdown();\n }\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.showDropdown) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.navigateSuggestions(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.navigateSuggestions(-1);\n break;\n case 'Enter':\n event.preventDefault();\n if (this.selectedSuggestionIndex >= 0) {\n this.selectSuggestion(this.filteredSuggestions[this.selectedSuggestionIndex]);\n } else {\n this.handleSearch();\n }\n break;\n case 'Escape':\n this.hideDropdown();\n break;\n }\n }\n\n @Watch('value')\n valueWatcher(newValue: string) {\n if (this.inputElement && newValue !== this.inputElement.value) {\n this.inputElement.value = newValue;\n }\n this.updateSuggestions();\n }\n\n @Watch('suggestions')\n suggestionsWatcher() {\n this.updateSuggestions();\n }\n\n\n handleInput = () => {\n const query = this.inputElement.value;\n this.value = query;\n this.ifxInput.emit(this.value);\n\n if (this.showSuggestions) {\n this.showDropdown = true;\n this.selectedSuggestionIndex = -1;\n this.requestSuggestions(query);\n }\n };\n\n handleDelete = () => {\n this.inputElement.value = '';\n this.value = \"\";\n this.ifxInput.emit(this.value);\n this.hideDropdown();\n }\n\n handleSearch = () => {\n if (this.value.trim() && this.enableHistory) {\n // Only add to history if there are actual results\n if (this.filteredSuggestions.length > 0) {\n this.addToHistory(this.value);\n }\n }\n this.hideDropdown();\n }\n\n focusInput() {\n // Don't call focus() if the input is already focused to prevent unnecessary operations\n if (document.activeElement !== this.inputElement) {\n this.inputElement.focus();\n }\n\n // Only emit focus event if it hasn't been emitted already\n if (!this.focusEmitted) {\n this.focusEmitted = true;\n this.isFocused = true;\n this.ifxFocus.emit();\n }\n\n if (this.showSuggestions) {\n // On focus without input: Show only history\n if (this.value.length === 0) {\n this.showHistoryDropdown();\n // Only show dropdown if history is actually present\n this.showDropdown = this.enableHistory && this.searchHistory.length > 0;\n } else {\n // With existing input: Normal suggestion logic\n this.updateSuggestions();\n this.showDropdown = this.filteredSuggestions.length > 0;\n }\n }\n }\n\n componentWillLoad() { \n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-search-field', framework)\n }\n }\n\n componentWillUpdate() {\n if (this.value !== \"\") {\n this.showDeleteIconInternalState = true;\n } else this.showDeleteIconInternalState = false;\n }\n\n render() {\n return (\n <div\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledBy}\n aria-describedby={this.ariaDescribedBy}\n aria-disabled={this.disabled}\n aria-value={this.value}\n class='search-field'\n >\n <div\n class={this.getWrapperClassNames()}\n tabindex={1}\n onClick={() => this.focusInput()}\n >\n <ifx-icon icon=\"search-16\" class=\"search-icon\"></ifx-icon>\n <input\n ref={(el) => (this.inputElement = el)}\n type=\"text\"\n autocomplete={this.autocomplete}\n onInput={() => this.handleInput()}\n onFocus={() => this.focusInput()}\n onBlur={() => this.blurInput()}\n placeholder={this.placeholder}\n disabled={this.disabled}\n maxlength={this.maxlength}\n value={this.value}\n role=\"combobox\"\n aria-expanded={this.showDropdown}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledBy}\n aria-describedby={this.ariaDescribedBy}\n aria-owns={this.showDropdown ? 'suggestions-dropdown' : undefined}\n aria-activedescendant={this.selectedSuggestionIndex >= 0 ? `suggestion-${this.selectedSuggestionIndex}` : undefined}\n />\n {this.showDeleteIcon && this.showDeleteIconInternalState ? (\n <ifx-icon\n icon=\"cRemove16\"\n class=\"delete-icon\"\n onClick={this.handleDelete}\n role=\"button\"\n tabindex=\"0\"\n aria-label={this.deleteIconAriaLabel}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleDelete();\n }\n }}>\n </ifx-icon>\n ) : null}\n </div>\n\n {/* Suggestions Dropdown */}\n {this.showDropdown && this.filteredSuggestions.length > 0 && (\n <div\n ref={(el) => (this.dropdownElement = el)}\n id=\"suggestions-dropdown\"\n class=\"suggestions-dropdown\"\n role=\"listbox\"\n aria-label={this.dropdownAriaLabel}\n >\n {/* History Header - only show when exclusively showing history entries */}\n {this.isShowingOnlyHistory() && (\n <div class=\"suggestions-header\">\n {this.historyHeaderText}\n </div>\n )}\n\n {this.filteredSuggestions.map((suggestion, index) => (\n <div\n key={suggestion.id}\n id={`suggestion-${index}`}\n class={this.getSuggestionClassNames(index)}\n role=\"option\"\n aria-selected={index === this.selectedSuggestionIndex}\n aria-label={`${suggestion.type === 'history' ? this.historyItemAriaLabel : this.suggestionAriaLabel}: ${suggestion.text}${suggestion.scope ? `, ${suggestion.scope}` : ''}${suggestion.resultCount ? `, ${suggestion.resultCount} results` : ''}`}\n onClick={() => this.selectSuggestion(suggestion)}\n onMouseEnter={() => this.selectedSuggestionIndex = index}\n >\n <div class=\"suggestion-content\">\n {suggestion.type === 'history' && (\n <ifx-icon icon=\"history-16\" class=\"suggestion-icon suggestion-icon--history\"></ifx-icon>\n )}\n {suggestion.type === 'suggestion' && (\n <ifx-icon icon=\"search-16\" class=\"suggestion-icon suggestion-icon--suggestion\"></ifx-icon>\n )}\n <span class=\"suggestion-text\">\n <span class=\"suggestion-main-text\">\n {this.renderHighlightedText(suggestion.text, this.value)}\n </span>\n {suggestion.scope && (\n <span class=\"suggestion-scope\">– {suggestion.scope}</span>\n )}\n </span>\n\n {suggestion.resultCount !== undefined && suggestion.scope && (\n <span class=\"suggestion-count\">{suggestion.resultCount}</span>\n )}\n\n {/* Delete Button only for history entries */}\n {suggestion.type === 'history' && (\n <ifx-icon\n icon=\"cross16\"\n class=\"suggestion-delete-icon\"\n role=\"button\"\n tabindex=\"0\"\n aria-label={`${this.historyDeleteAriaLabel}: ${suggestion.text}`}\n onClick={(event) => this.handleHistoryDelete(event, suggestion.text)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleHistoryDelete(event, suggestion.text);\n }\n }}\n ></ifx-icon>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n getSizeClass() {\n return `${this.size}` === \"s\"\n ? \"search-field__wrapper-s\"\n : \"\";\n }\n\n getWrapperClassNames() {\n return classNames(\n `search-field__wrapper`,\n `search-field__wrapper ${this.getSizeClass()}`,\n `${this.isFocused ? 'focused' : \"\"}`,\n `${this.showDropdown ? 'dropdown-open' : \"\"}`\n );\n }\n\n getSuggestionClassNames(index: number) {\n return classNames(\n 'suggestion-item',\n {\n 'suggestion-item--selected': index === this.selectedSuggestionIndex,\n 'suggestion-item--history': this.filteredSuggestions[index]?.type === 'history'\n }\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as t,c as e,h as i,g as s,a as o}from"./p-b7a462e5.js";import{d as n,t as l}from"./p-e8504e6b.js";import{i as r}from"./p-1ecafb97.js";const c=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}.ifx-multiselect-container{position:relative;box-sizing:border-box;font-family:var(--ifx-font-family)}.ifx-multiselect-container:hover{cursor:pointer}.ifx-multiselect-container .ifx-label-wrapper{font-size:1rem;line-height:1.5rem;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:anywhere;max-width:100%}.ifx-multiselect-container .ifx-error-message-wrapper{color:#CD002F;font-size:0.75rem;line-height:1rem;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:anywhere;max-width:100%}.ifx-multiselect-container .ifx-multiselect-wrapper{background-color:#FFFFFF;box-sizing:border-box;display:flex;align-items:center;border:1px solid #8D8786;border-radius:1px;width:100%;font-weight:400;font-style:normal;height:40px;line-height:24px;padding:8px 16px;font-size:1rem;line-height:1.5rem}.ifx-multiselect-container .ifx-multiselect-wrapper:focus-visible{outline:none}.ifx-multiselect-container .ifx-multiselect-wrapper:focus-visible:not(.active):not(:active){outline:none}.ifx-multiselect-container .ifx-multiselect-wrapper:focus-visible:not(.active):not(:active)::before{content:"";position:absolute;width:calc(100% + 4px);height:calc(100% + 4px);top:50%;left:50%;transform:translate(-50%, -50%);border:2px solid #0A8276;border-radius:2px}.ifx-multiselect-container .ifx-multiselect-wrapper.disabled{background:#EEEDED;color:#575352;border-color:#575352;cursor:default;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ifx-multiselect-container .ifx-multiselect-wrapper.error{border-color:#CD002F}.ifx-multiselect-container .ifx-multiselect-wrapper:hover:not(.focus,:focus){border-color:#575352}.ifx-multiselect-container .ifx-multiselect-wrapper.active{border-color:#0A8276 !important}.ifx-multiselect-container .ifx-multiselect-wrapper.active .icon-wrapper-up{display:flex;align-items:center;justify-content:center;padding-left:8px}.ifx-multiselect-container .ifx-multiselect-wrapper.active .icon-wrapper-down{display:none}.ifx-multiselect-container .ifx-multiselect-wrapper .icon-wrapper-up{display:none}.ifx-multiselect-container .ifx-multiselect-wrapper .icon-wrapper-down{display:flex;align-items:center;justify-content:center;padding-left:8px}.ifx-multiselect-container .ifx-multiselect-wrapper.is-flipped .ifx-multiselect-dropdown-menu{top:auto;bottom:100%}.ifx-multiselect-container .ifx-multiselect-input{flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ifx-multiselect-container .ifx-multiselect-input.placeholder{opacity:0.5}.ifx-multiselect-container .ifx-multiselect-icon-container{margin-left:auto;display:flex;align-items:center;gap:8px}.ifx-multiselect-container .ifx-multiselect-icon-container .ifx-multiselect-icon-container{display:flex}.ifx-multiselect-container .ifx-multiselect-icon-container .icon-wrapper{display:flex;align-items:center;transition:transform 0.2s ease-in-out}.ifx-multiselect-container .ifx-multiselect-icon-container .icon-wrapper--open{transform:rotate(180deg)}.ifx-multiselect-container .ifx-clear-button{display:flex;align-items:center}.ifx-multiselect-container .ifx-clear-button.hide{display:none}.ifx-multiselect-container .ifx-multiselect-dropdown-menu{box-sizing:border-box;position:absolute;top:100%;left:0;width:100%;margin-top:4px;border:1px solid #EEEDED;background-color:#fff;box-shadow:0px 6px 9px 0px rgba(29, 29, 29, 0.1);max-height:300px;z-index:1000;display:flex;flex-direction:column}.ifx-multiselect-dropdown-functions{padding:12px 16px;border-bottom:1px solid #EEEDED;flex-shrink:0}.ifx-multiselect-dropdown-search{margin-bottom:12px}.ifx-multiselect-dropdown-controls{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px}.ifx-multiselect-dropdown-controls .select-all-wrapper{display:flex}.ifx-multiselect-dropdown-controls .expand-collapse-controls{display:flex;gap:12px}.ifx-multiselect-dropdown-controls .control-item{font-size:0.875rem;line-height:1.25rem}.ifx-multiselect-dropdown-controls .control-item:hover{color:#0A8276}.ifx-multiselect-dropdown-controls .control-item:active{color:#08665C}.ifx-multiselect-dropdown-controls .control-item:focus{outline:none}.ifx-multiselect-dropdown-controls .control-item:focus-visible{outline:2px solid #0A8276;outline-offset:2px;border-radius:1px}.ifx-multiselect-options{flex:1;overflow-y:auto;padding-top:12px;padding-bottom:12px}.ifx-multiselect-options.show-no-results .ifx-multiselect-no-results{display:block}.ifx-multiselect-no-results{padding-left:16px;padding-right:16px;display:none}';const a=c;function h(t,e){let i;return function s(...o){const n=()=>{clearTimeout(i);t(...o)};clearTimeout(i);i=setTimeout(n,e)}}const f=class{constructor(i){t(this,i);this.ifxSelect=e(this,"ifxSelect",7);this.ifxOpen=e(this,"ifxOpen",7);if(i.$hostElement$["s-ei"]){this.internals=i.$hostElement$["s-ei"]}else{this.internals=i.$hostElement$.attachInternals();i.$hostElement$["s-ei"]=this.internals}this.disabled=false;this.error=false;this.errorMessage="Error";this.label="";this.placeholder="";this.showSearch=true;this.showSelectAll=true;this.showClearButton=true;this.showExpandCollapse=true;this.noResultsMessage="No results found.";this.showNoResultsMessage=true;this.searchPlaceholder="Search";this.selectAllLabel="Select all";this.expandLabel="Expand";this.collapseLabel="Collapse";this.ariaMultiSelectLabel="Multi-select dropdown";this.ariaMultiSelectLabelledBy="";this.ariaMultiSelectDescribedBy="";this.ariaSearchLabel="Search options";this.ariaClearLabel="Clear all selections";this.ariaToggleLabel="Toggle dropdown";this.ariaSelectAllLabel="Select all options";this.ariaExpandAllLabel="Expand all categories";this.ariaCollapseAllLabel="Collapse all categories";this.internalError=false;this.persistentSelectedOptions=[];this.dropdownOpen=false;this.searchTerm="";this.handleSearch=h((t=>{const e=t.value.toLowerCase();const i=e!=="";this.searchTerm=e;const s=this.el.shadowRoot.querySelector(".ifx-multiselect-wrapper");if(s){if(i){s.classList.remove("active")}else{const t=this.el.shadowRoot.querySelector("ifx-search-field");const e=t&&t.matches(":focus-within");if(!e){s.classList.add("active")}}}const o=this.el.shadowRoot.querySelector(".ifx-multiselect-options");if(o){if(i){o.classList.add("has-search-filter")}else{o.classList.remove("has-search-filter")}}requestAnimationFrame((()=>{const t=this.el.querySelectorAll("ifx-multiselect-option");t.forEach((t=>{const s=new CustomEvent("ifx-search-filter",{detail:{searchTerm:e,isActive:i}});t.dispatchEvent(s)}));if(i){setTimeout((()=>{const t=this.el.querySelectorAll("ifx-multiselect-option");let e=0;t.forEach((t=>{const i=window.getComputedStyle(t);const s=t.getBoundingClientRect();if(i.display!=="none"&&i.visibility!=="hidden"&&i.opacity!=="0"&&s.height>0){e++}}));const i=this.el.shadowRoot.querySelector(".ifx-multiselect-options");if(i){if(e===0){i.classList.add("show-no-results")}else{i.classList.remove("show-no-results")}}}),200)}else{const t=this.el.shadowRoot.querySelector(".ifx-multiselect-options");if(t){t.classList.remove("show-no-results")}}}))}),150);this.pendingSelectionUpdate=false;this.handleDocumentClick=t=>{const e=t.composedPath();if(!e.includes(this.dropdownElement)){this.dropdownOpen=false;document.removeEventListener("click",this.handleDocumentClick);this.resetSearch();this.ifxOpen.emit(this.dropdownOpen)}}}parseChildOptions(){const t=[];const e=Array.from(this.el.children);e.forEach(((e,i)=>{if(e.tagName==="IFX-MULTISELECT-OPTION"){const s=this.parseOptionElement(e,i);if(s){t.push(s)}}}));return t}parseOptionElement(t,e){const i=t.getAttribute("value")||`option-${e}`;const s=t.hasAttribute("selected");const o=t.hasAttribute("disabled");const n=t.hasAttribute("indeterminate");const l={value:i,selected:s,disabled:o,indeterminate:n};const r=Array.from(t.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION")).map(((t,e)=>this.parseOptionElement(t,e))).filter((t=>t!==null));if(r.length>0){l.children=r}return l}loadInitialOptions(){this.internalError=this.error;this.internalErrorMessage=this.errorMessage;const t=this.parseChildOptions();const e=this.collectSelectedOptions(t);const i=e.filter((t=>!this.persistentSelectedOptions.some((e=>e.value==t.value))));this.persistentSelectedOptions=[...this.persistentSelectedOptions,...i]}collectSelectedOptions(t){let e=[];for(const i of t){if(i.selected){if(i.children&&i.children.length>0){e=e.concat(this.collectLeafOptions(i.children))}else{if(!e.some((t=>t.value===i.value))){e.push(i)}}}else{if(i.children&&i.children.length>0){e=e.concat(this.collectSelectedOptions(i.children))}}}return e}collectLeafOptions(t){let e=[];for(const i of t){if(i.children&&i.children.length>0){e=e.concat(this.collectLeafOptions(i.children))}else{e.push(i)}}return e}handleSearchFocus(t){const e=this.el.shadowRoot.querySelector(".ifx-multiselect-wrapper");if(e){if(t||this.searchTerm!==""){e.classList.remove("active")}else{e.classList.add("active")}}}positionDropdown(){var t;const e=(t=this.el.shadowRoot.querySelector(".ifx-multiselect-wrapper"))===null||t===void 0?void 0:t.getBoundingClientRect();const i=window.innerHeight-e.bottom;const s=e.top;if(s>i&&e.height>i||e.bottom>window.innerHeight){this.dropdownFlipped=true}else{this.dropdownFlipped=false}}updateSlotBasedSelections(t=false){const e=this.el.querySelectorAll("ifx-multiselect-option");const i=[];e.forEach((t=>{const e=t["__stencil_instance"];if(e&&e.selected&&!e.hasChildren){i.push({value:e.value,selected:true,disabled:e.disabled})}}));this.persistentSelectedOptions=i;if(t){this.ifxSelect.emit(this.persistentSelectedOptions)}}updateInitialParentStates(){const t=this.el.querySelectorAll("ifx-multiselect-option");const e=Array.from(t).map((t=>({element:t,instance:t["__stencil_instance"],depth:parseInt(t.getAttribute("data-level")||"0")}))).filter((t=>t.instance)).sort(((t,e)=>e.depth-t.depth));e.forEach((({instance:t})=>{if(t.hasChildren){this.updateParentState(t)}}))}updateParentState(t){const e=Array.from(t.el.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION")).map((t=>t["__stencil_instance"])).filter((t=>t!==null));const i=e.filter((t=>t.selected)).length;const s=e.filter((t=>t.indeterminate)).length;const o=e.length;if(i===o&&s===0){t.selected=true;t.indeterminate=false}else if(i===0&&s===0){t.selected=false;t.indeterminate=false}else{t.selected=false;t.indeterminate=true}}componentDidLoad(){setTimeout((()=>{this.positionDropdown()}),500);this.el.addEventListener("ifx-option-changed",(()=>{if(!this.pendingSelectionUpdate){this.pendingSelectionUpdate=true;requestAnimationFrame((()=>{this.updateSlotBasedSelections(true);setTimeout((()=>{this.pendingSelectionUpdate=false}),0)}))}}));setTimeout((()=>{this.updateSlotBasedSelections(false);this.updateInitialParentStates()}),100)}componentWillLoad(){if(!r(this.el)){const t=n();l("ifx-multiselect",t)}this.loadInitialOptions()}updateInternalError(){this.internalError=this.error}updateInternalErrorMessage(){this.internalErrorMessage=this.errorMessage}onSelectionChange(t,e){const i=new FormData;t.forEach((t=>i.append(this.name,t.value)));this.internals.setFormValue(i)}collapseAll(){const t=this.el.querySelectorAll("ifx-multiselect-option");t.forEach((t=>{const e=t["__stencil_instance"];if(e&&e.hasChildren){e.isExpanded=false}}))}expandAll(){const t=this.el.querySelectorAll("ifx-multiselect-option");t.forEach((t=>{const e=t["__stencil_instance"];if(e&&e.hasChildren){e.isExpanded=true}}))}selectAll(){this.resetSearch();const t=this.el.querySelectorAll("ifx-multiselect-option");t.forEach((t=>{const e=t["__stencil_instance"];if(e){if(e.hasChildren){e.isExpanded=true}else{e.selected=true}}}));setTimeout((()=>{this.updateInitialParentStates();this.updateSlotBasedSelections(false);this.ifxSelect.emit(this.persistentSelectedOptions)}),0)}async clearSelection(){const t=this.el.querySelectorAll("ifx-multiselect-option");t.forEach((t=>{const e=t["__stencil_instance"];if(e){e.selected=false;e.indeterminate=false;if(e.hasChildren){e.isExpanded=false}}}));this.persistentSelectedOptions=[];setTimeout((()=>{this.updateSlotBasedSelections(false);this.ifxSelect.emit(this.persistentSelectedOptions)}),0)}toggleDropdown(){this.dropdownOpen=!this.dropdownOpen;setTimeout((()=>{if(this.dropdownOpen){document.addEventListener("click",this.handleDocumentClick)}else{this.resetSearch()}this.ifxOpen.emit(this.dropdownOpen)}),0)}resetSearch(){this.searchTerm="";const t=this.el.shadowRoot.querySelector("ifx-search-field");if(t){t.value=""}const e=this.el.shadowRoot.querySelector(".ifx-multiselect-options");if(e){e.classList.remove("has-search-filter")}const i=this.el.querySelectorAll("ifx-multiselect-option");i.forEach((t=>{const e=new CustomEvent("ifx-search-filter",{detail:{searchTerm:"",isActive:false}});t.dispatchEvent(e)}))}handleWrapperClick(t){this.positionDropdown();if(t.currentTarget===t.target){this.toggleDropdown()}}handleKeyDown(t){if(this.disabled)return;if(!this.dropdownOpen){switch(t.code){case"Enter":case"Space":case"ArrowDown":t.preventDefault();this.toggleDropdown();break}return}switch(t.code){case"Escape":t.preventDefault();this.toggleDropdown();break;case"Enter":case"Space":const e=t.target;if(!e.closest(".ifx-multiselect-dropdown-functions")){t.preventDefault();this.toggleDropdown()}break;case"ArrowDown":case"ArrowUp":t.preventDefault();this.focusFirstOption();break}}focusFirstOption(){var t;const e=this.el.querySelector("ifx-multiselect-option:not(.search-hidden)");if(e){const i=(t=e.shadowRoot)===null||t===void 0?void 0:t.querySelector(".option-label");i===null||i===void 0?void 0:i.focus()}}renderSelectAll(){const t=this.el.querySelectorAll("ifx-multiselect-option");const e=Array.from(t).filter((t=>!t.hasChildren));const s=Array.from(t).filter((t=>!t.hasChildren&&t.selected));const o=e.length>0&&s.length===e.length;const n=t=>{if(t){t.preventDefault();t.stopPropagation()}if(o){this.clearSelection()}else{this.selectAll()}};return i("div",{class:"select-all-wrapper"},i("ifx-checkbox",{id:"selectAll",checked:o,size:"s","aria-label":this.ariaSelectAllLabel,onClick:n,onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();t.stopPropagation();n(t)}}},this.selectAllLabel))}renderNoResultsMessage(){return i("div",{class:"ifx-multiselect-no-results"},i("div",{class:"no-results-content"},i("span",{class:"no-results-text"},this.noResultsMessage)))}render(){const t=this.persistentSelectedOptions.map((t=>{var e;const i=this.el.querySelector(`ifx-multiselect-option[value="${t.value}"]`);return((e=i===null||i===void 0?void 0:i.textContent)===null||e===void 0?void 0:e.trim())||t.value})).join(", ");const e=this.persistentSelectedOptions.length>0;let s=false;const o=this.el.querySelectorAll("ifx-multiselect-option");if(o.length>0){s=Array.from(o).every((t=>t.children.length===0))}return i("div",{class:`ifx-multiselect-container`,ref:t=>this.dropdownElement=t},this.label?i("div",{class:"ifx-label-wrapper"},i("span",null,this.label)):null,i("div",{class:`ifx-multiselect-wrapper\n ${this.dropdownOpen?"active":""}\n ${this.dropdownFlipped?"is-flipped":""}\n ${this.internalError?"error":""}\n ${this.disabled?"disabled":""}`,role:"combobox","aria-label":this.ariaMultiSelectLabel,"aria-labelledby":this.ariaMultiSelectLabelledBy||undefined,"aria-describedby":this.ariaMultiSelectDescribedBy||undefined,"aria-expanded":this.dropdownOpen,"aria-haspopup":"listbox","aria-disabled":this.disabled,tabindex:"0",onClick:this.disabled?undefined:t=>this.handleWrapperClick(t),onKeyDown:this.disabled?undefined:t=>this.handleKeyDown(t)},i("div",{class:`ifx-multiselect-input\n ${e?"":"placeholder"}\n `,onClick:this.disabled?undefined:()=>this.toggleDropdown()},e?t:this.placeholder),this.dropdownOpen&&i("div",{class:"ifx-multiselect-dropdown-menu"},(this.showSearch||this.showSelectAll||this.showExpandCollapse&&!s)&&i("div",{class:"ifx-multiselect-dropdown-functions",onClick:t=>t.stopPropagation()},this.showSearch&&i("div",{class:"ifx-multiselect-dropdown-search"},i("ifx-search-field",{class:"search-input",placeholder:this.searchPlaceholder,size:"s","show-delete-icon":"true","aria-label":this.ariaSearchLabel,onKeyDown:t=>{t.stopPropagation()},onIfxInput:t=>this.handleSearch(t.target),onFocus:()=>this.handleSearchFocus(true),onBlur:()=>this.handleSearchFocus(false)})),i("div",{class:"ifx-multiselect-dropdown-controls"},this.showSelectAll&&this.renderSelectAll(),this.showExpandCollapse&&!s&&i("div",{class:"expand-collapse-controls"},i("span",{class:"control-item",role:"button",tabIndex:0,"aria-label":this.ariaExpandAllLabel,onClick:t=>{t.stopPropagation();this.expandAll()},onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();t.stopPropagation();this.expandAll()}}},this.expandLabel),i("span",{class:"control-item",role:"button",tabIndex:0,"aria-label":this.ariaCollapseAllLabel,onClick:t=>{t.stopPropagation();this.collapseAll()},onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();t.stopPropagation();this.collapseAll()}}},this.collapseLabel)))),i("div",{class:"ifx-multiselect-options",role:"listbox","aria-multiselectable":"true"},i("slot",null),this.searchTerm&&this.showNoResultsMessage&&this.renderNoResultsMessage())),i("div",{class:"ifx-multiselect-icon-container"},this.persistentSelectedOptions.length>0&&i("div",{class:`ifx-clear-button ${!this.showClearButton?"hide":""}`,onClick:this.disabled?undefined:()=>this.clearSelection()},i("ifx-icon",{icon:"cRemove16"})),i("div",{class:"icon-wrapper-up",onClick:this.disabled?undefined:()=>this.toggleDropdown()},i("ifx-icon",{key:"icon-up",icon:"chevron-up-16"})),i("div",{class:"icon-wrapper-down",onClick:this.disabled?undefined:()=>this.toggleDropdown()},i("ifx-icon",{key:"icon-down",icon:"chevron-down-16"})))),this.internalError?i("div",{class:"ifx-error-message-wrapper"},i("span",null,this.internalErrorMessage)):null)}static get formAssociated(){return true}get el(){return s(this)}static get watchers(){return{error:["updateInternalError"],errorMessage:["updateInternalErrorMessage"],persistentSelectedOptions:["onSelectionChange"]}}};f.style=a;const d=":host{display:block;width:100%}.option{display:flex;flex-direction:column;position:relative;cursor:pointer;list-style:none}.option.option--expanded{position:relative}.option.option--has-children{position:relative}.option.option--has-children .option-item>.chevron-wrapper{display:flex}.option--disabled{cursor:not-allowed;pointer-events:none;color:#BFBBBB}.option.search-hidden{display:none !important}.option.search-match .option-item .option-label .search-highlight{font-weight:bold}.option-item{display:flex;flex-direction:row;align-items:center;white-space:nowrap;min-height:20px;padding:4px 16px;background-color:#FFFFFF;transition:background-color 0.2s ease-in-out}.option-item:hover{background-color:#F7F7F7}.option--disabled .option-item:hover{background-color:transparent}.option-children{display:block}.chevron-wrapper{display:none;align-items:center;justify-content:center;margin-right:8px;width:20px;height:20px;flex-shrink:0}.chevron-wrapper:focus{outline:none}.chevron-wrapper:focus-visible{outline:2px solid #0A8276;outline-offset:2px;border-radius:1px}.option--has-children .chevron-wrapper{display:flex}.chevron-wrapper .chevron{transition:transform 0.2s ease-in-out;color:#3C3A39}.chevron-wrapper .chevron.chevron--expanded{transform:rotate(90deg)}.chevron-wrapper .chevron.chevron--collapsed{transform:rotate(0deg)}.checkbox-wrapper{display:flex;align-items:center;margin-right:8px;flex-shrink:0}.option-label{flex-grow:1;display:flex;align-items:center;cursor:pointer;padding:2px 0;font-size:0.875rem}.option-label:focus{outline:none}.option-label:focus-visible{outline:2px solid #0A8276;outline-offset:2px;border-radius:1px}.option--disabled .option-label{cursor:not-allowed;color:#BFBBBB}";const p=d;const u=class{constructor(e){t(this,e);this.selected=false;this.disabled=false;this.indeterminate=false;this.isExpanded=false;this.hasChildren=false;this.depth=0;this.searchTerm="";this.isSearchActive=false;this.isSearchDisabled=false;this.handleSearchFilter=t=>{const{searchTerm:e,isActive:i}=t.detail;this.searchTerm=e.toLowerCase();this.isSearchActive=i;requestAnimationFrame((()=>{this.updateSearchClasses()}))};this.handleCheckboxClick=t=>{if(this.disabled||this.isSearchActive&&this.isSearchDisabled)return;t.stopPropagation();let e;if(this.indeterminate){e=true}else{e=!this.selected}this.selected=e;this.indeterminate=false;if(this.hasChildren){this.isExpanded=e;requestAnimationFrame((()=>{this.selectAllChildren(e);this.expandAllChildren(e)}))}this.updateParentStates();this.notifyMultiselect()};this.handleHeaderClick=t=>{t.stopPropagation();if(!this.disabled&&!(this.isSearchActive&&this.isSearchDisabled)){this.handleClick(t)}}}componentWillLoad(){this.hasChildren=this.el.children.length>0;this.depth=this.calculateDepth();this.el.setAttribute("data-level",this.depth.toString());if(this.hasChildren){const t=this.hasAnySelectedChildren();if(t){this.isExpanded=true}}}componentDidLoad(){this.el["__stencil_instance"]=this;this.notifyMultiselect();this.el.addEventListener("ifx-search-filter",this.handleSearchFilter)}disconnectedCallback(){this.el.removeEventListener("ifx-search-filter",this.handleSearchFilter)}updateSearchClasses(){var t;const e=(t=this.el.shadowRoot)===null||t===void 0?void 0:t.querySelector(".option");if(!e)return;if(!this.isSearchActive){e.classList.remove("search-hidden","search-parent","search-match");this.removeHighlighting();this.isSearchDisabled=false;return}const i=this.getTextContent().toLowerCase();const s=i.includes(this.searchTerm);const o=this.hasMatchingParent();requestAnimationFrame((()=>{const t=this.hasMatchingChildren();e.classList.remove("search-hidden","search-parent","search-match");this.isSearchDisabled=false;if(s&&!this.hasChildren){e.classList.add("search-match");this.highlightSearchTerm()}else if(s&&this.hasChildren){e.classList.add("search-match");this.highlightSearchTerm();this.isExpanded=true}else if(!s&&this.hasChildren&&t){e.classList.add("search-parent");this.removeHighlighting();this.isExpanded=true;this.isSearchDisabled=true}else if(o){e.classList.add("search-match");this.removeHighlighting()}else{e.classList.add("search-hidden");this.removeHighlighting()}}))}highlightSearchTerm(){var t;if(!this.searchTerm)return;const e=(t=this.el.shadowRoot)===null||t===void 0?void 0:t.querySelector(".option-label");if(!e)return;const i=e.querySelector("slot");if(!i)return;this.removeHighlighting();const s=this.getTextContent();const o=this.searchTerm.toLowerCase();const n=s.toLowerCase();if(!n.includes(o))return;const l=n.indexOf(o);if(l===-1)return;const r=s.substring(0,l);const c=s.substring(l,l+o.length);const a=s.substring(l+o.length);const h=document.createElement("span");h.className="highlighted-text";if(r){h.appendChild(document.createTextNode(r))}const f=document.createElement("strong");f.className="search-highlight";f.textContent=c;h.appendChild(f);if(a){h.appendChild(document.createTextNode(a))}e.setAttribute("data-original-content","true");i.style.display="none";e.appendChild(h)}removeHighlighting(){var t;const e=(t=this.el.shadowRoot)===null||t===void 0?void 0:t.querySelector(".option-label");if(!e)return;const i=e.querySelector("slot");const s=e.querySelector(".highlighted-text");if(s){e.removeChild(s)}if(i){i.style.display=""}e.removeAttribute("data-original-content")}getTextContent(){let t="";Array.from(this.el.childNodes).forEach((e=>{var i;if(e.nodeType===Node.TEXT_NODE){t+=((i=e.textContent)===null||i===void 0?void 0:i.trim())||""}}));return t||this.value||""}hasMatchingChildren(){if(!this.hasChildren)return false;const t=Array.from(this.el.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION"));return t.some((t=>{const e=t["__stencil_instance"];if(!e)return false;const i=e.getTextContent().toLowerCase();const s=i.includes(this.searchTerm);const o=e.hasMatchingChildren();return s||o}))}hasMatchingParent(){let t=this.el.parentElement;while(t&&t.tagName==="IFX-MULTISELECT-OPTION"){const e=t["__stencil_instance"];if(e){const t=e.getTextContent().toLowerCase();if(t.includes(this.searchTerm)){return true}}t=t.parentElement}return false}calculateDepth(){let t=0;let e=this.el.parentElement;while(e&&e.tagName!=="IFX-MULTISELECT"){if(e.tagName==="IFX-MULTISELECT-OPTION"){t++}e=e.parentElement}return t}handleClick(t){if(this.disabled||this.isSearchActive&&this.isSearchDisabled)return;t.stopPropagation();if(t.type==="click"&&t.target.closest(".chevron-wrapper")){this.toggleExpansion();return}let e;if(this.indeterminate){e=true}else{e=!this.selected}this.selected=e;this.indeterminate=false;if(this.hasChildren){this.isExpanded=e;requestAnimationFrame((()=>{this.selectAllChildren(e);this.expandAllChildren(e)}))}this.updateParentStates();this.notifyMultiselect()}handleKeyDown(t){if(this.disabled||this.isSearchActive&&this.isSearchDisabled)return;const e=t.target;if(e.closest(".chevron-wrapper")||e.closest(".checkbox-wrapper")){return}if(t.key!=="ArrowUp"&&t.key!=="ArrowDown"){t.stopPropagation()}if(t.key==="ArrowRight"&&this.hasChildren){this.isExpanded=true}if(t.key==="ArrowLeft"&&this.hasChildren){this.isExpanded=false}}notifyMultiselect(){const t=new CustomEvent("ifx-option-changed",{bubbles:true,detail:{value:this.value,selected:this.selected,indeterminate:this.indeterminate}});this.el.dispatchEvent(t)}selectAllChildren(t){const e=Array.from(this.el.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION"));e.forEach((e=>{var i;const s=e["__stencil_instance"];if(s){s.selected=t;s.indeterminate=false;if(s.hasChildren){s.isExpanded=t;s.selectAllChildren(t)}(i=s.notifyMultiselect)===null||i===void 0?void 0:i.call(s)}}))}expandAllChildren(t){const e=Array.from(this.el.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION"));e.forEach((e=>{const i=e["__stencil_instance"];if(i&&i.hasChildren){i.isExpanded=t;i.expandAllChildren(t)}}))}updateParentStates(){var t;let e=this.el.parentElement;while(e&&e.tagName==="IFX-MULTISELECT-OPTION"){const i=e["__stencil_instance"];if(!i){e=e.parentElement;continue}const s=Array.from(e.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION")).map((t=>t["__stencil_instance"])).filter((t=>t!==null));const o=s.filter((t=>t.selected)).length;const n=s.filter((t=>t.indeterminate)).length;const l=s.length;if(o===l&&n===0){i.selected=true;i.indeterminate=false}else if(o===0&&n===0){i.selected=false;i.indeterminate=false}else{i.selected=false;i.indeterminate=true}(t=i.notifyMultiselect)===null||t===void 0?void 0:t.call(i);e=e.parentElement}}toggleExpansion(){this.isExpanded=!this.isExpanded}hasAnySelectedChildren(){const t=Array.from(this.el.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION"));return t.some((t=>{const e=t.hasAttribute("selected");const i=this.checkForSelectedDescendants(t);return e||i}))}checkForSelectedDescendants(t){const e=Array.from(t.children).filter((t=>t.tagName==="IFX-MULTISELECT-OPTION"));return e.some((t=>{const e=t.hasAttribute("selected");const i=this.checkForSelectedDescendants(t);return e||i}))}render(){let t=false;const e=this.el.closest("ifx-multiselect");if(e){const i=Array.from(e.querySelectorAll("ifx-multiselect-option"));t=i.every((t=>t.children.length===0))}const s=this.depth*28+16;const n=this.hasChildren?0:28;let l=s+n;const r=t?undefined:{paddingLeft:`${l}px`};return i(o,{key:"53ab714e5bc86c83569b2c1cf6f479405f528880"},i("div",{key:"b5597349b4d3ef268b5826047f414dd7ce0c7854",class:{option:true,"option--has-children":this.hasChildren,"option--expanded":this.isExpanded,"option--disabled":this.disabled,"option--selected":this.selected},role:"option","aria-expanded":this.hasChildren?this.isExpanded?"true":"false":undefined,"aria-selected":this.selected?"true":"false","aria-disabled":this.disabled?"true":"false","data-level":this.depth,"data-value":this.value},i("div",{key:"3052a22b111e61ac0e48ecd64460c35aa2b06fea",class:"option-item",style:r},i("div",{key:"a392db43dbb81f06a4cfd4e5faad7672108bc4bb",class:"chevron-wrapper",tabIndex:this.hasChildren?0:-1,role:this.hasChildren?"button":undefined,"aria-label":this.hasChildren?this.isExpanded?"Collapse":"Expand":undefined,onClick:t=>{t.stopPropagation();this.toggleExpansion()},onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();t.stopPropagation();this.toggleExpansion()}}},this.hasChildren&&i("ifx-icon",{key:"033471dbc46d73d82f0ab44a07a1dfa5fd9625fb",class:`chevron ${this.isExpanded?"chevron--expanded":"chevron--collapsed"}`,icon:"chevron-right-16"})),i("div",{key:"d6fc07097a390e9e29f8c4dcc55c90f755b10fc9",class:"checkbox-wrapper",onClick:t=>t.stopPropagation()},i("ifx-checkbox",{key:"7d39f30d45c2f917edd924b3b8ce6c22f4146c19",size:"s",checked:this.isSearchActive&&this.isSearchDisabled?false:this.indeterminate?false:this.selected,indeterminate:this.isSearchActive&&this.isSearchDisabled?false:this.indeterminate,onClick:this.handleCheckboxClick,disabled:this.disabled||this.isSearchActive&&this.isSearchDisabled,onKeyDown:t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();t.stopPropagation();this.handleCheckboxClick(t)}}})),i("div",{key:"e09de6a2559a8334553abb9d45b901c1459a2da7",class:"option-label",onClick:this.handleHeaderClick,tabIndex:-1},i("slot",{key:"941edb6987ef6add787211833e0e1aad0d5b9066"}))),this.isExpanded&&i("div",{key:"b5248d64937e418587f1c807e434874be4952f48",class:"option-children"},i("slot",{key:"8e6e69e5000661632c114279a5afc5c80f361b8e",name:"children"}))))}get el(){return s(this)}};u.style=p;export{f as ifx_multiselect,u as ifx_multiselect_option};
|
2
|
+
//# sourceMappingURL=p-e5fe179a.entry.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["multiselectCss","IfxMultiselectStyle0","debounce","func","wait","timeout","executedFunction","args","later","clearTimeout","setTimeout","Multiselect","constructor","hostRef","this","disabled","error","errorMessage","label","placeholder","showSearch","showSelectAll","showClearButton","showExpandCollapse","noResultsMessage","showNoResultsMessage","searchPlaceholder","selectAllLabel","expandLabel","collapseLabel","ariaMultiSelectLabel","ariaMultiSelectLabelledBy","ariaMultiSelectDescribedBy","ariaSearchLabel","ariaClearLabel","ariaToggleLabel","ariaSelectAllLabel","ariaExpandAllLabel","ariaCollapseAllLabel","internalError","persistentSelectedOptions","dropdownOpen","searchTerm","handleSearch","targetElement","value","toLowerCase","isSearchActive","wrapper","el","shadowRoot","querySelector","classList","remove","searchField","searchFieldHasFocus","matches","add","optionsContainer","requestAnimationFrame","allOptions","querySelectorAll","forEach","option","searchEvent","CustomEvent","detail","isActive","dispatchEvent","visibleCount","style","window","getComputedStyle","rect","getBoundingClientRect","display","visibility","opacity","height","pendingSelectionUpdate","handleDocumentClick","event","path","composedPath","includes","dropdownElement","document","removeEventListener","resetSearch","ifxOpen","emit","parseChildOptions","options","childElements","Array","from","children","child","index","tagName","parseOptionElement","push","element","getAttribute","selected","hasAttribute","indeterminate","nestedOptions","filter","map","childIndex","opt","length","loadInitialOptions","internalErrorMessage","initiallySelected","collectSelectedOptions","initiallySelectedNotInState","init","some","selectedOptions","concat","collectLeafOptions","existingOption","leafOptions","handleSearchFocus","hasFocus","positionDropdown","wrapperRect","_a","spaceBelow","innerHeight","bottom","spaceAbove","top","dropdownFlipped","updateSlotBasedSelections","emitEvent","allOptionElements","selectedLeafOptions","optionEl","instance","hasChildren","ifxSelect","updateInitialParentStates","optionsByDepth","depth","parseInt","item","sort","a","b","updateParentState","parentInstance","directChildren","selectedCount","indeterminateCount","totalCount","componentDidLoad","addEventListener","componentWillLoad","isNestedInIfxComponent","framework","detectFramework","trackComponent","updateInternalError","updateInternalErrorMessage","onSelectionChange","newValue","_","formData","FormData","append","name","internals","setFormValue","collapseAll","isExpanded","expandAll","selectAll","clearSelection","toggleDropdown","handleWrapperClick","currentTarget","target","handleKeyDown","code","preventDefault","closest","focusFirstOption","firstOption","labelElement","focus","renderSelectAll","allSelected","toggleSelectAll","stopPropagation","h","class","id","checked","size","onClick","onKeyDown","e","key","renderNoResultsMessage","render","selectedOptionsLabels","optionElement","textContent","trim","join","hasSelections","isFlatMultiselect","every","ref","role","undefined","tabindex","onIfxInput","onFocus","onBlur","tabIndex","icon","multiselectOptionCss","IfxMultiselectOptionStyle0","MultiselectOption","isSearchDisabled","handleSearchFilter","updateSearchClasses","handleCheckboxClick","newSelectedState","selectAllChildren","expandAllChildren","updateParentStates","notifyMultiselect","handleHeaderClick","handleClick","calculateDepth","setAttribute","toString","hasSelectedChildren","hasAnySelectedChildren","disconnectedCallback","optionDiv","removeHighlighting","getTextContent","matchesSearch","hasMatchingParent","hasMatchingChildren","highlightSearchTerm","slotElement","originalText","searchTermLower","originalTextLower","searchIndex","indexOf","beforeMatch","substring","matchText","afterMatch","highlightedContent","createElement","className","appendChild","createTextNode","boldElement","highlightedElement","removeChild","removeAttribute","text","childNodes","node","nodeType","Node","TEXT_NODE","childOptions","childInstance","childText","childMatches","grandChildrenMatch","parent","parentElement","parentText","type","toggleExpansion","updateEvent","bubbles","call","expanded","siblings","sibling","hasSelected","hasSelectedDescendants","checkForSelectedDescendants","nestedChild","isSelected","hasSelectedNested","parentMultiselect","basePadding","additionalPadding","totalPadding","optionItemStyle","paddingLeft","Host"],"sources":["src/components/select/multi-select/multiselect.scss?tag=ifx-multiselect&encapsulation=shadow","src/components/select/multi-select/multiselect.tsx","src/components/select/multi-select/multiselect-option.scss?tag=ifx-multiselect-option&encapsulation=shadow","src/components/select/multi-select/multiselect-option.tsx"],"sourcesContent":["// @import '~choices.js/public/assets/styles/choices.css';\n@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../../global/font.scss\";\n\n.ifx-multiselect-container {\n position: relative;\n box-sizing: border-box;\n font-family: var(--ifx-font-family); // tokens.$ifxFontFamilyBody;\n\n\n\n &:hover {\n cursor: pointer;\n }\n\n .ifx-label-wrapper {\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: anywhere;\n max-width: 100%;\n }\n\n .ifx-error-message-wrapper {\n color: #CD002F;\n font-size: tokens.$ifxFontSizeXs;\n line-height: tokens.$ifxLineHeightXs;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-wrap: anywhere;\n max-width: 100%;\n }\n\n .ifx-multiselect-wrapper {\n background-color: tokens.$ifxColorBaseWhite;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n border: 1px solid tokens.$ifxColorEngineering400;\n border-radius: tokens.$ifxBorderRadius12;\n width: 100%;\n font-weight: 400;\n font-style: normal;\n height: 40px;\n line-height: 24px;\n padding: 8px 16px;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n\n &:focus-visible {\n outline: none;\n }\n\n &:focus-visible:not(.active):not(:active) {\n outline: none;\n\n &::before {\n content: '';\n position: absolute;\n width: calc(100% + 4px);\n height: calc(100% + 4px);\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border: 2px solid tokens.$ifxColorOcean500;\n border-radius: 2px;\n\n }\n }\n\n &.disabled {\n background: tokens.$ifxColorEngineering200;\n color: #575352;\n border-color: #575352;\n cursor: default;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n &.error {\n border-color: #CD002F;\n }\n\n &:hover:not(.focus, :focus) {\n border-color: tokens.$ifxColorEngineering500;\n }\n\n &.active {\n border-color: tokens.$ifxColorOcean500 !important; // Active border color\n\n & .icon-wrapper-up {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-left: tokens.$ifxSpace100;\n }\n\n & .icon-wrapper-down {\n display: none\n }\n }\n\n\n & .icon-wrapper-up {\n display: none;\n }\n\n & .icon-wrapper-down {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-left: tokens.$ifxSpace100;\n }\n\n &.is-flipped {\n .ifx-multiselect-dropdown-menu {\n top: auto;\n bottom: 100%;\n }\n }\n }\n\n .ifx-multiselect-input {\n flex-grow: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.placeholder {\n opacity: 0.5;\n }\n\n }\n\n\n .ifx-multiselect-icon-container {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: tokens.$ifxSpace100;\n\n .ifx-multiselect-icon-container {\n display: flex;\n }\n\n .icon-wrapper {\n display: flex;\n align-items: center;\n transition: transform 0.2s ease-in-out;\n }\n\n .icon-wrapper--open {\n transform: rotate(180deg);\n }\n }\n\n .ifx-clear-button {\n display: flex;\n align-items: center;\n\n &.hide {\n display: none;\n }\n }\n\n .ifx-multiselect-dropdown-menu {\n box-sizing: border-box;\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n margin-top: tokens.$ifxSpace50;\n border: 1px solid tokens.$ifxColorEngineering200;\n background-color: #fff;\n box-shadow: 0px 6px 9px 0px rgba(29, 29, 29, 0.10);\n max-height: 300px;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n }\n}\n\n.ifx-multiselect-dropdown-functions {\n padding: tokens.$ifxSpace150 tokens.$ifxSpace200;\n border-bottom: 1px solid tokens.$ifxColorEngineering200;\n flex-shrink: 0;\n}\n\n.ifx-multiselect-dropdown-search {\n margin-bottom: tokens.$ifxSpace150;\n}\n\n.ifx-multiselect-dropdown-controls {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: tokens.$ifxSpace100;\n\n .select-all-wrapper {\n display: flex;\n }\n\n .expand-collapse-controls {\n display: flex;\n gap: tokens.$ifxSpace150;\n }\n\n .control-item {\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n\n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n\n &:active {\n color: tokens.$ifxColorOcean600;\n }\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n border-radius: tokens.$ifxBorderRadius12;\n }\n }\n}\n\n.ifx-multiselect-options {\n flex: 1;\n overflow-y: auto;\n padding-top: tokens.$ifxSpace150;\n padding-bottom: tokens.$ifxSpace150;\n\n &.show-no-results {\n .ifx-multiselect-no-results {\n display: block;\n }\n }\n}\n\n.ifx-multiselect-no-results {\n padding-left: tokens.$ifxSpace200;\n padding-right: tokens.$ifxSpace200;\n display: none;\n}\n\n","import { Component, Prop, State, Event, EventEmitter, Element, h, Watch, AttachInternals, Method } from '@stencil/core';\nimport { trackComponent } from '../../../global/utils/tracking'; \nimport { isNestedInIfxComponent } from '../../../global/utils/dom-utils';\nimport { detectFramework } from '../../../global/utils/framework-detection';\nimport { Option } from './interfaces';\n\nfunction debounce(func, wait) {\n let timeout;\n return function executedFunction(...args) {\n const later = () => {\n clearTimeout(timeout);\n func(...args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n}\n\n@Component({\n tag: 'ifx-multiselect',\n styleUrl: 'multiselect.scss',\n shadow: true,\n formAssociated: true\n})\n\nexport class Multiselect {\n @Prop() name: string;\n @Prop() disabled: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string = \"Error\";\n @Prop() label: string = \"\";\n @Prop() placeholder: string = \"\";\n @Prop() showSearch: boolean = true;\n @Prop() showSelectAll: boolean = true;\n @Prop() showClearButton: boolean = true;\n @Prop() showExpandCollapse: boolean = true;\n @Prop() noResultsMessage: string = \"No results found.\";\n @Prop() showNoResultsMessage: boolean = true;\n @Prop() searchPlaceholder: string = \"Search\";\n @Prop() selectAllLabel: string = \"Select all\";\n @Prop() expandLabel: string = \"Expand\";\n @Prop() collapseLabel: string = \"Collapse\";\n @Prop() ariaMultiSelectLabel: string = \"Multi-select dropdown\";\n @Prop() ariaMultiSelectLabelledBy: string = \"\";\n @Prop() ariaMultiSelectDescribedBy: string = \"\";\n @Prop() ariaSearchLabel: string = \"Search options\";\n @Prop() ariaClearLabel: string = \"Clear all selections\";\n @Prop() ariaToggleLabel: string = \"Toggle dropdown\";\n @Prop() ariaSelectAllLabel: string = \"Select all options\";\n @Prop() ariaExpandAllLabel: string = \"Expand all categories\";\n @Prop() ariaCollapseAllLabel: string = \"Collapse all categories\";\n\n @State() internalError: boolean = false;\n @State() internalErrorMessage: string;\n @State() persistentSelectedOptions: Option[] = [];\n @State() dropdownOpen = false;\n @State() dropdownFlipped: boolean;\n @State() searchTerm: string = '';\n\n @Event() ifxSelect: EventEmitter;\n @Event() ifxOpen: EventEmitter;\n\n @Element() el: HTMLElement;\n dropdownElement!: HTMLElement;\n\n @AttachInternals() internals: ElementInternals;\n private parseChildOptions(): Option[] {\n const options: Option[] = [];\n const childElements = Array.from(this.el.children);\n\n childElements.forEach((child, index) => {\n if (child.tagName === 'IFX-MULTISELECT-OPTION') {\n const option = this.parseOptionElement(child as HTMLElement, index);\n if (option) {\n options.push(option);\n }\n }\n });\n\n return options;\n }\n\n private parseOptionElement(element: HTMLElement, index: number): Option | null {\n const value = element.getAttribute('value') || `option-${index}`;\n const selected = element.hasAttribute('selected');\n const disabled = element.hasAttribute('disabled');\n const indeterminate = element.hasAttribute('indeterminate');\n\n const option: Option = {\n value,\n selected,\n disabled,\n indeterminate\n };\n\n const nestedOptions = Array.from(element.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION')\n .map((child, childIndex) => this.parseOptionElement(child as HTMLElement, childIndex))\n .filter(opt => opt !== null) as Option[];\n\n if (nestedOptions.length > 0) {\n option.children = nestedOptions;\n }\n\n return option;\n }\n\n loadInitialOptions() {\n this.internalError = this.error;\n this.internalErrorMessage = this.errorMessage;\n\n const allOptions = this.parseChildOptions();\n const initiallySelected = this.collectSelectedOptions(allOptions);\n const initiallySelectedNotInState = initiallySelected.filter(init =>\n !this.persistentSelectedOptions.some(opt => opt.value == init.value)\n );\n this.persistentSelectedOptions = [...this.persistentSelectedOptions, ...initiallySelectedNotInState];\n }\n\n private collectSelectedOptions(options: Option[]): Option[] {\n let selectedOptions: Option[] = [];\n\n for (const option of options) {\n if (option.selected) {\n if (option.children && option.children.length > 0) {\n selectedOptions = selectedOptions.concat(this.collectLeafOptions(option.children));\n } else {\n if (!selectedOptions.some(existingOption => existingOption.value === option.value)) {\n selectedOptions.push(option);\n }\n }\n } else {\n if (option.children && option.children.length > 0) {\n selectedOptions = selectedOptions.concat(this.collectSelectedOptions(option.children));\n }\n }\n }\n\n return selectedOptions;\n }\n\n private collectLeafOptions(children: Option[]): Option[] {\n let leafOptions = [];\n\n for (const child of children) {\n if (child.children && child.children.length > 0) {\n leafOptions = leafOptions.concat(this.collectLeafOptions(child.children));\n } else {\n leafOptions.push(child);\n }\n }\n return leafOptions;\n }\n\n handleSearch = debounce((targetElement: HTMLInputElement) => {\n const searchTerm = targetElement.value.toLowerCase();\n const isSearchActive = searchTerm !== '';\n\n this.searchTerm = searchTerm;\n\n const wrapper = this.el.shadowRoot.querySelector('.ifx-multiselect-wrapper');\n if (wrapper) {\n if (isSearchActive) {\n wrapper.classList.remove('active');\n } else {\n const searchField = this.el.shadowRoot.querySelector('ifx-search-field');\n const searchFieldHasFocus = searchField && searchField.matches(':focus-within');\n if (!searchFieldHasFocus) {\n wrapper.classList.add('active');\n }\n }\n }\n\n const optionsContainer = this.el.shadowRoot.querySelector('.ifx-multiselect-options');\n if (optionsContainer) {\n if (isSearchActive) {\n optionsContainer.classList.add('has-search-filter');\n } else {\n optionsContainer.classList.remove('has-search-filter');\n }\n }\n\n requestAnimationFrame(() => {\n const allOptions = this.el.querySelectorAll('ifx-multiselect-option');\n allOptions.forEach(option => {\n const searchEvent = new CustomEvent('ifx-search-filter', {\n detail: { searchTerm, isActive: isSearchActive }\n });\n option.dispatchEvent(searchEvent);\n });\n\n if (isSearchActive) {\n setTimeout(() => {\n const allOptions = this.el.querySelectorAll('ifx-multiselect-option');\n let visibleCount = 0;\n\n allOptions.forEach(option => {\n const style = window.getComputedStyle(option);\n const rect = option.getBoundingClientRect();\n\n if (style.display !== 'none' &&\n style.visibility !== 'hidden' &&\n style.opacity !== '0' &&\n rect.height > 0) {\n visibleCount++;\n }\n });\n\n const optionsContainer = this.el.shadowRoot.querySelector('.ifx-multiselect-options');\n if (optionsContainer) {\n if (visibleCount === 0) {\n optionsContainer.classList.add('show-no-results');\n } else {\n optionsContainer.classList.remove('show-no-results');\n }\n }\n }, 200);\n } else {\n const optionsContainer = this.el.shadowRoot.querySelector('.ifx-multiselect-options');\n if (optionsContainer) {\n optionsContainer.classList.remove('show-no-results');\n }\n }\n });\n }, 150);\n\n private handleSearchFocus(hasFocus: boolean) {\n const wrapper = this.el.shadowRoot.querySelector('.ifx-multiselect-wrapper');\n if (wrapper) {\n if (hasFocus || this.searchTerm !== '') {\n wrapper.classList.remove('active');\n } else {\n wrapper.classList.add('active');\n }\n }\n }\n\n positionDropdown() {\n const wrapperRect = this.el.shadowRoot.querySelector('.ifx-multiselect-wrapper')?.getBoundingClientRect();\n const spaceBelow = window.innerHeight - wrapperRect.bottom;\n const spaceAbove = wrapperRect.top;\n\n if ((spaceAbove > spaceBelow && wrapperRect.height > spaceBelow) || (wrapperRect.bottom > window.innerHeight)) {\n this.dropdownFlipped = true;\n } else {\n this.dropdownFlipped = false;\n }\n }\n\n private pendingSelectionUpdate = false;\n public updateSlotBasedSelections(emitEvent: boolean = false) {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n const selectedLeafOptions: Option[] = [];\n\n allOptionElements.forEach((optionEl: any) => {\n const instance = optionEl['__stencil_instance'];\n if (instance && instance.selected && !instance.hasChildren) {\n selectedLeafOptions.push({\n value: instance.value,\n selected: true,\n disabled: instance.disabled\n });\n }\n });\n\n this.persistentSelectedOptions = selectedLeafOptions;\n\n if (emitEvent) {\n this.ifxSelect.emit(this.persistentSelectedOptions);\n }\n }\n\n private updateInitialParentStates() {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n const optionsByDepth = Array.from(allOptionElements)\n .map(el => ({\n element: el,\n instance: (el as any)['__stencil_instance'],\n depth: parseInt(el.getAttribute('data-level') || '0')\n }))\n .filter(item => item.instance)\n .sort((a, b) => b.depth - a.depth);\n\n optionsByDepth.forEach(({ instance }) => {\n if (instance.hasChildren) {\n this.updateParentState(instance);\n }\n });\n }\n\n private updateParentState(parentInstance: any) {\n const directChildren = Array.from(parentInstance.el.children as HTMLCollection)\n .filter((child: Element) => child.tagName === 'IFX-MULTISELECT-OPTION')\n .map(child => (child as any)['__stencil_instance'])\n .filter(instance => instance !== null);\n\n const selectedCount = directChildren.filter(child => child.selected).length;\n const indeterminateCount = directChildren.filter(child => child.indeterminate).length;\n const totalCount = directChildren.length;\n\n if (selectedCount === totalCount && indeterminateCount === 0) {\n parentInstance.selected = true;\n parentInstance.indeterminate = false;\n } else if (selectedCount === 0 && indeterminateCount === 0) {\n parentInstance.selected = false;\n parentInstance.indeterminate = false;\n } else {\n parentInstance.selected = false;\n parentInstance.indeterminate = true;\n }\n }\n\n componentDidLoad() {\n setTimeout(() => {\n this.positionDropdown();\n }, 500);\n\n this.el.addEventListener('ifx-option-changed', () => {\n if (!this.pendingSelectionUpdate) {\n this.pendingSelectionUpdate = true;\n requestAnimationFrame(() => {\n this.updateSlotBasedSelections(true);\n setTimeout(() => {\n this.pendingSelectionUpdate = false;\n }, 0);\n });\n }\n });\n\n setTimeout(() => {\n this.updateSlotBasedSelections(false);\n this.updateInitialParentStates();\n }, 100);\n }\n\n componentWillLoad() {\n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-multiselect', framework)\n }\n this.loadInitialOptions();\n }\n\n @Watch('error')\n updateInternalError() {\n this.internalError = this.error;\n }\n\n @Watch('errorMessage')\n updateInternalErrorMessage() {\n this.internalErrorMessage = this.errorMessage;\n }\n\n @Watch('persistentSelectedOptions')\n onSelectionChange(newValue: Option[], _: Option[]) {\n const formData = new FormData();\n newValue.forEach(option => formData.append(this.name, option.value));\n this.internals.setFormValue(formData);\n }\n collapseAll() {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n allOptionElements.forEach((optionEl: any) => {\n const instance = optionEl['__stencil_instance'];\n if (instance && instance.hasChildren) {\n instance.isExpanded = false;\n }\n });\n }\n\n expandAll() {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n allOptionElements.forEach((optionEl: any) => {\n const instance = optionEl['__stencil_instance'];\n if (instance && instance.hasChildren) {\n instance.isExpanded = true;\n }\n });\n }\n\n selectAll() {\n this.resetSearch();\n\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n\n allOptionElements.forEach((optionEl: any) => {\n const instance = optionEl['__stencil_instance'];\n if (instance) {\n if (instance.hasChildren) {\n instance.isExpanded = true;\n } else {\n instance.selected = true;\n }\n }\n });\n\n setTimeout(() => {\n this.updateInitialParentStates();\n this.updateSlotBasedSelections(false);\n this.ifxSelect.emit(this.persistentSelectedOptions);\n }, 0);\n }\n\n @Method()\n async clearSelection() {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n allOptionElements.forEach((optionEl: any) => {\n const instance = optionEl['__stencil_instance'];\n if (instance) {\n instance.selected = false;\n instance.indeterminate = false;\n if (instance.hasChildren) {\n instance.isExpanded = false;\n }\n }\n });\n\n this.persistentSelectedOptions = [];\n\n setTimeout(() => {\n this.updateSlotBasedSelections(false);\n this.ifxSelect.emit(this.persistentSelectedOptions);\n }, 0);\n }\n\n handleDocumentClick = (event: Event) => {\n const path = event.composedPath();\n if (!path.includes(this.dropdownElement)) {\n this.dropdownOpen = false;\n document.removeEventListener('click', this.handleDocumentClick);\n this.resetSearch();\n this.ifxOpen.emit(this.dropdownOpen);\n }\n }\n\n toggleDropdown() {\n this.dropdownOpen = !this.dropdownOpen;\n setTimeout(() => {\n if (this.dropdownOpen) {\n document.addEventListener('click', this.handleDocumentClick);\n } else {\n this.resetSearch();\n }\n this.ifxOpen.emit(this.dropdownOpen);\n }, 0);\n }\n\n private resetSearch() {\n this.searchTerm = '';\n\n const searchField = this.el.shadowRoot.querySelector('ifx-search-field') as any;\n if (searchField) {\n searchField.value = '';\n }\n\n const optionsContainer = this.el.shadowRoot.querySelector('.ifx-multiselect-options');\n if (optionsContainer) {\n optionsContainer.classList.remove('has-search-filter');\n }\n\n const allOptions = this.el.querySelectorAll('ifx-multiselect-option');\n allOptions.forEach(option => {\n const searchEvent = new CustomEvent('ifx-search-filter', {\n detail: { searchTerm: '', isActive: false }\n });\n option.dispatchEvent(searchEvent);\n });\n }\n\n handleWrapperClick(event: MouseEvent) {\n this.positionDropdown();\n\n if (event.currentTarget === event.target) {\n this.toggleDropdown();\n }\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) return;\n\n // If dropdown is closed, only allow opening\n if (!this.dropdownOpen) {\n switch (event.code) {\n case 'Enter':\n case 'Space':\n case 'ArrowDown':\n event.preventDefault();\n this.toggleDropdown();\n break;\n }\n return;\n }\n\n // Dropdown is open - handle navigation and controls\n switch (event.code) {\n case 'Escape':\n event.preventDefault();\n this.toggleDropdown();\n break;\n case 'Enter':\n case 'Space':\n // Don't close dropdown when pressing space/enter in controls area\n const target = event.target as HTMLElement;\n if (!target.closest('.ifx-multiselect-dropdown-functions')) {\n event.preventDefault();\n this.toggleDropdown();\n }\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n // Focus first/last option for navigation\n event.preventDefault();\n this.focusFirstOption();\n break;\n }\n }\n\n private focusFirstOption() {\n const firstOption = this.el.querySelector('ifx-multiselect-option:not(.search-hidden)');\n if (firstOption) {\n const labelElement = firstOption.shadowRoot?.querySelector('.option-label') as HTMLElement;\n labelElement?.focus();\n }\n }\n\n private renderSelectAll() {\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n const leafOptions = Array.from(allOptionElements).filter((el: any) => !el.hasChildren);\n const selectedLeafOptions = Array.from(allOptionElements).filter((el: any) => !el.hasChildren && el.selected);\n\n const allSelected = leafOptions.length > 0 && selectedLeafOptions.length === leafOptions.length;\n\n const toggleSelectAll = (event?: Event) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (allSelected) {\n this.clearSelection();\n } else {\n this.selectAll();\n }\n };\n\n return (\n <div class=\"select-all-wrapper\">\n <ifx-checkbox\n id='selectAll'\n checked={allSelected}\n size=\"s\"\n aria-label={this.ariaSelectAllLabel}\n onClick={toggleSelectAll}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n toggleSelectAll(e);\n }\n }}\n >\n {this.selectAllLabel}\n </ifx-checkbox>\n </div>\n );\n }\n\n private renderNoResultsMessage() {\n return (\n <div class=\"ifx-multiselect-no-results\">\n <div class=\"no-results-content\">\n <span class=\"no-results-text\">{this.noResultsMessage}</span>\n </div>\n </div>\n );\n }\n\n render() {\n const selectedOptionsLabels = this.persistentSelectedOptions\n .map((option) => {\n const optionElement = this.el.querySelector(`ifx-multiselect-option[value=\"${option.value}\"]`);\n return optionElement?.textContent?.trim() || option.value;\n })\n .join(', ');\n\n const hasSelections = this.persistentSelectedOptions.length > 0;\n\n let isFlatMultiselect = false;\n const allOptionElements = this.el.querySelectorAll('ifx-multiselect-option');\n if (allOptionElements.length > 0) {\n isFlatMultiselect = Array.from(allOptionElements).every(option => option.children.length === 0);\n }\n\n return (\n <div class={`ifx-multiselect-container`} ref={el => this.dropdownElement = el as HTMLElement}>\n {\n this.label ?\n <div class=\"ifx-label-wrapper\">\n <span>{this.label}</span>\n </div> : null\n }\n <div class={`ifx-multiselect-wrapper\n ${this.dropdownOpen ? 'active' : ''}\n ${this.dropdownFlipped ? 'is-flipped' : ''}\n ${this.internalError ? 'error' : \"\"}\n ${this.disabled ? 'disabled' : \"\"}`}\n role=\"combobox\"\n aria-label={this.ariaMultiSelectLabel}\n aria-labelledby={this.ariaMultiSelectLabelledBy || undefined}\n aria-describedby={this.ariaMultiSelectDescribedBy || undefined}\n aria-expanded={this.dropdownOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={this.disabled}\n tabindex=\"0\"\n onClick={this.disabled ? undefined : (event) => this.handleWrapperClick(event)}\n onKeyDown={this.disabled ? undefined : (event) => this.handleKeyDown(event)} >\n <div class={`ifx-multiselect-input\n ${hasSelections ? '' : 'placeholder'}\n `}\n onClick={this.disabled ? undefined : () => this.toggleDropdown()}\n >\n {hasSelections ? selectedOptionsLabels : this.placeholder}\n </div>\n {this.dropdownOpen && (\n <div class=\"ifx-multiselect-dropdown-menu\">\n\n {(this.showSearch || this.showSelectAll || (this.showExpandCollapse && !isFlatMultiselect)) && (\n <div class=\"ifx-multiselect-dropdown-functions\" onClick={(e) => e.stopPropagation()}>\n {this.showSearch && (\n <div class=\"ifx-multiselect-dropdown-search\">\n <ifx-search-field\n class=\"search-input\"\n placeholder={this.searchPlaceholder}\n size=\"s\"\n show-delete-icon=\"true\"\n aria-label={this.ariaSearchLabel}\n onKeyDown={(e) => { e.stopPropagation() }}\n onIfxInput={(event) => this.handleSearch(event.target)}\n onFocus={() => this.handleSearchFocus(true)}\n onBlur={() => this.handleSearchFocus(false)}\n ></ifx-search-field>\n </div>\n )}\n\n <div class=\"ifx-multiselect-dropdown-controls\">\n {this.showSelectAll && this.renderSelectAll()}\n {this.showExpandCollapse && !isFlatMultiselect && (\n <div class=\"expand-collapse-controls\">\n <span\n class=\"control-item\"\n role=\"button\"\n tabIndex={0}\n aria-label={this.ariaExpandAllLabel}\n onClick={(e) => { e.stopPropagation(); this.expandAll(); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.expandAll();\n }\n }}\n >\n {this.expandLabel}\n </span>\n <span\n class=\"control-item\"\n role=\"button\"\n tabIndex={0}\n aria-label={this.ariaCollapseAllLabel}\n onClick={(e) => { e.stopPropagation(); this.collapseAll(); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.collapseAll();\n }\n }}\n >\n {this.collapseLabel}\n </span>\n </div>\n )}\n </div>\n </div>\n )}\n\n <div class=\"ifx-multiselect-options\" role=\"listbox\" aria-multiselectable=\"true\">\n <slot />\n {this.searchTerm && this.showNoResultsMessage && this.renderNoResultsMessage()}\n </div>\n </div>\n )}\n <div class='ifx-multiselect-icon-container'>\n\n {/* Clear Button - will show only if there's a selection */}\n {this.persistentSelectedOptions.length > 0 && (\n <div class={`ifx-clear-button ${!this.showClearButton ? 'hide' : ''}`} onClick={this.disabled ? undefined : () => this.clearSelection()}>\n <ifx-icon icon=\"cRemove16\"></ifx-icon>\n </div>\n )}\n <div class=\"icon-wrapper-up\" onClick={this.disabled ? undefined : () => this.toggleDropdown()}>\n <ifx-icon\n key='icon-up'\n icon='chevron-up-16'></ifx-icon>\n </div>\n <div class=\"icon-wrapper-down\" onClick={this.disabled ? undefined : () => this.toggleDropdown()}>\n <ifx-icon\n key='icon-down'\n icon='chevron-down-16'></ifx-icon>\n </div>\n </div>\n\n </div>\n {\n this.internalError ?\n <div class=\"ifx-error-message-wrapper\">\n <span>{this.internalErrorMessage}</span>\n </div> : null\n }\n </div>\n );\n }\n}\n","@use \"~@infineon/design-system-tokens/dist/tokens\";\n\n:host {\n display: block;\n width: 100%;\n}\n\n.option {\n display: flex;\n flex-direction: column;\n position: relative;\n cursor: pointer;\n list-style: none;\n\n &.option--expanded {\n position: relative;\n }\n\n &.option--has-children {\n position: relative;\n\n .option-item > .chevron-wrapper {\n display: flex;\n }\n }\n\n &--disabled {\n cursor: not-allowed;\n pointer-events: none;\n color: tokens.$ifxColorEngineering300;\n }\n\n &--selected {\n // Additional styles for selected state if needed\n // .option-item {\n // background: red;\n // }\n }\n\n &.search-hidden {\n display: none !important;\n }\n\n &.search-match {\n .option-item {\n .option-label {\n .search-highlight {\n font-weight: bold;\n // color: tokens.$ifxColorOcean400;\n }\n }\n }\n }\n}\n\n.option-item {\n display: flex;\n flex-direction: row;\n align-items: center;\n white-space: nowrap;\n min-height: tokens.$ifxSize250;\n padding: tokens.$ifxSize50 tokens.$ifxSpace200;\n background-color: tokens.$ifxColorBaseWhite;\n transition: background-color 0.2s ease-in-out;\n\n &:hover {\n background-color: tokens.$ifxColorEngineering100;\n }\n\n .option--disabled & {\n &:hover {\n background-color: transparent;\n }\n }\n}\n\n.option-children {\n display: block;\n}\n\n.chevron-wrapper {\n display: none;\n align-items: center;\n justify-content: center;\n margin-right: tokens.$ifxSpace100;\n width: tokens.$ifxSize250;\n height: tokens.$ifxSize250;\n flex-shrink: 0;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n border-radius: tokens.$ifxBorderRadius12;\n }\n\n .option--has-children & {\n display: flex;\n }\n\n .chevron {\n transition: transform 0.2s ease-in-out;\n color: tokens.$ifxColorEngineering600;\n\n &.chevron--expanded {\n transform: rotate(90deg);\n }\n\n &.chevron--collapsed {\n transform: rotate(0deg);\n }\n }\n}\n\n.checkbox-wrapper {\n display: flex;\n align-items: center;\n margin-right: tokens.$ifxSpace100;\n flex-shrink: 0;\n}\n\n.option-label {\n flex-grow: 1;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: tokens.$ifxSpace25 0;\n font-size: tokens.$ifxFontSizeS;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n border-radius: tokens.$ifxBorderRadius12;\n }\n\n .option--disabled & {\n cursor: not-allowed;\n color: tokens.$ifxColorEngineering300;\n }\n}\n","import { Component, Prop, Element, h, Host, State, Listen } from '@stencil/core';\n\n@Component({\n tag: 'ifx-multiselect-option',\n styleUrl: 'multiselect-option.scss',\n shadow: true,\n})\nexport class MultiselectOption {\n @Element() el: HTMLElement;\n\n @Prop() value: string;\n @Prop({ reflect: true, mutable: true }) selected: boolean = false;\n @Prop({ reflect: true, mutable: true }) disabled: boolean = false;\n @Prop({ reflect: true, mutable: true }) indeterminate: boolean = false;\n\n @State() private isExpanded: boolean = false;\n @State() private hasChildren: boolean = false;\n @State() private depth: number = 0;\n @State() private searchTerm: string = '';\n @State() private isSearchActive: boolean = false;\n @State() private isSearchDisabled: boolean = false;\n\n componentWillLoad() {\n this.hasChildren = this.el.children.length > 0;\n this.depth = this.calculateDepth();\n\n this.el.setAttribute('data-level', this.depth.toString());\n\n if (this.hasChildren) {\n const hasSelectedChildren = this.hasAnySelectedChildren();\n if (hasSelectedChildren) {\n this.isExpanded = true;\n }\n }\n }\n\n componentDidLoad() {\n (this.el as any)['__stencil_instance'] = this;\n this.notifyMultiselect();\n this.el.addEventListener('ifx-search-filter', this.handleSearchFilter);\n }\n\n disconnectedCallback() {\n this.el.removeEventListener('ifx-search-filter', this.handleSearchFilter);\n }\n\n private handleSearchFilter = (event: CustomEvent) => {\n const { searchTerm, isActive } = event.detail;\n this.searchTerm = searchTerm.toLowerCase();\n this.isSearchActive = isActive;\n\n requestAnimationFrame(() => {\n this.updateSearchClasses();\n });\n }\n\n private updateSearchClasses() {\n const optionDiv = this.el.shadowRoot?.querySelector('.option');\n if (!optionDiv) return;\n\n if (!this.isSearchActive) {\n optionDiv.classList.remove('search-hidden', 'search-parent', 'search-match');\n this.removeHighlighting();\n this.isSearchDisabled = false;\n return;\n }\n\n const textContent = this.getTextContent().toLowerCase();\n const matchesSearch = textContent.includes(this.searchTerm);\n const hasMatchingParent = this.hasMatchingParent();\n\n requestAnimationFrame(() => {\n const hasMatchingChildren = this.hasMatchingChildren();\n\n optionDiv.classList.remove('search-hidden', 'search-parent', 'search-match');\n this.isSearchDisabled = false;\n\n if (matchesSearch && !this.hasChildren) {\n optionDiv.classList.add('search-match');\n this.highlightSearchTerm();\n } else if (matchesSearch && this.hasChildren) {\n optionDiv.classList.add('search-match');\n this.highlightSearchTerm();\n this.isExpanded = true;\n } else if (!matchesSearch && this.hasChildren && hasMatchingChildren) {\n optionDiv.classList.add('search-parent');\n this.removeHighlighting();\n this.isExpanded = true;\n this.isSearchDisabled = true;\n } else if (hasMatchingParent) {\n optionDiv.classList.add('search-match');\n this.removeHighlighting();\n } else {\n optionDiv.classList.add('search-hidden');\n this.removeHighlighting();\n }\n });\n }\n\n private highlightSearchTerm() {\n if (!this.searchTerm) return;\n\n const labelElement = this.el.shadowRoot?.querySelector('.option-label');\n if (!labelElement) return;\n\n const slotElement = labelElement.querySelector('slot');\n if (!slotElement) return;\n\n this.removeHighlighting();\n\n const originalText = this.getTextContent();\n const searchTermLower = this.searchTerm.toLowerCase();\n const originalTextLower = originalText.toLowerCase();\n\n if (!originalTextLower.includes(searchTermLower)) return;\n\n const searchIndex = originalTextLower.indexOf(searchTermLower);\n\n if (searchIndex === -1) return;\n\n const beforeMatch = originalText.substring(0, searchIndex);\n const matchText = originalText.substring(searchIndex, searchIndex + searchTermLower.length);\n const afterMatch = originalText.substring(searchIndex + searchTermLower.length);\n\n const highlightedContent = document.createElement('span');\n highlightedContent.className = 'highlighted-text';\n\n if (beforeMatch) {\n highlightedContent.appendChild(document.createTextNode(beforeMatch));\n }\n\n const boldElement = document.createElement('strong');\n boldElement.className = 'search-highlight';\n boldElement.textContent = matchText;\n highlightedContent.appendChild(boldElement);\n\n if (afterMatch) {\n highlightedContent.appendChild(document.createTextNode(afterMatch));\n }\n\n labelElement.setAttribute('data-original-content', 'true');\n slotElement.style.display = 'none';\n labelElement.appendChild(highlightedContent);\n }\n\n private removeHighlighting() {\n const labelElement = this.el.shadowRoot?.querySelector('.option-label');\n if (!labelElement) return;\n\n const slotElement = labelElement.querySelector('slot');\n const highlightedElement = labelElement.querySelector('.highlighted-text');\n\n if (highlightedElement) {\n labelElement.removeChild(highlightedElement);\n }\n\n if (slotElement) {\n slotElement.style.display = '';\n }\n\n labelElement.removeAttribute('data-original-content');\n }\n\n private getTextContent(): string {\n let text = '';\n Array.from(this.el.childNodes).forEach(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent?.trim() || '';\n }\n });\n return text || this.value || '';\n }\n\n private hasMatchingChildren(): boolean {\n if (!this.hasChildren) return false;\n\n const childOptions = Array.from(this.el.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION') as HTMLElement[];\n\n return childOptions.some(child => {\n const childInstance = (child as any)['__stencil_instance'];\n if (!childInstance) return false;\n\n const childText = childInstance.getTextContent().toLowerCase();\n const childMatches = childText.includes(this.searchTerm);\n const grandChildrenMatch = childInstance.hasMatchingChildren();\n\n return childMatches || grandChildrenMatch;\n });\n }\n\n private hasMatchingParent(): boolean {\n let parent = this.el.parentElement;\n while (parent && parent.tagName === 'IFX-MULTISELECT-OPTION') {\n const parentInstance = (parent as any)['__stencil_instance'];\n if (parentInstance) {\n const parentText = parentInstance.getTextContent().toLowerCase();\n if (parentText.includes(this.searchTerm)) {\n return true;\n }\n }\n parent = parent.parentElement;\n }\n return false;\n }\n\n private calculateDepth(): number {\n let depth = 0;\n let parent = this.el.parentElement;\n while (parent && parent.tagName !== 'IFX-MULTISELECT') {\n if (parent.tagName === 'IFX-MULTISELECT-OPTION') {\n depth++;\n }\n parent = parent.parentElement;\n }\n return depth;\n }\n\n @Listen('click')\n handleClick(event: Event) {\n if (this.disabled || (this.isSearchActive && this.isSearchDisabled)) return;\n\n event.stopPropagation();\n\n if (event.type === 'click' && (event.target as HTMLElement).closest('.chevron-wrapper')) {\n this.toggleExpansion();\n return;\n }\n\n let newSelectedState: boolean;\n\n if (this.indeterminate) {\n newSelectedState = true;\n } else {\n newSelectedState = !this.selected;\n }\n\n this.selected = newSelectedState;\n this.indeterminate = false;\n\n if (this.hasChildren) {\n this.isExpanded = newSelectedState;\n\n requestAnimationFrame(() => {\n this.selectAllChildren(newSelectedState);\n this.expandAllChildren(newSelectedState);\n });\n }\n\n this.updateParentStates();\n this.notifyMultiselect();\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled || (this.isSearchActive && this.isSearchDisabled)) return;\n\n const target = event.target as HTMLElement;\n\n if (target.closest('.chevron-wrapper') || target.closest('.checkbox-wrapper')) {\n return;\n }\n\n if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown') {\n event.stopPropagation();\n }\n\n if (event.key === 'ArrowRight' && this.hasChildren) {\n this.isExpanded = true;\n }\n\n if (event.key === 'ArrowLeft' && this.hasChildren) {\n this.isExpanded = false;\n }\n }\n\n private notifyMultiselect() {\n const updateEvent = new CustomEvent('ifx-option-changed', {\n bubbles: true,\n detail: {\n value: this.value,\n selected: this.selected,\n indeterminate: this.indeterminate\n }\n });\n this.el.dispatchEvent(updateEvent);\n }\n\n private selectAllChildren(selected: boolean) {\n const directChildren = Array.from(this.el.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION') as any[];\n\n directChildren.forEach((child: any) => {\n const childInstance = child['__stencil_instance'];\n if (childInstance) {\n childInstance.selected = selected;\n childInstance.indeterminate = false;\n\n if (childInstance.hasChildren) {\n childInstance.isExpanded = selected;\n childInstance.selectAllChildren(selected);\n }\n childInstance.notifyMultiselect?.();\n }\n });\n }\n\n private expandAllChildren(expanded: boolean) {\n const directChildren = Array.from(this.el.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION') as any[];\n\n directChildren.forEach((child: any) => {\n const childInstance = child['__stencil_instance'];\n if (childInstance && childInstance.hasChildren) {\n childInstance.isExpanded = expanded;\n childInstance.expandAllChildren(expanded);\n }\n });\n }\n\n private updateParentStates() {\n let parent = this.el.parentElement;\n while (parent && parent.tagName === 'IFX-MULTISELECT-OPTION') {\n const parentInstance = (parent as any)['__stencil_instance'];\n if (!parentInstance) {\n parent = parent.parentElement;\n continue;\n }\n\n const siblings = Array.from(parent.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION')\n .map(child => (child as any)['__stencil_instance'])\n .filter(instance => instance !== null);\n\n const selectedCount = siblings.filter(sibling => sibling.selected).length;\n const indeterminateCount = siblings.filter(sibling => sibling.indeterminate).length;\n const totalCount = siblings.length;\n\n if (selectedCount === totalCount && indeterminateCount === 0) {\n parentInstance.selected = true;\n parentInstance.indeterminate = false;\n } else if (selectedCount === 0 && indeterminateCount === 0) {\n parentInstance.selected = false;\n parentInstance.indeterminate = false;\n } else {\n parentInstance.selected = false;\n parentInstance.indeterminate = true;\n }\n\n parentInstance.notifyMultiselect?.();\n parent = parent.parentElement;\n }\n }\n\n private toggleExpansion() {\n this.isExpanded = !this.isExpanded;\n }\n\n private handleCheckboxClick = (event: Event) => {\n if (this.disabled || (this.isSearchActive && this.isSearchDisabled)) return;\n\n event.stopPropagation();\n\n let newSelectedState: boolean;\n\n if (this.indeterminate) {\n newSelectedState = true;\n } else {\n newSelectedState = !this.selected;\n }\n\n this.selected = newSelectedState;\n this.indeterminate = false;\n\n if (this.hasChildren) {\n this.isExpanded = newSelectedState;\n\n requestAnimationFrame(() => {\n this.selectAllChildren(newSelectedState);\n this.expandAllChildren(newSelectedState);\n });\n }\n\n this.updateParentStates();\n this.notifyMultiselect();\n }\n\n private handleHeaderClick = (event: Event) => {\n event.stopPropagation();\n if (!this.disabled && !(this.isSearchActive && this.isSearchDisabled)) {\n this.handleClick(event);\n }\n }\n\n private hasAnySelectedChildren(): boolean {\n const childOptions = Array.from(this.el.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION') as HTMLElement[];\n\n return childOptions.some(child => {\n const hasSelected = child.hasAttribute('selected');\n const hasSelectedDescendants = this.checkForSelectedDescendants(child);\n\n return hasSelected || hasSelectedDescendants;\n });\n }\n\n private checkForSelectedDescendants(element: HTMLElement): boolean {\n const nestedOptions = Array.from(element.children)\n .filter(child => child.tagName === 'IFX-MULTISELECT-OPTION') as HTMLElement[];\n\n return nestedOptions.some(nestedChild => {\n const isSelected = nestedChild.hasAttribute('selected');\n const hasSelectedNested = this.checkForSelectedDescendants(nestedChild);\n\n return isSelected || hasSelectedNested;\n });\n }\n\n render() {\n let isFlatMultiselect = false;\n const parentMultiselect = this.el.closest('ifx-multiselect');\n if (parentMultiselect) {\n const allOptions = Array.from(parentMultiselect.querySelectorAll('ifx-multiselect-option'));\n isFlatMultiselect = allOptions.every(option => option.children.length === 0);\n }\n\n const basePadding = this.depth * 28 + 16;\n const additionalPadding = this.hasChildren ? 0 : 28;\n let totalPadding = basePadding + additionalPadding;\n\n const optionItemStyle = isFlatMultiselect ? undefined : { paddingLeft: `${totalPadding}px` };\n\n return (\n <Host>\n <div\n class={{\n 'option': true,\n 'option--has-children': this.hasChildren,\n 'option--expanded': this.isExpanded,\n 'option--disabled': this.disabled,\n 'option--selected': this.selected,\n }}\n role=\"option\"\n aria-expanded={this.hasChildren ? (this.isExpanded ? 'true' : 'false') : undefined}\n aria-selected={this.selected ? 'true' : 'false'}\n aria-disabled={this.disabled ? 'true' : 'false'}\n data-level={this.depth}\n data-value={this.value}\n >\n <div\n class=\"option-item\"\n style={optionItemStyle}\n >\n <div\n class=\"chevron-wrapper\"\n tabIndex={this.hasChildren ? 0 : -1}\n role={this.hasChildren ? \"button\" : undefined}\n aria-label={this.hasChildren ? (this.isExpanded ? \"Collapse\" : \"Expand\") : undefined}\n onClick={(e) => { e.stopPropagation(); this.toggleExpansion(); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.toggleExpansion();\n }\n }}\n >\n {this.hasChildren && (\n <ifx-icon\n class={`chevron ${this.isExpanded ? 'chevron--expanded' : 'chevron--collapsed'}`}\n icon=\"chevron-right-16\"\n />\n )}\n </div>\n\n <div class=\"checkbox-wrapper\" onClick={(e) => e.stopPropagation()}>\n <ifx-checkbox\n size='s'\n checked={(this.isSearchActive && this.isSearchDisabled) ? false : (this.indeterminate ? false : this.selected)}\n indeterminate={(this.isSearchActive && this.isSearchDisabled) ? false : this.indeterminate}\n onClick={this.handleCheckboxClick}\n disabled={this.disabled || (this.isSearchActive && this.isSearchDisabled)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n this.handleCheckboxClick(e);\n }\n }}\n />\n </div>\n\n <div\n class=\"option-label\"\n onClick={this.handleHeaderClick}\n tabIndex={-1}\n >\n <slot/>\n </div>\n </div>\n\n {this.isExpanded && <div class=\"option-children\"><slot name=\"children\"/></div>}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
function n(){(function(n,t,o,e,i){if(typeof window.btntConfig!=="object"){window.btntConfig={domain:"https://ssgtm.infineon.com",withCookies:true,maxBatchSize:10}}if(window["btnt"])return;window["btnt"]=function(n){if(typeof n!=="object"){n={}}if(typeof window.btntQueue!=="object"){window.btntQueue=[]}window.btntQueue.push(n)};e=n.createElement(t);i=n.getElementsByTagName(t)[0];e.async=1;e.src=window.btntConfig.domain+"/btnt.js";i.parentNode.insertBefore(e,i)})(document,"script")}function t(t,o){if(!window.btnt)n();window.btnt({event_name:"component_initialized",component_name:t,environment:o})}let o=null;const e=()=>{if(o)return o;const n=window;const t=document;if(n.React){o="React";return o}const e=t.querySelector("[data-reactroot], [data-reactid]");if(e){o="React";return o}const i=Array.from(t.querySelectorAll("body > div"));const r=i.some((n=>{const t=Object.keys(n);return t.some((n=>n.startsWith("__reactContainer")))}));if(r){o="React";return o}if(n.ng||n.getAllAngularRootElements){o="Angular";return o}if(t.querySelector("[ng-version], [ng-app]")){o="Angular";return o}if(n.Vue||n.__VUE__){o="Vue";return o}if(t.querySelector("[data-v-app]")){o="Vue";return o}o="Vanilla";return o};export{e as d,t};
|
2
|
+
//# sourceMappingURL=p-e8504e6b.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["initializeTracking","t","r","_kk","n","pp","window","btntConfig","domain","withCookies","maxBatchSize","z","btntQueue","push","createElement","getElementsByTagName","async","src","parentNode","insertBefore","document","trackComponent","componentName","environment","btnt","event_name","component_name","frameworkCache","detectFramework","win","doc","React","reactRoots","querySelector","rootContainers","Array","from","querySelectorAll","hasReactRoot","some","container","keys","Object","key","startsWith","ng","getAllAngularRootElements","Vue","__VUE__"],"sources":["src/global/utils/tracking.ts","src/global/utils/framework-detection.ts"],"sourcesContent":["declare global {\n interface Window {\n btntConfig?: any;\n btntQueue?: any[];\n btnt?: (data: object) => void; \n }\n}\n\nfunction initializeTracking() { \n (function (t, r, _kk, n, pp) {\n if (typeof window.btntConfig !== \"object\") {\n window.btntConfig = {\n domain: \"https://ssgtm.infineon.com\",\n withCookies: true,\n maxBatchSize: 10\n };\n }\n\n if (window[\"btnt\"]) return;\n\n window[\"btnt\"] = function (z) {\n if (typeof z !== \"object\") {\n z = {};\n }\n if (typeof window.btntQueue !== \"object\") {\n window.btntQueue = [];\n }\n window.btntQueue.push(z);\n };\n\n n = t.createElement(r);\n pp = t.getElementsByTagName(r)[0];\n n.async = 1;\n n.src = window.btntConfig.domain + \"/btnt.js\";\n pp.parentNode.insertBefore(n, pp);\n \n })(document, \"script\", );\n }\n\n export function trackComponent(componentName: string, environment: string) {\n if (!window.btnt) initializeTracking();\n \n window.btnt({\n event_name: \"component_initialized\",\n component_name: componentName,\n environment: environment\n });\n } \n\n export default trackComponent","let frameworkCache: string | null = null;\n\nexport const detectFramework = (): string => {\n if (frameworkCache) return frameworkCache;\n \n const win = window as any;\n const doc = document;\n\n // Check for React\n if (win.React) {\n frameworkCache = 'React';\n return frameworkCache;\n }\n \n // Check for React 16+ roots\n const reactRoots = doc.querySelector('[data-reactroot], [data-reactid]');\n if (reactRoots) {\n frameworkCache = 'React';\n return frameworkCache;\n }\n \n // Check for React 18+ root containers\n const rootContainers = Array.from(doc.querySelectorAll('body > div'));\n const hasReactRoot = rootContainers.some(container => {\n const keys = Object.keys(container);\n return keys.some(key => key.startsWith('__reactContainer'));\n });\n \n if (hasReactRoot) {\n frameworkCache = 'React';\n return frameworkCache;\n }\n\n // Check for Angular\n if (win.ng || win.getAllAngularRootElements) {\n frameworkCache = 'Angular';\n return frameworkCache;\n }\n \n if (doc.querySelector('[ng-version], [ng-app]')) {\n frameworkCache = 'Angular';\n return frameworkCache;\n }\n \n // Check for Vue\n if (win.Vue || win.__VUE__) {\n frameworkCache = 'Vue';\n return frameworkCache;\n }\n \n if (doc.querySelector('[data-v-app]')) {\n frameworkCache = 'Vue';\n return frameworkCache;\n }\n\n // Default to Vanilla\n frameworkCache = 'Vanilla';\n return frameworkCache;\n};"],"mappings":"AAQA,SAASA,KACL,SAAWC,EAAGC,EAAGC,EAAKC,EAAGC,GACvB,UAAWC,OAAOC,aAAe,SAAU,CACzCD,OAAOC,WAAa,CACpBC,OAAQ,6BACRC,YAAa,KACbC,aAAc,G,CAIhB,GAAIJ,OAAO,QAAS,OAEpBA,OAAO,QAAU,SAAUK,GACzB,UAAWA,IAAM,SAAU,CACzBA,EAAI,E,CAEN,UAAWL,OAAOM,YAAc,SAAU,CACxCN,OAAOM,UAAY,E,CAErBN,OAAOM,UAAUC,KAAKF,E,EAGxBP,EAAIH,EAAEa,cAAcZ,GACpBG,EAAKJ,EAAEc,qBAAqBb,GAAG,GAC/BE,EAAEY,MAAQ,EACVZ,EAAEa,IAAMX,OAAOC,WAAWC,OAAS,WACnCH,EAAGa,WAAWC,aAAaf,EAAGC,EAE/B,EA3BD,CA2BGe,SAAU,SACf,C,SAEgBC,EAAeC,EAAuBC,GACtD,IAAKjB,OAAOkB,KAAMxB,IAElBM,OAAOkB,KAAK,CACVC,WAAY,wBACZC,eAAgBJ,EAChBC,YAAaA,GAEhB,CC/CD,IAAII,EAAgC,K,MAEvBC,EAAkB,KAC7B,GAAID,EAAgB,OAAOA,EAE3B,MAAME,EAAMvB,OACZ,MAAMwB,EAAMV,SAGZ,GAAIS,EAAIE,MAAO,CACbJ,EAAiB,QACjB,OAAOA,C,CAIT,MAAMK,EAAaF,EAAIG,cAAc,oCACrC,GAAID,EAAY,CACdL,EAAiB,QACjB,OAAOA,C,CAIT,MAAMO,EAAiBC,MAAMC,KAAKN,EAAIO,iBAAiB,eACvD,MAAMC,EAAeJ,EAAeK,MAAKC,IACvC,MAAMC,EAAOC,OAAOD,KAAKD,GACzB,OAAOC,EAAKF,MAAKI,GAAOA,EAAIC,WAAW,qBAAoB,IAG7D,GAAIN,EAAc,CAChBX,EAAiB,QACjB,OAAOA,C,CAIT,GAAIE,EAAIgB,IAAMhB,EAAIiB,0BAA2B,CAC3CnB,EAAiB,UACjB,OAAOA,C,CAGT,GAAIG,EAAIG,cAAc,0BAA2B,CAC/CN,EAAiB,UACjB,OAAOA,C,CAIT,GAAIE,EAAIkB,KAAOlB,EAAImB,QAAS,CAC1BrB,EAAiB,MACjB,OAAOA,C,CAGT,GAAIG,EAAIG,cAAc,gBAAiB,CACrCN,EAAiB,MACjB,OAAOA,C,CAITA,EAAiB,UACjB,OAAOA,CAAc,S","ignoreList":[]}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{r as e,c as t,h as o,a as n,g as i}from"./p-b7a462e5.js";import{d as a,t as s}from"./p-e8504e6b.js";import{i as r}from"./p-1ecafb97.js";function d(e,t,o,n=20,i=0){const a=[];if(i>=n){return a}const s=e=>{const a=e.assignedNodes().filter((e=>e.nodeType===1));if(a.length>0){const e=a[0].parentElement;return d(e,t,o,n,i+1)}return[]};const r=Array.from(e.children||[]);for(const e of r){if(t(e)){continue}if(o(e)){a.push(e)}if(e.shadowRoot!=null){a.push(...d(e.shadowRoot,t,o,n,i+1))}else if(e.tagName==="SLOT"){a.push(...s(e))}else{a.push(...d(e,t,o,n,i+1))}}return a}function c(e){return e.hasAttribute("hidden")||e.hasAttribute("aria-hidden")&&e.getAttribute("aria-hidden")!=="false"||e.style.display===`none`||e.style.opacity===`0`||e.style.visibility===`hidden`||e.style.visibility===`collapse`}function l(e){return e.hasAttribute("disabled")||e.hasAttribute("aria-disabled")&&e.getAttribute("aria-disabled")!=="false"}function f(e){if(e.getAttribute("tabindex")==="-1"||c(e)||l(e)){return false}return e.hasAttribute("tabindex")||(e instanceof HTMLAnchorElement||e instanceof HTMLAreaElement)&&e.hasAttribute("href")||e instanceof HTMLButtonElement||e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement||e instanceof HTMLIFrameElement}function h(e,t,o){const n=e.animate(t,Object.assign(Object.assign({},o),{fill:"both"}));n.addEventListener("finish",(()=>{n.commitStyles();n.cancel()}));return n}const b={easing:"cubic-bezier(0.390, 0.575, 0.565, 1.000)"};const m={fadeIn:[Object.assign(Object.assign({offset:0},b),{opacity:0}),Object.assign(Object.assign({offset:1},b),{opacity:1})],fadeOut:[Object.assign(Object.assign({offset:0},b),{opacity:1}),Object.assign(Object.assign({offset:1},b),{opacity:0})]};const u=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:block}.modal-container{display:none;justify-content:center;align-items:center;position:fixed;top:0;left:0;width:100%;height:100%;z-index:1060;overflow-y:auto;font-family:var(--ifx-font-family)}.modal-container.open{display:flex}.modal-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#1D1D1D;opacity:0.5;z-index:0}.modal-content-container{position:absolute;display:flex;justify-content:center;width:90%;min-height:218px;background-color:#fff;border-radius:0;box-shadow:0 2px 10px rgba(0, 0, 0, 0.1);box-sizing:border-box;align-items:stretch}.modal-content-container.no-overflow{overflow:hidden}.modal-content-container.no-overflow .modal-body{overflow-y:auto}@media screen and (min-width: 768px){.modal-content-container{width:540px;min-height:132px}.modal-content-container.m,.modal-content-container.l,.modal-content-container.s{width:90%}}@media screen and (min-width: 1024px){.modal-content-container.s{width:47vw}.modal-content-container.m{width:63vw}.modal-content-container.l{width:80%}}.modal-content{display:flex;flex-direction:column;width:100%;max-height:90vh}.modal-icon-container{display:flex;align-items:center;justify-content:center;width:32px;background-color:#0A8276;align-self:stretch}.modal-icon-container.danger{background-color:#CD002F}.modal-icon-container ifx-icon{color:#FFFFFF}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:24px;min-height:76px;max-height:105px;box-sizing:border-box;border-radius:1px 1px 0px 0px;border-bottom:1px solid #EEEDED}.modal-caption{max-height:56px;display:-webkit-box;overflow:hidden;white-space:pre-wrap;word-wrap:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical}.modal-header h2{margin:0;font-weight:600;font-size:1.25rem;line-height:28px}.modal-header button{background:none;border:none;font-size:1.5em;padding:0;cursor:pointer}.modal-close-button{align-self:flex-start;margin-right:-8px}.modal-body{padding:16px 24px;min-height:56px;box-sizing:border-box;flex:1}.modal-footer.buttons-present ::slotted(*){display:flex;justify-content:flex-end;gap:16px;padding:16px 24px 32px 16px}.modal-border{display:flex;align-items:center;justify-content:center;width:100%;font-size:1.5em;flex-grow:1}.modal-border.primary{background-color:#0A8276}.modal-border.secondary{background-color:#575352}.modal-border.danger{background-color:#CD002F}.modal-border.success{background-color:#4CA460}.modal-border.warning{background-color:#E16B25}.modal-border.orange{background-color:#E16B25}.modal-border.ocean{background-color:#0A8276}.modal-border.grey{background-color:#575352}.modal-border.grey-200{background-color:#EEEDED}.modal-border.red{background-color:#CD002F}.modal-border.green{background-color:#4CA460}.modal-border.berry{background-color:#9C216E}';const p=u;const g=class{constructor(o){e(this,o);this.ifxOpen=t(this,"ifxOpen",7);this.ifxClose=t(this,"ifxClose",7);this.opened=false;this.showModal=this.opened||false;this.caption="Modal Title";this.closeOnOverlayClick=true;this.variant="default";this.size="s";this.alertIcon="";this.okButtonLabel="OK";this.cancelButtonLabel="Cancel";this.slotButtonsPresent=false;this.showCloseButton=true;this.focusableElements=[];this.handleTopFocus=()=>{this.attemptFocus(this.getLastFocusableElement())};this.handleBottomFocus=()=>{this.attemptFocus(this.getFirstFocusableElement())};this.handleKeypress=e=>{if(!this.showModal){return}if(e.key==="Escape"){this.doBeforeClose("ESCAPE_KEY")}}}componentWillLoad(){if(!r(this.hostElement)){const e=a();s("ifx-modal",e)}}componentDidLoad(){this.focusableElements=d(this.hostElement.shadowRoot,(e=>c(e)||e.matches("[data-focus-trap-edge]")),f)}componentWillRender(){if(this.showModal){this.handleComponentOverflow()}}handleComponentOverflow(){const e=this.hostElement.shadowRoot.querySelector(".modal-content-container");if(this.showModal&&this.isModalContentContainerHeightReachedViewport()){e.classList.add("no-overflow")}else if(e===null||e===void 0?void 0:e.classList.contains("no-overflow")){e===null||e===void 0?void 0:e.classList.remove("no-overflow")}}getFirstFocusableElement(){return this.focusableElements[0]}getLastFocusableElement(){return this.focusableElements[this.focusableElements.length-1]}attemptFocus(e){if(e==null){setTimeout((()=>{this.closeButton.focus()}));return}setTimeout((()=>{e.focus()}),0)}open(){this.showModal=true;try{const e=h(this.modalContainer,m.fadeIn,{duration:200});e.addEventListener("finish",(()=>{setTimeout((()=>{var e,t;(e=this.getLastFocusableElement())===null||e===void 0?void 0:e.focus();(t=this.getLastFocusableElement())===null||t===void 0?void 0:t.blur()}),0);this.ifxOpen.emit()}));this.hostElement.addEventListener("keydown",this.handleKeypress)}catch(e){this.ifxOpen.emit()}}close(){try{const e=h(this.modalContainer,m.fadeOut,{duration:200});e.addEventListener("finish",(()=>{this.showModal=false;this.ifxClose.emit()}));this.hostElement.removeEventListener("keydown",this.handleKeypress)}catch(e){this.showModal=false;this.ifxClose.emit()}}doBeforeClose(e){const t=[];t.push(e);const o=t.some((e=>e.defaultPrevented));if(!o){this.opened=false}}openedChanged(e){if(e===true){this.open()}else{this.close()}}handleOverlayClick(){if(this.closeOnOverlayClick){this.doBeforeClose("BACKDROP")}}handleContentUpdate(e){const t=e.target;const o=t.assignedNodes();if(o.length>0){o.forEach((e=>{if(e.observer){e.observer.disconnect();delete e.observer}const t=new MutationObserver(((e,t)=>{for(let t of e){if(t.type==="childList"){if(this.showModal){this.handleComponentOverflow()}}}}));t.observe(e,{attributes:true,childList:true,subtree:true});e.observer=t}))}}handleButtonsSlotChange(e){var t;if(((t=e.currentTarget.assignedElements()[0])===null||t===void 0?void 0:t.childElementCount)>0){this.slotButtonsPresent=true}else{this.slotButtonsPresent=false}}isModalContentContainerHeightReachedViewport(){return new Promise((e=>{setTimeout((()=>{const t=this.hostElement.shadowRoot.querySelector(".modal-content");const o=t.offsetHeight;const n=window.innerHeight;e(o>=n*.9)}),100)}))}render(){const e=this.variant!=="default";return o(n,{key:"24c13df6af069b1d93d4e70c0930bd4381b2dcc1"},o("div",{key:"fc6a23f20309e087dac7665bb71df58ea44669aa",ref:e=>this.modalContainer=e,class:`modal-container ${this.showModal?"open":""}`},o("div",{key:"109e80dce5854beda04fc593efae49bdf8a4d4e0",class:"modal-overlay",onClick:()=>this.handleOverlayClick()}),o("div",{key:"eb35fdaf211ceef40b983d378304a4642fa839e8","data-focus-trap-edge":true,onFocus:this.handleTopFocus,tabindex:"0"}),o("div",{key:"0b7b0108c0563ffc5e14fd8f1c39d4bf3c80c03d",class:`modal-content-container ${this.size}`,role:"dialog","aria-modal":"true","aria-label":this.caption},e?o("div",{class:`modal-icon-container ${this.variant==="alert-brand"?"":"danger"}`},this.alertIcon?o("ifx-icon",{icon:this.alertIcon}):null):null,o("div",{key:"23113f6efc3df7ca24976bde7999f29b21c57a56",class:"modal-content"},o("div",{key:"d89ad9950a9d9ea8b64ab9ad41b3e47ee3a3a8c3",class:"modal-header"},o("h2",{key:"ebad8ef7e759f916325a0a5fe7e87a016f9e169a",class:"modal-caption"},this.caption),this.showCloseButton&&o("ifx-icon-button",{key:"8655efa78858838ee8ec697cb9adad04b27e882b",class:"modal-close-button",ref:e=>this.closeButton=e,icon:"cross-16",variant:"tertiary",onClick:()=>this.doBeforeClose("CLOSE_BUTTON")})),o("div",{key:"71fd706680ffecda83c792639cd3781e739fad74",class:"modal-body"},o("slot",{key:"e9607ce7823d9fc0020ae4c0135612c9bb688984",name:"content",onSlotchange:e=>this.handleContentUpdate(e)})),o("div",{key:"3283f090e75460790a0f31708c34aa54efa77548",class:`modal-footer ${this.slotButtonsPresent?"buttons-present":""}`},o("slot",{key:"59f2179f10110195b68a4f1671aa342209d0e51b",name:"buttons",onSlotchange:e=>this.handleButtonsSlotChange(e)})))),o("div",{key:"f3e0591f72a4e3f756fc1e3378e27733d3ee2707","data-focus-trap-edge":true,onFocus:this.handleBottomFocus,tabindex:"0"})))}get hostElement(){return i(this)}static get watchers(){return{opened:["openedChanged"]}}};g.style=p;export{g as ifx_modal};
|
2
|
+
//# sourceMappingURL=p-f47071d5.entry.js.map
|