@infineon/infineon-design-system-stencil 39.4.4--canary.2134.84be7b9e85db8400d052b6d3b5addde807790384.0 → 39.4.4--canary.2136.61ca080385a85b28f9e73c1ac2fcb72fcc5e023a.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 (157) hide show
  1. package/dist/cjs/_commonjsHelpers-CFO10eej.js +10 -0
  2. package/dist/cjs/_commonjsHelpers-CFO10eej.js.map +1 -0
  3. package/dist/cjs/ifx-action-list-item.cjs.entry.js +2 -1
  4. package/dist/cjs/ifx-action-list-item.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ifx-action-list-item.entry.cjs.js.map +1 -1
  6. package/dist/cjs/ifx-basic-table.cjs.entry.js +2 -1
  7. package/dist/cjs/ifx-basic-table.cjs.entry.js.map +1 -1
  8. package/dist/cjs/ifx-basic-table.entry.cjs.js.map +1 -1
  9. package/dist/cjs/ifx-button.cjs.entry.js +146 -0
  10. package/dist/cjs/ifx-button.cjs.entry.js.map +1 -0
  11. package/dist/cjs/ifx-button.entry.cjs.js.map +1 -0
  12. package/dist/cjs/ifx-checkbox.cjs.entry.js +125 -0
  13. package/dist/cjs/ifx-checkbox.cjs.entry.js.map +1 -0
  14. package/dist/cjs/ifx-checkbox.entry.cjs.js.map +1 -0
  15. package/dist/cjs/ifx-chip.ifx-chip-item.ifx-pagination.entry.cjs.js.map +1 -0
  16. package/dist/cjs/ifx-chip_3.cjs.entry.js +615 -0
  17. package/dist/cjs/ifx-chip_3.cjs.entry.js.map +1 -0
  18. package/dist/cjs/ifx-icon-button.cjs.entry.js +76 -0
  19. package/dist/cjs/ifx-icon-button.cjs.entry.js.map +1 -0
  20. package/dist/cjs/ifx-icon-button.entry.cjs.js.map +1 -0
  21. package/dist/cjs/ifx-icon.cjs.entry.js +127 -0
  22. package/dist/cjs/ifx-icon.cjs.entry.js.map +1 -0
  23. package/dist/cjs/ifx-icon.entry.cjs.js.map +1 -0
  24. package/dist/cjs/ifx-indicator.cjs.entry.js +42 -0
  25. package/dist/cjs/ifx-indicator.cjs.entry.js.map +1 -0
  26. package/dist/cjs/ifx-indicator.entry.cjs.js.map +1 -0
  27. package/dist/cjs/ifx-link.cjs.entry.js +2 -1
  28. package/dist/cjs/ifx-link.cjs.entry.js.map +1 -1
  29. package/dist/cjs/ifx-link.entry.cjs.js.map +1 -1
  30. package/dist/cjs/ifx-search-field.cjs.entry.js +2 -1
  31. package/dist/cjs/ifx-search-field.cjs.entry.js.map +1 -1
  32. package/dist/cjs/ifx-search-field.entry.cjs.js.map +1 -1
  33. package/dist/cjs/ifx-select.cjs.entry.js +7323 -0
  34. package/dist/cjs/ifx-select.cjs.entry.js.map +1 -0
  35. package/dist/cjs/ifx-select.entry.cjs.js.map +1 -0
  36. package/dist/cjs/ifx-spinner.ifx-text-field.entry.cjs.js.map +1 -1
  37. package/dist/cjs/ifx-spinner_2.cjs.entry.js +2 -1
  38. package/dist/cjs/ifx-spinner_2.cjs.entry.js.map +1 -1
  39. package/dist/cjs/ifx-status.cjs.entry.js +1 -1
  40. package/dist/cjs/ifx-status.cjs.entry.js.map +1 -1
  41. package/dist/cjs/ifx-status.entry.cjs.js.map +1 -1
  42. package/dist/cjs/ifx-table.cjs.entry.js +1118 -0
  43. package/dist/cjs/ifx-table.cjs.entry.js.map +1 -0
  44. package/dist/cjs/ifx-table.entry.cjs.js.map +1 -0
  45. package/dist/cjs/{index-DihxupoM.js → index-CVw4GUo6.js} +4 -7
  46. package/dist/{esm/index-Beav1bNT.js.map → cjs/index-CVw4GUo6.js.map} +1 -1
  47. package/dist/cjs/index-Dc5gCGlQ.js +30 -2
  48. package/dist/cjs/infineon-design-system-stencil.cjs.js +1 -1
  49. package/dist/cjs/loader.cjs.js +1 -1
  50. package/dist/collection/components/status/status.css +1 -1
  51. package/dist/collection/components/table-advanced-version/table.js +38 -137
  52. package/dist/collection/components/table-advanced-version/table.js.map +1 -1
  53. package/dist/components/ifx-status.js +1 -1
  54. package/dist/components/ifx-status.js.map +1 -1
  55. package/dist/components/ifx-table.js +37 -136
  56. package/dist/components/ifx-table.js.map +1 -1
  57. package/dist/esm/_commonjsHelpers-B85MJLTf.js +8 -0
  58. package/dist/esm/_commonjsHelpers-B85MJLTf.js.map +1 -0
  59. package/dist/esm/ifx-action-list-item.entry.js +2 -1
  60. package/dist/esm/ifx-action-list-item.entry.js.map +1 -1
  61. package/dist/esm/ifx-basic-table.entry.js +2 -1
  62. package/dist/esm/ifx-basic-table.entry.js.map +1 -1
  63. package/dist/esm/ifx-button.entry.js +144 -0
  64. package/dist/esm/ifx-button.entry.js.map +1 -0
  65. package/dist/esm/ifx-checkbox.entry.js +123 -0
  66. package/dist/esm/ifx-checkbox.entry.js.map +1 -0
  67. package/dist/esm/ifx-chip.ifx-chip-item.ifx-pagination.entry.js.map +1 -0
  68. package/dist/esm/ifx-chip_3.entry.js +611 -0
  69. package/dist/esm/ifx-chip_3.entry.js.map +1 -0
  70. package/dist/esm/ifx-icon-button.entry.js +74 -0
  71. package/dist/esm/ifx-icon-button.entry.js.map +1 -0
  72. package/dist/esm/ifx-icon.entry.js +125 -0
  73. package/dist/esm/ifx-icon.entry.js.map +1 -0
  74. package/dist/esm/ifx-indicator.entry.js +40 -0
  75. package/dist/esm/ifx-indicator.entry.js.map +1 -0
  76. package/dist/esm/ifx-link.entry.js +2 -1
  77. package/dist/esm/ifx-link.entry.js.map +1 -1
  78. package/dist/esm/ifx-search-field.entry.js +2 -1
  79. package/dist/esm/ifx-search-field.entry.js.map +1 -1
  80. package/dist/esm/ifx-select.entry.js +7321 -0
  81. package/dist/esm/ifx-select.entry.js.map +1 -0
  82. package/dist/esm/ifx-spinner.ifx-text-field.entry.js.map +1 -1
  83. package/dist/esm/ifx-spinner_2.entry.js +2 -1
  84. package/dist/esm/ifx-spinner_2.entry.js.map +1 -1
  85. package/dist/esm/ifx-status.entry.js +1 -1
  86. package/dist/esm/ifx-status.entry.js.map +1 -1
  87. package/dist/esm/ifx-table.entry.js +1116 -0
  88. package/dist/esm/ifx-table.entry.js.map +1 -0
  89. package/dist/esm/{index-Beav1bNT.js → index-Bt32KzDW.js} +4 -6
  90. package/dist/{cjs/index-DihxupoM.js.map → esm/index-Bt32KzDW.js.map} +1 -1
  91. package/dist/esm/index-PqnYwNKt.js +30 -2
  92. package/dist/esm/infineon-design-system-stencil.js +1 -1
  93. package/dist/esm/loader.js +1 -1
  94. package/dist/infineon-design-system-stencil/ifx-action-list-item.entry.esm.js.map +1 -1
  95. package/dist/infineon-design-system-stencil/ifx-basic-table.entry.esm.js.map +1 -1
  96. package/dist/infineon-design-system-stencil/ifx-button.entry.esm.js.map +1 -0
  97. package/dist/infineon-design-system-stencil/ifx-checkbox.entry.esm.js.map +1 -0
  98. package/dist/infineon-design-system-stencil/ifx-chip.ifx-chip-item.ifx-pagination.entry.esm.js.map +1 -0
  99. package/dist/infineon-design-system-stencil/ifx-icon-button.entry.esm.js.map +1 -0
  100. package/dist/infineon-design-system-stencil/ifx-icon.entry.esm.js.map +1 -0
  101. package/dist/infineon-design-system-stencil/ifx-indicator.entry.esm.js.map +1 -0
  102. package/dist/infineon-design-system-stencil/ifx-link.entry.esm.js.map +1 -1
  103. package/dist/infineon-design-system-stencil/ifx-search-field.entry.esm.js.map +1 -1
  104. package/dist/infineon-design-system-stencil/ifx-select.entry.esm.js.map +1 -0
  105. package/dist/infineon-design-system-stencil/ifx-spinner.ifx-text-field.entry.esm.js.map +1 -1
  106. package/dist/infineon-design-system-stencil/ifx-status.entry.esm.js.map +1 -1
  107. package/dist/infineon-design-system-stencil/ifx-table.entry.esm.js.map +1 -0
  108. package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js +1 -1
  109. package/dist/infineon-design-system-stencil/p-169f26ae.entry.js +2 -0
  110. package/dist/infineon-design-system-stencil/{p-6fd710a6.entry.js.map → p-169f26ae.entry.js.map} +1 -1
  111. package/dist/infineon-design-system-stencil/p-39561a49.entry.js +2 -0
  112. package/dist/infineon-design-system-stencil/p-39561a49.entry.js.map +1 -0
  113. package/dist/infineon-design-system-stencil/p-3d77ef02.entry.js +2 -0
  114. package/dist/infineon-design-system-stencil/{p-81f0d6ad.entry.js.map → p-3d77ef02.entry.js.map} +1 -1
  115. package/dist/infineon-design-system-stencil/p-4da5a2a5.entry.js +2 -0
  116. package/dist/infineon-design-system-stencil/p-4da5a2a5.entry.js.map +1 -0
  117. package/dist/infineon-design-system-stencil/p-4fba0543.entry.js +2 -0
  118. package/dist/infineon-design-system-stencil/{p-7b705420.entry.js.map → p-4fba0543.entry.js.map} +1 -1
  119. package/dist/infineon-design-system-stencil/p-5e3d0ff0.entry.js +2 -0
  120. package/dist/infineon-design-system-stencil/p-5e3d0ff0.entry.js.map +1 -0
  121. package/dist/infineon-design-system-stencil/p-5fb3eb8b.entry.js +2 -0
  122. package/dist/infineon-design-system-stencil/p-5fb3eb8b.entry.js.map +1 -0
  123. package/dist/infineon-design-system-stencil/{p-f1ba768a.entry.js → p-65bc82a4.entry.js} +2 -2
  124. package/dist/infineon-design-system-stencil/p-65bc82a4.entry.js.map +1 -0
  125. package/dist/infineon-design-system-stencil/p-6e115707.entry.js +2 -0
  126. package/dist/infineon-design-system-stencil/{p-1b5dce92.entry.js.map → p-6e115707.entry.js.map} +1 -1
  127. package/dist/infineon-design-system-stencil/p-8a58c2be.entry.js +2 -0
  128. package/dist/infineon-design-system-stencil/p-8a58c2be.entry.js.map +1 -0
  129. package/dist/infineon-design-system-stencil/p-B85MJLTf.js +2 -0
  130. package/dist/infineon-design-system-stencil/p-B85MJLTf.js.map +1 -0
  131. package/dist/infineon-design-system-stencil/{p-Beav1bNT.js → p-DMLRPGid.js} +3 -3
  132. package/dist/infineon-design-system-stencil/{p-Beav1bNT.js.map → p-DMLRPGid.js.map} +1 -1
  133. package/dist/infineon-design-system-stencil/p-a85754a5.entry.js +3 -0
  134. package/dist/infineon-design-system-stencil/p-a85754a5.entry.js.map +1 -0
  135. package/dist/infineon-design-system-stencil/p-abd8bd80.entry.js +2 -0
  136. package/dist/infineon-design-system-stencil/p-abd8bd80.entry.js.map +1 -0
  137. package/dist/infineon-design-system-stencil/p-fcae5dc1.entry.js +2 -0
  138. package/dist/infineon-design-system-stencil/{p-646620f9.entry.js.map → p-fcae5dc1.entry.js.map} +1 -1
  139. package/dist/infineon-design-system-stencil/p-ff4cc197.entry.js +2 -0
  140. package/dist/infineon-design-system-stencil/p-ff4cc197.entry.js.map +1 -0
  141. package/dist/types/components/table-advanced-version/table.d.ts +0 -1
  142. package/package.json +1 -1
  143. package/dist/cjs/ifx-button.ifx-checkbox.ifx-chip.ifx-chip-item.ifx-icon.ifx-icon-button.ifx-indicator.ifx-pagination.ifx-select.ifx-table.entry.cjs.js.map +0 -1
  144. package/dist/cjs/ifx-button_10.cjs.entry.js +0 -9601
  145. package/dist/cjs/ifx-button_10.cjs.entry.js.map +0 -1
  146. package/dist/esm/ifx-button.ifx-checkbox.ifx-chip.ifx-chip-item.ifx-icon.ifx-icon-button.ifx-indicator.ifx-pagination.ifx-select.ifx-table.entry.js.map +0 -1
  147. package/dist/esm/ifx-button_10.entry.js +0 -9590
  148. package/dist/esm/ifx-button_10.entry.js.map +0 -1
  149. package/dist/infineon-design-system-stencil/ifx-button.ifx-checkbox.ifx-chip.ifx-chip-item.ifx-icon.ifx-icon-button.ifx-indicator.ifx-pagination.ifx-select.ifx-table.entry.esm.js.map +0 -1
  150. package/dist/infineon-design-system-stencil/p-1b5dce92.entry.js +0 -2
  151. package/dist/infineon-design-system-stencil/p-330f97aa.entry.js +0 -3
  152. package/dist/infineon-design-system-stencil/p-330f97aa.entry.js.map +0 -1
  153. package/dist/infineon-design-system-stencil/p-646620f9.entry.js +0 -2
  154. package/dist/infineon-design-system-stencil/p-6fd710a6.entry.js +0 -2
  155. package/dist/infineon-design-system-stencil/p-7b705420.entry.js +0 -2
  156. package/dist/infineon-design-system-stencil/p-81f0d6ad.entry.js +0 -2
  157. package/dist/infineon-design-system-stencil/p-f1ba768a.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["actionListItemCss","ActionListItem","constructor","hostRef","this","target","disabled","handleMainClick","event","preventDefault","stopPropagation","leadingElement","_a","host","shadowRoot","querySelector","trailingElement","_b","contains","ifxActionListItemClick","emit","value","href","component","window","open","location","handleLeadingClick","currentElement","isInteractiveElement","parentElement","handleTrailingClick","element","tagName","toUpperCase","interactiveInfineonComponents","includes","handleMainKeyDown","key","handleLeadingKeyDown","leadingSlot","assignedElements","firstInteractive","find","el","focus","click","handleTrailingKeyDown","trailingSlot","updateSlotElementsDisabledState","interactiveComponents","slots","querySelectorAll","forEach","slottedElement","toLowerCase","setElementDisabledState","componentTag","nestedElements","nestedElement","setAttribute","removeAttribute","onDisabledChange","hasSlotContent","slotName","slot","componentDidLoad","componentDidUpdate","render","isClickable","ariaLabel","itemAriaLabel","itemTitle","description","hasLeadingContent","hasTrailingContent","h","class","classNames","role","tabIndex","undefined","onClick","onKeyDown","name"],"sources":["src/components/action-list/action-list-item.scss?tag=ifx-action-list-item&encapsulation=shadow","src/components/action-list/action-list-item.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n.action-list-item {\n display: flex;\n align-items: center;\n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n background: tokens.$ifxColorBaseWhite;\n transition: background-color 0.2s ease;\n cursor: default;\n\n &--clickable {\n cursor: pointer;\n\n &:hover:not(.action-list-item--disabled) {\n background: tokens.$ifxColorEngineering100;\n }\n\n &:focus:not(.action-list-item--disabled) {\n outline: none;\n //outline: 2px solid tokens.$ifxColorOcean500;\n //outline-offset: -2px;\n background: tokens.$ifxColorEngineering100;\n }\n\n &:active:not(.action-list-item--disabled) {\n background: tokens.$ifxColorEngineering200;\n }\n }\n\n &--disabled {\n // Apply disabled color to all slotted icons\n ::slotted(ifx-icon) {\n color: tokens.$ifxColorEngineering300;\n }\n\n // Also apply to nested icons within slotted elements\n ::slotted(*) {\n ifx-icon {\n color: tokens.$ifxColorEngineering300;\n }\n }\n }\n\n &__leading {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: tokens.$ifxSpace200;\n flex-shrink: 0;\n }\n\n &__content {\n flex: 1;\n min-width: 0; // Allows text to truncate\n }\n\n &__title {\n font-weight: tokens.$ifxFontWeightSemibold;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n color: tokens.$ifxColorBaseBlack;\n\n // Truncate long titles\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n // Disabled state\n .action-list-item--disabled & {\n color: tokens.$ifxColorEngineering300;\n }\n }\n\n &__description {\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n color: tokens.$ifxColorEngineering500;\n margin-top: tokens.$ifxSpace25;\n\n // Disabled state\n .action-list-item--disabled & {\n color: tokens.$ifxColorEngineering300;\n }\n }\n\n &__trailing {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: tokens.$ifxSpace200;\n flex-shrink: 0;\n gap: 16px;\n }\n}","import { Component, h, Prop, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport classNames from 'classnames';\n\nexport interface ActionListItemClickEvent {\n value?: string;\n href?: string;\n target?: string;\n component?: ActionListItem;\n}\n\n@Component({\n tag: 'ifx-action-list-item',\n styleUrl: 'action-list-item.scss',\n shadow: true,\n})\nexport class ActionListItem {\n @Element() host: HTMLElement;\n\n /**\n * The title text displayed in the item\n */\n @Prop() itemTitle: string;\n\n /**\n * The description text displayed below the title\n */\n @Prop() description?: string;\n\n /**\n * Value associated with this item\n */\n @Prop() value?: string;\n\n /**\n * URL to navigate to when item is clicked\n */\n @Prop() href?: string;\n\n /**\n * Target for the link navigation\n * @default '_self'\n */\n @Prop() target: string = '_self';\n\n /**\n * Controls whether the item is disabled\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Aria label for accessibility support\n */\n @Prop() itemAriaLabel?: string;\n\n /**\n * Event emitted when the main item area is clicked\n */\n @Event() ifxActionListItemClick: EventEmitter<ActionListItemClickEvent>;\n\n @Watch('disabled')\n onDisabledChange() {\n // Update interactive elements when disabled state changes\n this.updateSlotElementsDisabledState();\n }\n\n private handleMainClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Check if clicked element is inside leading or trailing areas\n const leadingElement = this.host.shadowRoot?.querySelector('.action-list-item__leading');\n const trailingElement = this.host.shadowRoot?.querySelector('.action-list-item__trailing');\n\n if (leadingElement?.contains(event.target as Node) || trailingElement?.contains(event.target as Node)) {\n return; // Don't trigger main click if clicking on leading/trailing areas\n }\n\n // Always emit main event when clicking on content area (text), regardless of interactive elements\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate (Link mode)\n // If no href is provided, only the event is emitted (Event mode)\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleLeadingClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n // Check if the clicked element or any of its parents is an interactive component\n let currentElement = target;\n while (currentElement && currentElement !== this.host) {\n if (this.isInteractiveElement(currentElement)) {\n // Interactive element clicked - stop propagation to prevent main event\n event.stopPropagation();\n return;\n }\n currentElement = currentElement.parentElement;\n }\n\n // Non-interactive element clicked - trigger main action\n event.stopPropagation();\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleTrailingClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n // Check if the clicked element or any of its parents is an interactive component\n let currentElement = target;\n while (currentElement && currentElement !== this.host) {\n if (this.isInteractiveElement(currentElement)) {\n // Interactive element clicked - stop propagation to prevent main event\n event.stopPropagation();\n return;\n }\n currentElement = currentElement.parentElement;\n }\n\n // Non-interactive element clicked - trigger main action\n event.stopPropagation();\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private isInteractiveElement = (element: HTMLElement): boolean => {\n // Get the tag name, handling both custom elements and standard HTML\n const tagName = element.tagName.toUpperCase();\n\n // List of Infineon components that should block main event\n const interactiveInfineonComponents = [\n 'IFX-BUTTON',\n 'IFX-CHECKBOX',\n 'IFX-SWITCH'\n ];\n\n // Check if it's an interactive Infineon component\n return interactiveInfineonComponents.includes(tagName);\n };\n\n private handleMainKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n // Always trigger main action via keyboard, regardless of interactive elements\n this.handleMainClick(event as any);\n }\n };\n\n private handleLeadingKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n const leadingSlot = this.host.shadowRoot?.querySelector('slot[name=\"leading\"]') as HTMLSlotElement;\n const assignedElements = leadingSlot?.assignedElements() || [];\n\n // Find first interactive element and activate it\n const firstInteractive = assignedElements.find(el =>\n this.isInteractiveElement(el as HTMLElement)\n ) as HTMLElement;\n\n if (firstInteractive) {\n firstInteractive.focus();\n firstInteractive.click();\n }\n }\n };\n\n private handleTrailingKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n const trailingSlot = this.host.shadowRoot?.querySelector('slot[name=\"trailing\"]') as HTMLSlotElement;\n const assignedElements = trailingSlot?.assignedElements() || [];\n\n // Find first interactive element and activate it\n const firstInteractive = assignedElements.find(el =>\n this.isInteractiveElement(el as HTMLElement)\n ) as HTMLElement;\n\n if (firstInteractive) {\n firstInteractive.focus();\n firstInteractive.click();\n }\n }\n };\n\n private hasSlotContent(slotName: string): boolean {\n const slot = this.host.querySelector(`[slot=\"${slotName}\"]`);\n return !!slot;\n }\n\n componentDidLoad() {\n // Apply disabled state to interactive elements in slots\n this.updateSlotElementsDisabledState();\n }\n\n componentDidUpdate() {\n // Apply disabled state to interactive elements in slots when disabled prop changes\n this.updateSlotElementsDisabledState();\n }\n\n private updateSlotElementsDisabledState = () => {\n // Only handle interactive components that should be disabled\n const interactiveComponents = ['ifx-checkbox', 'ifx-switch', 'ifx-button'];\n\n // Get all slotted elements\n const slots = this.host.querySelectorAll('[slot]');\n\n slots.forEach(slottedElement => {\n // Check if the slotted element itself is an interactive component\n if (interactiveComponents.includes(slottedElement.tagName.toLowerCase())) {\n this.setElementDisabledState(slottedElement as HTMLElement);\n }\n\n // Also check for nested interactive components within the slotted element\n interactiveComponents.forEach(componentTag => {\n const nestedElements = slottedElement.querySelectorAll(componentTag);\n nestedElements.forEach(nestedElement => {\n this.setElementDisabledState(nestedElement as HTMLElement);\n });\n });\n });\n };\n\n private setElementDisabledState = (element: HTMLElement) => {\n if (this.disabled) {\n element.setAttribute('disabled', 'true');\n } else {\n element.removeAttribute('disabled');\n }\n }; render() {\n const isClickable = !this.disabled && (this.href || this.value);\n const ariaLabel = this.itemAriaLabel || `${this.itemTitle}${this.description ? ` - ${this.description}` : ''}`;\n const hasLeadingContent = this.hasSlotContent('leading');\n const hasTrailingContent = this.hasSlotContent('trailing');\n\n return (\n <div\n class={classNames(\n 'action-list-item',\n this.disabled && 'action-list-item--disabled',\n isClickable && 'action-list-item--clickable'\n )}\n role=\"listitem\"\n tabIndex={isClickable ? 0 : -1}\n aria-label={ariaLabel}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleMainClick}\n onKeyDown={this.handleMainKeyDown}\n >\n {/* Leading Item Container - only render if content exists */}\n {hasLeadingContent && (\n <div\n class=\"action-list-item__leading\"\n onClick={this.handleLeadingClick}\n onKeyDown={this.handleLeadingKeyDown}\n >\n <slot name=\"leading\"></slot>\n </div>\n )}\n\n {/* Text Container */}\n <div class=\"action-list-item__content\">\n <div class=\"action-list-item__title\">\n {this.itemTitle}\n </div>\n {this.description && (\n <div class=\"action-list-item__description\">\n {this.description}\n </div>\n )}\n </div>\n\n {/* Trailing Item Container - only render if content exists */}\n {hasTrailingContent && (\n <div\n class=\"action-list-item__trailing\"\n onClick={this.handleTrailingClick}\n onKeyDown={this.handleTrailingKeyDown}\n >\n <slot name=\"trailing\"></slot>\n </div>\n )}\n </div>\n );\n }\n}"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["actionListItemCss","ActionListItem","constructor","hostRef","this","target","disabled","handleMainClick","event","preventDefault","stopPropagation","leadingElement","_a","host","shadowRoot","querySelector","trailingElement","_b","contains","ifxActionListItemClick","emit","value","href","component","window","open","location","handleLeadingClick","currentElement","isInteractiveElement","parentElement","handleTrailingClick","element","tagName","toUpperCase","interactiveInfineonComponents","includes","handleMainKeyDown","key","handleLeadingKeyDown","leadingSlot","assignedElements","firstInteractive","find","el","focus","click","handleTrailingKeyDown","trailingSlot","updateSlotElementsDisabledState","interactiveComponents","slots","querySelectorAll","forEach","slottedElement","toLowerCase","setElementDisabledState","componentTag","nestedElements","nestedElement","setAttribute","removeAttribute","onDisabledChange","hasSlotContent","slotName","slot","componentDidLoad","componentDidUpdate","render","isClickable","ariaLabel","itemAriaLabel","itemTitle","description","hasLeadingContent","hasTrailingContent","h","class","classNames","role","tabIndex","undefined","onClick","onKeyDown","name"],"sources":["src/components/action-list/action-list-item.scss?tag=ifx-action-list-item&encapsulation=shadow","src/components/action-list/action-list-item.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n.action-list-item {\n display: flex;\n align-items: center;\n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n background: tokens.$ifxColorBaseWhite;\n transition: background-color 0.2s ease;\n cursor: default;\n\n &--clickable {\n cursor: pointer;\n\n &:hover:not(.action-list-item--disabled) {\n background: tokens.$ifxColorEngineering100;\n }\n\n &:focus:not(.action-list-item--disabled) {\n outline: none;\n //outline: 2px solid tokens.$ifxColorOcean500;\n //outline-offset: -2px;\n background: tokens.$ifxColorEngineering100;\n }\n\n &:active:not(.action-list-item--disabled) {\n background: tokens.$ifxColorEngineering200;\n }\n }\n\n &--disabled {\n // Apply disabled color to all slotted icons\n ::slotted(ifx-icon) {\n color: tokens.$ifxColorEngineering300;\n }\n\n // Also apply to nested icons within slotted elements\n ::slotted(*) {\n ifx-icon {\n color: tokens.$ifxColorEngineering300;\n }\n }\n }\n\n &__leading {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: tokens.$ifxSpace200;\n flex-shrink: 0;\n }\n\n &__content {\n flex: 1;\n min-width: 0; // Allows text to truncate\n }\n\n &__title {\n font-weight: tokens.$ifxFontWeightSemibold;\n font-size: tokens.$ifxFontSizeM;\n line-height: tokens.$ifxLineHeightM;\n color: tokens.$ifxColorBaseBlack;\n\n // Truncate long titles\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n // Disabled state\n .action-list-item--disabled & {\n color: tokens.$ifxColorEngineering300;\n }\n }\n\n &__description {\n font-size: tokens.$ifxFontSizeS;\n line-height: tokens.$ifxLineHeightS;\n color: tokens.$ifxColorEngineering500;\n margin-top: tokens.$ifxSpace25;\n\n // Disabled state\n .action-list-item--disabled & {\n color: tokens.$ifxColorEngineering300;\n }\n }\n\n &__trailing {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: tokens.$ifxSpace200;\n flex-shrink: 0;\n gap: 16px;\n }\n}","import { Component, h, Prop, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport classNames from 'classnames';\n\nexport interface ActionListItemClickEvent {\n value?: string;\n href?: string;\n target?: string;\n component?: ActionListItem;\n}\n\n@Component({\n tag: 'ifx-action-list-item',\n styleUrl: 'action-list-item.scss',\n shadow: true,\n})\nexport class ActionListItem {\n @Element() host: HTMLElement;\n\n /**\n * The title text displayed in the item\n */\n @Prop() itemTitle: string;\n\n /**\n * The description text displayed below the title\n */\n @Prop() description?: string;\n\n /**\n * Value associated with this item\n */\n @Prop() value?: string;\n\n /**\n * URL to navigate to when item is clicked\n */\n @Prop() href?: string;\n\n /**\n * Target for the link navigation\n * @default '_self'\n */\n @Prop() target: string = '_self';\n\n /**\n * Controls whether the item is disabled\n * @default false\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Aria label for accessibility support\n */\n @Prop() itemAriaLabel?: string;\n\n /**\n * Event emitted when the main item area is clicked\n */\n @Event() ifxActionListItemClick: EventEmitter<ActionListItemClickEvent>;\n\n @Watch('disabled')\n onDisabledChange() {\n // Update interactive elements when disabled state changes\n this.updateSlotElementsDisabledState();\n }\n\n private handleMainClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n // Check if clicked element is inside leading or trailing areas\n const leadingElement = this.host.shadowRoot?.querySelector('.action-list-item__leading');\n const trailingElement = this.host.shadowRoot?.querySelector('.action-list-item__trailing');\n\n if (leadingElement?.contains(event.target as Node) || trailingElement?.contains(event.target as Node)) {\n return; // Don't trigger main click if clicking on leading/trailing areas\n }\n\n // Always emit main event when clicking on content area (text), regardless of interactive elements\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate (Link mode)\n // If no href is provided, only the event is emitted (Event mode)\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleLeadingClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n // Check if the clicked element or any of its parents is an interactive component\n let currentElement = target;\n while (currentElement && currentElement !== this.host) {\n if (this.isInteractiveElement(currentElement)) {\n // Interactive element clicked - stop propagation to prevent main event\n event.stopPropagation();\n return;\n }\n currentElement = currentElement.parentElement;\n }\n\n // Non-interactive element clicked - trigger main action\n event.stopPropagation();\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleTrailingClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const target = event.target as HTMLElement;\n\n // Check if the clicked element or any of its parents is an interactive component\n let currentElement = target;\n while (currentElement && currentElement !== this.host) {\n if (this.isInteractiveElement(currentElement)) {\n // Interactive element clicked - stop propagation to prevent main event\n event.stopPropagation();\n return;\n }\n currentElement = currentElement.parentElement;\n }\n\n // Non-interactive element clicked - trigger main action\n event.stopPropagation();\n this.ifxActionListItemClick.emit({\n value: this.value,\n href: this.href,\n target: this.target,\n component: this,\n });\n\n // If href is provided, automatically navigate\n if (this.href) {\n if (this.target === '_blank') {\n window.open(this.href, this.target);\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private isInteractiveElement = (element: HTMLElement): boolean => {\n // Get the tag name, handling both custom elements and standard HTML\n const tagName = element.tagName.toUpperCase();\n\n // List of Infineon components that should block main event\n const interactiveInfineonComponents = [\n 'IFX-BUTTON',\n 'IFX-CHECKBOX',\n 'IFX-SWITCH'\n ];\n\n // Check if it's an interactive Infineon component\n return interactiveInfineonComponents.includes(tagName);\n };\n\n private handleMainKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n // Always trigger main action via keyboard, regardless of interactive elements\n this.handleMainClick(event as any);\n }\n };\n\n private handleLeadingKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n const leadingSlot = this.host.shadowRoot?.querySelector('slot[name=\"leading\"]') as HTMLSlotElement;\n const assignedElements = leadingSlot?.assignedElements() || [];\n\n // Find first interactive element and activate it\n const firstInteractive = assignedElements.find(el =>\n this.isInteractiveElement(el as HTMLElement)\n ) as HTMLElement;\n\n if (firstInteractive) {\n firstInteractive.focus();\n firstInteractive.click();\n }\n }\n };\n\n private handleTrailingKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n\n const trailingSlot = this.host.shadowRoot?.querySelector('slot[name=\"trailing\"]') as HTMLSlotElement;\n const assignedElements = trailingSlot?.assignedElements() || [];\n\n // Find first interactive element and activate it\n const firstInteractive = assignedElements.find(el =>\n this.isInteractiveElement(el as HTMLElement)\n ) as HTMLElement;\n\n if (firstInteractive) {\n firstInteractive.focus();\n firstInteractive.click();\n }\n }\n };\n\n private hasSlotContent(slotName: string): boolean {\n const slot = this.host.querySelector(`[slot=\"${slotName}\"]`);\n return !!slot;\n }\n\n componentDidLoad() {\n // Apply disabled state to interactive elements in slots\n this.updateSlotElementsDisabledState();\n }\n\n componentDidUpdate() {\n // Apply disabled state to interactive elements in slots when disabled prop changes\n this.updateSlotElementsDisabledState();\n }\n\n private updateSlotElementsDisabledState = () => {\n // Only handle interactive components that should be disabled\n const interactiveComponents = ['ifx-checkbox', 'ifx-switch', 'ifx-button'];\n\n // Get all slotted elements\n const slots = this.host.querySelectorAll('[slot]');\n\n slots.forEach(slottedElement => {\n // Check if the slotted element itself is an interactive component\n if (interactiveComponents.includes(slottedElement.tagName.toLowerCase())) {\n this.setElementDisabledState(slottedElement as HTMLElement);\n }\n\n // Also check for nested interactive components within the slotted element\n interactiveComponents.forEach(componentTag => {\n const nestedElements = slottedElement.querySelectorAll(componentTag);\n nestedElements.forEach(nestedElement => {\n this.setElementDisabledState(nestedElement as HTMLElement);\n });\n });\n });\n };\n\n private setElementDisabledState = (element: HTMLElement) => {\n if (this.disabled) {\n element.setAttribute('disabled', 'true');\n } else {\n element.removeAttribute('disabled');\n }\n }; render() {\n const isClickable = !this.disabled && (this.href || this.value);\n const ariaLabel = this.itemAriaLabel || `${this.itemTitle}${this.description ? ` - ${this.description}` : ''}`;\n const hasLeadingContent = this.hasSlotContent('leading');\n const hasTrailingContent = this.hasSlotContent('trailing');\n\n return (\n <div\n class={classNames(\n 'action-list-item',\n this.disabled && 'action-list-item--disabled',\n isClickable && 'action-list-item--clickable'\n )}\n role=\"listitem\"\n tabIndex={isClickable ? 0 : -1}\n aria-label={ariaLabel}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleMainClick}\n onKeyDown={this.handleMainKeyDown}\n >\n {/* Leading Item Container - only render if content exists */}\n {hasLeadingContent && (\n <div\n class=\"action-list-item__leading\"\n onClick={this.handleLeadingClick}\n onKeyDown={this.handleLeadingKeyDown}\n >\n <slot name=\"leading\"></slot>\n </div>\n )}\n\n {/* Text Container */}\n <div class=\"action-list-item__content\">\n <div class=\"action-list-item__title\">\n {this.itemTitle}\n </div>\n {this.description && (\n <div class=\"action-list-item__description\">\n {this.description}\n </div>\n )}\n </div>\n\n {/* Trailing Item Container - only render if content exists */}\n {hasTrailingContent && (\n <div\n class=\"action-list-item__trailing\"\n onClick={this.handleTrailingClick}\n onKeyDown={this.handleTrailingKeyDown}\n >\n <slot name=\"trailing\"></slot>\n </div>\n )}\n </div>\n );\n }\n}"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as i,h as n,a as e}from"./p-PqnYwNKt.js";import{d as t,t as r}from"./p-DcmcuUOA.js";import{i as a}from"./p-Bw2fh5LT.js";const o=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:inline-flex}.indicator__container .dot__wrapper{display:flex;width:8px;height:8px;justify-content:center;align-items:center;flex-shrink:0;border-radius:50%;background-color:#0A8276}.indicator__container .number__container{height:16px;display:inline-flex;padding:0;min-width:16px;justify-content:center;align-items:center;border-radius:100px;background-color:#0A8276}.indicator__container .number__container .number__wrapper{padding:0 4px;color:#FFFFFF;text-align:center;font-size:0.875rem;font-style:normal;font-weight:600;line-height:16px}.indicator__container .number__container.inverted{background-color:#FFFFFF}.indicator__container .number__container.inverted .number__wrapper{color:#0A8276}';const s=class{constructor(n){i(this,n);this.inverted=false;this.variant="number";this.number=0}handleNumber(){this.filteredNumber=!isNaN(this.number)&&this.number>99?"99+":this.number}componentWillLoad(){this.handleNumber()}async componentDidLoad(){if(!a(this.el)){const i=t();r("ifx-indicator",await i)}}componentWillUpdate(){this.handleNumber()}render(){return n("div",{key:"35211d70a31d9bf69b84614694d4669877c8a6d9","aria-label":this.ariaLabel,class:"indicator__container"},this.variant==="number"&&n("div",{key:"888f42cb6ad70bb973b62468734bae7abf73f3d9",class:`number__container ${this.inverted?"inverted":""}`},n("div",{key:"4578b32ca5e7b7747eb7ae729e9732d06da3fcbc",class:"number__wrapper"},this.filteredNumber)),this.variant==="dot"&&n("div",{key:"2b3cd2500d4d64bbb27131201ca2d56f720209a0",class:"dot__wrapper"}))}get el(){return e(this)}};s.style=o;export{s as ifx_indicator};
2
+ //# sourceMappingURL=p-39561a49.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["indicatorCss","Indicator","constructor","hostRef","this","inverted","variant","number","handleNumber","filteredNumber","isNaN","componentWillLoad","componentDidLoad","isNestedInIfxComponent","el","framework","detectFramework","trackComponent","componentWillUpdate","render","h","key","ariaLabel","class"],"sources":["src/components/indicator/indicator.scss?tag=ifx-indicator&encapsulation=shadow","src/components/indicator/indicator.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: inline-flex;\n}\n\n.indicator__container { \n & .dot__wrapper { \n display: flex;\n width: 8px;\n height: 8px;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n border-radius: 50%;\n background-color: tokens.$ifxColorOcean500;\n }\n\n & .number__container {\n height: 16px;\n display: inline-flex;\n padding: 0; \n min-width: 16px; \n justify-content: center;\n align-items: center;\n border-radius: 100px;\n background-color: tokens.$ifxColorOcean500;\n\n & .number__wrapper {\n padding: 0 4px;\n color: tokens.$ifxColorBaseWhite;\n text-align: center;\n font-size: tokens.$ifxFontSizeS;\n font-style: normal;\n font-weight: tokens.$ifxFontWeightSemibold;\n line-height: 16px;\n }\n\n &.inverted {\n background-color: tokens.$ifxColorBaseWhite;\n\n & .number__wrapper {\n color: tokens.$ifxColorOcean500;\n }\n }\n }\n}\n\n\n","import { Component, h, Prop, Element, 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\n@Component({\n tag: 'ifx-indicator',\n styleUrl: 'indicator.scss',\n shadow: true\n})\nexport class Indicator {\n @Element() el;\n @State() filteredNumber: string | number;\n @Prop() inverted: boolean = false;\n @Prop() ariaLabel: string | null;\n @Prop() variant: string = 'number'\n @Prop() number: number = 0;\n\n handleNumber() {\n this.filteredNumber = !isNaN(this.number) && this.number > 99 ? '99+' : this.number;\n }\n\n componentWillLoad() { \n this.handleNumber()\n }\n\n async componentDidLoad() { \n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-indicator', await framework)\n }\n }\n\n componentWillUpdate() {\n this.handleNumber()\n }\n\n render() {\n return (\n <div aria-label={this.ariaLabel} class='indicator__container'>\n {this.variant === 'number' && \n <div class={`number__container ${this.inverted ? 'inverted' : \"\"}`}>\n <div class=\"number__wrapper\">\n {this.filteredNumber}\n </div> \n </div>}\n {this.variant === 'dot' && <div class=\"dot__wrapper\"></div>}\n </div>\n );\n }\n}"],"mappings":"iIAAA,MAAMA,EAAe,swB,MCURC,EAAS,MALtB,WAAAC,CAAAC,G,UAQUC,KAAQC,SAAY,MAEpBD,KAAOE,QAAW,SAClBF,KAAMG,OAAW,CAkC1B,CAhCC,YAAAC,GACEJ,KAAKK,gBAAkBC,MAAMN,KAAKG,SAAWH,KAAKG,OAAS,GAAK,MAAQH,KAAKG,M,CAG/E,iBAAAI,GACEP,KAAKI,c,CAGP,sBAAMI,GACJ,IAAIC,EAAuBT,KAAKU,IAAK,CACnC,MAAMC,EAAYC,IAClBC,EAAe,sBAAuBF,E,EAI1C,mBAAAG,GACEd,KAAKI,c,CAGP,MAAAW,GACE,OACEC,EAAA,OAAAC,IAAA,wDAAiBjB,KAAKkB,UAAWC,MAAM,wBACrCnB,KAAKE,UAAY,UAClBc,EAAA,OAAAC,IAAA,2CAAKE,MAAO,qBAAqBnB,KAAKC,SAAW,WAAa,MAC3De,EAAK,OAAAC,IAAA,2CAAAE,MAAM,mBACRnB,KAAKK,iBAGVL,KAAKE,UAAY,OAASc,EAAA,OAAAC,IAAA,2CAAKE,MAAM,iB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,h as i,a as t}from"./p-PqnYwNKt.js";import{d as n,t as l}from"./p-DcmcuUOA.js";import{i as o}from"./p-Bw2fh5LT.js";import{c as r}from"./p-DMLRPGid.js";import"./p-B85MJLTf.js";const s=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:inline-flex}.link{display:inline-flex;align-items:center;font-weight:400;font-size:1rem;text-decoration:none;color:#0A8276;gap:8px;line-height:1.6;font-family:var(--ifx-font-family)}.link:hover{cursor:pointer}.link:focus{outline-width:2px;outline-style:solid;outline-color:#0A8276;outline-offset:4px;border-radius:3px}.link.bold{font-weight:600}.link.bold:hover{text-decoration:underline}.link.bold:active{color:#08665C;font-style:normal;font-weight:600;text-decoration:underline}.link.underlined{text-decoration:underline;text-decoration-color:#0A8276;color:#1D1D1D;text-underline-offset:8px}.link.underlined:hover{color:#0A8276}.link.underlined:active{color:#0A8276}.link.underlined:disabled,.link.underlined.disabled{text-decoration-color:#BFBBBB}.link.title{text-decoration:none;font-weight:600;color:#1D1D1D}.link.title:hover{color:#0A8276}.link.title:active{color:#08665C}.link.menu{font-weight:400;font-style:normal;line-height:26px;color:#1D1D1D}.link.menu:hover{color:#0A8276}.link.menu:active{color:#08665C}.link.small{font-size:0.875rem}.link.medium{font-size:1rem}.link.large{font-size:1.125rem}.link.extraLarge{font-size:1.25rem}.link.underline{text-decoration:underline}.link:disabled,.link.disabled{color:#BFBBBB;cursor:default;pointer-events:none}';const a=class{constructor(i){e(this,i);this.href=undefined;this.target="_self";this.variant="bold";this.disabled=false;this.internalHref="";this.internalTarget="";this.internalVariant=""}setInternalStates(){if(this.href){this.internalHref=this.href.trim()}else{this.internalHref=undefined}this.internalTarget=this.target.trim();this.internalVariant=this.variant.trim().toLowerCase()}componentWillRender(){this.setInternalStates()}handleKeyDown(e){if(this.disabled){e.preventDefault()}else if(e.key==="Enter"){e.preventDefault()}}async componentDidLoad(){if(!o(this.el)){const e=n();l("ifx-link",await e)}}render(){return i("a",{key:"8b3aaa77c9de243e5a6c8c25eb1173ddb4cb0aef",tabindex:"0",role:"link","aria-label":this.ariaLabel,"aria-disabled":this.disabled||!this.internalHref,href:this.disabled?undefined:this.internalHref,download:this.download,target:this.internalTarget,class:this.linkClassNames()},i("slot",{key:"5ed92a06a4564b6c94324117edc49420a2dd21be"}))}getSizeClass(){const e=this.size==="s"?"small":null;const i=this.size==="m"?"medium":null;const t=this.size==="l"?"large":null;const n=this.size==="xl"?"extraLarge":null;if(e){return e}else if(i){return i}else if(t){return t}else if(n&&this.internalVariant==="underlined"){return"large"}else if(n&&this.internalVariant!=="underlined"){return n}else return""}getVariantClass(){const e=this.internalVariant==="bold"?"bold":null;const i=this.internalVariant==="title"?"title":null;const t=this.internalVariant==="underlined"?"underlined":null;const n=this.internalVariant==="menu"?"menu":null;if(e){return e}else if(i){return i}else if(t){return t}else if(n){return n}else return e}linkClassNames(){return r("link","primary",this.getVariantClass(),this.getSizeClass(),this.disabled?"disabled":"")}get el(){return t(this)}};a.style=s;export{a as ifx_link};
2
+ //# sourceMappingURL=p-3d77ef02.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["linkCss","Link","constructor","hostRef","this","href","undefined","target","variant","disabled","internalHref","internalTarget","internalVariant","setInternalStates","trim","toLowerCase","componentWillRender","handleKeyDown","event","preventDefault","key","componentDidLoad","isNestedInIfxComponent","el","framework","detectFramework","trackComponent","render","h","tabindex","role","ariaLabel","download","class","linkClassNames","getSizeClass","small","size","medium","large","extraLarge","getVariantClass","bold","title","underlined","menu","classNames"],"sources":["src/components/link/link.scss?tag=ifx-link&encapsulation=shadow","src/components/link/link.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: inline-flex;\n}\n\n.link {\n display: inline-flex;\n align-items: center;\n font-weight: 400;\n font-size: tokens.$ifxFontSizeM;\n text-decoration: none;\n color: tokens.$ifxColorOcean500;\n gap: tokens.$ifxSpace100;\n line-height: 1.6;\n font-family: var(--ifx-font-family); // tokens.$ifxFontFamilyBody;\n\n\n\n &:hover { \n cursor: pointer;\n }\n\n &:focus {\n outline-width: 2px;\n outline-style: solid;\n outline-color: #0A8276;\n outline-offset: 4px;\n border-radius: 3px;\n }\n\n &.bold {\n font-weight: tokens.$ifxFontWeightSemibold;\n\n &:hover {\n text-decoration: underline;\n }\n\n &:active {\n color: #08665C;\n font-style: normal;\n font-weight: 600;\n text-decoration: underline;\n }\n\n }\n\n &.underlined {\n text-decoration: underline;\n text-decoration-color: tokens.$ifxColorOcean500;\n color: #1D1D1D;\n text-underline-offset: 8px;\n \n &:hover {\n color: tokens.$ifxColorOcean500;;\n }\n \n &:active {\n color: #0A8276;\n }\n\n &:disabled,\n &.disabled {\n text-decoration-color: tokens.$ifxColorEngineering300;\n }\n }\n\n &.title {\n text-decoration: none;\n font-weight: tokens.$ifxFontWeightSemibold;\n color: #1D1D1D;\n\n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n\n &:active {\n color: #08665C;\n }\n }\n\n &.menu {\n font-weight: 400;\n font-style: normal;\n line-height: 26px;\n color: #1D1D1D;\n\n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n\n &:active {\n color: #08665C;\n }\n }\n\n &.small {\n font-size: tokens.$ifxFontSizeS;\n }\n\n &.medium {\n font-size: tokens.$ifxFontSizeM;\n }\n\n &.large {\n font-size: tokens.$ifxFontSizeL;\n }\n\n &.extraLarge {\n font-size: tokens.$ifxFontSizeXl;\n }\n\n &.underline {\n text-decoration: underline;\n }\n\n &:disabled,\n &.disabled {\n color: tokens.$ifxColorEngineering300;\n cursor: default;\n pointer-events: none;\n }\n\n}","import { Component, Prop, h, State, 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 \n@Component({\n tag: 'ifx-link',\n styleUrl: 'link.scss',\n shadow: true\n})\n\nexport class Link {\n @Element() el;\n @Prop() href: string = undefined;\n @Prop() target: string = '_self';\n @Prop() variant: string = 'bold';\n @Prop() size: string;\n @Prop() disabled: boolean = false;\n @Prop() download: string;\n @Prop() ariaLabel: string | null;\n @State() internalHref: string ='';\n @State() internalTarget: string = '';\n @State() internalVariant: string = '';\n\n setInternalStates() {\n if(this.href){\n this.internalHref = this.href.trim();\n }else{\n this.internalHref = undefined;\n }\n this.internalTarget = this.target.trim();\n this.internalVariant = this.variant.trim().toLowerCase();\n }\n\n componentWillRender(){\n this.setInternalStates();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n event.preventDefault();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n }\n }\n\n async componentDidLoad() { \n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-link', await framework)\n }\n }\n\n render() {\n return (\n <a\n tabindex=\"0\"\n role=\"link\"\n aria-label={this.ariaLabel}\n aria-disabled={this.disabled || !this.internalHref}\n href={this.disabled ? undefined : this.internalHref}\n download={this.download}\n target={this.internalTarget}\n class={this.linkClassNames()}>\n <slot></slot>\n </a>)\n }\n\n getSizeClass() {\n const small = this.size === 's' ? 'small' : null;\n const medium = this.size === 'm' ? 'medium' : null;\n const large = this.size === 'l' ? 'large' : null;\n const extraLarge = this.size === 'xl' ? 'extraLarge' : null;\n\n if (small) {\n return small;\n } else if (medium) {\n return medium;\n } else if (large) {\n return large;\n } else if (extraLarge && this.internalVariant === 'underlined') {\n return 'large';\n } else if (extraLarge && this.internalVariant !== 'underlined') {\n return extraLarge;\n } else return \"\";\n }\n\n getVariantClass() {\n const bold = this.internalVariant === 'bold' ? 'bold' : null;\n const title = this.internalVariant === 'title' ? 'title' : null;\n const underlined = this.internalVariant === 'underlined' ? 'underlined' : null;\n const menu = this.internalVariant === 'menu' ? 'menu' : null;\n\n if (bold) {\n return bold\n } else if (title) {\n return title;\n } else if (underlined) {\n return underlined;\n } else if (menu) {\n return menu;\n } else return bold;\n }\n\n linkClassNames() {\n return classNames(\n 'link',\n 'primary',\n this.getVariantClass(),\n this.getSizeClass(),\n this.disabled ? 'disabled' : '',\n );\n }\n}"],"mappings":"qKAAA,MAAMA,EAAU,6zC,MCYHC,EAAI,MANjB,WAAAC,CAAAC,G,UAQUC,KAAIC,KAAWC,UACfF,KAAMG,OAAW,QACjBH,KAAOI,QAAW,OAElBJ,KAAQK,SAAY,MAGnBL,KAAYM,aAAU,GACtBN,KAAcO,eAAW,GACzBP,KAAeQ,gBAAW,EA2FpC,CAzFC,iBAAAC,GACE,GAAGT,KAAKC,KAAK,CACXD,KAAKM,aAAeN,KAAKC,KAAKS,M,KAC3B,CACHV,KAAKM,aAAeJ,S,CAEtBF,KAAKO,eAAiBP,KAAKG,OAAOO,OAClCV,KAAKQ,gBAAkBR,KAAKI,QAAQM,OAAOC,a,CAG7C,mBAAAC,GACEZ,KAAKS,mB,CAGP,aAAAI,CAAcC,GACZ,GAAId,KAAKK,SAAU,CACjBS,EAAMC,gB,MACD,GAAID,EAAME,MAAQ,QAAS,CAChCF,EAAMC,gB,EAIV,sBAAME,GACJ,IAAIC,EAAuBlB,KAAKmB,IAAK,CACnC,MAAMC,EAAYC,IAClBC,EAAe,iBAAkBF,E,EAIrC,MAAAG,GACE,OACEC,EACA,KAAAR,IAAA,2CAAAS,SAAS,IACPC,KAAK,OACO,aAAA1B,KAAK2B,UAAS,gBACX3B,KAAKK,WAAaL,KAAKM,aACtCL,KAAMD,KAAKK,SAAWH,UAAYF,KAAKM,aACvCsB,SAAU5B,KAAK4B,SACfzB,OAAQH,KAAKO,eACbsB,MAAO7B,KAAK8B,kBACZN,EAAa,QAAAR,IAAA,6C,CAInB,YAAAe,GACE,MAAMC,EAAQhC,KAAKiC,OAAS,IAAM,QAAU,KAC5C,MAAMC,EAASlC,KAAKiC,OAAS,IAAM,SAAW,KAC9C,MAAME,EAAQnC,KAAKiC,OAAS,IAAM,QAAU,KAC5C,MAAMG,EAAapC,KAAKiC,OAAS,KAAO,aAAe,KAEvD,GAAID,EAAO,CACT,OAAOA,C,MACF,GAAIE,EAAQ,CACjB,OAAOA,C,MACF,GAAIC,EAAO,CAChB,OAAOA,C,MACF,GAAIC,GAAcpC,KAAKQ,kBAAoB,aAAc,CAC9D,MAAO,O,MACF,GAAI4B,GAAcpC,KAAKQ,kBAAoB,aAAc,CAC9D,OAAO4B,C,MACF,MAAO,E,CAGhB,eAAAC,GACE,MAAMC,EAAOtC,KAAKQ,kBAAoB,OAAS,OAAS,KACxD,MAAM+B,EAAQvC,KAAKQ,kBAAoB,QAAU,QAAU,KAC3D,MAAMgC,EAAaxC,KAAKQ,kBAAoB,aAAe,aAAe,KAC1E,MAAMiC,EAAOzC,KAAKQ,kBAAoB,OAAS,OAAS,KAExD,GAAI8B,EAAM,CACR,OAAOA,C,MACF,GAAIC,EAAO,CAChB,OAAOA,C,MACF,GAAIC,EAAY,CACrB,OAAOA,C,MACF,GAAIC,EAAM,CACf,OAAOA,C,MACF,OAAOH,C,CAGhB,cAAAR,GACE,OAAOY,EACL,OACA,UACA1C,KAAKqC,kBACLrC,KAAK+B,eACL/B,KAAKK,SAAW,WAAa,G","ignoreList":[]}
1
+ {"version":3,"names":["linkCss","Link","constructor","hostRef","this","href","undefined","target","variant","disabled","internalHref","internalTarget","internalVariant","setInternalStates","trim","toLowerCase","componentWillRender","handleKeyDown","event","preventDefault","key","componentDidLoad","isNestedInIfxComponent","el","framework","detectFramework","trackComponent","render","h","tabindex","role","ariaLabel","download","class","linkClassNames","getSizeClass","small","size","medium","large","extraLarge","getVariantClass","bold","title","underlined","menu","classNames"],"sources":["src/components/link/link.scss?tag=ifx-link&encapsulation=shadow","src/components/link/link.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: inline-flex;\n}\n\n.link {\n display: inline-flex;\n align-items: center;\n font-weight: 400;\n font-size: tokens.$ifxFontSizeM;\n text-decoration: none;\n color: tokens.$ifxColorOcean500;\n gap: tokens.$ifxSpace100;\n line-height: 1.6;\n font-family: var(--ifx-font-family); // tokens.$ifxFontFamilyBody;\n\n\n\n &:hover { \n cursor: pointer;\n }\n\n &:focus {\n outline-width: 2px;\n outline-style: solid;\n outline-color: #0A8276;\n outline-offset: 4px;\n border-radius: 3px;\n }\n\n &.bold {\n font-weight: tokens.$ifxFontWeightSemibold;\n\n &:hover {\n text-decoration: underline;\n }\n\n &:active {\n color: #08665C;\n font-style: normal;\n font-weight: 600;\n text-decoration: underline;\n }\n\n }\n\n &.underlined {\n text-decoration: underline;\n text-decoration-color: tokens.$ifxColorOcean500;\n color: #1D1D1D;\n text-underline-offset: 8px;\n \n &:hover {\n color: tokens.$ifxColorOcean500;;\n }\n \n &:active {\n color: #0A8276;\n }\n\n &:disabled,\n &.disabled {\n text-decoration-color: tokens.$ifxColorEngineering300;\n }\n }\n\n &.title {\n text-decoration: none;\n font-weight: tokens.$ifxFontWeightSemibold;\n color: #1D1D1D;\n\n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n\n &:active {\n color: #08665C;\n }\n }\n\n &.menu {\n font-weight: 400;\n font-style: normal;\n line-height: 26px;\n color: #1D1D1D;\n\n &:hover {\n color: tokens.$ifxColorOcean500;\n }\n\n &:active {\n color: #08665C;\n }\n }\n\n &.small {\n font-size: tokens.$ifxFontSizeS;\n }\n\n &.medium {\n font-size: tokens.$ifxFontSizeM;\n }\n\n &.large {\n font-size: tokens.$ifxFontSizeL;\n }\n\n &.extraLarge {\n font-size: tokens.$ifxFontSizeXl;\n }\n\n &.underline {\n text-decoration: underline;\n }\n\n &:disabled,\n &.disabled {\n color: tokens.$ifxColorEngineering300;\n cursor: default;\n pointer-events: none;\n }\n\n}","import { Component, Prop, h, State, 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 \n@Component({\n tag: 'ifx-link',\n styleUrl: 'link.scss',\n shadow: true\n})\n\nexport class Link {\n @Element() el;\n @Prop() href: string = undefined;\n @Prop() target: string = '_self';\n @Prop() variant: string = 'bold';\n @Prop() size: string;\n @Prop() disabled: boolean = false;\n @Prop() download: string;\n @Prop() ariaLabel: string | null;\n @State() internalHref: string ='';\n @State() internalTarget: string = '';\n @State() internalVariant: string = '';\n\n setInternalStates() {\n if(this.href){\n this.internalHref = this.href.trim();\n }else{\n this.internalHref = undefined;\n }\n this.internalTarget = this.target.trim();\n this.internalVariant = this.variant.trim().toLowerCase();\n }\n\n componentWillRender(){\n this.setInternalStates();\n }\n\n handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n event.preventDefault();\n } else if (event.key === 'Enter') {\n event.preventDefault();\n }\n }\n\n async componentDidLoad() { \n if(!isNestedInIfxComponent(this.el)) { \n const framework = detectFramework();\n trackComponent('ifx-link', await framework)\n }\n }\n\n render() {\n return (\n <a\n tabindex=\"0\"\n role=\"link\"\n aria-label={this.ariaLabel}\n aria-disabled={this.disabled || !this.internalHref}\n href={this.disabled ? undefined : this.internalHref}\n download={this.download}\n target={this.internalTarget}\n class={this.linkClassNames()}>\n <slot></slot>\n </a>)\n }\n\n getSizeClass() {\n const small = this.size === 's' ? 'small' : null;\n const medium = this.size === 'm' ? 'medium' : null;\n const large = this.size === 'l' ? 'large' : null;\n const extraLarge = this.size === 'xl' ? 'extraLarge' : null;\n\n if (small) {\n return small;\n } else if (medium) {\n return medium;\n } else if (large) {\n return large;\n } else if (extraLarge && this.internalVariant === 'underlined') {\n return 'large';\n } else if (extraLarge && this.internalVariant !== 'underlined') {\n return extraLarge;\n } else return \"\";\n }\n\n getVariantClass() {\n const bold = this.internalVariant === 'bold' ? 'bold' : null;\n const title = this.internalVariant === 'title' ? 'title' : null;\n const underlined = this.internalVariant === 'underlined' ? 'underlined' : null;\n const menu = this.internalVariant === 'menu' ? 'menu' : null;\n\n if (bold) {\n return bold\n } else if (title) {\n return title;\n } else if (underlined) {\n return underlined;\n } else if (menu) {\n return menu;\n } else return bold;\n }\n\n linkClassNames() {\n return classNames(\n 'link',\n 'primary',\n this.getVariantClass(),\n this.getSizeClass(),\n this.disabled ? 'disabled' : '',\n );\n }\n}"],"mappings":"6LAAA,MAAMA,EAAU,6zC,MCYHC,EAAI,MANjB,WAAAC,CAAAC,G,UAQUC,KAAIC,KAAWC,UACfF,KAAMG,OAAW,QACjBH,KAAOI,QAAW,OAElBJ,KAAQK,SAAY,MAGnBL,KAAYM,aAAU,GACtBN,KAAcO,eAAW,GACzBP,KAAeQ,gBAAW,EA2FpC,CAzFC,iBAAAC,GACE,GAAGT,KAAKC,KAAK,CACXD,KAAKM,aAAeN,KAAKC,KAAKS,M,KAC3B,CACHV,KAAKM,aAAeJ,S,CAEtBF,KAAKO,eAAiBP,KAAKG,OAAOO,OAClCV,KAAKQ,gBAAkBR,KAAKI,QAAQM,OAAOC,a,CAG7C,mBAAAC,GACEZ,KAAKS,mB,CAGP,aAAAI,CAAcC,GACZ,GAAId,KAAKK,SAAU,CACjBS,EAAMC,gB,MACD,GAAID,EAAME,MAAQ,QAAS,CAChCF,EAAMC,gB,EAIV,sBAAME,GACJ,IAAIC,EAAuBlB,KAAKmB,IAAK,CACnC,MAAMC,EAAYC,IAClBC,EAAe,iBAAkBF,E,EAIrC,MAAAG,GACE,OACEC,EACA,KAAAR,IAAA,2CAAAS,SAAS,IACPC,KAAK,OACO,aAAA1B,KAAK2B,UAAS,gBACX3B,KAAKK,WAAaL,KAAKM,aACtCL,KAAMD,KAAKK,SAAWH,UAAYF,KAAKM,aACvCsB,SAAU5B,KAAK4B,SACfzB,OAAQH,KAAKO,eACbsB,MAAO7B,KAAK8B,kBACZN,EAAa,QAAAR,IAAA,6C,CAInB,YAAAe,GACE,MAAMC,EAAQhC,KAAKiC,OAAS,IAAM,QAAU,KAC5C,MAAMC,EAASlC,KAAKiC,OAAS,IAAM,SAAW,KAC9C,MAAME,EAAQnC,KAAKiC,OAAS,IAAM,QAAU,KAC5C,MAAMG,EAAapC,KAAKiC,OAAS,KAAO,aAAe,KAEvD,GAAID,EAAO,CACT,OAAOA,C,MACF,GAAIE,EAAQ,CACjB,OAAOA,C,MACF,GAAIC,EAAO,CAChB,OAAOA,C,MACF,GAAIC,GAAcpC,KAAKQ,kBAAoB,aAAc,CAC9D,MAAO,O,MACF,GAAI4B,GAAcpC,KAAKQ,kBAAoB,aAAc,CAC9D,OAAO4B,C,MACF,MAAO,E,CAGhB,eAAAC,GACE,MAAMC,EAAOtC,KAAKQ,kBAAoB,OAAS,OAAS,KACxD,MAAM+B,EAAQvC,KAAKQ,kBAAoB,QAAU,QAAU,KAC3D,MAAMgC,EAAaxC,KAAKQ,kBAAoB,aAAe,aAAe,KAC1E,MAAMiC,EAAOzC,KAAKQ,kBAAoB,OAAS,OAAS,KAExD,GAAI8B,EAAM,CACR,OAAOA,C,MACF,GAAIC,EAAO,CAChB,OAAOA,C,MACF,GAAIC,EAAY,CACrB,OAAOA,C,MACF,GAAIC,EAAM,CACf,OAAOA,C,MACF,OAAOH,C,CAGhB,cAAAR,GACE,OAAOY,EACL,OACA,UACA1C,KAAKqC,kBACLrC,KAAK+B,eACL/B,KAAKK,SAAW,WAAa,G","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as i,h as t,a}from"./p-PqnYwNKt.js";import{d as r,t as s}from"./p-DcmcuUOA.js";import{i as n}from"./p-Bw2fh5LT.js";const l=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:inline-block}.chip{position:relative}.chip__wrapper{display:inline-flex;align-items:center;justify-content:center;gap:8px;box-sizing:border-box;border-radius:9999px;background:#FFFFFF;cursor:pointer;transition:border 100ms ease;font:400 0.875rem/1.25rem "Source Sans 3"}.chip__wrapper .icon__wrapper{display:flex}.chip__wrapper.outlined,.chip__wrapper.filled-dark,.chip__wrapper.filled-light{outline:2px solid transparent}.chip__wrapper.outlined:focus-visible,.chip__wrapper.filled-dark:focus-visible,.chip__wrapper.filled-light:focus-visible{outline:2px solid #0A8276;outline-offset:2px}.chip__wrapper.outlined.chip__wrapper--opened .wrapper__open-button,.chip__wrapper.filled-dark.chip__wrapper--opened .wrapper__open-button,.chip__wrapper.filled-light.chip__wrapper--opened .wrapper__open-button{transform:rotate(-180deg)}.chip__wrapper.outlined.chip__wrapper--selected .wrapper__label .label__selected-options,.chip__wrapper.filled-dark.chip__wrapper--selected .wrapper__label .label__selected-options,.chip__wrapper.filled-light.chip__wrapper--selected .wrapper__label .label__selected-options{font:400 0.875rem/1.25rem "Source Sans 3"}.chip__wrapper.filled-dark.chip__wrapper--selected:not(.read-only),.chip__wrapper.filled-light.chip__wrapper--selected:not(.read-only){background-color:#0A8276;color:white}.chip__wrapper.filled-dark.chip__wrapper--selected:not(.read-only):hover,.chip__wrapper.filled-light.chip__wrapper--selected:not(.read-only):hover{background-color:#08665C}.chip__wrapper.filled-dark.chip__wrapper--selected:not(.read-only):hover.disabled,.chip__wrapper.filled-light.chip__wrapper--selected:not(.read-only):hover.disabled{background-color:#0A8276}.chip__wrapper.outlined{border:1px solid #8D8786}.chip__wrapper.outlined:hover:not(.read-only){border-color:#575352;background-color:#F7F7F7}.chip__wrapper.outlined:active:not(.read-only){border-color:#575352;background-color:#BFBBBB}.chip__wrapper.outlined.chip__wrapper--opened{border:1px solid #0A8276}.chip__wrapper.outlined.chip__wrapper--selected{outline:3px solid #0A8276;border:1px solid transparent;background-color:white}.chip__wrapper.outlined.chip__wrapper--selected:focus-visible{outline-offset:0px}.chip__wrapper.outlined.chip__wrapper--selected:hover:not(.read-only){outline-color:#08665C}.chip__wrapper.outlined.chip__wrapper--selected.read-only{outline:none;border:1px solid black}.chip__wrapper.outlined.disabled{outline:none;color:#BFBBBB;border:1px solid #BFBBBB}.chip__wrapper.outlined.disabled:hover{outline:none;border-color:#BFBBBB;background-color:white}.chip__wrapper.outlined.read-only{border:1px solid black}.chip__wrapper.outlined.read-only:focus-visible{outline:2px solid #0A8276;outline-offset:2px}.chip__wrapper.filled-dark{background-color:#3C3A39;color:white}.chip__wrapper.filled-dark:hover:not(.chip__wrapper--selected,.disabled,.read-only){background-color:#575352}.chip__wrapper.filled-dark:active:not(.chip__wrapper--selected,.disabled,.read-only){background-color:#8D8786;color:black}.chip__wrapper.filled-dark.disabled{outline:none;color:#BFBBBB}.chip__wrapper.filled-dark.disabled:hover:not(.chip__wrapper--selected){background-color:#3C3A39}.chip__wrapper.filled-dark.chip__wrapper--selected.read-only{border:1px solid #8D8786}.chip__wrapper.filled-dark.read-only{border:1px solid #8D8786}.chip__wrapper.filled-light{background-color:#EEEDED}.chip__wrapper.filled-light:hover:not(.read-only){background-color:#BFBBBB}.chip__wrapper.filled-light:active:not(.read-only){background-color:#8D8786}.chip__wrapper.filled-light.disabled{outline:none;color:#BFBBBB}.chip__wrapper.filled-light.disabled:hover:not(.chip__wrapper--selected){background-color:#EEEDED}.chip__wrapper.filled-light.chip__wrapper--selected.read-only{border:1px solid black}.chip__wrapper.filled-light.read-only{border:1px solid black}.chip__wrapper.chip__wrapper--small{padding:4px 8px;height:24px}.chip__wrapper.chip__wrapper--medium{padding:4px 12px;height:28px}.chip__wrapper.chip__wrapper--large{padding:8px 12px;height:36px}.wrapper__label{display:inline-flex;align-items:center;gap:4px}.wrapper__label .label__selected-options{font:600 0.875rem/1.25rem "Source Sans 3"}.wrapper__open-button{display:flex;align-items:center}.wrapper__unselect-button{display:flex;align-items:center}.chip__dropdown{position:absolute;z-index:1;box-shadow:0px 6px 9px 0px rgba(29, 29, 29, 0.1019607843);border:1px solid #EEEDED;border-radius:1px;padding:8px 0;min-width:222px;background-color:#FFFFFF}';const o=class{constructor(t){e(this,t);this.ifxChange=i(this,"ifxChange",7);this.placeholder="";this.size="medium";this.value=undefined;this.variant="single";this.theme="outlined";this.readOnly=false;this.disabled=false;this.icon="";this.opened=false;this.selectedOptions=[]}handleValueChange(e){this.syncSelectedOptionsWithProp(e)}handleReadOnlyChange(e){if(e){this.opened=false}}closeDropdownOnOutsideClick(e){const i=e.composedPath();const t=this.chip.shadowRoot.querySelector(".chip__wrapper");const a=this.chip.shadowRoot.querySelector(".chip__dropdown");if(!i.includes(a)&&!i.includes(t)&&this.opened){this.toggleDropdownMenu()}}handleKeyDown(e){if(e.code!=="Tab"){e.preventDefault()}if(e.target.tagName==="IFX-CHIP"){this.handleWrapperKeyDown(e)}else if(e.target.tagName==="IFX-CHIP-ITEM"){this.handleDropdownKeyDown(e)}}updateSelectedOptions(e){const i=e.detail;const t=[...this.selectedOptions];if(this.variant!=="multi"){if(i.selected){this.opened=false;const t=this.getChipItems();t.forEach((i=>{if(i.selected&&i!==e.target){i.chipState=Object.assign(Object.assign({},i.chipState),{emitIfxChipItemSelect:false});i.selected=false}}));this.selectedOptions=[i]}else{this.selectedOptions=[]}this.value=this.selectedOptions[0]?this.selectedOptions[0].value:undefined}else{if(i.selected){if(!this.selectedOptions.find((e=>e.value===i.value))){this.selectedOptions=[...this.selectedOptions,i]}}else{this.selectedOptions=this.selectedOptions.filter((e=>e.value!==i.value))}this.value=this.selectedOptions.map((e=>e.value))}if(i.emitIfxChange){this.ifxChange.emit({previousSelection:t,currentSelection:this.selectedOptions,name:this.placeholder})}}getChipItems(){return this.chip.querySelectorAll("ifx-chip-item")}getSelectedOptions(){if(this.variant!=="multi"){return this.selectedOptions.map((e=>e.label)).join("")}return this.selectedOptions.slice(0,2).map((e=>e.label)).join(", ")}toggleDropdownMenu(){if(this.readOnly)return;this.opened=!this.opened}focusChipItemAt(e=0){this.opened=true;const i=this.getChipItems();let t;if(e===-1){t=i.item(i.length-1)}else if(e>=0&&e<i.length){t=i.item(e)}else{console.error(`Invalid index: ${e}`);return}const a=t.shadowRoot.querySelector(".chip-item");if(a){setTimeout((()=>{a.focus()}),1)}}focusChip(){const e=this.chip.shadowRoot.querySelector(".chip__wrapper");e.focus()}handleUnselectButtonClick(e){e.stopPropagation();this.opened=false;let i=false;const t=this.getChipItems();t.forEach((e=>{if(e.selected){i=true;e.chipState=Object.assign(Object.assign({},e.chipState),{emitIfxChipItemSelect:false});e.selected=false}}));if(i){const e=this.selectedOptions;this.selectedOptions=[];this.value=[];this.ifxChange.emit({previousSelection:e,currentSelection:[],name:this.placeholder})}}handleWrapperClick(){if(!this.readOnly){this.toggleDropdownMenu()}}handleWrapperKeyDown(e){if(this.readOnly)return;if(!this.opened){switch(e.code){case"Space":case"Enter":case"ArrowDown":this.focusChipItemAt(0);break;case"ArrowUp":this.focusChipItemAt(-1);break}}else{switch(e.code){case"Escape":this.opened=false;this.focusChip();break}}}handleDropdownKeyDown(e){let i=this.getChipItems();let t=Array.from(i).indexOf(e.target);if(t===-1){console.error("Target not found in chip items");return}switch(e.code){case"ArrowDown":if(t===i.length-1)break;this.focusChipItemAt(t+1);break;case"ArrowUp":if(t===0)break;this.focusChipItemAt(t-1);break;case"Escape":this.opened=false;this.focusChip();break;case"Space":if(this.variant==="single"){this.opened=false;this.focusChip()}break;case"Enter":this.opened=false;this.focusChip();break}}syncChipState(){const e=this.getChipItems();let i=0;e.forEach((e=>{e.chipState={emitIfxChipItemSelect:true,size:this.size?this.size:"medium",variant:this.variant==="multi"?"multi":"single",key:i++}}))}syncSelectedOptionsWithProp(e){this.selectedOptions=[];const i=(()=>{let e=0;return()=>e++})();if(Array.isArray(e)){this.selectedOptions=e.map((e=>({value:e,label:e,selected:true,key:i(),emitIfxChange:true})))}else if(typeof e==="string"){this.selectedOptions=[{value:e,label:e,selected:true,key:i(),emitIfxChange:true}]}this.syncChipState()}componentWillLoad(){this.syncSelectedOptionsWithProp(this.value)}async componentDidLoad(){if(!n(this.chip)){const e=r();s("ifx-chip",await e)}}render(){return t("div",{key:"cd16644a94a1e31cea0b2cbbe39394d4a05a5a5b",class:"chip"},t("div",{key:"951decf38e88ff684f283a09f6bc513ca4a2c704",class:`chip__wrapper chip__wrapper--${this.size?this.size:"medium"}\n chip__wrapper--${this.variant==="multi"?"multi":"single"}\n ${this.opened&&!this.readOnly?"chip__wrapper--opened":""}\n ${this.selectedOptions.length?"chip__wrapper--selected":""}\n ${this.theme?this.theme:"outlined"}\n ${this.disabled?"disabled":""}\n ${this.readOnly?"read-only":""}`,tabIndex:0,onClick:!this.readOnly&&!this.disabled?()=>{this.handleWrapperClick()}:undefined,role:"combobox","aria-label":this.ariaLabel,"aria-value":this.getSelectedOptions(),"aria-haspopup":!this.readOnly?"listbox":undefined,"aria-expanded":!this.readOnly?this.opened.toString():undefined,"aria-controls":!this.readOnly?"dropdown":undefined,"aria-readonly":this.readOnly?"true":undefined,"aria-multiselectable":this.variant==="multi"?"true":undefined},this.icon&&t("div",{key:"cd8ab00ddfde3ba1dcdb7a82f963df1b81e4b5d5",class:"icon__wrapper"},t("ifx-icon",{key:"b14f92a609f24bc0b4617bb2b0d8262c52f11fab",icon:this.icon})),t("div",{key:"7ac3305d90985ddf45eb4df3cc22f9de89bf60de",class:"wrapper__label"},this.selectedOptions.length===0&&`${this.placeholder}`,this.selectedOptions.length!==0&&this.variant==="multi"&&this.placeholder!==""&&`${this.placeholder}:`,this.selectedOptions.length!==0&&t("div",{key:"e7c907adafd7e1601a4cbd05e1a7b415e1da05b6",class:"label__selected-options"},this.getSelectedOptions()),this.selectedOptions.length>2&&this.variant==="multi"&&t("ifx-indicator",{key:"4520777b0d729d95d57d87d5a32a95fcf44e0d84",variant:"number",inverted:this.theme==="outlined"?false:true,number:this.selectedOptions.length-2})),!this.readOnly&&(this.variant!=="multi"||this.variant==="multi"&&this.selectedOptions.length===0)&&t("div",{key:"ade24c6456b5443be577a4c0bd61d1b2dba68c91",class:"wrapper__open-button"},t("ifx-icon",{key:1,icon:`chevron-down-16`})),this.selectedOptions.length>=1&&this.variant==="multi"&&t("div",{key:"8b1937382b467ca305493896aaf065c10f7a01e8",class:"wrapper__unselect-button",onClick:!this.readOnly&&!this.disabled?e=>{this.handleUnselectButtonClick(e)}:undefined},t("ifx-icon",{key:2,icon:`cross16`}))),this.opened&&!this.readOnly&&t("div",{key:"073b6641d2320716a6d4b1149e72b61fa9b47dd8",id:"dropdown",role:"listbox",class:"chip__dropdown"},t("slot",{key:"55587cb1d438b11f0682c3b1d596a5dfb1d251d0"})))}get chip(){return a(this)}static get watchers(){return{value:["handleValueChange"],readOnly:["handleReadOnlyChange"]}}};o.style=l;const p=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}.chip-item{display:flex;align-items:center;gap:8px;padding:8px 16px;user-select:none;transition:all 100ms ease;transition-property:background, color}.chip-item:hover{cursor:pointer;background-color:#EEEDED}.chip-item:active{background-color:#BFBBBB}.chip-item:focus{outline:2px solid #0A8276}.chip-item.chip-item--large{font:400 1rem/1.5rem "Source Sans 3"}.chip-item.chip-item--small{font:400 0.875rem/1.25rem "Source Sans 3"}.chip-item.chip-item--selected{color:#0A8276}.chip-item.chip-item--selected .chip-item__selected-indicator{display:block}.chip-item__selected-indicator{display:none;margin-left:auto}';const c=class{constructor(t){e(this,t);this.ifxChipItemSelect=i(this,"ifxChipItemSelect",5);this.value=undefined;this.chipState={emitIfxChipItemSelect:true,variant:"multi",size:"large"};this.selected=false}updateItemSelection(e){if(this.chipState.variant==="single"){const i=e.target;if(this.chipItem!==i&&this.chipItem.parentElement===i.parentElement){this.selected=false}}}validateSelected(e,i){if(e!==i){if(this.chipState.emitIfxChipItemSelect){this.emitIfxChipItemSelectEvent()}else{this.chipState.emitIfxChipItemSelect=true}}}getItemLabel(){return this.chipItem.innerText}toggleItemSelection(){this.selected=!this.selected}emitIfxChipItemSelectEvent(e=true){this.ifxChipItemSelect.emit({emitIfxChange:e,key:this.chipState.key,label:this.getItemLabel(),selected:this.selected,value:this.value})}handleItemClick(){this.toggleItemSelection()}handleItemKeyDown(e){if(e.code==="Enter"||e.code==="Space"){this.toggleItemSelection()}}handleSelectedState(){if(this.selected){this.emitIfxChipItemSelectEvent(false)}}componentWillLoad(){this.handleSelectedState()}render(){return t("div",{key:"4d5ace01c02658ed46fbf42c36138a06c3d46049",class:`chip-item chip-item--${this.chipState.size} \n chip-item--${(this.selected&&this.chipState.variant)==="single"?"selected":""}`,tabIndex:0,onClick:()=>{this.handleItemClick()},onKeyDown:e=>{this.handleItemKeyDown(e)},role:"option","aria-selected":this.selected.toString()},this.chipState.variant==="multi"&&t("ifx-checkbox",{key:"bf1af2aaf0944351eb33ace8c704bbb4973951d6",checked:this.selected,tabIndex:-1,size:"s"}),t("div",{key:"50347975f1554b7a02ef2bde34750b361daad549",class:"chip-item__label"}," ",t("slot",{key:"9667dd32c70e5f4a7946499f828883efb10caff2"})," "),t("div",{key:"f2fcab283b717837bc8b6c09b6b3c6c72675e40c",class:"chip-item__selected-indicator"},t("ifx-icon",{key:"84e489e9a638f2165c436b10bea8d826ae6db11c",icon:"check-16"}," ")))}get chipItem(){return a(this)}static get watchers(){return{selected:["validateSelected"]}}};c.style=p;const h=':root{--ifx-font-family:"Source Sans 3", "Arial, sans-serif"}:host{display:inline-flex}.container{display:inline-flex;justify-content:center;align-items:center;gap:32px;font-family:var(--ifx-font-family);flex-wrap:wrap}.container .items__per-page-wrapper{display:flex;align-items:center;gap:16px}.container .items__per-page-wrapper .items__per-page-label{color:#1D1D1D;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.container .items__per-page-wrapper .items__per-page-field{display:flex;flex-direction:column;align-items:flex-start}.container .items__per-page-wrapper .items__per-page-field ifx-select{width:92px}.container .items__total-wrapper{display:flex;justify-content:center;align-items:center;gap:12px}.container .items__total-wrapper .items__total-button{display:flex;width:40px;height:40px;justify-content:center;align-items:center;border-radius:100px;border:1px solid #BFBBBB;background:#FFF}.container .items__total-wrapper .page__numbers-wrapper{display:flex;justify-content:center;align-items:center;gap:12px}.container .items__total-wrapper .page__numbers-wrapper .page__number-item{display:flex;padding:6px;flex-direction:column;justify-content:center;align-items:center;gap:10px;border-radius:100px}.container .items__total-wrapper .page__numbers-wrapper .page__number-item.active{background-color:#0A8276}.container .items__total-wrapper .page__numbers-wrapper .page__number-item.active span{color:#fff}.container .items__total-wrapper .page__numbers-wrapper .page__number-item:hover{cursor:pointer}.container .items__total-wrapper .page__numbers-wrapper .page__number-item:hover:not(.active){background-color:#ddd}.container .items__total-wrapper .page__numbers-wrapper .page__number-item:active:not(.active){background-color:#575352}.container .items__total-wrapper .page__numbers-wrapper .page__number-item span{display:flex;width:16px;height:16px;flex-direction:column;justify-content:center;color:#1D1D1D;text-align:center;font-size:13px;font-style:normal;font-weight:400;line-height:20px}.pagination{display:flex}.pagination ifx-icon-button:first-of-type{margin-right:12px}.pagination ifx-icon-button:last-of-type{margin-left:12px}.page__button{padding:8px;border-radius:100px}ol{list-style-type:none;padding:0;margin:0;display:inline-flex;align-items:center;gap:12px}li{display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:100px}li:hover:not(.active) page__button{background-color:#EEEDED}li:active:not(.active) .page__button{background-color:#575352;color:#fff}li.active{background-color:#0A8276}li.active .page__button{color:#fff}li:hover{cursor:pointer}li .page__button{text-decoration:none;display:flex;width:16px;height:16px;flex-direction:column;justify-content:center;color:#1D1D1D;text-align:center;font-size:13px;font-style:normal;font-weight:400;line-height:20px;align-items:center}.prev.disabled,.next.disabled{cursor:default}.prev.disabled:hover,.next.disabled:hover{cursor:default;text-decoration:none}.prev{margin-right:2.5px}.next{margin-left:2.5px}@media (max-width: 768px){.container{gap:16px;justify-content:left}.container .items__total-wrapper .pagination ol{gap:12px}}@media (max-width: 374px){.pagination .ellipsis+.active{margin-left:8px}.pagination .active+.ellipsis{margin-left:8px}}';const d=class{constructor(t){e(this,t);this.ifxPageChange=i(this,"ifxPageChange",7);this.ifxItemsPerPageChange=i(this,"ifxItemsPerPageChange",7);this.currentPage=1;this.showItemsPerPage=true;this.internalPage=1;this.internalItemsPerPage=10;this.numberOfPages=[];this.total=1;this.filteredItemsPerPage=[];this.visiblePages=[];this.CLASS_DISABLED="disabled";this.CLASS_ACTIVE="active";this.handlePageClick=e=>{const i=e.currentTarget;const t=parseInt(i.dataset.page);if(!isNaN(t))this.changePage(t)};this.handleResize=()=>{clearTimeout(this.resizeTimeout);this.resizeTimeout=setTimeout((()=>{this.updateVisiblePages()}),100)}}watchTotalHandler(){this.calculateNumberOfPages();this.updateVisiblePages()}currentPageWatcher(e){this.internalPage=Math.max(1,Math.min(e,this.numberOfPages.length));this.calculateNumberOfPages();this.updateVisiblePages()}setItemsPerPage(e){var i,t;const a=((i=e.detail)===null||i===void 0?void 0:i.value)||((t=e.detail)===null||t===void 0?void 0:t.label);const r=parseInt(a)||10;if(r===this.internalItemsPerPage){return}this.internalItemsPerPage=r;this.internalPage=1;this.calculateNumberOfPages();this.updateVisiblePages();this.handleEventEmission()}emitItemsPerPage(e){this.ifxItemsPerPageChange.emit(e.detail.label)}async componentDidLoad(){if(this.showItemsPerPage){const e=this.el.shadowRoot.querySelector("#itemsPerPageSelect");if(e){e.addEventListener("ifxSelect",(e=>this.emitItemsPerPage(e)))}}window.addEventListener("resize",this.handleResize);if(!n(this.el)){const e=r();s("ifx-pagination",await e)}this.initPagination()}disconnectedCallback(){if(this.showItemsPerPage){const e=this.el.shadowRoot.querySelector("#itemsPerPageSelect");if(e){e.removeEventListener("ifxSelect",(e=>this.emitItemsPerPage(e)))}}window.removeEventListener("resize",this.handleResize);if(this.resizeTimeout){clearTimeout(this.resizeTimeout)}}updateVisiblePages(){const e=window.innerWidth<375;const i=this.numberOfPages.length;const t=this.internalPage;let a=[];if(e){if(i<=5){a=[...this.numberOfPages]}else{a.push(1);if(t<=2){a.push(2,3,"...",i)}else if(t>=i-1){a.push("...",i-2,i-1,i)}else{a.push("...",t,"...",i)}}}else{const e=2;if(i<=7){a=[...this.numberOfPages]}else{a.push(1);let r=Math.max(2,t-e);let s=Math.min(i-1,t+e);if(t<=4){r=2;s=Math.min(i-1,5)}else if(t>=i-3){r=Math.max(2,i-4);s=i-1}else{r=t-1;s=t+1}if(r>2){a.push("...")}for(let e=r;e<=s;e++){a.push(e)}if(s<i-1){a.push("...")}a.push(i)}}this.visiblePages=a}calculateNumberOfPages(){const e=Math.ceil(this.total/this.internalItemsPerPage);this.numberOfPages=Array.from({length:e},((e,i)=>i+1));this.internalPage=Math.max(1,Math.min(this.currentPage,e))}filterOptionsArray(){const e=typeof this.itemsPerPage==="string"?JSON.parse(this.itemsPerPage):this.itemsPerPage;this.filteredItemsPerPage=e.map((e=>Object.assign(Object.assign({},e),{label:e.label||e.value})))}componentWillLoad(){this.filterOptionsArray();const e=this.filteredItemsPerPage.find((e=>e.selected));if(e){this.internalItemsPerPage=Number(e.value)}else if(this.filteredItemsPerPage.length>0){this.internalItemsPerPage=Number(this.filteredItemsPerPage[0].value)}this.calculateNumberOfPages();this.internalPage=Math.max(1,Math.min(this.currentPage,this.numberOfPages.length));this.updateVisiblePages()}componentWillUpdate(){if(this.prevInternalPage!==this.internalPage){this.updateVisiblePages();this.prevInternalPage=this.internalPage}}componentDidUpdate(){this.initPagination()}handleEventEmission(){this.ifxPageChange.emit({currentPage:this.internalPage,totalPages:this.numberOfPages.length,itemsPerPage:this.internalItemsPerPage})}initPagination(){const e=this.el.shadowRoot.querySelector(".pagination");if(!e)return;const i=()=>{const i=e.querySelector(".prev");const t=e.querySelector(".next");if(i){i.disabled=this.internalPage===1;i.classList.toggle(this.CLASS_DISABLED,this.internalPage===1)}if(t){t.disabled=this.internalPage===this.numberOfPages.length;t.classList.toggle(this.CLASS_DISABLED,this.internalPage===this.numberOfPages.length)}};e.querySelectorAll("li").forEach((e=>{e.removeEventListener("click",this.handlePageClick);e.addEventListener("click",this.handlePageClick)}));i()}changePage(e){e=Math.max(1,Math.min(e,this.numberOfPages.length));if(e===this.internalPage)return;this.internalPage=e;this.handleEventEmission();this.initPagination()}render(){return t("div",{key:"9a4b41bb714202dcc144f626b9a2096480852ad6",class:"container"},this.showItemsPerPage&&t("div",{key:"9e829381e98967180e89bf8f8988c67bbb998814",class:"items__per-page-wrapper"},t("div",{key:"be5d328337c18096cd1363f3c7c0c060693fe525",class:"items__per-page-label"},"Results per Page"),t("div",{key:"37f663194a695059779305e0723321c26f55d191",class:"items__per-page-field"},t("ifx-select",{key:"916cc188fd2f7d86243db5955f091e188defbacc",id:"itemsPerPageSelect",placeholder:"false","show-search":"false",value:undefined,disabled:false,error:false,size:"s",options:this.filteredItemsPerPage,"placeholder-value":"Select"}))),t("div",{key:"f6531ac8c0710f53ff375e8ee4fa19bb47be5cef",class:"items__total-wrapper"},t("div",{key:"4edaf3f1bc17c3423c2b39473a0f5ddc959278d6",class:"pagination"},t("ifx-icon-button",{key:"7341fced786739f5970cfc9940381b2b2901de63",class:"prev",icon:"arrow-left-16","aria-label":"Previous Page",onClick:()=>this.changePage(this.internalPage-1),variant:"secondary"}),t("ol",{key:"b7af29f3b08ee99b3c880c7af51b4d491630e55c"},this.visiblePages.map(((e,i)=>typeof e==="number"?t("li",{key:`page-${e}`,class:{[this.CLASS_ACTIVE]:e===this.internalPage},"data-page":e},t("span",{class:"page__button",role:"button",tabindex:"0","aria-current":e===this.internalPage?"page":undefined,"aria-label":`Page ${e}`,onClick:()=>this.changePage(e),onKeyDown:i=>(i.key==="Enter"||i.key===" ")&&this.changePage(e)},e)):t("li",{class:"ellipsis",key:`ellipsis-${i}`},t("span",{"aria-hidden":"true"},"..."))))),t("ifx-icon-button",{key:"5bdcefa2773fb49f8d7c4190a48fe5a98f6e0442",class:"next",icon:"arrow-right-16","aria-label":"Next Page",onClick:()=>this.changePage(this.internalPage+1),variant:"secondary"}))))}get el(){return a(this)}static get watchers(){return{total:["watchTotalHandler"],currentPage:["currentPageWatcher"]}}};d.style=h;export{o as ifx_chip,c as ifx_chip_item,d as ifx_pagination};
2
+ //# sourceMappingURL=p-4da5a2a5.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["chipCss","Chip","constructor","hostRef","this","placeholder","size","value","undefined","variant","theme","readOnly","disabled","icon","opened","selectedOptions","handleValueChange","newValue","syncSelectedOptionsWithProp","handleReadOnlyChange","closeDropdownOnOutsideClick","event","path","composedPath","chipWrapper","chip","shadowRoot","querySelector","chipDropdown","includes","toggleDropdownMenu","handleKeyDown","code","preventDefault","target","tagName","handleWrapperKeyDown","handleDropdownKeyDown","updateSelectedOptions","eventDetail","detail","previousSelection","selected","chipItems","getChipItems","forEach","chipItem","chipState","Object","assign","emitIfxChipItemSelect","find","option","filter","map","emitIfxChange","ifxChange","emit","currentSelection","name","querySelectorAll","getSelectedOptions","label","join","slice","focusChipItemAt","index","item","length","console","error","shadowItem","setTimeout","focus","focusChip","handleUnselectButtonClick","stopPropagation","itemGotUnselected","handleWrapperClick","chipitems","targetIndex","Array","from","indexOf","syncChipState","key","generateKey","count","isArray","componentWillLoad","componentDidLoad","isNestedInIfxComponent","framework","detectFramework","trackComponent","render","h","class","tabIndex","onClick","role","ariaLabel","toString","inverted","number","e","id","chipItemCss","ChipItem","updateItemSelection","parentElement","validateSelected","oldValue","emitIfxChipItemSelectEvent","getItemLabel","innerText","toggleItemSelection","ifxChipItemSelect","handleItemClick","handleItemKeyDown","handleSelectedState","onKeyDown","checked","paginationCss","Pagination","currentPage","showItemsPerPage","internalPage","internalItemsPerPage","numberOfPages","total","filteredItemsPerPage","visiblePages","CLASS_DISABLED","CLASS_ACTIVE","handlePageClick","li","currentTarget","page","parseInt","dataset","isNaN","changePage","handleResize","clearTimeout","resizeTimeout","updateVisiblePages","watchTotalHandler","calculateNumberOfPages","currentPageWatcher","newVal","Math","max","min","setItemsPerPage","selectedValue","_a","_b","newItemsPerPage","handleEventEmission","emitItemsPerPage","ifxItemsPerPageChange","select","el","addEventListener","window","initPagination","disconnectedCallback","removeEventListener","isMobile","innerWidth","totalPages","current","pages","push","buffer","start","end","i","ceil","_","filterOptionsArray","items","itemsPerPage","JSON","parse","selectedOption","Number","componentWillUpdate","prevInternalPage","componentDidUpdate","ifxPageChange","pagination","updateButtons","prev","next","classList","toggle","newPage","options","tabindex"],"sources":["src/components/chip/chip.scss?tag=ifx-chip&encapsulation=shadow","src/components/chip/chip.tsx","src/components/chip/chip-item/chip-item.scss?tag=ifx-chip-item&encapsulation=shadow","src/components/chip/chip-item/chip-item.tsx","src/components/pagination/pagination.scss?tag=ifx-pagination&encapsulation=shadow","src/components/pagination/pagination.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: inline-block;\n}\n\n.chip {\n position: relative;\n}\n\n.chip__wrapper {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: tokens.$ifxSpace100;\n box-sizing: border-box;\n border-radius: tokens.$ifxBorderRadiusRound;\n background: tokens.$ifxColorBaseWhite;\n cursor: pointer; \n transition: border 100ms ease;\n font: tokens.$ifxBodyBody04;\n\n & .icon__wrapper { \n display: flex;\n }\n\n &.outlined, &.filled-dark, &.filled-light { \n outline: 2px solid transparent;\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n }\n \n &.chip__wrapper--opened {\n .wrapper__open-button {\n transform: rotate(-180deg);\n }\n }\n\n &.chip__wrapper--selected {\n .wrapper__label {\n .label__selected-options {\n font: tokens.$ifxBodyBody04;\n }\n }\n }\n }\n\n &.filled-dark, &.filled-light { \n &.chip__wrapper--selected:not(.read-only) {\n background-color: tokens.$ifxColorOcean500;\n color: white;\n &:hover { \n background-color: tokens.$ifxColorOcean600;\n }\n\n &:hover.disabled { \n background-color: tokens.$ifxColorOcean500;\n }\n }\n }\n \n &.outlined { \n border: 1px solid tokens.$ifxColorEngineering400;\n &:hover:not(.read-only) {\n border-color: tokens.$ifxColorEngineering500;\n background-color: tokens.$ifxColorEngineering100;\n }\n\n &:active:not(.read-only) { \n border-color: tokens.$ifxColorEngineering500;\n background-color: tokens.$ifxColorEngineering300;\n }\n\n &.chip__wrapper--opened {\n border: 1px solid tokens.$ifxColorOcean500;\n }\n\n &.chip__wrapper--selected {\n outline: 3px solid tokens.$ifxColorOcean500;\n border: 1px solid transparent;\n background-color: white;\n\n &:focus-visible {\n outline-offset: 0px;\n }\n &:hover:not(.read-only) { \n outline-color: tokens.$ifxColorOcean600;\n }\n\n &.read-only { \n outline: none;\n border: 1px solid black;\n }\n }\n\n &.disabled { \n outline: none;\n color: tokens.$ifxColorEngineering300;\n border: 1px solid tokens.$ifxColorEngineering300;\n &:hover { \n outline: none;\n border-color: tokens.$ifxColorEngineering300;\n background-color: white;\n }\n }\n\n &.read-only { \n border: 1px solid black;\n &:focus-visible { \n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n }\n }\n }\n\n &.filled-dark { \n background-color: tokens.$ifxColorEngineering600;\n color: white;\n\n &:hover:not(.chip__wrapper--selected, .disabled, .read-only) { \n background-color: tokens.$ifxColorEngineering500;\n }\n\n &:active:not(.chip__wrapper--selected, .disabled, .read-only) { \n background-color: tokens.$ifxColorEngineering400;\n color: black;\n }\n\n &.disabled { \n outline: none;\n color: tokens.$ifxColorEngineering300;\n &:hover:not(.chip__wrapper--selected) { \n background-color: tokens.$ifxColorEngineering600;\n }\n }\n\n &.chip__wrapper--selected { \n &.read-only { \n border: 1px solid tokens.$ifxColorEngineering400;\n }\n }\n\n &.read-only { \n border: 1px solid tokens.$ifxColorEngineering400;\n }\n }\n\n &.filled-light { \n background-color: tokens.$ifxColorEngineering200;\n\n &:hover:not(.read-only) { \n background-color: tokens.$ifxColorEngineering300;\n }\n\n &:active:not(.read-only) { \n background-color: tokens.$ifxColorEngineering400;\n }\n\n &.disabled { \n outline: none;\n color: tokens.$ifxColorEngineering300;\n &:hover:not(.chip__wrapper--selected) { \n background-color: tokens.$ifxColorEngineering200;\n }\n }\n\n &.chip__wrapper--selected { \n &.read-only { \n border: 1px solid black;\n }\n }\n\n &.read-only { \n border: 1px solid black;\n }\n }\n \n &.chip__wrapper--small {\n padding: tokens.$ifxSpace50 tokens.$ifxSpace100;\n height: tokens.$ifxSize300;\n }\n\n &.chip__wrapper--medium {\n padding: tokens.$ifxSpace50 tokens.$ifxSpace150;\n height: tokens.$ifxSize350;\n }\n \n &.chip__wrapper--large {\n padding: tokens.$ifxSpace100 tokens.$ifxSpace150;\n height: tokens.$ifxSize450;\n }\n}\n\n.wrapper__label {\n display: inline-flex;\n align-items: center;\n gap: tokens.$ifxSpace50;\n\n .label__selected-options {\n font: tokens.$ifxBodyBodySemibold04;\n }\n}\n\n.wrapper__open-button {\n display:flex;\n align-items: center;\n}\n\n.wrapper__unselect-button {\n display:flex;\n align-items: center;\n}\n\n.chip__dropdown {\n position: absolute;\n z-index: 1;\n box-shadow: 0px 6px 9px 0px #1D1D1D1A;\n border: 1px solid tokens.$ifxColorEngineering200;\n border-radius: tokens.$ifxBorderRadius12;\n padding: tokens.$ifxSpace100 0;\n min-width: 222px;\n background-color: tokens.$ifxColorBaseWhite;\n}\n","import { h, Component, Element, Event, EventEmitter, Listen, Prop, State, Watch } from '@stencil/core';\nimport { ChipItemSelectEvent } from './interfaces';\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-chip',\n styleUrl: 'chip.scss',\n shadow: true\n})\nexport class Chip {\n @Element() chip: HTMLIfxChipElement;\n\n @Event() ifxChange: EventEmitter<{ previousSelection: Array<ChipItemSelectEvent>, currentSelection: Array<ChipItemSelectEvent>, name: string }>;\n @Prop() placeholder: string = '';\n @Prop() size: 'small' | 'medium' | 'large' = 'medium';\n @Prop({ mutable: true }) value: Array<string> | string = undefined;\n @Prop() variant: 'single' | 'multi' = 'single';\n @Prop() theme: 'outlined' | 'filled-light' | 'filled-dark' = 'outlined';\n @Prop() readOnly: boolean = false;\n @Prop() ariaLabel: string | null;\n @Prop() disabled: boolean = false;\n @Prop() icon: string = \"\";\n\n @State() opened: boolean = false;\n @State() selectedOptions: Array<ChipItemSelectEvent> = [];\n\n @Watch('value')\n handleValueChange(newValue: Array<string> | string) {\n this.syncSelectedOptionsWithProp(newValue);\n }\n\n @Watch('readOnly')\n handleReadOnlyChange(newValue: boolean) {\n if (newValue) {\n this.opened = false;\n }\n }\n\n @Listen('mousedown', { target: 'document' })\n closeDropdownOnOutsideClick(event: MouseEvent) {\n const path = event.composedPath();\n const chipWrapper: HTMLElement = this.chip.shadowRoot.querySelector('.chip__wrapper');\n const chipDropdown: HTMLElement = this.chip.shadowRoot.querySelector('.chip__dropdown');\n if (!path.includes(chipDropdown) && !path.includes(chipWrapper) && this.opened) {\n this.toggleDropdownMenu();\n }\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n // override behavior of all keys except Tab. Users should be able to tab out of the component.\n if (event.code !== 'Tab') {\n event.preventDefault(); \n }\n\n if ((event.target as HTMLElement).tagName === 'IFX-CHIP') {\n this.handleWrapperKeyDown(event);\n } else if ((event.target as HTMLElement).tagName === 'IFX-CHIP-ITEM') {\n this.handleDropdownKeyDown(event);\n }\n }\n\n @Listen('ifxChipItemSelect')\n updateSelectedOptions(event: CustomEvent<ChipItemSelectEvent>) {\n const eventDetail: ChipItemSelectEvent = event.detail;\n const previousSelection: Array<ChipItemSelectEvent> = [...this.selectedOptions];\n\n if (this.variant !== 'multi') {\n if (eventDetail.selected) {\n this.opened = false;\n const chipItems: NodeList = this.getChipItems();\n chipItems.forEach((chipItem: HTMLIfxChipItemElement) => {\n if (chipItem.selected && chipItem !== event.target) {\n chipItem.chipState = {\n ...chipItem.chipState,\n emitIfxChipItemSelect: false,\n };\n chipItem.selected = false;\n }\n });\n this.selectedOptions = [eventDetail];\n } else {\n this.selectedOptions = [];\n }\n this.value = this.selectedOptions[0] ? this.selectedOptions[0].value : undefined;\n } else {\n if (eventDetail.selected) {\n // Prevent duplicate entries\n if (!this.selectedOptions.find(option => option.value === eventDetail.value)) {\n this.selectedOptions = [...this.selectedOptions, eventDetail];\n }\n } else {\n this.selectedOptions = this.selectedOptions.filter((option) => option.value !== eventDetail.value);\n }\n this.value = this.selectedOptions.map((option) => option.value);\n }\n\n if (eventDetail.emitIfxChange) {\n this.ifxChange.emit({\n previousSelection: previousSelection,\n currentSelection: this.selectedOptions,\n name: this.placeholder\n });\n }\n }\n\n getChipItems(): NodeList {\n return this.chip.querySelectorAll('ifx-chip-item');\n }\n\n getSelectedOptions(): string {\n if (this.variant !== 'multi') {\n return this.selectedOptions.map(option => option.label).join('');\n }\n return this.selectedOptions.slice(0, 2).map(option => option.label).join(', ');\n }\n\n toggleDropdownMenu() {\n if (this.readOnly) return;\n this.opened = !this.opened;\n }\n\n /**\n * Focuses the chip item at the specified index.\n * @param index the index of the chip item to focus. -1 will focus the last chip item.\n */\n focusChipItemAt(index: number = 0) {\n this.opened = true;\n const chipItems: NodeList = this.getChipItems();\n let item: HTMLIfxChipItemElement;\n \n if (index === -1) {\n item = chipItems.item(chipItems.length - 1) as HTMLIfxChipItemElement;\n } else if (index >= 0 && index < chipItems.length) {\n item = chipItems.item(index) as HTMLIfxChipItemElement;\n } else {\n console.error(`Invalid index: ${index}`);\n return;\n }\n\n const shadowItem = item.shadowRoot.querySelector('.chip-item') as HTMLDivElement;\n if (shadowItem) {\n // Delay needed for the shadow item to be rendered.\n setTimeout(() => {\n shadowItem.focus();\n }, 1);\n }\n }\n\n focusChip() {\n const chipWrapper: HTMLElement = this.chip.shadowRoot.querySelector('.chip__wrapper');\n chipWrapper.focus();\n }\n\n handleUnselectButtonClick(event: MouseEvent) {\n event.stopPropagation();\n this.opened = false;\n\n let itemGotUnselected = false;\n const chipItems: NodeList = this.getChipItems();\n chipItems.forEach((chipItem: HTMLIfxChipItemElement) => {\n if (chipItem.selected) {\n itemGotUnselected = true;\n chipItem.chipState = {\n ...chipItem.chipState,\n emitIfxChipItemSelect: false,\n }\n chipItem.selected = false;\n }\n });\n\n /* Emit event only if at least one item was unselected. */\n if (itemGotUnselected) {\n const previousSelection: Array<ChipItemSelectEvent> = this.selectedOptions;\n this.selectedOptions = [];\n this.value = [];\n this.ifxChange.emit({\n previousSelection: previousSelection,\n currentSelection: [],\n name: this.placeholder\n });\n }\n }\n\n handleWrapperClick() {\n if (!this.readOnly) {\n this.toggleDropdownMenu();\n }\n }\n\n handleWrapperKeyDown(event: KeyboardEvent) {\n // Keymap oriented at https://www.w3.org/WAI/ARIA/apg/patterns/combobox/#keyboard_interaction\n if (this.readOnly) return;\n\n if (!this.opened) {\n switch (event.code) {\n case 'Space':\n case 'Enter':\n case 'ArrowDown':\n this.focusChipItemAt(0);\n break;\n case 'ArrowUp':\n this.focusChipItemAt(-1);\n break;\n }\n } else {\n switch (event.code) {\n case 'Escape':\n this.opened = false;\n this.focusChip();\n break;\n }\n }\n }\n\n handleDropdownKeyDown(event: KeyboardEvent) {\n let chipitems = this.getChipItems();\n\n let targetIndex = Array.from(chipitems).indexOf(event.target as HTMLIfxChipItemElement);\n if (targetIndex === -1) {\n console.error('Target not found in chip items');\n return;\n }\n\n switch (event.code) {\n case 'ArrowDown':\n if (targetIndex === chipitems.length - 1) break;\n this.focusChipItemAt(targetIndex + 1);\n break;\n case 'ArrowUp':\n if (targetIndex === 0) break;\n this.focusChipItemAt( targetIndex - 1);\n break;\n case 'Escape':\n this.opened = false;\n this.focusChip();\n break;\n case 'Space':\n // selection is handled by the chip-item component\n if (this.variant === 'single') {\n // only close dropdown if single select\n this.opened = false;\n this.focusChip();\n }\n break;\n case 'Enter':\n // selection is handled by the chip-item component\n this.opened = false;\n this.focusChip();\n break;\n }\n }\n\n syncChipState() {\n const chipItems: NodeList = this.getChipItems();\n let key: number = 0;\n chipItems.forEach((chipItem: HTMLIfxChipItemElement) => {\n chipItem.chipState = {\n emitIfxChipItemSelect: true,\n size: this.size ? this.size : 'medium',\n variant: (this.variant === 'multi' ? 'multi' : 'single'),\n key: key++\n };\n });\n }\n\n syncSelectedOptionsWithProp(newValue: Array<string> | string) {\n // Clear old selected options\n this.selectedOptions = [];\n\n const generateKey = (() => {\n let count = 0;\n return () => count++;\n })();\n\n if (Array.isArray(newValue)) {\n this.selectedOptions = newValue.map(value => ({\n value,\n label: value,\n selected: true,\n key: generateKey(),\n emitIfxChange: true\n }));\n } else if (typeof newValue === 'string') {\n this.selectedOptions = [{\n value: newValue,\n label: newValue,\n selected: true,\n key: generateKey(),\n emitIfxChange: true\n }];\n }\n\n this.syncChipState();\n }\n\n componentWillLoad() {\n this.syncSelectedOptionsWithProp(this.value);\n }\n\n async componentDidLoad() { \n if(!isNestedInIfxComponent(this.chip)) { \n const framework = detectFramework();\n trackComponent('ifx-chip', await framework)\n }\n }\n\n render() {\n return (\n <div class='chip'>\n <div class={`chip__wrapper chip__wrapper--${this.size ? this.size : 'medium'}\n chip__wrapper--${this.variant === 'multi' ? 'multi' : 'single'}\n ${this.opened && !this.readOnly ? 'chip__wrapper--opened' : ''}\n ${this.selectedOptions.length ? 'chip__wrapper--selected' : ''}\n ${this.theme ? this.theme : 'outlined'}\n ${this.disabled ? 'disabled' : \"\"}\n ${this.readOnly ? 'read-only' : \"\"}`}\n tabIndex={0}\n onClick={!this.readOnly && !this.disabled ? () => { this.handleWrapperClick() } : undefined}\n role='combobox'\n aria-label={this.ariaLabel}\n aria-value={this.getSelectedOptions()}\n aria-haspopup={!this.readOnly ? 'listbox' : undefined}\n aria-expanded={!this.readOnly ? this.opened.toString() : undefined}\n aria-controls={!this.readOnly ? 'dropdown' : undefined}\n aria-readonly={this.readOnly ? 'true' : undefined}\n aria-multiselectable={this.variant === 'multi' ? 'true' : undefined}\n >\n \n {this.icon && \n <div class=\"icon__wrapper\">\n <ifx-icon icon={this.icon}></ifx-icon>\n </div>}\n\n <div class='wrapper__label'>\n {\n (this.selectedOptions.length === 0) && `${this.placeholder}`\n }\n\n {\n (this.selectedOptions.length !== 0 && (this.variant === 'multi') && this.placeholder !== '') &&\n `${this.placeholder}:`\n }\n\n {\n (this.selectedOptions.length !== 0) &&\n <div class='label__selected-options'>\n {this.getSelectedOptions()}\n </div>\n }\n\n {\n (this.selectedOptions.length > 2 && this.variant === 'multi') &&\n <ifx-indicator variant='number' inverted={this.theme === 'outlined' ? false : true} number={this.selectedOptions.length - 2}></ifx-indicator>\n }\n </div>\n\n {\n !this.readOnly && (this.variant !== 'multi' || (this.variant === 'multi' && this.selectedOptions.length === 0)) &&\n <div class='wrapper__open-button'>\n <ifx-icon key={1} icon={`chevron-down-16`} />\n </div>\n }\n\n {\n ((this.selectedOptions.length >= 1) && this.variant === 'multi') &&\n <div class='wrapper__unselect-button' onClick={!this.readOnly && !this.disabled ? (e) => { this.handleUnselectButtonClick(e) } : undefined}>\n <ifx-icon key={2} icon={`cross16`} />\n </div>\n }\n\n </div>\n\n {\n this.opened && !this.readOnly &&\n <div id='dropdown' role='listbox' class='chip__dropdown'>\n <slot />\n </div>\n }\n </div>\n );\n }\n}\n","@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../../global/font.scss\";\n\n.chip-item {\n display: flex;\n align-items: center;\n gap: tokens.$ifxSpace100;\n \n padding: tokens.$ifxSpace100 tokens.$ifxSpace200;\n \n user-select: none;\n \n transition: all 100ms ease;\n transition-property: background, color;\n \n &:hover {\n cursor: pointer;\n \n background-color: tokens.$ifxColorEngineering200;\n }\n \n &:active {\n background-color: tokens.$ifxColorEngineering300;\n }\n\n &:focus {\n outline: 2px solid tokens.$ifxColorOcean500;\n }\n \n &.chip-item--large {\n font: tokens.$ifxBodyBody03;\n }\n \n &.chip-item--small {\n font: tokens.$ifxBodyBody04;\n }\n\n &.chip-item--selected {\n color: tokens.$ifxColorOcean500;\n\n .chip-item__selected-indicator {\n display: block;\n }\n }\n}\n\n.chip-item__selected-indicator {\n display: none;\n \n margin-left: auto;\n}\n\n","import { h,\n Component,\n Element,\n Event,\n EventEmitter, \n Listen,\n Prop, \n Watch } from '@stencil/core';\nimport { ChipItemSelectEvent, ChipState } from '../interfaces';\n\n@Component({\ntag: 'ifx-chip-item',\nstyleUrl: 'chip-item.scss',\nshadow: true\n})\n\nexport class ChipItem {\n@Element() chipItem: HTMLIfxChipItemElement;\n\n@Event({ composed: false }) ifxChipItemSelect: EventEmitter<ChipItemSelectEvent>;\n\n@Prop() value: string = undefined;\n@Prop() chipState: ChipState = { emitIfxChipItemSelect: true, variant: 'multi', size: 'large' }; \n@Prop({ mutable: true, reflect: true }) selected: boolean = false;\n\n@Listen('ifxChipItemSelect', { target: 'body' })\nupdateItemSelection(event: CustomEvent<ChipItemSelectEvent>) {\n if (this.chipState.variant === 'single') {\n const target = event.target as HTMLIfxChipItemElement;\n /* Also making sure chip items are from the same group (parent) while unselecting. */\n if (this.chipItem !== target && this.chipItem.parentElement === target.parentElement) {\n this.selected = false;\n }\n }\n} \n\n@Watch('selected')\nvalidateSelected(newValue: boolean, oldValue: boolean) {\n if (newValue !== oldValue) {\n /* Do not emit if ChipState does not allow. */\n if (this.chipState.emitIfxChipItemSelect){\n this.emitIfxChipItemSelectEvent();\n } else {\n this.chipState.emitIfxChipItemSelect = true;\n }\n }\n} \n\ngetItemLabel(): string {\n return this.chipItem.innerText as string;\n}\n\ntoggleItemSelection() {\n this.selected = !this.selected;\n}\n \n\nemitIfxChipItemSelectEvent(emitIfxChange: boolean = true) {\n this.ifxChipItemSelect.emit({ emitIfxChange: emitIfxChange,\n key: this.chipState.key,\n label: this.getItemLabel(), \n selected: this.selected, \n value: this.value });\n}\n\nhandleItemClick() {\n this.toggleItemSelection();\n}\n\nhandleItemKeyDown(event: KeyboardEvent) {\n if (event.code === 'Enter' || event.code === 'Space') {\n this.toggleItemSelection();\n }\n}\n\nhandleSelectedState() {\n if (this.selected) {\n this.emitIfxChipItemSelectEvent(false);\n }\n}\n\n\ncomponentWillLoad() {\n /* Propogating the selected state to the Chip (Parent) component if it is set. */\n this.handleSelectedState();\n}\n\nrender() {\n return (\n <div class={`chip-item chip-item--${this.chipState.size} \n chip-item--${(this.selected && this.chipState.variant) === 'single' ? 'selected' : ''}`} \n tabIndex={0}\n onClick={() => {this.handleItemClick()}}\n onKeyDown={(e) => {this.handleItemKeyDown(e)}}\n role=\"option\"\n aria-selected={this.selected.toString()}> \n {/* Checkbox; renders only in 'multi' variant. */}\n { \n this.chipState.variant === 'multi' &&\n <ifx-checkbox checked={this.selected}\n tabIndex={-1} \n size='s'>\n </ifx-checkbox>\n }\n\n <div class='chip-item__label'> <slot /> </div>\n\n {/* Selected indicator only visible in 'single' variant. */}\n <div class='chip-item__selected-indicator'> \n <ifx-icon icon='check-16'> </ifx-icon> \n </div>\n\n </div>\n );\n}\n}","@use \"~@infineon/design-system-tokens/dist/tokens\";\n@use \"../../global/font.scss\";\n\n:host {\n display: inline-flex;\n}\n\n.container {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: 32px;\n font-family: var(--ifx-font-family); // tokens.$ifxFontFamilyBody;\n flex-wrap: wrap;\n\n & .items__per-page-wrapper {\n display: flex;\n align-items: center;\n gap: 16px;\n\n & .items__per-page-label {\n color: #1D1D1D;\n font-size: 14px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px;\n }\n\n & .items__per-page-field {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n & ifx-select {\n width: 92px;\n }\n }\n }\n\n & .items__total-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n\n & .items__total-button {\n display: flex;\n width: 40px;\n height: 40px;\n justify-content: center;\n align-items: center;\n border-radius: 100px;\n border: 1px solid #BFBBBB;\n background: #FFF;\n }\n\n & .page__numbers-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n\n & .page__number-item {\n display: flex;\n padding: 6px;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 100px;\n\n &.active {\n background-color: #0A8276;\n\n & span {\n color: #fff;\n }\n }\n\n &:hover {\n cursor: pointer;\n }\n\n &:hover:not(.active) {\n background-color: #ddd;\n\n }\n\n &:active:not(.active) {\n background-color: #575352;\n }\n\n & span {\n display: flex;\n width: 16px;\n height: 16px;\n flex-direction: column;\n justify-content: center;\n color: #1D1D1D;\n text-align: center;\n font-size: 13px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n }\n }\n }\n }\n}\n\n\n.pagination {\n display: flex;\n\n & ifx-icon-button:first-of-type {\n margin-right: 12px;\n }\n\n & ifx-icon-button:last-of-type {\n margin-left: 12px;\n }\n}\n\n.page__button {\n padding: 8px;\n border-radius: 100px;\n}\n\nol {\n list-style-type: none;\n padding: 0;\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: 12px;\n}\n\nli {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border-radius: 100px;\n\n &:hover:not(.active) {\n & page__button {\n background-color: #EEEDED;\n }\n }\n\n &:active:not(.active) {\n & .page__button {\n background-color: #575352;\n color: #fff;\n }\n }\n\n &.active {\n background-color: #0A8276;\n\n & .page__button {\n color: #fff;\n }\n }\n\n &:hover {\n cursor: pointer;\n }\n\n & .page__button {\n text-decoration: none;\n display: flex;\n width: 16px;\n height: 16px;\n flex-direction: column;\n justify-content: center;\n color: #1D1D1D;\n text-align: center;\n font-size: 13px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n align-items: center;\n }\n}\n\n.prev,\n.next {\n &.disabled {\n cursor: default;\n\n &:hover {\n cursor: default;\n text-decoration: none;\n }\n }\n}\n\n.prev {\n margin-right: 2.5px;\n}\n\n.next {\n margin-left: 2.5px;\n}\n\n@media (max-width: tokens.$ifxBreakpointM) {\n .container {\n gap: tokens.$ifxSpace200;\n justify-content: left;\n\n .items__total-wrapper {\n .pagination {\n ol {\n gap: tokens.$ifxSpace150;\n }\n }\n }\n }\n}\n\n@media (max-width: 374px) {\n .pagination {\n .ellipsis + .active {\n margin-left: tokens.$ifxSpace100;\n }\n\n .active + .ellipsis {\n margin-left: tokens.$ifxSpace100;\n }\n }\n}\n","import { Component, h, Element, Event, EventEmitter, Prop, State, Listen, 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-pagination',\n styleUrl: 'pagination.scss',\n shadow: true\n})\nexport class Pagination {\n @Element() el: HTMLElement;\n @Event() ifxPageChange: EventEmitter;\n @Event() ifxItemsPerPageChange: EventEmitter;\n @Prop() currentPage: number = 1;\n @Prop() showItemsPerPage: boolean = true;\n @State() internalPage: number = 1;\n @State() internalItemsPerPage: number = 10;\n @State() numberOfPages: number[] = [];\n @Prop() total: number = 1;\n @Prop() itemsPerPage: any[] | string;\n @State() filteredItemsPerPage: any[] = [];\n @State() visiblePages: (number | string)[] = [];\n\n private CLASS_DISABLED = \"disabled\";\n private CLASS_ACTIVE = \"active\";\n private prevInternalPage: number;\n\n @Watch('total')\n watchTotalHandler() {\n this.calculateNumberOfPages();\n this.updateVisiblePages();\n }\n\n @Watch('currentPage')\n currentPageWatcher(newVal: number) {\n this.internalPage = Math.max(1, Math.min(newVal, this.numberOfPages.length));\n this.calculateNumberOfPages();\n this.updateVisiblePages();\n }\n\n @Listen('ifxSelect')\n setItemsPerPage(e: CustomEvent) {\n const selectedValue = e.detail?.value || e.detail?.label;\n const newItemsPerPage = parseInt(selectedValue) || 10;\n\n if (newItemsPerPage === this.internalItemsPerPage) {\n return;\n }\n\n this.internalItemsPerPage = newItemsPerPage;\n this.internalPage = 1;\n this.calculateNumberOfPages();\n this.updateVisiblePages();\n this.handleEventEmission();\n }\n\n emitItemsPerPage(e) {\n this.ifxItemsPerPageChange.emit((e as any).detail.label)\n }\n\n async componentDidLoad() {\n if (this.showItemsPerPage) {\n const select = this.el.shadowRoot.querySelector('#itemsPerPageSelect');\n if(select) {\n select.addEventListener('ifxSelect', (e) => this.emitItemsPerPage(e))\n }\n }\n\n // Add resize listener to update pagination on screen size changes\n window.addEventListener('resize', this.handleResize);\n\n if(!isNestedInIfxComponent(this.el)) {\n const framework = detectFramework();\n trackComponent('ifx-pagination', await framework)\n }\n this.initPagination();\n }\n\n disconnectedCallback() {\n if (this.showItemsPerPage) {\n const select = this.el.shadowRoot.querySelector('#itemsPerPageSelect');\n if (select) {\n select.removeEventListener('ifxSelect', (e) => this.emitItemsPerPage(e));\n }\n }\n\n // Remove resize listener\n window.removeEventListener('resize', this.handleResize);\n\n // Clear any pending resize timeout\n if (this.resizeTimeout) {\n clearTimeout(this.resizeTimeout);\n }\n }\n\n updateVisiblePages() {\n // Check if screen is mobile (< 375px)\n const isMobile = window.innerWidth < 375;\n const totalPages = this.numberOfPages.length;\n const current = this.internalPage;\n let pages: (number | string)[] = [];\n\n if (isMobile) {\n // Mobile logic: maximum 5 elements\n if (totalPages <= 5) {\n pages = [...this.numberOfPages];\n } else {\n // Always show first page\n pages.push(1);\n\n if (current <= 2) {\n // Show: 1 2 3 … 10 (for pages 1 and 2)\n pages.push(2, 3, '...', totalPages);\n } else if (current >= totalPages - 1) {\n // Show: 1 … 23 24 25 (for last 2 pages only)\n pages.push('...', totalPages - 2, totalPages - 1, totalPages);\n } else {\n // Show: 1 … 5 … 10 (for middle pages, including page 3 and third-to-last page)\n pages.push('...', current, '...', totalPages);\n }\n }\n } else {\n // Desktop logic: maximum 7 elements\n const buffer = 2;\n\n if (totalPages <= 7) {\n pages = [...this.numberOfPages];\n } else {\n // Always show first page\n pages.push(1);\n\n // Determine the range around current page\n let start = Math.max(2, current - buffer);\n let end = Math.min(totalPages - 1, current + buffer);\n\n // Adjust range to ensure we show enough pages\n // If we're close to the beginning, extend the end\n if (current <= 4) {\n start = 2;\n end = Math.min(totalPages - 1, 5);\n }\n // If we're close to the end, extend the start\n else if (current >= totalPages - 3) {\n start = Math.max(2, totalPages - 4);\n end = totalPages - 1;\n }\n // For middle pages, show current +/- 1\n else {\n start = current - 1;\n end = current + 1;\n }\n\n // Add ellipsis before the range if there's a gap\n if (start > 2) {\n pages.push('...');\n }\n\n // Add the range of pages\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n // Add ellipsis after the range if there's a gap\n if (end < totalPages - 1) {\n pages.push('...');\n }\n\n // Always show last page\n pages.push(totalPages);\n }\n }\n\n this.visiblePages = pages;\n }\n\n calculateNumberOfPages() {\n const totalPages = Math.ceil(this.total / this.internalItemsPerPage);\n this.numberOfPages = Array.from({ length: totalPages }, (_, i) => i + 1);\n this.internalPage = Math.max(1, Math.min(this.currentPage, totalPages));\n }\n\n filterOptionsArray() {\n const items = typeof this.itemsPerPage === 'string' ?\n JSON.parse(this.itemsPerPage) : this.itemsPerPage;\n this.filteredItemsPerPage = items.map(item => ({\n ...item,\n label: item.label || item.value\n }));\n }\n\n componentWillLoad() {\n this.filterOptionsArray();\n\n const selectedOption = this.filteredItemsPerPage.find(option => option.selected);\n if (selectedOption) {\n this.internalItemsPerPage = Number(selectedOption.value);\n } else if (this.filteredItemsPerPage.length > 0) {\n this.internalItemsPerPage = Number(this.filteredItemsPerPage[0].value);\n }\n\n this.calculateNumberOfPages();\n this.internalPage = Math.max(1, Math.min(this.currentPage, this.numberOfPages.length));\n this.updateVisiblePages();\n }\n\n componentWillUpdate() {\n if (this.prevInternalPage !== this.internalPage) {\n this.updateVisiblePages();\n this.prevInternalPage = this.internalPage;\n }\n }\n\n componentDidUpdate() {\n this.initPagination();\n }\n\n handleEventEmission() {\n this.ifxPageChange.emit({\n currentPage: this.internalPage,\n totalPages: this.numberOfPages.length,\n itemsPerPage: this.internalItemsPerPage\n });\n }\n\n initPagination() {\n const pagination = this.el.shadowRoot.querySelector('.pagination');\n if (!pagination) return;\n\n const updateButtons = () => {\n const prev = pagination.querySelector<HTMLButtonElement>('.prev');\n const next = pagination.querySelector<HTMLButtonElement>('.next');\n if (prev) {\n prev.disabled = this.internalPage === 1;\n prev.classList.toggle(this.CLASS_DISABLED, this.internalPage === 1);\n }\n if (next) {\n next.disabled = this.internalPage === this.numberOfPages.length;\n next.classList.toggle(this.CLASS_DISABLED, this.internalPage === this.numberOfPages.length);\n }\n };\n\n pagination.querySelectorAll('li').forEach(li => {\n li.removeEventListener('click', this.handlePageClick);\n li.addEventListener('click', this.handlePageClick);\n });\n\n updateButtons();\n }\n\n private handlePageClick = (e: Event) => {\n const li = e.currentTarget as HTMLLIElement;\n const page = parseInt(li.dataset.page);\n if (!isNaN(page)) this.changePage(page);\n };\n\n private handleResize = () => {\n // Debounce resize events to prevent excessive calls\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(() => {\n this.updateVisiblePages();\n }, 100);\n };\n\n private resizeTimeout: any;\n\n changePage(newPage: number) {\n newPage = Math.max(1, Math.min(newPage, this.numberOfPages.length));\n if (newPage === this.internalPage) return;\n\n this.internalPage = newPage;\n this.handleEventEmission();\n this.initPagination();\n }\n\n render() {\n return (\n <div class=\"container\">\n {this.showItemsPerPage && (\n <div class=\"items__per-page-wrapper\">\n <div class=\"items__per-page-label\">Results per Page</div>\n <div class=\"items__per-page-field\">\n <ifx-select\n id='itemsPerPageSelect'\n placeholder='false'\n show-search='false'\n value={undefined}\n disabled={false}\n error={false}\n size=\"s\"\n options={this.filteredItemsPerPage}\n placeholder-value=\"Select\"\n ></ifx-select>\n </div>\n </div>\n )}\n\n <div class=\"items__total-wrapper\">\n <div class=\"pagination\">\n <ifx-icon-button\n class=\"prev\"\n icon=\"arrow-left-16\"\n aria-label='Previous Page'\n onClick={() => this.changePage(this.internalPage - 1)}\n variant=\"secondary\"\n ></ifx-icon-button>\n\n <ol>\n {this.visiblePages.map((page, i) => typeof page === 'number' ? (\n <li\n key={`page-${page}`}\n class={{ [this.CLASS_ACTIVE]: page === this.internalPage }}\n data-page={page}\n >\n <span \n class='page__button'\n role=\"button\"\n tabindex=\"0\"\n aria-current={page === this.internalPage ? \"page\" : undefined}\n aria-label={`Page ${page}`}\n onClick={() => this.changePage(page)}\n onKeyDown={(e) => (e.key === 'Enter' || e.key === ' ') && this.changePage(page)}\n >\n {page}\n </span>\n </li>\n ) : (\n <li class=\"ellipsis\" key={`ellipsis-${i}`}>\n <span aria-hidden=\"true\">...</span>\n </li>\n ))}\n </ol>\n\n <ifx-icon-button\n class=\"next\"\n icon=\"arrow-right-16\"\n aria-label='Next Page'\n onClick={() => this.changePage(this.internalPage + 1)}\n variant=\"secondary\"\n ></ifx-icon-button>\n </div>\n </div>\n </div>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as s,c as i,h as e,a as t}from"./p-PqnYwNKt.js";import{d as n,t as o}from"./p-DcmcuUOA.js";import{i as r}from"./p-Bw2fh5LT.js";import{c as h}from"./p-DMLRPGid.js";import"./p-B85MJLTf.js";const a=':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}\n.search-field .search-field__wrapper:focus-visible:not(.disabled) {\n outline: 2px solid #0A8276;\n outline-offset: 2px;\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 .delete-icon {\n outline: 1px solid transparent;\n right: 12px;\n cursor: pointer;\n}\n.search-field .search-field__wrapper .delete-icon:focus-visible {\n outline: 2px solid #0A8276;\n outline-offset: 1px;\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: #BFBBBB;\n color: #FFFFFF;\n}\n.search-field .search-field__wrapper input[type=text]:disabled::placeholder {\n color: #FFFFFF;\n}\n.search-field .search-field__wrapper.disabled {\n background: #BFBBBB;\n border: none;\n color: #FFFFFF;\n}\n.search-field .search-field__wrapper.disabled:hover {\n border: none;\n outline: none;\n}\n.search-field .search-field__wrapper.disabled .delete-icon {\n cursor: default;\n}\n.search-field .search-field__wrapper.disabled .delete-icon:focus-visible {\n outline: 1px solid transparent;\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 l=class{constructor(e){s(this,e);this.ifxInput=i(this,"ifxInput",7);this.ifxSuggestionRequested=i(this,"ifxSuggestionRequested",7);this.ifxSuggestionSelected=i(this,"ifxSuggestionSelected",7);this.ifxFocus=i(this,"ifxFocus",7);this.ifxBlur=i(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=()=>{if(!this.disabled){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()};this.handleHistoryDelete=(s,i)=>{s.stopPropagation();this.removeFromHistory(i)}}handleOutsideClick(s){const i=s.composedPath();if(!i.includes(this.inputElement)&&!i.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(!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}}}blurInput(){setTimeout((()=>{this.isFocused=false;this.focusEmitted=false;this.ifxBlur.emit()}),150)}loadSearchHistory(){if(this.enableHistory&&typeof localStorage!=="undefined"){const s=localStorage.getItem(this.historyKey);this.searchHistory=s?JSON.parse(s):[];this.updateSuggestions();if(this.value.length===0&&this.searchHistory.length===0){this.showDropdown=false}}}clearSearchHistory(){if(this.enableHistory&&typeof localStorage!=="undefined"){localStorage.removeItem(this.historyKey);this.searchHistory=[];this.filteredSuggestions=[];this.selectedSuggestionIndex=-1;this.showDropdown=false;this.updateSuggestions()}}addToHistory(s){if(!this.enableHistory||!s.trim())return;const i=[...this.searchHistory];const e=i.indexOf(s);if(e>-1){i.splice(e,1)}i.unshift(s);this.searchHistory=i.slice(0,this.maxHistoryItems);if(typeof localStorage!=="undefined"){localStorage.setItem(this.historyKey,JSON.stringify(this.searchHistory))}}removeFromHistory(s){if(!this.enableHistory)return;const i=[...this.searchHistory];const e=i.indexOf(s);if(e>-1){i.splice(e,1);this.searchHistory=i;if(typeof localStorage!=="undefined"){localStorage.setItem(this.historyKey,JSON.stringify(this.searchHistory))}this.updateSuggestions();if(this.searchHistory.length===0&&this.value.length===0){this.showDropdown=false}}}requestSuggestions(s){this.ifxSuggestionRequested.emit(s);this.updateSuggestions()}updateSuggestions(){const s=this.value.toLowerCase();let i=[];if(s.length>0){if(this.suggestions&&this.suggestions.length>0){const e=this.suggestions.filter((i=>i.text.toLowerCase().includes(s)));i=[...i,...e]}if(this.enableHistory&&this.searchHistory.length>0){const e=this.searchHistory.filter((i=>i.toLowerCase().includes(s))).map(((s,i)=>({id:`history-${i}`,text:s,type:"history"})));i=[...i,...e]}i.sort(((i,e)=>{const t=i.text.toLowerCase();const n=e.text.toLowerCase();if(t===s&&n!==s)return-1;if(n===s&&t!==s)return 1;const o=t.startsWith(s);const r=n.startsWith(s);if(o&&!r)return-1;if(r&&!o)return 1;if(i.type==="suggestion"&&e.type==="history")return-1;if(i.type==="history"&&e.type==="suggestion")return 1;return t.localeCompare(n)}))}else{if(this.enableHistory&&this.searchHistory.length>0){const s=this.searchHistory.map(((s,i)=>({id:`history-${i}`,text:s,type:"history"})));i=s}}const e=i.reduce(((s,i)=>{const e=s.findIndex((s=>s.text.toLowerCase()===i.text.toLowerCase()&&s.scope===i.scope));if(e===-1){s.push(i)}else{if(i.type==="history"&&s[e].type!=="history"){s[e]=i}}return s}),[]);this.filteredSuggestions=e.slice(0,this.maxSuggestions);this.selectedSuggestionIndex=-1}navigateSuggestions(s){const i=this.filteredSuggestions.length-1;if(s>0){this.selectedSuggestionIndex=this.selectedSuggestionIndex<i?this.selectedSuggestionIndex+1:0}else{this.selectedSuggestionIndex=this.selectedSuggestionIndex>0?this.selectedSuggestionIndex-1:i}}selectSuggestion(s){this.value=s.text;this.inputElement.value=s.text;this.ifxSuggestionSelected.emit(s);this.ifxInput.emit(this.value);if(this.enableHistory){this.addToHistory(s.text)}this.hideDropdown()}hideDropdown(){this.showDropdown=false;this.selectedSuggestionIndex=-1;this.isFocused=false}showHistoryDropdown(){if(this.enableHistory&&this.searchHistory.length>0){const s=this.searchHistory.map(((s,i)=>({id:`history-${i}`,text:s,type:"history"})));this.filteredSuggestions=s.slice(0,this.maxSuggestions);this.selectedSuggestionIndex=-1}else{this.filteredSuggestions=[]}}isShowingOnlyHistory(){return this.value.length===0&&this.filteredSuggestions.length>0&&this.filteredSuggestions.every((s=>s.type==="history"))}renderHighlightedText(s,i){if(!i||i.length===0){return s}const t=s.toLowerCase();const n=i.toLowerCase();const o=t.indexOf(n);if(o===-1){return s}const r=s.substring(0,o);const h=s.substring(o,o+i.length);const a=s.substring(o+i.length);return[r,e("strong",null,h),a]}componentWillLoad(){this.loadSearchHistory()}async componentDidLoad(){if(!r(this.el)){const s=n();o("ifx-search-field",await s)}}componentWillUpdate(){if(this.value!==""){this.showDeleteIconInternalState=true}else this.showDeleteIconInternalState=false}render(){return e("div",{key:"d355ec7cdbe980ea99e4238cf02d907ddd76d59b","aria-disabled":this.disabled,"aria-value":this.value,class:"search-field"},e("div",{key:"2aa3d943caab35213ca10f071586c80358515f1c",class:this.getWrapperClassNames(),tabindex:1,onClick:()=>this.focusInput()},e("ifx-icon",{key:"eaa300dd0f8466a2396c55f3f2fffe9dcf5bbf44",icon:"search-16",class:"search-icon"}),e("input",{key:"cce86ee892ec624fe8671d7567434ae5433b8702",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-controls":this.showDropdown?"suggestions-dropdown":undefined,"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?e("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&&e("div",{key:"d447e63087ac5b41d2109a16b8db37df4c9db860",ref:s=>this.dropdownElement=s,id:"suggestions-dropdown",class:"suggestions-dropdown",role:"listbox","aria-label":this.dropdownAriaLabel},this.isShowingOnlyHistory()&&e("div",{key:"6a4662d31fd8c755ec1ec9da4bb871750aa63a57",class:"suggestions-header"},this.historyHeaderText),this.filteredSuggestions.map(((s,i)=>e("div",{key:s.id,id:`suggestion-${i}`,class:this.getSuggestionClassNames(i),role:"option","aria-selected":i===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=i},e("div",{class:"suggestion-content"},s.type==="history"&&e("ifx-icon",{icon:"history-16",class:"suggestion-icon suggestion-icon--history"}),s.type==="suggestion"&&e("ifx-icon",{icon:"search-16",class:"suggestion-icon suggestion-icon--suggestion"}),e("span",{class:"suggestion-text"},e("span",{class:"suggestion-main-text"},this.renderHighlightedText(s.text,this.value)),s.scope&&e("span",{class:"suggestion-scope"},"– ",s.scope)),s.resultCount!==undefined&&s.scope&&e("span",{class:"suggestion-count"},s.resultCount),s.type==="history"&&e("ifx-icon",{icon:"cross16",class:"suggestion-delete-icon",role:"button",tabindex:"0","aria-label":`${this.historyDeleteAriaLabel}: ${s.text}`,onClick:i=>this.handleHistoryDelete(i,s.text),onKeyDown:i=>{if(i.key==="Enter"||i.key===" "){i.preventDefault();this.handleHistoryDelete(i,s.text)}}})))))))}getSizeClass(){return`${this.size}`==="s"?"search-field__wrapper-s":""}getWrapperClassNames(){return h(`search-field__wrapper`,`search-field__wrapper ${this.getSizeClass()}`,`${this.isFocused?"focused":""}`,`${this.showDropdown?"dropdown-open":""}`,`${this.disabled?"disabled":""}`)}getSuggestionClassNames(s){var i;return h("suggestion-item",{"suggestion-item--selected":s===this.selectedSuggestionIndex,"suggestion-item--history":((i=this.filteredSuggestions[s])===null||i===void 0?void 0:i.type)==="history"})}get el(){return t(this)}static get watchers(){return{value:["valueWatcher"],suggestions:["suggestionsWatcher"]}}};l.style=a;export{l as ifx_search_field};
2
+ //# sourceMappingURL=p-4fba0543.entry.js.map