@infineon/infineon-design-system-stencil 30.10.0--canary.1702.6c63d2d857f4174f3e9f8e7b7cb49f6bca39238a.0 → 30.11.0--canary.1680.2228c2eb09cd2ba334031704f0fd6efdda1cc5e5.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.
Files changed (38) hide show
  1. package/dist/cjs/ifx-multiselect_2.cjs.entry.js +5 -1
  2. package/dist/cjs/ifx-multiselect_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/ifx-radio-button.cjs.entry.js +32 -58
  4. package/dist/cjs/ifx-radio-button.cjs.entry.js.map +1 -1
  5. package/dist/cjs/infineon-design-system-stencil.cjs.js +1 -1
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/collection/components/radio-button/radio-button.js +63 -76
  8. package/dist/collection/components/radio-button/radio-button.js.map +1 -1
  9. package/dist/collection/components/select/multi-select/multiselect.js +5 -1
  10. package/dist/collection/components/select/multi-select/multiselect.js.map +1 -1
  11. package/dist/components/ifx-list-entry.js +1 -1
  12. package/dist/components/ifx-multiselect.js +1 -1
  13. package/dist/components/ifx-radio-button.js +1 -1
  14. package/dist/components/ifx-set-filter.js +1 -1
  15. package/dist/components/{p-99162c0f.js → p-86b33518.js} +6 -2
  16. package/dist/components/p-86b33518.js.map +1 -0
  17. package/dist/components/{p-25b45a2f.js → p-91f2864c.js} +41 -69
  18. package/dist/components/p-91f2864c.js.map +1 -0
  19. package/dist/esm/ifx-multiselect_2.entry.js +5 -1
  20. package/dist/esm/ifx-multiselect_2.entry.js.map +1 -1
  21. package/dist/esm/ifx-radio-button.entry.js +32 -58
  22. package/dist/esm/ifx-radio-button.entry.js.map +1 -1
  23. package/dist/esm/infineon-design-system-stencil.js +1 -1
  24. package/dist/esm/loader.js +1 -1
  25. package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js +1 -1
  26. package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js.map +1 -1
  27. package/dist/infineon-design-system-stencil/{p-60383100.entry.js → p-fba11471.entry.js} +2 -2
  28. package/dist/infineon-design-system-stencil/p-fba11471.entry.js.map +1 -0
  29. package/dist/infineon-design-system-stencil/p-fc8e9361.entry.js +2 -0
  30. package/dist/infineon-design-system-stencil/p-fc8e9361.entry.js.map +1 -0
  31. package/dist/types/components/radio-button/radio-button.d.ts +19 -9
  32. package/dist/types/components.d.ts +4 -0
  33. package/package.json +1 -1
  34. package/dist/components/p-25b45a2f.js.map +0 -1
  35. package/dist/components/p-99162c0f.js.map +0 -1
  36. package/dist/infineon-design-system-stencil/p-60383100.entry.js.map +0 -1
  37. package/dist/infineon-design-system-stencil/p-ed9670dd.entry.js +0 -2
  38. package/dist/infineon-design-system-stencil/p-ed9670dd.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["multiselectCss","IfxMultiselectStyle0","debounce","func","wait","timeout","executedFunction","args","later","clearTimeout","setTimeout","Multiselect","constructor","hostRef","this","batchSize","size","disabled","error","internalError","errorMessage","label","persistentSelectedOptions","placeholder","dropdownOpen","zIndex","currentIndex","isLoading","loadedOptions","filteredOptions","showSearch","showSelectAll","optionCount","optionsProcessed","handleSearch","targetElement","searchTerm","value","toLowerCase","filter","option","includes","handleDocumentClick","event","path","composedPath","dropdownElement","document","removeEventListener","ifxMultiselectIsOpen","emit","updateOptions","loadInitialOptions","internalErrorMessage","fetchOptions","fetchMoreOptions","moreOptions","length","handleScroll","element","target","halfwayPoint","Math","floor","scrollHeight","clientHeight","scrollTop","startIndex","count","allOptions","options","JSON","parse","err","console","Array","isArray","countOptions","initiallySelected","collectSelectedOptions","initallySelectedNotInState","init","some","opt","slicedOptions","slice","selectedOptions","selected","children","concat","collectLeafOptions","push","leafOptions","child","componentDidLoad","positionDropdown","componentWillLoad","updateInternalError","updateInternalErrorMessage","loadedOptionsChanged","onSelectionChange","newValue","_","formData","FormData","forEach","append","name","internals","setFormValue","handleOptionClick","isSelectionLimitReached","checkboxRef","toggleCheckedState","updateSelection","ifxSelect","newOptionsLength","maxItemCount","selectedOption","wasSelected","handleParentOptionClick","handleChildOptionClick","selectAll","selectAllRecursive","allChildrenSelected","every","newChildren","childOption","updateParentSelectedState","_a","isOptionIndeterminate","indeterminate","getSizeClass","toggleDropdown","addEventListener","globalZIndex","waitForElement","querySelectorFunc","callback","maxTries","tries","request","requestAnimationFrame","elements","handleKeyDown","querySelectorAll","code","updateHighlightedOption","handleArrowDown","handleArrowUp","handleWrapperClick","currentTarget","clearSelection","wrapperRect","el","shadowRoot","querySelector","getBoundingClientRect","spaceBelow","window","innerHeight","bottom","spaceAbove","top","height","dropdownFlipped","classList","remove","add","focus","handleOptionKeyDown","e","key","stopPropagation","renderOption","index","isIndeterminate","isSelected","isOptionSelected","disableCheckbox","uniqueId","h","class","onKeyDown","onClick","tabindex","role","tabIndex","ref","id","checked","htmlFor","map","childIndex","renderSubOption","persistentOption","selectedChildren","findInOptions","foundInChildren","renderSelectAll","allSelected","noneSelected","that","toggleSelectAll","handleSelectAllKeydown","render","selectedOptionsLabels","isChildSelectedWithParent","parentOption","join","undefined","onScroll","style","toString","type","onInput","icon","textFieldCss","IfxTextFieldStyle0","TextField","caption","required","optional","success","showDeleteIcon","valueWatcher","inputElement","reset","handleDeleteContent","ifxInput","handleInput","query","formResetCallback","setValidity","maxlength"],"sources":["src/components/select/multi-select/multiselect.scss?tag=ifx-multiselect&encapsulation=shadow","src/components/select/multi-select/multiselect.tsx","src/components/text-field/text-field.scss?tag=ifx-text-field&encapsulation=shadow","src/components/text-field/text-field.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);\n\n &.small-select {\n height: 36px;\n }\n\n &.medium-select {\n height: 40px;\n }\n\n &:hover {\n cursor: pointer;\n }\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 position: relative;\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\n\n &.small-select {\n height: 36px;\n padding: 8px 12px;\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n }\n\n &.medium-select {\n height: 40px;\n padding: 8px 16px;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n }\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 align-items: center;\n display: flex;\n }\n\n\n .ifx-clear-button {\n display: flex;\n }\n\n .ifx-multiselect-dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n margin-top: 2px;\n background-color: #fff;\n box-shadow: 0px 6px 9px 0px rgba(29, 29, 29, 0.10);\n max-height: 300px;\n /* Adjust based on your design */\n overflow-y: auto;\n z-index: var(--dynamic-z-index, 1); // Fallback to 1\n\n .search-input {\n position: sticky;\n top: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n padding: 8px 16px;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n font-style: normal;\n font-weight: 400;\n box-sizing: border-box;\n background-color: tokens.$ifxColorBaseWhite;\n border: none;\n border-bottom: 1px solid tokens.$ifxColorEngineering400;\n\n &:focus {\n outline: none;\n border: 1px solid tokens.$ifxColorOcean500;\n }\n\n // Optional: Placeholder style\n &::placeholder {\n color: #999;\n }\n }\n }\n\n .option {\n position: relative;\n padding: 8px 16px;\n gap: 8px;\n align-items: center;\n display: flex;\n font-style: normal;\n font-weight: 400;\n\n &.small-select {\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n }\n\n &.medium-select {\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n }\n\n &:hover {\n background-color: tokens.$ifxColorEngineering200;\n }\n\n &:focus:not(.disabled) {\n background-color: tokens.$ifxColorEngineering300;\n outline: none;\n }\n\n &.is-highlighted {\n background-color: tokens.$ifxColorEngineering200;\n ;\n }\n\n &.selected {\n // color: #0A8276;\n }\n\n &.sub-option {\n padding-left: 30px;\n /* or however much indentation you want */\n }\n\n &.disabled {\n &:hover {\n cursor: default;\n }\n }\n\n label {\n cursor: inherit;\n }\n }\n\n\n\n}\n\n.select-all-wrapper {\n padding-top: 8px;\n}","import { Component, Prop, State, Event, EventEmitter, Element, h, Watch, AttachInternals } from '@stencil/core';\nimport { Option } from './interfaces';\n\n// Debounce function\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\n\n\nexport class Multiselect {\n\n @Prop() name: string;\n @Prop() options: any[] | string;\n @Prop() batchSize: number = 50;\n @Prop() size: string = 'medium (40px)';\n @Prop() disabled: boolean = false;\n @Prop() error: boolean = false;\n @State() internalError: boolean = false;\n @Prop() errorMessage: string = \"Error\";\n @State() internalErrorMessage: string;\n @Prop() label: string = \"\";\n @State() persistentSelectedOptions: Option[] = [];\n @Prop() placeholder: string = \"\";\n @State() dropdownOpen = false;\n @State() dropdownFlipped: boolean;\n @Prop() maxItemCount: number;\n @State() zIndex: number = 1; // default z-index value\n static globalZIndex = 1; // This will be shared among all instances of the component.\n private currentIndex: number = 0; //needed for option selection using keyboard\n @State() isLoading: boolean = false;\n @State() loadedOptions: Option[] = [];\n @State() filteredOptions: Option[] = [];\n @Prop() showSearch: boolean = true;\n @Prop() showSelectAll: boolean = true;\n @State() optionCount: number = 0; // number of all options (leaves of the tree)\n @State() optionsProcessed: boolean = false; // flag whether options have already been counted, intial selections saved\n\n\n @Event() ifxSelect: EventEmitter;\n @Event() ifxMultiselectIsOpen: EventEmitter;\n\n @Element() el: HTMLElement;\n dropdownElement!: HTMLElement;\n\n @AttachInternals() internals: ElementInternals;\n\n\n @Watch('options')\n updateOptions() { \n this.loadedOptions = [];\n this.filteredOptions = [];\n this.optionCount = 0;\n this.optionsProcessed = false;\n this.persistentSelectedOptions = [];\n\n this.loadInitialOptions();\n }\n\n\n async loadInitialOptions() {\n this.isLoading = true;\n this.internalError = this.error;\n this.internalErrorMessage = this.errorMessage;\n // Load the first batch of options (e.g., first 20)\n this.loadedOptions = await this.fetchOptions(0, this.batchSize);\n this.isLoading = false;\n }\n\n async fetchMoreOptions() {\n this.isLoading = true;\n const moreOptions = await this.fetchOptions(this.loadedOptions.length, this.batchSize);\n this.loadedOptions = [...this.loadedOptions, ...moreOptions];\n this.isLoading = false;\n }\n\n\n handleScroll(event: UIEvent) {\n const element = event.target as HTMLElement;\n const halfwayPoint = Math.floor((element.scrollHeight - element.clientHeight) / 2); //loading more options when the user has scrolled halfway through the current list\n\n if (element.scrollTop >= halfwayPoint) {\n this.fetchMoreOptions();\n }\n }\n\n\n\n\n async fetchOptions(startIndex: number, count: number): Promise<Option[]> {\n let allOptions: Option[] = [];\n\n // Parse options if it's a string, or use directly if it's an array\n if (typeof this.options === 'string') {\n try {\n allOptions = JSON.parse(this.options);\n \n } catch (err) {\n console.error('Failed to parse options:', err);\n }\n } else if (Array.isArray(this.options)) {\n allOptions = this.options;\n } else {\n console.error('Unexpected value for options:', this.options);\n }\n\n if (!this.optionsProcessed) {\n this.optionCount = this.countOptions(allOptions);\n const initiallySelected = this.collectSelectedOptions(allOptions);\n const initallySelectedNotInState = initiallySelected.filter(init => !this.persistentSelectedOptions.some(opt => opt.value == init.value));\n this.persistentSelectedOptions = [...this.persistentSelectedOptions, ...initallySelectedNotInState];\n this.optionsProcessed = true;\n }\n \n // Slice the options array based on startIndex and count\n const slicedOptions = allOptions.slice(startIndex, startIndex + count);\n return slicedOptions;\n }\n\n /**\n * Collects and returns all options that are selected.\n * When the parent is selected, then the value of the children will be overriden with selected as well.\n * It will only collect the leaves of the tree.\n * \n * @param options A list of options.\n * @returns A list with all selected options\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 // if parent is selected, then select all child options\n selectedOptions = selectedOptions.concat(this.collectLeafOptions(option.children));\n } else {\n selectedOptions.push(option);\n }\n } else {\n if (option.children && option.children.length > 0) {\n selectedOptions = selectedOptions.concat(this.collectSelectedOptions(option.children));\n }\n }\n }\n return selectedOptions;\n }\n\n /**\n * Collects all leaf children options.\n * \n * @param option A list with all leaf-children.\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 /**\n * Count the number of options. Only counts the leaves of the options tree.\n */\n countOptions(options: Option[]): number {\n let count = 0;\n for (const option of options) {\n if (option.children && option.children.length >= 0) {\n count += this.countOptions(option.children);\n } else {\n count++;\n }\n }\n return count;\n }\n\n\n handleSearch = debounce((targetElement: HTMLInputElement) => {\n const searchTerm = targetElement.value.toLowerCase();\n if (searchTerm === '') {\n this.filteredOptions = this.loadedOptions;\n } else {\n this.filteredOptions = this.loadedOptions.filter(option => option.label.toLowerCase().includes(searchTerm))\n }\n }, 300);\n\n componentDidLoad() {\n setTimeout(() => {\n this.positionDropdown();\n }, 500);\n\n // setInterval(this.handleScroll, 5000); // Runs every 5 seconds (5000 milliseconds)\n }\n\n componentWillLoad() {\n this.loadInitialOptions();\n this.filteredOptions = [...this.loadedOptions];\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('loadedOptions')\n loadedOptionsChanged() {\n this.filteredOptions = [...this.loadedOptions];\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\n handleOptionClick(option: Option) {\n this.internalError = false;\n\n if (!option.selected && this.isSelectionLimitReached(option)) {\n option.checkboxRef.toggleCheckedState(false)\n this.internalError = true;\n this.internalErrorMessage = \"Please consider the maximum number of items to choose from\";\n return;\n }\n \n this.updateSelection(option);\n this.ifxSelect.emit(this.persistentSelectedOptions);\n }\n\n\n isSelectionLimitReached(option: Option): boolean {\n let newOptionsLength = option.children ? option.children.length : 1;\n return this.maxItemCount && this.persistentSelectedOptions.length + newOptionsLength > this.maxItemCount &&\n !this.persistentSelectedOptions.some(selectedOption => selectedOption.value === option.value)\n }\n\n updateSelection(option: Option) {\n const wasSelected = this.persistentSelectedOptions.some(selectedOption => selectedOption.value === option.value);\n\n if (option.children && option.children.length > 0) {\n this.handleParentOptionClick(option);\n } else {\n this.handleChildOptionClick(option, wasSelected);\n }\n }\n\n async selectAll() {\n const allOptions = await this.fetchOptions(0, this.optionCount);\n this.selectAllRecursive(allOptions);\n \n this.ifxSelect.emit(this.persistentSelectedOptions);\n }\n\n private selectAllRecursive(options: Option[]) {\n for (const opt of options) {\n if (opt.children && opt.children.length > 0) {\n this.selectAllRecursive(opt.children);\n } else {\n if (!this.persistentSelectedOptions.some((some) => some.value === opt.value )) {\n opt.selected = true;\n this.persistentSelectedOptions = [...this.persistentSelectedOptions, opt];\n }\n }\n }\n\n }\n\n handleParentOptionClick(option: Option) {\n const allChildrenSelected = option.children.every(child =>\n this.persistentSelectedOptions.some(selectedOption => selectedOption.value === child.value)\n );\n\n if (allChildrenSelected) {\n this.persistentSelectedOptions = [...this.persistentSelectedOptions.filter(\n selectedOption => !option.children.some(child => child.value === selectedOption.value)\n )];\n\n option.selected = false;\n option.children.forEach(child => {\n child.selected = false;\n })\n\n } else {\n const newChildren = [...option.children.filter(childOption =>\n !this.persistentSelectedOptions.some(selectedOption => selectedOption.value === childOption.value)\n )];\n option.selected = true;\n option.children.forEach(child => {\n child.selected = true;\n })\n this.persistentSelectedOptions = [...this.persistentSelectedOptions, ...newChildren];\n }\n }\n\n handleChildOptionClick(option: Option, wasSelected: boolean) {\n if (wasSelected) {\n this.persistentSelectedOptions = [...this.persistentSelectedOptions.filter(selectedOption => selectedOption.value !== option.value)];\n option.selected = false;\n } else {\n this.persistentSelectedOptions = [...this.persistentSelectedOptions, option];\n option.selected = true;\n }\n this.updateParentSelectedState();\n }\n\n updateParentSelectedState() {\n this.loadedOptions.forEach(option => {\n if(option.children?.length > 0) {\n if(option.children.every(child => child.selected === true)) option.selected = true;\n else {\n option.selected = false;\n if(this.isOptionIndeterminate(option)) {\n option.indeterminate = true;\n }else{\n option.indeterminate = false;\n }\n }\n }\n });\n }\n\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\n // Dispatch the ifxMultiselectIsOpen event\n this.ifxMultiselectIsOpen.emit(this.dropdownOpen);\n }\n }\n\n getSizeClass() {\n return `${this.size}` === \"s\"\n ? \"small-select\"\n : \"medium-select\";\n }\n\n toggleDropdown() {\n this.dropdownOpen = !this.dropdownOpen;\n setTimeout(() => {\n if (this.dropdownOpen) {\n document.addEventListener('click', this.handleDocumentClick);\n }\n // Dispatch the ifxMultiselectIsOpen event\n this.ifxMultiselectIsOpen.emit(this.dropdownOpen);\n }, 0);\n this.zIndex = Multiselect.globalZIndex++;\n }\n\n\n waitForElement(querySelectorFunc: Function, callback: Function, maxTries = 50) {\n let tries = 0;\n function request() {\n requestAnimationFrame(() => {\n const elements = querySelectorFunc();\n if (elements.length > 0 || tries > maxTries) {\n callback(elements);\n } else {\n tries++;\n request();\n }\n });\n }\n request();\n }\n\n\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) return; // If it's disabled, don't do anything.\n\n const options = this.dropdownElement.querySelectorAll('.option');\n \n switch (event.code) {\n case 'Enter':\n this.toggleDropdown();\n // Wait a bit for the dropdown to finish rendering\n this.waitForElement(() => {\n return this.dropdownElement.querySelectorAll('.option');\n }, (options) => {\n this.updateHighlightedOption(options);\n });\n break;\n case 'Space': \n this.toggleDropdown();\n // Wait a bit for the dropdown to finish rendering\n this.waitForElement(() => {\n return this.dropdownElement.querySelectorAll('.option');\n }, (options) => {\n this.updateHighlightedOption(options);\n });\n break;\n case 'ArrowDown':\n this.handleArrowDown(options);\n if (this.dropdownOpen) {\n this.updateHighlightedOption(options);\n }\n break;\n case 'ArrowUp':\n this.handleArrowUp(options);\n if (this.dropdownOpen) {\n this.updateHighlightedOption(options);\n }\n break;\n }\n }\n\n handleWrapperClick(event: MouseEvent) {\n // This is your existing logic for positioning the dropdown\n this.positionDropdown();\n\n // Check if the event target is the wrapper itself and not a child element.\n if (event.currentTarget === event.target) {\n this.toggleDropdown();\n }\n }\n\n clearSelection() {\n this.persistentSelectedOptions = [];\n this.ifxSelect.emit(this.persistentSelectedOptions); // if you want to emit empty selection after clearing\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 there's more space above than below the trigger and the dropdown doesn't fit below\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\n\n // Helper function to update highlighted option based on currentIndex\n private updateHighlightedOption(options: NodeList) {\n // Clear all highlights\n options.forEach((option: Element) => option.classList.remove('is-highlighted'));\n\n // Apply highlight to the current option\n if (this.currentIndex >= 0 && this.currentIndex < options.length) {\n (options[this.currentIndex] as Element).classList.add('is-highlighted');\n (options[this.currentIndex] as HTMLElement).focus();\n }\n }\n\n // Helper function to handle arrow down navigation\n private handleArrowDown(options: NodeList) {\n if (this.currentIndex < options.length - 1) {\n this.currentIndex++;\n } else {\n this.currentIndex = 0; // Wrap to the beginning.\n }\n }\n\n // Helper function to handle arrow up navigation\n private handleArrowUp(options: NodeList) {\n if (this.currentIndex > 0) {\n this.currentIndex--;\n } else {\n this.currentIndex = options.length - 1; // Wrap to the end.\n }\n }\n \n handleOptionKeyDown(e: KeyboardEvent, option: Option) {\n if(e.key !== 'ArrowUp' && e.key !== 'ArrowDown') e.stopPropagation();\n if(e.key === 'Enter' || e.key === ' ') {\n this.handleOptionClick(option);\n }\n }\n\n renderOption(option: Option, index: number) {\n const isIndeterminate = this.isOptionIndeterminate(option);\n const isSelected = option.children ? isIndeterminate || this.isOptionSelected(option) : this.persistentSelectedOptions.some(selectedOption => selectedOption.value === option.value);\n const disableCheckbox = !isSelected && this.maxItemCount && this.persistentSelectedOptions.length >= this.maxItemCount;\n const uniqueId = `checkbox-${option.value}-${index}`; // Generate a unique ID using the index\n\n return (\n <div class=\"option-wrapper\">\n <div class={`option ${isSelected ? 'selected' : ''} ${disableCheckbox ? 'disabled' : ''} \n ${this.getSizeClass()}`}\n data-value={option.value}\n onKeyDown={(e) => !disableCheckbox && this.handleOptionKeyDown(e, option)}\n onClick={() => !disableCheckbox && this.handleOptionClick(option)}\n tabindex=\"0\"\n role={`${option.children?.length > 0 ? \"treeitem\" : \"option\"}`}>\n <ifx-checkbox tabIndex={-1} ref={(el) => option.checkboxRef = el} id={uniqueId} size=\"s\" checked={isIndeterminate ? false : isSelected} indeterminate={isIndeterminate} disabled={disableCheckbox}></ifx-checkbox>\n <label htmlFor={uniqueId} onClick={(e) => e.stopPropagation()}>{option.label}</label>\n </div>\n {option.children && option.children.map((child, childIndex) => this.renderSubOption(child, `${index}-${childIndex}`))}\n </div>\n );\n }\n\n isOptionSelected(option: Option): boolean {\n if (!option.children) return false;\n\n return option.children.every(child =>\n this.persistentSelectedOptions.some(persistentOption => persistentOption.value === child.value)\n );\n }\n\n\n isOptionIndeterminate(option: Option): boolean {\n if (!option.children) return false;\n\n const selectedChildren = option.children.filter(child =>\n this.persistentSelectedOptions.some(persistentOption => persistentOption.value === child.value)\n ).length;\n\n return selectedChildren > 0 && selectedChildren < option.children.length;\n }\n\n\n findInOptions(options: Option[], searchTerm: string): Option | null {\n for (const option of options) {\n if (option.value === searchTerm) {\n return option;\n }\n if (option.children) {\n const foundInChildren = this.findInOptions(option.children, searchTerm);\n if (foundInChildren) {\n return foundInChildren;\n }\n }\n }\n return null;\n }\n\n\n renderSubOption(option: Option, index: string) {\n const isSelected = this.persistentSelectedOptions.some(selectedOption => selectedOption.value === option.value);\n const disableCheckbox = !isSelected && this.maxItemCount && this.persistentSelectedOptions.length >= this.maxItemCount;\n const uniqueId = `checkbox-${option.value}-${index}`;\n\n return (\n <div class={`option sub-option ${isSelected ? 'selected' : ''} ${this.getSizeClass()} ${disableCheckbox ? 'disabled' : ''}`}\n data-value={option.value}\n role={`${option.children?.length > 0 ? \"option\" : \"treeitem\"}`}\n onKeyDown={(e) => !disableCheckbox && this.handleOptionKeyDown(e, option)}\n onClick={() => !disableCheckbox && this.handleOptionClick(option)}\n tabindex=\"0\">\n <ifx-checkbox tabIndex={-1} ref={(el) => option.checkboxRef = el} id={uniqueId} size=\"s\" checked={isSelected} disabled={disableCheckbox}></ifx-checkbox>\n <label htmlFor={uniqueId} onClick={(e) => e.stopPropagation()}>{option.label}</label>\n </div>\n );\n }\n\n private renderSelectAll() {\n const allSelected = this.persistentSelectedOptions.length === this.optionCount;\n const noneSelected = this.persistentSelectedOptions.length === 0;\n const indeterminate = this.optionCount > 0 && !noneSelected && !allSelected;\n\n const that = this;\n function toggleSelectAll() {\n if (allSelected) {\n that.clearSelection();\n } else {\n that.selectAll();\n }\n }\n\n function handleSelectAllKeydown(e: KeyboardEvent) {\n if(e.key !== 'ArrowUp' && e.key !== 'ArrowDown') e.stopPropagation();\n if(e.key === 'Enter' || e.key === ' ') {\n toggleSelectAll();\n }\n }\n\n return <div class=\"select-all-wrapper\">\n <div class={`option ${this.getSizeClass()}`} tabindex='0' onKeyDown={(e) => handleSelectAllKeydown(e)} onClick={toggleSelectAll}>\n <ifx-checkbox tabIndex={-1} id='selectAll' checked={allSelected} indeterminate={indeterminate} size=\"s\"></ifx-checkbox>\n <label htmlFor='selectAll'>Select all</label>\n </div>\n <ifx-dropdown-separator></ifx-dropdown-separator>\n </div>;\n }\n\n\n render() {\n // Create a label for the selected options\n const selectedOptionsLabels = this.persistentSelectedOptions\n .filter(option => {\n // check if option is a child and its parent is selected\n const isChildSelectedWithParent = this.persistentSelectedOptions.some(parentOption =>\n parentOption.children &&\n parentOption.children.some(child => child.value === option.value) &&\n parentOption.selected\n );\n return !isChildSelectedWithParent;\n })\n .map(option => option.label)\n .join(', ');\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.getSizeClass()} \n ${this.dropdownOpen ? 'active' : ''} \n ${this.dropdownFlipped ? 'is-flipped' : ''}\n ${this.internalError ? 'error' : \"\"}\n ${this.disabled ? '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 ${this.persistentSelectedOptions.length === 0 ? 'placeholder' : \"\"}\n `}\n onClick={this.disabled ? undefined : () => this.toggleDropdown()}\n >\n {this.persistentSelectedOptions.length > 0 ? selectedOptionsLabels : this.placeholder}\n </div>\n {this.dropdownOpen && (\n <div class=\"ifx-multiselect-dropdown-menu\"\n onScroll={(event) => this.handleScroll(event)}\n style={{ '--dynamic-z-index': this.zIndex.toString() }}>\n {this.showSearch && <input type=\"text\" role=\"textbox\" class=\"search-input\" onKeyDown={(e) => { e.stopPropagation() }} onInput={(event) => this.handleSearch(event.target)} placeholder=\"Search...\"></input>}\n {this.showSelectAll && this.renderSelectAll()}\n {this.filteredOptions.map((option, index) => this.renderOption(option, index))}\n {this.isLoading && <div>Loading more options...</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\" 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='chevronup-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}\n","@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: flex;\n}\n\n.textInput__container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 0px;\n width: 100%;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n font-family: var(--ifx-font-family);\n\n\n &.disabled {\n & .textInput__top-wrapper {\n & label {\n color: tokens.$ifxColorEngineering500;\n }\n }\n\n & .textInput__bottom-wrapper {\n input {\n border: 1px solid tokens.$ifxColorEngineering500;\n background-color: tokens.$ifxColorEngineering200;\n\n &::placeholder {\n font-size: tokens.$ifxFontSizeS;\n color: tokens.$ifxColorEngineering500;\n }\n }\n }\n }\n\n & .textInput__top-wrapper {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n padding: 0px;\n gap: 4px;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n\n & label {\n font-style: normal;\n font-weight: 400;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n display: flex;\n align-items: center;\n color: tokens.$ifxColorBaseBlack;\n flex: none;\n order: 0;\n flex-grow: 0;\n\n & .optional-required {\n margin-left: 4px;\n }\n\n & .optional {\n margin-left: 4px;\n }\n\n & .required {\n margin-left: 4px;\n \n &.error {\n color: #CD002F;\n }\n }\n }\n }\n\n .input-container {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n\n & .textInput__bottom-wrapper {\n flex-grow: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 0px;\n gap: 4px;\n flex: none;\n order: 1;\n align-self: stretch;\n flex-grow: 0;\n\n & input {\n width: 100%;\n box-sizing: border-box;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n gap: tokens.$ifxSpace100;\n height: tokens.$ifxSize500;\n background-color: tokens.$ifxColorBaseWhite;\n color: tokens.$ifxColorBaseBlack;\n font-family: tokens.$ifxFontFamilyBody;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n border: 1px solid tokens.$ifxColorEngineering400;\n border-radius: tokens.$ifxBorderRadius12;\n flex: none;\n order: 0;\n align-self: stretch;\n flex-grow: 0;\n text-overflow: ellipsis;\n\n &.input-s {\n height: tokens.$ifxSize450;\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n\n &::placeholder {\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n }\n\n }\n\n &.icon {\n padding-left: tokens.$ifxSpace500;\n }\n\n &.error {\n border: 1px solid #CD002F;\n\n &:focus {\n outline: none;\n }\n }\n\n &.success {\n border: 1px solid #4CA460;\n\n &:focus {\n outline: none;\n }\n }\n\n\n &:focus:not(.error, .success) {\n outline: none;\n border: 1px solid tokens.$ifxColorOcean500;\n }\n\n &:hover:not(:disabled, :focus, .error, .success) {\n border: 1px solid tokens.$ifxColorEngineering500;\n }\n\n &::placeholder {\n font-style: normal;\n font-weight: 400;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n color: #8D8786;\n flex: none;\n order: 1;\n flex-grow: 1;\n }\n }\n\n & .input-icon {\n // Position the icon within the icon container\n // Adjust the positioning as needed\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: tokens.$ifxSpace200;\n /* Adjust this value to control the icon's left offset */\n transition: .3s;\n color: tokens.$ifxColorEngineering400;\n }\n\n & .textInput__bottom-wrapper-caption {\n font-style: normal;\n font-weight: 400;\n font-size: tokens.$ifxFontSizeXs;\n line-height: tokens.$ifxLineHeightXs;\n letter-spacing: 0.2px;\n color: tokens.$ifxColorBaseBlack;\n flex: none;\n order: 1;\n align-self: stretch;\n flex-grow: 0;\n\n &.error {\n color: #CD002F;\n\n }\n\n &.disabled {\n color: tokens.$ifxColorEngineering500;\n }\n }\n\n \n }\n .delete-icon {\n position: absolute;\n right: tokens.$ifxSpace200;\n\n :hover {\n cursor: pointer;\n }\n }\n}","import { Component, h, Event, Element, Prop, EventEmitter, Watch, Method, AttachInternals } from '@stencil/core';\n \n\n@Component({\n tag: 'ifx-text-field',\n styleUrl: 'text-field.scss',\n shadow: true,\n formAssociated: true\n})\n\nexport class TextField {\n private inputElement: HTMLInputElement;\n @Element() el;\n @Prop() placeholder: string = \"Placeholder\"\n @Prop({ mutable: true }) value: string = '';\n @Prop() error: boolean = false;\n @Prop() label: string = \"\";\n @Prop() icon: string = \"\";\n @Prop() caption: string = \"\";\n @Prop() size: string = 'm';\n @Prop() required: boolean = false;\n @Prop() optional: boolean = false;\n @Prop() success: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() maxlength?: number;\n @Prop() showDeleteIcon: boolean = false;\n @Event() ifxInput: EventEmitter<String>;\n // @Prop({ reflect: true })\n // resetOnSubmit: boolean = false;\n\n @AttachInternals() internals: ElementInternals;\n\n\n @Watch('value')\n valueWatcher(newValue: string) {\n if (newValue !== this.inputElement.value) {\n this.inputElement.value = newValue;\n }\n }\n\n @Method()\n async reset() {\n this.value = '';\n this.inputElement.value = '';\n }\n\n handleDeleteContent() {\n this.reset();\n this.ifxInput.emit(this.value);\n }\n\n handleInput() {\n const query = this.inputElement.value;\n this.value = query; // update the value property when input changes\n this.internals.setFormValue(query) // update form value\n this.ifxInput.emit(this.value);\n }\n\n formResetCallback() {\n this.internals.setValidity({});\n this.internals.setFormValue(\"\");\n }\n\n render() {\n return (\n <div aria-label=\"a text field for user input\" aria-value={this.value} aria-disabled={this.disabled} class={`textInput__container ${this.disabled ? 'disabled' : \"\"}`}>\n <div class=\"textInput__top-wrapper\">\n <label htmlFor=\"text-field\">\n <slot></slot>\n {this.optional && this.required ? (\n <span class=\"optional-required\">(optional) *</span>\n ) : this.optional ? (\n <span class=\"optional\">(optional)</span>\n ) : this.required ? (\n <span class={`required ${this.error ? 'error' : \"\"}`}>*</span>\n ) : null}\n </label>\n </div>\n\n <div class=\"textInput__bottom-wrapper\">\n <div class=\"input-container\">\n {this.icon && (\n <ifx-icon class='input-icon' icon={this.icon} />\n )}\n <input\n ref={(el) => (this.inputElement = el)}\n disabled={this.disabled}\n type=\"text\"\n id='text-field'\n value={this.value}\n onInput={() => this.handleInput()}\n placeholder={this.placeholder}\n maxlength={this.maxlength}\n class={\n `${this.icon ? 'icon' : \"\"}\n ${this.error ? 'error' : \"\"} \n ${this.size === \"s\" ? \"input-s\" : \"\"}\n ${this.success ? \"success\" : \"\"}`} />\n\n { (this.showDeleteIcon && this.value) && (\n <ifx-icon class=\"delete-icon\" icon=\"cremove16\" onClick={() => this.handleDeleteContent()}></ifx-icon> \n )}\n </div>\n {this.caption && !this.error &&\n <div class={`textInput__bottom-wrapper-caption ${this.disabled} ? disabled : \"\"`}>\n {this.caption}\n </div>}\n {this.error &&\n <div class=\"textInput__bottom-wrapper-caption error\">\n {this.caption}\n </div>}\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}