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
@@ -0,0 +1,45 @@
1
+ import { p as proxyCustomElement, H, h } from './index2.js';
2
+
3
+ const udpTabPanelCss = ":host{display:block}.tab-panel{display:none}.tab-panel.active{display:block}";
4
+
5
+ const UdpTabPanel$1 = /*@__PURE__*/ proxyCustomElement(class UdpTabPanel extends H {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ this.__attachShadow();
12
+ }
13
+ render() {
14
+ const isActive = this.value === this.index;
15
+ return (h("div", { key: '735bca81299145233b3e2e017eef05a840b0fb69', class: {
16
+ 'tab-panel': true,
17
+ 'active': isActive,
18
+ }, role: "tabpanel", "aria-hidden": !isActive ? 'true' : 'false' }, h("slot", { key: '68ad651e93008ca12c4d976ca71747a4f4cf4b39' })));
19
+ }
20
+ static get style() { return udpTabPanelCss; }
21
+ }, [257, "udp-tab-panel", {
22
+ "value": [2],
23
+ "index": [2]
24
+ }]);
25
+ function defineCustomElement$1() {
26
+ if (typeof customElements === "undefined") {
27
+ return;
28
+ }
29
+ const components = ["udp-tab-panel"];
30
+ components.forEach(tagName => { switch (tagName) {
31
+ case "udp-tab-panel":
32
+ if (!customElements.get(tagName)) {
33
+ customElements.define(tagName, UdpTabPanel$1);
34
+ }
35
+ break;
36
+ } });
37
+ }
38
+
39
+ const UdpTabPanel = UdpTabPanel$1;
40
+ const defineCustomElement = defineCustomElement$1;
41
+
42
+ export { UdpTabPanel, defineCustomElement };
43
+ //# sourceMappingURL=udp-tab-panel.js.map
44
+
45
+ //# sourceMappingURL=udp-tab-panel.js.map
@@ -0,0 +1 @@
1
+ {"file":"udp-tab-panel.js","mappings":";;AAAA,MAAM,cAAc,GAAG,8EAA8E;;MCOxFA,aAAW,iBAAAC,kBAAA,CAAA,MAAA,WAAA,SAAAC,CAAA,CAAA;;;;;;;;IAWtB,MAAM,GAAA;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;QAE1C,QACE,CACE,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,EACD,IAAI,EAAC,UAAU,EAAA,aAAA,EAEF,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,EAAA,EAEzC,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["UdpTabPanel","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.css?tag=udp-tab-panel&encapsulation=shadow","src/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n.tab-panel {\n display: none;\n}\n\n.tab-panel.active {\n display: block;\n}\n","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'udp-tab-panel',\n styleUrl: 'udp-tab-panel.css',\n shadow: true,\n})\nexport class UdpTabPanel {\n /**\n * The active tab index, provided by the parent.\n */\n @Prop() value: number;\n\n /**\n * The index this panel corresponds to.\n */\n @Prop() index: number;\n\n render() {\n const isActive = this.value === this.index;\n\n return (\n <div\n class={{\n 'tab-panel': true,\n 'active': isActive,\n }}\n role=\"tabpanel\"\n // Use aria-hidden for accessibility and :host styling\n aria-hidden={!isActive ? 'true' : 'false'}\n >\n <slot></slot>\n </div>\n );\n }\n}\n"],"version":3}
@@ -1,6 +1,6 @@
1
1
  import { p as proxyCustomElement, H, h } from './index2.js';
2
2
 
3
- const udpTabCss = ".tab-panel{display:none;background-color:#ffffff}.tab-panel.active{display:block}";
3
+ const udpTabCss = ".tab-panel{display:none}.tab-panel.active{display:block}";
4
4
 
5
5
  const UdpTab = /*@__PURE__*/ proxyCustomElement(class UdpTab extends H {
6
6
  constructor(registerHost) {
@@ -8,22 +8,38 @@ const UdpTab = /*@__PURE__*/ proxyCustomElement(class UdpTab extends H {
8
8
  if (registerHost !== false) {
9
9
  this.__registerHost();
10
10
  }
11
- }
12
- activeChanged() {
13
- // Handle the active state change, if needed
11
+ /**
12
+ * True if this is the active tab.
13
+ * This is set by the parent <udp-tabs> component.
14
+ */
15
+ this.active = false;
16
+ /**
17
+ * Placement of the icon relative to the title.
18
+ * @default 'start'
19
+ */
20
+ this.iconPlacement = 'start';
21
+ /**
22
+ * If true, the tab will be hidden from the tab list.
23
+ * @default false
24
+ */
25
+ this.hidden = false;
26
+ /**
27
+ * If true, the tab will be unselectable.
28
+ * @default false
29
+ */
30
+ this.disabled = false;
14
31
  }
15
32
  render() {
16
- return (h("div", { key: '775798db38994b9a9dcfdb94a8cc588bafed47f9', class: { 'tab-panel': true, 'active': this.active } }, h("slot", { key: '6f67d3f672d0600eeb84b9dfcc2c12f2fc931ef7' })));
33
+ return (h("div", { key: '0dbc41862f8bb01ecfec94ca44f082f0e4e7104f', class: { 'tab-panel': true, 'active': this.active }, role: "tabpanel" }, h("slot", { key: 'facc5f18260ea67c405dca1a90dcdc48e5ec995c' })));
17
34
  }
18
- static get watchers() { return {
19
- "active": ["activeChanged"]
20
- }; }
21
35
  static get style() { return udpTabCss; }
22
36
  }, [260, "udp-tab", {
23
- "title": [1],
24
- "active": [4]
25
- }, undefined, {
26
- "active": ["activeChanged"]
37
+ "label": [1],
38
+ "active": [516],
39
+ "icon": [1],
40
+ "iconPlacement": [1, "icon-placement"],
41
+ "hidden": [4],
42
+ "disabled": [4]
27
43
  }]);
28
44
  function defineCustomElement() {
29
45
  if (typeof customElements === "undefined") {
@@ -1 +1 @@
1
- {"file":"udp-tab2.js","mappings":";;AAAA,MAAM,SAAS,GAAG,mFAAmF;;MCMxF,MAAM,iBAAAA,kBAAA,CAAA,MAAA,MAAA,SAAAC,CAAA,CAAA;;;;;;;IAKjB,aAAa,GAAA;;;IAIb,MAAM,GAAA;AACJ,QAAA,QACE,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAA,EACtD,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/my-component/UI/tabs/tab/udp-tab.css?tag=udp-tab","src/components/my-component/UI/tabs/tab/udp-tab.tsx"],"sourcesContent":[".tab-panel {\n display: none;\n background-color: #ffffff;\n }\n \n .tab-panel.active {\n display: block;\n }\n \n\n ","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"],"version":3}
1
+ {"file":"udp-tab2.js","mappings":";;AAAA,MAAM,SAAS,GAAG,0DAA0D;;MCM/D,MAAM,iBAAAA,kBAAA,CAAA,MAAA,MAAA,SAAAC,CAAA,CAAA;AAJnB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AAUE;;;AAGG;AACsB,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;AAOhD;;;AAGG;AACK,QAAA,IAAa,CAAA,aAAA,GAAwC,OAAO;AACpE;;;AAGG;AACK,QAAA,IAAM,CAAA,MAAA,GAAa,KAAK;AAEhC;;;AAGG;AACK,QAAA,IAAQ,CAAA,QAAA,GAAa,KAAK;AASnC;IAPC,MAAM,GAAA;AACJ,QAAA,QACE,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAC,UAAU,EAAA,EACvE,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/my-component/UI/tabs/tab/udp-tab.css?tag=udp-tab","src/components/my-component/UI/tabs/tab/udp-tab.tsx"],"sourcesContent":[".tab-panel {\n display: none;\n }\n\n .tab-panel.active {\n display: block;\n }\n\n\n","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"],"version":3}
@@ -1,6 +1,7 @@
1
- import { p as proxyCustomElement, H, h } from './index2.js';
1
+ import { p as proxyCustomElement, H, c as createEvent, h } from './index2.js';
2
+ import { d as defineCustomElement$1 } from './udp-icon2.js';
2
3
 
3
- const udpTabsCss = ".tab-header{display:flex;background-color:#ffffff;border-bottom:1px solid #e0e0e0}.tab-header button{flex-grow:1;padding:16px;font-size:14px;text-align:center;border:none;background:none;cursor:pointer;outline:none;transition:all 0.3s ease}.tab-header button.active{border-bottom:2px solid 'var(--secondary-color)';font-weight:600}.tab-content{display:flex;flex-direction:column;padding:16px;background-color:#ffffff}.tab-header button{cursor:pointer;border:none;padding:16px;background-color:transparent;color:#757575}.tab-header button.active{border-bottom:2px solid #344861;color:#344861;font-weight:600}";
4
+ const udpTabsCss = ".tab-container{display:flex;flex-direction:column}.tab-header{background-color:#ffffff;position:relative;display:flex;align-items:center}.tab-scroll-container{display:flex;position:relative;overflow-x:auto;overflow-y:hidden;flex:1;min-width:0}.tab-scroll-container::-webkit-scrollbar{height:4px}.tab-scroll-container::-webkit-scrollbar-track{background:transparent}.tab-scroll-container::-webkit-scrollbar-thumb{background-color:rgba(0, 0, 0, 0.2);border-radius:4px}.tab-scroll-container::-webkit-scrollbar-thumb:hover{background-color:rgba(0, 0, 0, 0.3)}.tab-header::after{content:'';position:absolute;bottom:0;left:0;width:100%;height:1px;background-color:var(--divider-color, #e0e0e0)}.tab-header button{padding:16px;font-size:14px;text-align:center;border:none;background:none;cursor:pointer;outline:none;transition:all 0.22s ease;color:#555555;font-weight:600;opacity:0.9;white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:8px}.tab-header.fill .tab-scroll-container{width:100%}.tab-header.fill .tab-scroll-container button{flex-grow:1}.tab-header button.active{color:var(--secondary-color, #344861);opacity:1.0}.tab-header button.scroll-arrow{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:40px;padding:0;background:#ffffff;cursor:pointer;font-size:16px;font-weight:bold;color:#757575;z-index:2;transition:color 0.2s ease;flex-shrink:0;opacity:1;gap:0}.tab-header button.scroll-arrow:hover{color:#000}.tab-header button.scroll-arrow.left{left:0}.tab-header button.scroll-arrow.right{right:0}.scroll-fade{position:absolute;top:0;bottom:0;width:30px;z-index:1;pointer-events:none}.scroll-fade.left{left:40px;background:linear-gradient(\n to right,\n #ffffff,\n rgba(255, 255, 255, 0)\n )}.scroll-fade.right{right:40px;background:linear-gradient(\n to left,\n #ffffff,\n rgba(255, 255, 255, 0)\n )}.tab-header button udp-icon{font-size:1.2em;line-height:1}.tab-header button.icon-start{flex-direction:row}.tab-header button.icon-end{flex-direction:row-reverse}.tab-header button.icon-top{flex-direction:column;gap:4px}.tab-header button.icon-bottom{flex-direction:column-reverse;gap:4px}.slider{position:absolute;bottom:0;left:0;height:2px;background-color:var(--secondary-color, #344861);transition:transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),\n width 0.22s cubic-bezier(0.4, 0, 0.2, 1);z-index:1}.tab-header button.disabled{opacity:0.5;cursor:not-allowed}.tab-header button.disabled.active{color:#757575;opacity:0.5}";
4
5
 
5
6
  const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
6
7
  constructor(registerHost) {
@@ -8,29 +9,266 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
8
9
  if (registerHost !== false) {
9
10
  this.__registerHost();
10
11
  }
11
- this.activeTab = 0;
12
+ this.__attachShadow();
13
+ this.udpTabChange = createEvent(this, "udpTabChange");
14
+ /**
15
+ * Specifies the layout variant of the tab header.
16
+ *
17
+ * - `'standard'`: Tabs will be sized based on their content.
18
+ * - `'fill'`: Tabs will stretch to fill the available horizontal space.
19
+ */
20
+ this.variant = 'fill';
21
+ /**
22
+ * (Optional) An array of tab configuration objects.
23
+ * If provided, this will be used to render tabs instead of slotted `<udp-tab>` components.
24
+ * This mode is typically used with controlled tabs.
25
+ */
26
+ this.tabs = [];
27
+ this.internalActiveTab = 0; // For uncontrolled mode
28
+ this.tabDetails = []; // Unified details from prop or slot
29
+ this.sliderStyle = {
30
+ width: '0',
31
+ transform: 'translateX(0)',
32
+ };
33
+ this.showScrollLeft = false;
34
+ this.showScrollRight = false;
35
+ this.slottedTabs = []; // Renamed from `tabs`
36
+ this.buttonRefs = [];
37
+ }
38
+ /**
39
+ * Returns true if the component is in controlled mode.
40
+ */
41
+ get isControlled() {
42
+ return this.value != null;
43
+ }
44
+ /**
45
+ * Returns true if tabs are being provided by the `tabs` prop.
46
+ */
47
+ get useTabsProp() {
48
+ return this.tabs && this.tabs.length > 0;
49
+ }
50
+ /**
51
+ * Returns the currently active tab index,
52
+ * respecting controlled or uncontrolled mode.
53
+ */
54
+ get activeTab() {
55
+ return this.isControlled ? this.value : this.internalActiveTab;
56
+ }
57
+ handleSlotChange() {
58
+ // If we're using the tabs prop, slot changes are irrelevant
59
+ if (this.useTabsProp)
60
+ return;
61
+ this.initializeTabs();
62
+ }
63
+ handleResize() {
64
+ requestAnimationFrame(() => {
65
+ this.updateSliderPosition();
66
+ this.checkScroll();
67
+ });
68
+ }
69
+ componentDidLoad() {
70
+ this.initializeTabs();
71
+ }
72
+ /**
73
+ * Watcher for uncontrolled state changes.
74
+ */
75
+ onActiveTabChange(newValue) {
76
+ this.updateActiveTabs();
77
+ this.updateSliderPosition();
78
+ this.scrollTabIntoView(newValue);
79
+ }
80
+ /**
81
+ * Watcher for controlled state changes.
82
+ */
83
+ onValueChange(newValue) {
84
+ this.updateActiveTabs();
85
+ this.updateSliderPosition();
86
+ this.scrollTabIntoView(newValue);
87
+ }
88
+ /**
89
+ * Watcher for tabs prop changes.
90
+ */
91
+ onTabsPropChange() {
92
+ this.initializeTabs();
93
+ }
94
+ onVariantChange() {
95
+ requestAnimationFrame(() => {
96
+ this.updateSliderPosition();
97
+ this.checkScroll();
98
+ });
99
+ }
100
+ initializeTabs() {
101
+ var _a, _b;
102
+ this.buttonRefs = [];
103
+ if (this.useTabsProp) {
104
+ // --- Prop-based ---
105
+ this.tabDetails = this.tabs.map(t => (Object.assign({}, t))); // Use data from prop
106
+ this.slottedTabs = []; // Ensure we're not tracking slotted tabs
107
+ }
108
+ else {
109
+ // --- Slot-based ---
110
+ this.slottedTabs = Array.from(this.el.children).filter((child) => child.tagName.toLowerCase() === 'udp-tab');
111
+ this.tabDetails = this.slottedTabs.map(tab => ({
112
+ label: tab.label,
113
+ icon: tab.icon,
114
+ iconPlacement: tab.iconPlacement,
115
+ hidden: tab.hidden,
116
+ disabled: tab.disabled,
117
+ }));
118
+ }
119
+ // --- Common Logic ---
120
+ // In uncontrolled mode, check if the default active tab is invalid.
121
+ if (!this.isControlled) {
122
+ 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)) {
123
+ const firstValidIndex = this.tabDetails.findIndex(tab => !tab.hidden && !tab.disabled);
124
+ this.internalActiveTab = firstValidIndex > -1 ? firstValidIndex : 0;
125
+ }
126
+ }
127
+ this.updateActiveTabs();
128
+ requestAnimationFrame(() => {
129
+ this.updateSliderPosition();
130
+ this.checkScroll();
131
+ });
132
+ }
133
+ updateActiveTabs() {
134
+ // Only update slotted tabs if we're in slot mode
135
+ if (!this.useTabsProp) {
136
+ const currentActiveTab = this.activeTab;
137
+ this.slottedTabs.forEach((tab, index) => {
138
+ tab.active = index === currentActiveTab;
139
+ });
140
+ }
141
+ // If in prop mode, the <button> 'active' class is handled by render()
142
+ }
143
+ updateSliderPosition() {
144
+ const activeButton = this.buttonRefs[this.activeTab]; // Use getter
145
+ if (!activeButton) {
146
+ this.sliderStyle = { width: '0px', transform: 'translateX(0px)' };
147
+ return;
148
+ }
149
+ this.sliderStyle = {
150
+ width: `${activeButton.offsetWidth}px`,
151
+ transform: `translateX(${activeButton.offsetLeft}px)`,
152
+ };
153
+ }
154
+ checkScroll() {
155
+ if (!this.scrollContainerRef)
156
+ return;
157
+ const { scrollLeft, scrollWidth, clientWidth } = this.scrollContainerRef;
158
+ const isOverflowing = scrollWidth > clientWidth;
159
+ this.showScrollLeft = isOverflowing && scrollLeft > 1;
160
+ this.showScrollRight = isOverflowing && scrollLeft < scrollWidth - clientWidth - 1;
12
161
  }
13
162
  tabClicked(tabIndex) {
14
- this.activeTab = tabIndex;
163
+ var _a;
164
+ if ((_a = this.tabDetails[tabIndex]) === null || _a === void 0 ? void 0 : _a.disabled) {
165
+ return;
166
+ }
167
+ if (this.isControlled) {
168
+ // In controlled mode, emit the event for the parent to handle.
169
+ // The `onValueChange` watcher will handle UI updates when the prop changes.
170
+ this.udpTabChange.emit(tabIndex);
171
+ }
172
+ else {
173
+ // In uncontrolled mode, update state directly.
174
+ // The `onActiveTabChange` watcher will handle UI updates.
175
+ this.internalActiveTab = tabIndex;
176
+ }
177
+ }
178
+ scrollTabIntoView(tabIndex) {
179
+ const tabButton = this.buttonRefs[tabIndex];
180
+ const container = this.scrollContainerRef;
181
+ if (!tabButton || !container)
182
+ return;
183
+ const { scrollLeft, clientWidth } = container;
184
+ const tabLeft = tabButton.offsetLeft;
185
+ const tabRight = tabLeft + tabButton.offsetWidth;
186
+ const safeZonePadding = 70;
187
+ const safeZoneLeft = scrollLeft + safeZonePadding;
188
+ const safeZoneRight = scrollLeft + clientWidth - safeZonePadding;
189
+ if (tabLeft < safeZoneLeft) {
190
+ container.scrollTo({
191
+ left: tabLeft - safeZonePadding,
192
+ behavior: 'smooth',
193
+ });
194
+ }
195
+ else if (tabRight > safeZoneRight) {
196
+ container.scrollTo({
197
+ left: tabRight - clientWidth + safeZonePadding,
198
+ behavior: 'smooth',
199
+ });
200
+ }
201
+ }
202
+ scrollToStart() {
203
+ if (!this.scrollContainerRef)
204
+ return;
205
+ this.scrollContainerRef.scrollTo({ left: 0, behavior: 'smooth' });
206
+ }
207
+ scrollToEnd() {
208
+ if (!this.scrollContainerRef)
209
+ return;
210
+ const container = this.scrollContainerRef;
211
+ const { scrollWidth, clientWidth } = container;
212
+ const maxScrollLeft = scrollWidth - clientWidth;
213
+ container.scrollTo({ left: maxScrollLeft, behavior: 'smooth' });
15
214
  }
16
215
  render() {
17
- 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' }))));
216
+ const currentActiveTab = this.activeTab; // Use getter
217
+ 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) => {
218
+ if (tab.hidden) {
219
+ return null;
220
+ }
221
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
222
+ const iconEl = tab.icon ? h("udp-icon", { iconName: tab.icon, color: 'inherit' }) : null;
223
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
224
+ const labelEl = h("span", null, tab.label);
225
+ return (h("button", { class: {
226
+ 'active': index === currentActiveTab,
227
+ 'has-icon': !!tab.icon,
228
+ [`icon-${tab.iconPlacement}`]: !!tab.icon,
229
+ 'disabled': tab.disabled,
230
+ }, 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));
231
+ }), 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' })))));
18
232
  }
233
+ get el() { return this; }
234
+ static get watchers() { return {
235
+ "internalActiveTab": ["onActiveTabChange"],
236
+ "value": ["onValueChange"],
237
+ "tabs": ["onTabsPropChange"],
238
+ "variant": ["onVariantChange"]
239
+ }; }
19
240
  static get style() { return udpTabsCss; }
20
- }, [260, "udp-tabs", {
21
- "activeTab": [32]
241
+ }, [257, "udp-tabs", {
242
+ "variant": [1],
243
+ "value": [2],
244
+ "tabs": [16],
245
+ "internalActiveTab": [32],
246
+ "tabDetails": [32],
247
+ "sliderStyle": [32],
248
+ "showScrollLeft": [32],
249
+ "showScrollRight": [32]
250
+ }, [[0, "slotchange", "handleSlotChange"], [9, "resize", "handleResize"]], {
251
+ "internalActiveTab": ["onActiveTabChange"],
252
+ "value": ["onValueChange"],
253
+ "tabs": ["onTabsPropChange"],
254
+ "variant": ["onVariantChange"]
22
255
  }]);
23
256
  function defineCustomElement() {
24
257
  if (typeof customElements === "undefined") {
25
258
  return;
26
259
  }
27
- const components = ["udp-tabs"];
260
+ const components = ["udp-tabs", "udp-icon"];
28
261
  components.forEach(tagName => { switch (tagName) {
29
262
  case "udp-tabs":
30
263
  if (!customElements.get(tagName)) {
31
264
  customElements.define(tagName, UdpTabs);
32
265
  }
33
266
  break;
267
+ case "udp-icon":
268
+ if (!customElements.get(tagName)) {
269
+ defineCustomElement$1();
270
+ }
271
+ break;
34
272
  } });
35
273
  }
36
274
 
@@ -1 +1 @@
1
- {"file":"udp-tabs2.js","mappings":";;AAAA,MAAM,UAAU,GAAG,imBAAimB;;MCMvmB,OAAO,iBAAAA,kBAAA,CAAA,MAAA,OAAA,SAAAC,CAAA,CAAA;AAJpB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AAKW,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC;AAoB/B;AAlBC,IAAA,UAAU,CAAC,QAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;;IAG3B,MAAM,GAAA;AACJ,QAAA,QACE,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACE,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,YAAY,EAAA,EACrB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,WAAW,EAAA,CAEf,CACH,EACN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACE,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT,CACF;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/my-component/UI/tabs/tab/tabs/udp-tabs.css?tag=udp-tabs","src/components/my-component/UI/tabs/tab/tabs/udp-tabs.tsx"],"sourcesContent":[".tab-header {\n display: flex;\n background-color: #ffffff;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .tab-header button {\n flex-grow: 1;\n padding: 16px;\n font-size: 14px;\n text-align: center;\n border: none;\n background: none;\n cursor: pointer;\n outline: none;\n transition: all 0.3s ease;\n }\n \n .tab-header button.active {\n border-bottom: 2px solid 'var(--secondary-color)';\n font-weight: 600;\n }\n \n .tab-content {\n display: flex;\n flex-direction: column;\n padding: 16px;\n background-color: #ffffff;\n }\n \n .tab-header button {\n cursor: pointer;\n border: none;\n padding: 16px;\n background-color: transparent;\n color: #757575;\n }\n \n .tab-header button.active {\n border-bottom: 2px solid #344861;\n color: #344861;\n font-weight: 600;\n }\n ","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"],"version":3}
1
+ {"file":"udp-tabs2.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/my-component/UI/tabs/tab/tabs/udp-tabs.css?tag=udp-tabs&encapsulation=shadow","src/components/my-component/UI/tabs/tab/tabs/udp-tabs.tsx"],"sourcesContent":[".tab-container {\n display: flex;\n flex-direction: column;\n}\n\n.tab-header {\n background-color: #ffffff;\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.tab-scroll-container {\n display: flex;\n position: relative;\n overflow-x: auto;\n overflow-y: hidden;\n flex: 1;\n min-width: 0;\n}\n\n.tab-scroll-container::-webkit-scrollbar {\n height: 4px;\n}\n.tab-scroll-container::-webkit-scrollbar-track {\n background: transparent;\n}\n.tab-scroll-container::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n}\n.tab-scroll-container::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.3);\n}\n\n.tab-header::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 1px;\n background-color: var(--divider-color, #e0e0e0);\n}\n\n/* This is the base style for tab buttons */\n.tab-header button {\n padding: 16px;\n font-size: 14px;\n text-align: center;\n border: none;\n background: none;\n cursor: pointer;\n outline: none;\n transition: all 0.22s ease;\n color: #555555;;\n font-weight: 600;\n opacity: 0.9;\n white-space: nowrap;\n\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.tab-header.fill .tab-scroll-container {\n width: 100%;\n}\n.tab-header.fill .tab-scroll-container button {\n flex-grow: 1;\n}\n\n.tab-header button.active {\n color: var(--secondary-color, #344861);\n opacity: 1.0;\n}\n\n.tab-header button.scroll-arrow {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 40px;\n padding: 0;\n\n background: #ffffff;\n cursor: pointer;\n font-size: 16px;\n font-weight: bold;\n color: #757575;\n z-index: 2;\n transition: color 0.2s ease;\n\n flex-shrink: 0;\n opacity: 1;\n gap: 0;\n}\n\n.tab-header button.scroll-arrow:hover {\n color: #000;\n}\n\n.tab-header button.scroll-arrow.left {\n left: 0;\n}\n\n.tab-header button.scroll-arrow.right {\n right: 0;\n\n}\n\n.scroll-fade {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 30px;\n z-index: 1;\n pointer-events: none;\n}\n\n.scroll-fade.left {\n left: 40px;\n background: linear-gradient(\n to right,\n #ffffff,\n rgba(255, 255, 255, 0)\n );\n}\n\n.scroll-fade.right {\n right: 40px;\n background: linear-gradient(\n to left,\n #ffffff,\n rgba(255, 255, 255, 0)\n );\n}\n\n.tab-header button udp-icon {\n font-size: 1.2em;\n line-height: 1;\n}\n\n.tab-header button.icon-start {\n flex-direction: row;\n}\n.tab-header button.icon-end {\n flex-direction: row-reverse;\n}\n.tab-header button.icon-top {\n flex-direction: column;\n gap: 4px;\n}\n.tab-header button.icon-bottom {\n flex-direction: column-reverse;\n gap: 4px;\n}\n\n.slider {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 2px;\n background-color: var(--secondary-color, #344861);\n\n transition: transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),\n width 0.22s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: 1;\n}\n\n.tab-header button.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.tab-header button.disabled.active {\n color: #757575;\n opacity: 0.5;\n}\n","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"],"version":3}