@eui/eds 22.0.0-alpha.22 → 22.0.0-alpha.23

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 (200) hide show
  1. package/docs/changelog.html +51 -0
  2. package/docs/components/EdsButton.html +77 -203
  3. package/docs/components/EdsCalendarDay.html +1 -1
  4. package/docs/components/EdsCalendarHeader.html +1 -1
  5. package/docs/components/EdsDatepicker.html +1 -1
  6. package/docs/components/EdsDialogContainer.html +1 -1
  7. package/docs/components/EdsFeedbackMessage.html +35 -73
  8. package/docs/components/EdsFileUpload.html +1 -1
  9. package/docs/components/EdsFlexLayout.html +1 -1
  10. package/docs/components/EdsGridLayout.html +1 -1
  11. package/docs/components/EdsGridLayoutCell.html +1 -1
  12. package/docs/components/EdsGridLayoutRow.html +1 -1
  13. package/docs/components/EdsIconState.html +38 -3
  14. package/docs/components/EdsInputButton.html +0 -57
  15. package/docs/components/EdsInputCheckbox.html +0 -62
  16. package/docs/components/EdsInputIcon.html +0 -53
  17. package/docs/components/EdsInputNumber.html +0 -60
  18. package/docs/components/EdsInputRadio.html +0 -62
  19. package/docs/components/EdsInputText.html +0 -62
  20. package/docs/components/EdsLabel.html +1 -1
  21. package/docs/components/EdsLanguageSelectorDialog.html +3 -5
  22. package/docs/components/EdsLink.html +1 -1
  23. package/docs/components/EdsLoadingIndicator.html +1 -1
  24. package/docs/components/EdsPaginator.html +1 -1
  25. package/docs/components/EdsRating.html +66 -57
  26. package/docs/components/EdsSelect.html +0 -45
  27. package/docs/components/EdsSnc.html +2 -2
  28. package/docs/components/EdsTab.html +8 -133
  29. package/docs/components/EdsTabBody.html +21 -41
  30. package/docs/components/EdsTabHeader.html +13 -25
  31. package/docs/components/EdsTabHeaderLabel.html +4 -126
  32. package/docs/components/EdsTabHeaderLeftContent.html +4 -126
  33. package/docs/components/EdsTabHeaderRightContent.html +4 -126
  34. package/docs/components/EdsTabHeaderSublabel.html +4 -126
  35. package/docs/components/EdsTabs.html +113 -140
  36. package/docs/components/EdsTextarea.html +0 -62
  37. package/docs/components/EdsTreeListToolbar.html +1 -1
  38. package/docs/components/EdsTrend.html +1 -1
  39. package/docs/directives/EdsColorDirective.html +0 -9
  40. package/docs/directives/EdsFlexColDirective.html +1 -1
  41. package/docs/directives/EdsFlexGrowDirective.html +1 -1
  42. package/docs/directives/EdsFlexNoShrinkDirective.html +1 -1
  43. package/docs/directives/EdsSizeDirective.html +0 -3
  44. package/docs/directives/EdsTooltip.html +45 -281
  45. package/docs/js/search/search_index.js +2 -2
  46. package/docs/json/EdsButton.md +15 -24
  47. package/docs/json/EdsFeedbackMessage.md +4 -10
  48. package/docs/json/EdsIconState.md +2 -1
  49. package/docs/json/EdsRating.md +2 -0
  50. package/docs/json/EdsTab.md +1 -1
  51. package/docs/json/EdsTabs.md +7 -8
  52. package/docs/json/EdsTooltip.md +3 -3
  53. package/docs/json/documentation.json +1803 -2031
  54. package/docs/llms.txt +72 -109
  55. package/docs/miscellaneous/typealiases.html +179 -16
  56. package/docs/miscellaneous/variables.html +16 -16
  57. package/docs/properties.html +1 -1
  58. package/eds-flex-layout/package.json +4 -0
  59. package/eds-grid-layout/package.json +4 -0
  60. package/eds-icon-state/package.json +4 -0
  61. package/eds-label/package.json +4 -0
  62. package/eds-link/package.json +4 -0
  63. package/eds-loading-indicator/package.json +4 -0
  64. package/eds-snc/package.json +4 -0
  65. package/eds-trend/package.json +4 -0
  66. package/fesm2022/eui-eds-eds-alert.mjs +3 -3
  67. package/fesm2022/eui-eds-eds-alert.mjs.map +1 -1
  68. package/fesm2022/eui-eds-eds-button.mjs +53 -85
  69. package/fesm2022/eui-eds-eds-button.mjs.map +1 -1
  70. package/fesm2022/eui-eds-eds-calendar.mjs +4 -4
  71. package/fesm2022/eui-eds-eds-calendar.mjs.map +1 -1
  72. package/fesm2022/eui-eds-eds-datepicker.mjs +2 -2
  73. package/fesm2022/eui-eds-eds-datepicker.mjs.map +1 -1
  74. package/fesm2022/eui-eds-eds-dialog.mjs +4 -4
  75. package/fesm2022/eui-eds-eds-dialog.mjs.map +1 -1
  76. package/fesm2022/eui-eds-eds-discussion-thread.mjs +3 -3
  77. package/fesm2022/eui-eds-eds-discussion-thread.mjs.map +1 -1
  78. package/fesm2022/eui-eds-eds-feedback-message.mjs +28 -42
  79. package/fesm2022/eui-eds-eds-feedback-message.mjs.map +1 -1
  80. package/fesm2022/eui-eds-eds-file-upload.mjs +2 -2
  81. package/fesm2022/eui-eds-eds-file-upload.mjs.map +1 -1
  82. package/fesm2022/{eui-eds-utilities-eds-flex-layout.mjs → eui-eds-eds-flex-layout.mjs} +1 -1
  83. package/fesm2022/eui-eds-eds-flex-layout.mjs.map +1 -0
  84. package/fesm2022/{eui-eds-utilities-eds-grid-layout.mjs → eui-eds-eds-grid-layout.mjs} +1 -1
  85. package/fesm2022/eui-eds-eds-grid-layout.mjs.map +1 -0
  86. package/fesm2022/eui-eds-eds-growl.mjs +3 -3
  87. package/fesm2022/eui-eds-eds-growl.mjs.map +1 -1
  88. package/fesm2022/eui-eds-eds-icon-state.mjs +56 -0
  89. package/fesm2022/eui-eds-eds-icon-state.mjs.map +1 -0
  90. package/fesm2022/eui-eds-eds-input-button.mjs +10 -13
  91. package/fesm2022/eui-eds-eds-input-button.mjs.map +1 -1
  92. package/fesm2022/eui-eds-eds-input-checkbox.mjs +6 -17
  93. package/fesm2022/eui-eds-eds-input-checkbox.mjs.map +1 -1
  94. package/fesm2022/eui-eds-eds-input-icon.mjs +10 -9
  95. package/fesm2022/eui-eds-eds-input-icon.mjs.map +1 -1
  96. package/fesm2022/eui-eds-eds-input-number.mjs +5 -14
  97. package/fesm2022/eui-eds-eds-input-number.mjs.map +1 -1
  98. package/fesm2022/eui-eds-eds-input-radio.mjs +6 -17
  99. package/fesm2022/eui-eds-eds-input-radio.mjs.map +1 -1
  100. package/fesm2022/eui-eds-eds-input-text.mjs +5 -16
  101. package/fesm2022/eui-eds-eds-input-text.mjs.map +1 -1
  102. package/fesm2022/{eui-eds-utilities-eds-label.mjs → eui-eds-eds-label.mjs} +1 -1
  103. package/fesm2022/eui-eds-eds-label.mjs.map +1 -0
  104. package/fesm2022/eui-eds-eds-language-selector.mjs +5 -9
  105. package/fesm2022/eui-eds-eds-language-selector.mjs.map +1 -1
  106. package/fesm2022/{eui-eds-utilities-eds-link.mjs → eui-eds-eds-link.mjs} +1 -1
  107. package/fesm2022/eui-eds-eds-link.mjs.map +1 -0
  108. package/fesm2022/{eui-eds-utilities-eds-loading-indicator.mjs → eui-eds-eds-loading-indicator.mjs} +1 -1
  109. package/fesm2022/eui-eds-eds-loading-indicator.mjs.map +1 -0
  110. package/fesm2022/eui-eds-eds-paginator.mjs +2 -2
  111. package/fesm2022/eui-eds-eds-paginator.mjs.map +1 -1
  112. package/fesm2022/eui-eds-eds-progress-bar.mjs +3 -3
  113. package/fesm2022/eui-eds-eds-progress-bar.mjs.map +1 -1
  114. package/fesm2022/eui-eds-eds-rating.mjs +30 -16
  115. package/fesm2022/eui-eds-eds-rating.mjs.map +1 -1
  116. package/fesm2022/eui-eds-eds-select.mjs +10 -33
  117. package/fesm2022/eui-eds-eds-select.mjs.map +1 -1
  118. package/fesm2022/{eui-eds-utilities-eds-snc.mjs → eui-eds-eds-snc.mjs} +3 -3
  119. package/fesm2022/eui-eds-eds-snc.mjs.map +1 -0
  120. package/fesm2022/eui-eds-eds-tabs.mjs +192 -259
  121. package/fesm2022/eui-eds-eds-tabs.mjs.map +1 -1
  122. package/fesm2022/eui-eds-eds-textarea.mjs +5 -16
  123. package/fesm2022/eui-eds-eds-textarea.mjs.map +1 -1
  124. package/fesm2022/eui-eds-eds-tooltip.mjs +71 -86
  125. package/fesm2022/eui-eds-eds-tooltip.mjs.map +1 -1
  126. package/fesm2022/eui-eds-eds-tree-list.mjs +2 -2
  127. package/fesm2022/eui-eds-eds-tree-list.mjs.map +1 -1
  128. package/fesm2022/eui-eds-eds-tree.mjs +2 -2
  129. package/fesm2022/eui-eds-eds-tree.mjs.map +1 -1
  130. package/fesm2022/{eui-eds-utilities-eds-trend.mjs → eui-eds-eds-trend.mjs} +1 -1
  131. package/fesm2022/eui-eds-eds-trend.mjs.map +1 -0
  132. package/package.json +33 -33
  133. package/types/eui-eds-eds-button.d.ts +47 -33
  134. package/types/eui-eds-eds-button.d.ts.map +1 -1
  135. package/types/eui-eds-eds-feedback-message.d.ts +20 -10
  136. package/types/eui-eds-eds-feedback-message.d.ts.map +1 -1
  137. package/types/{eui-eds-utilities-eds-flex-layout.d.ts → eui-eds-eds-flex-layout.d.ts} +1 -1
  138. package/types/eui-eds-eds-flex-layout.d.ts.map +1 -0
  139. package/types/{eui-eds-utilities-eds-grid-layout.d.ts → eui-eds-eds-grid-layout.d.ts} +1 -1
  140. package/types/eui-eds-eds-grid-layout.d.ts.map +1 -0
  141. package/types/{eui-eds-utilities-eds-icon-state.d.ts → eui-eds-eds-icon-state.d.ts} +8 -3
  142. package/types/eui-eds-eds-icon-state.d.ts.map +1 -0
  143. package/types/eui-eds-eds-input-button.d.ts +5 -1
  144. package/types/eui-eds-eds-input-button.d.ts.map +1 -1
  145. package/types/eui-eds-eds-input-checkbox.d.ts +0 -4
  146. package/types/eui-eds-eds-input-checkbox.d.ts.map +1 -1
  147. package/types/eui-eds-eds-input-icon.d.ts +5 -1
  148. package/types/eui-eds-eds-input-icon.d.ts.map +1 -1
  149. package/types/eui-eds-eds-input-number.d.ts +1 -5
  150. package/types/eui-eds-eds-input-number.d.ts.map +1 -1
  151. package/types/eui-eds-eds-input-radio.d.ts +0 -4
  152. package/types/eui-eds-eds-input-radio.d.ts.map +1 -1
  153. package/types/eui-eds-eds-input-text.d.ts +1 -5
  154. package/types/eui-eds-eds-input-text.d.ts.map +1 -1
  155. package/types/{eui-eds-utilities-eds-label.d.ts → eui-eds-eds-label.d.ts} +1 -1
  156. package/types/eui-eds-eds-label.d.ts.map +1 -0
  157. package/types/eui-eds-eds-language-selector.d.ts.map +1 -1
  158. package/types/{eui-eds-utilities-eds-link.d.ts → eui-eds-eds-link.d.ts} +1 -1
  159. package/types/eui-eds-eds-link.d.ts.map +1 -0
  160. package/types/{eui-eds-utilities-eds-loading-indicator.d.ts → eui-eds-eds-loading-indicator.d.ts} +1 -1
  161. package/types/eui-eds-eds-loading-indicator.d.ts.map +1 -0
  162. package/types/eui-eds-eds-rating.d.ts +19 -2
  163. package/types/eui-eds-eds-rating.d.ts.map +1 -1
  164. package/types/eui-eds-eds-select.d.ts +1 -5
  165. package/types/eui-eds-eds-select.d.ts.map +1 -1
  166. package/types/{eui-eds-utilities-eds-snc.d.ts → eui-eds-eds-snc.d.ts} +1 -1
  167. package/types/eui-eds-eds-snc.d.ts.map +1 -0
  168. package/types/eui-eds-eds-tabs.d.ts +87 -100
  169. package/types/eui-eds-eds-tabs.d.ts.map +1 -1
  170. package/types/eui-eds-eds-textarea.d.ts +1 -5
  171. package/types/eui-eds-eds-textarea.d.ts.map +1 -1
  172. package/types/eui-eds-eds-tooltip.d.ts +27 -25
  173. package/types/eui-eds-eds-tooltip.d.ts.map +1 -1
  174. package/types/{eui-eds-utilities-eds-trend.d.ts → eui-eds-eds-trend.d.ts} +1 -1
  175. package/types/eui-eds-eds-trend.d.ts.map +1 -0
  176. package/fesm2022/eui-eds-utilities-eds-flex-layout.mjs.map +0 -1
  177. package/fesm2022/eui-eds-utilities-eds-grid-layout.mjs.map +0 -1
  178. package/fesm2022/eui-eds-utilities-eds-icon-state.mjs +0 -49
  179. package/fesm2022/eui-eds-utilities-eds-icon-state.mjs.map +0 -1
  180. package/fesm2022/eui-eds-utilities-eds-label.mjs.map +0 -1
  181. package/fesm2022/eui-eds-utilities-eds-link.mjs.map +0 -1
  182. package/fesm2022/eui-eds-utilities-eds-loading-indicator.mjs.map +0 -1
  183. package/fesm2022/eui-eds-utilities-eds-snc.mjs.map +0 -1
  184. package/fesm2022/eui-eds-utilities-eds-trend.mjs.map +0 -1
  185. package/types/eui-eds-utilities-eds-flex-layout.d.ts.map +0 -1
  186. package/types/eui-eds-utilities-eds-grid-layout.d.ts.map +0 -1
  187. package/types/eui-eds-utilities-eds-icon-state.d.ts.map +0 -1
  188. package/types/eui-eds-utilities-eds-label.d.ts.map +0 -1
  189. package/types/eui-eds-utilities-eds-link.d.ts.map +0 -1
  190. package/types/eui-eds-utilities-eds-loading-indicator.d.ts.map +0 -1
  191. package/types/eui-eds-utilities-eds-snc.d.ts.map +0 -1
  192. package/types/eui-eds-utilities-eds-trend.d.ts.map +0 -1
  193. package/utilities/eds-flex-layout/package.json +0 -4
  194. package/utilities/eds-grid-layout/package.json +0 -4
  195. package/utilities/eds-icon-state/package.json +0 -4
  196. package/utilities/eds-label/package.json +0 -4
  197. package/utilities/eds-link/package.json +0 -4
  198. package/utilities/eds-loading-indicator/package.json +0 -4
  199. package/utilities/eds-snc/package.json +0 -4
  200. package/utilities/eds-trend/package.json +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-file-upload.mjs","sources":["../../eds-file-upload/eds-filesize.pipe.ts","../../eds-file-upload/eds-file-upload-preview.ts","../../eds-file-upload/eds-file-upload-preview.html","../../eds-file-upload/eds-file-upload.ts","../../eds-file-upload/eds-file-upload.html","../../eds-file-upload/eds-file-upload.utils.ts","../../eds-file-upload/eds-file-upload.mime-types.ts","../../eds-file-upload/eds-file-upload.validators.ts","../../eds-file-upload/index.ts","../../eds-file-upload/eui-eds-eds-file-upload.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Transforms a file size in bytes into a human-readable format (e.g., KB, MB, GB).\n *\n * @example\n * ```html\n * {{ 1024 | edsFilesize }} <!-- Outputs: \"1.00 KB\" -->\n * {{ 1048576 | edsFilesize:1 }} <!-- Outputs: \"1.0 MB\" -->\n * ```\n */\n@Pipe({\n name: 'edsFilesize',\n})\nexport class EdsFilesizePipe implements PipeTransform {\n private units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n transform(bytes = 0, precision = 2): string {\n if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) {\n return '?';\n }\n\n let unit = 0;\n\n while (bytes >= 1024) {\n bytes /= 1024;\n unit++;\n }\n\n return bytes.toFixed(+precision) + ' ' + this.units[unit];\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnInit,\n TemplateRef,\n booleanAttribute,\n inject,\n input,\n output,\n computed,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\n\nimport { EdsUploadedFile } from './eds-file-upload.model';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\n/** Map of file extensions to EDS icon names. */\nconst ICON_MAP: Record<string, string> = {\n avi: 'file-video',\n html: 'file-code',\n htm: 'file-code',\n js: 'file-code',\n json: 'file-code',\n mp3: 'file-audio',\n mp4: 'file-video',\n pdf: 'file',\n png: 'file-image',\n svg: 'file-image',\n txt: 'file-text',\n xml: 'file-code',\n jpeg: 'file-image',\n jpg: 'file-image',\n zip: 'file',\n doc: 'file-text',\n docx: 'file-text',\n xls: 'file',\n xlsx: 'file',\n ppt: 'file',\n csv: 'file',\n rtf: 'file-text',\n};\n\n/**\n * Internal sub-component used by `eds-file-upload` to render individual file previews.\n * Displays file information (name, size, type) with optional image preview or icon, and a remove button.\n */\n@Component({\n selector: 'eds-file-upload-preview',\n templateUrl: './eds-file-upload-preview.html',\n styleUrl: './eds-file-upload-preview.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n ...EDS_ICON,\n ...EDS_ICON_BUTTON,\n EdsFilesizePipe,\n ],\n host: {\n class: 'eds-file-upload-preview',\n '[attr.data-e2e]': '\"eds-file-upload-preview\"',\n },\n})\nexport class EdsFileUploadPreview implements OnInit {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly file = input<Blob | EdsUploadedFile | any>(undefined);\n readonly index = input<number>(undefined);\n readonly uploadedFileTemplate = input<TemplateRef<unknown>>(undefined);\n\n readonly hasPreview = input(true, { transform: booleanAttribute });\n readonly hasPreviewAsImage = input(true, { transform: booleanAttribute });\n readonly hasPreviewAsIcon = input(false, { transform: booleanAttribute });\n readonly isItemsClickable = input(false, { transform: booleanAttribute });\n readonly isFileObject = input(false, { transform: booleanAttribute });\n readonly isFilenameDisplayed = input(true, { transform: booleanAttribute });\n readonly isFilesizeDisplayed = input(true, { transform: booleanAttribute });\n readonly isFiletypeDisplayed = input(true, { transform: booleanAttribute });\n\n readonly removeFromList = output<number>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly itemClick = output<Blob | EdsUploadedFile | any>();\n\n protected url: string;\n protected icon: string;\n protected fileExtension: string;\n protected previewData: { image: boolean; display: string };\n protected isLoading = false;\n protected typeFromFileExtension: string = null;\n\n protected fileName = computed(() => this.file()?.name ?? '');\n protected fileSize = computed(() => this.file()?.size ?? 0);\n protected fileType = computed(() => {\n const f = this.file();\n if (f?.type?.length > 0) {\n return f.type;\n }\n return this.typeFromFileExtension ?? '';\n });\n\n private cd = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n const file = this.file();\n if (file instanceof Blob) {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file as Blob);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reader.onload = (event: any): void => {\n this.url = event.target.result;\n this.fileExtension = this.getFileExtension(this.file().name);\n this.icon = this.getIconForExtension(this.fileExtension);\n\n if (this.fileExtension === 'msg') {\n this.typeFromFileExtension = 'application/vnd.ms-outlook';\n }\n\n const blob = new Blob([reader.result], { type: this.file().type });\n const imageUrl = URL.createObjectURL(blob);\n\n this.previewData = this.getPreviewForMime(this.fileExtension, imageUrl);\n this.cd.detectChanges();\n };\n reader.onloadstart = (): void => {\n this.isLoading = true;\n this.cd.detectChanges();\n };\n reader.onloadend = (): void => {\n this.isLoading = false;\n this.cd.detectChanges();\n };\n } else {\n this.url = (file as EdsUploadedFile).url;\n this.fileExtension = this.getFileExtension(file.name);\n this.icon = this.getIconForExtension(this.fileExtension);\n this.previewData = this.getPreviewForMime(this.fileExtension, this.url);\n this.cd.detectChanges();\n }\n }\n\n protected onRemoveFromList(): void {\n this.removeFromList.emit(this.index());\n }\n\n protected onItemClick(e: Event): void {\n this.itemClick.emit(this.file());\n e.preventDefault();\n }\n\n private getFileExtension(fileName: string): string {\n const ext = fileName?.split('.') ?? [];\n return ext[ext.length - 1] ?? '';\n }\n\n private getPreviewForMime(fileExtension: string, imgUrl: string): { image: boolean; display: string } {\n const f = fileExtension.toLowerCase();\n const isImage = f === 'jpeg' || f === 'jpg' || f === 'png' || f === 'gif';\n const display = isImage ? imgUrl : this.getIconForExtension(f);\n return { image: isImage, display };\n }\n\n private getIconForExtension(fileExtension: string): string {\n const f = fileExtension.toLowerCase();\n return ICON_MAP[f] ?? 'file';\n }\n}\n","@if (uploadedFileTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"uploadedFileTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: { file: { id: file().id, name: file().name, url: file().url || previewData?.display, size: file().size, type: file().type }, index: index(), isFileObject: isFileObject() } }\" />\n} @else {\n <div class=\"eds-file-upload-preview__content\">\n <div class=\"eds-file-upload-preview__left\">\n @if (hasPreview() && hasPreviewAsImage() && !hasPreviewAsIcon()) {\n <div class=\"eds-file-upload-preview__image\">\n @if (url && previewData?.image) {\n <img [src]=\"previewData.display\" alt=\"File preview image\" />\n }\n @if (previewData && !previewData.image) {\n <eds-icon [icon]=\"previewData.display\" />\n }\n @if (isLoading) {\n <div class=\"eds-file-upload-preview__loading\">\n <eds-icon icon=\"spinner:core\" />\n </div>\n }\n </div>\n }\n @if (hasPreview() && hasPreviewAsIcon()) {\n <div class=\"eds-file-upload-preview__icon\">\n <eds-icon [icon]=\"icon\" />\n </div>\n }\n @if (isFilenameDisplayed()) {\n <div class=\"eds-file-upload-preview__filename\">\n @if (!isItemsClickable()) {\n {{ fileName() }}\n }\n @if (isItemsClickable()) {\n <a href=\"#\" (click)=\"onItemClick($event)\" class=\"eds-file-upload-preview__link\">{{ fileName() }}</a>\n }\n </div>\n }\n </div>\n <div class=\"eds-file-upload-preview__right\">\n @if (isFilesizeDisplayed()) {\n <span class=\"eds-file-upload-preview__size\">{{ fileSize() | edsFilesize }}</span>\n }\n @if (isFiletypeDisplayed() && fileType()) {\n <span class=\"eds-file-upload-preview__type\">{{ fileType() }}</span>\n }\n <button edsIconButton\n color=\"critical\"\n icon=\"trash:core\"\n [ariaLabel]=\"'Remove ' + fileName() + ' from the list'\"\n (buttonClick)=\"onRemoveFromList()\">\n </button>\n </div>\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener,\n TemplateRef,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n signal,\n viewChildren,\n contentChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_FEEDBACK_MESSAGE } from '@eui/eds/eds-feedback-message';\nimport { EDS_PROGRESS_BAR } from '@eui/eds/eds-progress-bar';\n\nimport { EdsUploadedFile } from './eds-file-upload.model';\nimport { EdsFileUploadPreview } from './eds-file-upload-preview';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\n/**\n * File upload component supporting both traditional file selection and drag-and-drop functionality.\n * Implements ControlValueAccessor for integration with Angular reactive and template-driven forms.\n *\n * Provides file preview, upload progress tracking, file type filtering, and multiple file management.\n *\n * @usageNotes\n * ### Basic file upload\n * ```html\n * <eds-file-upload\n * isMultiple\n * accept=\".pdf,.doc,.docx\"\n * [maxFiles]=\"5\">\n * </eds-file-upload>\n * ```\n *\n * ### With form control\n * ```html\n * <eds-file-upload\n * [formControl]=\"fileControl\"\n * hasDragArea\n * [progress]=\"uploadProgress\">\n * </eds-file-upload>\n * ```\n *\n * ### Accessibility\n * - Native file input is keyboard accessible\n * - Drag-and-drop area has appropriate aria-label\n * - File list items are navigable and removable via keyboard\n */\n@Component({\n selector: 'eds-file-upload',\n templateUrl: './eds-file-upload.html',\n styleUrl: './eds-file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: EdsFileUpload,\n multi: true,\n },\n ],\n imports: [\n NgTemplateOutlet,\n ...EDS_BUTTON,\n ...EDS_FEEDBACK_MESSAGE,\n ...EDS_PROGRESS_BAR,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsFileUpload implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-file-upload'\n */\n readonly e2eAttr = input('eds-file-upload');\n\n /**\n * Current upload progress percentage (0–100).\n * Only effective when hasProgressBar is true.\n * @default 0\n */\n readonly progress = input(0);\n\n /**\n * Comma-separated list of allowed file extensions or MIME types.\n * Files not matching the specified types will be rejected.\n * Use '*' to allow all file types.\n * @default '*'\n */\n readonly accept = input('*');\n\n /**\n * Maximum number of files that can be uploaded simultaneously.\n * When limit is reached, additional file selection is disabled.\n * @default undefined (unlimited)\n */\n readonly maxFiles = input<number>(undefined);\n\n /**\n * Enables selection of multiple files in a single upload operation.\n * @default true\n */\n readonly isMultiple = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a progress bar indicating upload completion percentage.\n * @default true\n */\n readonly hasProgressBar = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a visual preview for each file in the upload list.\n * @default true\n */\n readonly hasPreview = input(true, { transform: booleanAttribute });\n\n /**\n * Renders file previews as thumbnail images for supported image file types.\n * @default true\n */\n readonly hasPreviewAsImage = input(true, { transform: booleanAttribute });\n\n /**\n * Renders file previews as file format icons instead of image thumbnails.\n * @default false\n */\n readonly hasPreviewAsIcon = input(false, { transform: booleanAttribute });\n\n /**\n * Shows the total combined size of all files in the upload queue.\n * @default true\n */\n readonly hasTotalSizeDisplayed = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a button to clear all files from the upload queue.\n * Only visible when isMultiple is true and files are present.\n * @default true\n */\n readonly hasResetButton = input(true, { transform: booleanAttribute });\n\n /**\n * Enables drag-and-drop functionality for file selection.\n * Displays a drop zone area where users can drag files from their file system.\n * @default false\n */\n readonly hasDragArea = input(false, { transform: booleanAttribute });\n\n /**\n * Makes files in the upload list clickable, emitting itemClick events.\n * @default false\n */\n readonly isItemsClickable = input(false, { transform: booleanAttribute });\n\n /**\n * Label text for the browse button.\n * @default 'Choose file'\n */\n readonly browseLabel = input('Choose file');\n\n /**\n * Label text for the drag area hint.\n * @default 'or drag and drop file here'\n */\n readonly dragLabel = input('or drag and drop file here');\n\n /**\n * Label text for the reset button.\n * @default 'Reset list'\n */\n readonly resetLabel = input('Reset list');\n\n /**\n * Label text shown for total size.\n * @default 'total size'\n */\n readonly totalSizeLabel = input('total size');\n\n /**\n * Error message shown for rejected file extensions.\n * @default 'File extension not allowed'\n */\n readonly rejectedFileLabel = input('File extension not allowed');\n\n /**\n * Emitted when files are dropped into the drag-and-drop area.\n */\n readonly fileDrop = output();\n\n /**\n * Emitted when a file in the upload list is clicked (when isItemsClickable is true).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly itemClick = output<Blob | EdsUploadedFile | any>();\n\n /** Internal state for currently selected files. */\n protected internalFiles = signal<File[]>([]);\n\n /** Internal state for pre-existing uploaded files (from writeValue). */\n protected internalUploadedFiles = signal<EdsUploadedFile[]>([]);\n\n /** Internal progress (synced from input via effect). */\n protected internalProgress = signal(0);\n\n /** Drag state indicator. */\n protected dragEntered = signal(false);\n\n /** Rejected file message. */\n protected rejectedFileMessage = signal<string | null>(null);\n\n /** Random id for unique file input element. */\n protected readonly randomNumberId = Math.floor(Math.random() * 10000);\n\n /** References to all file input elements. */\n protected readonly fileInputs = viewChildren<ElementRef<HTMLInputElement>>('input');\n\n /** Custom templates provided by content projection. */\n protected uploadedFileTemplate: TemplateRef<unknown>;\n protected browseButtonTemplate: TemplateRef<unknown>;\n protected resetButtonTemplate: TemplateRef<unknown>;\n protected progressBarTemplate: TemplateRef<unknown>;\n\n /** Computed total file size. */\n protected filesTotalSize = computed(() => {\n return this.internalFiles().reduce((total, f) => total + f.size, 0);\n });\n\n /** Whether to show the reset button. */\n protected showResetBtn = computed(() => {\n return this.hasResetButton() && this.isMultiple() &&\n (this.internalFiles().length > 0 || this.internalUploadedFiles().length > 0);\n });\n\n /** Whether the drop area is disabled. */\n protected isDropAreaDisabled = computed(() => {\n const totalFiles = this.internalUploadedFiles().length + this.internalFiles().length;\n return (!this.isMultiple() && this.internalFiles().length === 1) || totalFiles === this.maxFiles();\n });\n\n /** Effective preview-as-image flag. */\n protected effectiveHasPreviewAsImage = computed(() => {\n if (this.hasPreviewAsIcon()) return false;\n return this.hasPreviewAsImage();\n });\n\n hostClasses = computed(() => {\n return 'eds-file-upload';\n });\n\n constructor() {\n effect(() => {\n this.internalProgress.set(this.progress());\n });\n }\n\n /**\n * Host listener for file input change events.\n */\n @HostListener('change', ['$any($event.target).files'])\n emitFiles(fileList: FileList): void {\n let i = this.internalUploadedFiles().length + this.internalFiles().length;\n const rejectedFiles: string[] = [];\n const newFiles: File[] = [...this.internalFiles()];\n\n for (const property in fileList) {\n const maxFiles = this.maxFiles();\n if (fileList[property] && typeof fileList[property] === 'object' && (!maxFiles || i < maxFiles)) {\n const fileName = fileList[property].name.split('.');\n const fileExtension = fileName[fileName.length - 1];\n\n if (this.accept().indexOf(fileExtension.toLowerCase()) !== -1 || this.accept() === '*') {\n newFiles.push(fileList[property]);\n } else {\n rejectedFiles.push(fileList[property].name);\n }\n\n i++;\n }\n }\n\n this.internalFiles.set(newFiles);\n this.rejectedFileMessage.set(rejectedFiles.length ? rejectedFiles.join(', ') : null);\n\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n\n const fileInputs = this.fileInputs();\n if (fileInputs?.length) {\n fileInputs.at(0)!.nativeElement.value = '';\n if (fileInputs.length > 1) {\n fileInputs.at(-1)!.nativeElement.value = '';\n }\n }\n\n this.dragEntered.set(false);\n this.fileDrop.emit();\n }\n\n // --- ControlValueAccessor ---\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(value: any): void {\n this.internalUploadedFiles.set(value || []);\n this.internalFiles.set([]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n protected onDragEnter(): void {\n if (!this.isDropAreaDisabled()) {\n this.dragEntered.set(true);\n }\n }\n\n protected onDragLeave(): void {\n this.dragEntered.set(false);\n }\n\n protected removeFromList(index: number): void {\n this.internalFiles.update(files => files.filter((_, i) => i !== index));\n if (this.internalFiles().length === 0) {\n this.internalProgress.set(0);\n }\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n }\n\n protected removeFromUploadedList(index: number): void {\n this.internalUploadedFiles.update(files => files.filter((_, i) => i !== index));\n if (this.internalFiles().length === 0) {\n this.internalProgress.set(0);\n }\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n }\n\n protected resetList(): void {\n this.internalFiles.set([]);\n this.internalUploadedFiles.set([]);\n this.internalProgress.set(0);\n this._onChange([]);\n }\n\n protected openBrowseWindow(): void {\n this.fileInputs()?.at(0)?.nativeElement.click();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected onItemClick(e: Blob | EdsUploadedFile | any): void {\n this.itemClick.emit(e);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onChange: (value: any) => void = () => {/* noop */};\n private _onTouched: () => void = () => {/* noop */};\n}\n","@if (hasDragArea()) {\n <div\n class=\"eds-file-upload__drop-area\"\n [class.eds-file-upload__drop-area--active]=\"dragEntered()\"\n [class.eds-file-upload__drop-area--disabled]=\"isDropAreaDisabled()\">\n <button edsButton edsButtonSecondary edsSizeS type=\"button\" class=\"eds-file-upload__browse-btn\">{{ browseLabel() }}</button>\n <span class=\"eds-file-upload__drag-hint\">{{ dragLabel() }}</span>\n <input\n #input\n class=\"eds-file-upload__file-input\"\n [attr.aria-label]=\"browseLabel() + ' ' + dragLabel()\"\n type=\"file\"\n [accept]=\"accept()\"\n [attr.disabled]=\"isDropAreaDisabled() ? 'disabled' : null\"\n [multiple]=\"isMultiple()\"\n (dragenter)=\"onDragEnter()\"\n (dragleave)=\"onDragLeave()\" />\n </div>\n} @else {\n <div class=\"eds-file-upload__simple-input\">\n <label [attr.for]=\"'eds-file-' + randomNumberId\">\n <button edsButton edsButtonSecondary edsSizeS type=\"button\" (click)=\"openBrowseWindow()\">{{ browseLabel() }}</button>\n </label>\n @if (isMultiple()) {\n <input\n #input\n [attr.aria-label]=\"'Choose multiple files'\"\n class=\"eds-file-upload__hidden-input\"\n [id]=\"'eds-file-' + randomNumberId\"\n type=\"file\"\n [accept]=\"accept()\"\n multiple />\n } @else {\n <input\n #input\n [attr.aria-label]=\"'Choose a single file'\"\n class=\"eds-file-upload__hidden-input\"\n [id]=\"'eds-file-' + randomNumberId\"\n type=\"file\"\n [accept]=\"accept()\" />\n }\n </div>\n}\n\n@if (hasProgressBar() && internalProgress() > 0) {\n <eds-progress-bar\n class=\"eds-file-upload__progress\"\n [progress]=\"internalProgress()\"\n [label]=\"internalProgress() + '%'\" />\n}\n\n@if (rejectedFileMessage()) {\n <eds-feedback-message edsCritical class=\"eds-file-upload__error\">\n {{ rejectedFileLabel() }}: {{ rejectedFileMessage() }}\n </eds-feedback-message>\n}\n\n@for (uploadedFile of internalUploadedFiles(); let i = $index; track i) {\n <eds-file-upload-preview\n [isItemsClickable]=\"isItemsClickable()\"\n [index]=\"i\"\n [file]=\"uploadedFile\"\n [hasPreview]=\"hasPreview()\"\n [hasPreviewAsImage]=\"effectiveHasPreviewAsImage()\"\n [hasPreviewAsIcon]=\"hasPreviewAsIcon()\"\n [uploadedFileTemplate]=\"uploadedFileTemplate\"\n (itemClick)=\"onItemClick($event)\"\n (removeFromList)=\"removeFromUploadedList($event)\" />\n}\n\n@for (file of internalFiles(); let i = $index; track i) {\n <eds-file-upload-preview\n isFileObject\n [isItemsClickable]=\"isItemsClickable()\"\n [index]=\"i\"\n [file]=\"file\"\n [hasPreview]=\"hasPreview()\"\n [hasPreviewAsImage]=\"effectiveHasPreviewAsImage()\"\n [hasPreviewAsIcon]=\"hasPreviewAsIcon()\"\n [uploadedFileTemplate]=\"uploadedFileTemplate\"\n (itemClick)=\"onItemClick($event)\"\n (removeFromList)=\"removeFromList($event)\" />\n}\n\n@if (filesTotalSize() && hasTotalSizeDisplayed()) {\n <div class=\"eds-file-upload__total-size\">\n {{ filesTotalSize() | edsFilesize }} {{ totalSizeLabel() }}\n </div>\n}\n\n<div class=\"eds-u-flex eds-u-flex-gap-s\">\n <ng-content />\n \n @if (showResetBtn()) {\n <button edsButton edsButtonSecondary edsSizeS type=\"button\" (click)=\"resetList()\">\n {{ resetLabel() }}\n </button>\n }\n</div>\n\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpEventType, HttpResponse } from '@angular/common/http';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { pipe, Observable, UnaryFunction, MonoTypeOperatorFunction } from 'rxjs';\n\n/**\n * Service providing utility methods for file upload operations.\n * Handles sending form data to a backend, tracking upload progress, and extracting response bodies.\n *\n * @usageNotes\n * ```ts\n * this.fileUploadUtils.sendData(formValue, '/api/upload').pipe(\n * this.fileUploadUtils.uploadProgress((progress) => console.log(progress)),\n * this.fileUploadUtils.toResponseBody(),\n * ).subscribe(response => console.log(response));\n * ```\n */\n@Injectable()\nexport class EdsFileUploadUtils {\n private httpClient = inject(HttpClient);\n\n /**\n * Formats data as FormData and sends it to the specified endpoint.\n *\n * @param data - Data to send (will be serialized to FormData).\n * @param apiEndpoint - The URL endpoint to POST to.\n * @returns Observable of HttpEvents for tracking progress.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public sendData(data: any, apiEndpoint: string): Observable<any> {\n return this.httpClient.post(apiEndpoint, this.toFormData(data), {\n reportProgress: true,\n observe: 'events',\n });\n }\n\n /**\n * RxJS operator that emits upload progress via a callback function.\n *\n * @param cb - Callback receiving progress percentage (0–100).\n * @returns MonoTypeOperatorFunction that passes through events while reporting progress.\n */\n public uploadProgress<T>(cb: (progress: number) => void): MonoTypeOperatorFunction<HttpEvent<T>> {\n return tap((event: HttpEvent<T>) => {\n if (event.type === HttpEventType.UploadProgress) {\n cb(Math.round((100 * event.loaded) / event.total));\n }\n });\n }\n\n /**\n * RxJS operator that extracts the response body from HttpEvents.\n *\n * @returns UnaryFunction that filters to only HttpResponse events and maps to the body.\n */\n public toResponseBody<T>(): UnaryFunction<Observable<HttpEvent<T>>, Observable<T>> {\n return pipe(\n filter((event: HttpEvent<T>) => event.type === HttpEventType.Response),\n map((res: HttpResponse<T>) => res.body),\n );\n }\n\n /**\n * Returns the icon name for a given file extension.\n *\n * @param fileExtension - The file extension (without dot).\n * @returns Icon name string.\n */\n public getIconForExtension(fileExtension: string): string {\n const iconConfig: Record<string, string> = {\n avi: 'file-video',\n html: 'file-code',\n htm: 'file-code',\n js: 'file-code',\n json: 'file-code',\n mp3: 'file-audio',\n mp4: 'file-video',\n pdf: 'file',\n png: 'file-image',\n svg: 'file-image',\n txt: 'file-text',\n xml: 'file-code',\n jpeg: 'file-image',\n jpg: 'file-image',\n zip: 'file',\n doc: 'file-text',\n docx: 'file-text',\n xls: 'file',\n xlsx: 'file',\n ppt: 'file',\n csv: 'file',\n rtf: 'file-text',\n };\n\n const f = fileExtension.toLowerCase();\n return iconConfig[f] ?? 'file';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private toFormData(formValue: any): FormData {\n const formData = new FormData();\n\n for (const key of Object.keys(formValue)) {\n if (Array.isArray(formValue[key])) {\n let fileIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formValue[key].forEach((value: any) => {\n if (value instanceof File) {\n formData.append(key + fileIndex, value);\n fileIndex++;\n }\n });\n\n const a: unknown[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formValue[key].forEach((value: any): void => {\n a.push(value);\n });\n\n formData.append(key, JSON.stringify(a));\n } else {\n if (typeof formValue[key] === 'string') {\n formData.set(key, formValue[key]);\n } else {\n formData.set(key, JSON.stringify(formValue[key]));\n }\n }\n }\n\n return formData;\n }\n}\n","export type MimeType =\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp'\n | 'image/flif'\n | 'image/x-xcf'\n | 'image/x-canon-cr2'\n | 'image/x-canon-cr3'\n | 'image/tiff'\n | 'image/bmp'\n | 'image/icns'\n | 'image/vnd.ms-photo'\n | 'image/vnd.adobe.photoshop'\n | 'application/x-indesign'\n | 'application/epub+zip'\n | 'application/x-xpinstall'\n | 'application/vnd.oasis.opendocument.text'\n | 'application/vnd.oasis.opendocument.spreadsheet'\n | 'application/vnd.oasis.opendocument.presentation'\n | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n | 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n | 'application/zip'\n | 'application/json'\n | 'application/x-tar'\n | 'application/x-rar-compressed'\n | 'application/gzip'\n | 'application/x-bzip2'\n | 'application/x-7z-compressed'\n | 'application/x-apple-diskimage'\n | 'video/mp4'\n | 'audio/midi'\n | 'video/x-matroska'\n | 'video/webm'\n | 'video/quicktime'\n | 'video/vnd.avi'\n | 'audio/vnd.wave'\n | 'audio/qcelp'\n | 'audio/x-ms-asf'\n | 'video/x-ms-asf'\n | 'application/vnd.ms-asf'\n | 'video/mpeg'\n | 'video/3gpp'\n | 'audio/mpeg'\n | 'audio/mp4'\n | 'audio/opus'\n | 'video/ogg'\n | 'audio/ogg'\n | 'application/ogg'\n | 'audio/x-flac'\n | 'audio/ape'\n | 'audio/wavpack'\n | 'audio/amr'\n | 'application/pdf'\n | 'application/x-elf'\n | 'application/x-msdownload'\n | 'application/x-shockwave-flash'\n | 'application/rtf'\n | 'application/wasm'\n | 'font/woff'\n | 'font/woff2'\n | 'application/vnd.ms-fontobject'\n | 'font/ttf'\n | 'font/otf'\n | 'image/x-icon'\n | 'video/x-flv'\n | 'application/postscript'\n | 'application/eps'\n | 'application/x-xz'\n | 'application/x-sqlite3'\n | 'application/x-nintendo-nes-rom'\n | 'application/x-google-chrome-extension'\n | 'application/vnd.ms-cab-compressed'\n | 'application/x-deb'\n | 'application/x-unix-archive'\n | 'application/x-rpm'\n | 'application/x-compress'\n | 'application/x-lzip'\n | 'application/x-cfb'\n | 'application/x-mie'\n | 'application/x-apache-arrow'\n | 'application/mxf'\n | 'video/mp2t'\n | 'application/x-blender'\n | 'image/bpg'\n | 'image/j2c'\n | 'image/jp2'\n | 'image/jpx'\n | 'image/jpm'\n | 'image/mj2'\n | 'audio/aiff'\n | 'application/xml'\n | 'application/x-mobipocket-ebook'\n | 'image/heif'\n | 'image/heif-sequence'\n | 'image/heic'\n | 'image/heic-sequence'\n | 'image/ktx'\n | 'application/dicom'\n | 'audio/x-musepack'\n | 'text/calendar'\n | 'text/vcard'\n | 'model/gltf-binary'\n | 'application/vnd.tcpdump.pcap'\n | 'audio/x-voc'\n | 'audio/vnd.dolby.dd-raw'\n | 'audio/x-m4a'\n | 'image/apng'\n | 'image/x-olympus-orf'\n | 'image/x-sony-arw'\n | 'image/x-adobe-dng'\n | 'image/x-nikon-nef'\n | 'image/x-panasonic-rw2'\n | 'image/x-fujifilm-raf'\n | 'video/x-m4v'\n | 'video/3gpp2'\n | 'application/x-esri-shape'\n | 'audio/aac'\n | 'audio/x-it'\n | 'audio/x-s3m'\n | 'audio/x-xm'\n | 'video/MP1S'\n | 'video/MP2P'\n | 'application/vnd.sketchup.skp'\n | 'image/avif'\n | 'application/x-lzh-compressed'\n | 'application/pgp-encrypted'\n | 'application/x-asar'\n | 'model/stl'\n | 'application/vnd.ms-htmlhelp'\n | 'model/3mf'\n | 'image/jxl'\n | 'application/zstd'\n | 'image/jls'\n | 'application/vnd.ms-outlook'\n | 'image/vnd.dwg'\n | 'application/x-parquet'\n | 'application/java-vm'\n | 'application/x-arj'\n | 'application/x-cpio'\n | 'application/x-ace-compressed'\n | 'application/avro'\n | 'application/vnd.iccprofile';\n\nexport const getMimeType = (header: Uint8Array): MimeType => {\n const hex = uint8ArrayToHexString(header);\n\n if (hex.startsWith('ffd8ff')) return 'image/jpeg';\n if (hex.startsWith('89504e47')) return 'image/png';\n if (hex.startsWith('464c4946')) return 'image/flif';\n if (hex.startsWith('67696d7020786366')) return 'image/x-xcf';\n if (hex.startsWith('49492a00')) return 'image/tiff';\n if (hex.startsWith('424d')) return 'image/bmp';\n if (hex.startsWith('69636e73')) return 'image/icns';\n if (hex.startsWith('49491a0000004845415050')) return 'image/vnd.ms-photo';\n if (hex.startsWith('38425053')) return 'image/vnd.adobe.photoshop';\n if (hex.startsWith('504b0304')) return identifyZipBasedFormat(header);\n if (hex.startsWith('7573746172')) return 'application/x-tar';\n if (hex.startsWith('526172211a0700')) return 'application/x-rar-compressed';\n if (hex.startsWith('1f8b08')) return 'application/gzip';\n if (hex.startsWith('425a68')) return 'application/x-bzip2';\n if (hex.startsWith('377abcaf271c')) return 'application/x-7z-compressed';\n if (hex.startsWith('00000020667479706d70')) return 'video/mp4';\n if (hex.startsWith('4d546864')) return 'audio/midi';\n if (hex.startsWith('1a45dfa3')) return 'video/webm';\n if (hex.startsWith('255044462d312e')) return 'application/pdf';\n if (hex.startsWith('7f454c46')) return 'application/x-elf';\n if (hex.startsWith('4d5a')) return 'application/x-msdownload';\n if (hex.startsWith('7b5c72746631')) return 'application/rtf';\n if (hex.startsWith('0061736d')) return 'application/wasm';\n if (hex.startsWith('774f4646')) return 'font/woff';\n if (hex.startsWith('774f4632')) return 'font/woff2';\n if (hex.startsWith('464c560105')) return 'video/x-flv';\n if (hex.startsWith('25215053')) return 'application/postscript';\n if (hex.startsWith('fd377a585a00')) return 'application/x-xz';\n if (hex.startsWith('53514c69746520666f726d6174203300')) return 'application/x-sqlite3';\n if (hex.startsWith('d0cf11e0a1b11ae1')) return 'application/x-cfb';\n if (hex.startsWith('4f676753')) return 'audio/ogg';\n if (hex.startsWith('664c6143')) return 'audio/x-flac';\n if (hex.startsWith('494433')) return 'audio/mpeg';\n if (hex.startsWith('3c3f786d6c20')) return 'application/xml';\n\n return null;\n};\n\nconst identifyZipBasedFormat = (data: Uint8Array): MimeType => {\n try {\n const fileEntries = extractZipFileList(data);\n\n if (fileEntries.includes('META-INF/container.xml') || fileEntries.includes('mimetype')) {\n return 'application/epub+zip';\n }\n\n if (fileEntries.includes('[Content_Types].xml')) {\n if (fileEntries.includes('ppt/presentation.xml')) return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n if (fileEntries.includes('xl/workbook.xml')) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (fileEntries.includes('word/document.xml')) return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n }\n\n return 'application/zip';\n } catch {\n return 'application/zip';\n }\n};\n\nconst extractZipFileList = (data: Uint8Array): string[] => {\n const files: string[] = [];\n let offset = 0;\n\n while (offset < data.length - 4) {\n if (data[offset] === 0x50 && data[offset + 1] === 0x4b &&\n data[offset + 2] === 0x03 && data[offset + 3] === 0x04) {\n\n const filenameLength = data[offset + 26] | (data[offset + 27] << 8);\n const extraFieldLength = data[offset + 28] | (data[offset + 29] << 8);\n\n if (filenameLength > 0 && offset + 30 + filenameLength <= data.length) {\n const filename = new TextDecoder().decode(data.slice(offset + 30, offset + 30 + filenameLength));\n files.push(filename);\n }\n\n offset += 30 + filenameLength + extraFieldLength;\n } else {\n offset++;\n }\n }\n\n return files;\n};\n\nconst uint8ArrayToHexString = (uint8Array: Uint8Array): string => {\n return Array.prototype.map.call(uint8Array, (byte: number) => ('00' + byte.toString(16)).slice(-2)).join('');\n};\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { Observable, of, zip } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { getMimeType, MimeType } from './eds-file-upload.mime-types';\n\n/**\n * Validator that requires the maximum number of files that can be uploaded.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxFilesValidator(3));\n * console.log(fileUpload.errors); // { maxFiles: 3 }\n * ```\n *\n * @param maxFiles - The maximum number of files allowed.\n * @returns A validator function that returns `{ maxFiles }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxFilesValidator =\n (maxFiles: number): ValidatorFn =>\n (control: AbstractControl): { maxFiles: number } | null =>\n control.value && control.value.length > maxFiles ? { maxFiles } : null;\n\n/**\n * Validator that checks the total combined size (in bytes) of the selected files.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxSizeValidator(300000));\n * console.log(fileUpload.errors); // { maxSize: 300000 }\n * ```\n *\n * @param maxSize - Maximum allowed total size in bytes.\n * @returns A validator function that returns `{ maxSize }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxSizeValidator =\n (maxSize: number): ValidatorFn =>\n (control: AbstractControl): { maxSize: number } | null => {\n let totalSize = 0;\n if (control.value) {\n control.value.forEach((file: File) => {\n totalSize += file.size;\n });\n }\n\n return control.value && totalSize > maxSize ? { maxSize } : null;\n };\n\n/**\n * Validator that checks the maximum size per file (in bytes).\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxFileSizeValidator(300000));\n * console.log(fileUpload.errors); // { maxFileSize: 300000, indexes: [0, 2] }\n * ```\n *\n * @param maxFileSize - Maximum allowed size per file in bytes.\n * @returns A validator function that returns `{ maxFileSize, indexes }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxFileSizeValidator =\n (maxFileSize: number): ValidatorFn =>\n (control: AbstractControl): { maxFileSize: number; indexes: number[] } | null => {\n const fileIndexes: number[] = [];\n let maxFileExceeded = false;\n if (control.value) {\n control.value.forEach((file: File, index: number) => {\n if (file.size > maxFileSize) {\n fileIndexes.push(index);\n maxFileExceeded = true;\n }\n });\n }\n\n return control.value && maxFileExceeded ? { maxFileSize, indexes: fileIndexes } : null;\n };\n\n/**\n * Validator that checks file extensions against a list of allowed MIME types.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMimeTypeExtensionValidator(['image/jpeg']));\n * console.log(fileUpload.errors); // { invalidFileExtension: ['file.png'] }\n * ```\n *\n * @param mimeTypes - The list of allowed MIME types.\n * @returns A validator function that returns `{ invalidFileExtension }` if the validation fails, otherwise `null`.\n */\nexport const edsMimeTypeExtensionValidator =\n (mimeTypes: string[]): ValidatorFn =>\n (control: AbstractControl): { invalidFileExtension: string[] } | null => {\n const invalidFileExtension: string[] = [];\n if (control.value) {\n control.value.forEach((file: File) => {\n if (mimeTypes.indexOf(file.type) === -1) {\n invalidFileExtension.push(file.name);\n }\n });\n }\n\n return control.value && invalidFileExtension.length > 0 ? { invalidFileExtension } : null;\n };\n\n/**\n * Async validator that checks MIME types by reading file header bytes.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, { asyncValidators: [edsAsyncMimeTypeValidator(['image/jpeg'])] });\n * console.log(fileUpload.errors); // { invalidMimeFileType: [{ 'file.png': 'image/png' }] }\n * ```\n *\n * @param mimeTypes - The list of allowed MIME types.\n * @returns An async validator function that returns `{ invalidMimeFileType }` if the validation fails, otherwise `null`.\n */\nexport const edsAsyncMimeTypeValidator =\n (mimeTypes: MimeType[]): AsyncValidatorFn =>\n (control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {\n if (control.value) {\n const fileErrorObservables: Observable<ValidationErrors | null>[] = [];\n control.value.forEach((file: File) => {\n fileErrorObservables.push(validateFileMimeType(file, mimeTypes));\n });\n return zip(...fileErrorObservables).pipe(\n map((fileErrors) => {\n const errors = fileErrors.filter((fileError) => fileError !== null);\n if (errors.length === 0) {\n return null;\n }\n return { invalidMimeFileType: errors };\n }),\n );\n }\n return of(null);\n };\n\nconst validateFileMimeType = (file: File, mimeTypes: MimeType[]): Observable<Record<string, MimeType> | null> => {\n return new Observable<Record<string, MimeType> | null>((subscriber) => {\n const reader = new FileReader();\n reader.onloadend = (): void => {\n const buffer = reader.result as ArrayBuffer;\n const headerBytes = new Uint8Array(buffer).slice(0, Math.min(1024, buffer.byteLength));\n const mime = getMimeType(headerBytes);\n if (mimeTypes.includes(mime)) {\n subscriber.next(null);\n } else {\n subscriber.next({ [file.name]: mime });\n }\n subscriber.complete();\n };\n reader.readAsArrayBuffer(file);\n });\n};\n","import { EdsFileUpload } from './eds-file-upload';\nimport { EdsFileUploadPreview } from './eds-file-upload-preview';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\nexport {\n EdsFileUpload,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n};\n\nexport * from './eds-file-upload.model';\nexport * from './eds-file-upload.utils';\nexport * from './eds-file-upload.validators';\nexport * from './eds-file-upload.mime-types';\n\n/** Convenience array for importing all eds-file-upload components. */\nexport const EDS_FILE_UPLOAD = [\n EdsFileUpload,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"eui-eds-eds-file-upload.mjs","sources":["../../eds-file-upload/eds-filesize.pipe.ts","../../eds-file-upload/eds-file-upload-preview.ts","../../eds-file-upload/eds-file-upload-preview.html","../../eds-file-upload/eds-file-upload.ts","../../eds-file-upload/eds-file-upload.html","../../eds-file-upload/eds-file-upload.utils.ts","../../eds-file-upload/eds-file-upload.mime-types.ts","../../eds-file-upload/eds-file-upload.validators.ts","../../eds-file-upload/index.ts","../../eds-file-upload/eui-eds-eds-file-upload.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Transforms a file size in bytes into a human-readable format (e.g., KB, MB, GB).\n *\n * @example\n * ```html\n * {{ 1024 | edsFilesize }} <!-- Outputs: \"1.00 KB\" -->\n * {{ 1048576 | edsFilesize:1 }} <!-- Outputs: \"1.0 MB\" -->\n * ```\n */\n@Pipe({\n name: 'edsFilesize',\n})\nexport class EdsFilesizePipe implements PipeTransform {\n private units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n transform(bytes = 0, precision = 2): string {\n if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) {\n return '?';\n }\n\n let unit = 0;\n\n while (bytes >= 1024) {\n bytes /= 1024;\n unit++;\n }\n\n return bytes.toFixed(+precision) + ' ' + this.units[unit];\n }\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n OnInit,\n TemplateRef,\n booleanAttribute,\n inject,\n input,\n output,\n computed,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\n\nimport { EdsUploadedFile } from './eds-file-upload.model';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\n/** Map of file extensions to EDS icon names. */\nconst ICON_MAP: Record<string, string> = {\n avi: 'file-video',\n html: 'file-code',\n htm: 'file-code',\n js: 'file-code',\n json: 'file-code',\n mp3: 'file-audio',\n mp4: 'file-video',\n pdf: 'file',\n png: 'file-image',\n svg: 'file-image',\n txt: 'file-text',\n xml: 'file-code',\n jpeg: 'file-image',\n jpg: 'file-image',\n zip: 'file',\n doc: 'file-text',\n docx: 'file-text',\n xls: 'file',\n xlsx: 'file',\n ppt: 'file',\n csv: 'file',\n rtf: 'file-text',\n};\n\n/**\n * Internal sub-component used by `eds-file-upload` to render individual file previews.\n * Displays file information (name, size, type) with optional image preview or icon, and a remove button.\n */\n@Component({\n selector: 'eds-file-upload-preview',\n templateUrl: './eds-file-upload-preview.html',\n styleUrl: './eds-file-upload-preview.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n ...EDS_ICON,\n ...EDS_ICON_BUTTON,\n EdsFilesizePipe,\n ],\n host: {\n class: 'eds-file-upload-preview',\n '[attr.data-e2e]': '\"eds-file-upload-preview\"',\n },\n})\nexport class EdsFileUploadPreview implements OnInit {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly file = input<Blob | EdsUploadedFile | any>(undefined);\n readonly index = input<number>(undefined);\n readonly uploadedFileTemplate = input<TemplateRef<unknown>>(undefined);\n\n readonly hasPreview = input(true, { transform: booleanAttribute });\n readonly hasPreviewAsImage = input(true, { transform: booleanAttribute });\n readonly hasPreviewAsIcon = input(false, { transform: booleanAttribute });\n readonly isItemsClickable = input(false, { transform: booleanAttribute });\n readonly isFileObject = input(false, { transform: booleanAttribute });\n readonly isFilenameDisplayed = input(true, { transform: booleanAttribute });\n readonly isFilesizeDisplayed = input(true, { transform: booleanAttribute });\n readonly isFiletypeDisplayed = input(true, { transform: booleanAttribute });\n\n readonly removeFromList = output<number>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly itemClick = output<Blob | EdsUploadedFile | any>();\n\n protected url: string;\n protected icon: string;\n protected fileExtension: string;\n protected previewData: { image: boolean; display: string };\n protected isLoading = false;\n protected typeFromFileExtension: string = null;\n\n protected fileName = computed(() => this.file()?.name ?? '');\n protected fileSize = computed(() => this.file()?.size ?? 0);\n protected fileType = computed(() => {\n const f = this.file();\n if (f?.type?.length > 0) {\n return f.type;\n }\n return this.typeFromFileExtension ?? '';\n });\n\n private cd = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n const file = this.file();\n if (file instanceof Blob) {\n const reader = new FileReader();\n reader.readAsArrayBuffer(file as Blob);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reader.onload = (event: any): void => {\n this.url = event.target.result;\n this.fileExtension = this.getFileExtension(this.file().name);\n this.icon = this.getIconForExtension(this.fileExtension);\n\n if (this.fileExtension === 'msg') {\n this.typeFromFileExtension = 'application/vnd.ms-outlook';\n }\n\n const blob = new Blob([reader.result], { type: this.file().type });\n const imageUrl = URL.createObjectURL(blob);\n\n this.previewData = this.getPreviewForMime(this.fileExtension, imageUrl);\n this.cd.detectChanges();\n };\n reader.onloadstart = (): void => {\n this.isLoading = true;\n this.cd.detectChanges();\n };\n reader.onloadend = (): void => {\n this.isLoading = false;\n this.cd.detectChanges();\n };\n } else {\n this.url = (file as EdsUploadedFile).url;\n this.fileExtension = this.getFileExtension(file.name);\n this.icon = this.getIconForExtension(this.fileExtension);\n this.previewData = this.getPreviewForMime(this.fileExtension, this.url);\n this.cd.detectChanges();\n }\n }\n\n protected onRemoveFromList(): void {\n this.removeFromList.emit(this.index());\n }\n\n protected onItemClick(e: Event): void {\n this.itemClick.emit(this.file());\n e.preventDefault();\n }\n\n private getFileExtension(fileName: string): string {\n const ext = fileName?.split('.') ?? [];\n return ext[ext.length - 1] ?? '';\n }\n\n private getPreviewForMime(fileExtension: string, imgUrl: string): { image: boolean; display: string } {\n const f = fileExtension.toLowerCase();\n const isImage = f === 'jpeg' || f === 'jpg' || f === 'png' || f === 'gif';\n const display = isImage ? imgUrl : this.getIconForExtension(f);\n return { image: isImage, display };\n }\n\n private getIconForExtension(fileExtension: string): string {\n const f = fileExtension.toLowerCase();\n return ICON_MAP[f] ?? 'file';\n }\n}\n","@if (uploadedFileTemplate()) {\n <ng-template\n [ngTemplateOutlet]=\"uploadedFileTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: { file: { id: file().id, name: file().name, url: file().url || previewData?.display, size: file().size, type: file().type }, index: index(), isFileObject: isFileObject() } }\" />\n} @else {\n <div class=\"eds-file-upload-preview__content\">\n <div class=\"eds-file-upload-preview__left\">\n @if (hasPreview() && hasPreviewAsImage() && !hasPreviewAsIcon()) {\n <div class=\"eds-file-upload-preview__image\">\n @if (url && previewData?.image) {\n <img [src]=\"previewData.display\" alt=\"File preview image\" />\n }\n @if (previewData && !previewData.image) {\n <eds-icon [icon]=\"previewData.display\" />\n }\n @if (isLoading) {\n <div class=\"eds-file-upload-preview__loading\">\n <eds-icon icon=\"spinner:core\" />\n </div>\n }\n </div>\n }\n @if (hasPreview() && hasPreviewAsIcon()) {\n <div class=\"eds-file-upload-preview__icon\">\n <eds-icon [icon]=\"icon\" />\n </div>\n }\n @if (isFilenameDisplayed()) {\n <div class=\"eds-file-upload-preview__filename\">\n @if (!isItemsClickable()) {\n {{ fileName() }}\n }\n @if (isItemsClickable()) {\n <a href=\"#\" (click)=\"onItemClick($event)\" class=\"eds-file-upload-preview__link\">{{ fileName() }}</a>\n }\n </div>\n }\n </div>\n <div class=\"eds-file-upload-preview__right\">\n @if (isFilesizeDisplayed()) {\n <span class=\"eds-file-upload-preview__size\">{{ fileSize() | edsFilesize }}</span>\n }\n @if (isFiletypeDisplayed() && fileType()) {\n <span class=\"eds-file-upload-preview__type\">{{ fileType() }}</span>\n }\n <button edsIconButton\n color=\"critical\"\n icon=\"trash:core\"\n [ariaLabel]=\"'Remove ' + fileName() + ' from the list'\"\n (buttonClick)=\"onRemoveFromList()\">\n </button>\n </div>\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener,\n TemplateRef,\n booleanAttribute,\n computed,\n effect,\n input,\n output,\n signal,\n viewChildren,\n contentChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_FEEDBACK_MESSAGE } from '@eui/eds/eds-feedback-message';\nimport { EDS_PROGRESS_BAR } from '@eui/eds/eds-progress-bar';\n\nimport { EdsUploadedFile } from './eds-file-upload.model';\nimport { EdsFileUploadPreview } from './eds-file-upload-preview';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\n/**\n * File upload component supporting both traditional file selection and drag-and-drop functionality.\n * Implements ControlValueAccessor for integration with Angular reactive and template-driven forms.\n *\n * Provides file preview, upload progress tracking, file type filtering, and multiple file management.\n *\n * @usageNotes\n * ### Basic file upload\n * ```html\n * <eds-file-upload\n * isMultiple\n * accept=\".pdf,.doc,.docx\"\n * [maxFiles]=\"5\">\n * </eds-file-upload>\n * ```\n *\n * ### With form control\n * ```html\n * <eds-file-upload\n * [formControl]=\"fileControl\"\n * hasDragArea\n * [progress]=\"uploadProgress\">\n * </eds-file-upload>\n * ```\n *\n * ### Accessibility\n * - Native file input is keyboard accessible\n * - Drag-and-drop area has appropriate aria-label\n * - File list items are navigable and removable via keyboard\n */\n@Component({\n selector: 'eds-file-upload',\n templateUrl: './eds-file-upload.html',\n styleUrl: './eds-file-upload.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: EdsFileUpload,\n multi: true,\n },\n ],\n imports: [\n NgTemplateOutlet,\n ...EDS_BUTTON,\n ...EDS_FEEDBACK_MESSAGE,\n ...EDS_PROGRESS_BAR,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsFileUpload implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-file-upload'\n */\n readonly e2eAttr = input('eds-file-upload');\n\n /**\n * Current upload progress percentage (0–100).\n * Only effective when hasProgressBar is true.\n * @default 0\n */\n readonly progress = input(0);\n\n /**\n * Comma-separated list of allowed file extensions or MIME types.\n * Files not matching the specified types will be rejected.\n * Use '*' to allow all file types.\n * @default '*'\n */\n readonly accept = input('*');\n\n /**\n * Maximum number of files that can be uploaded simultaneously.\n * When limit is reached, additional file selection is disabled.\n * @default undefined (unlimited)\n */\n readonly maxFiles = input<number>(undefined);\n\n /**\n * Enables selection of multiple files in a single upload operation.\n * @default true\n */\n readonly isMultiple = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a progress bar indicating upload completion percentage.\n * @default true\n */\n readonly hasProgressBar = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a visual preview for each file in the upload list.\n * @default true\n */\n readonly hasPreview = input(true, { transform: booleanAttribute });\n\n /**\n * Renders file previews as thumbnail images for supported image file types.\n * @default true\n */\n readonly hasPreviewAsImage = input(true, { transform: booleanAttribute });\n\n /**\n * Renders file previews as file format icons instead of image thumbnails.\n * @default false\n */\n readonly hasPreviewAsIcon = input(false, { transform: booleanAttribute });\n\n /**\n * Shows the total combined size of all files in the upload queue.\n * @default true\n */\n readonly hasTotalSizeDisplayed = input(true, { transform: booleanAttribute });\n\n /**\n * Displays a button to clear all files from the upload queue.\n * Only visible when isMultiple is true and files are present.\n * @default true\n */\n readonly hasResetButton = input(true, { transform: booleanAttribute });\n\n /**\n * Enables drag-and-drop functionality for file selection.\n * Displays a drop zone area where users can drag files from their file system.\n * @default false\n */\n readonly hasDragArea = input(false, { transform: booleanAttribute });\n\n /**\n * Makes files in the upload list clickable, emitting itemClick events.\n * @default false\n */\n readonly isItemsClickable = input(false, { transform: booleanAttribute });\n\n /**\n * Label text for the browse button.\n * @default 'Choose file'\n */\n readonly browseLabel = input('Choose file');\n\n /**\n * Label text for the drag area hint.\n * @default 'or drag and drop file here'\n */\n readonly dragLabel = input('or drag and drop file here');\n\n /**\n * Label text for the reset button.\n * @default 'Reset list'\n */\n readonly resetLabel = input('Reset list');\n\n /**\n * Label text shown for total size.\n * @default 'total size'\n */\n readonly totalSizeLabel = input('total size');\n\n /**\n * Error message shown for rejected file extensions.\n * @default 'File extension not allowed'\n */\n readonly rejectedFileLabel = input('File extension not allowed');\n\n /**\n * Emitted when files are dropped into the drag-and-drop area.\n */\n readonly fileDrop = output();\n\n /**\n * Emitted when a file in the upload list is clicked (when isItemsClickable is true).\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly itemClick = output<Blob | EdsUploadedFile | any>();\n\n /** Internal state for currently selected files. */\n protected internalFiles = signal<File[]>([]);\n\n /** Internal state for pre-existing uploaded files (from writeValue). */\n protected internalUploadedFiles = signal<EdsUploadedFile[]>([]);\n\n /** Internal progress (synced from input via effect). */\n protected internalProgress = signal(0);\n\n /** Drag state indicator. */\n protected dragEntered = signal(false);\n\n /** Rejected file message. */\n protected rejectedFileMessage = signal<string | null>(null);\n\n /** Random id for unique file input element. */\n protected readonly randomNumberId = Math.floor(Math.random() * 10000);\n\n /** References to all file input elements. */\n protected readonly fileInputs = viewChildren<ElementRef<HTMLInputElement>>('input');\n\n /** Custom templates provided by content projection. */\n protected uploadedFileTemplate: TemplateRef<unknown>;\n protected browseButtonTemplate: TemplateRef<unknown>;\n protected resetButtonTemplate: TemplateRef<unknown>;\n protected progressBarTemplate: TemplateRef<unknown>;\n\n /** Computed total file size. */\n protected filesTotalSize = computed(() => {\n return this.internalFiles().reduce((total, f) => total + f.size, 0);\n });\n\n /** Whether to show the reset button. */\n protected showResetBtn = computed(() => {\n return this.hasResetButton() && this.isMultiple() &&\n (this.internalFiles().length > 0 || this.internalUploadedFiles().length > 0);\n });\n\n /** Whether the drop area is disabled. */\n protected isDropAreaDisabled = computed(() => {\n const totalFiles = this.internalUploadedFiles().length + this.internalFiles().length;\n return (!this.isMultiple() && this.internalFiles().length === 1) || totalFiles === this.maxFiles();\n });\n\n /** Effective preview-as-image flag. */\n protected effectiveHasPreviewAsImage = computed(() => {\n if (this.hasPreviewAsIcon()) return false;\n return this.hasPreviewAsImage();\n });\n\n hostClasses = computed(() => {\n return 'eds-file-upload';\n });\n\n constructor() {\n effect(() => {\n this.internalProgress.set(this.progress());\n });\n }\n\n /**\n * Host listener for file input change events.\n */\n @HostListener('change', ['$any($event.target).files'])\n emitFiles(fileList: FileList): void {\n let i = this.internalUploadedFiles().length + this.internalFiles().length;\n const rejectedFiles: string[] = [];\n const newFiles: File[] = [...this.internalFiles()];\n\n for (const property in fileList) {\n const maxFiles = this.maxFiles();\n if (fileList[property] && typeof fileList[property] === 'object' && (!maxFiles || i < maxFiles)) {\n const fileName = fileList[property].name.split('.');\n const fileExtension = fileName[fileName.length - 1];\n\n if (this.accept().indexOf(fileExtension.toLowerCase()) !== -1 || this.accept() === '*') {\n newFiles.push(fileList[property]);\n } else {\n rejectedFiles.push(fileList[property].name);\n }\n\n i++;\n }\n }\n\n this.internalFiles.set(newFiles);\n this.rejectedFileMessage.set(rejectedFiles.length ? rejectedFiles.join(', ') : null);\n\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n\n const fileInputs = this.fileInputs();\n if (fileInputs?.length) {\n fileInputs.at(0)!.nativeElement.value = '';\n if (fileInputs.length > 1) {\n fileInputs.at(-1)!.nativeElement.value = '';\n }\n }\n\n this.dragEntered.set(false);\n this.fileDrop.emit();\n }\n\n // --- ControlValueAccessor ---\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(value: any): void {\n this.internalUploadedFiles.set(value || []);\n this.internalFiles.set([]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n protected onDragEnter(): void {\n if (!this.isDropAreaDisabled()) {\n this.dragEntered.set(true);\n }\n }\n\n protected onDragLeave(): void {\n this.dragEntered.set(false);\n }\n\n protected removeFromList(index: number): void {\n this.internalFiles.update(files => files.filter((_, i) => i !== index));\n if (this.internalFiles().length === 0) {\n this.internalProgress.set(0);\n }\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n }\n\n protected removeFromUploadedList(index: number): void {\n this.internalUploadedFiles.update(files => files.filter((_, i) => i !== index));\n if (this.internalFiles().length === 0) {\n this.internalProgress.set(0);\n }\n this._onChange([...this.internalUploadedFiles(), ...this.internalFiles()]);\n }\n\n protected resetList(): void {\n this.internalFiles.set([]);\n this.internalUploadedFiles.set([]);\n this.internalProgress.set(0);\n this._onChange([]);\n }\n\n protected openBrowseWindow(): void {\n this.fileInputs()?.at(0)?.nativeElement.click();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected onItemClick(e: Blob | EdsUploadedFile | any): void {\n this.itemClick.emit(e);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onChange: (value: any) => void = () => {/* noop */};\n private _onTouched: () => void = () => {/* noop */};\n}\n","@if (hasDragArea()) {\n <div\n class=\"eds-file-upload__drop-area\"\n [class.eds-file-upload__drop-area--active]=\"dragEntered()\"\n [class.eds-file-upload__drop-area--disabled]=\"isDropAreaDisabled()\">\n <button edsButton variant=\"secondary\" size=\"s\" type=\"button\" class=\"eds-file-upload__browse-btn\">{{ browseLabel() }}</button>\n <span class=\"eds-file-upload__drag-hint\">{{ dragLabel() }}</span>\n <input\n #input\n class=\"eds-file-upload__file-input\"\n [attr.aria-label]=\"browseLabel() + ' ' + dragLabel()\"\n type=\"file\"\n [accept]=\"accept()\"\n [attr.disabled]=\"isDropAreaDisabled() ? 'disabled' : null\"\n [multiple]=\"isMultiple()\"\n (dragenter)=\"onDragEnter()\"\n (dragleave)=\"onDragLeave()\" />\n </div>\n} @else {\n <div class=\"eds-file-upload__simple-input\">\n <label [attr.for]=\"'eds-file-' + randomNumberId\">\n <button edsButton variant=\"secondary\" size=\"s\" type=\"button\" (click)=\"openBrowseWindow()\">{{ browseLabel() }}</button>\n </label>\n @if (isMultiple()) {\n <input\n #input\n [attr.aria-label]=\"'Choose multiple files'\"\n class=\"eds-file-upload__hidden-input\"\n [id]=\"'eds-file-' + randomNumberId\"\n type=\"file\"\n [accept]=\"accept()\"\n multiple />\n } @else {\n <input\n #input\n [attr.aria-label]=\"'Choose a single file'\"\n class=\"eds-file-upload__hidden-input\"\n [id]=\"'eds-file-' + randomNumberId\"\n type=\"file\"\n [accept]=\"accept()\" />\n }\n </div>\n}\n\n@if (hasProgressBar() && internalProgress() > 0) {\n <eds-progress-bar\n class=\"eds-file-upload__progress\"\n [progress]=\"internalProgress()\"\n [label]=\"internalProgress() + '%'\" />\n}\n\n@if (rejectedFileMessage()) {\n <eds-feedback-message edsCritical class=\"eds-file-upload__error\">\n {{ rejectedFileLabel() }}: {{ rejectedFileMessage() }}\n </eds-feedback-message>\n}\n\n@for (uploadedFile of internalUploadedFiles(); let i = $index; track i) {\n <eds-file-upload-preview\n [isItemsClickable]=\"isItemsClickable()\"\n [index]=\"i\"\n [file]=\"uploadedFile\"\n [hasPreview]=\"hasPreview()\"\n [hasPreviewAsImage]=\"effectiveHasPreviewAsImage()\"\n [hasPreviewAsIcon]=\"hasPreviewAsIcon()\"\n [uploadedFileTemplate]=\"uploadedFileTemplate\"\n (itemClick)=\"onItemClick($event)\"\n (removeFromList)=\"removeFromUploadedList($event)\" />\n}\n\n@for (file of internalFiles(); let i = $index; track i) {\n <eds-file-upload-preview\n isFileObject\n [isItemsClickable]=\"isItemsClickable()\"\n [index]=\"i\"\n [file]=\"file\"\n [hasPreview]=\"hasPreview()\"\n [hasPreviewAsImage]=\"effectiveHasPreviewAsImage()\"\n [hasPreviewAsIcon]=\"hasPreviewAsIcon()\"\n [uploadedFileTemplate]=\"uploadedFileTemplate\"\n (itemClick)=\"onItemClick($event)\"\n (removeFromList)=\"removeFromList($event)\" />\n}\n\n@if (filesTotalSize() && hasTotalSizeDisplayed()) {\n <div class=\"eds-file-upload__total-size\">\n {{ filesTotalSize() | edsFilesize }} {{ totalSizeLabel() }}\n </div>\n}\n\n<div class=\"eds-u-flex eds-u-flex-gap-s\">\n <ng-content />\n \n @if (showResetBtn()) {\n <button edsButton variant=\"secondary\" size=\"s\" type=\"button\" (click)=\"resetList()\">\n {{ resetLabel() }}\n </button>\n }\n</div>\n\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpEventType, HttpResponse } from '@angular/common/http';\nimport { filter, map, tap } from 'rxjs/operators';\nimport { pipe, Observable, UnaryFunction, MonoTypeOperatorFunction } from 'rxjs';\n\n/**\n * Service providing utility methods for file upload operations.\n * Handles sending form data to a backend, tracking upload progress, and extracting response bodies.\n *\n * @usageNotes\n * ```ts\n * this.fileUploadUtils.sendData(formValue, '/api/upload').pipe(\n * this.fileUploadUtils.uploadProgress((progress) => console.log(progress)),\n * this.fileUploadUtils.toResponseBody(),\n * ).subscribe(response => console.log(response));\n * ```\n */\n@Injectable()\nexport class EdsFileUploadUtils {\n private httpClient = inject(HttpClient);\n\n /**\n * Formats data as FormData and sends it to the specified endpoint.\n *\n * @param data - Data to send (will be serialized to FormData).\n * @param apiEndpoint - The URL endpoint to POST to.\n * @returns Observable of HttpEvents for tracking progress.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public sendData(data: any, apiEndpoint: string): Observable<any> {\n return this.httpClient.post(apiEndpoint, this.toFormData(data), {\n reportProgress: true,\n observe: 'events',\n });\n }\n\n /**\n * RxJS operator that emits upload progress via a callback function.\n *\n * @param cb - Callback receiving progress percentage (0–100).\n * @returns MonoTypeOperatorFunction that passes through events while reporting progress.\n */\n public uploadProgress<T>(cb: (progress: number) => void): MonoTypeOperatorFunction<HttpEvent<T>> {\n return tap((event: HttpEvent<T>) => {\n if (event.type === HttpEventType.UploadProgress) {\n cb(Math.round((100 * event.loaded) / event.total));\n }\n });\n }\n\n /**\n * RxJS operator that extracts the response body from HttpEvents.\n *\n * @returns UnaryFunction that filters to only HttpResponse events and maps to the body.\n */\n public toResponseBody<T>(): UnaryFunction<Observable<HttpEvent<T>>, Observable<T>> {\n return pipe(\n filter((event: HttpEvent<T>) => event.type === HttpEventType.Response),\n map((res: HttpResponse<T>) => res.body),\n );\n }\n\n /**\n * Returns the icon name for a given file extension.\n *\n * @param fileExtension - The file extension (without dot).\n * @returns Icon name string.\n */\n public getIconForExtension(fileExtension: string): string {\n const iconConfig: Record<string, string> = {\n avi: 'file-video',\n html: 'file-code',\n htm: 'file-code',\n js: 'file-code',\n json: 'file-code',\n mp3: 'file-audio',\n mp4: 'file-video',\n pdf: 'file',\n png: 'file-image',\n svg: 'file-image',\n txt: 'file-text',\n xml: 'file-code',\n jpeg: 'file-image',\n jpg: 'file-image',\n zip: 'file',\n doc: 'file-text',\n docx: 'file-text',\n xls: 'file',\n xlsx: 'file',\n ppt: 'file',\n csv: 'file',\n rtf: 'file-text',\n };\n\n const f = fileExtension.toLowerCase();\n return iconConfig[f] ?? 'file';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private toFormData(formValue: any): FormData {\n const formData = new FormData();\n\n for (const key of Object.keys(formValue)) {\n if (Array.isArray(formValue[key])) {\n let fileIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formValue[key].forEach((value: any) => {\n if (value instanceof File) {\n formData.append(key + fileIndex, value);\n fileIndex++;\n }\n });\n\n const a: unknown[] = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n formValue[key].forEach((value: any): void => {\n a.push(value);\n });\n\n formData.append(key, JSON.stringify(a));\n } else {\n if (typeof formValue[key] === 'string') {\n formData.set(key, formValue[key]);\n } else {\n formData.set(key, JSON.stringify(formValue[key]));\n }\n }\n }\n\n return formData;\n }\n}\n","export type MimeType =\n | 'image/jpeg'\n | 'image/png'\n | 'image/gif'\n | 'image/webp'\n | 'image/flif'\n | 'image/x-xcf'\n | 'image/x-canon-cr2'\n | 'image/x-canon-cr3'\n | 'image/tiff'\n | 'image/bmp'\n | 'image/icns'\n | 'image/vnd.ms-photo'\n | 'image/vnd.adobe.photoshop'\n | 'application/x-indesign'\n | 'application/epub+zip'\n | 'application/x-xpinstall'\n | 'application/vnd.oasis.opendocument.text'\n | 'application/vnd.oasis.opendocument.spreadsheet'\n | 'application/vnd.oasis.opendocument.presentation'\n | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n | 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n | 'application/zip'\n | 'application/json'\n | 'application/x-tar'\n | 'application/x-rar-compressed'\n | 'application/gzip'\n | 'application/x-bzip2'\n | 'application/x-7z-compressed'\n | 'application/x-apple-diskimage'\n | 'video/mp4'\n | 'audio/midi'\n | 'video/x-matroska'\n | 'video/webm'\n | 'video/quicktime'\n | 'video/vnd.avi'\n | 'audio/vnd.wave'\n | 'audio/qcelp'\n | 'audio/x-ms-asf'\n | 'video/x-ms-asf'\n | 'application/vnd.ms-asf'\n | 'video/mpeg'\n | 'video/3gpp'\n | 'audio/mpeg'\n | 'audio/mp4'\n | 'audio/opus'\n | 'video/ogg'\n | 'audio/ogg'\n | 'application/ogg'\n | 'audio/x-flac'\n | 'audio/ape'\n | 'audio/wavpack'\n | 'audio/amr'\n | 'application/pdf'\n | 'application/x-elf'\n | 'application/x-msdownload'\n | 'application/x-shockwave-flash'\n | 'application/rtf'\n | 'application/wasm'\n | 'font/woff'\n | 'font/woff2'\n | 'application/vnd.ms-fontobject'\n | 'font/ttf'\n | 'font/otf'\n | 'image/x-icon'\n | 'video/x-flv'\n | 'application/postscript'\n | 'application/eps'\n | 'application/x-xz'\n | 'application/x-sqlite3'\n | 'application/x-nintendo-nes-rom'\n | 'application/x-google-chrome-extension'\n | 'application/vnd.ms-cab-compressed'\n | 'application/x-deb'\n | 'application/x-unix-archive'\n | 'application/x-rpm'\n | 'application/x-compress'\n | 'application/x-lzip'\n | 'application/x-cfb'\n | 'application/x-mie'\n | 'application/x-apache-arrow'\n | 'application/mxf'\n | 'video/mp2t'\n | 'application/x-blender'\n | 'image/bpg'\n | 'image/j2c'\n | 'image/jp2'\n | 'image/jpx'\n | 'image/jpm'\n | 'image/mj2'\n | 'audio/aiff'\n | 'application/xml'\n | 'application/x-mobipocket-ebook'\n | 'image/heif'\n | 'image/heif-sequence'\n | 'image/heic'\n | 'image/heic-sequence'\n | 'image/ktx'\n | 'application/dicom'\n | 'audio/x-musepack'\n | 'text/calendar'\n | 'text/vcard'\n | 'model/gltf-binary'\n | 'application/vnd.tcpdump.pcap'\n | 'audio/x-voc'\n | 'audio/vnd.dolby.dd-raw'\n | 'audio/x-m4a'\n | 'image/apng'\n | 'image/x-olympus-orf'\n | 'image/x-sony-arw'\n | 'image/x-adobe-dng'\n | 'image/x-nikon-nef'\n | 'image/x-panasonic-rw2'\n | 'image/x-fujifilm-raf'\n | 'video/x-m4v'\n | 'video/3gpp2'\n | 'application/x-esri-shape'\n | 'audio/aac'\n | 'audio/x-it'\n | 'audio/x-s3m'\n | 'audio/x-xm'\n | 'video/MP1S'\n | 'video/MP2P'\n | 'application/vnd.sketchup.skp'\n | 'image/avif'\n | 'application/x-lzh-compressed'\n | 'application/pgp-encrypted'\n | 'application/x-asar'\n | 'model/stl'\n | 'application/vnd.ms-htmlhelp'\n | 'model/3mf'\n | 'image/jxl'\n | 'application/zstd'\n | 'image/jls'\n | 'application/vnd.ms-outlook'\n | 'image/vnd.dwg'\n | 'application/x-parquet'\n | 'application/java-vm'\n | 'application/x-arj'\n | 'application/x-cpio'\n | 'application/x-ace-compressed'\n | 'application/avro'\n | 'application/vnd.iccprofile';\n\nexport const getMimeType = (header: Uint8Array): MimeType => {\n const hex = uint8ArrayToHexString(header);\n\n if (hex.startsWith('ffd8ff')) return 'image/jpeg';\n if (hex.startsWith('89504e47')) return 'image/png';\n if (hex.startsWith('464c4946')) return 'image/flif';\n if (hex.startsWith('67696d7020786366')) return 'image/x-xcf';\n if (hex.startsWith('49492a00')) return 'image/tiff';\n if (hex.startsWith('424d')) return 'image/bmp';\n if (hex.startsWith('69636e73')) return 'image/icns';\n if (hex.startsWith('49491a0000004845415050')) return 'image/vnd.ms-photo';\n if (hex.startsWith('38425053')) return 'image/vnd.adobe.photoshop';\n if (hex.startsWith('504b0304')) return identifyZipBasedFormat(header);\n if (hex.startsWith('7573746172')) return 'application/x-tar';\n if (hex.startsWith('526172211a0700')) return 'application/x-rar-compressed';\n if (hex.startsWith('1f8b08')) return 'application/gzip';\n if (hex.startsWith('425a68')) return 'application/x-bzip2';\n if (hex.startsWith('377abcaf271c')) return 'application/x-7z-compressed';\n if (hex.startsWith('00000020667479706d70')) return 'video/mp4';\n if (hex.startsWith('4d546864')) return 'audio/midi';\n if (hex.startsWith('1a45dfa3')) return 'video/webm';\n if (hex.startsWith('255044462d312e')) return 'application/pdf';\n if (hex.startsWith('7f454c46')) return 'application/x-elf';\n if (hex.startsWith('4d5a')) return 'application/x-msdownload';\n if (hex.startsWith('7b5c72746631')) return 'application/rtf';\n if (hex.startsWith('0061736d')) return 'application/wasm';\n if (hex.startsWith('774f4646')) return 'font/woff';\n if (hex.startsWith('774f4632')) return 'font/woff2';\n if (hex.startsWith('464c560105')) return 'video/x-flv';\n if (hex.startsWith('25215053')) return 'application/postscript';\n if (hex.startsWith('fd377a585a00')) return 'application/x-xz';\n if (hex.startsWith('53514c69746520666f726d6174203300')) return 'application/x-sqlite3';\n if (hex.startsWith('d0cf11e0a1b11ae1')) return 'application/x-cfb';\n if (hex.startsWith('4f676753')) return 'audio/ogg';\n if (hex.startsWith('664c6143')) return 'audio/x-flac';\n if (hex.startsWith('494433')) return 'audio/mpeg';\n if (hex.startsWith('3c3f786d6c20')) return 'application/xml';\n\n return null;\n};\n\nconst identifyZipBasedFormat = (data: Uint8Array): MimeType => {\n try {\n const fileEntries = extractZipFileList(data);\n\n if (fileEntries.includes('META-INF/container.xml') || fileEntries.includes('mimetype')) {\n return 'application/epub+zip';\n }\n\n if (fileEntries.includes('[Content_Types].xml')) {\n if (fileEntries.includes('ppt/presentation.xml')) return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n if (fileEntries.includes('xl/workbook.xml')) return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n if (fileEntries.includes('word/document.xml')) return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n }\n\n return 'application/zip';\n } catch {\n return 'application/zip';\n }\n};\n\nconst extractZipFileList = (data: Uint8Array): string[] => {\n const files: string[] = [];\n let offset = 0;\n\n while (offset < data.length - 4) {\n if (data[offset] === 0x50 && data[offset + 1] === 0x4b &&\n data[offset + 2] === 0x03 && data[offset + 3] === 0x04) {\n\n const filenameLength = data[offset + 26] | (data[offset + 27] << 8);\n const extraFieldLength = data[offset + 28] | (data[offset + 29] << 8);\n\n if (filenameLength > 0 && offset + 30 + filenameLength <= data.length) {\n const filename = new TextDecoder().decode(data.slice(offset + 30, offset + 30 + filenameLength));\n files.push(filename);\n }\n\n offset += 30 + filenameLength + extraFieldLength;\n } else {\n offset++;\n }\n }\n\n return files;\n};\n\nconst uint8ArrayToHexString = (uint8Array: Uint8Array): string => {\n return Array.prototype.map.call(uint8Array, (byte: number) => ('00' + byte.toString(16)).slice(-2)).join('');\n};\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { Observable, of, zip } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { getMimeType, MimeType } from './eds-file-upload.mime-types';\n\n/**\n * Validator that requires the maximum number of files that can be uploaded.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxFilesValidator(3));\n * console.log(fileUpload.errors); // { maxFiles: 3 }\n * ```\n *\n * @param maxFiles - The maximum number of files allowed.\n * @returns A validator function that returns `{ maxFiles }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxFilesValidator =\n (maxFiles: number): ValidatorFn =>\n (control: AbstractControl): { maxFiles: number } | null =>\n control.value && control.value.length > maxFiles ? { maxFiles } : null;\n\n/**\n * Validator that checks the total combined size (in bytes) of the selected files.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxSizeValidator(300000));\n * console.log(fileUpload.errors); // { maxSize: 300000 }\n * ```\n *\n * @param maxSize - Maximum allowed total size in bytes.\n * @returns A validator function that returns `{ maxSize }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxSizeValidator =\n (maxSize: number): ValidatorFn =>\n (control: AbstractControl): { maxSize: number } | null => {\n let totalSize = 0;\n if (control.value) {\n control.value.forEach((file: File) => {\n totalSize += file.size;\n });\n }\n\n return control.value && totalSize > maxSize ? { maxSize } : null;\n };\n\n/**\n * Validator that checks the maximum size per file (in bytes).\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMaxFileSizeValidator(300000));\n * console.log(fileUpload.errors); // { maxFileSize: 300000, indexes: [0, 2] }\n * ```\n *\n * @param maxFileSize - Maximum allowed size per file in bytes.\n * @returns A validator function that returns `{ maxFileSize, indexes }` if the validation fails, otherwise `null`.\n */\nexport const edsMaxFileSizeValidator =\n (maxFileSize: number): ValidatorFn =>\n (control: AbstractControl): { maxFileSize: number; indexes: number[] } | null => {\n const fileIndexes: number[] = [];\n let maxFileExceeded = false;\n if (control.value) {\n control.value.forEach((file: File, index: number) => {\n if (file.size > maxFileSize) {\n fileIndexes.push(index);\n maxFileExceeded = true;\n }\n });\n }\n\n return control.value && maxFileExceeded ? { maxFileSize, indexes: fileIndexes } : null;\n };\n\n/**\n * Validator that checks file extensions against a list of allowed MIME types.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, edsMimeTypeExtensionValidator(['image/jpeg']));\n * console.log(fileUpload.errors); // { invalidFileExtension: ['file.png'] }\n * ```\n *\n * @param mimeTypes - The list of allowed MIME types.\n * @returns A validator function that returns `{ invalidFileExtension }` if the validation fails, otherwise `null`.\n */\nexport const edsMimeTypeExtensionValidator =\n (mimeTypes: string[]): ValidatorFn =>\n (control: AbstractControl): { invalidFileExtension: string[] } | null => {\n const invalidFileExtension: string[] = [];\n if (control.value) {\n control.value.forEach((file: File) => {\n if (mimeTypes.indexOf(file.type) === -1) {\n invalidFileExtension.push(file.name);\n }\n });\n }\n\n return control.value && invalidFileExtension.length > 0 ? { invalidFileExtension } : null;\n };\n\n/**\n * Async validator that checks MIME types by reading file header bytes.\n *\n * @example\n * ```ts\n * const fileUpload = new FormControl(null, { asyncValidators: [edsAsyncMimeTypeValidator(['image/jpeg'])] });\n * console.log(fileUpload.errors); // { invalidMimeFileType: [{ 'file.png': 'image/png' }] }\n * ```\n *\n * @param mimeTypes - The list of allowed MIME types.\n * @returns An async validator function that returns `{ invalidMimeFileType }` if the validation fails, otherwise `null`.\n */\nexport const edsAsyncMimeTypeValidator =\n (mimeTypes: MimeType[]): AsyncValidatorFn =>\n (control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {\n if (control.value) {\n const fileErrorObservables: Observable<ValidationErrors | null>[] = [];\n control.value.forEach((file: File) => {\n fileErrorObservables.push(validateFileMimeType(file, mimeTypes));\n });\n return zip(...fileErrorObservables).pipe(\n map((fileErrors) => {\n const errors = fileErrors.filter((fileError) => fileError !== null);\n if (errors.length === 0) {\n return null;\n }\n return { invalidMimeFileType: errors };\n }),\n );\n }\n return of(null);\n };\n\nconst validateFileMimeType = (file: File, mimeTypes: MimeType[]): Observable<Record<string, MimeType> | null> => {\n return new Observable<Record<string, MimeType> | null>((subscriber) => {\n const reader = new FileReader();\n reader.onloadend = (): void => {\n const buffer = reader.result as ArrayBuffer;\n const headerBytes = new Uint8Array(buffer).slice(0, Math.min(1024, buffer.byteLength));\n const mime = getMimeType(headerBytes);\n if (mimeTypes.includes(mime)) {\n subscriber.next(null);\n } else {\n subscriber.next({ [file.name]: mime });\n }\n subscriber.complete();\n };\n reader.readAsArrayBuffer(file);\n });\n};\n","import { EdsFileUpload } from './eds-file-upload';\nimport { EdsFileUploadPreview } from './eds-file-upload-preview';\nimport { EdsFilesizePipe } from './eds-filesize.pipe';\n\nexport {\n EdsFileUpload,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n};\n\nexport * from './eds-file-upload.model';\nexport * from './eds-file-upload.utils';\nexport * from './eds-file-upload.validators';\nexport * from './eds-file-upload.mime-types';\n\n/** Convenience array for importing all eds-file-upload components. */\nexport const EDS_FILE_UPLOAD = [\n EdsFileUpload,\n EdsFileUploadPreview,\n EdsFilesizePipe,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -295,4 +295,4 @@ const EDS_FLEX_LAYOUT = [
295
295
  */
296
296
 
297
297
  export { EDS_FLEX_LAYOUT, EdsFlexColDirective, EdsFlexGrowDirective, EdsFlexLayout, EdsFlexNoShrinkDirective };
298
- //# sourceMappingURL=eui-eds-utilities-eds-flex-layout.mjs.map
298
+ //# sourceMappingURL=eui-eds-eds-flex-layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eui-eds-eds-flex-layout.mjs","sources":["../../eds-flex-layout/eds-flex-layout.ts","../../eds-flex-layout/index.ts","../../eds-flex-layout/eui-eds-eds-flex-layout.ts"],"sourcesContent":["import {\n Directive,\n ChangeDetectionStrategy,\n Component,\n input,\n computed,\n booleanAttribute,\n} from '@angular/core';\n\n/** Valid gap size tokens matching EDS spacing scale. */\nexport type EdsFlexGap = 'none' | '5xs' | '4xs' | '3xs' | '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl';\n\n/** Valid flex direction options. */\nexport type EdsFlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';\n\n/** Valid justify-content options. */\nexport type EdsFlexJustify = 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n\n/** Valid align-items options. */\nexport type EdsFlexAlign = 'start' | 'end' | 'center' | 'stretch' | 'baseline';\n\n/** Valid flex-wrap options. */\nexport type EdsFlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse';\n\n/**\n * `eds-flex-layout` is a lightweight layout component that replaces verbose\n * `eds-u-*` utility class compositions with a declarative, typed API.\n *\n * It renders as a flex container with configurable direction, alignment, gap,\n * wrapping, and sizing behavior — all via inputs.\n *\n * @usageNotes\n * ```html\n * <!-- Replaces: class=\"eds-u-d-flex eds-u-flex-column eds-u-flex-gap-m eds-u-flex-align-items-center\" -->\n * <eds-flex-layout direction=\"column\" gap=\"m\" align=\"center\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * </eds-flex-layout>\n *\n * <!-- Inline flex with justify-between -->\n * <eds-flex-layout inline justify=\"between\" gap=\"s\">\n * <span>Left</span>\n * <span>Right</span>\n * </eds-flex-layout>\n * ```\n */\n@Component({\n selector: 'eds-flex-layout',\n template: '<ng-content/>',\n styleUrl: './eds-flex-layout.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.--_flex-gap]': 'gapVar()',\n },\n})\nexport class EdsFlexLayout {\n /**\n * Flex direction.\n * @default 'row'\n */\n direction = input<EdsFlexDirection>('row');\n\n /**\n * Gap between flex items using EDS spacing tokens.\n * @default 'none'\n */\n gap = input<EdsFlexGap>('none');\n\n /**\n * Justify content alignment along the main axis.\n * @default undefined (no explicit justify-content set)\n */\n justify = input<EdsFlexJustify | undefined>(undefined);\n\n /**\n * Align items along the cross axis.\n * @default undefined (no explicit align-items set)\n */\n align = input<EdsFlexAlign | undefined>(undefined);\n\n /**\n * Flex wrap behavior.\n * @default 'nowrap'\n */\n wrap = input<EdsFlexWrap>('nowrap');\n\n /**\n * Whether the container is inline-flex instead of flex.\n * @default false\n */\n inline = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the container takes full width (width: 100%).\n * @default false\n */\n fullWidth = input(false, { transform: booleanAttribute });\n\n hostClasses = computed(() => {\n const classes = ['eds-flex-layout'];\n\n // Direction\n if (this.direction() !== 'row') {\n classes.push(`eds-flex-layout--direction-${this.direction()}`);\n }\n\n // Justify\n const justify = this.justify();\n if (justify) {\n classes.push(`eds-flex-layout--justify-${justify}`);\n }\n\n // Align\n const align = this.align();\n if (align) {\n classes.push(`eds-flex-layout--align-${align}`);\n }\n\n // Wrap\n if (this.wrap() !== 'nowrap') {\n classes.push(`eds-flex-layout--wrap-${this.wrap()}`);\n }\n\n // Inline\n if (this.inline()) {\n classes.push('eds-flex-layout--inline');\n }\n\n // Full width\n if (this.fullWidth()) {\n classes.push('eds-flex-layout--full-width');\n }\n\n return classes.join(' ');\n });\n\n /** Resolves the gap CSS variable value. */\n gapVar = computed(() => {\n const gap = this.gap();\n if (gap === 'none') return null;\n return `var(--eds-sp-${gap})`;\n });\n}\n\n/**\n * Directive to mark a flex item with grow behavior.\n *\n * @usageNotes\n * ```html\n * <eds-flex-layout>\n * <div edsFlexGrow>Takes remaining space</div>\n * <div>Fixed</div>\n * </eds-flex-layout>\n * ```\n */\n@Directive({\n selector: '[edsFlexGrow]',\n host: {\n style: 'flex-grow: 1',\n },\n})\nexport class EdsFlexGrowDirective {}\n\n/**\n * Directive to mark a flex item that should not shrink.\n *\n * @usageNotes\n * ```html\n * <eds-flex-layout>\n * <div edsFlexNoShrink>Won't shrink</div>\n * <div>Can shrink</div>\n * </eds-flex-layout>\n * ```\n */\n@Directive({\n selector: '[edsFlexNoShrink]',\n host: {\n style: 'flex-shrink: 0',\n },\n})\nexport class EdsFlexNoShrinkDirective {}\n\n/** Valid column span values (1–12) or 'auto'. */\nexport type EdsFlexColSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto';\n\n/**\n * Directive to mark a flex item as a flexible column.\n *\n * Without any col inputs, defaults to `flex: 1 0 0%` (equal-width column).\n * When a `col` span is specified (1–12 or 'auto'), the directive applies the\n * corresponding `eds-col-*` utility classes from the EDS grid system, enabling\n * responsive breakpoint-aware column sizing.\n *\n * Responsive inputs (`colXs`, `colS`, `colM`, `colL`, `colXl`, `col2xl`) apply\n * classes that activate at their respective breakpoints, following the same\n * mobile-first approach as `eds-grid.css`.\n *\n * @usageNotes\n * ```html\n * <!-- Equal-width columns (default behavior) -->\n * <eds-flex-layout>\n * <div edsFlexCol>Equal width</div>\n * <div edsFlexCol>Equal width</div>\n * </eds-flex-layout>\n *\n * <!-- Fixed 6-column span -->\n * <eds-flex-layout wrap=\"wrap\">\n * <div edsFlexCol [col]=\"6\">Half width</div>\n * <div edsFlexCol [col]=\"6\">Half width</div>\n * </eds-flex-layout>\n *\n * <!-- Responsive: full width on mobile, 6 cols on tablet, 4 cols on desktop -->\n * <eds-flex-layout wrap=\"wrap\">\n * <div edsFlexCol [col]=\"12\" [colS]=\"6\" [colL]=\"4\">Responsive</div>\n * </eds-flex-layout>\n * ```\n */\n@Directive({\n selector: '[edsFlexCol]',\n host: {\n '[class]': 'hostClasses()',\n '[style.flex]': 'flexStyle()',\n },\n})\nexport class EdsFlexColDirective {\n /**\n * Base column span (1–12 or 'auto'). Applied at all viewport sizes (no breakpoint prefix).\n * When not set, the item uses `flex: 1 0 0%` (equal-width).\n */\n col = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the xs breakpoint (≥ 480px). */\n colXs = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the s breakpoint (≥ 768px). */\n colS = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the m breakpoint (≥ 996px). */\n colM = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the l breakpoint (≥ 1140px). */\n colL = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the xl breakpoint (≥ 1440px). */\n colXl = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Column span at the 2xl breakpoint (≥ 1600px). */\n col2xl = input<EdsFlexColSpan | null | undefined>(undefined);\n\n /** Applies `flex: 1 0 0%` only when no col sizing is specified (backward compat). */\n flexStyle = computed(() => this.hasColSizing() ? null : '1 0 0%');\n\n /** Computes the grid utility classes based on active inputs. */\n hostClasses = computed(() => {\n const classes: string[] = [];\n\n const base = this.col();\n if (base != null) {\n classes.push(base === 'auto' ? 'eds-col-auto' : `eds-col-${base}`);\n }\n\n const xs = this.colXs();\n if (xs != null) {\n classes.push(xs === 'auto' ? 'eds-col-xs-auto' : `eds-col-xs-${xs}`);\n }\n\n const s = this.colS();\n if (s != null) {\n classes.push(s === 'auto' ? 'eds-col-s-auto' : `eds-col-s-${s}`);\n }\n\n const m = this.colM();\n if (m != null) {\n classes.push(m === 'auto' ? 'eds-col-m-auto' : `eds-col-m-${m}`);\n }\n\n const l = this.colL();\n if (l != null) {\n classes.push(l === 'auto' ? 'eds-col-l-auto' : `eds-col-l-${l}`);\n }\n\n const xl = this.colXl();\n if (xl != null) {\n classes.push(xl === 'auto' ? 'eds-col-xl-auto' : `eds-col-xl-${xl}`);\n }\n\n const xxl = this.col2xl();\n if (xxl != null) {\n classes.push(xxl === 'auto' ? 'eds-col-2xl-auto' : `eds-col-2xl-${xxl}`);\n }\n\n return classes.join(' ');\n });\n\n /** Whether any column sizing input is set. */\n private hasColSizing = computed(() =>\n this.col() != null ||\n this.colXs() != null ||\n this.colS() != null ||\n this.colM() != null ||\n this.colL() != null ||\n this.colXl() != null ||\n this.col2xl() != null,\n );\n}\n","import { EdsFlexLayout, EdsFlexGrowDirective, EdsFlexNoShrinkDirective, EdsFlexColDirective } from './eds-flex-layout';\n\nexport {\n EdsFlexLayout,\n EdsFlexGrowDirective,\n EdsFlexNoShrinkDirective,\n EdsFlexColDirective,\n};\n\nexport type { EdsFlexGap, EdsFlexDirection, EdsFlexJustify, EdsFlexAlign, EdsFlexWrap, EdsFlexColSpan } from './eds-flex-layout';\n\n/** Convenience array for importing all eds-flex-layout components and directives. */\nexport const EDS_FLEX_LAYOUT = [\n EdsFlexLayout,\n EdsFlexGrowDirective,\n EdsFlexNoShrinkDirective,\n EdsFlexColDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -135,4 +135,4 @@ const EDS_GRID_LAYOUT = [
135
135
  */
136
136
 
137
137
  export { EDS_GRID_LAYOUT, EdsGridLayout, EdsGridLayoutCell, EdsGridLayoutRow };
138
- //# sourceMappingURL=eui-eds-utilities-eds-grid-layout.mjs.map
138
+ //# sourceMappingURL=eui-eds-eds-grid-layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eui-eds-eds-grid-layout.mjs","sources":["../../eds-grid-layout/eds-grid-layout.ts","../../eds-grid-layout/eds-grid-layout-row.ts","../../eds-grid-layout/eds-grid-layout-cell.ts","../../eds-grid-layout/index.ts","../../eds-grid-layout/eui-eds-eds-grid-layout.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n} from '@angular/core';\n\n/** Gap size token options for the grid layout. */\nexport type EdsGridLayoutGap = 'xs' | 's' | 'm' | 'l' | 'xl';\n\n/**\n * Generic responsive grid layout container.\n * Wraps one or more `eds-grid-layout-row` components, stacking them vertically with configurable gap.\n *\n * @usageNotes\n * ```html\n * <eds-grid-layout gap=\"m\">\n * <eds-grid-layout-row [columns]=\"3\">\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * </eds-grid-layout-row>\n * </eds-grid-layout>\n * ```\n */\n@Component({\n selector: 'eds-grid-layout',\n template: '<ng-content/>',\n styleUrl: './eds-grid-layout.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': '\"eds-grid-layout\"',\n },\n})\nexport class EdsGridLayout {\n /**\n * Vertical gap between rows.\n * @default 'm'\n */\n gap = input<EdsGridLayoutGap>('m');\n\n hostClasses = computed(() => {\n return ['eds-grid-layout', `eds-grid-layout--gap-${this.gap()}`].join(' ');\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n numberAttribute,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * A row within `eds-grid-layout`. Uses CSS grid with a configurable number of equal-width columns.\n * Collapses to 2 columns on tablet and 1 column on mobile by default.\n *\n * @usageNotes\n * ```html\n * <eds-grid-layout-row [columns]=\"4\">\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * <eds-grid-layout-cell>...</eds-grid-layout-cell>\n * </eds-grid-layout-row>\n * ```\n */\n@Component({\n selector: 'eds-grid-layout-row',\n template: '<ng-content/>',\n styleUrl: './eds-grid-layout-row.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.--_grid-columns]': 'columns()',\n '[attr.data-e2e]': '\"eds-grid-layout-row\"',\n },\n})\nexport class EdsGridLayoutRow {\n /**\n * Number of equal-width columns in this row.\n * @default 2\n */\n columns = input(2, { transform: numberAttribute });\n\n /**\n * Prevents the responsive collapse behavior on smaller viewports.\n * When true, the row keeps its column count at all breakpoints.\n * @default false\n */\n hasFixedColumns = input(false, { transform: booleanAttribute });\n\n hostClasses = computed(() => {\n return [\n 'eds-grid-layout-row',\n this.hasFixedColumns() ? 'eds-grid-layout-row--fixed' : '',\n ].join(' ').trim();\n });\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * A cell within an `eds-grid-layout-row`. Can span multiple columns.\n *\n * @usageNotes\n * ```html\n * <eds-grid-layout-row [columns]=\"4\">\n * <eds-grid-layout-cell [span]=\"2\">Wide content</eds-grid-layout-cell>\n * <eds-grid-layout-cell>Normal content</eds-grid-layout-cell>\n * <eds-grid-layout-cell>Normal content</eds-grid-layout-cell>\n * </eds-grid-layout-row>\n * ```\n */\n@Component({\n selector: 'eds-grid-layout-cell',\n template: '<ng-content/>',\n styleUrl: './eds-grid-layout-cell.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.--_cell-span]': 'span()',\n '[attr.data-e2e]': '\"eds-grid-layout-cell\"',\n },\n})\nexport class EdsGridLayoutCell {\n /**\n * How many columns this cell should span.\n * @default 1\n */\n span = input(1, { transform: numberAttribute });\n\n hostClasses = computed(() => {\n return 'eds-grid-layout-cell';\n });\n}\n","import { EdsGridLayout } from './eds-grid-layout';\nimport { EdsGridLayoutRow } from './eds-grid-layout-row';\nimport { EdsGridLayoutCell } from './eds-grid-layout-cell';\n\nexport {\n EdsGridLayout,\n EdsGridLayoutRow,\n EdsGridLayoutCell,\n};\n\nexport type { EdsGridLayoutGap } from './eds-grid-layout';\n\n/** Convenience array for importing all eds-grid-layout components. */\nexport const EDS_GRID_LAYOUT = [\n EdsGridLayout,\n EdsGridLayoutRow,\n EdsGridLayoutCell,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { input, booleanAttribute, model, output, computed, effect, ChangeDetectionStrategy, Component, signal, Injectable } from '@angular/core';
3
3
  import * as i1 from '@eui/eds/eds-icon-button';
4
4
  import { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';
5
- import * as i2 from '@eui/eds/utilities/eds-icon-state';
6
- import { EDS_ICON_STATE } from '@eui/eds/utilities/eds-icon-state';
5
+ import * as i2 from '@eui/eds/eds-icon-state';
6
+ import { EDS_ICON_STATE } from '@eui/eds/eds-icon-state';
7
7
  import * as i3 from '@eui/eds/eds-icon';
8
8
  import { EDS_ICON } from '@eui/eds/eds-icon';
9
9
 
@@ -162,7 +162,7 @@ class EdsGrowl {
162
162
  }
163
163
  }
164
164
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsGrowl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
165
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsGrowl, isStandalone: true, selector: "eds-growl", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, ariaLive: { classPropertyName: "ariaLive", publicName: "ariaLive", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, life: { classPropertyName: "life", publicName: "life", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, closeAllSticky: { classPropertyName: "closeAllSticky", publicName: "closeAllSticky", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, callback: { classPropertyName: "callback", publicName: "callback", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", growlClick: "growlClick", growlClose: "growlClose" }, host: { attributes: { "aria-atomic": "true" }, listeners: { "click": "onClick()" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "attr.role": "hostRole()", "attr.aria-live": "ariaLive()", "attr.aria-labelledby": "value().length ? titleId : null", "attr.aria-describedby": "value().length ? contentId : null" } }, ngImport: i0, template: "@for (msg of value(); track msg) {\n <div class=\"eds-growl__item\"\n [class.eds-growl__item--info]=\"msg.severity === 'info'\"\n [class.eds-growl__item--success]=\"msg.severity === 'success'\"\n [class.eds-growl__item--warning]=\"msg.severity === 'warning'\"\n [class.eds-growl__item--critical]=\"msg.severity === 'critical'\"\n [class.eds-growl__item--slide-up]=\"position() === 'bottom-left' || position() === 'bottom-center' || position() === 'bottom-right'\"\n [class.eds-growl__item--slide-down]=\"position() === 'top-left' || position() === 'top-center' || position() === 'top-right'\">\n\n <div class=\"eds-growl__header\">\n <eds-icon-state [color]=\"$any(severityToColor(msg.severity))\" size=\"s\" [ariaLabel]=\"msg.severity\" />\n <span [id]=\"titleId\" class=\"eds-growl__title\">{{ msg.summary }}</span>\n </div>\n\n @if (msg.detail) {\n <div [id]=\"contentId\" class=\"eds-growl__content\" [innerHTML]=\"msg.detail\"></div>\n }\n\n <button edsIconButton\n icon=\"x\"\n color=\"neutral\"\n size=\"xs\"\n rounded\n ariaLabel=\"Dismiss notification\"\n class=\"eds-growl__close\"\n type=\"button\"\n (buttonClick)=\"remove(msg)\"></button>\n </div>\n}\n\n@if (closeAllSticky() && isMoreThanTwo()) {\n <div class=\"eds-growl__item eds-growl__item--dismiss-all\">\n <div class=\"eds-growl__header\">\n <eds-icon icon=\"checks\" />\n <span class=\"eds-growl__title\">Dismiss all</span>\n </div>\n\n <button edsIconButton\n icon=\"x\"\n color=\"neutral\"\n size=\"xs\"\n rounded\n ariaLabel=\"Dismiss all notifications\"\n class=\"eds-growl__close\"\n type=\"button\"\n (buttonClick)=\"removeAll()\"></button>\n </div>\n}\n", styles: [".eui-21 :host{position:fixed;display:flex;flex-direction:column;width:22rem;z-index:9000;gap:var(--eds-sp-xs);pointer-events:none}.eui-21 :host.eds-growl--bottom-left{bottom:var(--eds-sp-l);left:var(--eds-sp-l)}.eui-21 :host.eds-growl--bottom-center{bottom:var(--eds-sp-l);left:50%;transform:translate(-50%)}.eui-21 :host.eds-growl--bottom-right{bottom:var(--eds-sp-l);right:var(--eds-sp-l)}.eui-21 :host.eds-growl--top-left{top:var(--eds-sp-l);left:var(--eds-sp-l)}.eui-21 :host.eds-growl--top-center{top:var(--eds-sp-l);left:50%;transform:translate(-50%)}.eui-21 :host.eds-growl--top-right{top:var(--eds-sp-l);right:var(--eds-sp-l)}.eui-21 :host .eds-growl__item{--_surface: var(--eds-c-surface-info-subtler);--_on-surface: var(--eds-c-on-surface-info-subtler);--_border-color: var(--eds-c-border-info);display:flex;flex-direction:column;position:relative;padding:var(--eds-sp-m);background-color:var(--_surface);color:var(--_on-surface);border-left:var(--eds-bw-m) solid var(--_border-color);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-3);pointer-events:auto;animation:eds-growl-fade-in .2s ease-out}.eui-21 :host .eds-growl__item--info{--_surface: var(--eds-c-surface-info-subtler);--_on-surface: var(--eds-c-on-surface-info-subtler);--_border-color: var(--eds-c-border-info)}.eui-21 :host .eds-growl__item--success{--_surface: var(--eds-c-surface-success-subtler);--_on-surface: var(--eds-c-on-surface-success-subtler);--_border-color: var(--eds-c-border-success)}.eui-21 :host .eds-growl__item--warning{--_surface: var(--eds-c-surface-warning-subtler);--_on-surface: var(--eds-c-on-surface-warning-subtler);--_border-color: var(--eds-c-border-warning)}.eui-21 :host .eds-growl__item--critical{--_surface: var(--eds-c-surface-critical-subtler);--_on-surface: var(--eds-c-on-surface-critical-subtler);--_border-color: var(--eds-c-border-critical)}.eui-21 :host .eds-growl__item--dismiss-all{--_surface: var(--eds-c-surface-neutral-subtler);--_on-surface: var(--eds-c-foreground-default);--_border-color: var(--eds-c-border-divider)}.eui-21 :host .eds-growl__item--slide-up{animation-name:eds-growl-slide-up}.eui-21 :host .eds-growl__item--slide-down{animation-name:eds-growl-slide-down}.eui-21 :host .eds-growl__header{display:flex;align-items:center;gap:var(--eds-sp-xs);padding-right:var(--eds-sp-xl)}.eui-21 :host .eds-growl__title{font:var(--eds-f-label-m-semibold);color:var(--_on-surface)}.eui-21 :host .eds-growl__content{margin-top:var(--eds-sp-2xs);padding-left:calc(var(--eds-sp-xs) + 1.25rem);font:var(--eds-f-paragraph-s);color:var(--_on-surface);max-height:60vh;overflow-y:auto;overflow-wrap:break-word}.eui-21 :host .eds-growl__content a{text-decoration:underline}.eui-21 :host .eds-growl__close{position:absolute;top:var(--eds-sp-xs);right:var(--eds-sp-xs)}@keyframes eds-growl-fade-in{0%{opacity:0}to{opacity:1}}@keyframes eds-growl-slide-up{0%{opacity:0;transform:translateY(1rem)}to{opacity:1;transform:translateY(0)}}@keyframes eds-growl-slide-down{0%{opacity:0;transform:translateY(-1rem)}to{opacity:1;transform:translateY(0)}}@media screen and (max-width:767px){.eui-21 :host{width:calc(100vw - 2 * var(--eds-sp-m))}.eui-21 :host.eds-growl--bottom-left,.eui-21 :host.eds-growl--bottom-center,.eui-21 :host.eds-growl--bottom-right{bottom:var(--eds-sp-m);left:var(--eds-sp-m);right:var(--eds-sp-m);transform:none}.eui-21 :host.eds-growl--top-left,.eui-21 :host.eds-growl--top-center,.eui-21 :host.eds-growl--top-right{top:var(--eds-sp-m);left:var(--eds-sp-m);right:var(--eds-sp-m);transform:none}}\n"], dependencies: [{ kind: "component", type: i1.EdsIconButton, selector: "button[edsIconButton]", inputs: ["icon", "color", "size", "ariaLabel", "rounded", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: i2.EdsIconState, selector: "eds-icon-state", inputs: ["color", "size", "ariaLabel"] }, { kind: "component", type: i3.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsGrowl, isStandalone: true, selector: "eds-growl", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, ariaLive: { classPropertyName: "ariaLive", publicName: "ariaLive", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, life: { classPropertyName: "life", publicName: "life", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, closeAllSticky: { classPropertyName: "closeAllSticky", publicName: "closeAllSticky", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, callback: { classPropertyName: "callback", publicName: "callback", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", growlClick: "growlClick", growlClose: "growlClose" }, host: { attributes: { "aria-atomic": "true" }, listeners: { "click": "onClick()" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "attr.role": "hostRole()", "attr.aria-live": "ariaLive()", "attr.aria-labelledby": "value().length ? titleId : null", "attr.aria-describedby": "value().length ? contentId : null" } }, ngImport: i0, template: "@for (msg of value(); track msg) {\n <div class=\"eds-growl__item\"\n [class.eds-growl__item--info]=\"msg.severity === 'info'\"\n [class.eds-growl__item--success]=\"msg.severity === 'success'\"\n [class.eds-growl__item--warning]=\"msg.severity === 'warning'\"\n [class.eds-growl__item--critical]=\"msg.severity === 'critical'\"\n [class.eds-growl__item--slide-up]=\"position() === 'bottom-left' || position() === 'bottom-center' || position() === 'bottom-right'\"\n [class.eds-growl__item--slide-down]=\"position() === 'top-left' || position() === 'top-center' || position() === 'top-right'\">\n\n <div class=\"eds-growl__header\">\n <eds-icon-state [color]=\"$any(severityToColor(msg.severity))\" size=\"s\" [ariaLabel]=\"msg.severity\" />\n <span [id]=\"titleId\" class=\"eds-growl__title\">{{ msg.summary }}</span>\n </div>\n\n @if (msg.detail) {\n <div [id]=\"contentId\" class=\"eds-growl__content\" [innerHTML]=\"msg.detail\"></div>\n }\n\n <button edsIconButton\n icon=\"x\"\n color=\"neutral\"\n size=\"xs\"\n rounded\n ariaLabel=\"Dismiss notification\"\n class=\"eds-growl__close\"\n type=\"button\"\n (buttonClick)=\"remove(msg)\"></button>\n </div>\n}\n\n@if (closeAllSticky() && isMoreThanTwo()) {\n <div class=\"eds-growl__item eds-growl__item--dismiss-all\">\n <div class=\"eds-growl__header\">\n <eds-icon icon=\"checks\" />\n <span class=\"eds-growl__title\">Dismiss all</span>\n </div>\n\n <button edsIconButton\n icon=\"x\"\n color=\"neutral\"\n size=\"xs\"\n rounded\n ariaLabel=\"Dismiss all notifications\"\n class=\"eds-growl__close\"\n type=\"button\"\n (buttonClick)=\"removeAll()\"></button>\n </div>\n}\n", styles: [".eui-21 :host{position:fixed;display:flex;flex-direction:column;width:22rem;z-index:9000;gap:var(--eds-sp-xs);pointer-events:none}.eui-21 :host.eds-growl--bottom-left{bottom:var(--eds-sp-l);left:var(--eds-sp-l)}.eui-21 :host.eds-growl--bottom-center{bottom:var(--eds-sp-l);left:50%;transform:translate(-50%)}.eui-21 :host.eds-growl--bottom-right{bottom:var(--eds-sp-l);right:var(--eds-sp-l)}.eui-21 :host.eds-growl--top-left{top:var(--eds-sp-l);left:var(--eds-sp-l)}.eui-21 :host.eds-growl--top-center{top:var(--eds-sp-l);left:50%;transform:translate(-50%)}.eui-21 :host.eds-growl--top-right{top:var(--eds-sp-l);right:var(--eds-sp-l)}.eui-21 :host .eds-growl__item{--_surface: var(--eds-c-surface-info-subtler);--_on-surface: var(--eds-c-on-surface-info-subtler);--_border-color: var(--eds-c-border-info);display:flex;flex-direction:column;position:relative;padding:var(--eds-sp-m);background-color:var(--_surface);color:var(--_on-surface);border-left:var(--eds-bw-m) solid var(--_border-color);border-radius:var(--eds-br-s);box-shadow:var(--eds-sh-3);pointer-events:auto;animation:eds-growl-fade-in .2s ease-out}.eui-21 :host .eds-growl__item--info{--_surface: var(--eds-c-surface-info-subtler);--_on-surface: var(--eds-c-on-surface-info-subtler);--_border-color: var(--eds-c-border-info)}.eui-21 :host .eds-growl__item--success{--_surface: var(--eds-c-surface-success-subtler);--_on-surface: var(--eds-c-on-surface-success-subtler);--_border-color: var(--eds-c-border-success)}.eui-21 :host .eds-growl__item--warning{--_surface: var(--eds-c-surface-warning-subtler);--_on-surface: var(--eds-c-on-surface-warning-subtler);--_border-color: var(--eds-c-border-warning)}.eui-21 :host .eds-growl__item--critical{--_surface: var(--eds-c-surface-critical-subtler);--_on-surface: var(--eds-c-on-surface-critical-subtler);--_border-color: var(--eds-c-border-critical)}.eui-21 :host .eds-growl__item--dismiss-all{--_surface: var(--eds-c-surface-neutral-subtler);--_on-surface: var(--eds-c-foreground-default);--_border-color: var(--eds-c-border-divider)}.eui-21 :host .eds-growl__item--slide-up{animation-name:eds-growl-slide-up}.eui-21 :host .eds-growl__item--slide-down{animation-name:eds-growl-slide-down}.eui-21 :host .eds-growl__header{display:flex;align-items:center;gap:var(--eds-sp-xs);padding-right:var(--eds-sp-xl)}.eui-21 :host .eds-growl__title{font:var(--eds-f-label-m-semibold);color:var(--_on-surface)}.eui-21 :host .eds-growl__content{margin-top:var(--eds-sp-2xs);padding-left:calc(var(--eds-sp-xs) + 1.25rem);font:var(--eds-f-paragraph-s);color:var(--_on-surface);max-height:60vh;overflow-y:auto;overflow-wrap:break-word}.eui-21 :host .eds-growl__content a{text-decoration:underline}.eui-21 :host .eds-growl__close{position:absolute;top:var(--eds-sp-xs);right:var(--eds-sp-xs)}@keyframes eds-growl-fade-in{0%{opacity:0}to{opacity:1}}@keyframes eds-growl-slide-up{0%{opacity:0;transform:translateY(1rem)}to{opacity:1;transform:translateY(0)}}@keyframes eds-growl-slide-down{0%{opacity:0;transform:translateY(-1rem)}to{opacity:1;transform:translateY(0)}}@media screen and (max-width:767px){.eui-21 :host{width:calc(100vw - 2 * var(--eds-sp-m))}.eui-21 :host.eds-growl--bottom-left,.eui-21 :host.eds-growl--bottom-center,.eui-21 :host.eds-growl--bottom-right{bottom:var(--eds-sp-m);left:var(--eds-sp-m);right:var(--eds-sp-m);transform:none}.eui-21 :host.eds-growl--top-left,.eui-21 :host.eds-growl--top-center,.eui-21 :host.eds-growl--top-right{top:var(--eds-sp-m);left:var(--eds-sp-m);right:var(--eds-sp-m);transform:none}}\n"], dependencies: [{ kind: "component", type: i1.EdsIconButton, selector: "button[edsIconButton]", inputs: ["icon", "color", "size", "ariaLabel", "rounded", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: i2.EdsIconState, selector: "eds-icon-state", inputs: ["color", "size", "ariaLabel", "e2eAttr"] }, { kind: "component", type: i3.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
166
166
  }
167
167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsGrowl, decorators: [{
168
168
  type: Component,