dap-design-system 0.62.3 → 0.63.0

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 (663) hide show
  1. package/README.md +5 -1
  2. package/dist/common/utils.d.ts +8 -0
  3. package/dist/common/utils.js +53 -48
  4. package/dist/common/utils.js.map +1 -1
  5. package/dist/components/accordion/accordion-base-element.js +15 -19
  6. package/dist/components/accordion/accordion-base-element.js.map +1 -1
  7. package/dist/components/accordion/accordion.component.d.ts +1 -0
  8. package/dist/components/accordion/accordion.component.js.map +1 -1
  9. package/dist/components/accordion-group/accordion-group.component.js +20 -24
  10. package/dist/components/accordion-group/accordion-group.component.js.map +1 -1
  11. package/dist/components/anchor-heading/anchor-heading.component.d.ts +1 -0
  12. package/dist/components/anchor-heading/anchor-heading.component.js +20 -23
  13. package/dist/components/anchor-heading/anchor-heading.component.js.map +1 -1
  14. package/dist/components/avatar/avatar.component.js +51 -55
  15. package/dist/components/avatar/avatar.component.js.map +1 -1
  16. package/dist/components/avatar-group/avatar-group.component.js +18 -22
  17. package/dist/components/avatar-group/avatar-group.component.js.map +1 -1
  18. package/dist/components/badge/badge.component.js +17 -20
  19. package/dist/components/badge/badge.component.js.map +1 -1
  20. package/dist/components/banner/banner.component.d.ts +1 -1
  21. package/dist/components/banner/banner.component.js +18 -24
  22. package/dist/components/banner/banner.component.js.map +1 -1
  23. package/dist/components/breadcrumb/breadcrumb.component.d.ts +2 -1
  24. package/dist/components/breadcrumb/breadcrumb.component.js +32 -32
  25. package/dist/components/breadcrumb/breadcrumb.component.js.map +1 -1
  26. package/dist/components/breadcrumb-item/breadcrumb-item.component.d.ts +8 -0
  27. package/dist/components/breadcrumb-item/breadcrumb-item.component.js +33 -28
  28. package/dist/components/breadcrumb-item/breadcrumb-item.component.js.map +1 -1
  29. package/dist/components/button/_styles/button.scss.js +1 -1
  30. package/dist/components/button/button.component.js +18 -22
  31. package/dist/components/button/button.component.js.map +1 -1
  32. package/dist/components/button-group/_styles/button-group-separator.scss.js +5 -0
  33. package/dist/components/button-group/_styles/button-group-separator.scss.js.map +1 -0
  34. package/dist/components/button-group/_styles/button-group-text.scss.js +5 -0
  35. package/dist/components/button-group/_styles/button-group-text.scss.js.map +1 -0
  36. package/dist/components/button-group/_styles/button-group.scss.js +5 -0
  37. package/dist/components/button-group/_styles/button-group.scss.js.map +1 -0
  38. package/dist/components/button-group/button-group-separator.component.d.ts +28 -0
  39. package/dist/components/button-group/button-group-separator.component.js +18 -0
  40. package/dist/components/button-group/button-group-separator.component.js.map +1 -0
  41. package/dist/components/button-group/button-group-separator.d.ts +8 -0
  42. package/dist/components/button-group/button-group-separator.js +6 -0
  43. package/dist/components/button-group/button-group-separator.js.map +1 -0
  44. package/dist/components/button-group/button-group-text.component.d.ts +33 -0
  45. package/dist/components/button-group/button-group-text.component.js +17 -0
  46. package/dist/components/button-group/button-group-text.component.js.map +1 -0
  47. package/dist/components/button-group/button-group-text.d.ts +8 -0
  48. package/dist/components/button-group/button-group-text.js +6 -0
  49. package/dist/components/button-group/button-group-text.js.map +1 -0
  50. package/dist/components/button-group/button-group.component.d.ts +52 -0
  51. package/dist/components/button-group/button-group.component.js +30 -0
  52. package/dist/components/button-group/button-group.component.js.map +1 -0
  53. package/dist/components/button-group/button-group.d.ts +8 -0
  54. package/dist/components/button-group/button-group.js +6 -0
  55. package/dist/components/button-group/button-group.js.map +1 -0
  56. package/dist/components/calendar/calendar-cell.component.js +26 -29
  57. package/dist/components/calendar/calendar-cell.component.js.map +1 -1
  58. package/dist/components/calendar/calendar.component.d.ts +10 -1
  59. package/dist/components/calendar/calendar.component.js +37 -46
  60. package/dist/components/calendar/calendar.component.js.map +1 -1
  61. package/dist/components/callout/callout.component.d.ts +4 -0
  62. package/dist/components/callout/callout.component.js +71 -69
  63. package/dist/components/callout/callout.component.js.map +1 -1
  64. package/dist/components/card/card-actions.component.js +8 -11
  65. package/dist/components/card/card-actions.component.js.map +1 -1
  66. package/dist/components/card/card-content.component.js +20 -23
  67. package/dist/components/card/card-content.component.js.map +1 -1
  68. package/dist/components/card/card-image.component.js +18 -21
  69. package/dist/components/card/card-image.component.js.map +1 -1
  70. package/dist/components/card/card-subtitle.component.js +18 -21
  71. package/dist/components/card/card-subtitle.component.js.map +1 -1
  72. package/dist/components/card/card-title.component.js +18 -21
  73. package/dist/components/card/card-title.component.js.map +1 -1
  74. package/dist/components/card/card.component.d.ts +1 -0
  75. package/dist/components/card/card.component.js +25 -28
  76. package/dist/components/card/card.component.js.map +1 -1
  77. package/dist/components/checkbox/_styles/checkbox.scss.js +1 -1
  78. package/dist/components/checkbox/checkbox.component.d.ts +7 -1
  79. package/dist/components/checkbox/checkbox.component.js +71 -74
  80. package/dist/components/checkbox/checkbox.component.js.map +1 -1
  81. package/dist/components/chip/chip.component.d.ts +1 -0
  82. package/dist/components/chip/chip.component.js +21 -26
  83. package/dist/components/chip/chip.component.js.map +1 -1
  84. package/dist/components/code-puncher/code-puncher-slot.component.js +34 -38
  85. package/dist/components/code-puncher/code-puncher-slot.component.js.map +1 -1
  86. package/dist/components/code-puncher/code-puncher.component.d.ts +4 -0
  87. package/dist/components/code-puncher/code-puncher.component.js +97 -102
  88. package/dist/components/code-puncher/code-puncher.component.js.map +1 -1
  89. package/dist/components/code-puncher/code-puncher.context.js +1 -1
  90. package/dist/components/code-puncher/code-puncher.context.js.map +1 -1
  91. package/dist/components/code-puncher/code-puncher.scss.js +1 -1
  92. package/dist/components/combobox/combobox.component.d.ts +9 -1
  93. package/dist/components/combobox/combobox.component.js.map +1 -1
  94. package/dist/components/combobox/combobox.scss.js +1 -1
  95. package/dist/components/combobox/comboboxBase.d.ts +29 -0
  96. package/dist/components/combobox/comboboxBase.js +218 -150
  97. package/dist/components/combobox/comboboxBase.js.map +1 -1
  98. package/dist/components/command/command-group.component.js +19 -23
  99. package/dist/components/command/command-group.component.js.map +1 -1
  100. package/dist/components/command/command-item.component.js +17 -22
  101. package/dist/components/command/command-item.component.js.map +1 -1
  102. package/dist/components/command/command.component.d.ts +3 -0
  103. package/dist/components/command/command.component.js +28 -33
  104. package/dist/components/command/command.component.js.map +1 -1
  105. package/dist/components/content-switcher/content-switcher-item.component.js +16 -19
  106. package/dist/components/content-switcher/content-switcher-item.component.js.map +1 -1
  107. package/dist/components/content-switcher/content-switcher.component.js +19 -22
  108. package/dist/components/content-switcher/content-switcher.component.js.map +1 -1
  109. package/dist/components/copybox-input/copybox-input.component.d.ts +11 -0
  110. package/dist/components/copybox-input/copybox-input.component.js +12 -16
  111. package/dist/components/copybox-input/copybox-input.component.js.map +1 -1
  112. package/dist/components/dap-badge/dap-badge.component.js +13 -18
  113. package/dist/components/dap-badge/dap-badge.component.js.map +1 -1
  114. package/dist/components/datatable/datatable.component.d.ts +17 -0
  115. package/dist/components/datatable/datatable.component.js +38 -42
  116. package/dist/components/datatable/datatable.component.js.map +1 -1
  117. package/dist/components/datatable/utils/cell-renderer.js +6 -8
  118. package/dist/components/datatable/utils/cell-renderer.js.map +1 -1
  119. package/dist/components/datepicker/datepicker.component.d.ts +8 -0
  120. package/dist/components/datepicker/datepicker.component.js +76 -81
  121. package/dist/components/datepicker/datepicker.component.js.map +1 -1
  122. package/dist/components/datepicker/datepicker.scss.js +1 -1
  123. package/dist/components/divider/divider.component.js +18 -21
  124. package/dist/components/divider/divider.component.js.map +1 -1
  125. package/dist/components/feedback/feedback.component.js +8 -11
  126. package/dist/components/feedback/feedback.component.js.map +1 -1
  127. package/dist/components/file-input/file-input-list-item.component.d.ts +1 -0
  128. package/dist/components/file-input/file-input-list-item.component.js +36 -40
  129. package/dist/components/file-input/file-input-list-item.component.js.map +1 -1
  130. package/dist/components/file-input/file-input-list.component.js +15 -20
  131. package/dist/components/file-input/file-input-list.component.js.map +1 -1
  132. package/dist/components/file-input/file-input-list.scss.js +1 -1
  133. package/dist/components/file-input/file-input.component.d.ts +3 -0
  134. package/dist/components/file-input/file-input.component.js +135 -142
  135. package/dist/components/file-input/file-input.component.js.map +1 -1
  136. package/dist/components/file-input/file-input.scss.js +1 -1
  137. package/dist/components/form/form-label/form-label.component.d.ts +1 -1
  138. package/dist/components/form/form-label/form-label.component.js +20 -23
  139. package/dist/components/form/form-label/form-label.component.js.map +1 -1
  140. package/dist/components/form/input-group/input-group.component.d.ts +4 -0
  141. package/dist/components/form/input-group/input-group.component.js +42 -42
  142. package/dist/components/form/input-group/input-group.component.js.map +1 -1
  143. package/dist/components/form/input-group/input-group.scss.js +2 -2
  144. package/dist/components/form/radio-group/radio-group.component.d.ts +5 -0
  145. package/dist/components/form/radio-group/radio-group.component.js +54 -55
  146. package/dist/components/form/radio-group/radio-group.component.js.map +1 -1
  147. package/dist/components/icon/icon.component.js +25 -28
  148. package/dist/components/icon/icon.component.js.map +1 -1
  149. package/dist/components/icon-button/icon-button.component.d.ts +1 -0
  150. package/dist/components/icon-button/icon-button.component.js +11 -14
  151. package/dist/components/icon-button/icon-button.component.js.map +1 -1
  152. package/dist/components/icon-button/icon-button.scss.js +1 -1
  153. package/dist/components/icons/arrows/arrows-arrow-down-line/arrows-arrow-down-line.component.js +9 -12
  154. package/dist/components/icons/arrows/arrows-arrow-down-line/arrows-arrow-down-line.component.js.map +1 -1
  155. package/dist/components/icons/arrows/arrows-arrow-down-s-fill/arrows-arrow-down-s-fill.component.js +7 -10
  156. package/dist/components/icons/arrows/arrows-arrow-down-s-fill/arrows-arrow-down-s-fill.component.js.map +1 -1
  157. package/dist/components/icons/arrows/arrows-arrow-down-s-line/arrows-arrow-down-s-line.component.js +12 -15
  158. package/dist/components/icons/arrows/arrows-arrow-down-s-line/arrows-arrow-down-s-line.component.js.map +1 -1
  159. package/dist/components/icons/arrows/arrows-arrow-left-down-line/arrows-arrow-left-down-line.component.js +8 -11
  160. package/dist/components/icons/arrows/arrows-arrow-left-down-line/arrows-arrow-left-down-line.component.js.map +1 -1
  161. package/dist/components/icons/arrows/arrows-arrow-left-l-line/arrows-arrow-left-l-line.component.js +15 -18
  162. package/dist/components/icons/arrows/arrows-arrow-left-l-line/arrows-arrow-left-l-line.component.js.map +1 -1
  163. package/dist/components/icons/arrows/arrows-arrow-left-line/arrows-arrow-left-line.component.js +7 -10
  164. package/dist/components/icons/arrows/arrows-arrow-left-line/arrows-arrow-left-line.component.js.map +1 -1
  165. package/dist/components/icons/arrows/arrows-arrow-left-s-fill/arrows-arrow-left-s-fill.component.js +10 -13
  166. package/dist/components/icons/arrows/arrows-arrow-left-s-fill/arrows-arrow-left-s-fill.component.js.map +1 -1
  167. package/dist/components/icons/arrows/arrows-arrow-left-s-line/arrows-arrow-left-s-line.component.js +7 -10
  168. package/dist/components/icons/arrows/arrows-arrow-left-s-line/arrows-arrow-left-s-line.component.js.map +1 -1
  169. package/dist/components/icons/arrows/arrows-arrow-left-up-line/arrows-arrow-left-up-line.component.js +6 -9
  170. package/dist/components/icons/arrows/arrows-arrow-left-up-line/arrows-arrow-left-up-line.component.js.map +1 -1
  171. package/dist/components/icons/arrows/arrows-arrow-right-down-line/arrows-arrow-right-down-line.component.js +18 -21
  172. package/dist/components/icons/arrows/arrows-arrow-right-down-line/arrows-arrow-right-down-line.component.js.map +1 -1
  173. package/dist/components/icons/arrows/arrows-arrow-right-l-line/arrows-arrow-right-l-line.component.js +15 -18
  174. package/dist/components/icons/arrows/arrows-arrow-right-l-line/arrows-arrow-right-l-line.component.js.map +1 -1
  175. package/dist/components/icons/arrows/arrows-arrow-right-line/arrows-arrow-right-line.component.js +17 -20
  176. package/dist/components/icons/arrows/arrows-arrow-right-line/arrows-arrow-right-line.component.js.map +1 -1
  177. package/dist/components/icons/arrows/arrows-arrow-right-s-fill/arrows-arrow-right-s-fill.component.js +17 -20
  178. package/dist/components/icons/arrows/arrows-arrow-right-s-fill/arrows-arrow-right-s-fill.component.js.map +1 -1
  179. package/dist/components/icons/arrows/arrows-arrow-right-s-line/arrows-arrow-right-s-line.component.js +17 -20
  180. package/dist/components/icons/arrows/arrows-arrow-right-s-line/arrows-arrow-right-s-line.component.js.map +1 -1
  181. package/dist/components/icons/arrows/arrows-arrow-right-up-line/arrows-arrow-right-up-line.component.js +18 -21
  182. package/dist/components/icons/arrows/arrows-arrow-right-up-line/arrows-arrow-right-up-line.component.js.map +1 -1
  183. package/dist/components/icons/arrows/arrows-arrow-up-line/arrows-arrow-up-line.component.js +9 -12
  184. package/dist/components/icons/arrows/arrows-arrow-up-line/arrows-arrow-up-line.component.js.map +1 -1
  185. package/dist/components/icons/arrows/arrows-arrow-up-s-fill/arrows-arrow-up-s-fill.component.js +8 -11
  186. package/dist/components/icons/arrows/arrows-arrow-up-s-fill/arrows-arrow-up-s-fill.component.js.map +1 -1
  187. package/dist/components/icons/arrows/arrows-arrow-up-s-line/arrows-arrow-up-s-line.component.js +9 -12
  188. package/dist/components/icons/arrows/arrows-arrow-up-s-line/arrows-arrow-up-s-line.component.js.map +1 -1
  189. package/dist/components/icons/arrows/arrows-expand-up-down-fill/arrows-expand-up-down-fill.component.js +11 -14
  190. package/dist/components/icons/arrows/arrows-expand-up-down-fill/arrows-expand-up-down-fill.component.js.map +1 -1
  191. package/dist/components/icons/buildings/buildings-home-6-line/buildings-home-6-line.component.js +10 -13
  192. package/dist/components/icons/buildings/buildings-home-6-line/buildings-home-6-line.component.js.map +1 -1
  193. package/dist/components/icons/business/business-calendar-line/business-calendar-line.component.js +11 -14
  194. package/dist/components/icons/business/business-calendar-line/business-calendar-line.component.js.map +1 -1
  195. package/dist/components/icons/design/design-edit-line/design-edit-line.component.js +6 -9
  196. package/dist/components/icons/design/design-edit-line/design-edit-line.component.js.map +1 -1
  197. package/dist/components/icons/design/design-tools-line/design-tools-line.component.js +12 -15
  198. package/dist/components/icons/design/design-tools-line/design-tools-line.component.js.map +1 -1
  199. package/dist/components/icons/device/device-computer-line/device-computer-line.component.js +16 -19
  200. package/dist/components/icons/device/device-computer-line/device-computer-line.component.js.map +1 -1
  201. package/dist/components/icons/document/document-clipboard-line/document-clipboard-line.component.js +11 -14
  202. package/dist/components/icons/document/document-clipboard-line/document-clipboard-line.component.js.map +1 -1
  203. package/dist/components/icons/document/document-file-copy-line/document-file-copy-line.component.js +10 -13
  204. package/dist/components/icons/document/document-file-copy-line/document-file-copy-line.component.js.map +1 -1
  205. package/dist/components/icons/document/document-file-image-line/document-file-image-line.component.js +11 -14
  206. package/dist/components/icons/document/document-file-image-line/document-file-image-line.component.js.map +1 -1
  207. package/dist/components/icons/document/document-file-music-line/document-file-music-line.component.js +11 -14
  208. package/dist/components/icons/document/document-file-music-line/document-file-music-line.component.js.map +1 -1
  209. package/dist/components/icons/document/document-file-text-line/document-file-text-line.component.js +10 -13
  210. package/dist/components/icons/document/document-file-text-line/document-file-text-line.component.js.map +1 -1
  211. package/dist/components/icons/document/document-file-video-line/document-file-video-line.component.js +11 -14
  212. package/dist/components/icons/document/document-file-video-line/document-file-video-line.component.js.map +1 -1
  213. package/dist/components/icons/document/document-folder-line/document-folder-line.component.js +11 -14
  214. package/dist/components/icons/document/document-folder-line/document-folder-line.component.js.map +1 -1
  215. package/dist/components/icons/document/document-folder-open-line/document-folder-open-line.component.js +10 -13
  216. package/dist/components/icons/document/document-folder-open-line/document-folder-open-line.component.js.map +1 -1
  217. package/dist/components/icons/editor/editor-separator/editor-separator.component.js +10 -13
  218. package/dist/components/icons/editor/editor-separator/editor-separator.component.js.map +1 -1
  219. package/dist/components/icons/health/health-heart-fill/health-heart-fill.component.js +8 -11
  220. package/dist/components/icons/health/health-heart-fill/health-heart-fill.component.js.map +1 -1
  221. package/dist/components/icons/health/health-heart-line/health-heart-line.component.js +10 -13
  222. package/dist/components/icons/health/health-heart-line/health-heart-line.component.js.map +1 -1
  223. package/dist/components/icons/others/others-cookie-line/others-cookie-line.component.js +6 -9
  224. package/dist/components/icons/others/others-cookie-line/others-cookie-line.component.js.map +1 -1
  225. package/dist/components/icons/system/system-add-line/system-add-line.component.js +11 -14
  226. package/dist/components/icons/system/system-add-line/system-add-line.component.js.map +1 -1
  227. package/dist/components/icons/system/system-alert-fill/system-alert-fill.component.js +9 -12
  228. package/dist/components/icons/system/system-alert-fill/system-alert-fill.component.js.map +1 -1
  229. package/dist/components/icons/system/system-alert-line/system-alert-line.component.js +11 -14
  230. package/dist/components/icons/system/system-alert-line/system-alert-line.component.js.map +1 -1
  231. package/dist/components/icons/system/system-check-line/system-check-line.component.js +9 -12
  232. package/dist/components/icons/system/system-check-line/system-check-line.component.js.map +1 -1
  233. package/dist/components/icons/system/system-check-line2/system-check-line2.component.js +11 -14
  234. package/dist/components/icons/system/system-check-line2/system-check-line2.component.js.map +1 -1
  235. package/dist/components/icons/system/system-checkbox-blank-circle-fill/system-checkbox-blank-circle-fill.component.js +9 -12
  236. package/dist/components/icons/system/system-checkbox-blank-circle-fill/system-checkbox-blank-circle-fill.component.js.map +1 -1
  237. package/dist/components/icons/system/system-checkbox-blank-circle-fill-check/system-checkbox-blank-circle-fill-check.component.js +12 -15
  238. package/dist/components/icons/system/system-checkbox-blank-circle-fill-check/system-checkbox-blank-circle-fill-check.component.js.map +1 -1
  239. package/dist/components/icons/system/system-checkbox-blank-circle-line/system-checkbox-blank-circle-line.component.js +13 -16
  240. package/dist/components/icons/system/system-checkbox-blank-circle-line/system-checkbox-blank-circle-line.component.js.map +1 -1
  241. package/dist/components/icons/system/system-checkbox-circle-fill/system-checkbox-circle-fill.component.js +11 -14
  242. package/dist/components/icons/system/system-checkbox-circle-fill/system-checkbox-circle-fill.component.js.map +1 -1
  243. package/dist/components/icons/system/system-checkbox-circle-line/system-checkbox-circle-line.component.js +11 -14
  244. package/dist/components/icons/system/system-checkbox-circle-line/system-checkbox-circle-line.component.js.map +1 -1
  245. package/dist/components/icons/system/system-close-circle-fill/system-close-circle-fill.component.js +11 -14
  246. package/dist/components/icons/system/system-close-circle-fill/system-close-circle-fill.component.js.map +1 -1
  247. package/dist/components/icons/system/system-close-circle-line/system-close-circle-line.component.js +7 -10
  248. package/dist/components/icons/system/system-close-circle-line/system-close-circle-line.component.js.map +1 -1
  249. package/dist/components/icons/system/system-close-fill/system-close-fill.component.js +11 -14
  250. package/dist/components/icons/system/system-close-fill/system-close-fill.component.js.map +1 -1
  251. package/dist/components/icons/system/system-close-line/system-close-line.component.js +11 -14
  252. package/dist/components/icons/system/system-close-line/system-close-line.component.js.map +1 -1
  253. package/dist/components/icons/system/system-delete-bin-fill/system-delete-bin-fill.component.js +7 -10
  254. package/dist/components/icons/system/system-delete-bin-fill/system-delete-bin-fill.component.js.map +1 -1
  255. package/dist/components/icons/system/system-delete-bin-line/system-delete-bin-line.component.js +9 -12
  256. package/dist/components/icons/system/system-delete-bin-line/system-delete-bin-line.component.js.map +1 -1
  257. package/dist/components/icons/system/system-download-line/system-download-line.component.js +9 -12
  258. package/dist/components/icons/system/system-download-line/system-download-line.component.js.map +1 -1
  259. package/dist/components/icons/system/system-error-warning-fill/system-error-warning-fill.component.js +7 -10
  260. package/dist/components/icons/system/system-error-warning-fill/system-error-warning-fill.component.js.map +1 -1
  261. package/dist/components/icons/system/system-error-warning-line/system-error-warning-line.component.js +11 -14
  262. package/dist/components/icons/system/system-error-warning-line/system-error-warning-line.component.js.map +1 -1
  263. package/dist/components/icons/system/system-external-link-line/system-external-link-line.component.js +9 -12
  264. package/dist/components/icons/system/system-external-link-line/system-external-link-line.component.js.map +1 -1
  265. package/dist/components/icons/system/system-eye-line/system-eye-line.component.js +11 -14
  266. package/dist/components/icons/system/system-eye-line/system-eye-line.component.js.map +1 -1
  267. package/dist/components/icons/system/system-eye-off-line/system-eye-off-line.component.js +6 -9
  268. package/dist/components/icons/system/system-eye-off-line/system-eye-off-line.component.js.map +1 -1
  269. package/dist/components/icons/system/system-forbid-fill/system-forbid-fill.component.js +9 -12
  270. package/dist/components/icons/system/system-forbid-fill/system-forbid-fill.component.js.map +1 -1
  271. package/dist/components/icons/system/system-information-2-fill/system-information-2-fill.component.js +9 -12
  272. package/dist/components/icons/system/system-information-2-fill/system-information-2-fill.component.js.map +1 -1
  273. package/dist/components/icons/system/system-information-fill/system-information-fill.component.js +9 -12
  274. package/dist/components/icons/system/system-information-fill/system-information-fill.component.js.map +1 -1
  275. package/dist/components/icons/system/system-information-line/system-information-line.component.js +9 -12
  276. package/dist/components/icons/system/system-information-line/system-information-line.component.js.map +1 -1
  277. package/dist/components/icons/system/system-lightbulb-fill/system-lightbulb-fill.component.js +9 -12
  278. package/dist/components/icons/system/system-lightbulb-fill/system-lightbulb-fill.component.js.map +1 -1
  279. package/dist/components/icons/system/system-loading-spinner/system-loading-spinner.component.js +9 -12
  280. package/dist/components/icons/system/system-loading-spinner/system-loading-spinner.component.js.map +1 -1
  281. package/dist/components/icons/system/system-lock-fill/system-lock-fill.component.js +13 -16
  282. package/dist/components/icons/system/system-lock-fill/system-lock-fill.component.js.map +1 -1
  283. package/dist/components/icons/system/system-lock-line/system-lock-line.component.js +10 -13
  284. package/dist/components/icons/system/system-lock-line/system-lock-line.component.js.map +1 -1
  285. package/dist/components/icons/system/system-menu-line/system-menu-line.component.js +9 -12
  286. package/dist/components/icons/system/system-menu-line/system-menu-line.component.js.map +1 -1
  287. package/dist/components/icons/system/system-menu-line-s/system-menu-line-s.component.js +9 -12
  288. package/dist/components/icons/system/system-menu-line-s/system-menu-line-s.component.js.map +1 -1
  289. package/dist/components/icons/system/system-more-2-line/system-more-2-line.component.js +10 -13
  290. package/dist/components/icons/system/system-more-2-line/system-more-2-line.component.js.map +1 -1
  291. package/dist/components/icons/system/system-more-line/system-more-line.component.js +16 -19
  292. package/dist/components/icons/system/system-more-line/system-more-line.component.js.map +1 -1
  293. package/dist/components/icons/system/system-search-line/system-search-line.component.js +11 -14
  294. package/dist/components/icons/system/system-search-line/system-search-line.component.js.map +1 -1
  295. package/dist/components/icons/system/system-share-line/system-share-line.component.js +9 -12
  296. package/dist/components/icons/system/system-share-line/system-share-line.component.js.map +1 -1
  297. package/dist/components/icons/system/system-shield-check-fill/system-shield-check-fill.component.js +8 -11
  298. package/dist/components/icons/system/system-shield-check-fill/system-shield-check-fill.component.js.map +1 -1
  299. package/dist/components/icons/system/system-shield-check-line/system-shield-check-line.component.js +6 -9
  300. package/dist/components/icons/system/system-shield-check-line/system-shield-check-line.component.js.map +1 -1
  301. package/dist/components/icons/system/system-star-fill/system-star-fill.component.js +13 -16
  302. package/dist/components/icons/system/system-star-fill/system-star-fill.component.js.map +1 -1
  303. package/dist/components/icons/system/system-subtract-line/system-subtract-line.component.js +11 -14
  304. package/dist/components/icons/system/system-subtract-line/system-subtract-line.component.js.map +1 -1
  305. package/dist/components/icons/system/system-subtract-line2/system-subtract-line2.component.js +7 -10
  306. package/dist/components/icons/system/system-subtract-line2/system-subtract-line2.component.js.map +1 -1
  307. package/dist/components/icons/system/system-time-fill/system-time-fill.component.js +11 -14
  308. package/dist/components/icons/system/system-time-fill/system-time-fill.component.js.map +1 -1
  309. package/dist/components/icons/system/system-time-line/system-time-line.component.js +11 -14
  310. package/dist/components/icons/system/system-time-line/system-time-line.component.js.map +1 -1
  311. package/dist/components/icons/system/system-upload-2-fill/system-upload-2-fill.component.js +5 -8
  312. package/dist/components/icons/system/system-upload-2-fill/system-upload-2-fill.component.js.map +1 -1
  313. package/dist/components/icons/system/system-upload-2-line/system-upload-2-line.component.js +7 -10
  314. package/dist/components/icons/system/system-upload-2-line/system-upload-2-line.component.js.map +1 -1
  315. package/dist/components/icons/system/system-upload-line/system-upload-line.component.js +9 -12
  316. package/dist/components/icons/system/system-upload-line/system-upload-line.component.js.map +1 -1
  317. package/dist/components/icons/system/system-zoom-in-line/system-zoom-in-line.component.js +9 -12
  318. package/dist/components/icons/system/system-zoom-in-line/system-zoom-in-line.component.js.map +1 -1
  319. package/dist/components/icons/system/system-zoom-out-line/system-zoom-out-line.component.js +11 -14
  320. package/dist/components/icons/system/system-zoom-out-line/system-zoom-out-line.component.js.map +1 -1
  321. package/dist/components/icons/user/user-account-circle-fill/user-account-circle-fill.component.js +16 -19
  322. package/dist/components/icons/user/user-account-circle-fill/user-account-circle-fill.component.js.map +1 -1
  323. package/dist/components/icons/user/user-account-circle-line/user-account-circle-line.component.js +13 -16
  324. package/dist/components/icons/user/user-account-circle-line/user-account-circle-line.component.js.map +1 -1
  325. package/dist/components/icons/user/user-user-fill/user-user-fill.component.js +8 -11
  326. package/dist/components/icons/user/user-user-fill/user-user-fill.component.js.map +1 -1
  327. package/dist/components/icons/user/user-user-line/user-user-line.component.js +11 -14
  328. package/dist/components/icons/user/user-user-line/user-user-line.component.js.map +1 -1
  329. package/dist/components/image-zoom/image-zoom.component.js +12 -17
  330. package/dist/components/image-zoom/image-zoom.component.js.map +1 -1
  331. package/dist/components/input/_styles/input.scss.js +1 -1
  332. package/dist/components/input/input-base-element.js +41 -47
  333. package/dist/components/input/input-base-element.js.map +1 -1
  334. package/dist/components/label/_styles/label.scss.js +1 -1
  335. package/dist/components/label/label.component.js +8 -11
  336. package/dist/components/label/label.component.js.map +1 -1
  337. package/dist/components/link/link.component.js +23 -27
  338. package/dist/components/link/link.component.js.map +1 -1
  339. package/dist/components/list-item/list-item.component.d.ts +2 -0
  340. package/dist/components/list-item/list-item.component.js +24 -29
  341. package/dist/components/list-item/list-item.component.js.map +1 -1
  342. package/dist/components/modal/modal-base-element.js +36 -42
  343. package/dist/components/modal/modal-base-element.js.map +1 -1
  344. package/dist/components/navigation-menu/navigation-menu-item.component.d.ts +9 -1
  345. package/dist/components/navigation-menu/navigation-menu-item.component.js +36 -31
  346. package/dist/components/navigation-menu/navigation-menu-item.component.js.map +1 -1
  347. package/dist/components/navigation-menu/navigation-menu.component.js +20 -24
  348. package/dist/components/navigation-menu/navigation-menu.component.js.map +1 -1
  349. package/dist/components/notification-badge/notification-badge.component.js +28 -32
  350. package/dist/components/notification-badge/notification-badge.component.js.map +1 -1
  351. package/dist/components/number-input/number-input.component.d.ts +7 -0
  352. package/dist/components/number-input/number-input.component.js +23 -29
  353. package/dist/components/number-input/number-input.component.js.map +1 -1
  354. package/dist/components/official-website-banner/official-website-banner.component.d.ts +1 -0
  355. package/dist/components/official-website-banner/official-website-banner.component.js +19 -24
  356. package/dist/components/official-website-banner/official-website-banner.component.js.map +1 -1
  357. package/dist/components/option-group/option-group.component.js +17 -20
  358. package/dist/components/option-group/option-group.component.js.map +1 -1
  359. package/dist/components/option-item/option-item.component.d.ts +10 -0
  360. package/dist/components/option-item/option-item.component.js +66 -60
  361. package/dist/components/option-item/option-item.component.js.map +1 -1
  362. package/dist/components/option-item/option-item.scss.js +1 -1
  363. package/dist/components/option-list/__test__/listbox-harness.d.ts +129 -0
  364. package/dist/components/option-list/listbox-state.d.ts +230 -0
  365. package/dist/components/option-list/listbox-state.js +312 -0
  366. package/dist/components/option-list/listbox-state.js.map +1 -0
  367. package/dist/components/option-list/option-data.d.ts +35 -0
  368. package/dist/components/option-list/option-data.js +34 -0
  369. package/dist/components/option-list/option-data.js.map +1 -0
  370. package/dist/components/option-list/option-list.component.d.ts +68 -14
  371. package/dist/components/option-list/option-list.component.js +364 -274
  372. package/dist/components/option-list/option-list.component.js.map +1 -1
  373. package/dist/components/overlay/overlay.component.js +10 -13
  374. package/dist/components/overlay/overlay.component.js.map +1 -1
  375. package/dist/components/pager/pager.component.js +31 -37
  376. package/dist/components/pager/pager.component.js.map +1 -1
  377. package/dist/components/password-input/password-input.component.d.ts +12 -5
  378. package/dist/components/password-input/password-input.component.js +24 -30
  379. package/dist/components/password-input/password-input.component.js.map +1 -1
  380. package/dist/components/popup/popup-base-element.d.ts +6 -0
  381. package/dist/components/popup/popup-base-element.js +96 -71
  382. package/dist/components/popup/popup-base-element.js.map +1 -1
  383. package/dist/components/progress/progress.component.js +17 -21
  384. package/dist/components/progress/progress.component.js.map +1 -1
  385. package/dist/components/radio-button/_styles/radio-button.scss.js +1 -1
  386. package/dist/components/radio-button/radio-button.component.d.ts +5 -0
  387. package/dist/components/radio-button/radio-button.component.js +58 -62
  388. package/dist/components/radio-button/radio-button.component.js.map +1 -1
  389. package/dist/components/rating/_styles/rating.scss.js +2 -2
  390. package/dist/components/rating/rating.component.js +37 -41
  391. package/dist/components/rating/rating.component.js.map +1 -1
  392. package/dist/components/scroll-area/scroll-area.component.d.ts +2 -1
  393. package/dist/components/scroll-area/scroll-area.component.js +25 -28
  394. package/dist/components/scroll-area/scroll-area.component.js.map +1 -1
  395. package/dist/components/scroll-progress/scroll-progress.component.js +13 -17
  396. package/dist/components/scroll-progress/scroll-progress.component.js.map +1 -1
  397. package/dist/components/search/search.component.d.ts +6 -1
  398. package/dist/components/search/search.component.js.map +1 -1
  399. package/dist/components/select/select.component.d.ts +47 -0
  400. package/dist/components/select/select.component.js +271 -157
  401. package/dist/components/select/select.component.js.map +1 -1
  402. package/dist/components/select/select.scss.js +1 -1
  403. package/dist/components/sidenav/sidenav-group.component.d.ts +1 -0
  404. package/dist/components/sidenav/sidenav-group.component.js +11 -14
  405. package/dist/components/sidenav/sidenav-group.component.js.map +1 -1
  406. package/dist/components/sidenav/sidenav-item.component.js +20 -23
  407. package/dist/components/sidenav/sidenav-item.component.js.map +1 -1
  408. package/dist/components/sidenav/sidenav.component.js +17 -20
  409. package/dist/components/sidenav/sidenav.component.js.map +1 -1
  410. package/dist/components/skeleton/skeleton.component.js +9 -12
  411. package/dist/components/skeleton/skeleton.component.js.map +1 -1
  412. package/dist/components/skip-link/skip-link.component.js +13 -16
  413. package/dist/components/skip-link/skip-link.component.js.map +1 -1
  414. package/dist/components/snackbar/snackbar-message.component.d.ts +3 -1
  415. package/dist/components/snackbar/snackbar-message.component.js +39 -44
  416. package/dist/components/snackbar/snackbar-message.component.js.map +1 -1
  417. package/dist/components/snackbar/snackbar.component.d.ts +0 -1
  418. package/dist/components/snackbar/snackbar.component.js +36 -42
  419. package/dist/components/snackbar/snackbar.component.js.map +1 -1
  420. package/dist/components/spinner/spinner.component.js +33 -38
  421. package/dist/components/spinner/spinner.component.js.map +1 -1
  422. package/dist/components/stack/stack.component.d.ts +2 -1
  423. package/dist/components/stack/stack.component.js +16 -19
  424. package/dist/components/stack/stack.component.js.map +1 -1
  425. package/dist/components/switch/switch.component.d.ts +6 -0
  426. package/dist/components/switch/switch.component.js +48 -51
  427. package/dist/components/switch/switch.component.js.map +1 -1
  428. package/dist/components/switch/switch.scss.js +1 -1
  429. package/dist/components/tab/tab-group.component.d.ts +8 -3
  430. package/dist/components/tab/tab-group.component.js +43 -33
  431. package/dist/components/tab/tab-group.component.js.map +1 -1
  432. package/dist/components/tab/tab.component.js +22 -25
  433. package/dist/components/tab/tab.component.js.map +1 -1
  434. package/dist/components/table/table-cell.component.d.ts +1 -1
  435. package/dist/components/table/table-cell.component.js +16 -19
  436. package/dist/components/table/table-cell.component.js.map +1 -1
  437. package/dist/components/table/table-header.component.js +21 -24
  438. package/dist/components/table/table-header.component.js.map +1 -1
  439. package/dist/components/table/table-row.component.js +15 -18
  440. package/dist/components/table/table-row.component.js.map +1 -1
  441. package/dist/components/table/table.component.d.ts +2 -0
  442. package/dist/components/table/table.component.js +18 -22
  443. package/dist/components/table/table.component.js.map +1 -1
  444. package/dist/components/textarea/textarea.component.d.ts +2 -0
  445. package/dist/components/textarea/textarea.component.js +42 -46
  446. package/dist/components/textarea/textarea.component.js.map +1 -1
  447. package/dist/components/textarea/textarea.scss.js +1 -1
  448. package/dist/components/timeline/timeline-item.component.js +7 -10
  449. package/dist/components/timeline/timeline-item.component.js.map +1 -1
  450. package/dist/components/timeline/timeline.component.js +5 -8
  451. package/dist/components/timeline/timeline.component.js.map +1 -1
  452. package/dist/components/timepicker/time-grid.component.d.ts +3 -0
  453. package/dist/components/timepicker/time-grid.component.js +12 -15
  454. package/dist/components/timepicker/time-grid.component.js.map +1 -1
  455. package/dist/components/timepicker/timepicker.component.d.ts +5 -0
  456. package/dist/components/timepicker/timepicker.component.js +90 -95
  457. package/dist/components/timepicker/timepicker.component.js.map +1 -1
  458. package/dist/components/timepicker/timepicker.scss.js +1 -1
  459. package/dist/components/toc/toc.component.d.ts +2 -0
  460. package/dist/components/toc/toc.component.js +58 -61
  461. package/dist/components/toc/toc.component.js.map +1 -1
  462. package/dist/components/toggle-button/toggle-button.component.js +9 -12
  463. package/dist/components/toggle-button/toggle-button.component.js.map +1 -1
  464. package/dist/components/tooltip/tooltip.component.d.ts +2 -0
  465. package/dist/components/tooltip/tooltip.component.js +16 -18
  466. package/dist/components/tooltip/tooltip.component.js.map +1 -1
  467. package/dist/components/tray/tray.component.d.ts +4 -1
  468. package/dist/components/tray/tray.component.js +13 -16
  469. package/dist/components/tray/tray.component.js.map +1 -1
  470. package/dist/components/typography/typography.component.js +38 -41
  471. package/dist/components/typography/typography.component.js.map +1 -1
  472. package/dist/components.d.ts +3 -0
  473. package/dist/components.js +204 -195
  474. package/dist/components.js.map +1 -1
  475. package/dist/components.native.css +5 -2
  476. package/dist/components.native.css.map +1 -1
  477. package/dist/dap-design-system.d.ts +3 -0
  478. package/dist/dds-preupgrade.css +57 -0
  479. package/dist/dds.js +383 -374
  480. package/dist/dds.js.map +1 -1
  481. package/dist/internal/dds-hu-element.d.ts +8 -0
  482. package/dist/internal/dds-hu-element.js +40 -41
  483. package/dist/internal/dds-hu-element.js.map +1 -1
  484. package/dist/internal/mixin/choiceElementMixin.js +7 -7
  485. package/dist/internal/mixin/feedbackMixin.js +13 -15
  486. package/dist/internal/mixin/feedbackMixin.js.map +1 -1
  487. package/dist/internal/mixin/focusableMixin.js +6 -6
  488. package/dist/internal/mixin/formElementMixin.js +1 -1
  489. package/dist/internal/mixin/labelPositionedMixin.js +1 -1
  490. package/dist/internal/mixin/labelableMixin.d.ts +1 -1
  491. package/dist/internal/mixin/labelableMixin.js +61 -63
  492. package/dist/internal/mixin/labelableMixin.js.map +1 -1
  493. package/dist/internal/mixin/sizedMixin.js +29 -27
  494. package/dist/internal/mixin/sizedMixin.js.map +1 -1
  495. package/dist/internal/templates/formLabel.d.ts +41 -0
  496. package/dist/internal/templates/formLabel.js +47 -0
  497. package/dist/internal/templates/formLabel.js.map +1 -0
  498. package/dist/localization/locales/de.json.js +7 -7
  499. package/dist/localization/locales/en.json.js +6 -6
  500. package/dist/localization/locales/hu.json.js +1 -1
  501. package/dist/localization/localization.d.ts +1 -2
  502. package/dist/localization/localization.js +77 -76
  503. package/dist/localization/localization.js.map +1 -1
  504. package/dist/localization/localize-controller.d.ts +12 -0
  505. package/dist/localization/localize-controller.js +51 -0
  506. package/dist/localization/localize-controller.js.map +1 -0
  507. package/dist/manifest/types/vue/index.d.ts +509 -292
  508. package/dist/manifest/vscode.html-custom-data.json +328 -269
  509. package/dist/manifest/web-types.json +834 -720
  510. package/dist/react/dap-ds-accordion/index.d.ts +1 -0
  511. package/dist/react/dap-ds-accordion/index.js.map +1 -1
  512. package/dist/react/dap-ds-anchor-heading/index.d.ts +1 -0
  513. package/dist/react/dap-ds-anchor-heading/index.js.map +1 -1
  514. package/dist/react/dap-ds-banner/index.d.ts +1 -1
  515. package/dist/react/dap-ds-banner/index.js.map +1 -1
  516. package/dist/react/dap-ds-breadcrumb/index.d.ts +1 -1
  517. package/dist/react/dap-ds-breadcrumb/index.js.map +1 -1
  518. package/dist/react/dap-ds-button-group/index.d.ts +45 -0
  519. package/dist/react/dap-ds-button-group/index.js +15 -0
  520. package/dist/react/dap-ds-button-group/index.js.map +1 -0
  521. package/dist/react/dap-ds-button-group-separator/index.d.ts +24 -0
  522. package/dist/react/dap-ds-button-group-separator/index.js +15 -0
  523. package/dist/react/dap-ds-button-group-separator/index.js.map +1 -0
  524. package/dist/react/dap-ds-button-group-text/index.d.ts +30 -0
  525. package/dist/react/dap-ds-button-group-text/index.js +15 -0
  526. package/dist/react/dap-ds-button-group-text/index.js.map +1 -0
  527. package/dist/react/dap-ds-calendar/index.d.ts +3 -0
  528. package/dist/react/dap-ds-calendar/index.js.map +1 -1
  529. package/dist/react/dap-ds-callout/index.d.ts +1 -0
  530. package/dist/react/dap-ds-callout/index.js.map +1 -1
  531. package/dist/react/dap-ds-card/index.d.ts +1 -0
  532. package/dist/react/dap-ds-card/index.js.map +1 -1
  533. package/dist/react/dap-ds-checkbox/index.d.ts +7 -1
  534. package/dist/react/dap-ds-checkbox/index.js.map +1 -1
  535. package/dist/react/dap-ds-chip/index.d.ts +1 -0
  536. package/dist/react/dap-ds-chip/index.js.map +1 -1
  537. package/dist/react/dap-ds-code-puncher/index.d.ts +4 -0
  538. package/dist/react/dap-ds-code-puncher/index.js.map +1 -1
  539. package/dist/react/dap-ds-combobox/index.d.ts +9 -1
  540. package/dist/react/dap-ds-combobox/index.js.map +1 -1
  541. package/dist/react/dap-ds-command/index.d.ts +3 -0
  542. package/dist/react/dap-ds-command/index.js.map +1 -1
  543. package/dist/react/dap-ds-copybox-input/index.d.ts +11 -0
  544. package/dist/react/dap-ds-copybox-input/index.js.map +1 -1
  545. package/dist/react/dap-ds-datatable/index.d.ts +17 -0
  546. package/dist/react/dap-ds-datatable/index.js.map +1 -1
  547. package/dist/react/dap-ds-datepicker/index.d.ts +8 -0
  548. package/dist/react/dap-ds-datepicker/index.js.map +1 -1
  549. package/dist/react/dap-ds-file-input/index.d.ts +3 -0
  550. package/dist/react/dap-ds-file-input/index.js.map +1 -1
  551. package/dist/react/dap-ds-file-input-list-item/index.d.ts +1 -0
  552. package/dist/react/dap-ds-file-input-list-item/index.js.map +1 -1
  553. package/dist/react/dap-ds-form-label/index.d.ts +1 -1
  554. package/dist/react/dap-ds-form-label/index.js.map +1 -1
  555. package/dist/react/dap-ds-icon-button/index.d.ts +1 -0
  556. package/dist/react/dap-ds-icon-button/index.js.map +1 -1
  557. package/dist/react/dap-ds-input-group/index.d.ts +4 -0
  558. package/dist/react/dap-ds-input-group/index.js.map +1 -1
  559. package/dist/react/dap-ds-list-item/index.d.ts +2 -0
  560. package/dist/react/dap-ds-list-item/index.js.map +1 -1
  561. package/dist/react/dap-ds-number-input/index.d.ts +7 -0
  562. package/dist/react/dap-ds-number-input/index.js.map +1 -1
  563. package/dist/react/dap-ds-official-website-banner/index.d.ts +1 -0
  564. package/dist/react/dap-ds-official-website-banner/index.js.map +1 -1
  565. package/dist/react/dap-ds-option-item/index.d.ts +1 -0
  566. package/dist/react/dap-ds-option-item/index.js.map +1 -1
  567. package/dist/react/dap-ds-option-list/index.d.ts +1 -1
  568. package/dist/react/dap-ds-option-list/index.js.map +1 -1
  569. package/dist/react/dap-ds-password-input/index.d.ts +12 -5
  570. package/dist/react/dap-ds-password-input/index.js.map +1 -1
  571. package/dist/react/dap-ds-radio-button/index.d.ts +5 -0
  572. package/dist/react/dap-ds-radio-button/index.js.map +1 -1
  573. package/dist/react/dap-ds-radio-group/index.d.ts +5 -0
  574. package/dist/react/dap-ds-radio-group/index.js.map +1 -1
  575. package/dist/react/dap-ds-scroll-area/index.d.ts +2 -1
  576. package/dist/react/dap-ds-scroll-area/index.js.map +1 -1
  577. package/dist/react/dap-ds-search/index.d.ts +6 -1
  578. package/dist/react/dap-ds-search/index.js.map +1 -1
  579. package/dist/react/dap-ds-select/index.d.ts +6 -0
  580. package/dist/react/dap-ds-select/index.js.map +1 -1
  581. package/dist/react/dap-ds-sidenav-group/index.d.ts +1 -0
  582. package/dist/react/dap-ds-sidenav-group/index.js.map +1 -1
  583. package/dist/react/dap-ds-snackbar/index.d.ts +0 -1
  584. package/dist/react/dap-ds-snackbar/index.js.map +1 -1
  585. package/dist/react/dap-ds-snackbar-message/index.d.ts +3 -1
  586. package/dist/react/dap-ds-snackbar-message/index.js.map +1 -1
  587. package/dist/react/dap-ds-stack/index.d.ts +2 -1
  588. package/dist/react/dap-ds-stack/index.js.map +1 -1
  589. package/dist/react/dap-ds-switch/index.d.ts +6 -0
  590. package/dist/react/dap-ds-switch/index.js.map +1 -1
  591. package/dist/react/dap-ds-tab-group/index.d.ts +4 -2
  592. package/dist/react/dap-ds-tab-group/index.js.map +1 -1
  593. package/dist/react/dap-ds-table/index.d.ts +2 -0
  594. package/dist/react/dap-ds-table/index.js.map +1 -1
  595. package/dist/react/dap-ds-table-cell/index.d.ts +1 -1
  596. package/dist/react/dap-ds-table-cell/index.js.map +1 -1
  597. package/dist/react/dap-ds-textarea/index.d.ts +2 -0
  598. package/dist/react/dap-ds-textarea/index.js.map +1 -1
  599. package/dist/react/dap-ds-time-grid/index.d.ts +3 -0
  600. package/dist/react/dap-ds-time-grid/index.js.map +1 -1
  601. package/dist/react/dap-ds-timepicker/index.d.ts +5 -0
  602. package/dist/react/dap-ds-timepicker/index.js.map +1 -1
  603. package/dist/react/dap-ds-toc/index.d.ts +2 -0
  604. package/dist/react/dap-ds-toc/index.js.map +1 -1
  605. package/dist/react/dap-ds-tooltip/index.d.ts +2 -0
  606. package/dist/react/dap-ds-tooltip/index.js.map +1 -1
  607. package/dist/react/dap-ds-tray/index.d.ts +4 -1
  608. package/dist/react/dap-ds-tray/index.js.map +1 -1
  609. package/dist/react/index.d.ts +11 -8
  610. package/dist/react-types.ts +11 -8
  611. package/dist/react.js +362 -356
  612. package/dist/react.js.map +1 -1
  613. package/package.json +17 -3
  614. package/dist/node_modules/@lit/context/lib/context-request-event.js +0 -14
  615. package/dist/node_modules/@lit/context/lib/context-request-event.js.map +0 -1
  616. package/dist/node_modules/@lit/context/lib/controllers/context-consumer.js +0 -31
  617. package/dist/node_modules/@lit/context/lib/controllers/context-consumer.js.map +0 -1
  618. package/dist/node_modules/@lit/context/lib/controllers/context-provider.js +0 -40
  619. package/dist/node_modules/@lit/context/lib/controllers/context-provider.js.map +0 -1
  620. package/dist/node_modules/@lit/context/lib/create-context.js +0 -12
  621. package/dist/node_modules/@lit/context/lib/create-context.js.map +0 -1
  622. package/dist/node_modules/@lit/context/lib/value-notifier.js +0 -37
  623. package/dist/node_modules/@lit/context/lib/value-notifier.js.map +0 -1
  624. package/dist/node_modules/@lit/reactive-element/css-tag.js +0 -51
  625. package/dist/node_modules/@lit/reactive-element/css-tag.js.map +0 -1
  626. package/dist/node_modules/@lit/reactive-element/decorators/base.js +0 -10
  627. package/dist/node_modules/@lit/reactive-element/decorators/base.js.map +0 -1
  628. package/dist/node_modules/@lit/reactive-element/decorators/property.js +0 -38
  629. package/dist/node_modules/@lit/reactive-element/decorators/property.js.map +0 -1
  630. package/dist/node_modules/@lit/reactive-element/decorators/query-all.js +0 -17
  631. package/dist/node_modules/@lit/reactive-element/decorators/query-all.js.map +0 -1
  632. package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js +0 -20
  633. package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js.map +0 -1
  634. package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js +0 -20
  635. package/dist/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js.map +0 -1
  636. package/dist/node_modules/@lit/reactive-element/decorators/query.js +0 -21
  637. package/dist/node_modules/@lit/reactive-element/decorators/query.js.map +0 -1
  638. package/dist/node_modules/@lit/reactive-element/decorators/state.js +0 -25
  639. package/dist/node_modules/@lit/reactive-element/decorators/state.js.map +0 -1
  640. package/dist/node_modules/@lit/reactive-element/reactive-element.js +0 -276
  641. package/dist/node_modules/@lit/reactive-element/reactive-element.js.map +0 -1
  642. package/dist/node_modules/lit-element/lit-element.js +0 -53
  643. package/dist/node_modules/lit-element/lit-element.js.map +0 -1
  644. package/dist/node_modules/lit-html/async-directive.js +0 -71
  645. package/dist/node_modules/lit-html/async-directive.js.map +0 -1
  646. package/dist/node_modules/lit-html/directive-helpers.js +0 -46
  647. package/dist/node_modules/lit-html/directive-helpers.js.map +0 -1
  648. package/dist/node_modules/lit-html/directive.js +0 -28
  649. package/dist/node_modules/lit-html/directive.js.map +0 -1
  650. package/dist/node_modules/lit-html/directives/if-defined.js +0 -11
  651. package/dist/node_modules/lit-html/directives/if-defined.js.map +0 -1
  652. package/dist/node_modules/lit-html/directives/map.js +0 -15
  653. package/dist/node_modules/lit-html/directives/map.js.map +0 -1
  654. package/dist/node_modules/lit-html/directives/repeat.js +0 -63
  655. package/dist/node_modules/lit-html/directives/repeat.js.map +0 -1
  656. package/dist/node_modules/lit-html/directives/style-map.js +0 -37
  657. package/dist/node_modules/lit-html/directives/style-map.js.map +0 -1
  658. package/dist/node_modules/lit-html/lit-html.js +0 -249
  659. package/dist/node_modules/lit-html/lit-html.js.map +0 -1
  660. package/dist/node_modules/lit-html/static.js +0 -34
  661. package/dist/node_modules/lit-html/static.js.map +0 -1
  662. package/dist/node_modules/lit-i18n/src/lit-i18n.js +0 -95
  663. package/dist/node_modules/lit-i18n/src/lit-i18n.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"file-input.component.js","sources":["../../../src/components/file-input/file-input.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { css, html, nothing, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { FileError, HttpError } from '@/common/errors'\nimport { CommonFormElementSize } from '@/common/types'\nimport { FileListElement } from '@/components/file-input/file-input-list-item.component'\nimport { GenericFormElement } from '@/internal/mixin/genericFormElement'\nimport { i18next, t, translate } from '@/localization/localization'\n\nimport DapDSButton from '../button/button.component'\nimport DapDSFeedback from '../feedback/feedback.component'\nimport DapDSFormLabel from '../form/form-label/form-label.component'\nimport DapDSIcon from '../icon/icon.component'\nimport DapDSIconButton from '../icon-button/icon-button.component'\nimport DapDSModal from '../modal/modal.component'\nimport DapDSTooltip from '../tooltip/tooltip.component'\nimport DapDSTypography from '../typography/typography.component'\nimport style from './file-input.scss?inline'\nimport DapDSFileInputList from './file-input-list.component'\nimport DapDSFileInputListItem from './file-input-list-item.component'\n\n/**\n * `dap-ds-file-input`\n * @summary A file input is a control that allows users to select files to upload.\n * @element dap-ds-file-input\n * @title - File input\n *\n * @property {string} name - The name of the file input.\n * @property {string} value - The value of the file input.\n * @property {'success' | 'error'} status - The status of the file input.\n * @property {string} label - The label for the file input.\n * @property {boolean} hideLabel - Visually hides the label while keeping it available to assistive technology. (default: false)\n * @property {string} description - The description for the file input.\n * @property {string} tooltip - The tooltip for the file input.\n * @property {'top' | 'right' | 'bottom' | 'left'} tooltipPlacement - The tooltip placement of the input.\n * @property {boolean} disabled - Whether the file input is disabled.\n * @property { 'xs' | 'sm' | 'lg' } size - The size of the file input.\n * @property {string} feedback - The feedback for the file input.\n * @property {'negative' | 'positive' | 'warning'} feedbackType - The type of feedback for the file input.\n * @property {boolean} required - Whether the file input is required.\n * @property {string} requiredLabel - The required indicator of the file input. (default: '*')\n * @property {boolean} optional - Whether the file input is optional.\n * @property {string} optionalLabel - The optional label of the file input.\n * @property {boolean} subtle - Font weight of the feedback label. Default is `false` which is bold.\n * @property {string} uploadButtonLabel - The label for the upload button.\n * @property {string} browseButtonLabel - The label for the browse button.\n * @property {string} accept - The file types that the file input accepts.\n * @property {boolean} multiple - Whether the file input accepts multiple files.\n * @property {boolean} keepValue - Whether to keep the value when new files are selected.\n * @property {string} uploadUrl - A remote URL to upload files to.\n * @property {string} deleteUrl - A remote URL to delete uploaded files from. Supports placeholders: `{fileName}`, `{id}`, `{key}`, `{location}`.\n * @property {string} uploadHeaders - Custom headers for upload requests (JSON string).\n * @property {string} deleteHeaders - Custom headers for delete requests (JSON string).\n * @property {boolean} autoupload - Whether to automatically upload files after selection.\n * @property {number} maxFiles - The maximum number of files that can be uploaded.\n * @property {number} maxFileSize - The maximum size of files that can be uploaded (in bytes).\n * @property {number} maxSizePerFile - The maximum size a single file can have (in bytes).\n * @property {string} maxFileSizeErrorText - Text for the max file size error.\n * @property {string} maxSizePerFileErrorText - Text for the max size per file error.\n * @property {string} maxFileAmountErrorText - Text for the max file amount error.\n * @property {string} fileTypeErrorText - Text for the file type error.\n * @property {boolean} showDropzone - Whether to show a separate dropzone area.\n * @property {string} dropzoneText - Text to display in the dropzone.\n * @property {string} dropzoneAriaLabel - Aria label for the dropzone.\n * @property {boolean} dropzoneFocusable - Whether the dropzone is in the tab order and exposes button keyboard behavior (default: true).\n * @property {boolean} showFileList - Whether to show the built-in file list.\n * @property {boolean} confirmRemove - Whether to show confirmation dialog before removing files.\n * @property {string} showUploadButton - Whether to show the upload button. Default is `true`.\n * @property {string} removeButtonLabel - The label for the remove button.\n * @property {string} cancelButtonLabel - The label for the cancel button.\n *\n * @event {{ file: File }} dds-upload-start - Fired when a file upload starts.\n * @event {{ file: File, progress: number }} dds-upload-progress - Fired during file upload progress.\n * @event {{ file: File, item: DapDSFileInputListItem, result: any }} dds-upload-complete - Fired when a file upload completes successfully.\n * @event {{ file?: File, errors: FileError[], item?: DapDSFileInputListItem }} dds-upload-error - Fired when a file upload encounters an error. Always contains an errors array, even if there is only one error.\n * @event {{ void }} dds-all-uploads-complete - Fired when all file uploads are complete.\n * @event {{ file: FileListElement }} dds-file-removed - Fired when a file is removed from the file input.\n * @event {{ file: FileListElement, error: Error }} dds-file-delete-error - Fired when a file deletion from server encounters an error.\n * @event {{ newFiles: File[], files: File[], canceledFiles: Set<File>, currentFiles: File[] }} dds-file-change - Fired when the file input value changes. This event is cancelable. Event detail contains: `newFiles` (just the files being added in this operation), `currentFiles` (all files that were already selected before this operation), `files` (all files after merge with existing when keepValue=true), and `canceledFiles` (Set to add files you want to reject). You can either: (1) Call `event.preventDefault()` to reject all files, or (2) Add specific files to `canceledFiles` to reject only those files.\n * @event {{ files: File[] }} dds-files-accepted - Fired when the file input value changes. This event is cancelable. Event detail contains: `files` (all files after merge with existing when keepValue=true).\n *\n * @slot dropzone-content - The content to display in the dropzone.\n *\n * @csspart base - The main file input container.\n * @csspart input - The file input control.\n * @csspart label - The file input label.\n * @csspart description - The file input description.\n * @csspart feedback - The file input feedback.\n * @csspart tooltip - The file input tooltip.\n * @csspart upload-progress - The upload progress container.\n * @csspart browse-button - The browse button.\n * @csspart upload-button - The upload button.\n * @csspart dropzone - The dropzone area.\n *\n * @cssproperty --dds-file-input-holder-margin - The margin of the input holder in shorthand format: top right bottom left (default: var(--dds-spacing-400) 0 0 0)\n * @cssproperty --dds-file-input-dropzone-padding - The padding of the dropzone (default: var(--dds-spacing-800))\n * @cssproperty --dds-file-input-dropzone-border - The border of the dropzone in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-border-neutral-subtle))\n * @cssproperty --dds-file-input-dropzone-border-radius - The border radius of the dropzone (default: var(--dds-radius-base))\n * @cssproperty --dds-file-input-dropzone-background - The background of the dropzone (default: var(--dds-color-background-primary))\n * @cssproperty --dds-file-input-dropzone-border-hover - The border of the dropzone on hover in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-color-border-primary-hover))\n * @cssproperty --dds-file-input-dropzone-background-hover - The background of the dropzone on hover (default: var(--dds-color-background-primary-hover))\n * @cssproperty --dds-file-input-dropzone-border-dragover - The border of the dropzone when dragging over in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-color-border-accent))\n * @cssproperty --dds-file-input-dropzone-background-dragover - The background of the dropzone when dragging over (default: var(--dds-color-background-accent-light))\n * @cssproperty --dds-file-input-dropzone-border-disabled - The border of the disabled dropzone in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-border-neutral-disabled))\n * @cssproperty --dds-file-input-dropzone-gap - The gap between elements in the dropzone content (default: var(--dds-spacing-300))\n * @cssproperty --dds-file-input-dropzone-accept-color - The text color of the accepted file types in the dropzone (default: var(--dds-color-text-secondary))\n */\nexport default class DapDSFileInput extends GenericFormElement {\n static tagName = 'dap-ds-file-input'\n\n static dependencies = {\n 'dap-ds-form-label': DapDSFormLabel,\n 'dap-ds-tooltip': DapDSTooltip,\n 'dap-ds-icon-button': DapDSIconButton,\n 'dap-ds-icon': DapDSIcon,\n 'dap-ds-typography': DapDSTypography,\n 'dap-ds-button': DapDSButton,\n 'dap-ds-modal': DapDSModal,\n 'dap-ds-feedback': DapDSFeedback,\n }\n\n @query('#input') private readonly input!: HTMLInputElement\n\n /** Label for the upload button */\n @property() uploadButtonLabel: string\n\n /** Label for the browse button */\n @property() browseButtonLabel: string\n\n /** `data-testid` for the browse button. */\n @property() browseButtonTestId = 'file-input-browse-button'\n\n /** `data-testid` for the upload button. */\n @property() uploadButtonTestId = 'file-input-upload-button'\n\n /** Whether to show a separate dropzone area */\n @property({ type: Boolean }) showDropzone = false\n\n /** Text to display in the dropzone */\n @property() dropzoneText: string\n\n /** Whether to show the built-in file list */\n @property({ type: Boolean }) showFileList = false\n\n /** Whether to show confirmation dialog before removing files */\n @property({ type: Boolean }) confirmRemove = true\n\n /** Whether to show the upload button */\n @property({ type: String }) showUploadButton = 'true'\n\n /** Whether to show the browse button */\n @property({ type: String }) showBrowseButton = 'true'\n\n /** The file types that the file input accepts */\n @property() accept: string\n\n /** Whether the file input accepts multiple files. */\n @property({ type: Boolean }) multiple = false\n\n /** Whether to keep the value of the file input when new files are selected. */\n @property({ type: Boolean }) keepValue = false\n\n /** A remote URL to upload files to */\n @property() uploadUrl: string\n\n /** Whether to automatically upload files after selection */\n @property({ type: Boolean }) autoupload: boolean\n\n /** The property to use when uploading files */\n @property() uploadProperty = 'file'\n\n /** The HTTP method to use when uploading files */\n @property() uploadMethod = 'POST'\n\n /** A remote URL to delete uploaded files from */\n @property() deleteUrl: string\n\n /** The HTTP method to use when deleting files */\n @property() deleteMethod = 'DELETE'\n\n /** Whether to send credentials with the file upload request */\n @property({ type: Boolean }) withCredentials = false\n\n /** Custom headers to send with upload requests (JSON string) */\n @property() uploadHeaders: string\n\n /** Custom headers to send with delete requests (JSON string) */\n @property() deleteHeaders: string\n\n /** The file list component to bind to */\n @property({ attribute: false }) fileList: DapDSFileInputList | null = null\n\n /** The maximum number of files that can be uploaded */\n @property({ type: Number }) maxFiles?: number\n\n /** The maximum size of files that can be uploaded (in bytes) sum of all files */\n @property({ type: Number }) maxFileSize?: number\n\n /** The maximum size a single file can have (in bytes) */\n @property({ type: Number }) maxSizePerFile?: number\n\n /** Text for the max file size error */\n @property({ type: String }) maxFileSizeErrorText?: string\n\n /** Text for the max size per file error */\n @property({ type: String }) maxSizePerFileErrorText?: string\n\n /** Text for the max file amount error */\n @property({ type: String }) maxFileAmountErrorText?: string\n\n /** Text for the file type error */\n @property({ type: String }) fileTypeErrorText?: string\n\n /** The label for the remove button */\n @property() removeButtonLabel: string\n\n /** The label for the cancel button */\n @property() cancelButtonLabel: string\n\n /** Whether the remove button is dangerous */\n @property({ type: String }) removeButtonDanger = 'true'\n\n /** Whether to show thumbnail preview for supported file types in the built-in file list */\n @property({ type: String }) showThumbnail = 'true'\n\n /** Aria label for the dropzone */\n @property() dropzoneAriaLabel: string\n\n /**\n * When false, the dropzone is not tab-focusable (tabindex -1), uses role=\"group\"\n * instead of role=\"button\", and Enter/Space no longer opens the file dialog from\n * the dropzone. Click and drag-and-drop still work. When the browse button is\n * also hidden, slot a focusable control into dropzone-content to keep a keyboard\n * path to the file dialog — the hidden native input is out of the tab order\n * whenever a dropzone is rendered.\n */\n @property({ type: String }) dropzoneFocusable = 'true'\n\n /** Size of the thumbnail preview in the built-in file list */\n @property({ type: String })\n thumbnailSize: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'sm'\n\n @property({ type: Array, attribute: false })\n get files() {\n return this._files\n }\n\n @state() private _files: File[] = []\n @state() private _uploadProgress: Record<string, number> = {}\n @state() private readonly _uploadingFiles: Set<string> = new Set()\n @state() private readonly _activeUploads: Map<string, XMLHttpRequest> =\n new Map()\n @state() private readonly _uploadedFiles: Map<string, any> = new Map() // Track uploaded files with their server response\n @state() private _isDragOver = false\n @state() private _showRemoveDialog = false\n @state() private _fileToRemove: File | null = null\n private _removeResolve: ((value: unknown) => void) | null = null\n private _removeReject: ((reason?: any) => void) | null = null\n\n static readonly styles = css`\n ${unsafeCSS(style)}\n `\n\n checkFileEquality(\n file1: File | FileListElement,\n file2: File | FileListElement,\n ) {\n return (\n file1.name === file2.name &&\n file1.size === file2.size &&\n file1.type === file2.type &&\n file1.lastModified === file2.lastModified\n )\n }\n\n /**\n * Validates if a file type is accepted based on the accept attribute\n */\n private validateFileType(file: File): boolean {\n if (!this.accept) return true\n\n const acceptedTypes = this.accept.split(',').map(type => type.trim())\n\n return acceptedTypes.some(acceptedType => {\n // Handle MIME types (e.g., \"image/jpeg\", \"text/*\")\n if (acceptedType.includes('/')) {\n if (acceptedType.endsWith('/*')) {\n const baseType = acceptedType.slice(0, -2)\n return file.type.startsWith(baseType)\n }\n return file.type === acceptedType\n }\n\n // Handle file extensions (e.g., \".jpg\", \".pdf\")\n if (acceptedType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptedType.toLowerCase())\n }\n\n return false\n })\n }\n\n public get focusElement() {\n return this.input\n }\n /**\n * Validates a file list against all constraints (count, size, type)\n */\n private validateFiles(fileList: FileList): {\n isValid: boolean\n errors?: Array<{\n file?: File\n message: string\n type: string\n meta?: Record<string, any>\n }>\n } {\n const errors: Array<{\n file?: File\n message: string\n type: string\n meta?: Record<string, any>\n }> = []\n\n // Check file count. With keepValue=false the incoming selection replaces the\n // current one, so the already selected files must not count towards the limit.\n const existingFileCount = this.keepValue ? this._files.length : 0\n\n if (this.maxFiles && fileList.length + existingFileCount > this.maxFiles) {\n for (const file of fileList) {\n errors.push({\n file: file,\n meta: {\n maxFiles: this.maxFiles,\n totalFiles: fileList.length + existingFileCount,\n },\n message:\n this.maxFileAmountErrorText ||\n t('fileInput.error.fileAmount', {\n count: this.maxFiles,\n }),\n type: 'maxFiles',\n })\n }\n }\n\n // Check file types and sizes\n let totalSize = 0\n for (const file of fileList) {\n // Validate file type\n if (!this.validateFileType(file)) {\n errors.push({\n file,\n meta: {\n type: this.accept,\n fileType: file.type,\n },\n message:\n this.fileTypeErrorText ||\n t('fileInput.error.fileType', {\n type: this.accept,\n }),\n type: 'fileType',\n })\n }\n\n if (this.maxSizePerFile && file.size > this.maxSizePerFile) {\n errors.push({\n file,\n meta: {\n maxSizePerFile: this.maxSizePerFile,\n fileSize: file.size,\n },\n message:\n this.maxSizePerFileErrorText ||\n t('fileInput.error.perFileSize', {\n size: Math.round(this.maxSizePerFile / 1024 / 1024),\n }),\n type: 'maxSizePerFile',\n })\n }\n\n // Validate file size\n totalSize += file.size\n if (this.maxFileSize && totalSize > this.maxFileSize) {\n errors.push({\n file,\n meta: {\n maxFileSize: this.maxFileSize,\n totalSize: totalSize,\n fileSize: file.size,\n },\n message:\n this.maxFileSizeErrorText ||\n t('fileInput.error.fileSize', {\n size: Math.round(this.maxFileSize / 1024 / 1024),\n }),\n type: 'maxFileSize',\n })\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors: errors.length > 0 ? errors : undefined,\n }\n }\n\n /**\n * Removes a single file from the file input and frees up a slot in the\n * `maxFiles` budget.\n *\n * @param fileData The file to remove. It is matched against the selected files\n * by name, size, type and lastModified, so a structurally equal file also works.\n * @param options.skipConfirm Skips the built-in confirmation dialog for this\n * call only, without having to change the `confirmRemove` property. Useful when\n * the host application renders its own file list and already confirmed removal.\n */\n public removeFile(\n fileData: FileListElement | File,\n options?: { skipConfirm?: boolean },\n ): Promise<void> | void {\n if (this.confirmRemove && !options?.skipConfirm) {\n return new Promise((resolve, reject) => {\n this._removeResolve = resolve\n this._removeReject = reject\n this._showRemoveDialog = true\n this._fileToRemove = fileData as File\n })\n .then(() => {\n return this.performFileRemoval(fileData)\n })\n .catch(() => {\n // User cancelled - no action needed\n })\n } else {\n return this.performFileRemoval(fileData)\n }\n }\n\n /**\n * Removes every selected file, so the whole `maxFiles` budget becomes\n * available again.\n *\n * This is a programmatic API, so it never shows the confirmation dialog.\n * Files already uploaded are deleted from the server when `deleteUrl` is set,\n * and in-flight uploads are aborted.\n */\n public async clearFiles(): Promise<void> {\n const removedFiles = [...this._files]\n\n if (removedFiles.length === 0) return\n\n this.abortAllUploads()\n\n for (const file of removedFiles) {\n await this.deleteUploadedFileFromServer(file)\n }\n\n this._files = []\n this.value = undefined\n this.syncNativeInput()\n\n removedFiles.forEach(file => this.emit('dds-file-removed', { file }))\n this.emit('dds-file-change', {\n newFiles: [],\n files: this._files,\n canceledFiles: new Set(),\n currentFiles: this._files,\n })\n this.setValidity()\n this.emit('dds-files-accepted', { files: this._files })\n }\n\n /**\n * Deletes an already uploaded file from the server when a deleteUrl is set.\n * Delete failures are reported but never block the local removal.\n */\n private async deleteUploadedFileFromServer(fileData: FileListElement | File) {\n const fileName = fileData.name\n\n if (!this._uploadedFiles.has(fileName)) return\n\n try {\n const uploadResult = this._uploadedFiles.get(fileName)\n await this.deleteUploadedFile(fileName, uploadResult)\n this._uploadedFiles.delete(fileName)\n } catch (error) {\n // Emit delete error event but still remove from local list\n this.emit('dds-file-delete-error', { file: fileData, error })\n }\n }\n\n /** Keeps the native input element in sync with the current file list */\n private syncNativeInput() {\n if (!this.input) return\n\n if (this._files.length === 0) {\n // Also drops the underlying FileList, so the same file can be picked again\n this.input.value = ''\n return\n }\n\n if (typeof DataTransfer === 'undefined') return\n\n const dataTransfer = new DataTransfer()\n this._files.forEach(file => dataTransfer.items.add(file))\n this.input.files = dataTransfer.files\n }\n\n private async performFileRemoval(fileData: FileListElement | File) {\n this.abortUpload(fileData.name)\n\n await this.deleteUploadedFileFromServer(fileData)\n\n this._files = this._files.filter(\n (file: File) => !this.checkFileEquality(file, fileData),\n )\n\n this.syncNativeInput()\n\n if (this._files.length === 0 && this.required) {\n this.value = undefined\n }\n\n this.emit('dds-file-removed', { file: fileData })\n this.emit('dds-file-change', {\n newFiles: [],\n files: this._files,\n canceledFiles: new Set(),\n currentFiles: this._files,\n })\n this.setValidity()\n // Emit event with final accepted files after removal\n this.emit('dds-files-accepted', { files: this._files })\n }\n\n private languageChangeHandler = () => {\n // Force re-render when language changes to update translated text\n this.requestUpdate()\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n // Listen for language changes to update translated text\n i18next.on('languageChanged', this.languageChangeHandler)\n\n this.addEventListener('dds-file-remove', event => {\n const customEvent = event as CustomEvent\n this.removeFile(customEvent.detail.file)\n })\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n // Clean up language change listener\n i18next.off('languageChanged', this.languageChangeHandler)\n }\n\n async onConfirmDelete() {\n if (this._removeResolve) {\n this._removeResolve(true)\n }\n this._showRemoveDialog = false\n this._fileToRemove = null\n this._removeResolve = null\n this._removeReject = null\n }\n\n onCancelDelete() {\n if (this._removeReject) {\n this._removeReject(new Error('User cancelled'))\n }\n this._showRemoveDialog = false\n this._fileToRemove = null\n this._removeResolve = null\n this._removeReject = null\n }\n\n onCancel() {\n this.emit('dds-cancel')\n this.setValidity()\n }\n\n onClick() {\n if (this.disabled) return\n this.input.click()\n }\n\n onDropzoneKeydown(event: KeyboardEvent) {\n if (this.disabled || this.dropzoneFocusable === 'false') return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.input.click()\n }\n }\n\n setFileLoadingState(file: File, loading: boolean) {\n if (!this.fileList) {\n return\n }\n\n const fileComponent = this.fileList.getFileByName(\n file.name,\n )! as DapDSFileInputListItem\n\n fileComponent.loading = loading\n\n return fileComponent\n }\n\n /**\n * Aborts upload for a specific file\n */\n abortUpload(fileName: string) {\n const xhr = this._activeUploads.get(fileName)\n if (xhr) {\n xhr.abort()\n this._uploadingFiles.delete(fileName)\n this._activeUploads.delete(fileName)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[fileName]\n this._uploadProgress = newProgress\n }\n }\n\n /**\n * Aborts all active uploads\n */\n abortAllUploads() {\n this._activeUploads.forEach(xhr => {\n xhr.abort()\n })\n this._uploadingFiles.clear()\n this._activeUploads.clear()\n this._uploadProgress = {}\n }\n\n /**\n * Manually start upload of all selected files\n */\n startUpload() {\n if (this._files.length > 0 && this.uploadUrl) {\n this.uploadFiles(this._files)\n }\n }\n\n /**\n * Delete an uploaded file from the server\n */\n private async deleteUploadedFile(\n fileName: string,\n uploadResult: any,\n ): Promise<void> {\n if (!this.deleteUrl) {\n console.error('Delete URL is not configured')\n return\n }\n\n const xhr = new XMLHttpRequest()\n xhr.withCredentials = this.withCredentials\n\n return new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve()\n } else {\n reject(\n new HttpError(\n `HTTP error! status: ${xhr.status}`,\n xhr.response,\n xhr.status,\n ),\n )\n }\n }\n xhr.onerror = () => {\n reject(new Error('Network error during file deletion'))\n }\n\n // Construct delete URL with multiple placeholder support\n let deleteEndpoint = this.deleteUrl\n\n // Replace common placeholders\n deleteEndpoint = deleteEndpoint.replace(\n '{fileName}',\n encodeURIComponent(fileName),\n )\n deleteEndpoint = deleteEndpoint.replace(\n '{filename}',\n encodeURIComponent(fileName),\n )\n\n // If uploadResult contains an ID or key, use that for deletion\n if (uploadResult && typeof uploadResult === 'object') {\n if (uploadResult.id) {\n deleteEndpoint = deleteEndpoint.replace(\n '{id}',\n encodeURIComponent(uploadResult.id),\n )\n }\n if (uploadResult.key) {\n deleteEndpoint = deleteEndpoint.replace(\n '{key}',\n encodeURIComponent(uploadResult.key),\n )\n }\n if (uploadResult.location) {\n deleteEndpoint = deleteEndpoint.replace(\n '{location}',\n encodeURIComponent(uploadResult.location),\n )\n }\n }\n\n xhr.open(this.deleteMethod, deleteEndpoint)\n\n // Add custom headers for delete\n if (this.deleteHeaders) {\n try {\n const headers = JSON.parse(this.deleteHeaders)\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value as string)\n })\n } catch (error) {\n console.warn('Invalid deleteHeaders JSON:', this.deleteHeaders)\n }\n }\n\n // For S3 and most APIs, send minimal data for DELETE requests\n if (this.deleteMethod === 'DELETE') {\n // Some S3-compatible APIs might need the upload result for context\n if (uploadResult && (uploadResult.ETag || uploadResult.VersionId)) {\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(\n JSON.stringify({\n ETag: uploadResult.ETag,\n VersionId: uploadResult.VersionId,\n }),\n )\n } else {\n xhr.send()\n }\n } else {\n // For other HTTP methods, send the full upload result\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(JSON.stringify(uploadResult))\n }\n })\n }\n\n private async uploadFiles(files: File[]) {\n if (!this.uploadUrl) {\n console.error('Upload URL is not configured')\n return\n }\n\n const totalFiles = files.length\n let completedUploads = 0\n\n for (const file of files) {\n const formData = new FormData()\n formData.append(this.uploadProperty, file)\n\n try {\n let fileComponent: DapDSFileInputListItem | undefined = undefined\n\n // Track upload start\n this._uploadingFiles.add(file.name)\n this._uploadProgress = { ...this._uploadProgress, [file.name]: 0 }\n\n this.emit('dds-upload-start', { file })\n\n const xhr = new XMLHttpRequest()\n xhr.withCredentials = this.withCredentials\n\n // Store active upload for potential abortion\n this._activeUploads.set(file.name, xhr)\n\n xhr.open(this.uploadMethod, this.uploadUrl)\n\n // Add custom headers for upload\n if (this.uploadHeaders) {\n try {\n const headers = JSON.parse(this.uploadHeaders)\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value as string)\n })\n } catch (error) {\n console.warn('Invalid uploadHeaders JSON:', this.uploadHeaders)\n }\n }\n\n xhr.upload.onprogress = event => {\n if (event.lengthComputable) {\n const progress = (event.loaded / event.total) * 100\n this._uploadProgress = {\n ...this._uploadProgress,\n [file.name]: progress,\n }\n\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, true)\n }\n\n this.emit('dds-upload-progress', {\n file,\n item: fileComponent,\n progress,\n })\n }\n }\n\n const response = await new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.response)\n } else {\n const error = new HttpError(\n `HTTP error! status: ${xhr.status}`,\n xhr.response,\n xhr.status,\n )\n reject(error)\n }\n }\n xhr.onerror = () => {\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, false)\n }\n\n reject(new Error('Network error'))\n }\n xhr.send(formData)\n })\n\n const result = JSON.parse(response as string)\n\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, false)\n }\n\n // Remove from uploading tracking\n this._uploadingFiles.delete(file.name)\n this._activeUploads.delete(file.name)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[file.name]\n this._uploadProgress = newProgress\n\n // Track uploaded file with its server response\n this._uploadedFiles.set(file.name, result)\n\n this.emit('dds-upload-complete', { file, item: fileComponent, result })\n\n completedUploads++\n if (completedUploads === totalFiles) {\n this.emit('dds-all-uploads-complete')\n }\n } catch (error) {\n // Remove from uploading tracking on error\n this._uploadingFiles.delete(file.name)\n this._activeUploads.delete(file.name)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[file.name]\n this._uploadProgress = newProgress\n\n // Convert error to FileError if it's not already one\n const fileError =\n error instanceof FileError\n ? error\n : new FileError(\n error instanceof Error ? error.message : String(error),\n file,\n error instanceof HttpError ? 'http' : 'upload',\n error instanceof HttpError\n ? { status: error.status, response: error.response }\n : undefined,\n )\n\n if (this.fileList) {\n const fileComponent = this.setFileLoadingState(file, false)\n this.emit('dds-upload-error', {\n file,\n item: fileComponent,\n errors: [fileError],\n })\n } else {\n this.emit('dds-upload-error', { file, errors: [fileError] })\n }\n }\n }\n }\n\n /**\n * Calculates what the new file list would be if the given files were added\n * Does not modify component state\n */\n private calculateNewFileList(fileList: FileList | null): File[] {\n if (!fileList || fileList.length === 0) {\n return []\n }\n\n const files = [...this._files]\n\n if (this.keepValue && this._files?.length) {\n Object.values(fileList).forEach((file: File) => {\n const isFileInList = !!this._files.find((f: File) =>\n this.checkFileEquality(f, file),\n )\n\n if (!isFileInList) {\n files.push(file)\n }\n })\n\n return files\n } else {\n return Object.values(fileList)\n }\n }\n\n private handleFileList(fileList: FileList | null) {\n const files = [...this._files]\n\n if (this.keepValue && this._files?.length) {\n Object.values(fileList!).forEach((file: File) => {\n const isFileInList = !!this._files.find((f: File) =>\n this.checkFileEquality(f, file),\n )\n\n if (!isFileInList) {\n files.push(file)\n }\n })\n\n this._files = files\n } else {\n this._files = fileList ? Object.values(fileList) : []\n }\n\n const dataTransfer = new DataTransfer()\n\n this._files.forEach(file => {\n dataTransfer.items.add(file)\n })\n this.input.files = dataTransfer.files\n\n if (this.autoupload) {\n this.uploadFiles(this._files)\n }\n }\n\n override onChange(event: InputEvent) {\n const target = event?.target as HTMLInputElement\n const targetFiles = target.files\n\n // If no files were selected (user canceled the dialog) and we have existing files,\n // just reset the input value and return early without processing or emitting events\n if ((!targetFiles || targetFiles.length === 0) && this._files.length > 0) {\n // Reset the input value to allow selecting the same file again if needed\n this.input.value = ''\n return\n }\n\n if (targetFiles) {\n const validation = this.validateFiles(targetFiles)\n if (!validation.isValid && validation.errors) {\n // Collect all validation errors into an array\n // All validation errors should have a file, but ensure we always create FileError\n const errors = validation.errors.map(error => {\n if (error.file) {\n return new FileError(\n error.message,\n error.file,\n error.type,\n error.meta,\n )\n } else {\n // Fallback: create a FileError with the first file if available\n // This should not happen in practice, but ensures type safety\n const fallbackFile =\n targetFiles.length > 0 ? targetFiles[0] : new File([], 'unknown')\n return new FileError(\n error.message,\n fallbackFile,\n error.type,\n error.meta,\n )\n }\n })\n\n // Emit all errors as a single array\n this.emit('dds-upload-error', { errors })\n return\n }\n }\n\n // Get the newly added files from the input\n const newFiles = targetFiles ? Array.from(targetFiles) : []\n\n // Calculate what the merged file list would be (existing + new)\n const allFiles = this.calculateNewFileList(targetFiles)\n\n // Create a Set for files that should be canceled\n const canceledFiles = new Set<File>()\n\n // Emit cancelable event with both new files and all files\n const changeEvent = this.emit(\n 'dds-file-change',\n { newFiles, files: allFiles, canceledFiles, currentFiles: this._files },\n { cancelable: true },\n )\n\n // If the event was prevented, reset the input and return\n if (changeEvent.defaultPrevented) {\n this.input.value = ''\n return\n }\n\n // Filter out canceled files from targetFiles\n if (canceledFiles.size > 0 && targetFiles) {\n const acceptedFiles = Array.from(targetFiles).filter(\n file => !canceledFiles.has(file),\n )\n\n // If all files were canceled, reset the input\n // if (acceptedFiles.length === 0) {\n // this.input.value = ''\n // return\n // }\n\n // Create a new FileList with only accepted files\n const dataTransfer = new DataTransfer()\n acceptedFiles.forEach(file => dataTransfer.items.add(file))\n\n this.value = this.input.value\n this.handleFileList(dataTransfer.files)\n this.setValidity()\n // Emit event with final accepted files after processing canceled files\n this.emit('dds-files-accepted', { files: this._files })\n } else {\n // No files were canceled, apply all changes\n this.value = this.input.value\n this.handleFileList(targetFiles)\n this.setValidity()\n // Emit event with final accepted files\n this.emit('dds-files-accepted', { files: this._files })\n }\n }\n\n onDragenter(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n this._isDragOver = true\n }\n\n onDragover(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n }\n\n onDragleave(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n\n if (!this.contains(event.relatedTarget as Node)) {\n this._isDragOver = false\n }\n }\n\n onDrop(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n this._isDragOver = false\n\n const droppedFiles = event.dataTransfer?.files\n if (droppedFiles) {\n const validation = this.validateFiles(droppedFiles)\n if (!validation.isValid && validation.errors) {\n // Collect all validation errors into an array\n // All validation errors should have a file, but ensure we always create FileError\n const errors = validation.errors.map(error => {\n if (error.file) {\n return new FileError(\n error.message,\n error.file,\n error.type,\n error.meta,\n )\n } else {\n // Fallback: create a FileError with the first file if available\n // This should not happen in practice, but ensures type safety\n const fallbackFile =\n droppedFiles.length > 0\n ? droppedFiles[0]\n : new File([], 'unknown')\n return new FileError(\n error.message,\n fallbackFile,\n error.type,\n error.meta,\n )\n }\n })\n\n // Emit all errors as a single array\n this.emit('dds-upload-error', { errors })\n return\n }\n }\n\n // Get the newly dropped files\n const newFiles = droppedFiles ? Array.from(droppedFiles) : []\n\n // Calculate what the merged file list would be (existing + new)\n const allFiles = this.calculateNewFileList(droppedFiles ?? null)\n\n // Create a Set for files that should be canceled\n const canceledFiles = new Set<File>()\n\n // Emit cancelable event with both new files and all files\n const changeEvent = this.emit(\n 'dds-file-change',\n { newFiles, files: allFiles, canceledFiles, currentFiles: this._files },\n { cancelable: true },\n )\n\n // If the event was prevented, return early without modifying state\n if (changeEvent.defaultPrevented) {\n return\n }\n\n // Filter out canceled files from droppedFiles\n if (canceledFiles.size > 0 && droppedFiles) {\n const acceptedFiles = Array.from(droppedFiles).filter(\n file => !canceledFiles.has(file),\n )\n\n // If all files were canceled, return early\n // if (acceptedFiles.length === 0) {\n // return\n // }\n\n // Create a new FileList with only accepted files\n const dataTransfer = new DataTransfer()\n acceptedFiles.forEach(file => dataTransfer.items.add(file))\n\n this.handleFileList(dataTransfer.files)\n this.setValidity()\n // Emit event with final accepted files after processing canceled files\n this.emit('dds-files-accepted', { files: this._files })\n } else {\n // No files were canceled, apply all changes\n this.handleFileList(droppedFiles ?? null)\n this.setValidity()\n // Emit event with final accepted files\n this.emit('dds-files-accepted', { files: this._files })\n }\n }\n\n render() {\n // The native input is the real keyboard control: the browse button is only\n // a tabindex=\"-1\" visual proxy for it. Without that proxy, the visually\n // hidden input would be an invisible tab stop, so it stays in the tab\n // order only while no dropzone is rendered. A rendered dropzone provides\n // the keyboard path instead: Enter/Space when focusable, or a focusable\n // control slotted into dropzone-content when dropzoneFocusable is false.\n const showBrowseButton =\n this.showBrowseButton === 'true' && !this.autoupload\n const inputTabbable = showBrowseButton || !this.showDropzone\n return html`\n <div class=\"label-container\">\n ${this.label &&\n html`<dap-ds-form-label\n part=\"label\"\n id=\"label\"\n for=\"input\"\n .size=${this.size}\n .required=${this.required}\n .requiredLabel=${this.requiredLabel}\n .optional=${this.optional}\n .optionalLabel=${this.optionalLabel}\n .disabled=${this.disabled}\n class=${clsx('label')}\n .noMargin=${!!this.description}\n .hideLabel=${this.hideLabel}\n label=${ifDefined(this.label)}>\n </dap-ds-form-label>`}\n ${this.tooltip &&\n html` <dap-ds-tooltip\n part=\"tooltip\"\n content=${this.tooltip}\n mode=\"toggle\"\n floatingStrategy=\"fixed\"\n placement=${this.tooltipPlacement}>\n <dap-ds-icon-button\n clean\n class=\"info-button\"\n slot=\"trigger\"\n aria-label=${this.tooltipAriaLabel}\n size=${this.size as 'xs' | 'sm' | 'md' | 'lg'}\n iconSize=${this.size === 'xs' ? '16' : '22'}>\n <dap-ds-icon\n name=\"information-line\"\n class=\"info-button\"></dap-ds-icon>\n </dap-ds-icon-button>\n </dap-ds-tooltip>`}\n </div>\n ${this.description &&\n html`\n <dap-ds-typography\n part=\"description\"\n variant=\"description\"\n class=${clsx('input-description')}\n size=${ifDefined(this.size as CommonFormElementSize)}\n id=\"description\">\n ${this.description}\n </dap-ds-typography>\n `}\n ${this.showDropzone\n ? html`\n <div\n class=${clsx(\n 'dropzone',\n { 'dropzone--dragover': this._isDragOver },\n { 'dropzone--disabled': this.disabled },\n )}\n part=\"dropzone\"\n @dragenter=${this.onDragenter}\n @dragover=${this.onDragover}\n @dragleave=${this.onDragleave}\n @drop=${this.onDrop}\n @keydown=${this.dropzoneFocusable === 'true'\n ? this.onDropzoneKeydown\n : nothing}\n @click=${this.onClick}\n role=${this.dropzoneFocusable === 'true' ? 'button' : 'group'}\n aria-label=${ifDefined(this.dropzoneAriaLabel)}\n tabindex=${this.dropzoneFocusable === 'true' ? '0' : '-1'}>\n <slot name=\"dropzone-content\">\n <div class=\"dropzone__content\">\n <dap-ds-icon name=\"upload-2-line\" size=\"lg\"></dap-ds-icon>\n <dap-ds-typography variant=\"caption\">\n ${this.dropzoneText || translate('fileInput.dropzone.text')}\n </dap-ds-typography>\n ${this.accept &&\n html`\n <dap-ds-typography\n variant=\"caption\"\n class=\"dropzone__accept\">\n ${translate('fileInput.dropzone.acceptedTypes')}:\n ${this.accept}\n </dap-ds-typography>\n `}\n </div>\n </slot>\n </div>\n `\n : nothing}\n <span\n part=\"base\"\n class=${clsx(\n 'input',\n { 'input--success': this.status === 'success' },\n { 'input--error': this.status === 'error' },\n { 'input--disabled': this.disabled },\n )}\n role=\"region\"\n aria-label=\"File upload area\">\n <div class=\"input__holder\" aria-describedby=\"drop-instructions\">\n <input\n id=\"input\"\n class=\"input__control sr-only\"\n part=\"input\"\n name=${this.name}\n type=\"file\"\n accept=${ifDefined(this.accept)}\n ?disabled=${this.disabled}\n ?multiple=${this.multiple}\n ?required=${this.required}\n tabindex=${inputTabbable ? '0' : '-1'}\n aria-labelledby=\"label\"\n aria-hidden=${inputTabbable ? 'false' : 'true'}\n aria-describedby=\"description ${this.feedback\n ? 'feedback'\n : nothing}\"\n @change=${this.onChange}\n @cancel=${this.onCancel}\n @invalid=${this.handleInvalid}\n @blur=${this.onBlur}\n @focus=${this.onFocus} />\n ${showBrowseButton\n ? html` <dap-ds-button\n class=\"input__button\"\n part=\"browse-button\"\n data-testid=${this.browseButtonTestId}\n tabindex=\"-1\"\n variant=\"outline\"\n ?disabled=${this.disabled}\n size=${ifDefined(this.size) as CommonFormElementSize}\n @click=${this.onClick}\n @dragenter=${this.showDropzone ? nothing : this.onDragenter}\n @dragover=${this.showDropzone ? nothing : this.onDragover}\n @drop=${this.showDropzone ? nothing : this.onDrop}\n aria-label=\"${this.browseButtonLabel ||\n translate('fileInput.browse')}${this.showDropzone\n ? ''\n : ` - ${translate('fileInput.dragDropArea')}`}\"\n role=\"button\"\n >${this.browseButtonLabel ||\n translate('fileInput.browse')}</dap-ds-button\n >`\n : nothing}\n ${this.showUploadButton === 'true' && !this.autoupload\n ? html`\n <dap-ds-button\n class=\"upload-button\"\n part=\"upload-button\"\n data-testid=${this.uploadButtonTestId}\n variant=\"primary\"\n size=${ifDefined(this.size) as CommonFormElementSize}\n ?disabled=${this._files.length === 0 ||\n !this.uploadUrl ||\n this._uploadingFiles.size > 0}\n @click=${this.startUpload}\n >${this.uploadButtonLabel ||\n translate('fileInput.upload')}</dap-ds-button\n >\n `\n : nothing}\n <div id=\"drop-instructions\" class=\"sr-only\">\n ${translate('fileInput.dragDropInstructions')}\n </div>\n </div>\n </span>\n ${!this.fileList && this._uploadingFiles.size > 0\n ? html`\n <div class=\"upload-progress\" part=\"upload-progress\">\n ${Array.from(this._uploadingFiles).map(fileName => {\n const progress = this._uploadProgress[fileName] || 0\n return html`\n <div class=\"upload-progress__item\">\n <dap-ds-typography variant=\"caption\">\n ${fileName} - ${Math.round(progress)}%\n </dap-ds-typography>\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n style=\"width: ${progress}%\"></div>\n </div>\n </div>\n `\n })}\n </div>\n `\n : nothing}\n <dap-ds-modal\n .open=${this._showRemoveDialog}\n title=\"${translate('fileInput.removeDialog.title')}\"\n okButtonLabel=${this.removeButtonLabel ||\n translate('fileInput.removeDialog.confirm')}\n cancelButtonLabel=${this.cancelButtonLabel ||\n translate('fileInput.removeDialog.cancel')}\n .okButtonDanger=${this.removeButtonDanger === 'true'}\n @dds-cancel=${this.onCancelDelete}\n @dds-close=${this.onCancelDelete}\n @dds-ok=${this.onConfirmDelete}>\n <div>\n <dap-ds-typography variant=\"body\">\n ${translate('fileInput.removeDialog.message', {\n fileName: this._fileToRemove?.name ?? '',\n })}\n </dap-ds-typography>\n </div>\n </dap-ds-modal>\n\n ${this.feedback\n ? html`\n <dap-ds-feedback\n part=\"feedback\"\n feedbackType=${ifDefined(this.feedbackType)}\n feedbackSize=${ifDefined(this.size) as 'lg' | 'sm' | 'xs'}\n id=\"feedback\"\n .feedbackSubtle=${this.subtle}>\n ${this.feedback}\n </dap-ds-feedback>\n `\n : nothing}\n `\n }\n}\n"],"names":["_DapDSFileInput","GenericFormElement","file1","file2","file","type","acceptedType","baseType","fileList","errors","existingFileCount","t","totalSize","fileData","options","resolve","reject","__async","removedFiles","fileName","uploadResult","error","dataTransfer","i18next","event","customEvent","loading","fileComponent","xhr","newProgress","__spreadValues","HttpError","deleteEndpoint","headers","key","value","files","totalFiles","completedUploads","formData","__spreadProps","progress","response","result","fileError","FileError","_a","f","targetFiles","validation","fallbackFile","newFiles","allFiles","canceledFiles","acceptedFiles","droppedFiles","showBrowseButton","inputTabbable","html","clsx","ifDefined","nothing","translate","_b","DapDSFormLabel","DapDSTooltip","DapDSIconButton","DapDSIcon","DapDSTypography","DapDSButton","DapDSModal","DapDSFeedback","css","unsafeCSS","style","DapDSFileInput","__decorateClass","query","property","state"],"mappings":"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"}
1
+ {"version":3,"file":"file-input.component.js","sources":["../../../src/components/file-input/file-input.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { css, html, nothing, unsafeCSS } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport { FileError, HttpError } from '@/common/errors'\nimport { CommonFormElementSize } from '@/common/types'\nimport { FileListElement } from '@/components/file-input/file-input-list-item.component'\nimport { GenericFormElement } from '@/internal/mixin/genericFormElement'\nimport { formLabelTemplate } from '@/internal/templates/formLabel'\nimport { i18next, t } from '@/localization/localization'\n\nimport DapDSButton from '../button/button.component'\nimport DapDSFeedback from '../feedback/feedback.component'\nimport DapDSFormLabel from '../form/form-label/form-label.component'\nimport DapDSIcon from '../icon/icon.component'\nimport DapDSIconButton from '../icon-button/icon-button.component'\nimport DapDSModal from '../modal/modal.component'\nimport DapDSTooltip from '../tooltip/tooltip.component'\nimport DapDSTypography from '../typography/typography.component'\nimport style from './file-input.scss?inline'\nimport DapDSFileInputList from './file-input-list.component'\nimport DapDSFileInputListItem from './file-input-list-item.component'\n\n/**\n * `dap-ds-file-input`\n * @summary A file input is a control that allows users to select files to upload.\n * @element dap-ds-file-input\n * @title - File input\n *\n * @property {string} name - The name of the file input.\n * @property {string} value - The value of the file input.\n * @property {'success' | 'error'} status - The status of the file input.\n * @property {string} label - The label for the file input.\n * @property {boolean} hideLabel - Visually hides the label while keeping it available to assistive technology. (default: false)\n * @property {string} description - The description for the file input.\n * @property {string} tooltip - The tooltip for the file input.\n * @property {'top' | 'right' | 'bottom' | 'left'} tooltipPlacement - The tooltip placement of the input.\n * @property {boolean} disabled - Whether the file input is disabled.\n * @property { 'xs' | 'sm' | 'lg' } size - The size of the file input.\n * @property {string} feedback - The feedback for the file input.\n * @property {'negative' | 'positive' | 'warning'} feedbackType - The type of feedback for the file input.\n * @property {boolean} required - Whether the file input is required.\n * @property {string} requiredLabel - The required indicator of the file input. (default: '*')\n * @property {boolean} optional - Whether the file input is optional.\n * @property {string} optionalLabel - The optional label of the file input.\n * @property {boolean} subtle - Font weight of the feedback label. Default is `false` which is bold.\n * @property {string} uploadButtonLabel - The label for the upload button.\n * @property {string} browseButtonLabel - The label for the browse button.\n * @property {string} accept - The file types that the file input accepts.\n * @property {boolean} multiple - Whether the file input accepts multiple files.\n * @property {boolean} keepValue - Whether to keep the value when new files are selected.\n * @property {string} uploadUrl - A remote URL to upload files to.\n * @property {string} deleteUrl - A remote URL to delete uploaded files from. Supports placeholders: `{fileName}`, `{id}`, `{key}`, `{location}`.\n * @property {string} uploadHeaders - Custom headers for upload requests (JSON string).\n * @property {string} deleteHeaders - Custom headers for delete requests (JSON string).\n * @property {boolean} autoupload - Whether to automatically upload files after selection.\n * @property {number} maxFiles - The maximum number of files that can be uploaded.\n * @property {number} maxFileSize - The maximum size of files that can be uploaded (in bytes).\n * @property {number} maxSizePerFile - The maximum size a single file can have (in bytes).\n * @property {string} maxFileSizeErrorText - Text for the max file size error.\n * @property {string} maxSizePerFileErrorText - Text for the max size per file error.\n * @property {string} maxFileAmountErrorText - Text for the max file amount error.\n * @property {string} fileTypeErrorText - Text for the file type error.\n * @property {boolean} showDropzone - Whether to show a separate dropzone area.\n * @property {string} dropzoneText - Text to display in the dropzone.\n * @property {string} dropzoneAriaLabel - Aria label for the dropzone.\n * @property {boolean} dropzoneFocusable - Whether the dropzone is in the tab order and exposes button keyboard behavior (default: true).\n * @property {boolean} showFileList - Whether to show the built-in file list.\n * @property {boolean} confirmRemove - Whether to show confirmation dialog before removing files.\n * @property {string} showUploadButton - Whether to show the upload button. Default is `true`.\n * @property {string} removeButtonLabel - The label for the remove button.\n * @property {string} cancelButtonLabel - The label for the cancel button.\n *\n * @event {{ file: File }} dds-upload-start - Fired when a file upload starts.\n * @event {{ file: File, progress: number }} dds-upload-progress - Fired during file upload progress.\n * @event {{ file: File, item: DapDSFileInputListItem, result: any }} dds-upload-complete - Fired when a file upload completes successfully.\n * @event {{ file?: File, errors: FileError[], item?: DapDSFileInputListItem }} dds-upload-error - Fired when a file upload encounters an error. Always contains an errors array, even if there is only one error.\n * @event {{ void }} dds-all-uploads-complete - Fired when all file uploads are complete.\n * @event {{ file: FileListElement }} dds-file-removed - Fired when a file is removed from the file input.\n * @event {{ file: FileListElement, error: Error }} dds-file-delete-error - Fired when a file deletion from server encounters an error.\n * @event {{ newFiles: File[], files: File[], canceledFiles: Set<File>, currentFiles: File[] }} dds-file-change - Fired when the file input value changes. This event is cancelable. Event detail contains: `newFiles` (just the files being added in this operation), `currentFiles` (all files that were already selected before this operation), `files` (all files after merge with existing when keepValue=true), and `canceledFiles` (Set to add files you want to reject). You can either: (1) Call `event.preventDefault()` to reject all files, or (2) Add specific files to `canceledFiles` to reject only those files.\n * @event {{ files: File[] }} dds-files-accepted - Fired when the file input value changes. This event is cancelable. Event detail contains: `files` (all files after merge with existing when keepValue=true).\n *\n * @slot dropzone-content - The content to display in the dropzone.\n *\n * @csspart base - The main file input container.\n * @csspart input - The file input control.\n * @csspart label - The file input label.\n * @csspart description - The file input description.\n * @csspart feedback - The file input feedback.\n * @csspart tooltip - The file input tooltip.\n * @csspart upload-progress - The upload progress container.\n * @csspart browse-button - The browse button.\n * @csspart upload-button - The upload button.\n * @csspart dropzone - The dropzone area.\n * @csspart label-base - The base of the label.\n * @csspart label-required - The required indicator of the label.\n * @csspart label-optional - The optional indicator of the label.\n *\n * @cssproperty --dds-file-input-holder-margin - The margin of the input holder in shorthand format: top right bottom left (default: var(--dds-spacing-400) 0 0 0)\n * @cssproperty --dds-file-input-dropzone-padding - The padding of the dropzone (default: var(--dds-spacing-800))\n * @cssproperty --dds-file-input-dropzone-border - The border of the dropzone in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-border-neutral-subtle))\n * @cssproperty --dds-file-input-dropzone-border-radius - The border radius of the dropzone (default: var(--dds-radius-base))\n * @cssproperty --dds-file-input-dropzone-background - The background of the dropzone (default: var(--dds-color-background-primary))\n * @cssproperty --dds-file-input-dropzone-border-hover - The border of the dropzone on hover in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-color-border-primary-hover))\n * @cssproperty --dds-file-input-dropzone-background-hover - The background of the dropzone on hover (default: var(--dds-color-background-primary-hover))\n * @cssproperty --dds-file-input-dropzone-border-dragover - The border of the dropzone when dragging over in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-color-border-accent))\n * @cssproperty --dds-file-input-dropzone-background-dragover - The background of the dropzone when dragging over (default: var(--dds-color-background-accent-light))\n * @cssproperty --dds-file-input-dropzone-border-disabled - The border of the disabled dropzone in shorthand format: width style color (default: var(--dds-border-width-base) dashed var(--dds-border-neutral-disabled))\n * @cssproperty --dds-file-input-dropzone-gap - The gap between elements in the dropzone content (default: var(--dds-spacing-300))\n * @cssproperty --dds-file-input-dropzone-accept-color - The text color of the accepted file types in the dropzone (default: var(--dds-color-text-secondary))\n */\nexport default class DapDSFileInput extends GenericFormElement {\n static tagName = 'dap-ds-file-input'\n\n static dependencies = {\n 'dap-ds-form-label': DapDSFormLabel,\n 'dap-ds-tooltip': DapDSTooltip,\n 'dap-ds-icon-button': DapDSIconButton,\n 'dap-ds-icon': DapDSIcon,\n 'dap-ds-typography': DapDSTypography,\n 'dap-ds-button': DapDSButton,\n 'dap-ds-modal': DapDSModal,\n 'dap-ds-feedback': DapDSFeedback,\n }\n\n @query('#input') private readonly input!: HTMLInputElement\n\n /** Label for the upload button */\n @property() uploadButtonLabel: string\n\n /** Label for the browse button */\n @property() browseButtonLabel: string\n\n /** `data-testid` for the browse button. */\n @property() browseButtonTestId = 'file-input-browse-button'\n\n /** `data-testid` for the upload button. */\n @property() uploadButtonTestId = 'file-input-upload-button'\n\n /** Whether to show a separate dropzone area */\n @property({ type: Boolean }) showDropzone = false\n\n /** Text to display in the dropzone */\n @property() dropzoneText: string\n\n /** Whether to show the built-in file list */\n @property({ type: Boolean }) showFileList = false\n\n /** Whether to show confirmation dialog before removing files */\n @property({ type: Boolean }) confirmRemove = true\n\n /** Whether to show the upload button */\n @property({ type: String }) showUploadButton = 'true'\n\n /** Whether to show the browse button */\n @property({ type: String }) showBrowseButton = 'true'\n\n /** The file types that the file input accepts */\n @property() accept: string\n\n /** Whether the file input accepts multiple files. */\n @property({ type: Boolean }) multiple = false\n\n /** Whether to keep the value of the file input when new files are selected. */\n @property({ type: Boolean }) keepValue = false\n\n /** A remote URL to upload files to */\n @property() uploadUrl: string\n\n /** Whether to automatically upload files after selection */\n @property({ type: Boolean }) autoupload: boolean\n\n /** The property to use when uploading files */\n @property() uploadProperty = 'file'\n\n /** The HTTP method to use when uploading files */\n @property() uploadMethod = 'POST'\n\n /** A remote URL to delete uploaded files from */\n @property() deleteUrl: string\n\n /** The HTTP method to use when deleting files */\n @property() deleteMethod = 'DELETE'\n\n /** Whether to send credentials with the file upload request */\n @property({ type: Boolean }) withCredentials = false\n\n /** Custom headers to send with upload requests (JSON string) */\n @property() uploadHeaders: string\n\n /** Custom headers to send with delete requests (JSON string) */\n @property() deleteHeaders: string\n\n /** The file list component to bind to */\n @property({ attribute: false }) fileList: DapDSFileInputList | null = null\n\n /** The maximum number of files that can be uploaded */\n @property({ type: Number }) maxFiles?: number\n\n /** The maximum size of files that can be uploaded (in bytes) sum of all files */\n @property({ type: Number }) maxFileSize?: number\n\n /** The maximum size a single file can have (in bytes) */\n @property({ type: Number }) maxSizePerFile?: number\n\n /** Text for the max file size error */\n @property({ type: String }) maxFileSizeErrorText?: string\n\n /** Text for the max size per file error */\n @property({ type: String }) maxSizePerFileErrorText?: string\n\n /** Text for the max file amount error */\n @property({ type: String }) maxFileAmountErrorText?: string\n\n /** Text for the file type error */\n @property({ type: String }) fileTypeErrorText?: string\n\n /** The label for the remove button */\n @property() removeButtonLabel: string\n\n /** The label for the cancel button */\n @property() cancelButtonLabel: string\n\n /** Whether the remove button is dangerous */\n @property({ type: String }) removeButtonDanger = 'true'\n\n /** Whether to show thumbnail preview for supported file types in the built-in file list */\n @property({ type: String }) showThumbnail = 'true'\n\n /** Aria label for the dropzone */\n @property() dropzoneAriaLabel: string\n\n /**\n * When false, the dropzone is not tab-focusable (tabindex -1), uses role=\"group\"\n * instead of role=\"button\", and Enter/Space no longer opens the file dialog from\n * the dropzone. Click and drag-and-drop still work. When the browse button is\n * also hidden, slot a focusable control into dropzone-content to keep a keyboard\n * path to the file dialog — the hidden native input is out of the tab order\n * whenever a dropzone is rendered.\n */\n @property({ type: String }) dropzoneFocusable = 'true'\n\n /** Size of the thumbnail preview in the built-in file list */\n @property({ type: String })\n thumbnailSize: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' = 'sm'\n\n @property({ type: Array, attribute: false })\n get files() {\n return this._files\n }\n\n @state() private _files: File[] = []\n @state() private _uploadProgress: Record<string, number> = {}\n @state() private readonly _uploadingFiles: Set<string> = new Set()\n @state() private readonly _activeUploads: Map<string, XMLHttpRequest> =\n new Map()\n @state() private readonly _uploadedFiles: Map<string, any> = new Map() // Track uploaded files with their server response\n @state() private _isDragOver = false\n @state() private _showRemoveDialog = false\n @state() private _fileToRemove: File | null = null\n private _removeResolve: ((value: unknown) => void) | null = null\n private _removeReject: ((reason?: any) => void) | null = null\n\n static readonly styles = css`\n ${unsafeCSS(style)}\n `\n\n checkFileEquality(\n file1: File | FileListElement,\n file2: File | FileListElement,\n ) {\n return (\n file1.name === file2.name &&\n file1.size === file2.size &&\n file1.type === file2.type &&\n file1.lastModified === file2.lastModified\n )\n }\n\n /**\n * Validates if a file type is accepted based on the accept attribute\n */\n private validateFileType(file: File): boolean {\n if (!this.accept) return true\n\n const acceptedTypes = this.accept.split(',').map(type => type.trim())\n\n return acceptedTypes.some(acceptedType => {\n // Handle MIME types (e.g., \"image/jpeg\", \"text/*\")\n if (acceptedType.includes('/')) {\n if (acceptedType.endsWith('/*')) {\n const baseType = acceptedType.slice(0, -2)\n return file.type.startsWith(baseType)\n }\n return file.type === acceptedType\n }\n\n // Handle file extensions (e.g., \".jpg\", \".pdf\")\n if (acceptedType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(acceptedType.toLowerCase())\n }\n\n return false\n })\n }\n\n public get focusElement() {\n return this.input\n }\n /**\n * Validates a file list against all constraints (count, size, type)\n */\n private validateFiles(fileList: FileList): {\n isValid: boolean\n errors?: Array<{\n file?: File\n message: string\n type: string\n meta?: Record<string, any>\n }>\n } {\n const errors: Array<{\n file?: File\n message: string\n type: string\n meta?: Record<string, any>\n }> = []\n\n // Check file count. With keepValue=false the incoming selection replaces the\n // current one, so the already selected files must not count towards the limit.\n const existingFileCount = this.keepValue ? this._files.length : 0\n\n if (this.maxFiles && fileList.length + existingFileCount > this.maxFiles) {\n for (const file of fileList) {\n errors.push({\n file: file,\n meta: {\n maxFiles: this.maxFiles,\n totalFiles: fileList.length + existingFileCount,\n },\n message:\n this.maxFileAmountErrorText ||\n t('fileInput.error.fileAmount', {\n count: this.maxFiles,\n }),\n type: 'maxFiles',\n })\n }\n }\n\n // Check file types and sizes\n let totalSize = 0\n for (const file of fileList) {\n // Validate file type\n if (!this.validateFileType(file)) {\n errors.push({\n file,\n meta: {\n type: this.accept,\n fileType: file.type,\n },\n message:\n this.fileTypeErrorText ||\n t('fileInput.error.fileType', {\n type: this.accept,\n }),\n type: 'fileType',\n })\n }\n\n if (this.maxSizePerFile && file.size > this.maxSizePerFile) {\n errors.push({\n file,\n meta: {\n maxSizePerFile: this.maxSizePerFile,\n fileSize: file.size,\n },\n message:\n this.maxSizePerFileErrorText ||\n t('fileInput.error.perFileSize', {\n size: Math.round(this.maxSizePerFile / 1024 / 1024),\n }),\n type: 'maxSizePerFile',\n })\n }\n\n // Validate file size\n totalSize += file.size\n if (this.maxFileSize && totalSize > this.maxFileSize) {\n errors.push({\n file,\n meta: {\n maxFileSize: this.maxFileSize,\n totalSize: totalSize,\n fileSize: file.size,\n },\n message:\n this.maxFileSizeErrorText ||\n t('fileInput.error.fileSize', {\n size: Math.round(this.maxFileSize / 1024 / 1024),\n }),\n type: 'maxFileSize',\n })\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors: errors.length > 0 ? errors : undefined,\n }\n }\n\n /**\n * Removes a single file from the file input and frees up a slot in the\n * `maxFiles` budget.\n *\n * @param fileData The file to remove. It is matched against the selected files\n * by name, size, type and lastModified, so a structurally equal file also works.\n * @param options.skipConfirm Skips the built-in confirmation dialog for this\n * call only, without having to change the `confirmRemove` property. Useful when\n * the host application renders its own file list and already confirmed removal.\n */\n public removeFile(\n fileData: FileListElement | File,\n options?: { skipConfirm?: boolean },\n ): Promise<void> | void {\n if (this.confirmRemove && !options?.skipConfirm) {\n return new Promise((resolve, reject) => {\n this._removeResolve = resolve\n this._removeReject = reject\n this._showRemoveDialog = true\n this._fileToRemove = fileData as File\n })\n .then(() => {\n return this.performFileRemoval(fileData)\n })\n .catch(() => {\n // User cancelled - no action needed\n })\n } else {\n return this.performFileRemoval(fileData)\n }\n }\n\n /**\n * Removes every selected file, so the whole `maxFiles` budget becomes\n * available again.\n *\n * This is a programmatic API, so it never shows the confirmation dialog.\n * Files already uploaded are deleted from the server when `deleteUrl` is set,\n * and in-flight uploads are aborted.\n */\n public async clearFiles(): Promise<void> {\n const removedFiles = [...this._files]\n\n if (removedFiles.length === 0) return\n\n this.abortAllUploads()\n\n for (const file of removedFiles) {\n await this.deleteUploadedFileFromServer(file)\n }\n\n this._files = []\n this.value = undefined\n this.syncNativeInput()\n\n removedFiles.forEach(file => this.emit('dds-file-removed', { file }))\n this.emit('dds-file-change', {\n newFiles: [],\n files: this._files,\n canceledFiles: new Set(),\n currentFiles: this._files,\n })\n this.setValidity()\n this.emit('dds-files-accepted', { files: this._files })\n }\n\n /**\n * Deletes an already uploaded file from the server when a deleteUrl is set.\n * Delete failures are reported but never block the local removal.\n */\n private async deleteUploadedFileFromServer(fileData: FileListElement | File) {\n const fileName = fileData.name\n\n if (!this._uploadedFiles.has(fileName)) return\n\n try {\n const uploadResult = this._uploadedFiles.get(fileName)\n await this.deleteUploadedFile(fileName, uploadResult)\n this._uploadedFiles.delete(fileName)\n } catch (error) {\n // Emit delete error event but still remove from local list\n this.emit('dds-file-delete-error', { file: fileData, error })\n }\n }\n\n /** Keeps the native input element in sync with the current file list */\n private syncNativeInput() {\n if (!this.input) return\n\n if (this._files.length === 0) {\n // Also drops the underlying FileList, so the same file can be picked again\n this.input.value = ''\n return\n }\n\n if (typeof DataTransfer === 'undefined') return\n\n const dataTransfer = new DataTransfer()\n this._files.forEach(file => dataTransfer.items.add(file))\n this.input.files = dataTransfer.files\n }\n\n private async performFileRemoval(fileData: FileListElement | File) {\n this.abortUpload(fileData.name)\n\n await this.deleteUploadedFileFromServer(fileData)\n\n this._files = this._files.filter(\n (file: File) => !this.checkFileEquality(file, fileData),\n )\n\n this.syncNativeInput()\n\n if (this._files.length === 0 && this.required) {\n this.value = undefined\n }\n\n this.emit('dds-file-removed', { file: fileData })\n this.emit('dds-file-change', {\n newFiles: [],\n files: this._files,\n canceledFiles: new Set(),\n currentFiles: this._files,\n })\n this.setValidity()\n // Emit event with final accepted files after removal\n this.emit('dds-files-accepted', { files: this._files })\n }\n\n private languageChangeHandler = () => {\n // Force re-render when language changes to update translated text\n this.requestUpdate()\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n // Listen for language changes to update translated text\n i18next.on('languageChanged', this.languageChangeHandler)\n\n this.addEventListener('dds-file-remove', event => {\n const customEvent = event as CustomEvent\n this.removeFile(customEvent.detail.file)\n })\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n // Clean up language change listener\n i18next.off('languageChanged', this.languageChangeHandler)\n }\n\n async onConfirmDelete() {\n if (this._removeResolve) {\n this._removeResolve(true)\n }\n this._showRemoveDialog = false\n this._fileToRemove = null\n this._removeResolve = null\n this._removeReject = null\n }\n\n onCancelDelete() {\n if (this._removeReject) {\n this._removeReject(new Error('User cancelled'))\n }\n this._showRemoveDialog = false\n this._fileToRemove = null\n this._removeResolve = null\n this._removeReject = null\n }\n\n onCancel() {\n this.emit('dds-cancel')\n this.setValidity()\n }\n\n onClick() {\n if (this.disabled) return\n this.input.click()\n }\n\n onDropzoneKeydown(event: KeyboardEvent) {\n if (this.disabled || this.dropzoneFocusable === 'false') return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n this.input.click()\n }\n }\n\n setFileLoadingState(file: File, loading: boolean) {\n if (!this.fileList) {\n return\n }\n\n const fileComponent = this.fileList.getFileByName(\n file.name,\n )! as DapDSFileInputListItem\n\n fileComponent.loading = loading\n\n return fileComponent\n }\n\n /**\n * Aborts upload for a specific file\n */\n abortUpload(fileName: string) {\n const xhr = this._activeUploads.get(fileName)\n if (xhr) {\n xhr.abort()\n this._uploadingFiles.delete(fileName)\n this._activeUploads.delete(fileName)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[fileName]\n this._uploadProgress = newProgress\n }\n }\n\n /**\n * Aborts all active uploads\n */\n abortAllUploads() {\n this._activeUploads.forEach(xhr => {\n xhr.abort()\n })\n this._uploadingFiles.clear()\n this._activeUploads.clear()\n this._uploadProgress = {}\n }\n\n /**\n * Manually start upload of all selected files\n */\n startUpload() {\n if (this._files.length > 0 && this.uploadUrl) {\n this.uploadFiles(this._files)\n }\n }\n\n /**\n * Delete an uploaded file from the server\n */\n private async deleteUploadedFile(\n fileName: string,\n uploadResult: any,\n ): Promise<void> {\n if (!this.deleteUrl) {\n console.error('Delete URL is not configured')\n return\n }\n\n const xhr = new XMLHttpRequest()\n xhr.withCredentials = this.withCredentials\n\n return new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve()\n } else {\n reject(\n new HttpError(\n `HTTP error! status: ${xhr.status}`,\n xhr.response,\n xhr.status,\n ),\n )\n }\n }\n xhr.onerror = () => {\n reject(new Error('Network error during file deletion'))\n }\n\n // Construct delete URL with multiple placeholder support\n let deleteEndpoint = this.deleteUrl\n\n // Replace common placeholders\n deleteEndpoint = deleteEndpoint.replace(\n '{fileName}',\n encodeURIComponent(fileName),\n )\n deleteEndpoint = deleteEndpoint.replace(\n '{filename}',\n encodeURIComponent(fileName),\n )\n\n // If uploadResult contains an ID or key, use that for deletion\n if (uploadResult && typeof uploadResult === 'object') {\n if (uploadResult.id) {\n deleteEndpoint = deleteEndpoint.replace(\n '{id}',\n encodeURIComponent(uploadResult.id),\n )\n }\n if (uploadResult.key) {\n deleteEndpoint = deleteEndpoint.replace(\n '{key}',\n encodeURIComponent(uploadResult.key),\n )\n }\n if (uploadResult.location) {\n deleteEndpoint = deleteEndpoint.replace(\n '{location}',\n encodeURIComponent(uploadResult.location),\n )\n }\n }\n\n xhr.open(this.deleteMethod, deleteEndpoint)\n\n // Add custom headers for delete\n if (this.deleteHeaders) {\n try {\n const headers = JSON.parse(this.deleteHeaders)\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value as string)\n })\n } catch (error) {\n console.warn('Invalid deleteHeaders JSON:', this.deleteHeaders)\n }\n }\n\n // For S3 and most APIs, send minimal data for DELETE requests\n if (this.deleteMethod === 'DELETE') {\n // Some S3-compatible APIs might need the upload result for context\n if (uploadResult && (uploadResult.ETag || uploadResult.VersionId)) {\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(\n JSON.stringify({\n ETag: uploadResult.ETag,\n VersionId: uploadResult.VersionId,\n }),\n )\n } else {\n xhr.send()\n }\n } else {\n // For other HTTP methods, send the full upload result\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.send(JSON.stringify(uploadResult))\n }\n })\n }\n\n private async uploadFiles(files: File[]) {\n if (!this.uploadUrl) {\n console.error('Upload URL is not configured')\n return\n }\n\n const totalFiles = files.length\n let completedUploads = 0\n\n for (const file of files) {\n const formData = new FormData()\n formData.append(this.uploadProperty, file)\n\n try {\n let fileComponent: DapDSFileInputListItem | undefined = undefined\n\n // Track upload start\n this._uploadingFiles.add(file.name)\n this._uploadProgress = { ...this._uploadProgress, [file.name]: 0 }\n\n this.emit('dds-upload-start', { file })\n\n const xhr = new XMLHttpRequest()\n xhr.withCredentials = this.withCredentials\n\n // Store active upload for potential abortion\n this._activeUploads.set(file.name, xhr)\n\n xhr.open(this.uploadMethod, this.uploadUrl)\n\n // Add custom headers for upload\n if (this.uploadHeaders) {\n try {\n const headers = JSON.parse(this.uploadHeaders)\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value as string)\n })\n } catch (error) {\n console.warn('Invalid uploadHeaders JSON:', this.uploadHeaders)\n }\n }\n\n xhr.upload.onprogress = event => {\n if (event.lengthComputable) {\n const progress = (event.loaded / event.total) * 100\n this._uploadProgress = {\n ...this._uploadProgress,\n [file.name]: progress,\n }\n\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, true)\n }\n\n this.emit('dds-upload-progress', {\n file,\n item: fileComponent,\n progress,\n })\n }\n }\n\n const response = await new Promise((resolve, reject) => {\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(xhr.response)\n } else {\n const error = new HttpError(\n `HTTP error! status: ${xhr.status}`,\n xhr.response,\n xhr.status,\n )\n reject(error)\n }\n }\n xhr.onerror = () => {\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, false)\n }\n\n reject(new Error('Network error'))\n }\n xhr.send(formData)\n })\n\n const result = JSON.parse(response as string)\n\n if (this.fileList) {\n fileComponent = this.setFileLoadingState(file, false)\n }\n\n // Remove from uploading tracking\n this._uploadingFiles.delete(file.name)\n this._activeUploads.delete(file.name)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[file.name]\n this._uploadProgress = newProgress\n\n // Track uploaded file with its server response\n this._uploadedFiles.set(file.name, result)\n\n this.emit('dds-upload-complete', { file, item: fileComponent, result })\n\n completedUploads++\n if (completedUploads === totalFiles) {\n this.emit('dds-all-uploads-complete')\n }\n } catch (error) {\n // Remove from uploading tracking on error\n this._uploadingFiles.delete(file.name)\n this._activeUploads.delete(file.name)\n const newProgress = { ...this._uploadProgress }\n delete newProgress[file.name]\n this._uploadProgress = newProgress\n\n // Convert error to FileError if it's not already one\n const fileError =\n error instanceof FileError\n ? error\n : new FileError(\n error instanceof Error ? error.message : String(error),\n file,\n error instanceof HttpError ? 'http' : 'upload',\n error instanceof HttpError\n ? { status: error.status, response: error.response }\n : undefined,\n )\n\n if (this.fileList) {\n const fileComponent = this.setFileLoadingState(file, false)\n this.emit('dds-upload-error', {\n file,\n item: fileComponent,\n errors: [fileError],\n })\n } else {\n this.emit('dds-upload-error', { file, errors: [fileError] })\n }\n }\n }\n }\n\n /**\n * Calculates what the new file list would be if the given files were added\n * Does not modify component state\n */\n private calculateNewFileList(fileList: FileList | null): File[] {\n if (!fileList || fileList.length === 0) {\n return []\n }\n\n const files = [...this._files]\n\n if (this.keepValue && this._files?.length) {\n Object.values(fileList).forEach((file: File) => {\n const isFileInList = !!this._files.find((f: File) =>\n this.checkFileEquality(f, file),\n )\n\n if (!isFileInList) {\n files.push(file)\n }\n })\n\n return files\n } else {\n return Object.values(fileList)\n }\n }\n\n private handleFileList(fileList: FileList | null) {\n const files = [...this._files]\n\n if (this.keepValue && this._files?.length) {\n Object.values(fileList!).forEach((file: File) => {\n const isFileInList = !!this._files.find((f: File) =>\n this.checkFileEquality(f, file),\n )\n\n if (!isFileInList) {\n files.push(file)\n }\n })\n\n this._files = files\n } else {\n this._files = fileList ? Object.values(fileList) : []\n }\n\n const dataTransfer = new DataTransfer()\n\n this._files.forEach(file => {\n dataTransfer.items.add(file)\n })\n this.input.files = dataTransfer.files\n\n if (this.autoupload) {\n this.uploadFiles(this._files)\n }\n }\n\n override onChange(event: InputEvent) {\n const target = event?.target as HTMLInputElement\n const targetFiles = target.files\n\n // If no files were selected (user canceled the dialog) and we have existing files,\n // just reset the input value and return early without processing or emitting events\n if ((!targetFiles || targetFiles.length === 0) && this._files.length > 0) {\n // Reset the input value to allow selecting the same file again if needed\n this.input.value = ''\n return\n }\n\n if (targetFiles) {\n const validation = this.validateFiles(targetFiles)\n if (!validation.isValid && validation.errors) {\n // Collect all validation errors into an array\n // All validation errors should have a file, but ensure we always create FileError\n const errors = validation.errors.map(error => {\n if (error.file) {\n return new FileError(\n error.message,\n error.file,\n error.type,\n error.meta,\n )\n } else {\n // Fallback: create a FileError with the first file if available\n // This should not happen in practice, but ensures type safety\n const fallbackFile =\n targetFiles.length > 0 ? targetFiles[0] : new File([], 'unknown')\n return new FileError(\n error.message,\n fallbackFile,\n error.type,\n error.meta,\n )\n }\n })\n\n // Emit all errors as a single array\n this.emit('dds-upload-error', { errors })\n return\n }\n }\n\n // Get the newly added files from the input\n const newFiles = targetFiles ? Array.from(targetFiles) : []\n\n // Calculate what the merged file list would be (existing + new)\n const allFiles = this.calculateNewFileList(targetFiles)\n\n // Create a Set for files that should be canceled\n const canceledFiles = new Set<File>()\n\n // Emit cancelable event with both new files and all files\n const changeEvent = this.emit(\n 'dds-file-change',\n { newFiles, files: allFiles, canceledFiles, currentFiles: this._files },\n { cancelable: true },\n )\n\n // If the event was prevented, reset the input and return\n if (changeEvent.defaultPrevented) {\n this.input.value = ''\n return\n }\n\n // Filter out canceled files from targetFiles\n if (canceledFiles.size > 0 && targetFiles) {\n const acceptedFiles = Array.from(targetFiles).filter(\n file => !canceledFiles.has(file),\n )\n\n // If all files were canceled, reset the input\n // if (acceptedFiles.length === 0) {\n // this.input.value = ''\n // return\n // }\n\n // Create a new FileList with only accepted files\n const dataTransfer = new DataTransfer()\n acceptedFiles.forEach(file => dataTransfer.items.add(file))\n\n this.value = this.input.value\n this.handleFileList(dataTransfer.files)\n this.setValidity()\n // Emit event with final accepted files after processing canceled files\n this.emit('dds-files-accepted', { files: this._files })\n } else {\n // No files were canceled, apply all changes\n this.value = this.input.value\n this.handleFileList(targetFiles)\n this.setValidity()\n // Emit event with final accepted files\n this.emit('dds-files-accepted', { files: this._files })\n }\n }\n\n onDragenter(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n this._isDragOver = true\n }\n\n onDragover(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n }\n\n onDragleave(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n\n if (!this.contains(event.relatedTarget as Node)) {\n this._isDragOver = false\n }\n }\n\n onDrop(event: DragEvent) {\n if (this.disabled) return\n event.preventDefault()\n this._isDragOver = false\n\n const droppedFiles = event.dataTransfer?.files\n if (droppedFiles) {\n const validation = this.validateFiles(droppedFiles)\n if (!validation.isValid && validation.errors) {\n // Collect all validation errors into an array\n // All validation errors should have a file, but ensure we always create FileError\n const errors = validation.errors.map(error => {\n if (error.file) {\n return new FileError(\n error.message,\n error.file,\n error.type,\n error.meta,\n )\n } else {\n // Fallback: create a FileError with the first file if available\n // This should not happen in practice, but ensures type safety\n const fallbackFile =\n droppedFiles.length > 0\n ? droppedFiles[0]\n : new File([], 'unknown')\n return new FileError(\n error.message,\n fallbackFile,\n error.type,\n error.meta,\n )\n }\n })\n\n // Emit all errors as a single array\n this.emit('dds-upload-error', { errors })\n return\n }\n }\n\n // Get the newly dropped files\n const newFiles = droppedFiles ? Array.from(droppedFiles) : []\n\n // Calculate what the merged file list would be (existing + new)\n const allFiles = this.calculateNewFileList(droppedFiles ?? null)\n\n // Create a Set for files that should be canceled\n const canceledFiles = new Set<File>()\n\n // Emit cancelable event with both new files and all files\n const changeEvent = this.emit(\n 'dds-file-change',\n { newFiles, files: allFiles, canceledFiles, currentFiles: this._files },\n { cancelable: true },\n )\n\n // If the event was prevented, return early without modifying state\n if (changeEvent.defaultPrevented) {\n return\n }\n\n // Filter out canceled files from droppedFiles\n if (canceledFiles.size > 0 && droppedFiles) {\n const acceptedFiles = Array.from(droppedFiles).filter(\n file => !canceledFiles.has(file),\n )\n\n // If all files were canceled, return early\n // if (acceptedFiles.length === 0) {\n // return\n // }\n\n // Create a new FileList with only accepted files\n const dataTransfer = new DataTransfer()\n acceptedFiles.forEach(file => dataTransfer.items.add(file))\n\n this.handleFileList(dataTransfer.files)\n this.setValidity()\n // Emit event with final accepted files after processing canceled files\n this.emit('dds-files-accepted', { files: this._files })\n } else {\n // No files were canceled, apply all changes\n this.handleFileList(droppedFiles ?? null)\n this.setValidity()\n // Emit event with final accepted files\n this.emit('dds-files-accepted', { files: this._files })\n }\n }\n\n render() {\n // The native input is the real keyboard control: the browse button is only\n // a tabindex=\"-1\" visual proxy for it. Without that proxy, the visually\n // hidden input would be an invisible tab stop, so it stays in the tab\n // order only while no dropzone is rendered. A rendered dropzone provides\n // the keyboard path instead: Enter/Space when focusable, or a focusable\n // control slotted into dropzone-content when dropzoneFocusable is false.\n const showBrowseButton =\n this.showBrowseButton === 'true' && !this.autoupload\n const inputTabbable = showBrowseButton || !this.showDropzone\n return html`\n <div class=\"label-container\">\n ${formLabelTemplate({\n label: this.label,\n id: 'label',\n htmlFor: 'input',\n size: this.size,\n required: this.required,\n requiredLabel: this.requiredLabel,\n optional: this.optional,\n optionalLabel: this.optionalLabel,\n disabled: this.disabled,\n noMargin: !!this.description,\n hideLabel: this.hideLabel,\n })}\n ${this.tooltip &&\n html` <dap-ds-tooltip\n part=\"tooltip\"\n content=${this.tooltip}\n mode=\"toggle\"\n floatingStrategy=\"fixed\"\n placement=${this.tooltipPlacement}>\n <dap-ds-icon-button\n clean\n class=\"info-button\"\n slot=\"trigger\"\n aria-label=${this.tooltipAriaLabel}\n size=${this.size as 'xs' | 'sm' | 'md' | 'lg'}\n iconSize=${this.size === 'xs' ? '16' : '22'}>\n <dap-ds-icon\n name=\"information-line\"\n class=\"info-button\"></dap-ds-icon>\n </dap-ds-icon-button>\n </dap-ds-tooltip>`}\n </div>\n ${this.description &&\n html`\n <dap-ds-typography\n part=\"description\"\n variant=\"description\"\n class=${clsx('input-description')}\n size=${ifDefined(this.size as CommonFormElementSize)}\n id=\"description\">\n ${this.description}\n </dap-ds-typography>\n `}\n ${this.showDropzone\n ? html`\n <div\n class=${clsx(\n 'dropzone',\n { 'dropzone--dragover': this._isDragOver },\n { 'dropzone--disabled': this.disabled },\n )}\n part=\"dropzone\"\n @dragenter=${this.onDragenter}\n @dragover=${this.onDragover}\n @dragleave=${this.onDragleave}\n @drop=${this.onDrop}\n @keydown=${this.dropzoneFocusable === 'true'\n ? this.onDropzoneKeydown\n : nothing}\n @click=${this.onClick}\n role=${this.dropzoneFocusable === 'true' ? 'button' : 'group'}\n aria-label=${ifDefined(this.dropzoneAriaLabel)}\n tabindex=${this.dropzoneFocusable === 'true' ? '0' : '-1'}>\n <slot name=\"dropzone-content\">\n <div class=\"dropzone__content\">\n <dap-ds-icon name=\"upload-2-line\" size=\"lg\"></dap-ds-icon>\n <dap-ds-typography variant=\"caption\">\n ${this.dropzoneText ||\n this.localize.t('fileInput.dropzone.text')}\n </dap-ds-typography>\n ${this.accept &&\n html`\n <dap-ds-typography\n variant=\"caption\"\n class=\"dropzone__accept\">\n ${this.localize.t('fileInput.dropzone.acceptedTypes')}:\n ${this.accept}\n </dap-ds-typography>\n `}\n </div>\n </slot>\n </div>\n `\n : nothing}\n <span\n part=\"base\"\n class=${clsx(\n 'input',\n { 'input--success': this.status === 'success' },\n { 'input--error': this.status === 'error' },\n { 'input--disabled': this.disabled },\n )}\n role=\"region\"\n aria-label=\"File upload area\">\n <div class=\"input__holder\" aria-describedby=\"drop-instructions\">\n <input\n id=\"input\"\n class=\"input__control sr-only\"\n part=\"input\"\n name=${this.name}\n type=\"file\"\n accept=${ifDefined(this.accept)}\n ?disabled=${this.disabled}\n ?multiple=${this.multiple}\n ?required=${this.required}\n tabindex=${inputTabbable ? '0' : '-1'}\n aria-labelledby=\"label\"\n aria-hidden=${inputTabbable ? 'false' : 'true'}\n aria-describedby=\"description ${this.feedback\n ? 'feedback'\n : nothing}\"\n @change=${this.onChange}\n @cancel=${this.onCancel}\n @invalid=${this.handleInvalid}\n @blur=${this.onBlur}\n @focus=${this.onFocus} />\n ${showBrowseButton\n ? html` <dap-ds-button\n class=\"input__button\"\n part=\"browse-button\"\n data-testid=${this.browseButtonTestId}\n tabindex=\"-1\"\n variant=\"outline\"\n ?disabled=${this.disabled}\n size=${ifDefined(this.size) as CommonFormElementSize}\n @click=${this.onClick}\n @dragenter=${this.showDropzone ? nothing : this.onDragenter}\n @dragover=${this.showDropzone ? nothing : this.onDragover}\n @drop=${this.showDropzone ? nothing : this.onDrop}\n aria-label=\"${this.browseButtonLabel ||\n this.localize.t('fileInput.browse')}${this.showDropzone\n ? ''\n : ` - ${this.localize.t('fileInput.dragDropArea')}`}\"\n role=\"button\"\n >${this.browseButtonLabel ||\n this.localize.t('fileInput.browse')}</dap-ds-button\n >`\n : nothing}\n ${this.showUploadButton === 'true' && !this.autoupload\n ? html`\n <dap-ds-button\n class=\"upload-button\"\n part=\"upload-button\"\n data-testid=${this.uploadButtonTestId}\n variant=\"primary\"\n size=${ifDefined(this.size) as CommonFormElementSize}\n ?disabled=${this._files.length === 0 ||\n !this.uploadUrl ||\n this._uploadingFiles.size > 0}\n @click=${this.startUpload}\n >${this.uploadButtonLabel ||\n this.localize.t('fileInput.upload')}</dap-ds-button\n >\n `\n : nothing}\n <div id=\"drop-instructions\" class=\"sr-only\">\n ${this.localize.t('fileInput.dragDropInstructions')}\n </div>\n </div>\n </span>\n ${!this.fileList && this._uploadingFiles.size > 0\n ? html`\n <div class=\"upload-progress\" part=\"upload-progress\">\n ${Array.from(this._uploadingFiles).map(fileName => {\n const progress = this._uploadProgress[fileName] || 0\n return html`\n <div class=\"upload-progress__item\">\n <dap-ds-typography variant=\"caption\">\n ${fileName} - ${Math.round(progress)}%\n </dap-ds-typography>\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n style=\"width: ${progress}%\"></div>\n </div>\n </div>\n `\n })}\n </div>\n `\n : nothing}\n <dap-ds-modal\n .open=${this._showRemoveDialog}\n title=\"${this.localize.t('fileInput.removeDialog.title')}\"\n okButtonLabel=${this.removeButtonLabel ||\n this.localize.t('fileInput.removeDialog.confirm')}\n cancelButtonLabel=${this.cancelButtonLabel ||\n this.localize.t('fileInput.removeDialog.cancel')}\n .okButtonDanger=${this.removeButtonDanger === 'true'}\n @dds-cancel=${this.onCancelDelete}\n @dds-close=${this.onCancelDelete}\n @dds-ok=${this.onConfirmDelete}>\n <div>\n <dap-ds-typography variant=\"body\">\n ${this.localize.t('fileInput.removeDialog.message', {\n fileName: this._fileToRemove?.name ?? '',\n })}\n </dap-ds-typography>\n </div>\n </dap-ds-modal>\n\n ${this.feedback\n ? html`\n <dap-ds-feedback\n part=\"feedback\"\n feedbackType=${ifDefined(this.feedbackType)}\n feedbackSize=${ifDefined(this.size) as 'lg' | 'sm' | 'xs'}\n id=\"feedback\"\n .feedbackSubtle=${this.subtle}>\n ${this.feedback}\n </dap-ds-feedback>\n `\n : nothing}\n `\n }\n}\n"],"names":["_DapDSFileInput","GenericFormElement","file1","file2","file","type","acceptedType","baseType","fileList","errors","existingFileCount","t","totalSize","fileData","options","resolve","reject","__async","removedFiles","fileName","uploadResult","error","dataTransfer","i18next","event","customEvent","loading","fileComponent","xhr","newProgress","__spreadValues","HttpError","deleteEndpoint","headers","key","value","files","totalFiles","completedUploads","formData","__spreadProps","progress","response","result","fileError","FileError","_a","f","targetFiles","validation","fallbackFile","newFiles","allFiles","canceledFiles","acceptedFiles","droppedFiles","showBrowseButton","inputTabbable","html","formLabelTemplate","clsx","ifDefined","nothing","_b","DapDSFormLabel","DapDSTooltip","DapDSIconButton","DapDSIcon","DapDSTypography","DapDSButton","DapDSModal","DapDSFeedback","css","unsafeCSS","style","DapDSFileInput","__decorateClass","query","property","state"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const d = "*,*:before,*:after{box-sizing:border-box;outline:none}* :not(dap-ds-table-cell,dap-ds-table-header){margin:0;padding:0}html:focus-within{scroll-behavior:smooth}a:not([class]){text-decoration-skip-ink:auto}img,picture,svg,video,canvas{max-width:100%;height:auto;background-repeat:no-repeat;background-size:cover;font-style:italic;vertical-align:middle}input,button,textarea,select{font:inherit}[hidden]{display:none!important}@media (prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{transition:none;transition-duration:.01ms!important;transition-delay:1ms!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important}}body,html{height:100%;scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=number]{appearance:textfield}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{appearance:none}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.input-description{display:block;margin-bottom:var(--dds-spacing-200)}@keyframes dds-spin{to{transform:rotate(360deg)}}@keyframes dds-fade{0%,to{opacity:.3}50%{opacity:1}}:root{--dds-form-label-font-weight: var(--dds-font-weight-bold);--dds-form-label-line-height: var(--dds-font-line-height-xlarge);--dds-form-label-color: var(--dds-text-neutral-base);--dds-form-label-disabled-color: var(--dds-text-neutral-disabled);--dds-form-label-required-color: var(--dds-text-negative-subtle);--dds-form-label-optional-color: var(--dds-text-neutral-subtle);--dds-form-label-margin-bottom: var(--dds-spacing-200)}dap-ds-form-label .dds-label{display:block;margin-bottom:var(--dds-form-label-margin-bottom);color:var(--dds-form-label-color);font-weight:var(--dds-form-label-font-weight);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label--no-margin{margin-bottom:0}dap-ds-form-label .dds-label--hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}dap-ds-form-label .dds-label--disabled{color:var(--dds-form-label-disabled-color)}dap-ds-form-label .dds-label--xs{font-size:var(--dds-font-sm)}dap-ds-form-label .dds-label--sm{font-size:var(--dds-font-base)}dap-ds-form-label .dds-label--lg{font-size:var(--dds-font-lg)}dap-ds-form-label .dds-label--subtle{font-weight:var(--dds-font-weight-medium)}dap-ds-form-label .dds-label .dds-label__required-indicator{order:2;color:var(--dds-form-label-required-color);font-weight:var(--dds-font-weight-bold);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label .dds-label__optional-indicator{order:3;color:var(--dds-form-label-optional-color);font-weight:var(--dds-font-weight-medium);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label .dds-label__optional-indicator--xs{font-size:var(--dds-font-sm)}dap-ds-form-label .dds-label .dds-label__optional-indicator--lg{font-size:var(--dds-font-lg)}.label-container{display:flex;align-items:center;justify-content:space-between}.label--has-description{margin-bottom:var(--dds-spacing-200)}dap-ds-form-label+dap-ds-typography{display:block}.info-button{fill:var(--dds-button-subtle-icon-neutral-enabled);color:var(--dds-button-subtle-icon-neutral-enabled)}:host{--dds-file-input-holder-margin: var(--dds-spacing-400) 0 0 0;--dds-file-input-dropzone-padding: var(--dds-spacing-800);--dds-file-input-dropzone-border: var(--dds-border-width-base) dashed var(--dds-border-neutral-subtle);--dds-file-input-dropzone-border-radius: var(--dds-radius-base);--dds-file-input-dropzone-background: var(--dds-background-neutral-base);--dds-file-input-dropzone-border-hover: var(--dds-border-width-base) dashed var(--dds-border-neutral-medium);--dds-file-input-dropzone-background-hover: var( --dds-background-neutral-base );--dds-file-input-dropzone-border-dragover: var(--dds-border-width-base) dashed var(--dds-border-neutral-medium);--dds-file-input-dropzone-background-dragover: var( --dds-background-neutral-medium );--dds-file-input-dropzone-border-disabled: var(--dds-border-width-base) dashed var(--dds-border-neutral-disabled);--dds-file-input-dropzone-gap: var(--dds-spacing-300);--dds-file-input-dropzone-accept-color: var(--dds-color-text-secondary)}.input__holder{position:relative;margin:var(--dds-file-input-holder-margin)}.input__control:focus-visible+.input__button::part(base){outline-style:solid}.dropzone{outline-color:var(--dds-focus-outer-ring);outline-offset:var(--dds-spacing-50);outline-width:var(--dds-border-width-large);margin:var(--dds-file-input-holder-margin);padding:var(--dds-file-input-dropzone-padding);border:var(--dds-file-input-dropzone-border);border-radius:var(--dds-file-input-dropzone-border-radius);background:var(--dds-file-input-dropzone-background);cursor:pointer}.dropzone:hover{border:var(--dds-file-input-dropzone-border-hover);background:var(--dds-file-input-dropzone-background-hover)}.dropzone:focus-visible{outline-style:solid}.dropzone--dragover{border:var(--dds-file-input-dropzone-border-dragover);background:var(--dds-file-input-dropzone-background-dragover)}.dropzone--disabled{border:var(--dds-file-input-dropzone-border-disabled);cursor:not-allowed}.dropzone--disabled:hover{border:var(--dds-file-input-dropzone-border-disabled)}.dropzone__content{display:flex;flex-direction:column;align-items:center;gap:var(--dds-file-input-dropzone-gap);text-align:center}.dropzone__accept{color:var(--dds-file-input-dropzone-accept-color)}";
1
+ const d = "*,*:before,*:after{box-sizing:border-box;outline:none}* :not(dap-ds-table-cell,dap-ds-table-header){margin:0;padding:0}html:focus-within{scroll-behavior:smooth}a:not([class]){text-decoration-skip-ink:auto}img,picture,svg,video,canvas{max-width:100%;height:auto;background-repeat:no-repeat;background-size:cover;font-style:italic;vertical-align:middle}input,button,textarea,select{font:inherit}[hidden]{display:none!important}@media (prefers-reduced-motion: reduce){html:focus-within{scroll-behavior:auto}*,*:before,*:after{transition:none;transition-duration:.01ms!important;transition-delay:1ms!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important}}body,html{height:100%;scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=number]{appearance:textfield}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{appearance:none}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.input-description{display:block;margin-bottom:var(--dds-spacing-200)}@keyframes dds-spin{to{transform:rotate(360deg)}}@keyframes dds-fade{0%,to{opacity:.3}50%{opacity:1}}:root{--dds-form-label-font-weight: var(--dds-font-weight-bold);--dds-form-label-line-height: var(--dds-font-line-height-xlarge);--dds-form-label-color: var(--dds-text-neutral-base);--dds-form-label-disabled-color: var(--dds-text-neutral-disabled);--dds-form-label-required-color: var(--dds-text-negative-subtle);--dds-form-label-optional-color: var(--dds-text-neutral-subtle);--dds-form-label-margin-bottom: var(--dds-spacing-200)}dap-ds-form-label .dds-label{display:block;margin-bottom:var(--dds-form-label-margin-bottom);color:var(--dds-form-label-color);font-weight:var(--dds-form-label-font-weight);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label--no-margin{margin-bottom:0}dap-ds-form-label .dds-label--hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}dap-ds-form-label .dds-label--disabled{color:var(--dds-form-label-disabled-color)}dap-ds-form-label .dds-label--xs{font-size:var(--dds-font-sm)}dap-ds-form-label .dds-label--sm{font-size:var(--dds-font-base)}dap-ds-form-label .dds-label--lg{font-size:var(--dds-font-lg)}dap-ds-form-label .dds-label--subtle{font-weight:var(--dds-font-weight-medium)}dap-ds-form-label .dds-label .dds-label__required-indicator{order:2;color:var(--dds-form-label-required-color);font-weight:var(--dds-font-weight-bold);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label .dds-label__optional-indicator{order:3;color:var(--dds-form-label-optional-color);font-weight:var(--dds-font-weight-medium);line-height:var(--dds-form-label-line-height)}dap-ds-form-label .dds-label .dds-label__optional-indicator--xs{font-size:var(--dds-font-sm)}dap-ds-form-label .dds-label .dds-label__optional-indicator--lg{font-size:var(--dds-font-lg)}.label-container{display:flex;align-items:center;justify-content:space-between}.label--has-description{margin-bottom:var(--dds-spacing-200)}dap-ds-form-label+dap-ds-typography{display:block}.info-button{fill:var(--dds-button-subtle-icon-neutral-enabled);color:var(--dds-button-subtle-icon-neutral-enabled)}:host{--dds-form-label-font-weight: var(--dds-font-weight-bold);--dds-form-label-line-height: var(--dds-font-line-height-xlarge);--dds-form-label-color: var(--dds-text-neutral-base);--dds-form-label-disabled-color: var(--dds-text-neutral-disabled);--dds-form-label-required-color: var(--dds-text-negative-subtle);--dds-form-label-optional-color: var(--dds-text-neutral-subtle);--dds-form-label-margin-bottom: var(--dds-spacing-200)}.dds-label{display:block;margin-bottom:var(--dds-form-label-margin-bottom);color:var(--dds-form-label-color);font-weight:var(--dds-form-label-font-weight);line-height:var(--dds-form-label-line-height)}.dds-label--no-margin{margin-bottom:0}.dds-label--hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.dds-label--disabled{color:var(--dds-form-label-disabled-color)}.dds-label--xs{font-size:var(--dds-font-sm)}.dds-label--sm{font-size:var(--dds-font-base)}.dds-label--lg{font-size:var(--dds-font-lg)}.dds-label--subtle{font-weight:var(--dds-font-weight-medium)}.dds-label .dds-label__required-indicator{order:2;color:var(--dds-form-label-required-color);font-weight:var(--dds-font-weight-bold);line-height:var(--dds-form-label-line-height)}.dds-label .dds-label__optional-indicator{order:3;color:var(--dds-form-label-optional-color);font-weight:var(--dds-font-weight-medium);line-height:var(--dds-form-label-line-height)}.dds-label .dds-label__optional-indicator--xs{font-size:var(--dds-font-sm)}.dds-label .dds-label__optional-indicator--lg{font-size:var(--dds-font-lg)}:host{--dds-file-input-holder-margin: var(--dds-spacing-400) 0 0 0;--dds-file-input-dropzone-padding: var(--dds-spacing-800);--dds-file-input-dropzone-border: var(--dds-border-width-base) dashed var(--dds-border-neutral-subtle);--dds-file-input-dropzone-border-radius: var(--dds-radius-base);--dds-file-input-dropzone-background: var(--dds-background-neutral-base);--dds-file-input-dropzone-border-hover: var(--dds-border-width-base) dashed var(--dds-border-neutral-medium);--dds-file-input-dropzone-background-hover: var( --dds-background-neutral-base );--dds-file-input-dropzone-border-dragover: var(--dds-border-width-base) dashed var(--dds-border-neutral-medium);--dds-file-input-dropzone-background-dragover: var( --dds-background-neutral-medium );--dds-file-input-dropzone-border-disabled: var(--dds-border-width-base) dashed var(--dds-border-neutral-disabled);--dds-file-input-dropzone-gap: var(--dds-spacing-300);--dds-file-input-dropzone-accept-color: var(--dds-color-text-secondary)}.input__holder{position:relative;margin:var(--dds-file-input-holder-margin)}.input__control:focus-visible+.input__button::part(base){outline-style:solid}.dropzone{outline-color:var(--dds-focus-outer-ring);outline-offset:var(--dds-spacing-50);outline-width:var(--dds-border-width-large);margin:var(--dds-file-input-holder-margin);padding:var(--dds-file-input-dropzone-padding);border:var(--dds-file-input-dropzone-border);border-radius:var(--dds-file-input-dropzone-border-radius);background:var(--dds-file-input-dropzone-background);cursor:pointer}.dropzone:hover{border:var(--dds-file-input-dropzone-border-hover);background:var(--dds-file-input-dropzone-background-hover)}.dropzone:focus-visible{outline-style:solid}.dropzone--dragover{border:var(--dds-file-input-dropzone-border-dragover);background:var(--dds-file-input-dropzone-background-dragover)}.dropzone--disabled{border:var(--dds-file-input-dropzone-border-disabled);cursor:not-allowed}.dropzone--disabled:hover{border:var(--dds-file-input-dropzone-border-disabled)}.dropzone__content{display:flex;flex-direction:column;align-items:center;gap:var(--dds-file-input-dropzone-gap);text-align:center}.dropzone__accept{color:var(--dds-file-input-dropzone-accept-color)}";
2
2
  export {
3
3
  d as default
4
4
  };
@@ -21,9 +21,9 @@ declare const DapDSFormLabel_base: {
21
21
  * @property {string} label - The label text.
22
22
  * @property {boolean} hideLabel - Visually hides the label while keeping it available to assistive technology. (default: false)
23
23
  *
24
- * @csspart base - The main form label container.
25
24
  * @csspart required - The required indicator of the form label.
26
25
  * @csspart optional - The optional indicator of the form label.
26
+ * @csspart label-base - The label element.
27
27
  *
28
28
  * @cssproperty --dds-form-label-font-weight - Font weight of the label. (default: var(--dds-font-weight-bold))
29
29
  * @cssproperty --dds-form-label-line-height - Line height of the label. (default: var(--dds-font-line-height-xlarge))
@@ -1,29 +1,26 @@
1
1
  import { clsx as f } from "../../../node_modules/clsx/dist/clsx.js";
2
- import "../../../node_modules/@lit/reactive-element/reactive-element.js";
3
- import "../../../node_modules/lit-html/lit-html.js";
4
- import "../../../node_modules/lit-element/lit-element.js";
5
- import { property as a } from "../../../node_modules/@lit/reactive-element/decorators/property.js";
6
- import { ifDefined as m } from "../../../node_modules/lit-html/directives/if-defined.js";
7
- import { unsafeStatic as h, html as s } from "../../../node_modules/lit-html/static.js";
8
- import { adoptLightStyles as b } from "../../../internal/adopt-light-styles.js";
9
- import { DdsElement as u } from "../../../internal/dds-hu-element.js";
10
- import { LabelableMixin as c } from "../../../internal/mixin/labelableMixin.js";
11
- import { SizedMixin as $ } from "../../../internal/mixin/sizedMixin.js";
12
- import y from "./_styles/form-label.scss.js";
13
- import { unsafeCSS as g } from "../../../node_modules/@lit/reactive-element/css-tag.js";
14
- var v = Object.defineProperty, l = (o, d, n, _) => {
2
+ import { unsafeCSS as b } from "lit";
3
+ import { property as l } from "lit/decorators.js";
4
+ import { ifDefined as m } from "lit/directives/if-defined.js";
5
+ import { unsafeStatic as h, html as s } from "lit/static-html.js";
6
+ import { adoptLightStyles as u } from "../../../internal/adopt-light-styles.js";
7
+ import { DdsElement as c } from "../../../internal/dds-hu-element.js";
8
+ import { LabelableMixin as $ } from "../../../internal/mixin/labelableMixin.js";
9
+ import { SizedMixin as y } from "../../../internal/mixin/sizedMixin.js";
10
+ import g from "./_styles/form-label.scss.js";
11
+ var v = Object.defineProperty, a = (o, d, n, _) => {
15
12
  for (var e = void 0, r = o.length - 1, p; r >= 0; r--)
16
13
  (p = o[r]) && (e = p(d, n, e) || e);
17
14
  return e && v(d, n, e), e;
18
15
  };
19
- const i = class i extends $(
20
- c(u)
16
+ const i = class i extends y(
17
+ $(c)
21
18
  ) {
22
19
  constructor() {
23
20
  super(...arguments), this.renderAs = "label", this.noMargin = !1;
24
21
  }
25
22
  createRenderRoot() {
26
- return b(this), this;
23
+ return u(this), this;
27
24
  }
28
25
  render() {
29
26
  return s`
@@ -56,16 +53,16 @@ const i = class i extends $(
56
53
  </${h(this.renderAs)}>`;
57
54
  }
58
55
  };
59
- i.tagName = "dap-ds-form-label", i.styles = g(y);
56
+ i.tagName = "dap-ds-form-label", i.styles = b(g);
60
57
  let t = i;
61
- l([
62
- a()
58
+ a([
59
+ l()
63
60
  ], t.prototype, "for");
64
- l([
65
- a({ type: String })
61
+ a([
62
+ l({ type: String })
66
63
  ], t.prototype, "renderAs");
67
- l([
68
- a({ type: Boolean })
64
+ a([
65
+ l({ type: Boolean })
69
66
  ], t.prototype, "noMargin");
70
67
  export {
71
68
  t as default
@@ -1 +1 @@
1
- {"version":3,"file":"form-label.component.js","sources":["../../../../src/components/form/form-label/form-label.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { unsafeCSS } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html, unsafeStatic } from 'lit/static-html.js'\n\nimport { adoptLightStyles } from '@/internal/adopt-light-styles'\nimport { DdsElement } from '@/internal/dds-hu-element'\nimport { LabelableMixin } from '@/internal/mixin/labelableMixin'\nimport { SizedMixin } from '@/internal/mixin/sizedMixin'\n\nimport styles from './_styles/form-label.scss?inline'\n\n/**\n * `dap-ds-form-label`\n * @summary A form label is a container for labels in a form.\n * @element dap-ds-form-label\n * @title - Form label\n * @group form\n *\n * @property {string} optionalLabel - Label of optional text\n * @property {boolean} subtle - Text weight of the label.\n * @property {boolean} optional - If the label is optional.\n * @property {boolean} required - If the label is required.\n * @property {string} requiredLabel - Indicator of required text. (default: '*')\n * @property {string} label - The label text.\n * @property {boolean} hideLabel - Visually hides the label while keeping it available to assistive technology. (default: false)\n *\n * @csspart base - The main form label container.\n * @csspart required - The required indicator of the form label.\n * @csspart optional - The optional indicator of the form label.\n *\n * @cssproperty --dds-form-label-font-weight - Font weight of the label. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-form-label-line-height - Line height of the label. (default: var(--dds-font-line-height-xlarge))\n * @cssproperty --dds-form-label-color - Text color of the label. (default: var(--dds-text-neutral-enabled))\n * @cssproperty --dds-form-label-disabled-color - Text color when the label is disabled. (default: var(--dds-text-neutral-disabled))\n * @cssproperty --dds-form-label-required-color - Color of the required indicator. (default: var(--dds-text-negative-subtle))\n * @cssproperty --dds-form-label-optional-color - Color of the optional indicator. (default: var(--dds-text-neutral-subtle))\n * @cssproperty --dds-form-label-margin-bottom - Bottom margin of the label. (default: var(--dds-spacing-200))\n */\nexport default class DapDSFormLabel extends SizedMixin(\n LabelableMixin(DdsElement),\n) {\n static tagName = 'dap-ds-form-label'\n\n /** The id of the form element that the label is associated with. */\n @property() for?: string\n /** Whether the label should be rendered as text or a <label> tag. Default is label. */\n @property({ type: String }) renderAs: string = 'label'\n\n /** Whether the label should have no margin. */\n @property({ type: Boolean }) noMargin = false\n\n static readonly styles = unsafeCSS(styles)\n\n createRenderRoot() {\n adoptLightStyles(this)\n return this\n }\n\n render() {\n return html`\n \n <${unsafeStatic(this.renderAs)}\n part=\"label-base\"\n class=${clsx('dds-label', `dds-label--${this.effectiveSize}`, {\n 'dds-label--disabled': this.disabled,\n 'dds-label--required': this.required,\n 'dds-label--optional': this.optional,\n 'dds-label--subtle': this.subtle,\n 'dds-label--no-margin': this.noMargin,\n 'dds-label--hidden': this.hideLabel,\n })}\n for=${ifDefined(this.for)}>\n ${this.label}\n ${\n this.required\n ? html`<span\n part=\"required\"\n aria-hidden=\"true\"\n class=\"dds-label__required-indicator\"\n >${this.requiredLabel}</span\n >`\n : null\n }\n ${\n this.optional\n ? html`<span\n part=\"optional\"\n class=${clsx('dds-label__optional-indicator', {\n [`dds-label__optional-indicator--${this.effectiveSize}`]:\n this.effectiveSize,\n })}>\n ${this.optionalLabel}\n </span>`\n : null\n }\n </${unsafeStatic(this.renderAs)}>`\n }\n}\n"],"names":["_DapDSFormLabel","SizedMixin","LabelableMixin","DdsElement","adoptLightStyles","html","unsafeStatic","clsx","ifDefined","unsafeCSS","styles","DapDSFormLabel","__decorateClass","property"],"mappings":";;;;;;;;;;;;;;;;;;AAwCA,MAAqBA,IAArB,MAAqBA,UAAuBC;AAAA,EAC1CC,EAAeC,CAAU;AAC3B,EAAE;AAAA,EAFF,cAAA;AAAA,UAAA,GAAA,SAAA,GAQiD,KAAA,WAAA,SAGP,KAAA,WAAA;AAAA,EAAA;AAAA,EAIxC,mBAAmB;AACjB,WAAAC,EAAiB,IAAI,GACd;AAAA,EAAA;AAAA,EAGT,SAAS;AACA,WAAAC;AAAAA;AAAAA,OAEJC,EAAa,KAAK,QAAQ,CAAC;AAAA;AAAA,kBAEhBC,EAAK,aAAa,cAAc,KAAK,aAAa,IAAI;AAAA,MAC5D,uBAAuB,KAAK;AAAA,MAC5B,uBAAuB,KAAK;AAAA,MAC5B,uBAAuB,KAAK;AAAA,MAC5B,qBAAqB,KAAK;AAAA,MAC1B,wBAAwB,KAAK;AAAA,MAC7B,qBAAqB,KAAK;AAAA,IAAA,CAC3B,CAAC;AAAA,gBACIC,EAAU,KAAK,GAAG,CAAC;AAAA,YACvB,KAAK,KAAK;AAAA,YAEV,KAAK,WACDH;AAAAA;AAAAA;AAAAA;AAAAA,qBAIK,KAAK,aAAa;AAAA,qBAEvB,IACN;AAAA,YAEE,KAAK,WACDA;AAAAA;AAAAA,0BAEUE,EAAK,iCAAiC;AAAA,MAC5C,CAAC,kCAAkC,KAAK,aAAa,EAAE,GACrD,KAAK;AAAA,IAAA,CACR,CAAC;AAAA,oBACA,KAAK,aAAa;AAAA,2BAEtB,IACN;AAAA,YACED,EAAa,KAAK,QAAQ,CAAC;AAAA,EAAA;AAEvC;AAxDEN,EAAO,UAAU,qBAUDA,EAAA,SAASS,EAAUC,CAAM;AAb3C,IAAqBC,IAArBX;AAMcY,EAAA;AAAA,EAAXC,EAAS;AAAA,GANSF,EAMP,WAAA,KAAA;AAEgBC,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAQ,CAAA;AAAA,GARPF,EAQS,WAAA,UAAA;AAGCC,EAAA;AAAA,EAA5BC,EAAS,EAAE,MAAM,QAAS,CAAA;AAAA,GAXRF,EAWU,WAAA,UAAA;"}
1
+ {"version":3,"file":"form-label.component.js","sources":["../../../../src/components/form/form-label/form-label.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { unsafeCSS } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { html, unsafeStatic } from 'lit/static-html.js'\n\nimport { adoptLightStyles } from '@/internal/adopt-light-styles'\nimport { DdsElement } from '@/internal/dds-hu-element'\nimport { LabelableMixin } from '@/internal/mixin/labelableMixin'\nimport { SizedMixin } from '@/internal/mixin/sizedMixin'\n\nimport styles from './_styles/form-label.scss?inline'\n\n/**\n * `dap-ds-form-label`\n * @summary A form label is a container for labels in a form.\n * @element dap-ds-form-label\n * @title - Form label\n * @group form\n *\n * @property {string} optionalLabel - Label of optional text\n * @property {boolean} subtle - Text weight of the label.\n * @property {boolean} optional - If the label is optional.\n * @property {boolean} required - If the label is required.\n * @property {string} requiredLabel - Indicator of required text. (default: '*')\n * @property {string} label - The label text.\n * @property {boolean} hideLabel - Visually hides the label while keeping it available to assistive technology. (default: false)\n *\n * @csspart required - The required indicator of the form label.\n * @csspart optional - The optional indicator of the form label.\n * @csspart label-base - The label element.\n *\n * @cssproperty --dds-form-label-font-weight - Font weight of the label. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-form-label-line-height - Line height of the label. (default: var(--dds-font-line-height-xlarge))\n * @cssproperty --dds-form-label-color - Text color of the label. (default: var(--dds-text-neutral-enabled))\n * @cssproperty --dds-form-label-disabled-color - Text color when the label is disabled. (default: var(--dds-text-neutral-disabled))\n * @cssproperty --dds-form-label-required-color - Color of the required indicator. (default: var(--dds-text-negative-subtle))\n * @cssproperty --dds-form-label-optional-color - Color of the optional indicator. (default: var(--dds-text-neutral-subtle))\n * @cssproperty --dds-form-label-margin-bottom - Bottom margin of the label. (default: var(--dds-spacing-200))\n */\nexport default class DapDSFormLabel extends SizedMixin(\n LabelableMixin(DdsElement),\n) {\n static tagName = 'dap-ds-form-label'\n\n /** The id of the form element that the label is associated with. */\n @property() for?: string\n /** Whether the label should be rendered as text or a <label> tag. Default is label. */\n @property({ type: String }) renderAs: string = 'label'\n\n /** Whether the label should have no margin. */\n @property({ type: Boolean }) noMargin = false\n\n static readonly styles = unsafeCSS(styles)\n\n createRenderRoot() {\n adoptLightStyles(this)\n return this\n }\n\n render() {\n return html`\n \n <${unsafeStatic(this.renderAs)}\n part=\"label-base\"\n class=${clsx('dds-label', `dds-label--${this.effectiveSize}`, {\n 'dds-label--disabled': this.disabled,\n 'dds-label--required': this.required,\n 'dds-label--optional': this.optional,\n 'dds-label--subtle': this.subtle,\n 'dds-label--no-margin': this.noMargin,\n 'dds-label--hidden': this.hideLabel,\n })}\n for=${ifDefined(this.for)}>\n ${this.label}\n ${\n this.required\n ? html`<span\n part=\"required\"\n aria-hidden=\"true\"\n class=\"dds-label__required-indicator\"\n >${this.requiredLabel}</span\n >`\n : null\n }\n ${\n this.optional\n ? html`<span\n part=\"optional\"\n class=${clsx('dds-label__optional-indicator', {\n [`dds-label__optional-indicator--${this.effectiveSize}`]:\n this.effectiveSize,\n })}>\n ${this.optionalLabel}\n </span>`\n : null\n }\n </${unsafeStatic(this.renderAs)}>`\n }\n}\n"],"names":["_DapDSFormLabel","SizedMixin","LabelableMixin","DdsElement","adoptLightStyles","html","unsafeStatic","clsx","ifDefined","unsafeCSS","styles","DapDSFormLabel","__decorateClass","property"],"mappings":";;;;;;;;;;;;;;;AAwCA,MAAqBA,IAArB,MAAqBA,UAAuBC;AAAA,EAC1CC,EAAeC,CAAU;AAC3B,EAAE;AAAA,EAFF,cAAA;AAAA,UAAA,GAAA,SAAA,GAQiD,KAAA,WAAA,SAGP,KAAA,WAAA;AAAA,EAAA;AAAA,EAIxC,mBAAmB;AACjB,WAAAC,EAAiB,IAAI,GACd;AAAA,EAAA;AAAA,EAGT,SAAS;AACA,WAAAC;AAAA;AAAA,OAEJC,EAAa,KAAK,QAAQ,CAAC;AAAA;AAAA,kBAEhBC,EAAK,aAAa,cAAc,KAAK,aAAa,IAAI;AAAA,MAC5D,uBAAuB,KAAK;AAAA,MAC5B,uBAAuB,KAAK;AAAA,MAC5B,uBAAuB,KAAK;AAAA,MAC5B,qBAAqB,KAAK;AAAA,MAC1B,wBAAwB,KAAK;AAAA,MAC7B,qBAAqB,KAAK;AAAA,IAAA,CAC3B,CAAC;AAAA,gBACIC,EAAU,KAAK,GAAG,CAAC;AAAA,YACvB,KAAK,KAAK;AAAA,YAEV,KAAK,WACDH;AAAA;AAAA;AAAA;AAAA,qBAIK,KAAK,aAAa;AAAA,qBAEvB,IACN;AAAA,YAEE,KAAK,WACDA;AAAA;AAAA,0BAEUE,EAAK,iCAAiC;AAAA,MAC5C,CAAC,kCAAkC,KAAK,aAAa,EAAE,GACrD,KAAK;AAAA,IAAA,CACR,CAAC;AAAA,oBACA,KAAK,aAAa;AAAA,2BAEtB,IACN;AAAA,YACED,EAAa,KAAK,QAAQ,CAAC;AAAA,EAAA;AAEvC;AAxDEN,EAAO,UAAU,qBAUDA,EAAA,SAASS,EAAUC,CAAM;AAb3C,IAAqBC,IAArBX;AAMcY,EAAA;AAAA,EAAXC,EAAS;AAAA,GANSF,EAMP,WAAA,KAAA;AAEgBC,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAQ,CAAA;AAAA,GARPF,EAQS,WAAA,UAAA;AAGCC,EAAA;AAAA,EAA5BC,EAAS,EAAE,MAAM,QAAS,CAAA;AAAA,GAXRF,EAWU,WAAA,UAAA;"}
@@ -38,6 +38,10 @@ import { default as DapDSFormLabel } from '../form-label/form-label.component';
38
38
  * @csspart description - The description of the input group.
39
39
  * @csspart tooltip - The tooltip of the input group.
40
40
  * @csspart container - The container of the input group items.
41
+ * @csspart feedback - The feedback of the input group.
42
+ * @csspart label-base - The base of the label.
43
+ * @csspart label-required - The required indicator of the label.
44
+ * @csspart label-optional - The optional indicator of the label.
41
45
  */
42
46
  export default class DapDSInputGroup extends GenericFormElement {
43
47
  static tagName: string;