@siemens/ix 2.0.1 → 2.0.3

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 (203) hide show
  1. package/components/a11y.js +1 -1
  2. package/components/a11y.js.map +1 -1
  3. package/components/application-header.js +17 -3
  4. package/components/application-header.js.map +1 -1
  5. package/components/breadcrumb-item.js +12 -4
  6. package/components/breadcrumb-item.js.map +1 -1
  7. package/components/button.js +1 -1
  8. package/components/button.js.map +1 -1
  9. package/components/dropdown.js +9 -4
  10. package/components/dropdown.js.map +1 -1
  11. package/components/icon-button.js +1 -1
  12. package/components/icon-button.js.map +1 -1
  13. package/components/ix-breadcrumb.js +4 -1
  14. package/components/ix-breadcrumb.js.map +1 -1
  15. package/components/ix-category-filter.js +1 -1
  16. package/components/ix-category-filter.js.map +1 -1
  17. package/components/ix-drawer.js +1 -1
  18. package/components/ix-drawer.js.map +1 -1
  19. package/components/ix-icon-toggle-button.js +1 -1
  20. package/components/ix-icon-toggle-button.js.map +1 -1
  21. package/components/ix-input-group.js +16 -3
  22. package/components/ix-input-group.js.map +1 -1
  23. package/components/ix-menu.js.map +1 -1
  24. package/components/ix-modal.js +1 -2
  25. package/components/ix-modal.js.map +1 -1
  26. package/components/ix-pagination.js +2 -2
  27. package/components/ix-pagination.js.map +1 -1
  28. package/dist/cjs/{a11y-4fdcefb4.js → a11y-7e1c1b86.js} +2 -2
  29. package/dist/cjs/a11y-7e1c1b86.js.map +1 -0
  30. package/dist/cjs/ix-application-header.cjs.entry.js +15 -2
  31. package/dist/cjs/ix-application-header.cjs.entry.js.map +1 -1
  32. package/dist/cjs/ix-blind.cjs.entry.js +1 -1
  33. package/dist/cjs/ix-breadcrumb-item.cjs.entry.js +11 -4
  34. package/dist/cjs/ix-breadcrumb-item.cjs.entry.js.map +1 -1
  35. package/dist/cjs/ix-breadcrumb.cjs.entry.js +5 -2
  36. package/dist/cjs/ix-breadcrumb.cjs.entry.js.map +1 -1
  37. package/dist/cjs/ix-burger-menu.cjs.entry.js +1 -1
  38. package/dist/cjs/ix-button.cjs.entry.js +1 -1
  39. package/dist/cjs/ix-button.cjs.entry.js.map +1 -1
  40. package/dist/cjs/ix-category-filter.cjs.entry.js +1 -1
  41. package/dist/cjs/ix-category-filter.cjs.entry.js.map +1 -1
  42. package/dist/cjs/ix-drawer.cjs.entry.js +1 -1
  43. package/dist/cjs/ix-drawer.cjs.entry.js.map +1 -1
  44. package/dist/cjs/ix-dropdown.cjs.entry.js +9 -4
  45. package/dist/cjs/ix-dropdown.cjs.entry.js.map +1 -1
  46. package/dist/cjs/ix-icon-button_2.cjs.entry.js +1 -1
  47. package/dist/cjs/ix-icon-button_2.cjs.entry.js.map +1 -1
  48. package/dist/cjs/ix-icon-toggle-button.cjs.entry.js +2 -2
  49. package/dist/cjs/ix-icon-toggle-button.cjs.entry.js.map +1 -1
  50. package/dist/cjs/ix-input-group.cjs.entry.js +16 -3
  51. package/dist/cjs/ix-input-group.cjs.entry.js.map +1 -1
  52. package/dist/cjs/ix-menu.cjs.entry.js.map +1 -1
  53. package/dist/cjs/ix-modal.cjs.entry.js +2 -3
  54. package/dist/cjs/ix-modal.cjs.entry.js.map +1 -1
  55. package/dist/cjs/ix-pagination.cjs.entry.js +3 -3
  56. package/dist/cjs/ix-pagination.cjs.entry.js.map +1 -1
  57. package/dist/cjs/ix-slider.cjs.entry.js +1 -1
  58. package/dist/cjs/ix-toggle-button.cjs.entry.js +1 -1
  59. package/dist/cjs/ix-toggle.cjs.entry.js +1 -1
  60. package/dist/cjs/loader.cjs.js +1 -1
  61. package/dist/cjs/siemens-ix.cjs.js +1 -1
  62. package/dist/collection/components/application-header/application-header.js +18 -3
  63. package/dist/collection/components/application-header/application-header.js.map +1 -1
  64. package/dist/collection/components/application-header/test/application-headet.ct.js +16 -1
  65. package/dist/collection/components/application-header/test/application-headet.ct.js.map +1 -1
  66. package/dist/collection/components/breadcrumb/breadcrumb.js +4 -1
  67. package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -1
  68. package/dist/collection/components/breadcrumb-item/breadcrumb-item.css +36 -0
  69. package/dist/collection/components/breadcrumb-item/breadcrumb-item.js +14 -2
  70. package/dist/collection/components/breadcrumb-item/breadcrumb-item.js.map +1 -1
  71. package/dist/collection/components/button/button.css +18 -0
  72. package/dist/collection/components/button/test/button.ct.js +6 -0
  73. package/dist/collection/components/button/test/button.ct.js.map +1 -1
  74. package/dist/collection/components/category-filter/category-filter.css +18 -0
  75. package/dist/collection/components/drawer/drawer.css +4 -0
  76. package/dist/collection/components/dropdown/dropdown.js +9 -4
  77. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  78. package/dist/collection/components/dropdown/test/dropdown.ct.js +21 -0
  79. package/dist/collection/components/dropdown/test/dropdown.ct.js.map +1 -1
  80. package/dist/collection/components/icon-button/icon-button.css +18 -0
  81. package/dist/collection/components/icon-toggle-button/icon-toggle-button.css +18 -0
  82. package/dist/collection/components/input-group/input-group.js +16 -3
  83. package/dist/collection/components/input-group/input-group.js.map +1 -1
  84. package/dist/collection/components/input-group/tests/input-group.ct.js +86 -0
  85. package/dist/collection/components/input-group/tests/input-group.ct.js.map +1 -0
  86. package/dist/collection/components/menu/menu.js +4 -1
  87. package/dist/collection/components/menu/menu.js.map +1 -1
  88. package/dist/collection/components/modal/modal.js +1 -2
  89. package/dist/collection/components/modal/modal.js.map +1 -1
  90. package/dist/collection/components/pagination/pagination.css +18 -0
  91. package/dist/collection/components/pagination/pagination.js +1 -1
  92. package/dist/collection/components/pagination/pagination.js.map +1 -1
  93. package/dist/collection/components/pagination/test/pagination.ct.js +20 -0
  94. package/dist/collection/components/pagination/test/pagination.ct.js.map +1 -1
  95. package/dist/collection/components/utils/a11y.js +1 -1
  96. package/dist/collection/components/utils/a11y.js.map +1 -1
  97. package/dist/esm/{a11y-d5dd20ad.js → a11y-115b6a36.js} +2 -2
  98. package/dist/esm/a11y-115b6a36.js.map +1 -0
  99. package/dist/esm/ix-application-header.entry.js +15 -2
  100. package/dist/esm/ix-application-header.entry.js.map +1 -1
  101. package/dist/esm/ix-blind.entry.js +1 -1
  102. package/dist/esm/ix-breadcrumb-item.entry.js +11 -4
  103. package/dist/esm/ix-breadcrumb-item.entry.js.map +1 -1
  104. package/dist/esm/ix-breadcrumb.entry.js +5 -2
  105. package/dist/esm/ix-breadcrumb.entry.js.map +1 -1
  106. package/dist/esm/ix-burger-menu.entry.js +1 -1
  107. package/dist/esm/ix-button.entry.js +1 -1
  108. package/dist/esm/ix-button.entry.js.map +1 -1
  109. package/dist/esm/ix-category-filter.entry.js +1 -1
  110. package/dist/esm/ix-category-filter.entry.js.map +1 -1
  111. package/dist/esm/ix-drawer.entry.js +1 -1
  112. package/dist/esm/ix-drawer.entry.js.map +1 -1
  113. package/dist/esm/ix-dropdown.entry.js +9 -4
  114. package/dist/esm/ix-dropdown.entry.js.map +1 -1
  115. package/dist/esm/ix-icon-button_2.entry.js +1 -1
  116. package/dist/esm/ix-icon-button_2.entry.js.map +1 -1
  117. package/dist/esm/ix-icon-toggle-button.entry.js +2 -2
  118. package/dist/esm/ix-icon-toggle-button.entry.js.map +1 -1
  119. package/dist/esm/ix-input-group.entry.js +16 -3
  120. package/dist/esm/ix-input-group.entry.js.map +1 -1
  121. package/dist/esm/ix-menu.entry.js.map +1 -1
  122. package/dist/esm/ix-modal.entry.js +2 -3
  123. package/dist/esm/ix-modal.entry.js.map +1 -1
  124. package/dist/esm/ix-pagination.entry.js +3 -3
  125. package/dist/esm/ix-pagination.entry.js.map +1 -1
  126. package/dist/esm/ix-slider.entry.js +1 -1
  127. package/dist/esm/ix-toggle-button.entry.js +1 -1
  128. package/dist/esm/ix-toggle.entry.js +1 -1
  129. package/dist/esm/loader.js +1 -1
  130. package/dist/esm/siemens-ix.js +1 -1
  131. package/dist/siemens-ix/{p-4796a3ae.entry.js → p-042b8889.entry.js} +2 -2
  132. package/dist/siemens-ix/{p-b53bed3a.entry.js → p-228c5657.entry.js} +2 -2
  133. package/dist/siemens-ix/{p-fa0d5f4e.entry.js → p-28d29e36.entry.js} +2 -2
  134. package/dist/siemens-ix/p-2fd30d79.js +2 -0
  135. package/dist/siemens-ix/p-2fd30d79.js.map +1 -0
  136. package/dist/siemens-ix/p-302cd093.entry.js +2 -0
  137. package/dist/siemens-ix/{p-eb29049a.entry.js.map → p-302cd093.entry.js.map} +1 -1
  138. package/dist/siemens-ix/p-32265ee2.entry.js +2 -0
  139. package/dist/siemens-ix/p-32265ee2.entry.js.map +1 -0
  140. package/dist/siemens-ix/p-355f9085.entry.js +2 -0
  141. package/dist/siemens-ix/{p-74a7d191.entry.js.map → p-355f9085.entry.js.map} +1 -1
  142. package/dist/siemens-ix/p-574e3cd1.entry.js +2 -0
  143. package/dist/siemens-ix/p-574e3cd1.entry.js.map +1 -0
  144. package/dist/siemens-ix/p-59dc0873.entry.js +2 -0
  145. package/dist/siemens-ix/{p-90efad65.entry.js.map → p-59dc0873.entry.js.map} +1 -1
  146. package/dist/siemens-ix/p-7cc23245.entry.js +2 -0
  147. package/dist/siemens-ix/p-7cc23245.entry.js.map +1 -0
  148. package/dist/siemens-ix/p-9249df8d.entry.js +2 -0
  149. package/dist/siemens-ix/{p-d78cd3f4.entry.js.map → p-9249df8d.entry.js.map} +1 -1
  150. package/dist/siemens-ix/p-ad94f795.entry.js +2 -0
  151. package/dist/siemens-ix/p-ad94f795.entry.js.map +1 -0
  152. package/dist/siemens-ix/{p-0ebc6c4d.entry.js → p-b2042a15.entry.js} +2 -2
  153. package/dist/siemens-ix/p-b2042a15.entry.js.map +1 -0
  154. package/dist/siemens-ix/p-bd873b87.entry.js +2 -0
  155. package/dist/siemens-ix/p-bd873b87.entry.js.map +1 -0
  156. package/dist/siemens-ix/{p-6ae65cac.entry.js → p-c1318e16.entry.js} +2 -2
  157. package/dist/siemens-ix/p-c7e502d7.entry.js +2 -0
  158. package/dist/siemens-ix/p-c7e502d7.entry.js.map +1 -0
  159. package/dist/siemens-ix/p-dcb957d8.entry.js.map +1 -1
  160. package/dist/siemens-ix/{p-77b14ca1.entry.js → p-f304f7ce.entry.js} +2 -2
  161. package/dist/siemens-ix/p-fa7f3eef.entry.js +2 -0
  162. package/dist/siemens-ix/p-fa7f3eef.entry.js.map +1 -0
  163. package/dist/siemens-ix/siemens-ix-core.css +1 -1
  164. package/dist/siemens-ix/siemens-ix.css +12 -0
  165. package/dist/siemens-ix/siemens-ix.esm.js +1 -1
  166. package/dist/siemens-ix/siemens-ix.esm.js.map +1 -1
  167. package/dist/types/components/application-header/application-header.d.ts +1 -0
  168. package/dist/types/components/breadcrumb-item/breadcrumb-item.d.ts +2 -0
  169. package/dist/types/components/input-group/input-group.d.ts +1 -0
  170. package/dist/types/components/input-group/tests/input-group.ct.d.ts +1 -0
  171. package/dist/types/components/menu/menu.d.ts +2 -0
  172. package/dist/types/components.d.ts +2 -0
  173. package/package.json +1 -1
  174. package/scss/components/_checkboxes.scss +3 -0
  175. package/scss/components/_radiobuttons.scss +5 -0
  176. package/dist/cjs/a11y-4fdcefb4.js.map +0 -1
  177. package/dist/esm/a11y-d5dd20ad.js.map +0 -1
  178. package/dist/siemens-ix/p-0ebc6c4d.entry.js.map +0 -1
  179. package/dist/siemens-ix/p-2e75f0e4.entry.js +0 -2
  180. package/dist/siemens-ix/p-2e75f0e4.entry.js.map +0 -1
  181. package/dist/siemens-ix/p-66d7fbd9.entry.js +0 -2
  182. package/dist/siemens-ix/p-66d7fbd9.entry.js.map +0 -1
  183. package/dist/siemens-ix/p-74a7d191.entry.js +0 -2
  184. package/dist/siemens-ix/p-774eca79.entry.js +0 -2
  185. package/dist/siemens-ix/p-774eca79.entry.js.map +0 -1
  186. package/dist/siemens-ix/p-78c9489b.js +0 -2
  187. package/dist/siemens-ix/p-78c9489b.js.map +0 -1
  188. package/dist/siemens-ix/p-7a884056.entry.js +0 -2
  189. package/dist/siemens-ix/p-7a884056.entry.js.map +0 -1
  190. package/dist/siemens-ix/p-7b362f58.entry.js +0 -2
  191. package/dist/siemens-ix/p-7b362f58.entry.js.map +0 -1
  192. package/dist/siemens-ix/p-90efad65.entry.js +0 -2
  193. package/dist/siemens-ix/p-d78cd3f4.entry.js +0 -2
  194. package/dist/siemens-ix/p-d9c99b88.entry.js +0 -2
  195. package/dist/siemens-ix/p-d9c99b88.entry.js.map +0 -1
  196. package/dist/siemens-ix/p-eb29049a.entry.js +0 -2
  197. package/dist/siemens-ix/p-f7b95fd7.entry.js +0 -2
  198. package/dist/siemens-ix/p-f7b95fd7.entry.js.map +0 -1
  199. /package/dist/siemens-ix/{p-4796a3ae.entry.js.map → p-042b8889.entry.js.map} +0 -0
  200. /package/dist/siemens-ix/{p-b53bed3a.entry.js.map → p-228c5657.entry.js.map} +0 -0
  201. /package/dist/siemens-ix/{p-fa0d5f4e.entry.js.map → p-28d29e36.entry.js.map} +0 -0
  202. /package/dist/siemens-ix/{p-6ae65cac.entry.js.map → p-c1318e16.entry.js.map} +0 -0
  203. /package/dist/siemens-ix/{p-77b14ca1.entry.js.map → p-f304f7ce.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb-item.js","sourceRoot":"","sources":["../../../src/components/breadcrumb-item/breadcrumb-item.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,SAAS,EACT,OAAO,EACP,KAAK,EAEL,QAAQ,EACR,CAAC,EACD,IAAI,EACJ,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcnD,MAAM,OAAO,cAAc;;;;iBAcA,IAAI;mBAGX,IAAI;uBAGA,IAAI;6BAGE,KAAK;;EAKjC,gBAAgB;IACd,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED,eAAe;IACb,OAAO,CAAC;MACN,OAAO,EAAE,IAAI,CAAC,WAAW;MACzB,QAAQ,EAAE,GAAG;MACb,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;MACf,UAAU,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;MAC3B,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;EACL,CAAC;EAED,MAAM;IACJ,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,KAAK,GAAoB;MAC7B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;MAC7C,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,QAAQ,EAAE,KAAK;MACf,QAAQ,EAAE,KAAK;MACf,QAAQ,EAAE,KAAK;MACf,IAAI,EAAE,IAAI,CAAC,IAAI;MACf,QAAQ,EAAE,IAAI;MACd,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,KAAK;MACf,IAAI,EAAE,QAAQ;MACd,QAAQ,EACN,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;MAClE,YAAY,EAAE;QACZ,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;OAC3C;MACD,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACjB,OAAO,EAAC,IAAI,IAAC,KAAK,EAAE,WAAW,GAAS,CAAC;KAC1C;IAED,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE;QACL,cAAc,EAAE,CAAC,IAAI,CAAC,WAAW;OAClC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;MAE9C;QACE,EAAC,UAAU,oBACL,KAAK,IACT,YAAY,EACV,EAAC,QAAQ,QACN,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClB,eACE,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,SAAS,GACP,CACZ,CAAC,CAAC,CAAC,IAAI,CACC;UAGZ,IAAI,CAAC,KAAK;UACX,eAAa,CACF,CACV,CACA,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n h,\n Host,\n Prop,\n} from '@stencil/core';\nimport animejs from 'animejs';\nimport { BaseButton, BaseButtonProps } from '../button/base-button';\nimport { a11yHostAttributes } from '../utils/a11y';\n\nexport type BreadcrumbItemLinkTarget =\n | '_self'\n | '_blank'\n | '_parent'\n | '_top'\n | string;\n\n@Component({\n tag: 'ix-breadcrumb-item',\n styleUrl: 'breadcrumb-item.scss',\n shadow: true,\n})\nexport class BreadcrumbItem {\n @Element() hostElement!: HTMLIxBreadcrumbItemElement;\n\n /**\n * Breadcrumb label\n */\n @Prop() label: string;\n\n /**\n * Icon to be displayed next ot the label\n */\n @Prop() icon: string;\n\n /**@internal */\n @Prop() ghost: boolean = true;\n\n /**@internal */\n @Prop() visible = true;\n\n /**@internal */\n @Prop() showChevron = true;\n\n /** @internal */\n @Prop() isDropdownTrigger = false;\n\n /**@internal */\n @Event() itemClick: EventEmitter<string>;\n\n componentDidLoad() {\n this.animationFadeIn();\n }\n\n animationFadeIn() {\n animejs({\n targets: this.hostElement,\n duration: 150,\n opacity: [0, 1],\n translateX: ['-100%', '0%'],\n easing: 'linear',\n });\n }\n\n render() {\n const a11y = a11yHostAttributes(this.hostElement);\n const props: BaseButtonProps = {\n variant: this.ghost ? 'primary' : 'secondary',\n outline: false,\n ghost: this.ghost,\n iconOnly: false,\n iconOval: false,\n disabled: false,\n icon: this.icon,\n iconSize: '16',\n loading: false,\n selected: false,\n type: 'button',\n tabIndex:\n this.hostElement.tabIndex !== -1 ? this.hostElement.tabIndex : 0,\n extraClasses: {\n 'dropdown-trigger': this.isDropdownTrigger,\n },\n ariaAttributes: a11y,\n };\n\n if (!this.visible) {\n return <Host class={'invisible'}></Host>;\n }\n\n return (\n <Host\n class={{\n 'hide-chevron': !this.showChevron,\n }}\n onClick={() => this.itemClick.emit(this.label)}\n >\n <li>\n <BaseButton\n {...props}\n afterContent={\n <Fragment>\n {this.showChevron ? (\n <ix-icon\n name={'chevron-right-small'}\n size=\"16\"\n class={'chevron'}\n ></ix-icon>\n ) : null}\n </Fragment>\n }\n >\n {this.label}\n <slot></slot>\n </BaseButton>\n </li>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"breadcrumb-item.js","sourceRoot":"","sources":["../../../src/components/breadcrumb-item/breadcrumb-item.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,SAAS,EACT,OAAO,EACP,KAAK,EAEL,QAAQ,EACR,CAAC,EACD,IAAI,EACJ,IAAI,EACJ,KAAK,GACN,MAAM,eAAe,CAAC;AACvB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcnD,MAAM,OAAO,cAAc;;;;iBAcA,IAAI;mBAGX,IAAI;uBAGA,IAAI;6BAGE,KAAK;;;EAOjC,gBAAgB;IACd,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED,iBAAiB;IACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE;MAC/C,kBAAkB;MAClB,eAAe;MACf,eAAe;KAChB,CAAC,CAAC;EACL,CAAC;EAED,eAAe;IACb,OAAO,CAAC;MACN,OAAO,EAAE,IAAI,CAAC,WAAW;MACzB,QAAQ,EAAE,GAAG;MACb,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;MACf,UAAU,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC;MAC3B,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;EACL,CAAC;EAED,MAAM;IACJ,MAAM,KAAK,GAAoB;MAC7B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;MAC7C,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,QAAQ,EAAE,KAAK;MACf,QAAQ,EAAE,KAAK;MACf,QAAQ,EAAE,KAAK;MACf,IAAI,EAAE,IAAI,CAAC,IAAI;MACf,QAAQ,EAAE,IAAI;MACd,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,KAAK;MACf,IAAI,EAAE,QAAQ;MACd,QAAQ,EACN,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;MAClE,YAAY,EAAE;QACZ,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;OAC3C;MACD,cAAc,EAAE,IAAI,CAAC,IAAI;KAC1B,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;MACjB,OAAO,EAAC,IAAI,IAAC,KAAK,EAAE,WAAW,GAAS,CAAC;KAC1C;IAED,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE;QACL,cAAc,EAAE,CAAC,IAAI,CAAC,WAAW;OAClC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;MAE9C;QACE,EAAC,UAAU,oBACL,KAAK,IACT,YAAY,EACV,EAAC,QAAQ,QACN,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAClB,eACE,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,SAAS,GACP,CACZ,CAAC,CAAC,CAAC,IAAI,CACC;UAGZ,IAAI,CAAC,KAAK;UACX,eAAa,CACF,CACV,CACA,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n Fragment,\n h,\n Host,\n Prop,\n State,\n} from '@stencil/core';\nimport animejs from 'animejs';\nimport { BaseButton, BaseButtonProps } from '../button/base-button';\nimport { a11yHostAttributes } from '../utils/a11y';\n\nexport type BreadcrumbItemLinkTarget =\n | '_self'\n | '_blank'\n | '_parent'\n | '_top'\n | string;\n\n@Component({\n tag: 'ix-breadcrumb-item',\n styleUrl: 'breadcrumb-item.scss',\n shadow: true,\n})\nexport class BreadcrumbItem {\n @Element() hostElement!: HTMLIxBreadcrumbItemElement;\n\n /**\n * Breadcrumb label\n */\n @Prop() label: string;\n\n /**\n * Icon to be displayed next ot the label\n */\n @Prop() icon: string;\n\n /**@internal */\n @Prop() ghost: boolean = true;\n\n /**@internal */\n @Prop() visible = true;\n\n /**@internal */\n @Prop() showChevron = true;\n\n /** @internal */\n @Prop() isDropdownTrigger = false;\n\n /**@internal */\n @Event() itemClick: EventEmitter<string>;\n\n @State() a11y: any;\n\n componentDidLoad() {\n this.animationFadeIn();\n }\n\n componentWillLoad() {\n this.a11y = a11yHostAttributes(this.hostElement, [\n 'aria-describedby',\n 'aria-controls',\n 'aria-expanded',\n ]);\n }\n\n animationFadeIn() {\n animejs({\n targets: this.hostElement,\n duration: 150,\n opacity: [0, 1],\n translateX: ['-100%', '0%'],\n easing: 'linear',\n });\n }\n\n render() {\n const props: BaseButtonProps = {\n variant: this.ghost ? 'primary' : 'secondary',\n outline: false,\n ghost: this.ghost,\n iconOnly: false,\n iconOval: false,\n disabled: false,\n icon: this.icon,\n iconSize: '16',\n loading: false,\n selected: false,\n type: 'button',\n tabIndex:\n this.hostElement.tabIndex !== -1 ? this.hostElement.tabIndex : 0,\n extraClasses: {\n 'dropdown-trigger': this.isDropdownTrigger,\n },\n ariaAttributes: this.a11y,\n };\n\n if (!this.visible) {\n return <Host class={'invisible'}></Host>;\n }\n\n return (\n <Host\n class={{\n 'hide-chevron': !this.showChevron,\n }}\n onClick={() => this.itemClick.emit(this.label)}\n >\n <li>\n <BaseButton\n {...props}\n afterContent={\n <Fragment>\n {this.showChevron ? (\n <ix-icon\n name={'chevron-right-small'}\n size=\"16\"\n class={'chevron'}\n ></ix-icon>\n ) : null}\n </Fragment>\n }\n >\n {this.label}\n <slot></slot>\n </BaseButton>\n </li>\n </Host>\n );\n }\n}\n"]}
@@ -188,6 +188,9 @@
188
188
  color: var(--theme-btn-primary--color--active);
189
189
  }
190
190
 
191
+ :host(.disabled) {
192
+ pointer-events: none;
193
+ }
191
194
  :host(.disabled) .btn-primary.disabled, :host(.disabled) .btn-primary:disabled {
192
195
  pointer-events: none;
193
196
  border-color: var(--theme-btn-primary--border-color--disabled);
@@ -247,6 +250,9 @@
247
250
  color: var(--theme-btn-outline-primary--color--active);
248
251
  }
249
252
 
253
+ :host(.disabled) {
254
+ pointer-events: none;
255
+ }
250
256
  :host(.disabled) .btn-outline-primary.disabled, :host(.disabled) .btn-outline-primary:disabled {
251
257
  pointer-events: none;
252
258
  border-color: var(--theme-btn-outline-primary--border-color--disabled);
@@ -302,6 +308,9 @@
302
308
  color: var(--theme-btn-invisible-primary--color--active);
303
309
  }
304
310
 
311
+ :host(.disabled) {
312
+ pointer-events: none;
313
+ }
305
314
  :host(.disabled) .btn-invisible-primary.disabled, :host(.disabled) .btn-invisible-primary:disabled {
306
315
  pointer-events: none;
307
316
  background-color: var(--theme-btn-invisible-primary--background--disabled);
@@ -360,6 +369,9 @@
360
369
  color: var(--theme-btn-secondary--color--active);
361
370
  }
362
371
 
372
+ :host(.disabled) {
373
+ pointer-events: none;
374
+ }
363
375
  :host(.disabled) .btn-secondary.disabled, :host(.disabled) .btn-secondary:disabled {
364
376
  pointer-events: none;
365
377
  border-color: var(--theme-btn-secondary--border-color--disabled);
@@ -419,6 +431,9 @@
419
431
  color: var(--theme-btn-outline-secondary--color--active);
420
432
  }
421
433
 
434
+ :host(.disabled) {
435
+ pointer-events: none;
436
+ }
422
437
  :host(.disabled) .btn-outline-secondary.disabled, :host(.disabled) .btn-outline-secondary:disabled {
423
438
  pointer-events: none;
424
439
  border-color: var(--theme-btn-outline-secondary--border-color--disabled);
@@ -474,6 +489,9 @@
474
489
  color: var(--theme-btn-invisible-secondary--color--active);
475
490
  }
476
491
 
492
+ :host(.disabled) {
493
+ pointer-events: none;
494
+ }
477
495
  :host(.disabled) .btn-invisible-secondary.disabled, :host(.disabled) .btn-invisible-secondary:disabled {
478
496
  pointer-events: none;
479
497
  background-color: var(--theme-btn-invisible-secondary--background--disabled);
@@ -33,4 +33,10 @@ test('replace icon with spinner while loading', async ({ mount, page }) => {
33
33
  await expect(button.locator('ix-spinner')).toBeVisible();
34
34
  await expect(button.locator('ix-icon')).not.toBeVisible();
35
35
  });
36
+ test('should not fire event when disabled', async ({ mount, page }) => {
37
+ await mount(`<ix-button disabled>Content</ix-button>`);
38
+ const button = page.locator('ix-button');
39
+ await expect(button).toHaveClass(/hydrated/);
40
+ expect(button).toHaveCSS('pointer-events', 'none');
41
+ });
36
42
  //# sourceMappingURL=button.ct.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.ct.js","sourceRoot":"","sources":["../../../../src/components/button/test/button.ct.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACxC,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EACzC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EAC1C,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;EAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EACzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EAC3D,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EAEzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;EAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAwB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACxE,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;EAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EAEzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;EAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAwB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;EACzD,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC,CAAC,CAAC","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { expect } from '@playwright/test';\nimport { test } from '@utils/test';\n\ntest('renders', async ({ mount, page }) => {\n await mount(`<ix-button>Content</ix-button>`);\n const button = page.locator('ix-button');\n await expect(button).toHaveClass(/hydrated/);\n});\n\ntest('show icon', async ({ mount, page }) => {\n await mount(`<ix-button icon=\"rocket\">Content</ix-button>`);\n const button = page.locator('ix-button');\n await expect(button.locator('ix-icon')).toBeVisible();\n});\n\ntest('show spinner while loading', async ({ mount, page }) => {\n await mount(`<ix-button>Content</ix-button>`);\n const button = page.locator('ix-button');\n\n await expect(button.locator('ix-spinner')).not.toBeVisible();\n await button.evaluate((btn: HTMLIxButtonElement) => (btn.loading = true));\n await expect(button.locator('ix-spinner')).toBeVisible();\n});\n\ntest('replace icon with spinner while loading', async ({ mount, page }) => {\n await mount(`<ix-button icon=\"rocket\">Content</ix-button>`);\n const button = page.locator('ix-button');\n\n await expect(button.locator('ix-spinner')).not.toBeVisible();\n await button.evaluate((btn: HTMLIxButtonElement) => (btn.loading = true));\n await expect(button.locator('ix-spinner')).toBeVisible();\n await expect(button.locator('ix-icon')).not.toBeVisible();\n});\n"]}
1
+ {"version":3,"file":"button.ct.js","sourceRoot":"","sources":["../../../../src/components/button/test/button.ct.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACxC,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EACzC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EAC1C,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;EAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EACzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EAC3D,MAAM,KAAK,CAAC,gCAAgC,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EAEzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;EAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAwB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACxE,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;EAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EAEzC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;EAC7D,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAwB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;EAC1E,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;EACzD,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACpE,MAAM,KAAK,CAAC,yCAAyC,CAAC,CAAC;EACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;EAEzC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;EAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { expect } from '@playwright/test';\nimport { test } from '@utils/test';\n\ntest('renders', async ({ mount, page }) => {\n await mount(`<ix-button>Content</ix-button>`);\n const button = page.locator('ix-button');\n await expect(button).toHaveClass(/hydrated/);\n});\n\ntest('show icon', async ({ mount, page }) => {\n await mount(`<ix-button icon=\"rocket\">Content</ix-button>`);\n const button = page.locator('ix-button');\n await expect(button.locator('ix-icon')).toBeVisible();\n});\n\ntest('show spinner while loading', async ({ mount, page }) => {\n await mount(`<ix-button>Content</ix-button>`);\n const button = page.locator('ix-button');\n\n await expect(button.locator('ix-spinner')).not.toBeVisible();\n await button.evaluate((btn: HTMLIxButtonElement) => (btn.loading = true));\n await expect(button.locator('ix-spinner')).toBeVisible();\n});\n\ntest('replace icon with spinner while loading', async ({ mount, page }) => {\n await mount(`<ix-button icon=\"rocket\">Content</ix-button>`);\n const button = page.locator('ix-button');\n\n await expect(button.locator('ix-spinner')).not.toBeVisible();\n await button.evaluate((btn: HTMLIxButtonElement) => (btn.loading = true));\n await expect(button.locator('ix-spinner')).toBeVisible();\n await expect(button.locator('ix-icon')).not.toBeVisible();\n});\n\ntest('should not fire event when disabled', async ({ mount, page }) => {\n await mount(`<ix-button disabled>Content</ix-button>`);\n const button = page.locator('ix-button');\n\n await expect(button).toHaveClass(/hydrated/);\n expect(button).toHaveCSS('pointer-events', 'none');\n});\n"]}
@@ -256,6 +256,9 @@
256
256
  color: var(--theme-btn-primary--color--active);
257
257
  }
258
258
 
259
+ :host(.disabled) {
260
+ pointer-events: none;
261
+ }
259
262
  :host(.disabled) .btn-primary.disabled, :host(.disabled) .btn-primary:disabled {
260
263
  pointer-events: none;
261
264
  border-color: var(--theme-btn-primary--border-color--disabled);
@@ -315,6 +318,9 @@
315
318
  color: var(--theme-btn-outline-primary--color--active);
316
319
  }
317
320
 
321
+ :host(.disabled) {
322
+ pointer-events: none;
323
+ }
318
324
  :host(.disabled) .btn-outline-primary.disabled, :host(.disabled) .btn-outline-primary:disabled {
319
325
  pointer-events: none;
320
326
  border-color: var(--theme-btn-outline-primary--border-color--disabled);
@@ -370,6 +376,9 @@
370
376
  color: var(--theme-btn-invisible-primary--color--active);
371
377
  }
372
378
 
379
+ :host(.disabled) {
380
+ pointer-events: none;
381
+ }
373
382
  :host(.disabled) .btn-invisible-primary.disabled, :host(.disabled) .btn-invisible-primary:disabled {
374
383
  pointer-events: none;
375
384
  background-color: var(--theme-btn-invisible-primary--background--disabled);
@@ -428,6 +437,9 @@
428
437
  color: var(--theme-btn-secondary--color--active);
429
438
  }
430
439
 
440
+ :host(.disabled) {
441
+ pointer-events: none;
442
+ }
431
443
  :host(.disabled) .btn-secondary.disabled, :host(.disabled) .btn-secondary:disabled {
432
444
  pointer-events: none;
433
445
  border-color: var(--theme-btn-secondary--border-color--disabled);
@@ -487,6 +499,9 @@
487
499
  color: var(--theme-btn-outline-secondary--color--active);
488
500
  }
489
501
 
502
+ :host(.disabled) {
503
+ pointer-events: none;
504
+ }
490
505
  :host(.disabled) .btn-outline-secondary.disabled, :host(.disabled) .btn-outline-secondary:disabled {
491
506
  pointer-events: none;
492
507
  border-color: var(--theme-btn-outline-secondary--border-color--disabled);
@@ -542,6 +557,9 @@
542
557
  color: var(--theme-btn-invisible-secondary--color--active);
543
558
  }
544
559
 
560
+ :host(.disabled) {
561
+ pointer-events: none;
562
+ }
545
563
  :host(.disabled) .btn-invisible-secondary.disabled, :host(.disabled) .btn-invisible-secondary:disabled {
546
564
  pointer-events: none;
547
565
  background-color: var(--theme-btn-invisible-secondary--background--disabled);
@@ -119,4 +119,8 @@
119
119
  height: 100%;
120
120
  width: 100%;
121
121
  overflow-y: auto;
122
+ }
123
+
124
+ :host(.toggle) {
125
+ visibility: visible;
122
126
  }
@@ -30,7 +30,10 @@ export class Dropdown {
30
30
  if (dropdownDisposer.has(this.localUId)) {
31
31
  console.warn('Dropdown with duplicated id detected');
32
32
  }
33
- dropdownDisposer.set(this.localUId, this.close.bind(this));
33
+ dropdownDisposer.set(this.localUId, {
34
+ dispose: this.close.bind(this),
35
+ element: this.hostElement,
36
+ });
34
37
  }
35
38
  get dropdownItems() {
36
39
  return Array.from(this.hostElement.querySelectorAll('ix-dropdown-item'));
@@ -124,9 +127,11 @@ export class Dropdown {
124
127
  }
125
128
  }
126
129
  if (newShow) {
127
- dropdownDisposer.forEach((dispose, id) => {
128
- if (id !== this.localUId && !this.isAnchorSubmenu()) {
129
- dispose();
130
+ dropdownDisposer.forEach((entry, id) => {
131
+ if (id !== this.localUId &&
132
+ !this.isAnchorSubmenu() &&
133
+ !entry.element.contains(this.hostElement)) {
134
+ entry.dispose();
130
135
  }
131
136
  });
132
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n autoUpdate,\n computePosition,\n ComputePositionConfig,\n flip,\n inline,\n offset,\n shift,\n} from '@floating-ui/dom';\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { AlignedPlacement } from './placement';\n\n/**\n * @internal\n */\nexport type DropdownTriggerEvent = 'click' | 'hover' | 'focus';\n\ntype DisposeDropdown = () => void;\nconst dropdownDisposer = new Map<string, DisposeDropdown>();\nlet sequenceId = 0;\n\n@Component({\n tag: 'ix-dropdown',\n styleUrl: 'dropdown.scss',\n shadow: true,\n})\nexport class Dropdown {\n @Element() hostElement!: HTMLIxDropdownElement;\n\n /**\n * Suppress the automatic placement of the dropdown.\n *\n * @since 2.0.0\n */\n @Prop() suppressAutomaticPlacement = false;\n\n /**\n * Show dropdown\n */\n @Prop({ mutable: true, reflect: true }) show = false;\n\n /**\n * Define an element that triggers the dropdown.\n * A trigger can either be a string that will be interpreted as id attribute or a DOM element.\n */\n @Prop() trigger: string | HTMLElement;\n\n /**\n * Define an anchor element\n */\n @Prop() anchor: string | HTMLElement;\n\n /**\n * Controls if the dropdown will be closed in response to a click event depending on the position of the event relative to the dropdown.\n */\n @Prop() closeBehavior: 'inside' | 'outside' | 'both' | boolean = 'both';\n\n /**\n * Placement of the dropdown\n */\n @Prop() placement: AlignedPlacement = 'bottom-start';\n\n /**\n * Position strategy\n */\n @Prop() positioningStrategy: 'absolute' | 'fixed' = 'fixed';\n\n /**\n * An optional header shown at the top of the dropdown\n */\n @Prop() header?: string;\n\n /**\n * Move dropdown along main axis of alignment\n *\n * @internal\n */\n @Prop() offset: {\n mainAxis?: number;\n crossAxis?: number;\n alignmentAxis?: number;\n };\n\n /**\n * Define one or more events to open dropdown\n * @internal\n */\n @Prop() triggerEvent: DropdownTriggerEvent | DropdownTriggerEvent[] = 'click';\n\n /**\n * @internal\n */\n @Prop() overwriteDropdownStyle: (delegate: {\n dropdownRef: HTMLElement;\n triggerRef?: HTMLElement;\n }) => Promise<Partial<CSSStyleDeclaration>>;\n\n /**\n * Fire event after visibility of dropdown has changed\n */\n @Event() showChanged: EventEmitter<boolean>;\n\n private autoUpdateCleanup: () => void = null;\n\n private triggerElement?: Element;\n private anchorElement?: Element;\n\n private dropdownRef: HTMLElement;\n\n private toggleBind: any;\n private openBind: any;\n\n private localUId = `dropdown-${sequenceId++}-${new Date().valueOf()}`;\n\n constructor() {\n this.toggleBind = this.toggle.bind(this);\n this.openBind = this.open.bind(this);\n\n if (dropdownDisposer.has(this.localUId)) {\n console.warn('Dropdown with duplicated id detected');\n }\n\n dropdownDisposer.set(this.localUId, this.close.bind(this));\n }\n\n get dropdownItems() {\n return Array.from(this.hostElement.querySelectorAll('ix-dropdown-item'));\n }\n\n get slotElement() {\n return this.hostElement.shadowRoot.querySelector('slot');\n }\n\n private addEventListenersFor(triggerEvent: DropdownTriggerEvent) {\n switch (triggerEvent) {\n case 'click':\n this.triggerElement.addEventListener('click', this.openBind);\n break;\n\n case 'hover':\n this.triggerElement.addEventListener('mouseenter', this.openBind);\n break;\n\n case 'focus':\n this.triggerElement.addEventListener('focusin', this.openBind);\n break;\n }\n }\n\n private removeEventListenersFor(\n triggerEvent: DropdownTriggerEvent,\n triggerElement: Element\n ) {\n switch (triggerEvent) {\n case 'click':\n if (this.closeBehavior === 'outside') {\n triggerElement.removeEventListener('click', this.openBind);\n } else {\n triggerElement.removeEventListener('click', this.toggleBind);\n }\n break;\n\n case 'hover':\n triggerElement.removeEventListener('mouseenter', this.openBind);\n break;\n\n case 'focus':\n triggerElement.removeEventListener('focusin', this.openBind);\n break;\n }\n }\n\n private async registerListener(element: string | HTMLElement) {\n this.triggerElement = await this.resolveElement(element);\n if (this.triggerElement) {\n if (Array.isArray(this.triggerEvent)) {\n this.triggerEvent.forEach((triggerEvent) => {\n this.addEventListenersFor(triggerEvent);\n });\n } else {\n this.addEventListenersFor(this.triggerEvent);\n }\n }\n }\n\n private async unregisterListener(element: string | HTMLElement) {\n const trigger = await this.resolveElement(element);\n if (Array.isArray(this.triggerEvent)) {\n this.triggerEvent.forEach((triggerEvent) => {\n this.removeEventListenersFor(triggerEvent, trigger);\n });\n } else {\n this.removeEventListenersFor(this.triggerEvent, trigger);\n }\n }\n\n private resolveElement(element: string | HTMLElement): Promise<Element> {\n if (typeof element !== 'string') {\n return Promise.resolve(element);\n }\n\n const selector = `#${element}`;\n return new Promise((resolve) => {\n if (document.querySelector(selector)) {\n return resolve(document.querySelector(selector));\n }\n\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve(document.querySelector(selector));\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n }\n\n @Watch('show')\n async changedShow(newShow: boolean) {\n if (newShow) {\n this.anchorElement = await (this.anchor\n ? this.resolveElement(this.anchor)\n : this.resolveElement(this.trigger));\n\n if (this.anchorElement) {\n this.applyDropdownPosition();\n }\n }\n\n if (newShow) {\n dropdownDisposer.forEach((dispose, id) => {\n if (id !== this.localUId && !this.isAnchorSubmenu()) {\n dispose();\n }\n });\n }\n }\n\n @Watch('trigger')\n changedTrigger(\n newTriggerValue: string | HTMLElement,\n oldTriggerValue: string | HTMLElement\n ) {\n if (newTriggerValue) {\n this.registerListener(newTriggerValue);\n }\n\n if (oldTriggerValue) {\n this.unregisterListener(oldTriggerValue);\n }\n }\n\n @Listen('click', {\n target: 'window',\n })\n clickOutside(event: PointerEvent) {\n const target = event.target as HTMLElement;\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (\n this.show === false ||\n this.closeBehavior === false ||\n this.anchorElement?.contains(target) ||\n this.triggerElement?.contains(target)\n ) {\n return;\n }\n\n const clickInsideDropdown = this.isClickInsideDropdown(event);\n\n switch (this.closeBehavior) {\n case 'outside':\n if (!clickInsideDropdown || this.anchor === target) {\n this.close();\n }\n break;\n case 'inside':\n if (clickInsideDropdown && this.hostElement !== target) {\n this.close();\n }\n break;\n case 'both':\n if (this.hostElement !== target) {\n this.close();\n }\n break;\n default:\n this.close();\n }\n }\n\n @Listen('keydown', {\n target: 'window',\n })\n keydown(event: KeyboardEvent) {\n if (this.show === true && event.code === 'Escape') {\n this.close();\n }\n }\n\n private isNestedDropdown(element: Element) {\n return element.closest('ix-dropdown');\n }\n\n private isAnchorSubmenu() {\n const anchor = this.anchorElement?.closest('ix-dropdown-item');\n if (!anchor) {\n return false;\n }\n\n return true;\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n\n if (this.isNestedDropdown(event.target as HTMLElement)) {\n event.stopPropagation();\n }\n\n const { defaultPrevented } = this.showChanged.emit(this.show);\n\n if (!defaultPrevented) {\n this.show = !this.show;\n }\n }\n\n private open(event: Event) {\n event.preventDefault();\n\n if (this.isNestedDropdown(event.target as HTMLElement)) {\n event.stopPropagation();\n }\n\n const { defaultPrevented } = this.showChanged.emit(true);\n\n if (!defaultPrevented) {\n this.show = true;\n }\n }\n\n private close() {\n const { defaultPrevented } = this.showChanged.emit(false);\n\n if (!defaultPrevented) {\n this.show = false;\n }\n }\n\n private async applyDropdownPosition() {\n if (!this.anchorElement) {\n return;\n }\n if (!this.dropdownRef) {\n return;\n }\n const isSubmenu = this.isAnchorSubmenu();\n\n let positionConfig: Partial<ComputePositionConfig> = {\n strategy: this.positioningStrategy,\n middleware: [],\n };\n\n if (!this.suppressAutomaticPlacement) {\n positionConfig.middleware.push(\n flip({ fallbackStrategy: 'initialPlacement' })\n );\n }\n\n positionConfig.placement = isSubmenu ? 'right-start' : this.placement;\n\n positionConfig.middleware = [\n ...positionConfig.middleware,\n inline(),\n shift(),\n ];\n\n if (this.offset) {\n positionConfig.middleware.push(offset(this.offset));\n }\n\n if (this.autoUpdateCleanup) {\n this.autoUpdateCleanup();\n this.autoUpdateCleanup = null;\n }\n\n this.autoUpdateCleanup = autoUpdate(\n this.anchorElement,\n this.dropdownRef,\n async () => {\n const computeResponse = await computePosition(\n this.anchorElement,\n this.dropdownRef,\n positionConfig\n );\n\n Object.assign(this.dropdownRef.style, {\n top: '0',\n left: '0',\n transform: `translate(${Math.round(computeResponse.x)}px,${Math.round(\n computeResponse.y\n )}px)`,\n });\n if (this.overwriteDropdownStyle) {\n const overwriteStyle = await this.overwriteDropdownStyle({\n dropdownRef: this.dropdownRef,\n triggerRef: this.triggerElement as HTMLElement,\n });\n\n Object.assign(this.dropdownRef.style, overwriteStyle);\n }\n },\n {\n ancestorResize: true,\n ancestorScroll: true,\n elementResize: true,\n }\n );\n }\n\n async componentDidLoad() {\n this.changedTrigger(this.trigger, null);\n }\n\n async componentDidRender() {\n await this.applyDropdownPosition();\n this.anchorElement = await (this.anchor\n ? this.resolveElement(this.anchor)\n : this.resolveElement(this.trigger));\n\n if (\n this.isAnchorSubmenu() &&\n this.anchorElement?.tagName === 'IX-DROPDOWN-ITEM'\n ) {\n (this.anchorElement as HTMLIxDropdownItemElement).isSubMenu = true;\n }\n }\n\n private isClickInsideDropdown(event: PointerEvent) {\n const rect = this.dropdownRef.getBoundingClientRect();\n return (\n rect.top <= event.clientY &&\n event.clientY <= rect.top + rect.height &&\n rect.left <= event.clientX &&\n event.clientX <= rect.left + rect.width\n );\n }\n\n disconnectedCallback() {\n if (this.autoUpdateCleanup) {\n this.autoUpdateCleanup();\n }\n\n if (dropdownDisposer.has(this.localUId)) {\n dropdownDisposer.delete(this.localUId);\n }\n }\n\n /**\n * Update position of dropdown\n */\n @Method()\n async updatePosition() {\n this.applyDropdownPosition();\n }\n\n render() {\n return (\n <Host\n ref={(ref) => (this.dropdownRef = ref)}\n class={{\n 'dropdown-menu': true,\n show: this.show,\n overflow: true,\n }}\n style={{\n margin: '0',\n minWidth: '0px',\n position: this.positioningStrategy,\n }}\n role=\"list\"\n >\n <div style={{ display: 'contents' }}>\n {this.header ? <div class=\"dropdown-header\">{this.header}</div> : ''}\n\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"dropdown.js","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n autoUpdate,\n computePosition,\n ComputePositionConfig,\n flip,\n inline,\n offset,\n shift,\n} from '@floating-ui/dom';\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { AlignedPlacement } from './placement';\n\n/**\n * @internal\n */\nexport type DropdownTriggerEvent = 'click' | 'hover' | 'focus';\n\ntype DisposeDropdown = () => void;\ntype DropdownDisposerEntry = {\n element: HTMLIxDropdownElement;\n dispose: DisposeDropdown;\n};\nconst dropdownDisposer = new Map<string, DropdownDisposerEntry>();\nlet sequenceId = 0;\n\n@Component({\n tag: 'ix-dropdown',\n styleUrl: 'dropdown.scss',\n shadow: true,\n})\nexport class Dropdown {\n @Element() hostElement!: HTMLIxDropdownElement;\n\n /**\n * Suppress the automatic placement of the dropdown.\n *\n * @since 2.0.0\n */\n @Prop() suppressAutomaticPlacement = false;\n\n /**\n * Show dropdown\n */\n @Prop({ mutable: true, reflect: true }) show = false;\n\n /**\n * Define an element that triggers the dropdown.\n * A trigger can either be a string that will be interpreted as id attribute or a DOM element.\n */\n @Prop() trigger: string | HTMLElement;\n\n /**\n * Define an anchor element\n */\n @Prop() anchor: string | HTMLElement;\n\n /**\n * Controls if the dropdown will be closed in response to a click event depending on the position of the event relative to the dropdown.\n */\n @Prop() closeBehavior: 'inside' | 'outside' | 'both' | boolean = 'both';\n\n /**\n * Placement of the dropdown\n */\n @Prop() placement: AlignedPlacement = 'bottom-start';\n\n /**\n * Position strategy\n */\n @Prop() positioningStrategy: 'absolute' | 'fixed' = 'fixed';\n\n /**\n * An optional header shown at the top of the dropdown\n */\n @Prop() header?: string;\n\n /**\n * Move dropdown along main axis of alignment\n *\n * @internal\n */\n @Prop() offset: {\n mainAxis?: number;\n crossAxis?: number;\n alignmentAxis?: number;\n };\n\n /**\n * Define one or more events to open dropdown\n * @internal\n */\n @Prop() triggerEvent: DropdownTriggerEvent | DropdownTriggerEvent[] = 'click';\n\n /**\n * @internal\n */\n @Prop() overwriteDropdownStyle: (delegate: {\n dropdownRef: HTMLElement;\n triggerRef?: HTMLElement;\n }) => Promise<Partial<CSSStyleDeclaration>>;\n\n /**\n * Fire event after visibility of dropdown has changed\n */\n @Event() showChanged: EventEmitter<boolean>;\n\n private autoUpdateCleanup: () => void = null;\n\n private triggerElement?: Element;\n private anchorElement?: Element;\n\n private dropdownRef: HTMLElement;\n\n private toggleBind: any;\n private openBind: any;\n\n private localUId = `dropdown-${sequenceId++}-${new Date().valueOf()}`;\n\n constructor() {\n this.toggleBind = this.toggle.bind(this);\n this.openBind = this.open.bind(this);\n\n if (dropdownDisposer.has(this.localUId)) {\n console.warn('Dropdown with duplicated id detected');\n }\n\n dropdownDisposer.set(this.localUId, {\n dispose: this.close.bind(this),\n element: this.hostElement,\n });\n }\n\n get dropdownItems() {\n return Array.from(this.hostElement.querySelectorAll('ix-dropdown-item'));\n }\n\n get slotElement() {\n return this.hostElement.shadowRoot.querySelector('slot');\n }\n\n private addEventListenersFor(triggerEvent: DropdownTriggerEvent) {\n switch (triggerEvent) {\n case 'click':\n this.triggerElement.addEventListener('click', this.openBind);\n break;\n\n case 'hover':\n this.triggerElement.addEventListener('mouseenter', this.openBind);\n break;\n\n case 'focus':\n this.triggerElement.addEventListener('focusin', this.openBind);\n break;\n }\n }\n\n private removeEventListenersFor(\n triggerEvent: DropdownTriggerEvent,\n triggerElement: Element\n ) {\n switch (triggerEvent) {\n case 'click':\n if (this.closeBehavior === 'outside') {\n triggerElement.removeEventListener('click', this.openBind);\n } else {\n triggerElement.removeEventListener('click', this.toggleBind);\n }\n break;\n\n case 'hover':\n triggerElement.removeEventListener('mouseenter', this.openBind);\n break;\n\n case 'focus':\n triggerElement.removeEventListener('focusin', this.openBind);\n break;\n }\n }\n\n private async registerListener(element: string | HTMLElement) {\n this.triggerElement = await this.resolveElement(element);\n if (this.triggerElement) {\n if (Array.isArray(this.triggerEvent)) {\n this.triggerEvent.forEach((triggerEvent) => {\n this.addEventListenersFor(triggerEvent);\n });\n } else {\n this.addEventListenersFor(this.triggerEvent);\n }\n }\n }\n\n private async unregisterListener(element: string | HTMLElement) {\n const trigger = await this.resolveElement(element);\n if (Array.isArray(this.triggerEvent)) {\n this.triggerEvent.forEach((triggerEvent) => {\n this.removeEventListenersFor(triggerEvent, trigger);\n });\n } else {\n this.removeEventListenersFor(this.triggerEvent, trigger);\n }\n }\n\n private resolveElement(element: string | HTMLElement): Promise<Element> {\n if (typeof element !== 'string') {\n return Promise.resolve(element);\n }\n\n const selector = `#${element}`;\n return new Promise((resolve) => {\n if (document.querySelector(selector)) {\n return resolve(document.querySelector(selector));\n }\n\n const observer = new MutationObserver(() => {\n if (document.querySelector(selector)) {\n resolve(document.querySelector(selector));\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n });\n }\n\n @Watch('show')\n async changedShow(newShow: boolean) {\n if (newShow) {\n this.anchorElement = await (this.anchor\n ? this.resolveElement(this.anchor)\n : this.resolveElement(this.trigger));\n\n if (this.anchorElement) {\n this.applyDropdownPosition();\n }\n }\n\n if (newShow) {\n dropdownDisposer.forEach((entry, id) => {\n if (\n id !== this.localUId &&\n !this.isAnchorSubmenu() &&\n !entry.element.contains(this.hostElement)\n ) {\n entry.dispose();\n }\n });\n }\n }\n\n @Watch('trigger')\n changedTrigger(\n newTriggerValue: string | HTMLElement,\n oldTriggerValue: string | HTMLElement\n ) {\n if (newTriggerValue) {\n this.registerListener(newTriggerValue);\n }\n\n if (oldTriggerValue) {\n this.unregisterListener(oldTriggerValue);\n }\n }\n\n @Listen('click', {\n target: 'window',\n })\n clickOutside(event: PointerEvent) {\n const target = event.target as HTMLElement;\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (\n this.show === false ||\n this.closeBehavior === false ||\n this.anchorElement?.contains(target) ||\n this.triggerElement?.contains(target)\n ) {\n return;\n }\n\n const clickInsideDropdown = this.isClickInsideDropdown(event);\n\n switch (this.closeBehavior) {\n case 'outside':\n if (!clickInsideDropdown || this.anchor === target) {\n this.close();\n }\n break;\n case 'inside':\n if (clickInsideDropdown && this.hostElement !== target) {\n this.close();\n }\n break;\n case 'both':\n if (this.hostElement !== target) {\n this.close();\n }\n break;\n default:\n this.close();\n }\n }\n\n @Listen('keydown', {\n target: 'window',\n })\n keydown(event: KeyboardEvent) {\n if (this.show === true && event.code === 'Escape') {\n this.close();\n }\n }\n\n private isNestedDropdown(element: Element) {\n return element.closest('ix-dropdown');\n }\n\n private isAnchorSubmenu() {\n const anchor = this.anchorElement?.closest('ix-dropdown-item');\n if (!anchor) {\n return false;\n }\n\n return true;\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n\n if (this.isNestedDropdown(event.target as HTMLElement)) {\n event.stopPropagation();\n }\n\n const { defaultPrevented } = this.showChanged.emit(this.show);\n\n if (!defaultPrevented) {\n this.show = !this.show;\n }\n }\n\n private open(event: Event) {\n event.preventDefault();\n\n if (this.isNestedDropdown(event.target as HTMLElement)) {\n event.stopPropagation();\n }\n\n const { defaultPrevented } = this.showChanged.emit(true);\n\n if (!defaultPrevented) {\n this.show = true;\n }\n }\n\n private close() {\n const { defaultPrevented } = this.showChanged.emit(false);\n\n if (!defaultPrevented) {\n this.show = false;\n }\n }\n\n private async applyDropdownPosition() {\n if (!this.anchorElement) {\n return;\n }\n if (!this.dropdownRef) {\n return;\n }\n const isSubmenu = this.isAnchorSubmenu();\n\n let positionConfig: Partial<ComputePositionConfig> = {\n strategy: this.positioningStrategy,\n middleware: [],\n };\n\n if (!this.suppressAutomaticPlacement) {\n positionConfig.middleware.push(\n flip({ fallbackStrategy: 'initialPlacement' })\n );\n }\n\n positionConfig.placement = isSubmenu ? 'right-start' : this.placement;\n\n positionConfig.middleware = [\n ...positionConfig.middleware,\n inline(),\n shift(),\n ];\n\n if (this.offset) {\n positionConfig.middleware.push(offset(this.offset));\n }\n\n if (this.autoUpdateCleanup) {\n this.autoUpdateCleanup();\n this.autoUpdateCleanup = null;\n }\n\n this.autoUpdateCleanup = autoUpdate(\n this.anchorElement,\n this.dropdownRef,\n async () => {\n const computeResponse = await computePosition(\n this.anchorElement,\n this.dropdownRef,\n positionConfig\n );\n\n Object.assign(this.dropdownRef.style, {\n top: '0',\n left: '0',\n transform: `translate(${Math.round(computeResponse.x)}px,${Math.round(\n computeResponse.y\n )}px)`,\n });\n if (this.overwriteDropdownStyle) {\n const overwriteStyle = await this.overwriteDropdownStyle({\n dropdownRef: this.dropdownRef,\n triggerRef: this.triggerElement as HTMLElement,\n });\n\n Object.assign(this.dropdownRef.style, overwriteStyle);\n }\n },\n {\n ancestorResize: true,\n ancestorScroll: true,\n elementResize: true,\n }\n );\n }\n\n async componentDidLoad() {\n this.changedTrigger(this.trigger, null);\n }\n\n async componentDidRender() {\n await this.applyDropdownPosition();\n this.anchorElement = await (this.anchor\n ? this.resolveElement(this.anchor)\n : this.resolveElement(this.trigger));\n\n if (\n this.isAnchorSubmenu() &&\n this.anchorElement?.tagName === 'IX-DROPDOWN-ITEM'\n ) {\n (this.anchorElement as HTMLIxDropdownItemElement).isSubMenu = true;\n }\n }\n\n private isClickInsideDropdown(event: PointerEvent) {\n const rect = this.dropdownRef.getBoundingClientRect();\n return (\n rect.top <= event.clientY &&\n event.clientY <= rect.top + rect.height &&\n rect.left <= event.clientX &&\n event.clientX <= rect.left + rect.width\n );\n }\n\n disconnectedCallback() {\n if (this.autoUpdateCleanup) {\n this.autoUpdateCleanup();\n }\n\n if (dropdownDisposer.has(this.localUId)) {\n dropdownDisposer.delete(this.localUId);\n }\n }\n\n /**\n * Update position of dropdown\n */\n @Method()\n async updatePosition() {\n this.applyDropdownPosition();\n }\n\n render() {\n return (\n <Host\n ref={(ref) => (this.dropdownRef = ref)}\n class={{\n 'dropdown-menu': true,\n show: this.show,\n overflow: true,\n }}\n style={{\n margin: '0',\n minWidth: '0px',\n position: this.positioningStrategy,\n }}\n role=\"list\"\n >\n <div style={{ display: 'contents' }}>\n {this.header ? <div class=\"dropdown-header\">{this.header}</div> : ''}\n\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -76,4 +76,25 @@ function expectToBeVisible(elements, index) {
76
76
  await ef.toBeVisible();
77
77
  }));
78
78
  }
79
+ test.describe('nested dropdown tests', () => {
80
+ const button1Text = 'Triggerbutton1';
81
+ const button2Text = 'Triggerbutton2';
82
+ test.beforeEach(async ({ mount }) => {
83
+ await mount(`
84
+ <button id="trigger1">${button1Text}</button>
85
+ <ix-dropdown trigger="trigger1">
86
+ <button id="trigger2">${button2Text}</button>
87
+ <ix-dropdown trigger="trigger2">
88
+ <ix-dropdown-item label="Item 1"></ix-dropdown-item>
89
+ </ix-dropdown>
90
+ </ix-dropdown>
91
+ `);
92
+ });
93
+ test('can open nested dropdown', async ({ page }) => {
94
+ await page.getByText(button1Text).click();
95
+ await page.getByText(button2Text).click();
96
+ const nestedDropdownItem = page.locator('ix-dropdown-item');
97
+ await expect(nestedDropdownItem).toHaveClass(/hydrated/);
98
+ });
99
+ });
79
100
  //# sourceMappingURL=dropdown.ct.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.ct.js","sourceRoot":"","sources":["../../../../src/components/dropdown/test/dropdown.ct.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;EACxC,MAAM,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BX,CAAC,CAAC;EAEH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAEnD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAE3C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;EAE7C,MAAM,GAAG;KACN,SAAS,CAAC,QAAQ,CAAC;KACnB,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;KACnC,KAAK,EAAE;KACP,KAAK,EAAE,CAAC;EAEX,MAAM,iBAAiB,CACrB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAClD,CAAC,CACF,CAAC;EAEF,MAAM,GAAG;KACN,SAAS,CAAC,QAAQ,CAAC;KACnB,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;KACnC,KAAK,EAAE;KACP,KAAK,EAAE,CAAC;EAEX,MAAM,iBAAiB,CACrB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAClD,CAAC,CACF,CAAC;EAEF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;EAEzE,MAAM,iBAAiB,CACrB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAClD,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,QAAmB,EAAE,KAAa;EAC3D,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;IAChC,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,KAAK,EAAE;MACf,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;KACb;IACD,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;EACzB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { expect, Locator } from '@playwright/test';\nimport { test } from '@utils/test';\n\ntest('renders', async ({ mount, page }) => {\n await mount(`\n <ix-split-button label=\"Test 1\">\n <ix-dropdown-item>Test 1</ix-dropdown-item>\n </ix-split-button>\n\n <ix-split-button label=\"Test 2\">\n <ix-dropdown-item>Test 1</ix-dropdown-item>\n </ix-split-button>\n\n <ix-group header=\"Title\" sub-header=\"Subtitle\">\n <ix-dropdown slot=\"dropdown\">\n <ix-dropdown-item label=\"Item 1\" icon=\"pin\" />\n <ix-dropdown-item label=\"Item 2\" icon=\"star\" />\n <ix-dropdown-item label=\"Item 3\" icon=\"heart\" />\n <ix-dropdown-item label=\"Item 4\" icon=\"cogwheel\" />\n </ix-dropdown>\n </ix-group>\n\n <ix-group header=\"Title\" sub-header=\"Subtitle\">\n <ix-dropdown slot=\"dropdown\">\n <ix-dropdown-item label=\"Item 1\" icon=\"pin\" />\n <ix-dropdown-item label=\"Item 2\" icon=\"star\" />\n <ix-dropdown-item label=\"Item 3\" icon=\"heart\" />\n <ix-dropdown-item label=\"Item 4\" icon=\"cogwheel\" />\n </ix-dropdown>\n </ix-group>\n `);\n\n const sb1 = page.locator('ix-split-button').nth(0);\n const sb2 = page.locator('ix-split-button').nth(1);\n\n const g1 = page.locator('ix-group').nth(0);\n const g2 = page.locator('ix-group').nth(1);\n\n const sb1Dropdown = sb1.locator('ix-dropdown');\n const sb2Dropdown = sb2.locator('ix-dropdown');\n const g1Dropdown = g1.locator('ix-dropdown');\n const g2Dropdown = g2.locator('ix-dropdown');\n\n await sb1\n .getByRole('button')\n .filter({ hasText: 'context-menu' })\n .first()\n .click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 0\n );\n\n await sb2\n .getByRole('button')\n .filter({ hasText: 'context-menu' })\n .first()\n .click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 1\n );\n\n await g2.getByRole('button').filter({ hasText: 'context-menu' }).click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 3\n );\n});\n\nfunction expectToBeVisible(elements: Locator[], index: number) {\n return Promise.all(\n elements.map(async (element, i) => {\n let ef = expect(element);\n if (i !== index) {\n ef = ef.not;\n }\n await ef.toBeVisible();\n })\n );\n}\n"]}
1
+ {"version":3,"file":"dropdown.ct.js","sourceRoot":"","sources":["../../../../src/components/dropdown/test/dropdown.ct.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { expect, Locator } from '@playwright/test';\nimport { test } from '@utils/test';\n\ntest('renders', async ({ mount, page }) => {\n await mount(`\n <ix-split-button label=\"Test 1\">\n <ix-dropdown-item>Test 1</ix-dropdown-item>\n </ix-split-button>\n\n <ix-split-button label=\"Test 2\">\n <ix-dropdown-item>Test 1</ix-dropdown-item>\n </ix-split-button>\n\n <ix-group header=\"Title\" sub-header=\"Subtitle\">\n <ix-dropdown slot=\"dropdown\">\n <ix-dropdown-item label=\"Item 1\" icon=\"pin\" />\n <ix-dropdown-item label=\"Item 2\" icon=\"star\" />\n <ix-dropdown-item label=\"Item 3\" icon=\"heart\" />\n <ix-dropdown-item label=\"Item 4\" icon=\"cogwheel\" />\n </ix-dropdown>\n </ix-group>\n\n <ix-group header=\"Title\" sub-header=\"Subtitle\">\n <ix-dropdown slot=\"dropdown\">\n <ix-dropdown-item label=\"Item 1\" icon=\"pin\" />\n <ix-dropdown-item label=\"Item 2\" icon=\"star\" />\n <ix-dropdown-item label=\"Item 3\" icon=\"heart\" />\n <ix-dropdown-item label=\"Item 4\" icon=\"cogwheel\" />\n </ix-dropdown>\n </ix-group>\n `);\n\n const sb1 = page.locator('ix-split-button').nth(0);\n const sb2 = page.locator('ix-split-button').nth(1);\n\n const g1 = page.locator('ix-group').nth(0);\n const g2 = page.locator('ix-group').nth(1);\n\n const sb1Dropdown = sb1.locator('ix-dropdown');\n const sb2Dropdown = sb2.locator('ix-dropdown');\n const g1Dropdown = g1.locator('ix-dropdown');\n const g2Dropdown = g2.locator('ix-dropdown');\n\n await sb1\n .getByRole('button')\n .filter({ hasText: 'context-menu' })\n .first()\n .click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 0\n );\n\n await sb2\n .getByRole('button')\n .filter({ hasText: 'context-menu' })\n .first()\n .click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 1\n );\n\n await g2.getByRole('button').filter({ hasText: 'context-menu' }).click();\n\n await expectToBeVisible(\n [sb1Dropdown, sb2Dropdown, g1Dropdown, g2Dropdown],\n 3\n );\n});\n\nfunction expectToBeVisible(elements: Locator[], index: number) {\n return Promise.all(\n elements.map(async (element, i) => {\n let ef = expect(element);\n if (i !== index) {\n ef = ef.not;\n }\n await ef.toBeVisible();\n })\n );\n}\n\ntest.describe('nested dropdown tests', () => {\n const button1Text = 'Triggerbutton1';\n const button2Text = 'Triggerbutton2';\n\n test.beforeEach(async ({ mount }) => {\n await mount(`\n <button id=\"trigger1\">${button1Text}</button>\n <ix-dropdown trigger=\"trigger1\">\n <button id=\"trigger2\">${button2Text}</button>\n <ix-dropdown trigger=\"trigger2\">\n <ix-dropdown-item label=\"Item 1\"></ix-dropdown-item>\n </ix-dropdown>\n </ix-dropdown>\n `);\n });\n\n test('can open nested dropdown', async ({ page }) => {\n await page.getByText(button1Text).click();\n await page.getByText(button2Text).click();\n const nestedDropdownItem = page.locator('ix-dropdown-item');\n\n await expect(nestedDropdownItem).toHaveClass(/hydrated/);\n });\n});\n"]}
@@ -265,6 +265,9 @@
265
265
  color: var(--theme-btn-primary--color--active);
266
266
  }
267
267
 
268
+ :host(.disabled) {
269
+ pointer-events: none;
270
+ }
268
271
  :host(.disabled) .btn-primary.disabled, :host(.disabled) .btn-primary:disabled {
269
272
  pointer-events: none;
270
273
  border-color: var(--theme-btn-primary--border-color--disabled);
@@ -324,6 +327,9 @@
324
327
  color: var(--theme-btn-outline-primary--color--active);
325
328
  }
326
329
 
330
+ :host(.disabled) {
331
+ pointer-events: none;
332
+ }
327
333
  :host(.disabled) .btn-outline-primary.disabled, :host(.disabled) .btn-outline-primary:disabled {
328
334
  pointer-events: none;
329
335
  border-color: var(--theme-btn-outline-primary--border-color--disabled);
@@ -379,6 +385,9 @@
379
385
  color: var(--theme-btn-invisible-primary--color--active);
380
386
  }
381
387
 
388
+ :host(.disabled) {
389
+ pointer-events: none;
390
+ }
382
391
  :host(.disabled) .btn-invisible-primary.disabled, :host(.disabled) .btn-invisible-primary:disabled {
383
392
  pointer-events: none;
384
393
  background-color: var(--theme-btn-invisible-primary--background--disabled);
@@ -437,6 +446,9 @@
437
446
  color: var(--theme-btn-secondary--color--active);
438
447
  }
439
448
 
449
+ :host(.disabled) {
450
+ pointer-events: none;
451
+ }
440
452
  :host(.disabled) .btn-secondary.disabled, :host(.disabled) .btn-secondary:disabled {
441
453
  pointer-events: none;
442
454
  border-color: var(--theme-btn-secondary--border-color--disabled);
@@ -496,6 +508,9 @@
496
508
  color: var(--theme-btn-outline-secondary--color--active);
497
509
  }
498
510
 
511
+ :host(.disabled) {
512
+ pointer-events: none;
513
+ }
499
514
  :host(.disabled) .btn-outline-secondary.disabled, :host(.disabled) .btn-outline-secondary:disabled {
500
515
  pointer-events: none;
501
516
  border-color: var(--theme-btn-outline-secondary--border-color--disabled);
@@ -551,6 +566,9 @@
551
566
  color: var(--theme-btn-invisible-secondary--color--active);
552
567
  }
553
568
 
569
+ :host(.disabled) {
570
+ pointer-events: none;
571
+ }
554
572
  :host(.disabled) .btn-invisible-secondary.disabled, :host(.disabled) .btn-invisible-secondary:disabled {
555
573
  pointer-events: none;
556
574
  background-color: var(--theme-btn-invisible-secondary--background--disabled);
@@ -265,6 +265,9 @@
265
265
  color: var(--theme-btn-primary--color--active);
266
266
  }
267
267
 
268
+ :host(.disabled) {
269
+ pointer-events: none;
270
+ }
268
271
  :host(.disabled) .btn-primary.disabled, :host(.disabled) .btn-primary:disabled {
269
272
  pointer-events: none;
270
273
  border-color: var(--theme-btn-primary--border-color--disabled);
@@ -324,6 +327,9 @@
324
327
  color: var(--theme-btn-outline-primary--color--active);
325
328
  }
326
329
 
330
+ :host(.disabled) {
331
+ pointer-events: none;
332
+ }
327
333
  :host(.disabled) .btn-outline-primary.disabled, :host(.disabled) .btn-outline-primary:disabled {
328
334
  pointer-events: none;
329
335
  border-color: var(--theme-btn-outline-primary--border-color--disabled);
@@ -379,6 +385,9 @@
379
385
  color: var(--theme-btn-invisible-primary--color--active);
380
386
  }
381
387
 
388
+ :host(.disabled) {
389
+ pointer-events: none;
390
+ }
382
391
  :host(.disabled) .btn-invisible-primary.disabled, :host(.disabled) .btn-invisible-primary:disabled {
383
392
  pointer-events: none;
384
393
  background-color: var(--theme-btn-invisible-primary--background--disabled);
@@ -437,6 +446,9 @@
437
446
  color: var(--theme-btn-secondary--color--active);
438
447
  }
439
448
 
449
+ :host(.disabled) {
450
+ pointer-events: none;
451
+ }
440
452
  :host(.disabled) .btn-secondary.disabled, :host(.disabled) .btn-secondary:disabled {
441
453
  pointer-events: none;
442
454
  border-color: var(--theme-btn-secondary--border-color--disabled);
@@ -496,6 +508,9 @@
496
508
  color: var(--theme-btn-outline-secondary--color--active);
497
509
  }
498
510
 
511
+ :host(.disabled) {
512
+ pointer-events: none;
513
+ }
499
514
  :host(.disabled) .btn-outline-secondary.disabled, :host(.disabled) .btn-outline-secondary:disabled {
500
515
  pointer-events: none;
501
516
  border-color: var(--theme-btn-outline-secondary--border-color--disabled);
@@ -551,6 +566,9 @@
551
566
  color: var(--theme-btn-invisible-secondary--color--active);
552
567
  }
553
568
 
569
+ :host(.disabled) {
570
+ pointer-events: none;
571
+ }
554
572
  :host(.disabled) .btn-invisible-secondary.disabled, :host(.disabled) .btn-invisible-secondary:disabled {
555
573
  pointer-events: none;
556
574
  background-color: var(--theme-btn-invisible-secondary--background--disabled);
@@ -32,6 +32,16 @@ export class InputGroup {
32
32
  this.startSlotChanged();
33
33
  });
34
34
  valid ? this.onValidInput() : this.onInvalidInput();
35
+ this.observer = new MutationObserver(() => {
36
+ this.startSlotChanged();
37
+ this.endSlotChanged();
38
+ });
39
+ this.observer.observe(this.hostElement, {
40
+ subtree: true,
41
+ childList: true,
42
+ attributes: true,
43
+ characterData: true,
44
+ });
35
45
  }
36
46
  componentDidRender() {
37
47
  this.prepareInputElement();
@@ -49,13 +59,13 @@ export class InputGroup {
49
59
  this.inputElement.style.paddingRight = this.inputPaddingRight + 'px';
50
60
  }
51
61
  else {
52
- this.inputElement.style.paddingRight = 'none';
62
+ this.inputElement.style.paddingRight = '0.5rem';
53
63
  }
54
64
  if (this.inputPaddingLeft !== 0) {
55
65
  this.inputElement.style.paddingLeft = this.inputPaddingLeft + 'px';
56
66
  }
57
67
  else {
58
- this.inputElement.style.paddingLeft = 'none';
68
+ this.inputElement.style.paddingLeft = '0.5rem';
59
69
  }
60
70
  }
61
71
  else {
@@ -70,6 +80,9 @@ export class InputGroup {
70
80
  if (startPadding !== 0) {
71
81
  this.inputPaddingLeft = 15 + startPadding;
72
82
  }
83
+ else {
84
+ this.inputPaddingLeft = 0;
85
+ }
73
86
  if (!this.inputElement) {
74
87
  return;
75
88
  }
@@ -102,7 +115,7 @@ export class InputGroup {
102
115
  return width;
103
116
  }
104
117
  render() {
105
- return (h(Host, null, h("div", { class: "group group-start" }, h("slot", { name: "input-start", onSlotchange: () => this.startSlotChanged() })), h("slot", null), h("div", { class: "group group-end" }, h("slot", { name: "input-end", onSlotchange: () => this.endSlotChanged() }))));
118
+ return (h(Host, null, h("div", { class: "group group-start" }, h("slot", { name: "input-start" })), h("slot", null), h("div", { class: "group group-end" }, h("slot", { name: "input-end" }))));
106
119
  }
107
120
  static get is() { return "ix-input-group"; }
108
121
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"input-group.js","sourceRoot":"","sources":["../../../src/components/input-group/input-group.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Component, Element, h, Host, State } from '@stencil/core';\nimport { getSlottedElements } from '../utils/shadow-dom';\n\n@Component({\n tag: 'ix-input-group',\n styleUrl: 'input-group.scss',\n shadow: true,\n})\nexport class InputGroup {\n @Element() hostElement!: HTMLIxInputGroupElement;\n\n @State() inputPaddingLeft = 0;\n @State() inputPaddingRight = 0;\n\n private get inputElement() {\n return this.hostElement.querySelector('input') as HTMLInputElement;\n }\n\n componentWillLoad() {\n const { valid } = this.inputElement.validity;\n this.inputElement.addEventListener('valid', () => {\n this.onValidInput();\n });\n this.inputElement.addEventListener('invalid', () => {\n this.onInvalidInput();\n });\n this.inputElement.addEventListener('input', () => {\n this.startSlotChanged();\n });\n\n this.inputElement.form?.addEventListener('submit', () => {\n this.startSlotChanged();\n });\n\n valid ? this.onValidInput() : this.onInvalidInput();\n }\n\n componentDidRender() {\n this.prepareInputElement();\n }\n\n private onValidInput() {\n this.startSlotChanged();\n }\n\n private onInvalidInput() {\n this.startSlotChanged();\n }\n\n private prepareInputElement() {\n if (this.inputElement) {\n this.inputElement.style.width = '100%';\n\n if (this.inputPaddingRight !== 0) {\n this.inputElement.style.paddingRight = this.inputPaddingRight + 'px';\n } else {\n this.inputElement.style.paddingRight = 'none';\n }\n\n if (this.inputPaddingLeft !== 0) {\n this.inputElement.style.paddingLeft = this.inputPaddingLeft + 'px';\n } else {\n this.inputElement.style.paddingLeft = 'none';\n }\n } else {\n console.warn(\n 'You used the ix-input-group without an input tag, e.g. <input class=\"form-control\" />'\n );\n }\n }\n\n private startSlotChanged() {\n const slot = this.hostElement.shadowRoot.querySelector(\n 'slot[name=\"input-start\"]'\n );\n setTimeout(() => {\n const startPadding = this.getChildrenWidth(slot);\n\n if (startPadding !== 0) {\n this.inputPaddingLeft = 15 + startPadding;\n }\n\n if (!this.inputElement) {\n return;\n }\n\n if (\n (this.inputElement.form?.classList.contains('was-validated') ||\n this.inputElement.form?.noValidate === false) &&\n !this.inputElement.validity.valid\n ) {\n this.inputElement.style.backgroundPositionX = `${this.inputPaddingLeft}px`;\n this.inputPaddingLeft += 32;\n }\n });\n }\n\n private endSlotChanged() {\n const slot = this.hostElement.shadowRoot.querySelector(\n 'slot[name=\"input-end\"]'\n );\n\n setTimeout(() => {\n this.inputPaddingRight = 15 + this.getChildrenWidth(slot);\n });\n }\n\n private getChildrenWidth(slotElement: Element) {\n if (!slotElement) {\n return 0;\n }\n\n const endElements = getSlottedElements<HTMLElement>(slotElement);\n if (endElements.length === 0) {\n return 0;\n }\n\n let width = 0;\n\n endElements.forEach((element) => {\n width += element.getBoundingClientRect().width;\n });\n\n return width;\n }\n\n render() {\n return (\n <Host>\n <div class=\"group group-start\">\n <slot\n name=\"input-start\"\n onSlotchange={() => this.startSlotChanged()}\n ></slot>\n </div>\n <slot></slot>\n <div class=\"group group-end\">\n <slot\n name=\"input-end\"\n onSlotchange={() => this.endSlotChanged()}\n ></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"input-group.js","sourceRoot":"","sources":["../../../src/components/input-group/input-group.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * SPDX-FileCopyrightText: 2023 Siemens AG\n *\n * SPDX-License-Identifier: MIT\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Component, Element, h, Host, State } from '@stencil/core';\nimport { getSlottedElements } from '../utils/shadow-dom';\n\n@Component({\n tag: 'ix-input-group',\n styleUrl: 'input-group.scss',\n shadow: true,\n})\nexport class InputGroup {\n @Element() hostElement!: HTMLIxInputGroupElement;\n\n @State() inputPaddingLeft = 0;\n @State() inputPaddingRight = 0;\n\n private get inputElement() {\n return this.hostElement.querySelector('input') as HTMLInputElement;\n }\n\n private observer: MutationObserver;\n\n componentWillLoad() {\n const { valid } = this.inputElement.validity;\n this.inputElement.addEventListener('valid', () => {\n this.onValidInput();\n });\n this.inputElement.addEventListener('invalid', () => {\n this.onInvalidInput();\n });\n this.inputElement.addEventListener('input', () => {\n this.startSlotChanged();\n });\n\n this.inputElement.form?.addEventListener('submit', () => {\n this.startSlotChanged();\n });\n\n valid ? this.onValidInput() : this.onInvalidInput();\n\n this.observer = new MutationObserver(() => {\n this.startSlotChanged();\n this.endSlotChanged();\n });\n\n this.observer.observe(this.hostElement, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true,\n });\n }\n\n componentDidRender() {\n this.prepareInputElement();\n }\n\n private onValidInput() {\n this.startSlotChanged();\n }\n\n private onInvalidInput() {\n this.startSlotChanged();\n }\n\n private prepareInputElement() {\n if (this.inputElement) {\n this.inputElement.style.width = '100%';\n\n if (this.inputPaddingRight !== 0) {\n this.inputElement.style.paddingRight = this.inputPaddingRight + 'px';\n } else {\n this.inputElement.style.paddingRight = '0.5rem';\n }\n\n if (this.inputPaddingLeft !== 0) {\n this.inputElement.style.paddingLeft = this.inputPaddingLeft + 'px';\n } else {\n this.inputElement.style.paddingLeft = '0.5rem';\n }\n } else {\n console.warn(\n 'You used the ix-input-group without an input tag, e.g. <input class=\"form-control\" />'\n );\n }\n }\n\n private startSlotChanged() {\n const slot = this.hostElement.shadowRoot.querySelector(\n 'slot[name=\"input-start\"]'\n );\n\n setTimeout(() => {\n const startPadding = this.getChildrenWidth(slot);\n\n if (startPadding !== 0) {\n this.inputPaddingLeft = 15 + startPadding;\n } else {\n this.inputPaddingLeft = 0;\n }\n\n if (!this.inputElement) {\n return;\n }\n\n if (\n (this.inputElement.form?.classList.contains('was-validated') ||\n this.inputElement.form?.noValidate === false) &&\n !this.inputElement.validity.valid\n ) {\n this.inputElement.style.backgroundPositionX = `${this.inputPaddingLeft}px`;\n this.inputPaddingLeft += 32;\n }\n });\n }\n\n private endSlotChanged() {\n const slot = this.hostElement.shadowRoot.querySelector(\n 'slot[name=\"input-end\"]'\n );\n\n setTimeout(() => {\n this.inputPaddingRight = 15 + this.getChildrenWidth(slot);\n });\n }\n\n private getChildrenWidth(slotElement: Element) {\n if (!slotElement) {\n return 0;\n }\n\n const endElements = getSlottedElements<HTMLElement>(slotElement);\n if (endElements.length === 0) {\n return 0;\n }\n\n let width = 0;\n\n endElements.forEach((element) => {\n width += element.getBoundingClientRect().width;\n });\n\n return width;\n }\n\n render() {\n return (\n <Host>\n <div class=\"group group-start\">\n <slot name=\"input-start\"></slot>\n </div>\n <slot></slot>\n <div class=\"group group-end\">\n <slot name=\"input-end\"></slot>\n </div>\n </Host>\n );\n }\n}\n"]}