udp-stencil-component-library 25.18.1-beta.6 → 25.18.1-beta.8

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 (344) hide show
  1. package/dist/cjs/add-map-feature-popup_4.cjs.entry.js +12 -12
  2. package/dist/cjs/advanced-search_50.cjs.entry.js +169 -96
  3. package/dist/cjs/ag-grid-base_5.cjs.entry.js +5 -5
  4. package/dist/cjs/api-method-instance-grid.cjs.entry.js +1 -1
  5. package/dist/cjs/check-box.cjs.entry.js +2 -2
  6. package/dist/cjs/chip-section.cjs.entry.js +2 -2
  7. package/dist/cjs/client-side-grid_2.cjs.entry.js +3 -3
  8. package/dist/cjs/color-preview.cjs.entry.js +1 -1
  9. package/dist/cjs/date-time-renderer_6.cjs.entry.js +8 -8
  10. package/dist/cjs/entity-maintenance-grid.cjs.entry.js +1 -1
  11. package/dist/cjs/feature-details-card_2.cjs.entry.js +5 -5
  12. package/dist/cjs/image-upload_7.cjs.entry.js +6 -6
  13. package/dist/cjs/index-DrMNAZCL.js +4 -0
  14. package/dist/cjs/inputs-example.cjs.entry.js +2 -2
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/map-component_2.cjs.entry.js +2 -2
  17. package/dist/cjs/numeric-field_5.cjs.entry.js +15 -15
  18. package/dist/cjs/page-renderer.cjs.entry.js +1 -1
  19. package/dist/cjs/question-configs-renderer_5.cjs.entry.js +14 -14
  20. package/dist/cjs/resource-timeline-calendar.cjs.entry.js +1 -1
  21. package/dist/cjs/search-method-grid.cjs.entry.js +1 -1
  22. package/dist/cjs/server-side-grid.cjs.entry.js +1 -1
  23. package/dist/cjs/simple-card.cjs.entry.js +1 -1
  24. package/dist/cjs/stencil-library.cjs.js +1 -1
  25. package/dist/cjs/udp-chip_3.cjs.entry.js +1 -1
  26. package/dist/cjs/udp-container-query-grid-item.cjs.entry.js +1 -1
  27. package/dist/cjs/udp-container-query-grid.cjs.entry.js +1 -1
  28. package/dist/cjs/udp-container-query.cjs.entry.js +2 -2
  29. package/dist/cjs/udp-container.cjs.entry.js +2 -2
  30. package/dist/cjs/udp-date-range-selector.cjs.entry.js +1 -1
  31. package/dist/cjs/udp-dynamic-form.cjs.entry.js +1 -1
  32. package/dist/cjs/udp-forms-follow-up-list-card.cjs.entry.js +2 -2
  33. package/dist/cjs/udp-forms-list-card.cjs.entry.js +5 -5
  34. package/dist/cjs/udp-forms-list.cjs.entry.js +1 -1
  35. package/dist/cjs/udp-forms-renderer.cjs.entry.js +1 -1
  36. package/dist/cjs/udp-list-renderer.udp-pagination.udp-side-sheet.entry.cjs.js.map +1 -1
  37. package/dist/cjs/udp-list-renderer_3.cjs.entry.js +194 -5
  38. package/dist/cjs/udp-map.cjs.entry.js +3 -3
  39. package/dist/cjs/udp-page.cjs.entry.js +1 -1
  40. package/dist/cjs/udp-split-screen.cjs.entry.js +1 -1
  41. package/dist/cjs/udp-stepper-demo.cjs.entry.js +1 -1
  42. package/dist/cjs/udp-tab-panel.cjs.entry.js +22 -0
  43. package/dist/cjs/udp-tab-panel.entry.cjs.js.map +1 -0
  44. package/dist/cjs/udp-vertical-spacer.cjs.entry.js +1 -1
  45. package/dist/collection/collection-manifest.json +1 -0
  46. package/dist/collection/components/my-component/UI/data-display/icons/udp-icon.js +4 -1
  47. package/dist/collection/components/my-component/UI/data-display/icons/udp-icon.js.map +1 -1
  48. package/dist/collection/components/my-component/UI/data-display/kpi/kpi-list.js +1 -1
  49. package/dist/collection/components/my-component/UI/data-display/list-item/list-item.js +2 -2
  50. package/dist/collection/components/my-component/UI/data-display/pop-over/udp-pop-over.js +1 -1
  51. package/dist/collection/components/my-component/UI/data-display/pop-over-grid-action-header/udp-pop-over-grid-action-header.js +1 -1
  52. package/dist/collection/components/my-component/UI/data-display/primary-action-header/primary-action-header.js +2 -2
  53. package/dist/collection/components/my-component/UI/data-display/simple-card/simple-card.js +1 -1
  54. package/dist/collection/components/my-component/UI/data-display/tool-tip/udp-ambient-tool-tip.js +2 -2
  55. package/dist/collection/components/my-component/UI/data-display/tree/tree-list-item/search-item/search-list-item.js +1 -1
  56. package/dist/collection/components/my-component/UI/data-display/udp-avatar/udp-avatar.js +1 -1
  57. package/dist/collection/components/my-component/UI/dialogs/fluent-dialog/fluent-dialog.js +2 -2
  58. package/dist/collection/components/my-component/UI/dialogs/udp-dialog.js +1 -1
  59. package/dist/collection/components/my-component/UI/drawers/udp-side-sheet/types.js +2 -0
  60. package/dist/collection/components/my-component/UI/drawers/udp-side-sheet/types.js.map +1 -0
  61. package/dist/collection/components/my-component/UI/drawers/udp-side-sheet/udp-side-sheet.css +163 -137
  62. package/dist/collection/components/my-component/UI/drawers/udp-side-sheet/udp-side-sheet.js +269 -19
  63. package/dist/collection/components/my-component/UI/drawers/udp-side-sheet/udp-side-sheet.js.map +1 -1
  64. package/dist/collection/components/my-component/UI/feedback/udp-notification/alerts/upd-alert-banner.js +1 -1
  65. package/dist/collection/components/my-component/UI/feedback/udp-notification/udp-notification.js +2 -2
  66. package/dist/collection/components/my-component/UI/forms/dynamic-form/udp-dynamic-form.js +1 -1
  67. package/dist/collection/components/my-component/UI/forms/edit-view-form/edit-view-form.js +2 -2
  68. package/dist/collection/components/my-component/UI/forms/form/stencil-form.js +1 -1
  69. package/dist/collection/components/my-component/UI/forms/save-view-form/save-view-form.js +2 -2
  70. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/forms-question-item/udp-forms-builder-question-item.js +2 -2
  71. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js +2 -2
  72. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js +3 -3
  73. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js +6 -6
  74. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/section-configs-renderer/section-configs-renderer.js +3 -3
  75. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js +1 -1
  76. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js +2 -2
  77. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-menu/udp-forms-builder-menu.js +2 -2
  78. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-builder/udp-forms-builder-style-override/udp-forms-builder-style-override.js +1 -1
  79. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js +5 -5
  80. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-list/udp-forms-list.js +1 -1
  81. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js +2 -2
  82. package/dist/collection/components/my-component/UI/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +1 -1
  83. package/dist/collection/components/my-component/UI/grid/ag-table/ag-table.js +1 -1
  84. package/dist/collection/components/my-component/UI/grid/ambient-template-grid/ambient-template-grid.js +15 -15
  85. package/dist/collection/components/my-component/UI/grid/grid-primary-bar/grid-primary-bar.js +2 -2
  86. package/dist/collection/components/my-component/UI/grid/hotlists/udp-hotlist-form/udp-hotlist-form.js +1 -1
  87. package/dist/collection/components/my-component/UI/grid/new-grid/ag-grid-base.js +1 -1
  88. package/dist/collection/components/my-component/UI/grid/new-grid/api-method-instance-grid.js +1 -1
  89. package/dist/collection/components/my-component/UI/grid/new-grid/client-side-grid.js +1 -1
  90. package/dist/collection/components/my-component/UI/grid/new-grid/entity-maintenance-grid.js +1 -1
  91. package/dist/collection/components/my-component/UI/grid/new-grid/search-method-grid.js +1 -1
  92. package/dist/collection/components/my-component/UI/grid/new-grid/server-side-grid.js +1 -1
  93. package/dist/collection/components/my-component/UI/grid/resource-timeline-calendar/resource-timeline-calendar.js +1 -1
  94. package/dist/collection/components/my-component/UI/grid/resource-timeline-calendar/resource-timeline-primary-bar.js +2 -2
  95. package/dist/collection/components/my-component/UI/inputs/checkbox/check-box.js +2 -2
  96. package/dist/collection/components/my-component/UI/inputs/date-range-selector/udp-date-range-selector.js +1 -1
  97. package/dist/collection/components/my-component/UI/inputs/date-selector/udp-date-selector.js +3 -3
  98. package/dist/collection/components/my-component/UI/inputs/date-time-selector/udp-datetime-selector.js +3 -3
  99. package/dist/collection/components/my-component/UI/inputs/image-upload/image-upload.js +1 -1
  100. package/dist/collection/components/my-component/UI/inputs/numeric-field/numeric-field.js +3 -3
  101. package/dist/collection/components/my-component/UI/inputs/signature-input/signature-input.js +2 -2
  102. package/dist/collection/components/my-component/UI/inputs/tally/tally.js +2 -2
  103. package/dist/collection/components/my-component/UI/inputs/text-area/text-area.js +3 -3
  104. package/dist/collection/components/my-component/UI/inputs/text-field/text-field.js +3 -3
  105. package/dist/collection/components/my-component/UI/inputs/time-selector/udp-time-selector.js +3 -3
  106. package/dist/collection/components/my-component/UI/inputs/toggle/stencil-toggle.js +4 -4
  107. package/dist/collection/components/my-component/UI/inputs/udp-selector/udp-selector.js +4 -4
  108. package/dist/collection/components/my-component/UI/layout/udp-container/udp-container.js +2 -2
  109. package/dist/collection/components/my-component/UI/layout/udp-container-query/udp-container-query.js +2 -2
  110. package/dist/collection/components/my-component/UI/layout/udp-container-query-grid/udp-container-query-grid.js +1 -1
  111. package/dist/collection/components/my-component/UI/layout/udp-container-query-grid-item/udp-container-query-grid-item.js +1 -1
  112. package/dist/collection/components/my-component/UI/layout/udp-page/udp-page.js +1 -1
  113. package/dist/collection/components/my-component/UI/layout/udp-split-screen/udp-split-screen.js +1 -1
  114. package/dist/collection/components/my-component/UI/layout/udp-vertical-spacer.js +1 -1
  115. package/dist/collection/components/my-component/UI/loaders/udp-grid-loader/udp-grid-loader.js +2 -2
  116. package/dist/collection/components/my-component/UI/loaders/udp-linear-loader/udp-linear-loader.js +1 -1
  117. package/dist/collection/components/my-component/UI/loaders/udp-skeleton-loading.js +1 -1
  118. package/dist/collection/components/my-component/UI/map/udp-map/map-component.js +1 -1
  119. package/dist/collection/components/my-component/UI/map/udp-map/popups/add-map-feature-popup.js +3 -3
  120. package/dist/collection/components/my-component/UI/map/udp-map/popups/feature-details-card/feature-details-card.js +4 -4
  121. package/dist/collection/components/my-component/UI/map/udp-map/popups/feature-details-popup.js +1 -1
  122. package/dist/collection/components/my-component/UI/map/udp-map/popups/select-layer-popup.js +2 -2
  123. package/dist/collection/components/my-component/UI/map/udp-map/popups/split-line-popup.js +1 -1
  124. package/dist/collection/components/my-component/UI/map/udp-map/toolbar/map-toolbar.js +6 -6
  125. package/dist/collection/components/my-component/UI/map/udp-map/udp-map-toolbar.js +1 -1
  126. package/dist/collection/components/my-component/UI/map/udp-map/udp-map.js +3 -3
  127. package/dist/collection/components/my-component/UI/menu/menu-item/udp-menu-item.js +1 -1
  128. package/dist/collection/components/my-component/UI/menu/udp-menu.js +1 -1
  129. package/dist/collection/components/my-component/UI/stepper/udp-stepper-demo.js +1 -1
  130. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.css +0 -5
  131. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.js +170 -37
  132. package/dist/collection/components/my-component/UI/tabs/tab/tabs/udp-tabs.js.map +1 -1
  133. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.css +2 -4
  134. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.js +3 -3
  135. package/dist/collection/components/my-component/UI/tabs/tab/udp-tab.js.map +1 -1
  136. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.css +11 -0
  137. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.js +65 -0
  138. package/dist/collection/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.js.map +1 -0
  139. package/dist/collection/components/my-component/UI/toolbars/app-bar/app-bar.js +1 -1
  140. package/dist/collection/components/my-component/UI/util/ghost-render/ghost-render.js +1 -1
  141. package/dist/collection/components/my-component/demo/ambient-demo-container.js +1 -1
  142. package/dist/collection/components/test-component/inputs-example/inputs-example.js +2 -2
  143. package/dist/collection/page-renderer/page-renderer.js +1 -1
  144. package/dist/collection/theme/color-preview/color-preview.js +1 -1
  145. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/chip-section/chip-section.js +2 -2
  146. package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/udp-dynamic-container-with-menu.js +1 -1
  147. package/dist/components/add-map-feature-popup2.js +3 -3
  148. package/dist/components/ag-grid-base2.js +1 -1
  149. package/dist/components/ag-table2.js +1 -1
  150. package/dist/components/ambient-demo-container2.js +1 -1
  151. package/dist/components/ambient-template-grid2.js +15 -15
  152. package/dist/components/api-method-instance-grid.js +1 -1
  153. package/dist/components/app-bar2.js +1 -1
  154. package/dist/components/check-box2.js +2 -2
  155. package/dist/components/chip-section.js +2 -2
  156. package/dist/components/client-side-grid2.js +1 -1
  157. package/dist/components/color-preview.js +1 -1
  158. package/dist/components/edit-view-form.js +2 -2
  159. package/dist/components/entity-maintenance-grid.js +1 -1
  160. package/dist/components/feature-details-card2.js +4 -4
  161. package/dist/components/feature-details-popup2.js +1 -1
  162. package/dist/components/file-upload-renderer2.js +2 -2
  163. package/dist/components/fluent-dialog2.js +2 -2
  164. package/dist/components/ghost-render2.js +1 -1
  165. package/dist/components/grid-primary-bar2.js +2 -2
  166. package/dist/components/image-upload2.js +1 -1
  167. package/dist/components/inputs-example.js +2 -2
  168. package/dist/components/kpi-list2.js +1 -1
  169. package/dist/components/list-item.js +2 -2
  170. package/dist/components/list-options-renderer2.js +3 -3
  171. package/dist/components/map-component2.js +1 -1
  172. package/dist/components/map-toolbar2.js +6 -6
  173. package/dist/components/numeric-field2.js +3 -3
  174. package/dist/components/page-renderer.js +1 -1
  175. package/dist/components/primary-action-header2.js +2 -2
  176. package/dist/components/question-configs-renderer2.js +6 -6
  177. package/dist/components/resource-timeline-calendar.js +1 -1
  178. package/dist/components/resource-timeline-primary-bar2.js +2 -2
  179. package/dist/components/save-view-form.js +2 -2
  180. package/dist/components/search-list-item2.js +1 -1
  181. package/dist/components/search-method-grid2.js +1 -1
  182. package/dist/components/section-configs-renderer2.js +3 -3
  183. package/dist/components/select-layer-popup2.js +2 -2
  184. package/dist/components/server-side-grid2.js +1 -1
  185. package/dist/components/signature-input2.js +2 -2
  186. package/dist/components/signature-renderer2.js +1 -1
  187. package/dist/components/simple-card.js +1 -1
  188. package/dist/components/split-line-popup2.js +1 -1
  189. package/dist/components/stencil-form2.js +1 -1
  190. package/dist/components/stencil-toggle2.js +4 -4
  191. package/dist/components/tally.js +2 -2
  192. package/dist/components/text-area2.js +3 -3
  193. package/dist/components/text-field2.js +3 -3
  194. package/dist/components/text-input-renderer2.js +2 -2
  195. package/dist/components/udp-ambient-tool-tip2.js +2 -2
  196. package/dist/components/udp-avatar2.js +1 -1
  197. package/dist/components/udp-container-query-grid-item.js +1 -1
  198. package/dist/components/udp-container-query-grid.js +1 -1
  199. package/dist/components/udp-container-query2.js +2 -2
  200. package/dist/components/udp-container2.js +2 -2
  201. package/dist/components/udp-date-range-selector.js +1 -1
  202. package/dist/components/udp-date-selector2.js +3 -3
  203. package/dist/components/udp-datetime-selector2.js +3 -3
  204. package/dist/components/udp-dialog2.js +1 -1
  205. package/dist/components/udp-dynamic-container-with-menu2.js +1 -1
  206. package/dist/components/udp-dynamic-form.js +1 -1
  207. package/dist/components/udp-forms-builder-menu2.js +2 -2
  208. package/dist/components/udp-forms-builder-question-item2.js +2 -2
  209. package/dist/components/udp-forms-builder-style-override2.js +1 -1
  210. package/dist/components/udp-forms-builder.js +72 -60
  211. package/dist/components/udp-forms-builder.js.map +1 -1
  212. package/dist/components/udp-forms-follow-up-list-card.js +2 -2
  213. package/dist/components/udp-forms-list-card2.js +5 -5
  214. package/dist/components/udp-forms-list.js +51 -39
  215. package/dist/components/udp-forms-list.js.map +1 -1
  216. package/dist/components/udp-forms-renderer.js +67 -55
  217. package/dist/components/udp-forms-renderer.js.map +1 -1
  218. package/dist/components/udp-grid-loader2.js +2 -2
  219. package/dist/components/udp-hotlist-form2.js +1 -1
  220. package/dist/components/udp-icon2.js +4 -1
  221. package/dist/components/udp-icon2.js.map +1 -1
  222. package/dist/components/udp-linear-loader2.js +1 -1
  223. package/dist/components/udp-map-toolbar2.js +1 -1
  224. package/dist/components/udp-map.js +3 -3
  225. package/dist/components/udp-menu-item2.js +1 -1
  226. package/dist/components/udp-menu2.js +1 -1
  227. package/dist/components/udp-notification2.js +2 -2
  228. package/dist/components/udp-page.js +1 -1
  229. package/dist/components/udp-pop-over-grid-action-header2.js +1 -1
  230. package/dist/components/udp-pop-over2.js +1 -1
  231. package/dist/components/udp-selector2.js +4 -4
  232. package/dist/components/udp-side-sheet2.js +228 -19
  233. package/dist/components/udp-side-sheet2.js.map +1 -1
  234. package/dist/components/udp-skeleton-loading2.js +1 -1
  235. package/dist/components/udp-split-screen.js +1 -1
  236. package/dist/components/udp-stepper-demo.js +1 -1
  237. package/dist/components/udp-tab-panel.d.ts +11 -0
  238. package/dist/components/udp-tab-panel.js +45 -0
  239. package/dist/components/udp-tab-panel.js.map +1 -0
  240. package/dist/components/udp-tab2.js +3 -3
  241. package/dist/components/udp-tab2.js.map +1 -1
  242. package/dist/components/udp-tabs2.js +114 -40
  243. package/dist/components/udp-tabs2.js.map +1 -1
  244. package/dist/components/udp-time-selector2.js +3 -3
  245. package/dist/components/udp-vertical-spacer.js +1 -1
  246. package/dist/components/upd-alert-banner2.js +1 -1
  247. package/dist/docs.json +263 -31
  248. package/dist/esm/add-map-feature-popup_4.entry.js +12 -12
  249. package/dist/esm/advanced-search_50.entry.js +169 -96
  250. package/dist/esm/ag-grid-base_5.entry.js +5 -5
  251. package/dist/esm/api-method-instance-grid.entry.js +1 -1
  252. package/dist/esm/check-box.entry.js +2 -2
  253. package/dist/esm/chip-section.entry.js +2 -2
  254. package/dist/esm/client-side-grid_2.entry.js +3 -3
  255. package/dist/esm/color-preview.entry.js +1 -1
  256. package/dist/esm/date-time-renderer_6.entry.js +8 -8
  257. package/dist/esm/entity-maintenance-grid.entry.js +1 -1
  258. package/dist/esm/feature-details-card_2.entry.js +5 -5
  259. package/dist/esm/image-upload_7.entry.js +6 -6
  260. package/dist/esm/index-n-1ZSeAs.js +4 -0
  261. package/dist/esm/inputs-example.entry.js +2 -2
  262. package/dist/esm/loader.js +1 -1
  263. package/dist/esm/map-component_2.entry.js +2 -2
  264. package/dist/esm/numeric-field_5.entry.js +15 -15
  265. package/dist/esm/page-renderer.entry.js +1 -1
  266. package/dist/esm/question-configs-renderer_5.entry.js +14 -14
  267. package/dist/esm/resource-timeline-calendar.entry.js +1 -1
  268. package/dist/esm/search-method-grid.entry.js +1 -1
  269. package/dist/esm/server-side-grid.entry.js +1 -1
  270. package/dist/esm/simple-card.entry.js +1 -1
  271. package/dist/esm/stencil-library.js +1 -1
  272. package/dist/esm/udp-chip_3.entry.js +1 -1
  273. package/dist/esm/udp-container-query-grid-item.entry.js +1 -1
  274. package/dist/esm/udp-container-query-grid.entry.js +1 -1
  275. package/dist/esm/udp-container-query.entry.js +2 -2
  276. package/dist/esm/udp-container.entry.js +2 -2
  277. package/dist/esm/udp-date-range-selector.entry.js +1 -1
  278. package/dist/esm/udp-dynamic-form.entry.js +1 -1
  279. package/dist/esm/udp-forms-follow-up-list-card.entry.js +2 -2
  280. package/dist/esm/udp-forms-list-card.entry.js +5 -5
  281. package/dist/esm/udp-forms-list.entry.js +1 -1
  282. package/dist/esm/udp-forms-renderer.entry.js +1 -1
  283. package/dist/esm/udp-list-renderer.udp-pagination.udp-side-sheet.entry.js.map +1 -1
  284. package/dist/esm/udp-list-renderer_3.entry.js +194 -5
  285. package/dist/esm/udp-map.entry.js +3 -3
  286. package/dist/esm/udp-page.entry.js +1 -1
  287. package/dist/esm/udp-split-screen.entry.js +1 -1
  288. package/dist/esm/udp-stepper-demo.entry.js +1 -1
  289. package/dist/esm/udp-tab-panel.entry.js +20 -0
  290. package/dist/esm/udp-tab-panel.entry.js.map +1 -0
  291. package/dist/esm/udp-vertical-spacer.entry.js +1 -1
  292. package/dist/stencil-library/add-map-feature-popup_4.entry.js +1 -1
  293. package/dist/stencil-library/advanced-search_50.entry.js +1 -1
  294. package/dist/stencil-library/advanced-search_50.entry.js.map +1 -1
  295. package/dist/stencil-library/ag-grid-base_5.entry.js +1 -1
  296. package/dist/stencil-library/api-method-instance-grid.entry.js +1 -1
  297. package/dist/stencil-library/check-box.entry.js +1 -1
  298. package/dist/stencil-library/chip-section.entry.js +1 -1
  299. package/dist/stencil-library/client-side-grid_2.entry.js +1 -1
  300. package/dist/stencil-library/color-preview.entry.js +1 -1
  301. package/dist/stencil-library/date-time-renderer_6.entry.js +1 -1
  302. package/dist/stencil-library/entity-maintenance-grid.entry.js +1 -1
  303. package/dist/stencil-library/feature-details-card_2.entry.js +1 -1
  304. package/dist/stencil-library/image-upload_7.entry.js +1 -1
  305. package/dist/stencil-library/inputs-example.entry.js +1 -1
  306. package/dist/stencil-library/map-component_2.entry.js +1 -1
  307. package/dist/stencil-library/numeric-field_5.entry.js +1 -1
  308. package/dist/stencil-library/page-renderer.entry.js +1 -1
  309. package/dist/stencil-library/question-configs-renderer_5.entry.js +1 -1
  310. package/dist/stencil-library/resource-timeline-calendar.entry.js +1 -1
  311. package/dist/stencil-library/search-method-grid.entry.js +1 -1
  312. package/dist/stencil-library/server-side-grid.entry.js +1 -1
  313. package/dist/stencil-library/simple-card.entry.js +1 -1
  314. package/dist/stencil-library/simple-card.entry.js.map +1 -1
  315. package/dist/stencil-library/stencil-library.esm.js +1 -1
  316. package/dist/stencil-library/udp-chip_3.entry.js +1 -1
  317. package/dist/stencil-library/udp-container-query-grid-item.entry.js +1 -1
  318. package/dist/stencil-library/udp-container-query-grid.entry.js +1 -1
  319. package/dist/stencil-library/udp-container-query.entry.js +1 -1
  320. package/dist/stencil-library/udp-container.entry.js +1 -1
  321. package/dist/stencil-library/udp-date-range-selector.entry.js +1 -1
  322. package/dist/stencil-library/udp-dynamic-form.entry.js +1 -1
  323. package/dist/stencil-library/udp-forms-follow-up-list-card.entry.js +1 -1
  324. package/dist/stencil-library/udp-forms-list-card.entry.js +1 -1
  325. package/dist/stencil-library/udp-forms-list.entry.js +1 -1
  326. package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
  327. package/dist/stencil-library/udp-list-renderer.udp-pagination.udp-side-sheet.entry.esm.js.map +1 -1
  328. package/dist/stencil-library/udp-list-renderer_3.entry.js +1 -1
  329. package/dist/stencil-library/udp-list-renderer_3.entry.js.map +1 -1
  330. package/dist/stencil-library/udp-map.entry.js +1 -1
  331. package/dist/stencil-library/udp-page.entry.js +1 -1
  332. package/dist/stencil-library/udp-split-screen.entry.js +1 -1
  333. package/dist/stencil-library/udp-stepper-demo.entry.js +1 -1
  334. package/dist/stencil-library/udp-tab-panel.entry.esm.js.map +1 -0
  335. package/dist/stencil-library/udp-tab-panel.entry.js +2 -0
  336. package/dist/stencil-library/udp-tab-panel.entry.js.map +1 -0
  337. package/dist/stencil-library/udp-vertical-spacer.entry.js +1 -1
  338. package/dist/types/components/my-component/UI/drawers/udp-side-sheet/types.d.ts +7 -0
  339. package/dist/types/components/my-component/UI/drawers/udp-side-sheet/udp-side-sheet.d.ts +114 -0
  340. package/dist/types/components/my-component/UI/tabs/tab/tabs/udp-tabs.d.ts +47 -4
  341. package/dist/types/components/my-component/UI/tabs/tab/udp-tab.d.ts +1 -1
  342. package/dist/types/components/my-component/UI/tabs/udp-tab-panel/udp-tab-panel.d.ts +11 -0
  343. package/dist/types/components.d.ts +151 -2
  344. package/package.json +1 -1
@@ -15,7 +15,7 @@ const UdpSkeletonLoading = /*@__PURE__*/ proxyCustomElement(class UdpSkeletonLoa
15
15
  this.borderRadius = '4px';
16
16
  }
17
17
  render() {
18
- return (h("div", { key: 'a55df89b16c067a579ec4177039da791543c92d8', class: "skeleton-loader", style: { width: this.width, height: this.height, borderRadius: this.borderRadius } }));
18
+ return (h("div", { key: '8af6143940732dff91329dbd3acd7f0f9b9f2f97', class: "skeleton-loader", style: { width: this.width, height: this.height, borderRadius: this.borderRadius } }));
19
19
  }
20
20
  static get style() { return udpSkeletonLoadingCss; }
21
21
  }, [257, "udp-skeleton-loading", {
@@ -59,7 +59,7 @@ const UdpSplitScreen$1 = /*@__PURE__*/ proxyCustomElement(class UdpSplitScreen e
59
59
  }
60
60
  }
61
61
  render() {
62
- return (h("div", { key: '6de7d4288cb53149ae06ed973443b31ecd898015', ref: (el) => this.element = el, class: { 'container': true, 'open': this.isOpen } }, h("div", { key: 'a47d6eb52c88ec9c52d895af81ad722c1d5b4df0', class: "panel", style: { width: `${this.panelWidth}%` } }, h("slot", { key: '8fe4023b236098476be1c7e113f94377d1396f89', name: "first-panel" })), h("div", { key: 'fb98abdfcefa4cd6e8dccd077c911033169244da', class: "resizer", onMouseDown: (event) => event.preventDefault() }, h("div", { key: '1db3f8ad5295c7feeecbe77a02af8f5cea712be6', class: "drag-handle" })), h("div", { key: '6b8a9feb47f10756bab8a3cf2fa2aac2069627b4', class: "panel", style: { width: `${100 - this.panelWidth}%` } }, h("slot", { key: '26a15ac5efaae765de72034e8359dfd2a51be80d', name: "second-panel" }, this.panelContent))));
62
+ return (h("div", { key: 'ca232222c0c85071eb987d373ad1541631070e3e', ref: (el) => this.element = el, class: { 'container': true, 'open': this.isOpen } }, h("div", { key: 'c221965b0e7542253986c878b05cc656289431e9', class: "panel", style: { width: `${this.panelWidth}%` } }, h("slot", { key: '4edf17b48cf6d2e89826878ede587f0a9e2ce1e8', name: "first-panel" })), h("div", { key: '51b5ea69206ebf1221cbb9dbed3f9456fbf54c59', class: "resizer", onMouseDown: (event) => event.preventDefault() }, h("div", { key: '86d906ebb8e8561e7e564b6c8b4af62a03e1653c', class: "drag-handle" })), h("div", { key: '28fba6e4b0f176b7e08c1f29a3edc045f66346e8', class: "panel", style: { width: `${100 - this.panelWidth}%` } }, h("slot", { key: 'b1215db69a194eced28d595a39322afbe4c7ccde', name: "second-panel" }, this.panelContent))));
63
63
  }
64
64
  static get style() { return udpSplitScreenCss; }
65
65
  }, [257, "udp-split-screen", {
@@ -99,7 +99,7 @@ const UdpStepperDemo$1 = /*@__PURE__*/ proxyCustomElement(class UdpStepperDemo e
99
99
  };
100
100
  }
101
101
  render() {
102
- return (h("div", { key: 'afad6510846a9c4d5d83344d045915061c40e4da', style: { padding: '2rem' } }, h("unity-typography", { key: '39114ea64804d8441c90ab2b4bac9175509128f1', variant: "h2" }, "Horizontal Stepper with Labels bottom"), h("udp-stepper", { key: '4525e5ceb4a92ddc679690ba2762bfaff5b09218', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "all", labelPosition: "bottom" }), h("unity-typography", { key: 'c28dc5a2348e1af8e544a33d6f359d32d7f326ea', variant: "h2" }, "Horizontal Stepper without Labels"), h("udp-stepper", { key: 'bc50999f3a4b9f150d3f932101221c9c6b992fdc', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "none", labelPosition: "bottom" }), h("unity-typography", { key: 'a5fb283cd408dae5a92b5bbcb999849d29c4114e', variant: "h2" }, "Horizontal Stepper with Labels to Right"), h("udp-stepper", { key: 'cc34b5cfd9e2a29dc5f23c229e28ff6e3bb4fccd', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "all", labelPosition: "right" }), h("unity-typography", { key: '6d602c582f6ebc764cb46f0bc3a7b7322da22217', variant: "h2" }, "Vertical Stepper"), h("udp-stepper", { key: 'f530054751640c808efa3a1abdfea025402283a8', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "vertical", labelDisplay: "all", labelPosition: "right" })));
102
+ return (h("div", { key: 'e81619ca3c31f9f6662c0b3af6c02a2db3e3f564', style: { padding: '2rem' } }, h("unity-typography", { key: '5e11e57915b6081e460f47a344dd31bf722d7e5b', variant: "h2" }, "Horizontal Stepper with Labels bottom"), h("udp-stepper", { key: 'ec35e19cc92d59c85818becd4e4d56e065df5dc3', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "all", labelPosition: "bottom" }), h("unity-typography", { key: 'f0011595e8eb435dd85b6c6c2570029a3cbd6afc', variant: "h2" }, "Horizontal Stepper without Labels"), h("udp-stepper", { key: 'afe54dc4d369c757dcb6ba5fe455e84c95e86f07', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "none", labelPosition: "bottom" }), h("unity-typography", { key: '394396ffff23cc1f4d99611bc3ccceeb096a2c1e', variant: "h2" }, "Horizontal Stepper with Labels to Right"), h("udp-stepper", { key: '104aaf080e02cd0c9da8a84cf911b721883e0a37', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "horizontal", labelDisplay: "all", labelPosition: "right" }), h("unity-typography", { key: '90b1aaf901ca38b48c5584c0fb79d75a0f5a2a8c', variant: "h2" }, "Vertical Stepper"), h("udp-stepper", { key: '219567475d5ea693bd77641df12c20ee9360367d', steps: this.steps, activeStep: this.activeStep, completed: this.completed, stepChange: this.handleStepChange, orientation: "vertical", labelDisplay: "all", labelPosition: "right" })));
103
103
  }
104
104
  }, [257, "udp-stepper-demo", {
105
105
  "activeStep": [32],
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface UdpTabPanel extends Components.UdpTabPanel, HTMLElement {}
4
+ export const UdpTabPanel: {
5
+ prototype: UdpTabPanel;
6
+ new (): UdpTabPanel;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -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: 'eaa68aa3e874dbf92d218eed44f6332efd7b4946', class: {
16
+ 'tab-panel': true,
17
+ 'active': isActive,
18
+ }, role: "tabpanel", "aria-hidden": !isActive ? 'true' : 'false' }, h("slot", { key: '5ebaeac17012121bcdf75249edd5042f47473f58' })));
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) {
@@ -30,11 +30,11 @@ const UdpTab = /*@__PURE__*/ proxyCustomElement(class UdpTab extends H {
30
30
  this.disabled = false;
31
31
  }
32
32
  render() {
33
- return (h("div", { key: '0dbc41862f8bb01ecfec94ca44f082f0e4e7104f', class: { 'tab-panel': true, 'active': this.active }, role: "tabpanel" }, h("slot", { key: 'facc5f18260ea67c405dca1a90dcdc48e5ec995c' })));
33
+ return (h("div", { key: '20ba03ac77abb9cde63aa864aac67db7c57bf66a', class: { 'tab-panel': true, 'active': this.active }, role: "tabpanel" }, h("slot", { key: 'd4b0450e94770421adae0e47c0b868d00cdf772d' })));
34
34
  }
35
35
  static get style() { return udpTabCss; }
36
36
  }, [260, "udp-tab", {
37
- "title": [1],
37
+ "label": [1],
38
38
  "active": [516],
39
39
  "icon": [1],
40
40
  "iconPlacement": [1, "icon-placement"],
@@ -1 +1 @@
1
- {"file":"udp-tab2.js","mappings":";;AAAA,MAAM,SAAS,GAAG,mFAAmF;;MCMxF,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 background-color: #ffffff;\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() title: 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
+ {"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,7 +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
2
  import { d as defineCustomElement$1 } from './udp-icon2.js';
3
3
 
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}.tab-content{padding:16px;background-color:#ffffff}.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
+ 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}";
5
5
 
6
6
  const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
7
7
  constructor(registerHost) {
@@ -10,6 +10,7 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
10
10
  this.__registerHost();
11
11
  }
12
12
  this.__attachShadow();
13
+ this.udpTabChange = createEvent(this, "udpTabChange");
13
14
  /**
14
15
  * Specifies the layout variant of the tab header.
15
16
  *
@@ -17,18 +18,46 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
17
18
  * - `'fill'`: Tabs will stretch to fill the available horizontal space.
18
19
  */
19
20
  this.variant = 'fill';
20
- this.activeTab = 0;
21
- this.tabDetails = []; // Uses new interface
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
22
29
  this.sliderStyle = {
23
30
  width: '0',
24
31
  transform: 'translateX(0)',
25
32
  };
26
33
  this.showScrollLeft = false;
27
34
  this.showScrollRight = false;
28
- this.tabs = [];
35
+ this.slottedTabs = []; // Renamed from `tabs`
29
36
  this.buttonRefs = [];
30
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
+ }
31
57
  handleSlotChange() {
58
+ // If we're using the tabs prop, slot changes are irrelevant
59
+ if (this.useTabsProp)
60
+ return;
32
61
  this.initializeTabs();
33
62
  }
34
63
  handleResize() {
@@ -40,9 +69,27 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
40
69
  componentDidLoad() {
41
70
  this.initializeTabs();
42
71
  }
43
- onActiveTabChange() {
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) {
44
84
  this.updateActiveTabs();
45
85
  this.updateSliderPosition();
86
+ this.scrollTabIntoView(newValue);
87
+ }
88
+ /**
89
+ * Watcher for tabs prop changes.
90
+ */
91
+ onTabsPropChange() {
92
+ this.initializeTabs();
46
93
  }
47
94
  onVariantChange() {
48
95
  requestAnimationFrame(() => {
@@ -53,21 +100,29 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
53
100
  initializeTabs() {
54
101
  var _a, _b;
55
102
  this.buttonRefs = [];
56
- // Get ALL tabs from the slot
57
- this.tabs = Array.from(this.el.children).filter((child) => child.tagName.toLowerCase() === 'udp-tab');
58
- this.tabDetails = this.tabs.map(tab => ({
59
- title: tab.title,
60
- icon: tab.icon,
61
- iconPlacement: tab.iconPlacement,
62
- hidden: tab.hidden,
63
- disabled: tab.disabled,
64
- }));
65
- // Check if the current activeTab (default 0) is invalid
66
- if (((_a = this.tabDetails[this.activeTab]) === null || _a === void 0 ? void 0 : _a.hidden) || ((_b = this.tabDetails[this.activeTab]) === null || _b === void 0 ? void 0 : _b.disabled)) {
67
- // If it is, find the first valid tab to select
68
- const firstValidIndex = this.tabDetails.findIndex(tab => !tab.hidden && !tab.disabled);
69
- // If we found one, set it. If not (all tabs invalid), set to -1
70
- this.activeTab = firstValidIndex;
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
+ }
71
126
  }
72
127
  this.updateActiveTabs();
73
128
  requestAnimationFrame(() => {
@@ -76,12 +131,17 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
76
131
  });
77
132
  }
78
133
  updateActiveTabs() {
79
- this.tabs.forEach((tab, index) => {
80
- tab.active = index === this.activeTab;
81
- });
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()
82
142
  }
83
143
  updateSliderPosition() {
84
- const activeButton = this.buttonRefs[this.activeTab];
144
+ const activeButton = this.buttonRefs[this.activeTab]; // Use getter
85
145
  if (!activeButton) {
86
146
  this.sliderStyle = { width: '0px', transform: 'translateX(0px)' };
87
147
  return;
@@ -104,7 +164,18 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
104
164
  if ((_a = this.tabDetails[tabIndex]) === null || _a === void 0 ? void 0 : _a.disabled) {
105
165
  return;
106
166
  }
107
- this.activeTab = tabIndex;
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) {
108
179
  const tabButton = this.buttonRefs[tabIndex];
109
180
  const container = this.scrollContainerRef;
110
181
  if (!tabButton || !container)
@@ -115,20 +186,16 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
115
186
  const safeZonePadding = 70;
116
187
  const safeZoneLeft = scrollLeft + safeZonePadding;
117
188
  const safeZoneRight = scrollLeft + clientWidth - safeZonePadding;
118
- // Check if the tab's left edge is hidden by the left fade
119
189
  if (tabLeft < safeZoneLeft) {
120
- // Scroll to position the tab's left edge at the start of the safe zone
121
190
  container.scrollTo({
122
191
  left: tabLeft - safeZonePadding,
123
- behavior: 'smooth'
192
+ behavior: 'smooth',
124
193
  });
125
194
  }
126
- // Check if the tab's right edge is hidden by the right fade
127
195
  else if (tabRight > safeZoneRight) {
128
- // Scroll to position the tab's right edge at the end of the safe zone
129
196
  container.scrollTo({
130
197
  left: tabRight - clientWidth + safeZonePadding,
131
- behavior: 'smooth'
198
+ behavior: 'smooth',
132
199
  });
133
200
  }
134
201
  }
@@ -146,37 +213,44 @@ const UdpTabs = /*@__PURE__*/ proxyCustomElement(class UdpTabs extends H {
146
213
  container.scrollTo({ left: maxScrollLeft, behavior: 'smooth' });
147
214
  }
148
215
  render() {
149
- return (h("div", { key: '173d42a32bb4ed0cbd57950e38bb75ab216efda1', class: "tab-container" }, h("div", { key: '369754b2aeed74f35f5e7be39b6617081c41cad2', class: `tab-header ${this.variant}` }, this.showScrollLeft && (h("button", { key: '68fefbbb9e8c95f54b3a78d700698d61b1c0b8bc', class: "scroll-arrow left", onClick: () => this.scrollToStart(), "aria-label": "Scroll to first tab" }, h("udp-icon", { key: 'f2230bcf77a4ef6cfc972f3219023c8da4607e2e', iconName: "chevronLeft16", color: "inherit" }))), this.showScrollLeft && h("div", { key: '69476b6d664f2b42b7a102275999f131e1b397f0', class: "scroll-fade left" }), h("div", { key: 'a12d5b22ec762e52091770b1ed276a7df8267437', class: "tab-scroll-container", ref: el => (this.scrollContainerRef = el), onScroll: () => this.checkScroll() }, this.tabDetails.map((tab, index) => {
216
+ const currentActiveTab = this.activeTab; // Use getter
217
+ return (h("div", { key: '7446df2caa768cb8161b59992cdbbf5bbae2146f', class: "tab-container" }, h("div", { key: '78eb57f157f69543baaf8eab9b5282cdba37bbb9', class: `tab-header ${this.variant}` }, this.showScrollLeft && (h("button", { key: 'eb45ebcbfd365a68412c9fa098669085925b5ab9', class: "scroll-arrow left", onClick: () => this.scrollToStart(), "aria-label": "Scroll to first tab" }, h("udp-icon", { key: '0066a09a8942b0624b3a6260a0934ce372e51473', iconName: "chevronLeft16", color: "inherit" }))), this.showScrollLeft && h("div", { key: 'd356a1ebae93318b97e7e9ada3d21fd44e9b1f37', class: "scroll-fade left" }), h("div", { key: '0040b9a6ff0dc8c8881a17b8c4d3f435cf2c67b3', class: "tab-scroll-container", ref: el => (this.scrollContainerRef = el), onScroll: () => this.checkScroll() }, this.tabDetails.map((tab, index) => {
150
218
  if (tab.hidden) {
151
219
  return null;
152
220
  }
153
221
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
154
222
  const iconEl = tab.icon ? h("udp-icon", { iconName: tab.icon, color: 'inherit' }) : null;
155
223
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
156
- const titleEl = h("span", null, tab.title);
224
+ const labelEl = h("span", null, tab.label);
157
225
  return (h("button", { class: {
158
- 'active': index === this.activeTab,
226
+ 'active': index === currentActiveTab,
159
227
  'has-icon': !!tab.icon,
160
228
  [`icon-${tab.iconPlacement}`]: !!tab.icon,
161
229
  'disabled': tab.disabled,
162
- }, disabled: tab.disabled, onClick: () => this.tabClicked(index), role: "tab", "aria-selected": index === this.activeTab ? 'true' : 'false', "aria-disabled": tab.disabled ? 'true' : 'false', ref: el => (this.buttonRefs[index] = el) }, iconEl, titleEl));
163
- }), h("div", { key: '6726c5fd74d32e9385aa83aaf88ab92e9d83d858', class: "slider", style: this.sliderStyle })), this.showScrollRight && h("div", { key: 'ce175b2bb6465211587af95995375d315a0e6fed', class: "scroll-fade right" }), this.showScrollRight && (h("button", { key: '63dbc5cd40921b7b39c75377986ba37b5d69c93a', class: "scroll-arrow right", onClick: () => this.scrollToEnd(), "aria-label": "Scroll to last tab" }, h("udp-icon", { key: 'b191a3a90cdecf10abf94dc98fbf16bd973ee1e1', iconName: "chevronRight16", color: "inherit" })))), h("div", { key: '3ffe241125e1fa6969cf9fcce49350d63f82bee6', class: "tab-content" }, h("slot", { key: 'a6fe2932604e485e85f0a860ee58633f8bf161b6' }))));
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: '7470bff947872896ee283c35cf37a45fb2a64631', class: "slider", style: this.sliderStyle })), this.showScrollRight && h("div", { key: '820c57b5782c5c85f220fd7b7909351f4a76fcec', class: "scroll-fade right" }), this.showScrollRight && (h("button", { key: 'f8db99b5f8a7401449c3a55eb170b341eaf26df1', class: "scroll-arrow right", onClick: () => this.scrollToEnd(), "aria-label": "Scroll to last tab" }, h("udp-icon", { key: 'b14c8c86928352c683d1140c2b3ba2dd92ebee7f', iconName: "chevronRight16", color: "inherit" })))), !this.isControlled && !this.useTabsProp && (h("div", { key: '95a11117862494527b06f1d5a8c92234a24e89d0' }, h("slot", { key: '4621baa5801a228fc9beb38e3b9b30dc7260e41a' })))));
164
232
  }
165
233
  get el() { return this; }
166
234
  static get watchers() { return {
167
- "activeTab": ["onActiveTabChange"],
235
+ "internalActiveTab": ["onActiveTabChange"],
236
+ "value": ["onValueChange"],
237
+ "tabs": ["onTabsPropChange"],
168
238
  "variant": ["onVariantChange"]
169
239
  }; }
170
240
  static get style() { return udpTabsCss; }
171
241
  }, [257, "udp-tabs", {
172
242
  "variant": [1],
173
- "activeTab": [32],
243
+ "value": [2],
244
+ "tabs": [16],
245
+ "internalActiveTab": [32],
174
246
  "tabDetails": [32],
175
247
  "sliderStyle": [32],
176
248
  "showScrollLeft": [32],
177
249
  "showScrollRight": [32]
178
250
  }, [[0, "slotchange", "handleSlotChange"], [9, "resize", "handleResize"]], {
179
- "activeTab": ["onActiveTabChange"],
251
+ "internalActiveTab": ["onActiveTabChange"],
252
+ "value": ["onValueChange"],
253
+ "tabs": ["onTabsPropChange"],
180
254
  "variant": ["onVariantChange"]
181
255
  }]);
182
256
  function defineCustomElement() {
@@ -1 +1 @@
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.tab-content {\n padding: 16px;\n background-color: #ffffff;\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 } from '@stencil/core';\n\ninterface TabDetail {\n title: 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 @State() activeTab: number = 0;\n @State() tabDetails: TabDetail[] = []; // Uses new interface\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 tabs: HTMLUdpTabElement[] = [];\n private buttonRefs: HTMLButtonElement[] = [];\n private scrollContainerRef?: HTMLDivElement;\n\n @Listen('slotchange')\n handleSlotChange() {\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 @Watch('activeTab')\n onActiveTabChange() {\n this.updateActiveTabs();\n this.updateSliderPosition();\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 // Get ALL tabs from the slot\n this.tabs = Array.from(this.el.children).filter(\n (child): child is HTMLUdpTabElement => child.tagName.toLowerCase() === 'udp-tab',\n );\n\n this.tabDetails = this.tabs.map(tab => ({\n title: tab.title,\n icon: tab.icon,\n iconPlacement: tab.iconPlacement,\n hidden: tab.hidden,\n disabled: tab.disabled,\n }));\n\n // Check if the current activeTab (default 0) is invalid\n if (this.tabDetails[this.activeTab]?.hidden || this.tabDetails[this.activeTab]?.disabled) {\n // If it is, find the first valid tab to select\n const firstValidIndex = this.tabDetails.findIndex(tab => !tab.hidden && !tab.disabled);\n // If we found one, set it. If not (all tabs invalid), set to -1\n this.activeTab = firstValidIndex;\n }\n\n this.updateActiveTabs();\n\n requestAnimationFrame(() => {\n this.updateSliderPosition();\n this.checkScroll();\n });\n }\n\n private updateActiveTabs() {\n this.tabs.forEach((tab, index) => {\n tab.active = index === this.activeTab;\n });\n }\n\n private updateSliderPosition() {\n const activeButton = this.buttonRefs[this.activeTab];\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 this.activeTab = tabIndex;\n\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\n const safeZoneLeft = scrollLeft + safeZonePadding;\n const safeZoneRight = scrollLeft + clientWidth - safeZonePadding;\n\n // Check if the tab's left edge is hidden by the left fade\n if (tabLeft < safeZoneLeft) {\n // Scroll to position the tab's left edge at the start of the safe zone\n container.scrollTo({\n left: tabLeft - safeZonePadding,\n behavior: 'smooth'\n });\n }\n // Check if the tab's right edge is hidden by the right fade\n else if (tabRight > safeZoneRight) {\n // Scroll to position the tab's right edge at the end of the safe zone\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 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 titleEl = <span>{tab.title}</span>;\n\n return (\n <button\n class={{\n 'active': index === this.activeTab,\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 === this.activeTab ? 'true' : 'false'}\n aria-disabled={tab.disabled ? 'true' : 'false'}\n ref={el => (this.buttonRefs[index] = el)}\n >\n {iconEl}\n {titleEl}\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 <div class=\"tab-content\">\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}
@@ -229,7 +229,7 @@ const UdpTimeSelector = /*@__PURE__*/ proxyCustomElement(class UdpTimeSelector e
229
229
  classNames.push('bx--text-input--full-width');
230
230
  }
231
231
  const inputClass = classNames.join(' ');
232
- return (h(Host, { key: 'bb2f53940548506b2967b68fe6c5b1e73430af55', class: {
232
+ return (h(Host, { key: '12a2d440fea4d80364d4df0211ba273830c10a1b', class: {
233
233
  'udp-input': true,
234
234
  'udp-input--error': isError,
235
235
  'udp-input--disabled': this.disabled,
@@ -238,9 +238,9 @@ const UdpTimeSelector = /*@__PURE__*/ proxyCustomElement(class UdpTimeSelector e
238
238
  'udp-input--required': this.required,
239
239
  [`udp-input--size-${this.size}`]: true,
240
240
  [`udp-input--margin-${this.margin}`]: true,
241
- }, "aria-invalid": isError ? 'true' : 'false', "aria-required": this.required ? 'true' : 'false' }, h("div", { key: '15b2fe88d041385bf7035ecca64d7769bdeb843b', class: "bx--form-item" }, h("unity-typography", { key: '0566f681872070de620318de7d21f96accab4cd6', variant: "caption-text" }, h("label", { key: '72940ec01c5d54230d58e5095b69988803d002c7', htmlFor: this.id, class: "bx--label" }, this.label, this.required ? '*' : '')), h("input", { key: '4cf4cd9acd57d8d5144e0e2b61362befce824b25', type: "time", id: this.id, name: this.name, class: inputClass, value: this.internalValue, min: this.min, max: this.max, onInput: this.handleTimeInput, onChange: this.handleTimeChange, onBlur: this.handleBlur, onFocus: this.handleFocus, onInvalid: this.handleInvalid, disabled: this.disabled, readonly: this.readonly, required: this.required,
241
+ }, "aria-invalid": isError ? 'true' : 'false', "aria-required": this.required ? 'true' : 'false' }, h("div", { key: '5a48660fac4210a46ca101eeb40c5c47e7a6382a', class: "bx--form-item" }, h("unity-typography", { key: '1baa18f50e33c4dead50ecf5e5ab33c01ad903ec', variant: "caption-text" }, h("label", { key: '8d816c14c78edee99bef993a42d38acdf65ff520', htmlFor: this.id, class: "bx--label" }, this.label, this.required ? '*' : '')), h("input", { key: '708202991f4617424ad4774aea9745a5d87e867d', type: "time", id: this.id, name: this.name, class: inputClass, value: this.internalValue, min: this.min, max: this.max, onInput: this.handleTimeInput, onChange: this.handleTimeChange, onBlur: this.handleBlur, onFocus: this.handleFocus, onInvalid: this.handleInvalid, disabled: this.disabled, readonly: this.readonly, required: this.required,
242
242
  //@ts-ignore
243
- udprecordid: 'udpRecord-udp-time-selector-' + this.id }), h("unity-typography", { key: 'cc2818ea8716991e0f891315dfed07daa5ed5fd2', class: "error-message", variant: "caption-text", color: "error" }, this.errorMessage))));
243
+ udprecordid: 'udpRecord-udp-time-selector-' + this.id }), h("unity-typography", { key: '4bf7b30038e585098859836eff7e6f2dcfdea8ad', class: "error-message", variant: "caption-text", color: "error" }, this.errorMessage))));
244
244
  }
245
245
  get el() { return this; }
246
246
  static get watchers() { return {
@@ -17,7 +17,7 @@ const UdpVerticalSpacer$1 = /*@__PURE__*/ proxyCustomElement(class UdpVerticalSp
17
17
  large: 'spacing-13', // Assuming this corresponds to --spacing-13
18
18
  };
19
19
  const spacingClass = sizeMap[this.unit] || 'spacing-01';
20
- return (h("div", { key: '6f95b2f7bac8b4c689e35d4923ff72ae310e5fdb', class: spacingClass }));
20
+ return (h("div", { key: 'e05ad349a3c1df3a515ede40f457661c8b7913b9', class: spacingClass }));
21
21
  }
22
22
  static get style() { return udpVerticalSpacerCss; }
23
23
  }, [257, "udp-vertical-spacer", {
@@ -15,7 +15,7 @@ const UpdAlertBanner = /*@__PURE__*/ proxyCustomElement(class UpdAlertBanner ext
15
15
  this.message = '';
16
16
  }
17
17
  render() {
18
- return (h("div", { key: 'd252b1793bc4caa4e96acebb6e2ec6ba8e52f029', class: `alert-banner ${this.type}` }, h("unity-typography", { key: '7ec2b81da5013172c16f6d61b1454a3264ef66ca', variant: "data-display-three" }, " ", this.message, " ")));
18
+ return (h("div", { key: '4551695bcaba3fde5445c7a34f1d67d0444af855', class: `alert-banner ${this.type}` }, h("unity-typography", { key: 'd763dea98c2b14a12753f54d5b99c89be23aaf49', variant: "data-display-three" }, " ", this.message, " ")));
19
19
  }
20
20
  static get style() { return updAlertBannerCss; }
21
21
  }, [257, "upd-alert-banner", {