@siemens/ix 2.0.0 → 2.0.1

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 (404) hide show
  1. package/components/_commonjsHelpers.js +21 -0
  2. package/components/_commonjsHelpers.js.map +1 -0
  3. package/components/a11y.js +79 -0
  4. package/components/a11y.js.map +1 -0
  5. package/components/animation.js +19 -0
  6. package/components/animation.js.map +1 -0
  7. package/components/anime.es.js +1311 -0
  8. package/components/anime.es.js.map +1 -0
  9. package/components/application-header.js +95 -0
  10. package/components/application-header.js.map +1 -0
  11. package/components/avatar.js +53 -0
  12. package/components/avatar.js.map +1 -0
  13. package/components/base-button.js +47 -0
  14. package/components/base-button.js.map +1 -0
  15. package/components/base-icon-button.js +18 -0
  16. package/components/base-icon-button.js.map +1 -0
  17. package/components/breadcrumb-item.js +92 -0
  18. package/components/breadcrumb-item.js.map +1 -0
  19. package/components/breakpoints.js +25 -0
  20. package/components/breakpoints.js.map +1 -0
  21. package/components/burger-menu.js +55 -0
  22. package/components/burger-menu.js.map +1 -0
  23. package/components/button.js +91 -0
  24. package/components/button.js.map +1 -0
  25. package/components/card-accordion.js +72 -0
  26. package/components/card-accordion.js.map +1 -0
  27. package/components/card-content.js +32 -0
  28. package/components/card-content.js.map +1 -0
  29. package/components/card-title.js +32 -0
  30. package/components/card-title.js.map +1 -0
  31. package/components/card.js +36 -0
  32. package/components/card.js.map +1 -0
  33. package/components/context.js +101 -0
  34. package/components/context.js.map +1 -0
  35. package/components/custom-elements.d.ts +10 -0
  36. package/components/date-picker.js +372 -0
  37. package/components/date-picker.js.map +1 -0
  38. package/components/date-time-card.js +45 -0
  39. package/components/date-time-card.js.map +1 -0
  40. package/components/default-tree-item.js +22 -0
  41. package/components/default-tree-item.js.map +1 -0
  42. package/components/divider.js +32 -0
  43. package/components/divider.js.map +1 -0
  44. package/components/dropdown-item.js +69 -0
  45. package/components/dropdown-item.js.map +1 -0
  46. package/components/dropdown.js +346 -0
  47. package/components/dropdown.js.map +1 -0
  48. package/components/filter-chip.js +56 -0
  49. package/components/filter-chip.js.map +1 -0
  50. package/components/flip-tile-state.js +20 -0
  51. package/components/flip-tile-state.js.map +1 -0
  52. package/components/floating-ui.dom.esm.js +1512 -0
  53. package/components/floating-ui.dom.esm.js.map +1 -0
  54. package/components/group-context-menu.js +73 -0
  55. package/components/group-context-menu.js.map +1 -0
  56. package/components/group-item.js +58 -0
  57. package/components/group-item.js.map +1 -0
  58. package/components/icon-button.js +99 -0
  59. package/components/icon-button.js.map +1 -0
  60. package/components/index.d.ts +27 -0
  61. package/components/index.js +101 -0
  62. package/components/index.js.map +1 -0
  63. package/components/ix-action-card.d.ts +11 -0
  64. package/components/ix-action-card.js +66 -0
  65. package/components/ix-action-card.js.map +1 -0
  66. package/components/ix-application-header.d.ts +11 -0
  67. package/components/ix-application-header.js +8 -0
  68. package/components/ix-application-header.js.map +1 -0
  69. package/components/ix-application-sidebar.d.ts +11 -0
  70. package/components/ix-application-sidebar.js +63 -0
  71. package/components/ix-application-sidebar.js.map +1 -0
  72. package/components/ix-application.d.ts +11 -0
  73. package/components/ix-application.js +128 -0
  74. package/components/ix-application.js.map +1 -0
  75. package/components/ix-avatar.d.ts +11 -0
  76. package/components/ix-avatar.js +8 -0
  77. package/components/ix-avatar.js.map +1 -0
  78. package/components/ix-basic-navigation.d.ts +11 -0
  79. package/components/ix-basic-navigation.js +132 -0
  80. package/components/ix-basic-navigation.js.map +1 -0
  81. package/components/ix-blind.d.ts +11 -0
  82. package/components/ix-blind.js +128 -0
  83. package/components/ix-blind.js.map +1 -0
  84. package/components/ix-breadcrumb-item.d.ts +11 -0
  85. package/components/ix-breadcrumb-item.js +8 -0
  86. package/components/ix-breadcrumb-item.js.map +1 -0
  87. package/components/ix-breadcrumb.d.ts +11 -0
  88. package/components/ix-breadcrumb.js +151 -0
  89. package/components/ix-breadcrumb.js.map +1 -0
  90. package/components/ix-burger-menu.d.ts +11 -0
  91. package/components/ix-burger-menu.js +8 -0
  92. package/components/ix-burger-menu.js.map +1 -0
  93. package/components/ix-button.d.ts +11 -0
  94. package/components/ix-button.js +8 -0
  95. package/components/ix-button.js.map +1 -0
  96. package/components/ix-card-accordion.d.ts +11 -0
  97. package/components/ix-card-accordion.js +8 -0
  98. package/components/ix-card-accordion.js.map +1 -0
  99. package/components/ix-card-content.d.ts +11 -0
  100. package/components/ix-card-content.js +8 -0
  101. package/components/ix-card-content.js.map +1 -0
  102. package/components/ix-card-list.d.ts +11 -0
  103. package/components/ix-card-list.js +228 -0
  104. package/components/ix-card-list.js.map +1 -0
  105. package/components/ix-card-title.d.ts +11 -0
  106. package/components/ix-card-title.js +8 -0
  107. package/components/ix-card-title.js.map +1 -0
  108. package/components/ix-card.d.ts +11 -0
  109. package/components/ix-card.js +8 -0
  110. package/components/ix-card.js.map +1 -0
  111. package/components/ix-category-filter.d.ts +11 -0
  112. package/components/ix-category-filter.js +464 -0
  113. package/components/ix-category-filter.js.map +1 -0
  114. package/components/ix-chip.d.ts +11 -0
  115. package/components/ix-chip.js +98 -0
  116. package/components/ix-chip.js.map +1 -0
  117. package/components/ix-col.d.ts +11 -0
  118. package/components/ix-col.js +96 -0
  119. package/components/ix-col.js.map +1 -0
  120. package/components/ix-content-header.d.ts +11 -0
  121. package/components/ix-content-header.js +63 -0
  122. package/components/ix-content-header.js.map +1 -0
  123. package/components/ix-content.d.ts +11 -0
  124. package/components/ix-content.js +48 -0
  125. package/components/ix-content.js.map +1 -0
  126. package/components/ix-css-grid-item.d.ts +11 -0
  127. package/components/ix-css-grid-item.js +40 -0
  128. package/components/ix-css-grid-item.js.map +1 -0
  129. package/components/ix-css-grid.d.ts +11 -0
  130. package/components/ix-css-grid.js +113 -0
  131. package/components/ix-css-grid.js.map +1 -0
  132. package/components/ix-date-picker.d.ts +11 -0
  133. package/components/ix-date-picker.js +8 -0
  134. package/components/ix-date-picker.js.map +1 -0
  135. package/components/ix-date-time-card.d.ts +11 -0
  136. package/components/ix-date-time-card.js +8 -0
  137. package/components/ix-date-time-card.js.map +1 -0
  138. package/components/ix-datetime-picker.d.ts +11 -0
  139. package/components/ix-datetime-picker.js +149 -0
  140. package/components/ix-datetime-picker.js.map +1 -0
  141. package/components/ix-divider.d.ts +11 -0
  142. package/components/ix-divider.js +8 -0
  143. package/components/ix-divider.js.map +1 -0
  144. package/components/ix-drawer.d.ts +11 -0
  145. package/components/ix-drawer.js +145 -0
  146. package/components/ix-drawer.js.map +1 -0
  147. package/components/ix-dropdown-button.d.ts +11 -0
  148. package/components/ix-dropdown-button.js +92 -0
  149. package/components/ix-dropdown-button.js.map +1 -0
  150. package/components/ix-dropdown-header.d.ts +11 -0
  151. package/components/ix-dropdown-header.js +44 -0
  152. package/components/ix-dropdown-header.js.map +1 -0
  153. package/components/ix-dropdown-item.d.ts +11 -0
  154. package/components/ix-dropdown-item.js +8 -0
  155. package/components/ix-dropdown-item.js.map +1 -0
  156. package/components/ix-dropdown-quick-actions.d.ts +11 -0
  157. package/components/ix-dropdown-quick-actions.js +35 -0
  158. package/components/ix-dropdown-quick-actions.js.map +1 -0
  159. package/components/ix-dropdown.d.ts +11 -0
  160. package/components/ix-dropdown.js +8 -0
  161. package/components/ix-dropdown.js.map +1 -0
  162. package/components/ix-empty-state.d.ts +11 -0
  163. package/components/ix-empty-state.js +65 -0
  164. package/components/ix-empty-state.js.map +1 -0
  165. package/components/ix-event-list-item.d.ts +11 -0
  166. package/components/ix-event-list-item.js +61 -0
  167. package/components/ix-event-list-item.js.map +1 -0
  168. package/components/ix-event-list.d.ts +11 -0
  169. package/components/ix-event-list.js +143 -0
  170. package/components/ix-event-list.js.map +1 -0
  171. package/components/ix-expanding-search.d.ts +11 -0
  172. package/components/ix-expanding-search.js +119 -0
  173. package/components/ix-expanding-search.js.map +1 -0
  174. package/components/ix-filter-chip.d.ts +11 -0
  175. package/components/ix-filter-chip.js +8 -0
  176. package/components/ix-filter-chip.js.map +1 -0
  177. package/components/ix-flip-tile-content.d.ts +11 -0
  178. package/components/ix-flip-tile-content.js +38 -0
  179. package/components/ix-flip-tile-content.js.map +1 -0
  180. package/components/ix-flip-tile.d.ts +11 -0
  181. package/components/ix-flip-tile.js +121 -0
  182. package/components/ix-flip-tile.js.map +1 -0
  183. package/components/ix-form-field.d.ts +11 -0
  184. package/components/ix-form-field.js +43 -0
  185. package/components/ix-form-field.js.map +1 -0
  186. package/components/ix-group-context-menu.d.ts +11 -0
  187. package/components/ix-group-context-menu.js +8 -0
  188. package/components/ix-group-context-menu.js.map +1 -0
  189. package/components/ix-group-item.d.ts +11 -0
  190. package/components/ix-group-item.js +8 -0
  191. package/components/ix-group-item.js.map +1 -0
  192. package/components/ix-group.d.ts +11 -0
  193. package/components/ix-group.js +178 -0
  194. package/components/ix-group.js.map +1 -0
  195. package/components/ix-icon-button.d.ts +11 -0
  196. package/components/ix-icon-button.js +8 -0
  197. package/components/ix-icon-button.js.map +1 -0
  198. package/components/ix-icon-toggle-button.d.ts +11 -0
  199. package/components/ix-icon-toggle-button.js +116 -0
  200. package/components/ix-icon-toggle-button.js.map +1 -0
  201. package/components/ix-input-group.d.ts +11 -0
  202. package/components/ix-input-group.js +130 -0
  203. package/components/ix-input-group.js.map +1 -0
  204. package/components/ix-key-value-list.d.ts +11 -0
  205. package/components/ix-key-value-list.js +38 -0
  206. package/components/ix-key-value-list.js.map +1 -0
  207. package/components/ix-key-value.d.ts +11 -0
  208. package/components/ix-key-value.js +47 -0
  209. package/components/ix-key-value.js.map +1 -0
  210. package/components/ix-kpi.d.ts +11 -0
  211. package/components/ix-kpi.js +69 -0
  212. package/components/ix-kpi.js.map +1 -0
  213. package/components/ix-layout-grid.d.ts +11 -0
  214. package/components/ix-layout-grid.js +47 -0
  215. package/components/ix-layout-grid.js.map +1 -0
  216. package/components/ix-link-button.d.ts +11 -0
  217. package/components/ix-link-button.js +48 -0
  218. package/components/ix-link-button.js.map +1 -0
  219. package/components/ix-map-navigation-overlay.d.ts +11 -0
  220. package/components/ix-map-navigation-overlay.js +8 -0
  221. package/components/ix-map-navigation-overlay.js.map +1 -0
  222. package/components/ix-map-navigation.d.ts +11 -0
  223. package/components/ix-map-navigation.js +226 -0
  224. package/components/ix-map-navigation.js.map +1 -0
  225. package/components/ix-menu-about-item.d.ts +11 -0
  226. package/components/ix-menu-about-item.js +38 -0
  227. package/components/ix-menu-about-item.js.map +1 -0
  228. package/components/ix-menu-about-news.d.ts +11 -0
  229. package/components/ix-menu-about-news.js +83 -0
  230. package/components/ix-menu-about-news.js.map +1 -0
  231. package/components/ix-menu-about.d.ts +11 -0
  232. package/components/ix-menu-about.js +119 -0
  233. package/components/ix-menu-about.js.map +1 -0
  234. package/components/ix-menu-avatar-item.d.ts +11 -0
  235. package/components/ix-menu-avatar-item.js +8 -0
  236. package/components/ix-menu-avatar-item.js.map +1 -0
  237. package/components/ix-menu-avatar.d.ts +11 -0
  238. package/components/ix-menu-avatar.js +77 -0
  239. package/components/ix-menu-avatar.js.map +1 -0
  240. package/components/ix-menu-category.d.ts +11 -0
  241. package/components/ix-menu-category.js +190 -0
  242. package/components/ix-menu-category.js.map +1 -0
  243. package/components/ix-menu-item.d.ts +11 -0
  244. package/components/ix-menu-item.js +8 -0
  245. package/components/ix-menu-item.js.map +1 -0
  246. package/components/ix-menu-settings-item.d.ts +11 -0
  247. package/components/ix-menu-settings-item.js +38 -0
  248. package/components/ix-menu-settings-item.js.map +1 -0
  249. package/components/ix-menu-settings.d.ts +11 -0
  250. package/components/ix-menu-settings.js +106 -0
  251. package/components/ix-menu-settings.js.map +1 -0
  252. package/components/ix-menu.d.ts +11 -0
  253. package/components/ix-menu.js +508 -0
  254. package/components/ix-menu.js.map +1 -0
  255. package/components/ix-message-bar.d.ts +11 -0
  256. package/components/ix-message-bar.js +87 -0
  257. package/components/ix-message-bar.js.map +1 -0
  258. package/components/ix-modal-content.d.ts +11 -0
  259. package/components/ix-modal-content.js +35 -0
  260. package/components/ix-modal-content.js.map +1 -0
  261. package/components/ix-modal-example.d.ts +11 -0
  262. package/components/ix-modal-example.js +58 -0
  263. package/components/ix-modal-example.js.map +1 -0
  264. package/components/ix-modal-footer.d.ts +11 -0
  265. package/components/ix-modal-footer.js +35 -0
  266. package/components/ix-modal-footer.js.map +1 -0
  267. package/components/ix-modal-header.d.ts +11 -0
  268. package/components/ix-modal-header.js +84 -0
  269. package/components/ix-modal-header.js.map +1 -0
  270. package/components/ix-modal-loading.d.ts +11 -0
  271. package/components/ix-modal-loading.js +41 -0
  272. package/components/ix-modal-loading.js.map +1 -0
  273. package/components/ix-modal.d.ts +11 -0
  274. package/components/ix-modal.js +156 -0
  275. package/components/ix-modal.js.map +1 -0
  276. package/components/ix-pagination.d.ts +11 -0
  277. package/components/ix-pagination.js +211 -0
  278. package/components/ix-pagination.js.map +1 -0
  279. package/components/ix-pill.d.ts +11 -0
  280. package/components/ix-pill.js +78 -0
  281. package/components/ix-pill.js.map +1 -0
  282. package/components/ix-push-card.d.ts +11 -0
  283. package/components/ix-push-card.js +80 -0
  284. package/components/ix-push-card.js.map +1 -0
  285. package/components/ix-row.d.ts +11 -0
  286. package/components/ix-row.js +35 -0
  287. package/components/ix-row.js.map +1 -0
  288. package/components/ix-select-item.d.ts +11 -0
  289. package/components/ix-select-item.js +8 -0
  290. package/components/ix-select-item.js.map +1 -0
  291. package/components/ix-select.d.ts +11 -0
  292. package/components/ix-select.js +8 -0
  293. package/components/ix-select.js.map +1 -0
  294. package/components/ix-slider.d.ts +11 -0
  295. package/components/ix-slider.js +192 -0
  296. package/components/ix-slider.js.map +1 -0
  297. package/components/ix-spinner.d.ts +11 -0
  298. package/components/ix-spinner.js +8 -0
  299. package/components/ix-spinner.js.map +1 -0
  300. package/components/ix-split-button-item.d.ts +11 -0
  301. package/components/ix-split-button-item.js +51 -0
  302. package/components/ix-split-button-item.js.map +1 -0
  303. package/components/ix-split-button.d.ts +11 -0
  304. package/components/ix-split-button.js +97 -0
  305. package/components/ix-split-button.js.map +1 -0
  306. package/components/ix-tab-item.d.ts +11 -0
  307. package/components/ix-tab-item.js +8 -0
  308. package/components/ix-tab-item.js.map +1 -0
  309. package/components/ix-tabs.d.ts +11 -0
  310. package/components/ix-tabs.js +8 -0
  311. package/components/ix-tabs.js.map +1 -0
  312. package/components/ix-tile.d.ts +11 -0
  313. package/components/ix-tile.js +59 -0
  314. package/components/ix-tile.js.map +1 -0
  315. package/components/ix-time-picker.d.ts +11 -0
  316. package/components/ix-time-picker.js +8 -0
  317. package/components/ix-time-picker.js.map +1 -0
  318. package/components/ix-toast-container.d.ts +11 -0
  319. package/components/ix-toast-container.js +124 -0
  320. package/components/ix-toast-container.js.map +1 -0
  321. package/components/ix-toast.d.ts +11 -0
  322. package/components/ix-toast.js +8 -0
  323. package/components/ix-toast.js.map +1 -0
  324. package/components/ix-toggle-button.d.ts +11 -0
  325. package/components/ix-toggle-button.js +105 -0
  326. package/components/ix-toggle-button.js.map +1 -0
  327. package/components/ix-toggle.d.ts +11 -0
  328. package/components/ix-toggle.js +62 -0
  329. package/components/ix-toggle.js.map +1 -0
  330. package/components/ix-tooltip.d.ts +11 -0
  331. package/components/ix-tooltip.js +8 -0
  332. package/components/ix-tooltip.js.map +1 -0
  333. package/components/ix-tree-item.d.ts +11 -0
  334. package/components/ix-tree-item.js +8 -0
  335. package/components/ix-tree-item.js.map +1 -0
  336. package/components/ix-tree.d.ts +11 -0
  337. package/components/ix-tree.js +727 -0
  338. package/components/ix-tree.js.map +1 -0
  339. package/components/ix-typography.d.ts +11 -0
  340. package/components/ix-typography.js +8 -0
  341. package/components/ix-typography.js.map +1 -0
  342. package/components/ix-upload.d.ts +11 -0
  343. package/components/ix-upload.js +147 -0
  344. package/components/ix-upload.js.map +1 -0
  345. package/components/ix-validation-tooltip.d.ts +11 -0
  346. package/components/ix-validation-tooltip.js +170 -0
  347. package/components/ix-validation-tooltip.js.map +1 -0
  348. package/components/ix-workflow-step.d.ts +11 -0
  349. package/components/ix-workflow-step.js +120 -0
  350. package/components/ix-workflow-step.js.map +1 -0
  351. package/components/ix-workflow-steps.d.ts +11 -0
  352. package/components/ix-workflow-steps.js +99 -0
  353. package/components/ix-workflow-steps.js.map +1 -0
  354. package/components/logical-filter-operator.js +35 -0
  355. package/components/logical-filter-operator.js.map +1 -0
  356. package/components/luxon.js +7828 -0
  357. package/components/luxon.js.map +1 -0
  358. package/components/map-navigation-overlay.js +89 -0
  359. package/components/map-navigation-overlay.js.map +1 -0
  360. package/components/menu-avatar-item.js +45 -0
  361. package/components/menu-avatar-item.js.map +1 -0
  362. package/components/menu-item.js +92 -0
  363. package/components/menu-item.js.map +1 -0
  364. package/components/menu-service.js +156 -0
  365. package/components/menu-service.js.map +1 -0
  366. package/components/modal.js +245 -0
  367. package/components/modal.js.map +1 -0
  368. package/components/mutation-observer.js +13 -0
  369. package/components/mutation-observer.js.map +1 -0
  370. package/components/my-component.d.ts +11 -0
  371. package/components/my-component.js +34 -0
  372. package/components/my-component.js.map +1 -0
  373. package/components/package.json +8 -0
  374. package/components/rwd.util.js +41 -0
  375. package/components/rwd.util.js.map +1 -0
  376. package/components/select-item.js +92 -0
  377. package/components/select-item.js.map +1 -0
  378. package/components/select.js +410 -0
  379. package/components/select.js.map +1 -0
  380. package/components/shadow-dom.js +21 -0
  381. package/components/shadow-dom.js.map +1 -0
  382. package/components/spinner.js +48 -0
  383. package/components/spinner.js.map +1 -0
  384. package/components/tab-item.js +87 -0
  385. package/components/tab-item.js.map +1 -0
  386. package/components/tabs.js +227 -0
  387. package/components/tabs.js.map +1 -0
  388. package/components/theme-switcher.js +123 -0
  389. package/components/theme-switcher.js.map +1 -0
  390. package/components/time-picker.js +252 -0
  391. package/components/time-picker.js.map +1 -0
  392. package/components/toast.js +105 -0
  393. package/components/toast.js.map +1 -0
  394. package/components/tooltip.js +197 -0
  395. package/components/tooltip.js.map +1 -0
  396. package/components/tree-item.js +51 -0
  397. package/components/tree-item.js.map +1 -0
  398. package/components/typed-event.js +46 -0
  399. package/components/typed-event.js.map +1 -0
  400. package/components/typography.js +76 -0
  401. package/components/typography.js.map +1 -0
  402. package/components/upload-file-state.js +19 -0
  403. package/components/upload-file-state.js.map +1 -0
  404. package/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+
3
+ const tabItemCss = "@charset \"UTF-8\";:host{position:relative;display:flex;align-items:center;justify-content:center;padding:10px 1.5rem;line-height:20px;font-size:14px;font-weight:bold;background-color:var(--theme-tab--background);color:var(--theme-tab--color)}:host *,:host *::after,:host *::before{box-sizing:border-box}:host ::-webkit-scrollbar-button{display:none}:host ::-webkit-scrollbar{width:0.5rem;height:0.5rem}:host ::-webkit-scrollbar-track{border-radius:5px;background:var(--theme-scrollbar-track--background)}:host ::-webkit-scrollbar-track:hover{background:var(--theme-scrollbar-track--background--hover)}:host ::-webkit-scrollbar-thumb{border-radius:5px;background:var(--theme-scrollbar-thumb--background)}:host ::-webkit-scrollbar-thumb:hover{background:var(--theme-scrollbar-thumb--background--hover)}:host ::-webkit-scrollbar-corner{display:none}:host ::after{content:\"\";position:absolute;background-color:var(--theme-tab-indicator--background);width:100%;height:var(--theme-tab-indicator--height);left:0}:host .text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}:host .text span,:host .text span::before{pointer-events:none}:host .circle{display:flex;justify-content:center;align-items:center;height:3rem;width:3rem;background-color:var(--theme-animated-tab-indicator--background);border-radius:50%;border:2px solid var(--theme-animated-tab-circle--border-color);color:var(--theme-an…icon--color);cursor:pointer}:host .circle.selected:not(.disabled){background-color:var(--theme-animated-tab-circle--background--selected);color:var(--theme-animated-tab-icon--color--selected);border-color:var(--theme-animated-tab-circle--border-color--selected)}:host .circle.selected:not(.disabled):hover{background-color:var(--theme-animated-tab-circle--background--selected)}:host .circle:hover{background-color:var(--theme-animated-tab-circle--background--hover)}:host .circle:active{background-color:var(--theme-animated-tab-circle--background--active)}:host .circle:active{background-color:var(--theme-animated-tab-circle--background--active)}:host .circle.disabled{background-color:var(--theme-animated-tab-circle--background--disabled);border-color:var(--theme-animated-tab-circle--border-color--disabled)}:host .counter{position:absolute;z-index:1;height:16px;width:auto;background-color:var(--theme-pill-outline--background);border:1px solid var(--theme-tab-pill--border-color);border-radius:100px;bottom:6px;display:flex;justify-content:center;align-items:center;padding-left:0.25rem;padding-right:0.25rem;font-size:12px;line-height:14px;color:var(--theme-pill-outline--color);cursor:pointer}:host .counter.selected{border-color:var(--theme-tab-pill--border-color--selected)}:host .counter.selected::after{display:none}:host .counter.disabled{border-color:var(--theme-tab-pill--border-color--disabled)}:host .counter::after{display:none}:host .hidden{display:none}:host(.circle){height:72px}:host(.top) ::after{top:0}:host(.bottom) ::after{bottom:0}:host(.stretched){flex-basis:100%;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host(:hover:not(.circle)){background-color:var(--theme-tab--background--hover);color:var(--theme-tab-color-hover);cursor:pointer}:host(:hover:not(.circle)) ::after{background-color:var(--theme-tab-indicator--background--hover)}:host(:active:not(.circle)){background-color:var(--theme-tab--background--active);color:var(--theme-tab-color--active)}:host(:active:not(.circle)) ::after{background-color:var(--theme-tab-indicator--background--active)}:host(:focus-visible){outline:0px solid var(--focus--border-color)}:host(:focus-visible) .circle{outline:1px solid var(--focus--border-color)}:host(:focus-visible:not(.circle)){outline:1px solid var(--focus--border-color)}:host(.disabled){pointer-events:none;color:var(--theme-tab--color--disabled);background-color:var(--theme-tab--background--disabled)}:host(.disabled) ::after{background-color:var(--theme-tab-indicator--background--disabled)}:host(.selected:not(.disabled)){background-color:var(--theme-tab--background--selected);color:var(--theme-tab--color--selected)}:host(.selected:not(.disabled)) ::after{background-color:var(--theme-tab-indicator--background--selected)}:host(.icon){padding:1.5rem 0.5rem}:host(.small-tab){height:32px;padding:1rem}:host(.small-tab.icon){padding:1rem 0.25rem}";
4
+
5
+ const TabItem = /*@__PURE__*/ proxyCustomElement(class TabItem extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
10
+ this.tabClick = createEvent(this, "tabClick", 7);
11
+ this.selected = false;
12
+ this.disabled = false;
13
+ this.small = false;
14
+ this.icon = false;
15
+ this.rounded = false;
16
+ this.counter = undefined;
17
+ this.layout = 'auto';
18
+ this.placement = 'bottom';
19
+ }
20
+ tabItemClasses(props) {
21
+ return {
22
+ selected: props.selected,
23
+ disabled: props.disabled,
24
+ 'small-tab': props.small,
25
+ icon: props.small,
26
+ stretched: props.layout === 'stretched',
27
+ bottom: props.placement === 'bottom',
28
+ top: props.placement === 'top',
29
+ circle: props.circle,
30
+ };
31
+ }
32
+ render() {
33
+ return (h(Host, { class: this.tabItemClasses({
34
+ selected: this.selected,
35
+ disabled: this.disabled,
36
+ small: this.small,
37
+ icon: this.icon,
38
+ layout: this.layout,
39
+ placement: this.placement,
40
+ circle: this.rounded,
41
+ }), tabIndex: 0, onClick: (event) => {
42
+ const clientEvent = this.tabClick.emit({
43
+ nativeEvent: event,
44
+ });
45
+ if (clientEvent.defaultPrevented) {
46
+ event.stopPropagation();
47
+ }
48
+ } }, h("div", { class: {
49
+ circle: this.rounded,
50
+ text: !this.rounded,
51
+ selected: this.selected,
52
+ disabled: this.disabled,
53
+ } }, h("slot", null)), h("div", { class: {
54
+ counter: true,
55
+ selected: this.selected,
56
+ hidden: !(this.rounded && this.counter !== undefined),
57
+ disabled: this.disabled,
58
+ } }, this.counter)));
59
+ }
60
+ static get style() { return tabItemCss; }
61
+ }, [1, "ix-tab-item", {
62
+ "selected": [4],
63
+ "disabled": [4],
64
+ "small": [4],
65
+ "icon": [4],
66
+ "rounded": [4],
67
+ "counter": [2],
68
+ "layout": [1],
69
+ "placement": [1]
70
+ }]);
71
+ function defineCustomElement() {
72
+ if (typeof customElements === "undefined") {
73
+ return;
74
+ }
75
+ const components = ["ix-tab-item"];
76
+ components.forEach(tagName => { switch (tagName) {
77
+ case "ix-tab-item":
78
+ if (!customElements.get(tagName)) {
79
+ customElements.define(tagName, TabItem);
80
+ }
81
+ break;
82
+ } });
83
+ }
84
+
85
+ export { TabItem as T, defineCustomElement as d };
86
+
87
+ //# sourceMappingURL=tab-item.js.map
@@ -0,0 +1 @@
1
+ {"file":"tab-item.js","mappings":";;AAAA,MAAM,UAAU,GAAG,gvIAAgvI;;MCoBtvI,OAAO;;;;;;oBAIC,KAAK;oBAKL,KAAK;iBAKR,KAAK;gBAKN,KAAK;mBAKF,KAAK;;kBAUgB,MAAM;qBAKP,QAAQ;;EAStC,cAAc,CAAC,KAQtB;IACC,OAAO;MACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,WAAW,EAAE,KAAK,CAAC,KAAK;MACxB,IAAI,EAAE,KAAK,CAAC,KAAK;MACjB,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,WAAW;MACvC,MAAM,EAAE,KAAK,CAAC,SAAS,KAAK,QAAQ;MACpC,GAAG,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK;MAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;GACH;EAED,MAAM;IACJ,QACE,EAAC,IAAI,IACH,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,OAAO;OACrB,CAAC,EACF,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,CAAC,KAAiB;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;UACrC,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,gBAAgB,EAAE;UAChC,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;OACF,IAED,WACE,KAAK,EAAE;QACL,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;OACxB,IAED,eAAa,CACT,EACN,WACE,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;QACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;OACxB,IAEA,IAAI,CAAC,OAAO,CACT,CACD,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["./src/components/tab-item/tab-item.scss?tag=ix-tab-item&encapsulation=shadow","./src/components/tab-item/tab-item.tsx"],"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@import 'common-variables';\n@import 'mixins/text-truncation';\n@import 'mixins/hover';\n@import 'mixins/shadow-dom/component';\n\n:host {\n @include ix-component;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px $large-space;\n line-height: 20px;\n font-size: 14px;\n font-weight: bold;\n background-color: var(--theme-tab--background);\n color: var(--theme-tab--color);\n\n ::after {\n content: '';\n position: absolute;\n background-color: var(--theme-tab-indicator--background);\n width: 100%;\n height: var(--theme-tab-indicator--height);\n left: 0;\n }\n\n .text {\n @include ellipsis;\n\n span,\n span::before {\n pointer-events: none;\n }\n\n vertical-align: middle;\n }\n\n .circle {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 3rem;\n width: 3rem;\n background-color: var(--theme-animated-tab-indicator--background);\n border-radius: 50%;\n border: 2px solid var(--theme-animated-tab-circle--border-color);\n color: var(--theme-an…icon--color);\n cursor: pointer;\n\n &.selected:not(.disabled) {\n background-color: var(--theme-animated-tab-circle--background--selected);\n color: var(--theme-animated-tab-icon--color--selected);\n border-color: var(--theme-animated-tab-circle--border-color--selected);\n\n &:hover {\n background-color: var(\n --theme-animated-tab-circle--background--selected\n );\n }\n }\n\n &:hover {\n background-color: var(--theme-animated-tab-circle--background--hover);\n }\n\n &:active {\n background-color: var(--theme-animated-tab-circle--background--active);\n }\n\n &:active {\n background-color: var(--theme-animated-tab-circle--background--active);\n }\n\n &.disabled {\n background-color: var(--theme-animated-tab-circle--background--disabled);\n border-color: var(--theme-animated-tab-circle--border-color--disabled);\n }\n }\n\n .counter {\n position: absolute;\n z-index: 1;\n height: 16px;\n width: auto;\n background-color: var(--theme-pill-outline--background);\n border: 1px solid var(--theme-tab-pill--border-color);\n border-radius: 100px;\n bottom: 6px;\n display: flex;\n justify-content: center;\n align-items: center;\n padding-left: $tiny-space;\n padding-right: $tiny-space;\n font-size: 12px;\n line-height: 14px;\n color: var(--theme-pill-outline--color);\n cursor: pointer;\n\n &.selected {\n border-color: var(--theme-tab-pill--border-color--selected);\n\n &::after {\n display: none;\n }\n }\n\n &.disabled {\n border-color: var(--theme-tab-pill--border-color--disabled);\n }\n\n &::after {\n display: none;\n }\n }\n\n .hidden {\n display: none;\n }\n}\n\n:host(.circle) {\n height: 72px;\n}\n\n:host(.top) {\n ::after {\n top: 0;\n }\n}\n\n:host(.bottom) {\n ::after {\n bottom: 0;\n }\n}\n\n:host(.stretched) {\n flex-basis: 100%;\n width: 100%;\n @include ellipsis;\n}\n\n:host(:hover:not(.circle)) {\n background-color: var(--theme-tab--background--hover);\n color: var(--theme-tab-color-hover);\n cursor: pointer;\n\n ::after {\n background-color: var(--theme-tab-indicator--background--hover);\n }\n}\n\n:host(:active:not(.circle)) {\n background-color: var(--theme-tab--background--active);\n color: var(--theme-tab-color--active);\n\n ::after {\n background-color: var(--theme-tab-indicator--background--active);\n }\n}\n\n:host(:focus-visible) {\n outline: 0px solid var(--focus--border-color);\n\n .circle {\n outline: 1px solid var(--focus--border-color);\n }\n}\n\n:host(:focus-visible:not(.circle)) {\n outline: 1px solid var(--focus--border-color);\n}\n\n:host(.disabled) {\n pointer-events: none;\n color: var(--theme-tab--color--disabled);\n background-color: var(--theme-tab--background--disabled);\n\n ::after {\n background-color: var(--theme-tab-indicator--background--disabled);\n }\n}\n\n:host(.selected:not(.disabled)) {\n background-color: var(--theme-tab--background--selected);\n color: var(--theme-tab--color--selected);\n\n ::after {\n background-color: var(--theme-tab-indicator--background--selected);\n }\n}\n\n:host(.icon) {\n padding: $large-space $small-space;\n}\n\n:host(.small-tab) {\n height: 32px;\n padding: $default-space;\n}\n\n:host(.small-tab.icon) {\n padding: $default-space $tiny-space;\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 */\n\nimport { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nexport type TabClickDetail = {\n nativeEvent: MouseEvent;\n};\n\n@Component({\n tag: 'ix-tab-item',\n styleUrl: 'tab-item.scss',\n shadow: true,\n})\nexport class TabItem {\n /**\n * Set selected tab\n */\n @Prop() selected = false;\n\n /**\n * Set disabled tab\n */\n @Prop() disabled = false;\n\n /**\n * Set small size tab\n */\n @Prop() small = false;\n\n /**\n * Set icon only tab\n */\n @Prop() icon = false;\n\n /**\n * Set rounded tab\n */\n @Prop() rounded = false;\n\n /**\n * Set counter value\n */\n @Prop() counter: number;\n\n /**\n * Set layout width style\n */\n @Prop() layout: 'auto' | 'stretched' = 'auto';\n\n /**\n * Set selected placement\n */\n @Prop() placement: 'bottom' | 'top' = 'bottom';\n\n /**\n * On tab click\n *\n * @since 2.0.0\n */\n @Event() tabClick: EventEmitter<TabClickDetail>;\n\n private tabItemClasses(props: {\n selected: boolean;\n disabled: boolean;\n small: boolean;\n icon: boolean;\n circle: boolean;\n layout: 'auto' | 'stretched';\n placement: 'bottom' | 'top';\n }) {\n return {\n selected: props.selected,\n disabled: props.disabled,\n 'small-tab': props.small,\n icon: props.small,\n stretched: props.layout === 'stretched',\n bottom: props.placement === 'bottom',\n top: props.placement === 'top',\n circle: props.circle,\n };\n }\n\n render() {\n return (\n <Host\n class={this.tabItemClasses({\n selected: this.selected,\n disabled: this.disabled,\n small: this.small,\n icon: this.icon,\n layout: this.layout,\n placement: this.placement,\n circle: this.rounded,\n })}\n tabIndex={0}\n onClick={(event: MouseEvent) => {\n const clientEvent = this.tabClick.emit({\n nativeEvent: event,\n });\n\n if (clientEvent.defaultPrevented) {\n event.stopPropagation();\n }\n }}\n >\n <div\n class={{\n circle: this.rounded,\n text: !this.rounded,\n selected: this.selected,\n disabled: this.disabled,\n }}\n >\n <slot></slot>\n </div>\n <div\n class={{\n counter: true,\n selected: this.selected,\n hidden: !(this.rounded && this.counter !== undefined),\n disabled: this.disabled,\n }}\n >\n {this.counter}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,227 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+
3
+ const tabsCss = ":host{width:auto;display:flex;align-items:center;position:relative}:host *,:host *::after,:host *::before{box-sizing:border-box}:host ::-webkit-scrollbar-button{display:none}:host ::-webkit-scrollbar{width:0.5rem;height:0.5rem}:host ::-webkit-scrollbar-track{border-radius:5px;background:var(--theme-scrollbar-track--background)}:host ::-webkit-scrollbar-track:hover{background:var(--theme-scrollbar-track--background--hover)}:host ::-webkit-scrollbar-thumb{border-radius:5px;background:var(--theme-scrollbar-thumb--background)}:host ::-webkit-scrollbar-thumb:hover{background:var(--theme-scrollbar-thumb--background--hover)}:host ::-webkit-scrollbar-corner{display:none}:host .tab-items{overflow:hidden;scroll-behavior:smooth;width:100%}:host .tab-items .items-content{display:flex;align-items:center}:host .arrow{position:absolute;display:flex;align-items:center;justify-content:center;width:32px;height:32px;top:0;bottom:0;left:0;margin:auto 0;border-radius:4px;color:var(--theme-btn-invisible-primary--color);background-color:var(--theme-btn-invisible-primary--background);z-index:2}:host .arrow:hover{color:var(--theme-btn-invisible-primary--color--hover);background-color:var(--theme-btn-invisible-primary--background--hover)}:host .arrow:active{color:var(--theme-btn-invisible-primary--color--active);background-color:var(--theme-btn-invisible-primary--background--active)}:host .arrow.right{left:auto;right:0}:host .overflow-shadow{display:block;position:relative;height:100%;width:100%;pointer-events:all}:host .overflow-shadow.shadow-left{-webkit-mask-image:linear-gradient(90deg, transparent 0px, black 45px);mask-image:linear-gradient(90deg, transparent 0px, black 45px)}:host .overflow-shadow.shadow-right{-webkit-mask-image:linear-gradient(90deg, black calc(100% - 45px), transparent 100%);mask-image:linear-gradient(90deg, black calc(100% - 45px), transparent 100%)}:host .overflow-shadow.shadow-both{-webkit-mask-image:linear-gradient(90deg, transparent 0px, black 45px, black calc(100% - 45px), transparent 100%);mask-image:linear-gradient(90deg, transparent 0px, black 45px, black calc(100% - 45px), transparent 100%)}";
4
+
5
+ const Tabs = /*@__PURE__*/ proxyCustomElement(class Tabs extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
10
+ this.selectedChange = createEvent(this, "selectedChange", 7);
11
+ this.windowStartSize = window.innerWidth;
12
+ this.clickAction = {
13
+ timeout: null,
14
+ isClick: true,
15
+ };
16
+ this.small = false;
17
+ this.rounded = false;
18
+ this.selected = 0;
19
+ this.layout = 'auto';
20
+ this.placement = 'bottom';
21
+ this.totalItems = 0;
22
+ this.currentScrollAmount = 0;
23
+ this.scrollAmount = 100;
24
+ this.styleNextArrow = {};
25
+ this.stylePreviousArrow = {};
26
+ this.scrollActionAmount = 0;
27
+ }
28
+ onWindowResize() {
29
+ this.totalItems = 0;
30
+ this.totalItems = this.getTabs().length;
31
+ if (this.windowStartSize === 0)
32
+ return (this.windowStartSize = window.innerWidth);
33
+ this.move(this.windowStartSize - window.innerWidth);
34
+ this.windowStartSize = window.innerWidth;
35
+ }
36
+ getTabs() {
37
+ return Array.from(this.hostElement.querySelectorAll('ix-tab-item'));
38
+ }
39
+ getTab(tabIndex) {
40
+ return this.getTabs()[tabIndex];
41
+ }
42
+ getTabsWrapper() {
43
+ return this.hostElement.shadowRoot.querySelector('.items-content');
44
+ }
45
+ showArrows() {
46
+ try {
47
+ const tabWrapper = this.getTabsWrapper();
48
+ return (tabWrapper.scrollWidth >
49
+ Math.ceil(tabWrapper.getBoundingClientRect().width) &&
50
+ this.layout === 'auto');
51
+ }
52
+ catch (error) {
53
+ return false;
54
+ }
55
+ }
56
+ showPreviousArrow() {
57
+ try {
58
+ return this.showArrows() && this.scrollActionAmount < 0;
59
+ }
60
+ catch (error) {
61
+ return false;
62
+ }
63
+ }
64
+ showNextArrow() {
65
+ try {
66
+ const tabWrapper = this.getTabsWrapper();
67
+ const tabWrapperRect = tabWrapper.getBoundingClientRect();
68
+ return (this.showArrows() &&
69
+ this.scrollActionAmount >
70
+ (tabWrapper.scrollWidth - tabWrapperRect.width) * -1);
71
+ }
72
+ catch (error) {
73
+ return false;
74
+ }
75
+ }
76
+ getArrowStyle(condition) {
77
+ return {
78
+ opacity: condition ? '1' : '0',
79
+ zIndex: condition ? '1' : '-1',
80
+ };
81
+ }
82
+ move(amount, click = false) {
83
+ const tabWrapper = this.getTabsWrapper();
84
+ const maxScrollWidth = (tabWrapper.scrollWidth - tabWrapper.getBoundingClientRect().width) * -1;
85
+ amount = this.currentScrollAmount + amount;
86
+ amount = amount > 0 ? 0 : amount < maxScrollWidth ? maxScrollWidth : amount;
87
+ const styles = [
88
+ `transform: translateX(${amount}px);`,
89
+ click ? 'transition: all ease-in-out 400ms;' : '',
90
+ ].join('');
91
+ tabWrapper.setAttribute('style', styles);
92
+ if (click)
93
+ this.currentScrollAmount = this.scrollActionAmount = amount;
94
+ else
95
+ this.scrollActionAmount = amount;
96
+ }
97
+ moveTabToView(tabIndex) {
98
+ if (!this.showArrows())
99
+ return;
100
+ const tab = this.getTab(tabIndex).getBoundingClientRect();
101
+ const amount = tab.x * -1;
102
+ this.move(amount, true);
103
+ }
104
+ setSelected(index) {
105
+ this.selected = index;
106
+ }
107
+ clickTab(index) {
108
+ if (this.dragStop()) {
109
+ return;
110
+ }
111
+ const { defaultPrevented } = this.selectedChange.emit(index);
112
+ if (defaultPrevented) {
113
+ return;
114
+ }
115
+ this.setSelected(index);
116
+ this.moveTabToView(index);
117
+ }
118
+ dragStart(element, event) {
119
+ if (!this.showArrows())
120
+ return;
121
+ if (event.button > 0)
122
+ return;
123
+ this.clickAction.timeout =
124
+ this.clickAction.timeout === null
125
+ ? setTimeout(() => (this.clickAction.isClick = false), 300)
126
+ : null;
127
+ const tabPositionX = parseFloat(window.getComputedStyle(element).left);
128
+ const mousedownPositionX = event.clientX;
129
+ const move = (event) => this.dragMove(event, tabPositionX, mousedownPositionX);
130
+ window.addEventListener('mouseup', () => {
131
+ window.removeEventListener('mousemove', move, false);
132
+ this.dragStop();
133
+ });
134
+ window.addEventListener('mousemove', move, false);
135
+ }
136
+ dragMove(event, tabX, mousedownX) {
137
+ this.move(event.clientX + tabX - mousedownX);
138
+ }
139
+ dragStop() {
140
+ clearTimeout(this.clickAction.timeout);
141
+ this.clickAction.timeout = null;
142
+ if (this.clickAction.isClick)
143
+ return false;
144
+ this.currentScrollAmount = this.scrollActionAmount;
145
+ this.clickAction.isClick = true;
146
+ return true;
147
+ }
148
+ componentDidRender() {
149
+ const tabs = this.getTabs();
150
+ this.totalItems = tabs.length;
151
+ tabs.forEach((element, index) => {
152
+ if (this.small)
153
+ element.setAttribute('small', 'true');
154
+ if (this.rounded)
155
+ element.setAttribute('rounded', 'true');
156
+ element.setAttribute('layout', this.layout);
157
+ element.setAttribute('selected', index === this.selected ? 'true' : 'false');
158
+ element.setAttribute('placement', this.placement);
159
+ });
160
+ }
161
+ componentWillRender() {
162
+ requestAnimationFrame(() => {
163
+ const showNextArrow = this.showNextArrow();
164
+ const previousArrow = this.showPreviousArrow();
165
+ this.styleNextArrow = this.getArrowStyle(showNextArrow);
166
+ this.stylePreviousArrow = this.getArrowStyle(previousArrow);
167
+ });
168
+ }
169
+ componentDidLoad() {
170
+ const tabs = this.getTabs();
171
+ tabs.forEach((element) => {
172
+ element.addEventListener('mousedown', (event) => this.dragStart(element, event));
173
+ });
174
+ }
175
+ onTabClick(event) {
176
+ if (event.defaultPrevented) {
177
+ return;
178
+ }
179
+ const target = event.target;
180
+ const tabs = this.getTabs();
181
+ tabs.forEach((tab, index) => {
182
+ if (!tab.disabled && tab === target) {
183
+ this.clickTab(index);
184
+ }
185
+ });
186
+ }
187
+ render() {
188
+ return (h(Host, null, h("div", { class: "arrow", style: this.stylePreviousArrow, onClick: () => this.move(this.scrollAmount, true) }, h("ix-icon", { name: 'chevron-left-small' })), h("div", { class: {
189
+ 'tab-items': true,
190
+ 'overflow-shadow': true,
191
+ 'shadow-left': this.showPreviousArrow(),
192
+ 'shadow-right': this.showNextArrow(),
193
+ 'shadow-both': this.showNextArrow() && this.showPreviousArrow(),
194
+ } }, h("div", { class: "items-content" }, h("slot", null))), h("div", { class: "arrow right", style: this.styleNextArrow, onClick: () => this.move(-this.scrollAmount, true) }, h("ix-icon", { name: 'chevron-right-small' }))));
195
+ }
196
+ get hostElement() { return this; }
197
+ static get style() { return tabsCss; }
198
+ }, [1, "ix-tabs", {
199
+ "small": [4],
200
+ "rounded": [4],
201
+ "selected": [1026],
202
+ "layout": [1],
203
+ "placement": [1],
204
+ "totalItems": [32],
205
+ "currentScrollAmount": [32],
206
+ "scrollAmount": [32],
207
+ "styleNextArrow": [32],
208
+ "stylePreviousArrow": [32],
209
+ "scrollActionAmount": [32]
210
+ }, [[9, "resize", "onWindowResize"], [0, "tabClick", "onTabClick"]]]);
211
+ function defineCustomElement() {
212
+ if (typeof customElements === "undefined") {
213
+ return;
214
+ }
215
+ const components = ["ix-tabs"];
216
+ components.forEach(tagName => { switch (tagName) {
217
+ case "ix-tabs":
218
+ if (!customElements.get(tagName)) {
219
+ customElements.define(tagName, Tabs);
220
+ }
221
+ break;
222
+ } });
223
+ }
224
+
225
+ export { Tabs as T, defineCustomElement as d };
226
+
227
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"file":"tabs.js","mappings":";;AAAA,MAAM,OAAO,GAAG,0lEAA0lE;;MC0B7lE,IAAI;;;;;;IA2CP,oBAAe,GAAG,MAAM,CAAC,UAAU,CAAC;IAEpC,gBAAW,GAGf;MACF,OAAO,EAAE,IAAI;MACb,OAAO,EAAE,IAAI;KACd,CAAC;iBA7Cc,KAAK;mBAKH,KAAK;oBAKa,CAAC;kBAKE,MAAM;qBAKP,QAAQ;sBASxB,CAAC;+BACQ,CAAC;wBACR,GAAG;0BACD,EAAE;8BACE,EAAE;8BAEF,CAAC;;EAa/B,cAAc;IACZ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;IAExC,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC;MAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,EAAE;IACpD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;GAC1C;EAEO,OAAO;IACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;GACrE;EAEO,MAAM,CAAC,QAAgB;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;GACjC;EAEO,cAAc;IACpB,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;GACpE;EAEO,UAAU;IAChB,IAAI;MACF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;MACzC,QACE,UAAU,CAAC,WAAW;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,MAAM,KAAK,MAAM,EACtB;KACH;IAAC,OAAO,KAAK,EAAE;MACd,OAAO,KAAK,CAAC;KACd;GACF;EAEO,iBAAiB;IACvB,IAAI;MACF,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;KACzD;IAAC,OAAO,KAAK,EAAE;MACd,OAAO,KAAK,CAAC;KACd;GACF;EAEO,aAAa;IACnB,IAAI;MACF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;MACzC,MAAM,cAAc,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;MAE1D,QACE,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,kBAAkB;UACrB,CAAC,UAAU,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,EACtD;KACH;IAAC,OAAO,KAAK,EAAE;MACd,OAAO,KAAK,CAAC;KACd;GACF;EAEO,aAAa,CAAC,SAAkB;IACtC,OAAO;MACL,OAAO,EAAE,SAAS,GAAG,GAAG,GAAG,GAAG;MAC9B,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG,IAAI;KAC/B,CAAC;GACH;EAEO,IAAI,CAAC,MAAc,EAAE,KAAK,GAAG,KAAK;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,cAAc,GAClB,CAAC,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAE3E,MAAM,GAAG,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC;IAC3C,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;IAE5E,MAAM,MAAM,GAAG;MACb,yBAAyB,MAAM,MAAM;MACrC,KAAK,GAAG,oCAAoC,GAAG,EAAE;KAClD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzC,IAAI,KAAK;MAAE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;;MAClE,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;GACvC;EAEO,aAAa,CAAC,QAAgB;IACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;MAAE,OAAO;IAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;GACzB;EAEO,WAAW,CAAC,KAAa;IAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;GACvB;EAEO,QAAQ,CAAC,KAAa;IAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;MACnB,OAAO;KACR;IAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,gBAAgB,EAAE;MACpB,OAAO;KACR;IAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;GAC3B;EAEO,SAAS,CAAC,OAA6B,EAAE,KAAiB;IAChE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;MAAE,OAAO;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;MAAE,OAAO;IAE7B,IAAI,CAAC,WAAW,CAAC,OAAO;MACtB,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,IAAI;UAC7B,UAAU,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC;UACzD,IAAI,CAAC;IAEX,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,KAAiB,KAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAEzD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE;MACjC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;MACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;GACnD;EAEO,QAAQ,CAAC,KAAiB,EAAE,IAAY,EAAE,UAAkB;IAClE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC;GAC9C;EAEO,QAAQ;IACd,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAEhC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO;MAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC;IACnD,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAEhC,OAAO,IAAI,CAAC;GACb;EAED,kBAAkB;IAChB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAE9B,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK;MAC1B,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;MAEtD,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;MAE1D,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;MAC5C,OAAO,CAAC,YAAY,CAClB,UAAU,EACV,KAAK,KAAK,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAC3C,CAAC;MACF,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACnD,CAAC,CAAC;GACJ;EAED,mBAAmB;IACjB,qBAAqB,CAAC;MACpB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;MAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;MAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;MACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;KAC7D,CAAC,CAAC;GACJ;EAED,gBAAgB;IACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO;MACnB,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,KAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAC/B,CAAC;KACH,CAAC,CAAC;GACJ;EAGD,UAAU,CAAC,KAAkB;IAC3B,IAAI,KAAK,CAAC,gBAAgB,EAAE;MAC1B,OAAO;KACR;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK;MACtB,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE;QACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;OACtB;KACF,CAAC,CAAC;GACJ;EAED,MAAM;IACJ,QACE,EAAC,IAAI,QACH,WACE,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAC9B,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAEjD,eAAS,IAAI,EAAE,oBAAoB,GAAY,CAC3C,EACN,WACE,KAAK,EAAE;QACL,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE;QACvC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE;QACpC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;OAChE,IAED,WAAK,KAAK,EAAC,eAAe,IACxB,eAAa,CACT,CACF,EACN,WACE,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,IAAI,CAAC,cAAc,EAC1B,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAElD,eAAS,IAAI,EAAE,qBAAqB,GAAY,CAC5C,CACD,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["./src/components/tabs/tabs.scss?tag=ix-tabs&encapsulation=shadow","./src/components/tabs/tabs.tsx"],"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@import 'common-variables';\n@import 'mixins/text-truncation';\n@import 'mixins/shadow-dom/component';\n\n:host {\n @include ix-component;\n width: auto;\n display: flex;\n align-items: center;\n position: relative;\n\n .tab-items {\n overflow: hidden;\n scroll-behavior: smooth;\n width: 100%;\n\n .items-content {\n display: flex;\n align-items: center;\n }\n }\n\n .arrow {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n top: 0;\n bottom: 0;\n left: 0;\n margin: auto 0;\n border-radius: 4px;\n color: var(--theme-btn-invisible-primary--color);\n background-color: var(--theme-btn-invisible-primary--background);\n z-index: 2;\n\n &:hover {\n color: var(--theme-btn-invisible-primary--color--hover);\n background-color: var(--theme-btn-invisible-primary--background--hover);\n }\n\n &:active {\n color: var(--theme-btn-invisible-primary--color--active);\n background-color: var(--theme-btn-invisible-primary--background--active);\n }\n\n &.right {\n left: auto;\n right: 0;\n }\n }\n\n .overflow-shadow {\n display: block;\n position: relative;\n height: 100%;\n width: 100%;\n pointer-events: all;\n\n &.shadow-left {\n mask-image: linear-gradient(90deg, transparent 0px, black 45px);\n }\n\n &.shadow-right {\n mask-image: linear-gradient(\n 90deg,\n black calc(100% - 45px),\n transparent 100%\n );\n }\n\n &.shadow-both {\n mask-image: linear-gradient(\n 90deg,\n transparent 0px,\n black 45px,\n black calc(100% - 45px),\n transparent 100%\n );\n }\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 */\n\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\n\n@Component({\n tag: 'ix-tabs',\n styleUrl: 'tabs.scss',\n shadow: true,\n})\nexport class Tabs {\n @Element() hostElement!: HTMLIxTabsElement;\n\n /**\n * Set tab items to small size\n */\n @Prop() small = false;\n\n /**\n * Set rounded tabs\n */\n @Prop() rounded = false;\n\n /**\n * Set default selected tab by index\n */\n @Prop({ mutable: true }) selected = 0;\n\n /**\n * Set layout width style\n */\n @Prop() layout: 'auto' | 'stretched' = 'auto';\n\n /**\n * Set placement style\n */\n @Prop() placement: 'bottom' | 'top' = 'bottom';\n\n /**\n * `selected` property changed\n *\n * @since 2.0.0\n */\n @Event() selectedChange: EventEmitter<number>;\n\n @State() totalItems = 0;\n @State() currentScrollAmount = 0;\n @State() scrollAmount = 100;\n @State() styleNextArrow = {};\n @State() stylePreviousArrow = {};\n\n @State() scrollActionAmount = 0;\n\n private windowStartSize = window.innerWidth;\n\n private clickAction: {\n timeout: NodeJS.Timeout;\n isClick: boolean;\n } = {\n timeout: null,\n isClick: true,\n };\n\n @Listen('resize', { target: 'window' })\n onWindowResize() {\n this.totalItems = 0;\n this.totalItems = this.getTabs().length;\n\n if (this.windowStartSize === 0)\n return (this.windowStartSize = window.innerWidth);\n this.move(this.windowStartSize - window.innerWidth);\n this.windowStartSize = window.innerWidth;\n }\n\n private getTabs() {\n return Array.from(this.hostElement.querySelectorAll('ix-tab-item'));\n }\n\n private getTab(tabIndex: number) {\n return this.getTabs()[tabIndex];\n }\n\n private getTabsWrapper() {\n return this.hostElement.shadowRoot.querySelector('.items-content');\n }\n\n private showArrows() {\n try {\n const tabWrapper = this.getTabsWrapper();\n return (\n tabWrapper.scrollWidth >\n Math.ceil(tabWrapper.getBoundingClientRect().width) &&\n this.layout === 'auto'\n );\n } catch (error) {\n return false;\n }\n }\n\n private showPreviousArrow() {\n try {\n return this.showArrows() && this.scrollActionAmount < 0;\n } catch (error) {\n return false;\n }\n }\n\n private showNextArrow() {\n try {\n const tabWrapper = this.getTabsWrapper();\n const tabWrapperRect = tabWrapper.getBoundingClientRect();\n\n return (\n this.showArrows() &&\n this.scrollActionAmount >\n (tabWrapper.scrollWidth - tabWrapperRect.width) * -1\n );\n } catch (error) {\n return false;\n }\n }\n\n private getArrowStyle(condition: boolean) {\n return {\n opacity: condition ? '1' : '0',\n zIndex: condition ? '1' : '-1',\n };\n }\n\n private move(amount: number, click = false) {\n const tabWrapper = this.getTabsWrapper();\n const maxScrollWidth =\n (tabWrapper.scrollWidth - tabWrapper.getBoundingClientRect().width) * -1;\n\n amount = this.currentScrollAmount + amount;\n amount = amount > 0 ? 0 : amount < maxScrollWidth ? maxScrollWidth : amount;\n\n const styles = [\n `transform: translateX(${amount}px);`,\n click ? 'transition: all ease-in-out 400ms;' : '',\n ].join('');\n\n tabWrapper.setAttribute('style', styles);\n\n if (click) this.currentScrollAmount = this.scrollActionAmount = amount;\n else this.scrollActionAmount = amount;\n }\n\n private moveTabToView(tabIndex: number) {\n if (!this.showArrows()) return;\n\n const tab = this.getTab(tabIndex).getBoundingClientRect();\n const amount = tab.x * -1;\n this.move(amount, true);\n }\n\n private setSelected(index: number) {\n this.selected = index;\n }\n\n private clickTab(index: number) {\n if (this.dragStop()) {\n return;\n }\n\n const { defaultPrevented } = this.selectedChange.emit(index);\n if (defaultPrevented) {\n return;\n }\n\n this.setSelected(index);\n this.moveTabToView(index);\n }\n\n private dragStart(element: HTMLIxTabItemElement, event: MouseEvent) {\n if (!this.showArrows()) return;\n if (event.button > 0) return;\n\n this.clickAction.timeout =\n this.clickAction.timeout === null\n ? setTimeout(() => (this.clickAction.isClick = false), 300)\n : null;\n\n const tabPositionX = parseFloat(window.getComputedStyle(element).left);\n const mousedownPositionX = event.clientX;\n const move = (event: MouseEvent) =>\n this.dragMove(event, tabPositionX, mousedownPositionX);\n\n window.addEventListener('mouseup', () => {\n window.removeEventListener('mousemove', move, false);\n this.dragStop();\n });\n window.addEventListener('mousemove', move, false);\n }\n\n private dragMove(event: MouseEvent, tabX: number, mousedownX: number) {\n this.move(event.clientX + tabX - mousedownX);\n }\n\n private dragStop() {\n clearTimeout(this.clickAction.timeout);\n this.clickAction.timeout = null;\n\n if (this.clickAction.isClick) return false;\n\n this.currentScrollAmount = this.scrollActionAmount;\n this.clickAction.isClick = true;\n\n return true;\n }\n\n componentDidRender() {\n const tabs = this.getTabs();\n this.totalItems = tabs.length;\n\n tabs.forEach((element, index) => {\n if (this.small) element.setAttribute('small', 'true');\n\n if (this.rounded) element.setAttribute('rounded', 'true');\n\n element.setAttribute('layout', this.layout);\n element.setAttribute(\n 'selected',\n index === this.selected ? 'true' : 'false'\n );\n element.setAttribute('placement', this.placement);\n });\n }\n\n componentWillRender() {\n requestAnimationFrame(() => {\n const showNextArrow = this.showNextArrow();\n const previousArrow = this.showPreviousArrow();\n this.styleNextArrow = this.getArrowStyle(showNextArrow);\n this.stylePreviousArrow = this.getArrowStyle(previousArrow);\n });\n }\n\n componentDidLoad() {\n const tabs = this.getTabs();\n tabs.forEach((element) => {\n element.addEventListener('mousedown', (event) =>\n this.dragStart(element, event)\n );\n });\n }\n\n @Listen('tabClick')\n onTabClick(event: CustomEvent) {\n if (event.defaultPrevented) {\n return;\n }\n\n const target = event.target;\n const tabs = this.getTabs();\n\n tabs.forEach((tab, index) => {\n if (!tab.disabled && tab === target) {\n this.clickTab(index);\n }\n });\n }\n\n render() {\n return (\n <Host>\n <div\n class=\"arrow\"\n style={this.stylePreviousArrow}\n onClick={() => this.move(this.scrollAmount, true)}\n >\n <ix-icon name={'chevron-left-small'}></ix-icon>\n </div>\n <div\n class={{\n 'tab-items': true,\n 'overflow-shadow': true,\n 'shadow-left': this.showPreviousArrow(),\n 'shadow-right': this.showNextArrow(),\n 'shadow-both': this.showNextArrow() && this.showPreviousArrow(),\n }}\n >\n <div class=\"items-content\">\n <slot></slot>\n </div>\n </div>\n <div\n class=\"arrow right\"\n style={this.styleNextArrow}\n onClick={() => this.move(-this.scrollAmount, true)}\n >\n <ix-icon name={'chevron-right-small'}></ix-icon>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,123 @@
1
+ import { T as TypedEvent } from './typed-event.js';
2
+
3
+ class ThemeSwitcher {
4
+ get themeChanged() {
5
+ return this._themeChanged;
6
+ }
7
+ hasVariantSuffix(className) {
8
+ return (className.endsWith(this.suffixDark) ||
9
+ className.endsWith(this.suffixLight));
10
+ }
11
+ isThemeClass(className) {
12
+ return (className.startsWith(this.prefixTheme) && this.hasVariantSuffix(className));
13
+ }
14
+ setTheme(themeName, systemAppearance = false) {
15
+ if (!this.isThemeClass(themeName) && systemAppearance === false) {
16
+ throw Error(`Provided theme name ${themeName} does not match our naming conventions. (theme-<name>-(dark,light))`);
17
+ }
18
+ if (systemAppearance) {
19
+ const currentSystemAppearance = getCurrentSystemAppearance();
20
+ this.replaceBodyThemeClass(themeName);
21
+ this.setVariant(currentSystemAppearance);
22
+ return;
23
+ }
24
+ this.replaceBodyThemeClass(themeName);
25
+ }
26
+ replaceBodyThemeClass(themeName) {
27
+ const oldThemes = [];
28
+ document.body.classList.forEach((className) => {
29
+ if (this.isThemeClass(className)) {
30
+ oldThemes.push(className);
31
+ }
32
+ });
33
+ document.body.classList.remove(...oldThemes);
34
+ document.body.classList.add(themeName);
35
+ }
36
+ toggleMode() {
37
+ const oldThemes = [];
38
+ document.body.classList.forEach((className) => {
39
+ if (this.isThemeClass(className)) {
40
+ oldThemes.push(className);
41
+ }
42
+ });
43
+ if (oldThemes.length === 0) {
44
+ document.body.classList.add(this.getOppositeMode(this.defaultTheme));
45
+ return;
46
+ }
47
+ oldThemes.forEach((themeName) => {
48
+ document.body.classList.replace(themeName, this.getOppositeMode(themeName));
49
+ });
50
+ }
51
+ getCurrentTheme() {
52
+ var _a;
53
+ return ((_a = Array.from(document.body.classList).find((className) => this.isThemeClass(className))) !== null && _a !== void 0 ? _a : `theme-${window
54
+ .getComputedStyle(document.body)
55
+ .getPropertyValue('--ix-theme-name')}`);
56
+ }
57
+ setVariant(variant = getCurrentSystemAppearance()) {
58
+ const currentTheme = this.getCurrentTheme();
59
+ document.body.classList.remove(currentTheme);
60
+ if (currentTheme.endsWith(this.suffixDark)) {
61
+ document.body.classList.add(currentTheme.replace(/-dark$/g, `-${variant}`));
62
+ }
63
+ if (currentTheme.endsWith(this.suffixLight)) {
64
+ document.body.classList.add(currentTheme.replace(/-light$/g, `-${variant}`));
65
+ }
66
+ }
67
+ getOppositeMode(themeName) {
68
+ if (themeName.endsWith(this.suffixDark)) {
69
+ return themeName.replace(/-dark$/g, this.suffixLight);
70
+ }
71
+ if (themeName.endsWith(this.suffixLight)) {
72
+ return themeName.replace(/-light$/g, this.suffixDark);
73
+ }
74
+ }
75
+ handleMutations(mutations) {
76
+ return mutations.forEach((mutation) => {
77
+ const { target } = mutation;
78
+ target.classList.forEach((className) => {
79
+ var _a;
80
+ if (this.isThemeClass(className) &&
81
+ !((_a = mutation.oldValue) === null || _a === void 0 ? void 0 : _a.includes(className))) {
82
+ this._themeChanged.emit(className);
83
+ }
84
+ });
85
+ });
86
+ }
87
+ registerMutationObserver() {
88
+ if (typeof window === 'undefined') {
89
+ return;
90
+ }
91
+ if (!('MutationObserver' in window)) {
92
+ console.warn('ThemeSwitcher not supported by your browser. Missing MutationObserver API');
93
+ return;
94
+ }
95
+ this.mutationObserver = new MutationObserver((mutations) => {
96
+ this.handleMutations(mutations);
97
+ });
98
+ this.mutationObserver.observe(document.body, {
99
+ attributeFilter: ['class'],
100
+ attributeOldValue: true,
101
+ });
102
+ }
103
+ constructor() {
104
+ this.prefixTheme = 'theme-';
105
+ this.suffixLight = '-light';
106
+ this.suffixDark = '-dark';
107
+ this.defaultTheme = 'theme-classic-dark';
108
+ this._themeChanged = new TypedEvent();
109
+ this.registerMutationObserver();
110
+ }
111
+ }
112
+ const getCurrentSystemAppearance = () => {
113
+ const matchMedia = window.matchMedia('(prefers-color-scheme: dark)');
114
+ if (matchMedia.matches) {
115
+ return 'dark';
116
+ }
117
+ return 'light';
118
+ };
119
+ const themeSwitcher = new ThemeSwitcher();
120
+
121
+ export { getCurrentSystemAppearance as g, themeSwitcher as t };
122
+
123
+ //# sourceMappingURL=theme-switcher.js.map
@@ -0,0 +1 @@
1
+ {"file":"theme-switcher.js","mappings":"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","names":[],"sources":["./src/components/utils/theme-switcher.ts"],"sourcesContent":["import { TypedEvent } from './typed-event';\n\nexport type ThemeVariant = 'light' | 'dark';\n\nclass ThemeSwitcher {\n readonly prefixTheme = 'theme-';\n readonly suffixLight = '-light';\n readonly suffixDark = '-dark';\n readonly defaultTheme = 'theme-classic-dark';\n\n mutationObserver: MutationObserver;\n _themeChanged = new TypedEvent<string>();\n\n public get themeChanged() {\n return this._themeChanged;\n }\n\n public hasVariantSuffix(className: string) {\n return (\n className.endsWith(this.suffixDark) ||\n className.endsWith(this.suffixLight)\n );\n }\n\n private isThemeClass(className: string) {\n return (\n className.startsWith(this.prefixTheme) && this.hasVariantSuffix(className)\n );\n }\n\n public setTheme(themeName: string, systemAppearance = false) {\n if (!this.isThemeClass(themeName) && systemAppearance === false) {\n throw Error(\n `Provided theme name ${themeName} does not match our naming conventions. (theme-<name>-(dark,light))`\n );\n }\n\n if (systemAppearance) {\n const currentSystemAppearance = getCurrentSystemAppearance();\n this.replaceBodyThemeClass(themeName);\n this.setVariant(currentSystemAppearance);\n return;\n }\n\n this.replaceBodyThemeClass(themeName);\n }\n\n private replaceBodyThemeClass(themeName: string) {\n const oldThemes: string[] = [];\n document.body.classList.forEach((className) => {\n if (this.isThemeClass(className)) {\n oldThemes.push(className);\n }\n });\n\n document.body.classList.remove(...oldThemes);\n document.body.classList.add(themeName);\n }\n\n public toggleMode() {\n const oldThemes: string[] = [];\n\n document.body.classList.forEach((className) => {\n if (this.isThemeClass(className)) {\n oldThemes.push(className);\n }\n });\n\n if (oldThemes.length === 0) {\n document.body.classList.add(this.getOppositeMode(this.defaultTheme));\n return;\n }\n\n oldThemes.forEach((themeName) => {\n document.body.classList.replace(\n themeName,\n this.getOppositeMode(themeName)\n );\n });\n }\n\n public getCurrentTheme() {\n return (\n Array.from(document.body.classList).find((className) =>\n this.isThemeClass(className)\n ) ??\n `theme-${window\n .getComputedStyle(document.body)\n .getPropertyValue('--ix-theme-name')}`\n );\n }\n\n public setVariant(variant: ThemeVariant = getCurrentSystemAppearance()) {\n const currentTheme = this.getCurrentTheme();\n document.body.classList.remove(currentTheme);\n\n if (currentTheme.endsWith(this.suffixDark)) {\n document.body.classList.add(\n currentTheme.replace(/-dark$/g, `-${variant}`)\n );\n }\n\n if (currentTheme.endsWith(this.suffixLight)) {\n document.body.classList.add(\n currentTheme.replace(/-light$/g, `-${variant}`)\n );\n }\n }\n\n private getOppositeMode(themeName: string) {\n if (themeName.endsWith(this.suffixDark)) {\n return themeName.replace(/-dark$/g, this.suffixLight);\n }\n\n if (themeName.endsWith(this.suffixLight)) {\n return themeName.replace(/-light$/g, this.suffixDark);\n }\n }\n\n private handleMutations(mutations: MutationRecord[]) {\n return mutations.forEach((mutation) => {\n const { target } = mutation;\n (target as HTMLElement).classList.forEach((className) => {\n if (\n this.isThemeClass(className) &&\n !mutation.oldValue?.includes(className)\n ) {\n this._themeChanged.emit(className);\n }\n });\n });\n }\n\n private registerMutationObserver() {\n if (typeof (window as any) === 'undefined') {\n return;\n }\n\n if (!('MutationObserver' in window)) {\n console.warn(\n 'ThemeSwitcher not supported by your browser. Missing MutationObserver API'\n );\n return;\n }\n\n this.mutationObserver = new MutationObserver((mutations) => {\n this.handleMutations(mutations);\n });\n\n this.mutationObserver.observe(document.body, {\n attributeFilter: ['class'],\n attributeOldValue: true,\n });\n }\n\n public constructor() {\n this.registerMutationObserver();\n }\n}\n\nexport type IxTheme =\n | 'classic'\n | 'classic-dark'\n | 'classic-light'\n | (string & {});\n\nexport const getCurrentSystemAppearance = (): ThemeVariant => {\n const matchMedia = window.matchMedia('(prefers-color-scheme: dark)');\n\n if (matchMedia.matches) {\n return 'dark';\n }\n\n return 'light';\n};\n\nexport const themeSwitcher = new ThemeSwitcher();\n"],"version":3}