udp-stencil-component-library 25.18.1-beta.5 → 25.18.1-beta.7

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 (302) hide show
  1. package/dist/cjs/add-map-feature-popup_4.cjs.entry.js +1 -1
  2. package/dist/cjs/advanced-search-builder.cjs.entry.js +1 -1
  3. package/dist/cjs/advanced-search_50.cjs.entry.js +249 -16
  4. package/dist/cjs/ag-grid-base_5.cjs.entry.js +2 -2
  5. package/dist/cjs/api-method-instance-grid.cjs.entry.js +1 -1
  6. package/dist/cjs/chart-container_3.cjs.entry.js +1 -1
  7. package/dist/cjs/check-box-group.cjs.entry.js +1 -1
  8. package/dist/cjs/check-box.cjs.entry.js +1 -1
  9. package/dist/cjs/chip-section.cjs.entry.js +3 -3
  10. package/dist/cjs/client-side-grid_2.cjs.entry.js +1 -1
  11. package/dist/cjs/color-preview.cjs.entry.js +2 -2
  12. package/dist/cjs/date-time-renderer_6.cjs.entry.js +1 -1
  13. package/dist/cjs/entity-maintenance-grid.cjs.entry.js +1 -1
  14. package/dist/cjs/feature-details-card_2.cjs.entry.js +1 -1
  15. package/dist/cjs/file-upload_2.cjs.entry.js +1 -1
  16. package/dist/cjs/filter-group_2.cjs.entry.js +1 -1
  17. package/dist/cjs/{get-user-CljYNKAA.js → get-user-DFb8yrQ2.js} +3 -3
  18. package/dist/cjs/{get-user-CljYNKAA.js.map → get-user-DFb8yrQ2.js.map} +1 -1
  19. package/dist/cjs/get-user.cjs.entry.js +2 -2
  20. package/dist/cjs/image-upload_7.cjs.entry.js +1 -1
  21. package/dist/cjs/{index-Ci0lUvCK.js → index-DrMNAZCL.js} +7 -3
  22. package/dist/cjs/index-DrMNAZCL.js.map +1 -0
  23. package/dist/cjs/index.cjs.js +3 -3
  24. package/dist/cjs/inputs-example.cjs.entry.js +3 -3
  25. package/dist/cjs/loader.cjs.js +2 -2
  26. package/dist/cjs/logical-search-indicator.cjs.entry.js +1 -1
  27. package/dist/cjs/map-component_2.cjs.entry.js +1 -1
  28. package/dist/cjs/numeric-field_5.cjs.entry.js +1 -1
  29. package/dist/cjs/page-renderer.cjs.entry.js +2 -2
  30. package/dist/cjs/question-configs-renderer_5.cjs.entry.js +1 -1
  31. package/dist/cjs/resource-timeline-calendar.cjs.entry.js +1 -1
  32. package/dist/cjs/search-method-grid.cjs.entry.js +1 -1
  33. package/dist/cjs/server-side-grid.cjs.entry.js +1 -1
  34. package/dist/cjs/simple-card.cjs.entry.js +1 -1
  35. package/dist/cjs/stencil-field.cjs.entry.js +1 -1
  36. package/dist/cjs/stencil-library.cjs.js +2 -2
  37. package/dist/cjs/test-api-updated.cjs.entry.js +1 -1
  38. package/dist/cjs/test-api.cjs.entry.js +1 -1
  39. package/dist/cjs/toggle-button.cjs.entry.js +1 -1
  40. package/dist/cjs/udp-adornment.cjs.entry.js +1 -1
  41. package/dist/cjs/udp-advanced-search-builder.cjs.entry.js +1 -1
  42. package/dist/cjs/udp-bar-chart_4.cjs.entry.js +1 -1
  43. package/dist/cjs/udp-calendar-base.cjs.entry.js +1 -1
  44. package/dist/cjs/udp-calendar-day.cjs.entry.js +1 -1
  45. package/dist/cjs/udp-calendar-month.cjs.entry.js +1 -1
  46. package/dist/cjs/udp-calendar-week.cjs.entry.js +1 -1
  47. package/dist/cjs/udp-calendar-year.cjs.entry.js +1 -1
  48. package/dist/cjs/udp-card-action-area.cjs.entry.js +1 -1
  49. package/dist/cjs/udp-card.udp-card-actions.udp-card-content.udp-card-header.udp-card-media.udp-link.entry.cjs.js.map +1 -1
  50. package/dist/cjs/udp-card_6.cjs.entry.js +8 -11
  51. package/dist/cjs/udp-charts-example.cjs.entry.js +1 -1
  52. package/dist/cjs/udp-chip_3.cjs.entry.js +1 -1
  53. package/dist/cjs/udp-container-query-grid-item.cjs.entry.js +1 -1
  54. package/dist/cjs/udp-container-query-grid.cjs.entry.js +1 -1
  55. package/dist/cjs/udp-container-query.cjs.entry.js +1 -1
  56. package/dist/cjs/udp-container.cjs.entry.js +1 -1
  57. package/dist/cjs/udp-date-range-selector.cjs.entry.js +1 -1
  58. package/dist/cjs/udp-dynamic-form.cjs.entry.js +1 -1
  59. package/dist/cjs/udp-empty-state-display.cjs.entry.js +1 -1
  60. package/dist/cjs/{udp-fetch-Bw6LGKaF.js → udp-fetch-C9800dwI.js} +3 -3
  61. package/dist/cjs/{udp-fetch-Bw6LGKaF.js.map → udp-fetch-C9800dwI.js.map} +1 -1
  62. package/dist/cjs/udp-fetch.cjs.entry.js +2 -2
  63. package/dist/cjs/udp-forms-builder.cjs.entry.js +1 -1
  64. package/dist/cjs/udp-forms-follow-up-list-card.cjs.entry.js +1 -1
  65. package/dist/cjs/udp-forms-list-card.cjs.entry.js +1 -1
  66. package/dist/cjs/udp-forms-list.cjs.entry.js +1 -1
  67. package/dist/cjs/udp-forms-renderer.cjs.entry.js +1 -1
  68. package/dist/cjs/udp-forms-ui.cjs.entry.js +1 -1
  69. package/dist/cjs/udp-list-renderer_3.cjs.entry.js +1 -1
  70. package/dist/cjs/udp-map.cjs.entry.js +1 -1
  71. package/dist/cjs/udp-page.cjs.entry.js +1 -1
  72. package/dist/cjs/udp-sankey-chart.cjs.entry.js +1 -1
  73. package/dist/cjs/udp-split-screen.cjs.entry.js +1 -1
  74. package/dist/cjs/udp-stepper-demo.cjs.entry.js +1 -1
  75. package/dist/cjs/udp-stepper.cjs.entry.js +1 -1
  76. package/dist/cjs/udp-tab-panel.cjs.entry.js +22 -0
  77. package/dist/cjs/udp-tab-panel.entry.cjs.js.map +1 -0
  78. package/dist/cjs/udp-user-creator.cjs.entry.js +1 -1
  79. package/dist/cjs/udp-vertical-spacer.cjs.entry.js +1 -1
  80. package/dist/cjs/udp-xy-chart.cjs.entry.js +1 -1
  81. package/dist/cjs/udp-xy-multi-series-chart.cjs.entry.js +1 -1
  82. package/dist/collection/collection-manifest.json +1 -0
  83. package/dist/collection/components/my-component/UI/data-display/cards/udp-card/udp-card.css +5 -9
  84. package/dist/collection/components/my-component/UI/data-display/cards/udp-card/udp-card.js +8 -12
  85. package/dist/collection/components/my-component/UI/data-display/cards/udp-card/udp-card.js.map +1 -1
  86. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.css +181 -43
  87. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.js +335 -4
  88. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.js.map +1 -1
  89. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.css +2 -4
  90. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.js +116 -14
  91. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.js.map +1 -1
  92. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.css +11 -0
  93. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.js +65 -0
  94. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.js.map +1 -0
  95. package/dist/collection/components/my-component/UI/toolbars/app-bar/app-bar.js +1 -1
  96. package/dist/collection/components/my-component/UI/util/ghost-render/ghost-render.js +1 -1
  97. package/dist/collection/components/my-component/demo/ambient-demo-container.js +1 -1
  98. package/dist/collection/components/test-component/inputs-example/inputs-example.js +2 -2
  99. package/dist/collection/page-renderer/page-renderer.js +1 -1
  100. package/dist/collection/theme/color-preview/color-preview.js +1 -1
  101. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/chip-section/chip-section.js +2 -2
  102. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/udp-dynamic-container-with-menu.js +1 -1
  103. package/dist/components/ambient-demo-container2.js +1 -1
  104. package/dist/components/app-bar2.js +1 -1
  105. package/dist/components/chip-section.js +2 -2
  106. package/dist/components/color-preview.js +1 -1
  107. package/dist/components/ghost-render2.js +1 -1
  108. package/dist/components/index2.js +1 -1
  109. package/dist/components/index2.js.map +1 -1
  110. package/dist/components/inputs-example.js +2 -2
  111. package/dist/components/page-renderer.js +1 -1
  112. package/dist/components/primary-action-header2.js +14 -9
  113. package/dist/components/primary-action-header2.js.map +1 -1
  114. package/dist/components/udp-card2.js +7 -10
  115. package/dist/components/udp-card2.js.map +1 -1
  116. package/dist/components/udp-dynamic-container-with-menu2.js +1 -1
  117. package/dist/components/udp-icon2.js +176 -2
  118. package/dist/components/udp-icon2.js.map +1 -1
  119. package/dist/components/udp-tab-panel.d.ts +11 -0
  120. package/dist/components/udp-tab-panel.js +45 -0
  121. package/dist/components/udp-tab-panel.js.map +1 -0
  122. package/dist/components/udp-tab2.js +28 -12
  123. package/dist/components/udp-tab2.js.map +1 -1
  124. package/dist/components/udp-tabs2.js +246 -8
  125. package/dist/components/udp-tabs2.js.map +1 -1
  126. package/dist/docs.json +350 -22
  127. package/dist/esm/add-map-feature-popup_4.entry.js +1 -1
  128. package/dist/esm/advanced-search-builder.entry.js +1 -1
  129. package/dist/esm/advanced-search_50.entry.js +249 -16
  130. package/dist/esm/ag-grid-base_5.entry.js +2 -2
  131. package/dist/esm/api-method-instance-grid.entry.js +1 -1
  132. package/dist/esm/chart-container_3.entry.js +1 -1
  133. package/dist/esm/check-box-group.entry.js +1 -1
  134. package/dist/esm/check-box.entry.js +1 -1
  135. package/dist/esm/chip-section.entry.js +3 -3
  136. package/dist/esm/client-side-grid_2.entry.js +1 -1
  137. package/dist/esm/color-preview.entry.js +2 -2
  138. package/dist/esm/date-time-renderer_6.entry.js +1 -1
  139. package/dist/esm/entity-maintenance-grid.entry.js +1 -1
  140. package/dist/esm/feature-details-card_2.entry.js +1 -1
  141. package/dist/esm/file-upload_2.entry.js +1 -1
  142. package/dist/esm/filter-group_2.entry.js +1 -1
  143. package/dist/esm/{get-user-BRZVzzgG.js → get-user-BtNVBI86.js} +3 -3
  144. package/dist/esm/{get-user-BRZVzzgG.js.map → get-user-BtNVBI86.js.map} +1 -1
  145. package/dist/esm/get-user.entry.js +2 -2
  146. package/dist/esm/image-upload_7.entry.js +1 -1
  147. package/dist/esm/{index-DsqSxziV.js → index-n-1ZSeAs.js} +7 -3
  148. package/dist/esm/index-n-1ZSeAs.js.map +1 -0
  149. package/dist/esm/index.js +3 -3
  150. package/dist/esm/inputs-example.entry.js +3 -3
  151. package/dist/esm/loader.js +3 -3
  152. package/dist/esm/logical-search-indicator.entry.js +1 -1
  153. package/dist/esm/map-component_2.entry.js +1 -1
  154. package/dist/esm/numeric-field_5.entry.js +1 -1
  155. package/dist/esm/page-renderer.entry.js +2 -2
  156. package/dist/esm/question-configs-renderer_5.entry.js +1 -1
  157. package/dist/esm/resource-timeline-calendar.entry.js +1 -1
  158. package/dist/esm/search-method-grid.entry.js +1 -1
  159. package/dist/esm/server-side-grid.entry.js +1 -1
  160. package/dist/esm/simple-card.entry.js +1 -1
  161. package/dist/esm/stencil-field.entry.js +1 -1
  162. package/dist/esm/stencil-library.js +3 -3
  163. package/dist/esm/test-api-updated.entry.js +1 -1
  164. package/dist/esm/test-api.entry.js +1 -1
  165. package/dist/esm/toggle-button.entry.js +1 -1
  166. package/dist/esm/udp-adornment.entry.js +1 -1
  167. package/dist/esm/udp-advanced-search-builder.entry.js +1 -1
  168. package/dist/esm/udp-bar-chart_4.entry.js +1 -1
  169. package/dist/esm/udp-calendar-base.entry.js +1 -1
  170. package/dist/esm/udp-calendar-day.entry.js +1 -1
  171. package/dist/esm/udp-calendar-month.entry.js +1 -1
  172. package/dist/esm/udp-calendar-week.entry.js +1 -1
  173. package/dist/esm/udp-calendar-year.entry.js +1 -1
  174. package/dist/esm/udp-card-action-area.entry.js +1 -1
  175. package/dist/esm/udp-card.udp-card-actions.udp-card-content.udp-card-header.udp-card-media.udp-link.entry.js.map +1 -1
  176. package/dist/esm/udp-card_6.entry.js +8 -11
  177. package/dist/esm/udp-charts-example.entry.js +1 -1
  178. package/dist/esm/udp-chip_3.entry.js +1 -1
  179. package/dist/esm/udp-container-query-grid-item.entry.js +1 -1
  180. package/dist/esm/udp-container-query-grid.entry.js +1 -1
  181. package/dist/esm/udp-container-query.entry.js +1 -1
  182. package/dist/esm/udp-container.entry.js +1 -1
  183. package/dist/esm/udp-date-range-selector.entry.js +1 -1
  184. package/dist/esm/udp-dynamic-form.entry.js +1 -1
  185. package/dist/esm/udp-empty-state-display.entry.js +1 -1
  186. package/dist/esm/{udp-fetch-BZFtuXQx.js → udp-fetch-BGMJ3xhH.js} +3 -3
  187. package/dist/{stencil-library/udp-fetch-BZFtuXQx.js.map → esm/udp-fetch-BGMJ3xhH.js.map} +1 -1
  188. package/dist/esm/udp-fetch.entry.js +2 -2
  189. package/dist/esm/udp-forms-builder.entry.js +1 -1
  190. package/dist/esm/udp-forms-follow-up-list-card.entry.js +1 -1
  191. package/dist/esm/udp-forms-list-card.entry.js +1 -1
  192. package/dist/esm/udp-forms-list.entry.js +1 -1
  193. package/dist/esm/udp-forms-renderer.entry.js +1 -1
  194. package/dist/esm/udp-forms-ui.entry.js +1 -1
  195. package/dist/esm/udp-list-renderer_3.entry.js +1 -1
  196. package/dist/esm/udp-map.entry.js +1 -1
  197. package/dist/esm/udp-page.entry.js +1 -1
  198. package/dist/esm/udp-sankey-chart.entry.js +1 -1
  199. package/dist/esm/udp-split-screen.entry.js +1 -1
  200. package/dist/esm/udp-stepper-demo.entry.js +1 -1
  201. package/dist/esm/udp-stepper.entry.js +1 -1
  202. package/dist/esm/udp-tab-panel.entry.js +20 -0
  203. package/dist/esm/udp-tab-panel.entry.js.map +1 -0
  204. package/dist/esm/udp-user-creator.entry.js +1 -1
  205. package/dist/esm/udp-vertical-spacer.entry.js +1 -1
  206. package/dist/esm/udp-xy-chart.entry.js +1 -1
  207. package/dist/esm/udp-xy-multi-series-chart.entry.js +1 -1
  208. package/dist/stencil-library/add-map-feature-popup_4.entry.js +1 -1
  209. package/dist/stencil-library/advanced-search-builder.entry.js +1 -1
  210. package/dist/stencil-library/advanced-search_50.entry.js +1 -1
  211. package/dist/stencil-library/advanced-search_50.entry.js.map +1 -1
  212. package/dist/stencil-library/ag-grid-base_5.entry.js +1 -1
  213. package/dist/stencil-library/api-method-instance-grid.entry.js +1 -1
  214. package/dist/stencil-library/chart-container_3.entry.js +1 -1
  215. package/dist/stencil-library/check-box-group.entry.js +1 -1
  216. package/dist/stencil-library/check-box.entry.js +1 -1
  217. package/dist/stencil-library/chip-section.entry.js +1 -1
  218. package/dist/stencil-library/client-side-grid_2.entry.js +1 -1
  219. package/dist/stencil-library/color-preview.entry.js +1 -1
  220. package/dist/stencil-library/date-time-renderer_6.entry.js +1 -1
  221. package/dist/stencil-library/entity-maintenance-grid.entry.js +1 -1
  222. package/dist/stencil-library/feature-details-card_2.entry.js +1 -1
  223. package/dist/stencil-library/file-upload_2.entry.js +1 -1
  224. package/dist/stencil-library/filter-group_2.entry.js +1 -1
  225. package/dist/stencil-library/{get-user-BRZVzzgG.js → get-user-BtNVBI86.js} +2 -2
  226. package/dist/stencil-library/{get-user-BRZVzzgG.js.map → get-user-BtNVBI86.js.map} +1 -1
  227. package/dist/stencil-library/get-user.entry.js +1 -1
  228. package/dist/stencil-library/image-upload_7.entry.js +1 -1
  229. package/dist/stencil-library/index-n-1ZSeAs.js +3 -0
  230. package/dist/stencil-library/index-n-1ZSeAs.js.map +1 -0
  231. package/dist/stencil-library/index.esm.js +1 -1
  232. package/dist/stencil-library/inputs-example.entry.js +1 -1
  233. package/dist/stencil-library/logical-search-indicator.entry.js +1 -1
  234. package/dist/stencil-library/map-component_2.entry.js +1 -1
  235. package/dist/stencil-library/numeric-field_5.entry.js +1 -1
  236. package/dist/stencil-library/page-renderer.entry.js +1 -1
  237. package/dist/stencil-library/question-configs-renderer_5.entry.js +1 -1
  238. package/dist/stencil-library/resource-timeline-calendar.entry.js +1 -1
  239. package/dist/stencil-library/search-method-grid.entry.js +1 -1
  240. package/dist/stencil-library/server-side-grid.entry.js +1 -1
  241. package/dist/stencil-library/simple-card.entry.js +1 -1
  242. package/dist/stencil-library/stencil-field.entry.js +1 -1
  243. package/dist/stencil-library/stencil-library.css +1 -1
  244. package/dist/stencil-library/stencil-library.esm.js +1 -1
  245. package/dist/stencil-library/test-api-updated.entry.js +1 -1
  246. package/dist/stencil-library/test-api.entry.js +1 -1
  247. package/dist/stencil-library/toggle-button.entry.js +1 -1
  248. package/dist/stencil-library/udp-adornment.entry.js +1 -1
  249. package/dist/stencil-library/udp-advanced-search-builder.entry.js +1 -1
  250. package/dist/stencil-library/udp-bar-chart_4.entry.js +1 -1
  251. package/dist/stencil-library/udp-calendar-base.entry.js +1 -1
  252. package/dist/stencil-library/udp-calendar-day.entry.js +1 -1
  253. package/dist/stencil-library/udp-calendar-month.entry.js +1 -1
  254. package/dist/stencil-library/udp-calendar-week.entry.js +1 -1
  255. package/dist/stencil-library/udp-calendar-year.entry.js +1 -1
  256. package/dist/stencil-library/udp-card-action-area.entry.js +1 -1
  257. package/dist/stencil-library/udp-card.udp-card-actions.udp-card-content.udp-card-header.udp-card-media.udp-link.entry.esm.js.map +1 -1
  258. package/dist/stencil-library/udp-card_6.entry.js +1 -1
  259. package/dist/stencil-library/udp-card_6.entry.js.map +1 -1
  260. package/dist/stencil-library/udp-charts-example.entry.js +1 -1
  261. package/dist/stencil-library/udp-chip_3.entry.js +1 -1
  262. package/dist/stencil-library/udp-container-query-grid-item.entry.js +1 -1
  263. package/dist/stencil-library/udp-container-query-grid.entry.js +1 -1
  264. package/dist/stencil-library/udp-container-query.entry.js +1 -1
  265. package/dist/stencil-library/udp-container.entry.js +1 -1
  266. package/dist/stencil-library/udp-date-range-selector.entry.js +1 -1
  267. package/dist/stencil-library/udp-dynamic-form.entry.js +1 -1
  268. package/dist/stencil-library/udp-empty-state-display.entry.js +1 -1
  269. package/dist/stencil-library/{udp-fetch-BZFtuXQx.js → udp-fetch-BGMJ3xhH.js} +2 -2
  270. package/dist/{esm/udp-fetch-BZFtuXQx.js.map → stencil-library/udp-fetch-BGMJ3xhH.js.map} +1 -1
  271. package/dist/stencil-library/udp-fetch.entry.js +1 -1
  272. package/dist/stencil-library/udp-forms-builder.entry.js +1 -1
  273. package/dist/stencil-library/udp-forms-follow-up-list-card.entry.js +1 -1
  274. package/dist/stencil-library/udp-forms-list-card.entry.js +1 -1
  275. package/dist/stencil-library/udp-forms-list.entry.js +1 -1
  276. package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
  277. package/dist/stencil-library/udp-forms-ui.entry.js +1 -1
  278. package/dist/stencil-library/udp-list-renderer_3.entry.js +1 -1
  279. package/dist/stencil-library/udp-map.entry.js +1 -1
  280. package/dist/stencil-library/udp-page.entry.js +1 -1
  281. package/dist/stencil-library/udp-sankey-chart.entry.js +1 -1
  282. package/dist/stencil-library/udp-split-screen.entry.js +1 -1
  283. package/dist/stencil-library/udp-stepper-demo.entry.js +1 -1
  284. package/dist/stencil-library/udp-stepper.entry.js +1 -1
  285. package/dist/stencil-library/udp-tab-panel.entry.esm.js.map +1 -0
  286. package/dist/stencil-library/udp-tab-panel.entry.js +2 -0
  287. package/dist/stencil-library/udp-tab-panel.entry.js.map +1 -0
  288. package/dist/stencil-library/udp-user-creator.entry.js +1 -1
  289. package/dist/stencil-library/udp-vertical-spacer.entry.js +1 -1
  290. package/dist/stencil-library/udp-xy-chart.entry.js +1 -1
  291. package/dist/stencil-library/udp-xy-multi-series-chart.entry.js +1 -1
  292. package/dist/types/components/my-component/UI/tabs/tab/tabs/udp-tabs.d.ts +82 -2
  293. package/dist/types/components/my-component/UI/tabs/tab/udp-tab.d.ts +27 -2
  294. package/dist/types/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.d.ts +11 -0
  295. package/dist/types/components.d.ts +132 -6
  296. package/package.json +1 -1
  297. package/dist/cjs/index-Ci0lUvCK.js.map +0 -1
  298. package/dist/components/iconMapping.js +0 -180
  299. package/dist/components/iconMapping.js.map +0 -1
  300. package/dist/esm/index-DsqSxziV.js.map +0 -1
  301. package/dist/stencil-library/index-DsqSxziV.js +0 -3
  302. package/dist/stencil-library/index-DsqSxziV.js.map +0 -1
@@ -1,15 +1,227 @@
1
1
  import { h } from "@stencil/core";
2
2
  export class UdpTabs {
3
3
  constructor() {
4
- this.activeTab = 0;
4
+ /**
5
+ * Specifies the layout variant of the tab header.
6
+ *
7
+ * - `'standard'`: Tabs will be sized based on their content.
8
+ * - `'fill'`: Tabs will stretch to fill the available horizontal space.
9
+ */
10
+ this.variant = 'fill';
11
+ /**
12
+ * (Optional) An array of tab configuration objects.
13
+ * If provided, this will be used to render tabs instead of slotted `<udp-tab>` components.
14
+ * This mode is typically used with controlled tabs.
15
+ */
16
+ this.tabs = [];
17
+ this.internalActiveTab = 0; // For uncontrolled mode
18
+ this.tabDetails = []; // Unified details from prop or slot
19
+ this.sliderStyle = {
20
+ width: '0',
21
+ transform: 'translateX(0)',
22
+ };
23
+ this.showScrollLeft = false;
24
+ this.showScrollRight = false;
25
+ this.slottedTabs = []; // Renamed from `tabs`
26
+ this.buttonRefs = [];
27
+ }
28
+ /**
29
+ * Returns true if the component is in controlled mode.
30
+ */
31
+ get isControlled() {
32
+ return this.value != null;
33
+ }
34
+ /**
35
+ * Returns true if tabs are being provided by the `tabs` prop.
36
+ */
37
+ get useTabsProp() {
38
+ return this.tabs && this.tabs.length > 0;
39
+ }
40
+ /**
41
+ * Returns the currently active tab index,
42
+ * respecting controlled or uncontrolled mode.
43
+ */
44
+ get activeTab() {
45
+ return this.isControlled ? this.value : this.internalActiveTab;
46
+ }
47
+ handleSlotChange() {
48
+ // If we're using the tabs prop, slot changes are irrelevant
49
+ if (this.useTabsProp)
50
+ return;
51
+ this.initializeTabs();
52
+ }
53
+ handleResize() {
54
+ requestAnimationFrame(() => {
55
+ this.updateSliderPosition();
56
+ this.checkScroll();
57
+ });
58
+ }
59
+ componentDidLoad() {
60
+ this.initializeTabs();
61
+ }
62
+ /**
63
+ * Watcher for uncontrolled state changes.
64
+ */
65
+ onActiveTabChange(newValue) {
66
+ this.updateActiveTabs();
67
+ this.updateSliderPosition();
68
+ this.scrollTabIntoView(newValue);
69
+ }
70
+ /**
71
+ * Watcher for controlled state changes.
72
+ */
73
+ onValueChange(newValue) {
74
+ this.updateActiveTabs();
75
+ this.updateSliderPosition();
76
+ this.scrollTabIntoView(newValue);
77
+ }
78
+ /**
79
+ * Watcher for tabs prop changes.
80
+ */
81
+ onTabsPropChange() {
82
+ this.initializeTabs();
83
+ }
84
+ onVariantChange() {
85
+ requestAnimationFrame(() => {
86
+ this.updateSliderPosition();
87
+ this.checkScroll();
88
+ });
89
+ }
90
+ initializeTabs() {
91
+ var _a, _b;
92
+ this.buttonRefs = [];
93
+ if (this.useTabsProp) {
94
+ // --- Prop-based ---
95
+ this.tabDetails = this.tabs.map(t => (Object.assign({}, t))); // Use data from prop
96
+ this.slottedTabs = []; // Ensure we're not tracking slotted tabs
97
+ }
98
+ else {
99
+ // --- Slot-based ---
100
+ this.slottedTabs = Array.from(this.el.children).filter((child) => child.tagName.toLowerCase() === 'udp-tab');
101
+ this.tabDetails = this.slottedTabs.map(tab => ({
102
+ label: tab.label,
103
+ icon: tab.icon,
104
+ iconPlacement: tab.iconPlacement,
105
+ hidden: tab.hidden,
106
+ disabled: tab.disabled,
107
+ }));
108
+ }
109
+ // --- Common Logic ---
110
+ // In uncontrolled mode, check if the default active tab is invalid.
111
+ if (!this.isControlled) {
112
+ if (((_a = this.tabDetails[this.internalActiveTab]) === null || _a === void 0 ? void 0 : _a.hidden) || ((_b = this.tabDetails[this.internalActiveTab]) === null || _b === void 0 ? void 0 : _b.disabled)) {
113
+ const firstValidIndex = this.tabDetails.findIndex(tab => !tab.hidden && !tab.disabled);
114
+ this.internalActiveTab = firstValidIndex > -1 ? firstValidIndex : 0;
115
+ }
116
+ }
117
+ this.updateActiveTabs();
118
+ requestAnimationFrame(() => {
119
+ this.updateSliderPosition();
120
+ this.checkScroll();
121
+ });
122
+ }
123
+ updateActiveTabs() {
124
+ // Only update slotted tabs if we're in slot mode
125
+ if (!this.useTabsProp) {
126
+ const currentActiveTab = this.activeTab;
127
+ this.slottedTabs.forEach((tab, index) => {
128
+ tab.active = index === currentActiveTab;
129
+ });
130
+ }
131
+ // If in prop mode, the <button> 'active' class is handled by render()
132
+ }
133
+ updateSliderPosition() {
134
+ const activeButton = this.buttonRefs[this.activeTab]; // Use getter
135
+ if (!activeButton) {
136
+ this.sliderStyle = { width: '0px', transform: 'translateX(0px)' };
137
+ return;
138
+ }
139
+ this.sliderStyle = {
140
+ width: `${activeButton.offsetWidth}px`,
141
+ transform: `translateX(${activeButton.offsetLeft}px)`,
142
+ };
143
+ }
144
+ checkScroll() {
145
+ if (!this.scrollContainerRef)
146
+ return;
147
+ const { scrollLeft, scrollWidth, clientWidth } = this.scrollContainerRef;
148
+ const isOverflowing = scrollWidth > clientWidth;
149
+ this.showScrollLeft = isOverflowing && scrollLeft > 1;
150
+ this.showScrollRight = isOverflowing && scrollLeft < scrollWidth - clientWidth - 1;
5
151
  }
6
152
  tabClicked(tabIndex) {
7
- this.activeTab = tabIndex;
153
+ var _a;
154
+ if ((_a = this.tabDetails[tabIndex]) === null || _a === void 0 ? void 0 : _a.disabled) {
155
+ return;
156
+ }
157
+ if (this.isControlled) {
158
+ // In controlled mode, emit the event for the parent to handle.
159
+ // The `onValueChange` watcher will handle UI updates when the prop changes.
160
+ this.udpTabChange.emit(tabIndex);
161
+ }
162
+ else {
163
+ // In uncontrolled mode, update state directly.
164
+ // The `onActiveTabChange` watcher will handle UI updates.
165
+ this.internalActiveTab = tabIndex;
166
+ }
167
+ }
168
+ scrollTabIntoView(tabIndex) {
169
+ const tabButton = this.buttonRefs[tabIndex];
170
+ const container = this.scrollContainerRef;
171
+ if (!tabButton || !container)
172
+ return;
173
+ const { scrollLeft, clientWidth } = container;
174
+ const tabLeft = tabButton.offsetLeft;
175
+ const tabRight = tabLeft + tabButton.offsetWidth;
176
+ const safeZonePadding = 70;
177
+ const safeZoneLeft = scrollLeft + safeZonePadding;
178
+ const safeZoneRight = scrollLeft + clientWidth - safeZonePadding;
179
+ if (tabLeft < safeZoneLeft) {
180
+ container.scrollTo({
181
+ left: tabLeft - safeZonePadding,
182
+ behavior: 'smooth',
183
+ });
184
+ }
185
+ else if (tabRight > safeZoneRight) {
186
+ container.scrollTo({
187
+ left: tabRight - clientWidth + safeZonePadding,
188
+ behavior: 'smooth',
189
+ });
190
+ }
191
+ }
192
+ scrollToStart() {
193
+ if (!this.scrollContainerRef)
194
+ return;
195
+ this.scrollContainerRef.scrollTo({ left: 0, behavior: 'smooth' });
196
+ }
197
+ scrollToEnd() {
198
+ if (!this.scrollContainerRef)
199
+ return;
200
+ const container = this.scrollContainerRef;
201
+ const { scrollWidth, clientWidth } = container;
202
+ const maxScrollLeft = scrollWidth - clientWidth;
203
+ container.scrollTo({ left: maxScrollLeft, behavior: 'smooth' });
8
204
  }
9
205
  render() {
10
- return (h("div", { key: '11b569eb074151f849159aa15af92129c8992929' }, h("div", { key: '3c6d9178dd37fd5fd5b91ec44e287241ee256e1c', class: "tab-header" }, h("slot", { key: 'e9289d5d3fa6e2da92b81de71e55276b3455f37c', name: "tab-title" })), h("div", { key: 'ed2038f48697251f5dfd3856d26711313376af10' }, h("slot", { key: '2b6d109cef169e2f50fb876387efc334464dc9da' }))));
206
+ const currentActiveTab = this.activeTab; // Use getter
207
+ return (h("div", { key: 'dd8ac7e3d101993b8df00c97bf561e2502e9f3c1', class: "tab-container" }, h("div", { key: '5f70a5c0da906152b130f6eaa98b81bf80485920', class: `tab-header ${this.variant}` }, this.showScrollLeft && (h("button", { key: 'e1a3a7d3650ae3703734a51b251600bf12dbed0c', class: "scroll-arrow left", onClick: () => this.scrollToStart(), "aria-label": "Scroll to first tab" }, h("udp-icon", { key: '36e6294b1a775a30906cc0236f8104ad03998c01', iconName: "chevronLeft16", color: "inherit" }))), this.showScrollLeft && h("div", { key: '8dca0bd111f13c1890fbc010efbabb2aa0440c13', class: "scroll-fade left" }), h("div", { key: '966f761c7f3cc45eb5b6737e8dbb63dc75a68325', class: "tab-scroll-container", ref: el => (this.scrollContainerRef = el), onScroll: () => this.checkScroll() }, this.tabDetails.map((tab, index) => {
208
+ if (tab.hidden) {
209
+ return null;
210
+ }
211
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
212
+ const iconEl = tab.icon ? h("udp-icon", { iconName: tab.icon, color: 'inherit' }) : null;
213
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
214
+ const labelEl = h("span", null, tab.label);
215
+ return (h("button", { class: {
216
+ 'active': index === currentActiveTab,
217
+ 'has-icon': !!tab.icon,
218
+ [`icon-${tab.iconPlacement}`]: !!tab.icon,
219
+ 'disabled': tab.disabled,
220
+ }, disabled: tab.disabled, onClick: () => this.tabClicked(index), role: "tab", "aria-selected": index === currentActiveTab ? 'true' : 'false', "aria-disabled": tab.disabled ? 'true' : 'false', ref: el => (this.buttonRefs[index] = el) }, iconEl, labelEl));
221
+ }), h("div", { key: 'df383b17c3e36fc7f261ff6a6c1220a4f923477f', class: "slider", style: this.sliderStyle })), this.showScrollRight && h("div", { key: '7f8ae28f6662266a113adbb7ca40a4ef7d0b8427', class: "scroll-fade right" }), this.showScrollRight && (h("button", { key: '0ad034fb7dc24388476e0c37bc9cf4196f4145bc', class: "scroll-arrow right", onClick: () => this.scrollToEnd(), "aria-label": "Scroll to last tab" }, h("udp-icon", { key: '4cdbf5880b2e30dc6541228323a31e2dd34eabae', iconName: "chevronRight16", color: "inherit" })))), !this.isControlled && !this.useTabsProp && (h("div", { key: '2097c674562eb5acfdadda5a05e6f2eed8821f99' }, h("slot", { key: '375c96eb85f6581426f72bf1c544538df4c6fdd6' })))));
11
222
  }
12
223
  static get is() { return "udp-tabs"; }
224
+ static get encapsulation() { return "shadow"; }
13
225
  static get originalStyleUrls() {
14
226
  return {
15
227
  "$": ["udp-tabs.css"]
@@ -20,10 +232,129 @@ export class UdpTabs {
20
232
  "$": ["udp-tabs.css"]
21
233
  };
22
234
  }
235
+ static get properties() {
236
+ return {
237
+ "variant": {
238
+ "type": "string",
239
+ "mutable": false,
240
+ "complexType": {
241
+ "original": "'fill' | 'standard'",
242
+ "resolved": "\"fill\" | \"standard\"",
243
+ "references": {}
244
+ },
245
+ "required": false,
246
+ "optional": false,
247
+ "docs": {
248
+ "tags": [],
249
+ "text": "Specifies the layout variant of the tab header.\n\n- `'standard'`: Tabs will be sized based on their content.\n- `'fill'`: Tabs will stretch to fill the available horizontal space."
250
+ },
251
+ "getter": false,
252
+ "setter": false,
253
+ "reflect": false,
254
+ "attribute": "variant",
255
+ "defaultValue": "'fill'"
256
+ },
257
+ "value": {
258
+ "type": "number",
259
+ "mutable": false,
260
+ "complexType": {
261
+ "original": "number",
262
+ "resolved": "number",
263
+ "references": {}
264
+ },
265
+ "required": false,
266
+ "optional": true,
267
+ "docs": {
268
+ "tags": [],
269
+ "text": "(Controlled) The index of the currently active tab.\nIf this prop is provided, the component will be in \"controlled\" mode.\nThe parent must listen for `udpTabChange` to update this value."
270
+ },
271
+ "getter": false,
272
+ "setter": false,
273
+ "reflect": false,
274
+ "attribute": "value"
275
+ },
276
+ "tabs": {
277
+ "type": "unknown",
278
+ "mutable": false,
279
+ "complexType": {
280
+ "original": "TabDetail[]",
281
+ "resolved": "TabDetail[]",
282
+ "references": {
283
+ "TabDetail": {
284
+ "location": "global",
285
+ "id": "global::TabDetail"
286
+ }
287
+ }
288
+ },
289
+ "required": false,
290
+ "optional": false,
291
+ "docs": {
292
+ "tags": [],
293
+ "text": "(Optional) An array of tab configuration objects.\nIf provided, this will be used to render tabs instead of slotted `<udp-tab>` components.\nThis mode is typically used with controlled tabs."
294
+ },
295
+ "getter": false,
296
+ "setter": false,
297
+ "defaultValue": "[]"
298
+ }
299
+ };
300
+ }
23
301
  static get states() {
24
302
  return {
25
- "activeTab": {}
303
+ "internalActiveTab": {},
304
+ "tabDetails": {},
305
+ "sliderStyle": {},
306
+ "showScrollLeft": {},
307
+ "showScrollRight": {}
26
308
  };
27
309
  }
310
+ static get events() {
311
+ return [{
312
+ "method": "udpTabChange",
313
+ "name": "udpTabChange",
314
+ "bubbles": true,
315
+ "cancelable": true,
316
+ "composed": true,
317
+ "docs": {
318
+ "tags": [],
319
+ "text": "(Controlled) Emits the index of the tab that was clicked.\nThis is only emitted in \"controlled\" mode (when `value` is provided)."
320
+ },
321
+ "complexType": {
322
+ "original": "number",
323
+ "resolved": "number",
324
+ "references": {}
325
+ }
326
+ }];
327
+ }
328
+ static get elementRef() { return "el"; }
329
+ static get watchers() {
330
+ return [{
331
+ "propName": "internalActiveTab",
332
+ "methodName": "onActiveTabChange"
333
+ }, {
334
+ "propName": "value",
335
+ "methodName": "onValueChange"
336
+ }, {
337
+ "propName": "tabs",
338
+ "methodName": "onTabsPropChange"
339
+ }, {
340
+ "propName": "variant",
341
+ "methodName": "onVariantChange"
342
+ }];
343
+ }
344
+ static get listeners() {
345
+ return [{
346
+ "name": "slotchange",
347
+ "method": "handleSlotChange",
348
+ "target": undefined,
349
+ "capture": false,
350
+ "passive": false
351
+ }, {
352
+ "name": "resize",
353
+ "method": "handleResize",
354
+ "target": "window",
355
+ "capture": false,
356
+ "passive": true
357
+ }];
358
+ }
28
359
  }
29
360
  //# sourceMappingURL=udp-tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"udp-tabs.js","sourceRoot":"","sources":["../../../../../../../src/components/my-component/UI/tabs/tab/tabs/udp-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAMpD,MAAM,OAAO,OAAO;IAJpB;QAKW,cAAS,GAAW,CAAC,CAAC;KAoBhC;IAlBC,UAAU,CAAC,QAAgB;QACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,CACL;YACE,4DAAK,KAAK,EAAC,YAAY;gBACrB,6DAAM,IAAI,EAAC,WAAW,GAEf,CACH;YACN;gBACE,8DAAa,CACT,CACF,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, State } from '@stencil/core';\n\n@Component({\n tag: 'udp-tabs',\n styleUrl: 'udp-tabs.css',\n})\nexport class UdpTabs {\n @State() activeTab: number = 0;\n\n tabClicked(tabIndex: number) {\n this.activeTab = tabIndex;\n }\n\n render() {\n return (\n <div>\n <div class=\"tab-header\">\n <slot name=\"tab-title\">\n {/* Titles go here */}\n </slot>\n </div>\n <div>\n <slot></slot>\n </div>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"udp-tabs.js","sourceRoot":"","sources":["../../../../../../../src/components/my-component/UI/tabs/tab/tabs/udp-tabs.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, State, Element, Watch, Listen, Prop, Event, EventEmitter } from '@stencil/core';\n\ninterface TabDetail {\n label: string;\n icon?: string;\n iconPlacement?: 'start' | 'end' | 'top' | 'bottom';\n hidden?: boolean;\n disabled?: boolean;\n}\n\n@Component({\n tag: 'udp-tabs',\n styleUrl: 'udp-tabs.css',\n shadow: true,\n})\nexport class UdpTabs {\n @Element() el: HTMLElement;\n\n /**\n * Specifies the layout variant of the tab header.\n *\n * - `'standard'`: Tabs will be sized based on their content.\n * - `'fill'`: Tabs will stretch to fill the available horizontal space.\n */\n @Prop() variant: 'fill' | 'standard' = 'fill';\n\n /**\n * (Controlled) The index of the currently active tab.\n * If this prop is provided, the component will be in \"controlled\" mode.\n * The parent must listen for `udpTabChange` to update this value.\n */\n @Prop() value?: number;\n\n /**\n * (Optional) An array of tab configuration objects.\n * If provided, this will be used to render tabs instead of slotted `<udp-tab>` components.\n * This mode is typically used with controlled tabs.\n */\n @Prop() tabs: TabDetail[] = [];\n\n /**\n * (Controlled) Emits the index of the tab that was clicked.\n * This is only emitted in \"controlled\" mode (when `value` is provided).\n */\n @Event() udpTabChange: EventEmitter<number>;\n\n @State() internalActiveTab: number = 0; // For uncontrolled mode\n @State() tabDetails: TabDetail[] = []; // Unified details from prop or slot\n @State() sliderStyle: { width: string; transform: string } = {\n width: '0',\n transform: 'translateX(0)',\n };\n @State() showScrollLeft: boolean = false;\n @State() showScrollRight: boolean = false;\n\n private slottedTabs: HTMLUdpTabElement[] = []; // Renamed from `tabs`\n private buttonRefs: HTMLButtonElement[] = [];\n private scrollContainerRef?: HTMLDivElement;\n\n /**\n * Returns true if the component is in controlled mode.\n */\n private get isControlled(): boolean {\n return this.value != null;\n }\n\n /**\n * Returns true if tabs are being provided by the `tabs` prop.\n */\n private get useTabsProp(): boolean {\n return this.tabs && this.tabs.length > 0;\n }\n\n /**\n * Returns the currently active tab index,\n * respecting controlled or uncontrolled mode.\n */\n private get activeTab(): number {\n return this.isControlled ? this.value : this.internalActiveTab;\n }\n\n @Listen('slotchange')\n handleSlotChange() {\n // If we're using the tabs prop, slot changes are irrelevant\n if (this.useTabsProp) return;\n this.initializeTabs();\n }\n\n @Listen('resize', { target: 'window' })\n handleResize() {\n requestAnimationFrame(() => {\n this.updateSliderPosition();\n this.checkScroll();\n });\n }\n\n componentDidLoad() {\n this.initializeTabs();\n }\n\n /**\n * Watcher for uncontrolled state changes.\n */\n @Watch('internalActiveTab')\n onActiveTabChange(newValue: number) {\n this.updateActiveTabs();\n this.updateSliderPosition();\n this.scrollTabIntoView(newValue);\n }\n\n /**\n * Watcher for controlled state changes.\n */\n @Watch('value')\n onValueChange(newValue: number) {\n this.updateActiveTabs();\n this.updateSliderPosition();\n this.scrollTabIntoView(newValue);\n }\n\n /**\n * Watcher for tabs prop changes.\n */\n @Watch('tabs')\n onTabsPropChange() {\n this.initializeTabs();\n }\n\n @Watch('variant')\n onVariantChange() {\n requestAnimationFrame(() => {\n this.updateSliderPosition();\n this.checkScroll();\n });\n }\n\n private initializeTabs() {\n this.buttonRefs = [];\n\n if (this.useTabsProp) {\n // --- Prop-based ---\n this.tabDetails = this.tabs.map(t => ({ ...t })); // Use data from prop\n this.slottedTabs = []; // Ensure we're not tracking slotted tabs\n } else {\n // --- Slot-based ---\n this.slottedTabs = Array.from(this.el.children).filter(\n (child): child is HTMLUdpTabElement => child.tagName.toLowerCase() === 'udp-tab',\n );\n\n this.tabDetails = this.slottedTabs.map(tab => ({\n label: tab.label,\n icon: tab.icon,\n iconPlacement: tab.iconPlacement,\n hidden: tab.hidden,\n disabled: tab.disabled,\n }));\n }\n\n // --- Common Logic ---\n // In uncontrolled mode, check if the default active tab is invalid.\n if (!this.isControlled) {\n if (this.tabDetails[this.internalActiveTab]?.hidden || this.tabDetails[this.internalActiveTab]?.disabled) {\n const firstValidIndex = this.tabDetails.findIndex(tab => !tab.hidden && !tab.disabled);\n this.internalActiveTab = firstValidIndex > -1 ? firstValidIndex : 0;\n }\n }\n\n this.updateActiveTabs();\n\n requestAnimationFrame(() => {\n this.updateSliderPosition();\n this.checkScroll();\n });\n }\n\n private updateActiveTabs() {\n // Only update slotted tabs if we're in slot mode\n if (!this.useTabsProp) {\n const currentActiveTab = this.activeTab;\n this.slottedTabs.forEach((tab, index) => {\n tab.active = index === currentActiveTab;\n });\n }\n // If in prop mode, the <button> 'active' class is handled by render()\n }\n\n private updateSliderPosition() {\n const activeButton = this.buttonRefs[this.activeTab]; // Use getter\n if (!activeButton) {\n this.sliderStyle = { width: '0px', transform: 'translateX(0px)' };\n return;\n }\n\n this.sliderStyle = {\n width: `${activeButton.offsetWidth}px`,\n transform: `translateX(${activeButton.offsetLeft}px)`,\n };\n }\n\n private checkScroll() {\n if (!this.scrollContainerRef) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.scrollContainerRef;\n const isOverflowing = scrollWidth > clientWidth;\n this.showScrollLeft = isOverflowing && scrollLeft > 1;\n this.showScrollRight = isOverflowing && scrollLeft < scrollWidth - clientWidth - 1;\n }\n\n private tabClicked(tabIndex: number) {\n if (this.tabDetails[tabIndex]?.disabled) {\n return;\n }\n\n if (this.isControlled) {\n // In controlled mode, emit the event for the parent to handle.\n // The `onValueChange` watcher will handle UI updates when the prop changes.\n this.udpTabChange.emit(tabIndex);\n } else {\n // In uncontrolled mode, update state directly.\n // The `onActiveTabChange` watcher will handle UI updates.\n this.internalActiveTab = tabIndex;\n }\n }\n\n private scrollTabIntoView(tabIndex: number) {\n const tabButton = this.buttonRefs[tabIndex];\n const container = this.scrollContainerRef;\n\n if (!tabButton || !container) return;\n\n const { scrollLeft, clientWidth } = container;\n const tabLeft = tabButton.offsetLeft;\n const tabRight = tabLeft + tabButton.offsetWidth;\n\n const safeZonePadding = 70;\n const safeZoneLeft = scrollLeft + safeZonePadding;\n const safeZoneRight = scrollLeft + clientWidth - safeZonePadding;\n\n if (tabLeft < safeZoneLeft) {\n container.scrollTo({\n left: tabLeft - safeZonePadding,\n behavior: 'smooth',\n });\n } else if (tabRight > safeZoneRight) {\n container.scrollTo({\n left: tabRight - clientWidth + safeZonePadding,\n behavior: 'smooth',\n });\n }\n }\n\n private scrollToStart() {\n if (!this.scrollContainerRef) return;\n this.scrollContainerRef.scrollTo({ left: 0, behavior: 'smooth' });\n }\n\n private scrollToEnd() {\n if (!this.scrollContainerRef) return;\n const container = this.scrollContainerRef;\n const { scrollWidth, clientWidth } = container;\n const maxScrollLeft = scrollWidth - clientWidth;\n container.scrollTo({ left: maxScrollLeft, behavior: 'smooth' });\n }\n\n render() {\n const currentActiveTab = this.activeTab; // Use getter\n\n return (\n <div class=\"tab-container\">\n <div class={`tab-header ${this.variant}`}>\n {this.showScrollLeft && (\n <button\n class=\"scroll-arrow left\"\n onClick={() => this.scrollToStart()}\n aria-label=\"Scroll to first tab\"\n >\n <udp-icon iconName=\"chevronLeft16\" color=\"inherit\" />\n </button>\n )}\n\n {this.showScrollLeft && <div class=\"scroll-fade left\"></div>}\n\n <div\n class=\"tab-scroll-container\"\n ref={el => (this.scrollContainerRef = el)}\n onScroll={() => this.checkScroll()}\n >\n {this.tabDetails.map((tab, index) => {\n if (tab.hidden) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const iconEl = tab.icon ? <udp-icon iconName={tab.icon} color={'inherit'} /> : null;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const labelEl = <span>{tab.label}</span>;\n\n return (\n <button\n class={{\n 'active': index === currentActiveTab,\n 'has-icon': !!tab.icon,\n [`icon-${tab.iconPlacement}`]: !!tab.icon,\n 'disabled': tab.disabled,\n }}\n disabled={tab.disabled}\n onClick={() => this.tabClicked(index)}\n role=\"tab\"\n aria-selected={index === currentActiveTab ? 'true' : 'false'}\n aria-disabled={tab.disabled ? 'true' : 'false'}\n ref={el => (this.buttonRefs[index] = el)}\n >\n {iconEl}\n {labelEl}\n </button>\n );\n })}\n\n <div class=\"slider\" style={this.sliderStyle}></div>\n </div>\n\n {this.showScrollRight && <div class=\"scroll-fade right\"></div>}\n\n {this.showScrollRight && (\n <button\n class=\"scroll-arrow right\"\n onClick={() => this.scrollToEnd()}\n aria-label=\"Scroll to last tab\"\n >\n <udp-icon iconName=\"chevronRight16\" color=\"inherit\" />\n </button>\n )}\n </div>\n\n {!this.isControlled && !this.useTabsProp && (\n <div>\n <slot></slot>\n </div>\n )}\n </div>\n );\n }\n}\n"]}
@@ -1,11 +1,9 @@
1
1
  .tab-panel {
2
2
  display: none;
3
- background-color: #ffffff;
4
3
  }
5
-
4
+
6
5
  .tab-panel.active {
7
6
  display: block;
8
7
  }
9
-
10
8
 
11
-
9
+
@@ -1,10 +1,29 @@
1
1
  import { h } from "@stencil/core";
2
2
  export class UdpTab {
3
- activeChanged() {
4
- // Handle the active state change, if needed
3
+ constructor() {
4
+ /**
5
+ * True if this is the active tab.
6
+ * This is set by the parent <udp-tabs> component.
7
+ */
8
+ this.active = false;
9
+ /**
10
+ * Placement of the icon relative to the title.
11
+ * @default 'start'
12
+ */
13
+ this.iconPlacement = 'start';
14
+ /**
15
+ * If true, the tab will be hidden from the tab list.
16
+ * @default false
17
+ */
18
+ this.hidden = false;
19
+ /**
20
+ * If true, the tab will be unselectable.
21
+ * @default false
22
+ */
23
+ this.disabled = false;
5
24
  }
6
25
  render() {
7
- return (h("div", { key: '775798db38994b9a9dcfdb94a8cc588bafed47f9', class: { 'tab-panel': true, 'active': this.active } }, h("slot", { key: '6f67d3f672d0600eeb84b9dfcc2c12f2fc931ef7' })));
26
+ return (h("div", { key: '0dbc41862f8bb01ecfec94ca44f082f0e4e7104f', class: { 'tab-panel': true, 'active': this.active }, role: "tabpanel" }, h("slot", { key: 'facc5f18260ea67c405dca1a90dcdc48e5ec995c' })));
8
27
  }
9
28
  static get is() { return "udp-tab"; }
10
29
  static get originalStyleUrls() {
@@ -19,7 +38,7 @@ export class UdpTab {
19
38
  }
20
39
  static get properties() {
21
40
  return {
22
- "title": {
41
+ "label": {
23
42
  "type": "string",
24
43
  "mutable": false,
25
44
  "complexType": {
@@ -31,12 +50,12 @@ export class UdpTab {
31
50
  "optional": false,
32
51
  "docs": {
33
52
  "tags": [],
34
- "text": ""
53
+ "text": "The title of the tab, displayed in the tab-header."
35
54
  },
36
55
  "getter": false,
37
56
  "setter": false,
38
57
  "reflect": false,
39
- "attribute": "title"
58
+ "attribute": "label"
40
59
  },
41
60
  "active": {
42
61
  "type": "boolean",
@@ -50,20 +69,103 @@ export class UdpTab {
50
69
  "optional": false,
51
70
  "docs": {
52
71
  "tags": [],
53
- "text": ""
72
+ "text": "True if this is the active tab.\nThis is set by the parent <udp-tabs> component."
73
+ },
74
+ "getter": false,
75
+ "setter": false,
76
+ "reflect": true,
77
+ "attribute": "active",
78
+ "defaultValue": "false"
79
+ },
80
+ "icon": {
81
+ "type": "string",
82
+ "mutable": false,
83
+ "complexType": {
84
+ "original": "string",
85
+ "resolved": "string",
86
+ "references": {}
87
+ },
88
+ "required": false,
89
+ "optional": true,
90
+ "docs": {
91
+ "tags": [],
92
+ "text": "Optional icon to display in the tab."
54
93
  },
55
94
  "getter": false,
56
95
  "setter": false,
57
96
  "reflect": false,
58
- "attribute": "active"
97
+ "attribute": "icon"
98
+ },
99
+ "iconPlacement": {
100
+ "type": "string",
101
+ "mutable": false,
102
+ "complexType": {
103
+ "original": "'start' | 'end' | 'top' | 'bottom'",
104
+ "resolved": "\"bottom\" | \"end\" | \"start\" | \"top\"",
105
+ "references": {}
106
+ },
107
+ "required": false,
108
+ "optional": true,
109
+ "docs": {
110
+ "tags": [{
111
+ "name": "default",
112
+ "text": "'start'"
113
+ }],
114
+ "text": "Placement of the icon relative to the title."
115
+ },
116
+ "getter": false,
117
+ "setter": false,
118
+ "reflect": false,
119
+ "attribute": "icon-placement",
120
+ "defaultValue": "'start'"
121
+ },
122
+ "hidden": {
123
+ "type": "boolean",
124
+ "mutable": false,
125
+ "complexType": {
126
+ "original": "boolean",
127
+ "resolved": "boolean",
128
+ "references": {}
129
+ },
130
+ "required": false,
131
+ "optional": true,
132
+ "docs": {
133
+ "tags": [{
134
+ "name": "default",
135
+ "text": "false"
136
+ }],
137
+ "text": "If true, the tab will be hidden from the tab list."
138
+ },
139
+ "getter": false,
140
+ "setter": false,
141
+ "reflect": false,
142
+ "attribute": "hidden",
143
+ "defaultValue": "false"
144
+ },
145
+ "disabled": {
146
+ "type": "boolean",
147
+ "mutable": false,
148
+ "complexType": {
149
+ "original": "boolean",
150
+ "resolved": "boolean",
151
+ "references": {}
152
+ },
153
+ "required": false,
154
+ "optional": true,
155
+ "docs": {
156
+ "tags": [{
157
+ "name": "default",
158
+ "text": "false"
159
+ }],
160
+ "text": "If true, the tab will be unselectable."
161
+ },
162
+ "getter": false,
163
+ "setter": false,
164
+ "reflect": false,
165
+ "attribute": "disabled",
166
+ "defaultValue": "false"
59
167
  }
60
168
  };
61
169
  }
62
- static get watchers() {
63
- return [{
64
- "propName": "active",
65
- "methodName": "activeChanged"
66
- }];
67
- }
68
170
  }
69
171
  //# sourceMappingURL=udp-tab.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"udp-tab.js","sourceRoot":"","sources":["../../../../../../src/components/my-component/UI/tabs/tab/udp-tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAM1D,MAAM,OAAO,MAAM;IAKjB,aAAa;QACX,4CAA4C;IAC9C,CAAC;IAED,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;YACtD,8DAAa,CACT,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, Watch } from '@stencil/core';\n\n@Component({\n tag: 'udp-tab',\n styleUrl: 'udp-tab.css',\n})\nexport class UdpTab {\n @Prop() title: string;\n @Prop() active: boolean;\n\n @Watch('active')\n activeChanged() {\n // Handle the active state change, if needed\n }\n\n render() {\n return (\n <div class={{ 'tab-panel': true, 'active': this.active }}>\n <slot></slot>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"udp-tab.js","sourceRoot":"","sources":["../../../../../../src/components/my-component/UI/tabs/tab/udp-tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAMnD,MAAM,OAAO,MAAM;IAJnB;QAUE;;;WAGG;QACsB,WAAM,GAAY,KAAK,CAAC;QAOjD;;;WAGG;QACK,kBAAa,GAAwC,OAAO,CAAC;QACrE;;;WAGG;QACK,WAAM,GAAa,KAAK,CAAC;QAEjC;;;WAGG;QACK,aAAQ,GAAa,KAAK,CAAC;KASpC;IAPC,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAC,UAAU;YACvE,8DAAa,CACT,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'udp-tab',\n styleUrl: 'udp-tab.css',\n})\nexport class UdpTab {\n /**\n * The title of the tab, displayed in the tab-header.\n */\n @Prop() label: string;\n\n /**\n * True if this is the active tab.\n * This is set by the parent <udp-tabs> component.\n */\n @Prop({ reflect: true }) active: boolean = false;\n\n /**\n * Optional icon to display in the tab.\n */\n @Prop() icon?: string;\n\n /**\n * Placement of the icon relative to the title.\n * @default 'start'\n */\n @Prop() iconPlacement?: 'start' | 'end' | 'top' | 'bottom' = 'start';\n /**\n * If true, the tab will be hidden from the tab list.\n * @default false\n */\n @Prop() hidden?: boolean = false;\n\n /**\n * If true, the tab will be unselectable.\n * @default false\n */\n @Prop() disabled?: boolean = false;\n\n render() {\n return (\n <div class={{ 'tab-panel': true, 'active': this.active }} role=\"tabpanel\">\n <slot></slot>\n </div>\n );\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .tab-panel {
6
+ display: none;
7
+ }
8
+
9
+ .tab-panel.active {
10
+ display: block;
11
+ }