@eui/eds 22.0.0-alpha.21 → 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 +61 -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-growl.mjs","sources":["../../eds-growl/eds-growl.ts","../../eds-growl/eds-growl.html","../../eds-growl/eds-growl.service.ts","../../eds-growl/index.ts","../../eds-growl/eui-eds-eds-growl.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\nimport { EDS_ICON_STATE } from '@eui/eds/utilities/eds-icon-state';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EdsColorToken } from '@eui/eds/shared';\n\nimport { EdsGrowlMessage, EdsGrowlSeverity } from './eds-growl-message.model';\nimport { EdsGrowlPosition } from './eds-growl.service';\n\n/**\n * Notification component that displays temporary or persistent messages to users.\n * Supports multiple message types (success, info, warning, critical) with automatic dismissal or sticky behavior.\n * Messages can be positioned in different screen locations and include customizable lifecycle durations.\n * Implements ARIA live regions for accessibility, announcing messages to screen readers.\n *\n * Can be used standalone with direct `[value]` binding, or together with `EdsGrowlService`\n * for centralized application-wide notifications.\n *\n * @usageNotes\n * ### With EdsGrowlService (recommended)\n * ```typescript\n * private growlService = inject(EdsGrowlService);\n *\n * showSuccess() {\n * this.growlService.growlSuccess('Operation completed');\n * }\n * ```\n * ```html\n * <eds-growl [value]=\"growlService.messages()\"\n * [position]=\"growlService.position()\"\n * [sticky]=\"growlService.isSticky()\"\n * [life]=\"growlService.life()\"\n * [ariaLive]=\"growlService.ariaLive()\"\n * [callback]=\"growlService.callback()\" />\n * ```\n *\n * ### Standalone usage\n * ```html\n * <eds-growl [value]=\"messages\" position=\"top-right\" />\n * ```\n */\n@Component({\n selector: 'eds-growl',\n templateUrl: './eds-growl.html',\n styleUrl: './eds-growl.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ...EDS_ICON_BUTTON,\n ...EDS_ICON_STATE,\n ...EDS_ICON,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.role]': 'hostRole()',\n '[attr.aria-live]': 'ariaLive()',\n 'aria-atomic': 'true',\n '[attr.aria-labelledby]': 'value().length ? titleId : null',\n '[attr.aria-describedby]': 'value().length ? contentId : null',\n '(click)': 'onClick()',\n },\n})\nexport class EdsGrowl {\n protected titleId = `eds-growl-title-${crypto.randomUUID().slice(0, 8)}`;\n protected contentId = `eds-growl-detail-${crypto.randomUUID().slice(0, 8)}`;\n\n /**\n * Data attribute used for end-to-end testing identification.\n * @default 'eds-growl'\n */\n readonly e2eAttr = input('eds-growl');\n\n /**\n * ARIA live region politeness level controlling how screen readers announce messages.\n * @default 'polite'\n */\n readonly ariaLive = input<'off' | 'polite' | 'assertive'>('polite');\n\n /**\n * Prevents automatic dismissal of messages, requiring manual close.\n * @default false\n */\n readonly sticky = input(false, { transform: booleanAttribute });\n\n /**\n * Duration in milliseconds before non-sticky messages automatically dismiss.\n * @default 3000\n */\n readonly life = input(3000);\n\n /**\n * Array of message objects to display.\n */\n readonly value = model<EdsGrowlMessage[]>([]);\n\n /**\n * Enables display of a dismiss-all button when multiple sticky messages are present.\n * @default false\n */\n readonly closeAllSticky = input(false, { transform: booleanAttribute });\n\n /**\n * Screen position where growl messages appear.\n * @default 'bottom-right'\n */\n readonly position = input<EdsGrowlPosition>('bottom-right');\n\n /**\n * Optional callback function executed when a growl message is clicked.\n */\n readonly callback = input<(() => void) | null>(null);\n\n /**\n * Emitted when a growl message is clicked by the user.\n */\n readonly growlClick = output<void>();\n\n /**\n * Emitted when a growl message is closed.\n */\n readonly growlClose = output<void>();\n\n protected hostClasses = computed(() =>\n ['eds-growl', `eds-growl--${this.position()}`].join(' ').trim(),\n );\n\n /**\n * Resolves the ARIA role based on the current aria-live setting.\n * Uses 'alert' for assertive announcements (critical/urgent), 'status' otherwise.\n * Per WAI-ARIA APG: role=\"alert\" has implicit aria-live=\"assertive\" and is for\n * important, time-sensitive messages. role=\"status\" is for advisory info.\n */\n protected hostRole = computed(() =>\n this.ariaLive() === 'assertive' ? 'alert' : 'status',\n );\n\n private previousMessages: EdsGrowlMessage[] = [];\n\n constructor() {\n effect(() => {\n const current = this.value();\n // Clear timeouts for removed messages\n this.previousMessages\n .filter(msg => !current.includes(msg))\n .forEach(msg => clearTimeout(msg?.timeout));\n // Set timeouts for newly added messages\n current\n .filter(msg => !this.previousMessages.includes(msg))\n .forEach(msg => this.createRemovalTimeout(msg));\n this.previousMessages = current;\n });\n }\n\n /** Removes a single message from the stack. */\n remove(msg: EdsGrowlMessage): void {\n msg.dismissed = true;\n clearTimeout(msg.timeout);\n msg.timeout = undefined;\n this.value.update(msgs => {\n const idx = msgs.indexOf(msg);\n if (idx === -1) return msgs;\n const updated = [...msgs];\n updated.splice(idx, 1);\n return updated;\n });\n this.growlClose.emit();\n }\n\n /** Removes all growl messages. */\n removeAll(): void {\n if (this.value()?.length) {\n this.value.set([]);\n }\n }\n\n /** Handles host click — invokes callback and emits event. */\n onClick(): void {\n const cb = this.callback();\n if (cb) {\n cb();\n }\n this.growlClick.emit();\n }\n\n /** Maps severity to the EDS color variant for the icon-state component. */\n protected severityToColor(severity: EdsGrowlSeverity): EdsColorToken {\n return severity === 'critical' ? 'critical' : severity;\n }\n\n /** Whether more than two sticky messages are present (triggers dismiss-all button). */\n protected isMoreThanTwo(): boolean {\n return this.value().filter(m => m.sticky).length > 2;\n }\n\n private createRemovalTimeout(msg: EdsGrowlMessage): void {\n if (!msg.sticky && !msg.timeout) {\n msg.timeout = setTimeout(\n () => this.remove(msg),\n msg.life || this.life(),\n ) as unknown as number;\n }\n }\n}\n","@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","import { Injectable, signal } from '@angular/core';\n\nimport { EdsGrowlMessage, EdsGrowlSeverity } from './eds-growl-message.model';\n\n/** Position options for the growl notification container. */\nexport type EdsGrowlPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/**\n * Centralized service for managing application-wide `eds-growl` notifications.\n * Provides methods to display success, critical, warning, and info messages with configurable behavior.\n * Uses Angular signals for reactive state management.\n * Injected at root level, ensuring a single instance across the entire application.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EdsGrowlService {\n /** Current list of growl messages. */\n readonly messages = signal<EdsGrowlMessage[]>([]);\n\n /** Whether the current batch of messages should be sticky. */\n readonly isSticky = signal(false);\n\n /** Auto-dismiss duration in milliseconds. */\n readonly life = signal(3000);\n\n /** Screen position of the growl container. */\n readonly position = signal<EdsGrowlPosition>('bottom-right');\n\n /** ARIA live region politeness level. */\n readonly ariaLive = signal<'off' | 'polite' | 'assertive'>('polite');\n\n /** Optional callback executed on message click. */\n readonly callback = signal<(() => void) | null>(null);\n\n /**\n * Displays a growl notification message.\n *\n * @param msg - Message object with severity, summary, and detail\n * @param options - Optional configuration overrides\n */\n growl(\n msg: EdsGrowlMessage,\n options?: {\n isSticky?: boolean;\n isMultiple?: boolean;\n life?: number;\n position?: EdsGrowlPosition;\n callback?: () => void;\n ariaLive?: 'off' | 'polite' | 'assertive';\n },\n ): void {\n const validSeverities: EdsGrowlSeverity[] = ['info', 'warning', 'success', 'critical'];\n if (!validSeverities.includes(msg.severity)) {\n throw new Error(\n `EdsGrowlService.growl() ERROR: message severity must be one of: ${validSeverities.join(', ')}`,\n );\n }\n\n const {\n isSticky,\n isMultiple = false,\n life,\n position,\n callback,\n ariaLive,\n } = options ?? {};\n\n // Apply life override to message\n if (life !== undefined && !isNaN(life)) {\n msg.life = life;\n this.life.set(life);\n } else if (msg.severity === 'critical') {\n // Critical messages default to sticky\n msg.sticky = msg.sticky ?? true;\n } else {\n this.life.set(3000);\n }\n\n // Apply sticky\n if (isSticky !== undefined) {\n msg.sticky = isSticky;\n this.isSticky.set(isSticky);\n } else {\n this.isSticky.set(msg.sticky ?? false);\n }\n\n if (position) {\n this.position.set(position);\n }\n\n if (callback) {\n this.callback.set(callback);\n } else {\n this.callback.set(null);\n }\n\n if (ariaLive) {\n this.ariaLive.set(ariaLive);\n }\n\n const base = isMultiple ? this.messages().filter(m => !m.dismissed) : [];\n this.messages.set([...base, msg]);\n }\n\n /** Removes all currently displayed growl messages. */\n clearGrowl(): void {\n this.messages.set([]);\n }\n\n /** Displays a success growl notification. */\n growlSuccess(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'success', summary: 'Success', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays a critical/error growl notification. */\n growlCritical(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'critical', summary: 'Error', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays a warning growl notification. */\n growlWarning(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'warning', summary: 'Warning', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays an informational growl notification. */\n growlInfo(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'info', summary: 'Info', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n}\n","import { EdsGrowl } from './eds-growl';\n\nexport * from './eds-growl';\nexport * from './eds-growl.service';\nexport * from './eds-growl-message.model';\n\n/** Convenience array for importing all eds-growl components. */\nexport const EDS_GROWL = [EdsGrowl] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eui-eds-eds-growl.mjs","sources":["../../eds-growl/eds-growl.ts","../../eds-growl/eds-growl.html","../../eds-growl/eds-growl.service.ts","../../eds-growl/index.ts","../../eds-growl/eui-eds-eds-growl.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\nimport { EDS_ICON_STATE } from '@eui/eds/eds-icon-state';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EdsColorToken } from '@eui/eds/shared';\n\nimport { EdsGrowlMessage, EdsGrowlSeverity } from './eds-growl-message.model';\nimport { EdsGrowlPosition } from './eds-growl.service';\n\n/**\n * Notification component that displays temporary or persistent messages to users.\n * Supports multiple message types (success, info, warning, critical) with automatic dismissal or sticky behavior.\n * Messages can be positioned in different screen locations and include customizable lifecycle durations.\n * Implements ARIA live regions for accessibility, announcing messages to screen readers.\n *\n * Can be used standalone with direct `[value]` binding, or together with `EdsGrowlService`\n * for centralized application-wide notifications.\n *\n * @usageNotes\n * ### With EdsGrowlService (recommended)\n * ```typescript\n * private growlService = inject(EdsGrowlService);\n *\n * showSuccess() {\n * this.growlService.growlSuccess('Operation completed');\n * }\n * ```\n * ```html\n * <eds-growl [value]=\"growlService.messages()\"\n * [position]=\"growlService.position()\"\n * [sticky]=\"growlService.isSticky()\"\n * [life]=\"growlService.life()\"\n * [ariaLive]=\"growlService.ariaLive()\"\n * [callback]=\"growlService.callback()\" />\n * ```\n *\n * ### Standalone usage\n * ```html\n * <eds-growl [value]=\"messages\" position=\"top-right\" />\n * ```\n */\n@Component({\n selector: 'eds-growl',\n templateUrl: './eds-growl.html',\n styleUrl: './eds-growl.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ...EDS_ICON_BUTTON,\n ...EDS_ICON_STATE,\n ...EDS_ICON,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.role]': 'hostRole()',\n '[attr.aria-live]': 'ariaLive()',\n 'aria-atomic': 'true',\n '[attr.aria-labelledby]': 'value().length ? titleId : null',\n '[attr.aria-describedby]': 'value().length ? contentId : null',\n '(click)': 'onClick()',\n },\n})\nexport class EdsGrowl {\n protected titleId = `eds-growl-title-${crypto.randomUUID().slice(0, 8)}`;\n protected contentId = `eds-growl-detail-${crypto.randomUUID().slice(0, 8)}`;\n\n /**\n * Data attribute used for end-to-end testing identification.\n * @default 'eds-growl'\n */\n readonly e2eAttr = input('eds-growl');\n\n /**\n * ARIA live region politeness level controlling how screen readers announce messages.\n * @default 'polite'\n */\n readonly ariaLive = input<'off' | 'polite' | 'assertive'>('polite');\n\n /**\n * Prevents automatic dismissal of messages, requiring manual close.\n * @default false\n */\n readonly sticky = input(false, { transform: booleanAttribute });\n\n /**\n * Duration in milliseconds before non-sticky messages automatically dismiss.\n * @default 3000\n */\n readonly life = input(3000);\n\n /**\n * Array of message objects to display.\n */\n readonly value = model<EdsGrowlMessage[]>([]);\n\n /**\n * Enables display of a dismiss-all button when multiple sticky messages are present.\n * @default false\n */\n readonly closeAllSticky = input(false, { transform: booleanAttribute });\n\n /**\n * Screen position where growl messages appear.\n * @default 'bottom-right'\n */\n readonly position = input<EdsGrowlPosition>('bottom-right');\n\n /**\n * Optional callback function executed when a growl message is clicked.\n */\n readonly callback = input<(() => void) | null>(null);\n\n /**\n * Emitted when a growl message is clicked by the user.\n */\n readonly growlClick = output<void>();\n\n /**\n * Emitted when a growl message is closed.\n */\n readonly growlClose = output<void>();\n\n protected hostClasses = computed(() =>\n ['eds-growl', `eds-growl--${this.position()}`].join(' ').trim(),\n );\n\n /**\n * Resolves the ARIA role based on the current aria-live setting.\n * Uses 'alert' for assertive announcements (critical/urgent), 'status' otherwise.\n * Per WAI-ARIA APG: role=\"alert\" has implicit aria-live=\"assertive\" and is for\n * important, time-sensitive messages. role=\"status\" is for advisory info.\n */\n protected hostRole = computed(() =>\n this.ariaLive() === 'assertive' ? 'alert' : 'status',\n );\n\n private previousMessages: EdsGrowlMessage[] = [];\n\n constructor() {\n effect(() => {\n const current = this.value();\n // Clear timeouts for removed messages\n this.previousMessages\n .filter(msg => !current.includes(msg))\n .forEach(msg => clearTimeout(msg?.timeout));\n // Set timeouts for newly added messages\n current\n .filter(msg => !this.previousMessages.includes(msg))\n .forEach(msg => this.createRemovalTimeout(msg));\n this.previousMessages = current;\n });\n }\n\n /** Removes a single message from the stack. */\n remove(msg: EdsGrowlMessage): void {\n msg.dismissed = true;\n clearTimeout(msg.timeout);\n msg.timeout = undefined;\n this.value.update(msgs => {\n const idx = msgs.indexOf(msg);\n if (idx === -1) return msgs;\n const updated = [...msgs];\n updated.splice(idx, 1);\n return updated;\n });\n this.growlClose.emit();\n }\n\n /** Removes all growl messages. */\n removeAll(): void {\n if (this.value()?.length) {\n this.value.set([]);\n }\n }\n\n /** Handles host click — invokes callback and emits event. */\n onClick(): void {\n const cb = this.callback();\n if (cb) {\n cb();\n }\n this.growlClick.emit();\n }\n\n /** Maps severity to the EDS color variant for the icon-state component. */\n protected severityToColor(severity: EdsGrowlSeverity): EdsColorToken {\n return severity === 'critical' ? 'critical' : severity;\n }\n\n /** Whether more than two sticky messages are present (triggers dismiss-all button). */\n protected isMoreThanTwo(): boolean {\n return this.value().filter(m => m.sticky).length > 2;\n }\n\n private createRemovalTimeout(msg: EdsGrowlMessage): void {\n if (!msg.sticky && !msg.timeout) {\n msg.timeout = setTimeout(\n () => this.remove(msg),\n msg.life || this.life(),\n ) as unknown as number;\n }\n }\n}\n","@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","import { Injectable, signal } from '@angular/core';\n\nimport { EdsGrowlMessage, EdsGrowlSeverity } from './eds-growl-message.model';\n\n/** Position options for the growl notification container. */\nexport type EdsGrowlPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/**\n * Centralized service for managing application-wide `eds-growl` notifications.\n * Provides methods to display success, critical, warning, and info messages with configurable behavior.\n * Uses Angular signals for reactive state management.\n * Injected at root level, ensuring a single instance across the entire application.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class EdsGrowlService {\n /** Current list of growl messages. */\n readonly messages = signal<EdsGrowlMessage[]>([]);\n\n /** Whether the current batch of messages should be sticky. */\n readonly isSticky = signal(false);\n\n /** Auto-dismiss duration in milliseconds. */\n readonly life = signal(3000);\n\n /** Screen position of the growl container. */\n readonly position = signal<EdsGrowlPosition>('bottom-right');\n\n /** ARIA live region politeness level. */\n readonly ariaLive = signal<'off' | 'polite' | 'assertive'>('polite');\n\n /** Optional callback executed on message click. */\n readonly callback = signal<(() => void) | null>(null);\n\n /**\n * Displays a growl notification message.\n *\n * @param msg - Message object with severity, summary, and detail\n * @param options - Optional configuration overrides\n */\n growl(\n msg: EdsGrowlMessage,\n options?: {\n isSticky?: boolean;\n isMultiple?: boolean;\n life?: number;\n position?: EdsGrowlPosition;\n callback?: () => void;\n ariaLive?: 'off' | 'polite' | 'assertive';\n },\n ): void {\n const validSeverities: EdsGrowlSeverity[] = ['info', 'warning', 'success', 'critical'];\n if (!validSeverities.includes(msg.severity)) {\n throw new Error(\n `EdsGrowlService.growl() ERROR: message severity must be one of: ${validSeverities.join(', ')}`,\n );\n }\n\n const {\n isSticky,\n isMultiple = false,\n life,\n position,\n callback,\n ariaLive,\n } = options ?? {};\n\n // Apply life override to message\n if (life !== undefined && !isNaN(life)) {\n msg.life = life;\n this.life.set(life);\n } else if (msg.severity === 'critical') {\n // Critical messages default to sticky\n msg.sticky = msg.sticky ?? true;\n } else {\n this.life.set(3000);\n }\n\n // Apply sticky\n if (isSticky !== undefined) {\n msg.sticky = isSticky;\n this.isSticky.set(isSticky);\n } else {\n this.isSticky.set(msg.sticky ?? false);\n }\n\n if (position) {\n this.position.set(position);\n }\n\n if (callback) {\n this.callback.set(callback);\n } else {\n this.callback.set(null);\n }\n\n if (ariaLive) {\n this.ariaLive.set(ariaLive);\n }\n\n const base = isMultiple ? this.messages().filter(m => !m.dismissed) : [];\n this.messages.set([...base, msg]);\n }\n\n /** Removes all currently displayed growl messages. */\n clearGrowl(): void {\n this.messages.set([]);\n }\n\n /** Displays a success growl notification. */\n growlSuccess(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'success', summary: 'Success', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays a critical/error growl notification. */\n growlCritical(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'critical', summary: 'Error', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays a warning growl notification. */\n growlWarning(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'warning', summary: 'Warning', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n\n /** Displays an informational growl notification. */\n growlInfo(msg: string, position?: EdsGrowlPosition): void {\n this.growl(\n { severity: 'info', summary: 'Info', detail: msg },\n { isSticky: false, isMultiple: false, position },\n );\n }\n}\n","import { EdsGrowl } from './eds-growl';\n\nexport * from './eds-growl';\nexport * from './eds-growl.service';\nexport * from './eds-growl-message.model';\n\n/** Convenience array for importing all eds-growl components. */\nexport const EDS_GROWL = [EdsGrowl] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@eui/eds/eds-icon';
4
+ import { EDS_ICON } from '@eui/eds/eds-icon';
5
+
6
+ class EdsIconState {
7
+ constructor() {
8
+ /**
9
+ * Semantic status color, selecting the corresponding status icon.
10
+ * @default 'info'
11
+ */
12
+ this.color = input('info', /* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
14
+ /**
15
+ * Size of the status icon.
16
+ * @default 'm'
17
+ */
18
+ this.size = input('m', /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
20
+ /**
21
+ * Accessible label for screen readers describing the icon's purpose or meaning.
22
+ * When empty, a sensible per-color default is used (e.g. "EDS success icon").
23
+ */
24
+ this.ariaLabel = input('', /* @ts-ignore */
25
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
26
+ /**
27
+ * Data attribute value for end-to-end testing identification.
28
+ * @default 'eds-icon-state'
29
+ */
30
+ this.e2eAttr = input('eds-icon-state', /* @ts-ignore */
31
+ ...(ngDevMode ? [{ debugName: "e2eAttr" }] : /* istanbul ignore next */ []));
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsIconState, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsIconState, isStandalone: true, selector: "eds-icon-state", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.color": "color()", "attr.size": "size()", "attr.data-e2e": "e2eAttr()" } }, ngImport: i0, template: "@switch (color()) {\n @case ('success') {\n <eds-icon icon=\"check-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS success icon'\" color=\"success\" [size]=\"size()\" />\n }\n @case ('warning') {\n <eds-icon icon=\"warning:core\" [ariaLabel]=\"ariaLabel() || 'EDS warning icon'\" color=\"warning\" [size]=\"size()\" />\n }\n @case ('critical') {\n <eds-icon icon=\"warning-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS danger icon'\" color=\"critical\" [size]=\"size()\" />\n }\n @case ('info') {\n <eds-icon icon=\"info:core\" [ariaLabel]=\"ariaLabel() || 'EDS info icon'\" color=\"info\" [size]=\"size()\" />\n }\n}\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsIconState, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'eds-icon-state', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
39
+ ...EDS_ICON,
40
+ ], host: {
41
+ '[attr.color]': 'color()',
42
+ '[attr.size]': 'size()',
43
+ '[attr.data-e2e]': 'e2eAttr()',
44
+ }, template: "@switch (color()) {\n @case ('success') {\n <eds-icon icon=\"check-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS success icon'\" color=\"success\" [size]=\"size()\" />\n }\n @case ('warning') {\n <eds-icon icon=\"warning:core\" [ariaLabel]=\"ariaLabel() || 'EDS warning icon'\" color=\"warning\" [size]=\"size()\" />\n }\n @case ('critical') {\n <eds-icon icon=\"warning-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS danger icon'\" color=\"critical\" [size]=\"size()\" />\n }\n @case ('info') {\n <eds-icon icon=\"info:core\" [ariaLabel]=\"ariaLabel() || 'EDS info icon'\" color=\"info\" [size]=\"size()\" />\n }\n}\n", styles: [":host{display:flex}\n"] }]
45
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }] } });
46
+
47
+ const EDS_ICON_STATE = [
48
+ EdsIconState,
49
+ ];
50
+
51
+ /**
52
+ * Generated bundle index. Do not edit.
53
+ */
54
+
55
+ export { EDS_ICON_STATE, EdsIconState };
56
+ //# sourceMappingURL=eui-eds-eds-icon-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eui-eds-eds-icon-state.mjs","sources":["../../eds-icon-state/eds-icon-state.ts","../../eds-icon-state/eds-icon-state.html","../../eds-icon-state/index.ts","../../eds-icon-state/eui-eds-eds-icon-state.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n/**\n * Local narrowed color union — the icon-state's color contract.\n * Each value maps to a specific status icon.\n */\nexport type EdsIconStateColor = 'info' | 'success' | 'warning' | 'critical';\n\n/**\n * Local narrowed size union — the icon-state's size contract.\n */\nexport type EdsIconStateSize = '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl';\n\n@Component({\n selector: 'eds-icon-state',\n templateUrl: './eds-icon-state.html',\n styleUrl: './eds-icon-state.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ...EDS_ICON,\n ],\n host: {\n '[attr.color]': 'color()',\n '[attr.size]': 'size()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsIconState {\n /**\n * Semantic status color, selecting the corresponding status icon.\n * @default 'info'\n */\n color = input<EdsIconStateColor>('info');\n\n /**\n * Size of the status icon.\n * @default 'm'\n */\n size = input<EdsIconStateSize>('m');\n\n /**\n * Accessible label for screen readers describing the icon's purpose or meaning.\n * When empty, a sensible per-color default is used (e.g. \"EDS success icon\").\n */\n ariaLabel = input<string>('');\n\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-icon-state'\n */\n e2eAttr = input('eds-icon-state');\n}\n","@switch (color()) {\n @case ('success') {\n <eds-icon icon=\"check-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS success icon'\" color=\"success\" [size]=\"size()\" />\n }\n @case ('warning') {\n <eds-icon icon=\"warning:core\" [ariaLabel]=\"ariaLabel() || 'EDS warning icon'\" color=\"warning\" [size]=\"size()\" />\n }\n @case ('critical') {\n <eds-icon icon=\"warning-circle:core\" [ariaLabel]=\"ariaLabel() || 'EDS danger icon'\" color=\"critical\" [size]=\"size()\" />\n }\n @case ('info') {\n <eds-icon icon=\"info:core\" [ariaLabel]=\"ariaLabel() || 'EDS info icon'\" color=\"info\" [size]=\"size()\" />\n }\n}\n","import { EdsIconState } from './eds-icon-state';\n\nexport * from './eds-icon-state';\n\nexport const EDS_ICON_STATE = [\n EdsIconState,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MA4Ba,YAAY,CAAA;AAdzB,IAAA,WAAA,GAAA;AAeI;;;AAGG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAoB,MAAM;kFAAC;AAExC;;;AAGG;QACH,IAAA,CAAA,IAAI,GAAG,KAAK,CAAmB,GAAG;iFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE;sFAAC;AAE7B;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,gBAAgB;oFAAC;AACpC,IAAA;8GAxBY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,6qBC5BzB,mqBAcA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDca,YAAY,EAAA,UAAA,EAAA,CAAA;kBAdxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;AACL,wBAAA,GAAG,QAAQ;qBACd,EAAA,IAAA,EACK;AACF,wBAAA,cAAc,EAAE,SAAS;AACzB,wBAAA,aAAa,EAAE,QAAQ;AACvB,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,mqBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA;;;AEtBE,MAAM,cAAc,GAAG;IAC1B,YAAY;;;ACLhB;;AAEG;;;;"}
@@ -53,26 +53,23 @@ class EdsInputButton {
53
53
  * Ignored when edsButtonPositionStart is true. Defaults to true.
54
54
  */
55
55
  this.edsButtonPositionEnd = input(true, { ...(ngDevMode ? { debugName: "edsButtonPositionEnd" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
56
- this.hostClasses = computed(() => {
57
- return [
58
- 'eds-input-button',
59
- this.edsButtonPositionEnd() && !this.edsButtonPositionStart() ? 'eds-input-button--end' : '',
60
- this.edsButtonPositionStart() ? 'eds-input-button--start' : '',
61
- ]
62
- .join(' ')
63
- .trim();
64
- }, /* @ts-ignore */
65
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
56
+ /**
57
+ * Resolved button position, reflected as the `position` host attribute.
58
+ * `start` takes precedence when both inputs are set.
59
+ */
60
+ this.position = computed(() => this.edsButtonPositionStart() ? 'start' : 'end', /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
66
62
  }
67
63
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputButton, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
68
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputButton, isStandalone: true, selector: "eds-input-button", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, edsButtonPositionStart: { classPropertyName: "edsButtonPositionStart", publicName: "edsButtonPositionStart", isSignal: true, isRequired: false, transformFunction: null }, edsButtonPositionEnd: { classPropertyName: "edsButtonPositionEnd", publicName: "edsButtonPositionEnd", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()" } }, ngImport: i0, template: "<ng-content />\n<ng-content select=\"button\"/>\n", styles: [".eui-21 :host{display:flex;width:100%;border-radius:var(--eds-br-s)}.eui-21 :host ::ng-deep .eds-button{border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);background-color:var(--eds-c-surface-elevation);position:relative}.eui-21 :host.eds-input-button--start{flex-direction:row-reverse}.eui-21 :host.eds-input-button--start ::ng-deep .eds-button{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.eui-21 :host.eds-input-button--start ::ng-deep .eds-button:after{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;right:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host.eds-input-button--start ::ng-deep .eds-input-text{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host.eds-input-button--end ::ng-deep .eds-button{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host.eds-input-button--end ::ng-deep .eds-button:before{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;left:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host.eds-input-button--end ::ng-deep .eds-input-text{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputButton, isStandalone: true, selector: "eds-input-button", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, edsButtonPositionStart: { classPropertyName: "edsButtonPositionStart", publicName: "edsButtonPositionStart", isSignal: true, isRequired: false, transformFunction: null }, edsButtonPositionEnd: { classPropertyName: "edsButtonPositionEnd", publicName: "edsButtonPositionEnd", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.position": "position()", "attr.data-e2e": "e2eAttr()" }, classAttribute: "eds-input-button" }, ngImport: i0, template: "<ng-content />\n<ng-content select=\"button\"/>\n", styles: [".eui-21 :host{display:flex;width:100%;border-radius:var(--eds-br-s)}.eui-21 :host ::ng-deep .eds-button{border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);background-color:var(--eds-c-surface-elevation);position:relative}.eui-21 :host([position=start]){flex-direction:row-reverse}.eui-21 :host([position=start]) ::ng-deep .eds-button{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.eui-21 :host([position=start]) ::ng-deep .eds-button:after{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;right:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host([position=start]) ::ng-deep .eds-input-text{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host([position=end]) ::ng-deep .eds-button{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host([position=end]) ::ng-deep .eds-button:before{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;left:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host([position=end]) ::ng-deep .eds-input-text{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
65
  }
70
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputButton, decorators: [{
71
67
  type: Component,
72
68
  args: [{ selector: 'eds-input-button', changeDetection: ChangeDetectionStrategy.OnPush, host: {
73
- '[class]': 'hostClasses()',
69
+ class: 'eds-input-button',
70
+ '[attr.position]': 'position()',
74
71
  '[attr.data-e2e]': 'e2eAttr()',
75
- }, template: "<ng-content />\n<ng-content select=\"button\"/>\n", styles: [".eui-21 :host{display:flex;width:100%;border-radius:var(--eds-br-s)}.eui-21 :host ::ng-deep .eds-button{border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);background-color:var(--eds-c-surface-elevation);position:relative}.eui-21 :host.eds-input-button--start{flex-direction:row-reverse}.eui-21 :host.eds-input-button--start ::ng-deep .eds-button{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.eui-21 :host.eds-input-button--start ::ng-deep .eds-button:after{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;right:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host.eds-input-button--start ::ng-deep .eds-input-text{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host.eds-input-button--end ::ng-deep .eds-button{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host.eds-input-button--end ::ng-deep .eds-button:before{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;left:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host.eds-input-button--end ::ng-deep .eds-input-text{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}\n"] }]
72
+ }, template: "<ng-content />\n<ng-content select=\"button\"/>\n", styles: [".eui-21 :host{display:flex;width:100%;border-radius:var(--eds-br-s)}.eui-21 :host ::ng-deep .eds-button{border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);background-color:var(--eds-c-surface-elevation);position:relative}.eui-21 :host([position=start]){flex-direction:row-reverse}.eui-21 :host([position=start]) ::ng-deep .eds-button{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.eui-21 :host([position=start]) ::ng-deep .eds-button:after{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;right:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host([position=start]) ::ng-deep .eds-input-text{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host([position=end]) ::ng-deep .eds-button{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.eui-21 :host([position=end]) ::ng-deep .eds-button:before{background-color:var(--eds-c-border-divider);content:\"\";display:block;height:1.75rem;left:-1px;position:absolute;top:var(--eds-sp-2xs);width:1px}.eui-21 :host([position=end]) ::ng-deep .eds-input-text{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}\n"] }]
76
73
  }], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], edsButtonPositionStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "edsButtonPositionStart", required: false }] }], edsButtonPositionEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "edsButtonPositionEnd", required: false }] }] } });
77
74
 
78
75
  /** Convenience array for importing all eds-input-button components. */
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-input-button.mjs","sources":["../../eds-input-button/eds-input-button.ts","../../eds-input-button/eds-input-button.html","../../eds-input-button/index.ts","../../eds-input-button/eui-eds-eds-input-button.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, input, computed } from '@angular/core';\n\n/**\n * A layout component that positions button elements relative to input fields.\n * Enables the creation of input groups with leading or trailing action buttons,\n * commonly used for search inputs, password visibility toggles, or clear actions.\n *\n * @usageNotes\n * ### Button at end of input (default)\n * ```html\n * <eds-input-button>\n * <input edsInputText placeholder=\"Search...\" />\n * <button edsButton>Search</button>\n * </eds-input-button>\n * ```\n *\n * ### Button at start of input\n * ```html\n * <eds-input-button [edsButtonPositionStart]=\"true\">\n * <button edsIconButton icon=\"filter\" ariaLabel=\"Filter\"></button>\n * <input edsInputText placeholder=\"Filter results...\" />\n * </eds-input-button>\n * ```\n *\n * ### Accessibility\n * - Button and input maintain separate focus states\n * - Ensure button has descriptive label or aria-label\n * - Tab order follows visual layout\n *\n * ### Notes\n * - Default position is end (right in LTR)\n * - When `edsButtonPositionStart` is true, it overrides end positioning\n * - Works with all button variants (edsButton, edsIconButton)\n * - Commonly used for search, clear, and submit actions\n */\n@Component({\n selector: 'eds-input-button',\n templateUrl: './eds-input-button.html',\n styleUrl: './eds-input-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsInputButton {\n /**\n * Data attribute value for end-to-end testing identification.\n * Applied as data-e2e attribute on the host element.\n * @default 'eds-input-button'\n */\n e2eAttr = input('eds-input-button');\n\n /**\n * Positions the button at the start (left in LTR, right in RTL) of the input field.\n * When true, overrides edsButtonPositionEnd. Defaults to false.\n */\n edsButtonPositionStart = input(false, { transform: booleanAttribute });\n\n /**\n * Positions the button at the end (right in LTR, left in RTL) of the input field.\n * Ignored when edsButtonPositionStart is true. Defaults to true.\n */\n edsButtonPositionEnd = input(true, { transform: booleanAttribute });\n\n hostClasses = computed(() => {\n return [\n 'eds-input-button',\n this.edsButtonPositionEnd() && !this.edsButtonPositionStart() ? 'eds-input-button--end' : '',\n this.edsButtonPositionStart() ? 'eds-input-button--start' : '',\n ]\n .join(' ')\n .trim();\n });\n}\n","<ng-content />\n<ng-content select=\"button\"/>\n","import { EdsInputButton } from './eds-input-button';\n\nexport { EdsInputButton };\n\n/** Convenience array for importing all eds-input-button components. */\nexport const EDS_INPUT_BUTTON = [\n EdsInputButton,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;MAWU,cAAc,CAAA;AAV3B,IAAA,WAAA,GAAA;AAWI;;;;AAIG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,kBAAkB;oFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAC,KAAK,8FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtE;;;AAGG;QACH,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,4FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO;gBACH,kBAAkB;AAClB,gBAAA,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,uBAAuB,GAAG,EAAE;gBAC5F,IAAI,CAAC,sBAAsB,EAAE,GAAG,yBAAyB,GAAG,EAAE;AACjE;iBACI,IAAI,CAAC,GAAG;AACR,iBAAA,IAAI,EAAE;QACf,CAAC;wFAAC;AACL,IAAA;8GA7BY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,wnBC7C3B,mDAEA,EAAA,MAAA,EAAA,CAAA,quCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD2Ca,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,quCAAA,CAAA,EAAA;;;AEvCL;AACO,MAAM,gBAAgB,GAAG;IAC5B,cAAc;;;ACNlB;;AAEG;;;;"}
1
+ {"version":3,"file":"eui-eds-eds-input-button.mjs","sources":["../../eds-input-button/eds-input-button.ts","../../eds-input-button/eds-input-button.html","../../eds-input-button/index.ts","../../eds-input-button/eui-eds-eds-input-button.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, input, computed } from '@angular/core';\n\n/**\n * A layout component that positions button elements relative to input fields.\n * Enables the creation of input groups with leading or trailing action buttons,\n * commonly used for search inputs, password visibility toggles, or clear actions.\n *\n * @usageNotes\n * ### Button at end of input (default)\n * ```html\n * <eds-input-button>\n * <input edsInputText placeholder=\"Search...\" />\n * <button edsButton>Search</button>\n * </eds-input-button>\n * ```\n *\n * ### Button at start of input\n * ```html\n * <eds-input-button [edsButtonPositionStart]=\"true\">\n * <button edsIconButton icon=\"filter\" ariaLabel=\"Filter\"></button>\n * <input edsInputText placeholder=\"Filter results...\" />\n * </eds-input-button>\n * ```\n *\n * ### Accessibility\n * - Button and input maintain separate focus states\n * - Ensure button has descriptive label or aria-label\n * - Tab order follows visual layout\n *\n * ### Notes\n * - Default position is end (right in LTR)\n * - When `edsButtonPositionStart` is true, it overrides end positioning\n * - Works with all button variants (edsButton, edsIconButton)\n * - Commonly used for search, clear, and submit actions\n */\n@Component({\n selector: 'eds-input-button',\n templateUrl: './eds-input-button.html',\n styleUrl: './eds-input-button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'eds-input-button',\n '[attr.position]': 'position()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsInputButton {\n /**\n * Data attribute value for end-to-end testing identification.\n * Applied as data-e2e attribute on the host element.\n * @default 'eds-input-button'\n */\n e2eAttr = input('eds-input-button');\n\n /**\n * Positions the button at the start (left in LTR, right in RTL) of the input field.\n * When true, overrides edsButtonPositionEnd. Defaults to false.\n */\n edsButtonPositionStart = input(false, { transform: booleanAttribute });\n\n /**\n * Positions the button at the end (right in LTR, left in RTL) of the input field.\n * Ignored when edsButtonPositionStart is true. Defaults to true.\n */\n edsButtonPositionEnd = input(true, { transform: booleanAttribute });\n\n /**\n * Resolved button position, reflected as the `position` host attribute.\n * `start` takes precedence when both inputs are set.\n */\n protected readonly position = computed<'start' | 'end'>(() =>\n this.edsButtonPositionStart() ? 'start' : 'end',\n );\n}\n","<ng-content />\n<ng-content select=\"button\"/>\n","import { EdsInputButton } from './eds-input-button';\n\nexport { EdsInputButton };\n\n/** Convenience array for importing all eds-input-button components. */\nexport const EDS_INPUT_BUTTON = [\n EdsInputButton,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;MAYU,cAAc,CAAA;AAX3B,IAAA,WAAA,GAAA;AAYI;;;;AAIG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,kBAAkB;oFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAC,KAAK,8FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtE;;;AAGG;QACH,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,4FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;;AAGG;AACgB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAkB,MACpD,IAAI,CAAC,sBAAsB,EAAE,GAAG,OAAO,GAAG,KAAK;qFAClD;AACJ,IAAA;8GA3BY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,iqBC9C3B,mDAEA,EAAA,MAAA,EAAA,CAAA,2rCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FD4Ca,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,iBAAiB,EAAE,YAAY;AAC/B,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,2rCAAA,CAAA,EAAA;;;AExCL;AACO,MAAM,gBAAgB,GAAG;IAC5B,cAAc;;;ACNlB;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, model, booleanAttribute, computed, inject, ElementRef, effect, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, model, booleanAttribute, inject, ElementRef, effect, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
 
5
5
  class EdsInputCheckbox {
@@ -38,18 +38,6 @@ class EdsInputCheckbox {
38
38
  * @default false
39
39
  */
40
40
  this.isInvalid = input(false, { ...(ngDevMode ? { debugName: "isInvalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
41
- /**
42
- * Computed host CSS classes based on current state.
43
- */
44
- this.hostClasses = computed(() => {
45
- return [
46
- 'eds-input-checkbox',
47
- this.isInvalid() ? 'eds-input-checkbox--invalid' : '',
48
- ]
49
- .join(' ')
50
- .trim();
51
- }, /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
53
41
  this._elementRef = inject(ElementRef);
54
42
  // --- Event handlers ---
55
43
  // ControlValueAccessor callbacks
@@ -96,13 +84,13 @@ class EdsInputCheckbox {
96
84
  }
97
85
  }
98
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputCheckbox, isStandalone: true, selector: "input[edsInputCheckbox]", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", indeterminate: "indeterminateChange" }, host: { attributes: { "type": "checkbox" }, listeners: { "click": "onHostClick($event)", "change": "onHostChange($event)", "blur": "onTouched()", "keydown.space": "onSpacePressed($any($event))" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "checked": "checked()", "disabled": "disabled()", "attr.readonly": "readonly() || null" } }, providers: [
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputCheckbox, isStandalone: true, selector: "input[edsInputCheckbox]", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", indeterminate: "indeterminateChange" }, host: { attributes: { "type": "checkbox" }, listeners: { "click": "onHostClick($event)", "change": "onHostChange($event)", "blur": "onTouched()", "keydown.space": "onSpacePressed($any($event))" }, properties: { "attr.invalid": "isInvalid() || null", "attr.data-e2e": "e2eAttr()", "checked": "checked()", "disabled": "disabled()", "attr.readonly": "readonly() || null" }, classAttribute: "eds-input-checkbox" }, providers: [
100
88
  {
101
89
  provide: NG_VALUE_ACCESSOR,
102
90
  useExisting: forwardRef(() => EdsInputCheckbox),
103
91
  multi: true,
104
92
  },
105
- ], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-checkbox{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;vertical-align:middle;cursor:pointer;width:var(--eds-si-xl);height:var(--eds-si-xl);border-radius:var(--eds-br-xs);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox:before{content:\"\";display:block;width:var(--eds-si-xl);height:var(--eds-si-xl);background-size:contain;background-repeat:no-repeat;background-position:center}.eui-21 :host.eds-input-checkbox:checked{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:indeterminate{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:disabled{background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23a0a0b1' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]):checked{background-color:var(--eds-c-surface-critical);border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
93
+ ], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-checkbox{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;vertical-align:middle;cursor:pointer;width:var(--eds-si-xl);height:var(--eds-si-xl);border-radius:var(--eds-br-xs);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox:before{content:\"\";display:block;width:var(--eds-si-xl);height:var(--eds-si-xl);background-size:contain;background-repeat:no-repeat;background-position:center}.eui-21 :host.eds-input-checkbox:checked{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:indeterminate{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:disabled{background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23a0a0b1' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]):checked{background-color:var(--eds-c-surface-critical);border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-checkbox[invalid]:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
106
94
  }
107
95
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputCheckbox, decorators: [{
108
96
  type: Component,
@@ -114,7 +102,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
114
102
  },
115
103
  ], host: {
116
104
  type: 'checkbox',
117
- '[class]': 'hostClasses()',
105
+ class: 'eds-input-checkbox',
106
+ '[attr.invalid]': 'isInvalid() || null',
118
107
  '[attr.data-e2e]': 'e2eAttr()',
119
108
  '[checked]': 'checked()',
120
109
  '[disabled]': 'disabled()',
@@ -123,7 +112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
123
112
  '(change)': 'onHostChange($event)',
124
113
  '(blur)': 'onTouched()',
125
114
  '(keydown.space)': 'onSpacePressed($any($event))',
126
- }, styles: [".eui-21 :host.eds-input-checkbox{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;vertical-align:middle;cursor:pointer;width:var(--eds-si-xl);height:var(--eds-si-xl);border-radius:var(--eds-br-xs);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox:before{content:\"\";display:block;width:var(--eds-si-xl);height:var(--eds-si-xl);background-size:contain;background-repeat:no-repeat;background-position:center}.eui-21 :host.eds-input-checkbox:checked{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:indeterminate{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:disabled{background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23a0a0b1' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]):checked{background-color:var(--eds-c-surface-critical);border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-checkbox.eds-input-checkbox--invalid:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"] }]
115
+ }, styles: [".eui-21 :host.eds-input-checkbox{appearance:none;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;vertical-align:middle;cursor:pointer;width:var(--eds-si-xl);height:var(--eds-si-xl);border-radius:var(--eds-br-xs);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox:before{content:\"\";display:block;width:var(--eds-si-xl);height:var(--eds-si-xl);background-size:contain;background-repeat:no-repeat;background-position:center}.eui-21 :host.eds-input-checkbox:checked{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:indeterminate{background-color:var(--eds-c-surface-primary);border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-checkbox:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:disabled{background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23a0a0b1' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-checkbox[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-checkbox[readonly]:indeterminate:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23333' d='M6 11h12v2H6z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]):checked{background-color:var(--eds-c-surface-critical);border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-checkbox[invalid]:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='white' d='M9.55 18l-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z'/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-checkbox:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-checkbox[invalid]:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"] }]
127
116
  }], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }, { type: i0.Output, args: ["indeterminateChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], isInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInvalid", required: false }] }] } });
128
117
 
129
118
  /** Convenience array for importing eds-input-checkbox. */
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-input-checkbox.mjs","sources":["../../eds-input-checkbox/eds-input-checkbox.ts","../../eds-input-checkbox/index.ts","../../eds-input-checkbox/eui-eds-eds-input-checkbox.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n model,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputCheckbox]',\n template: '',\n styleUrl: './eds-input-checkbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsInputCheckbox),\n multi: true,\n },\n ],\n host: {\n type: 'checkbox',\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[checked]': 'checked()',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(click)': 'onHostClick($event)',\n '(change)': 'onHostChange($event)',\n '(blur)': 'onTouched()',\n '(keydown.space)': 'onSpacePressed($any($event))',\n },\n})\nexport class EdsInputCheckbox implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-checkbox'\n */\n e2eAttr = input('eds-input-checkbox');\n\n /**\n * Controls the checked state of the checkbox.\n * Two-way bindable model.\n * @default false\n */\n checked = model(false);\n\n /**\n * Controls the indeterminate (mixed) state of the checkbox.\n * @default false\n */\n indeterminate = model(false);\n\n /**\n * Controls whether the checkbox is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the checkbox is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the checkbox shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Computed host CSS classes based on current state.\n */\n hostClasses = computed(() => {\n return [\n 'eds-input-checkbox',\n this.isInvalid() ? 'eds-input-checkbox--invalid' : '',\n ]\n .join(' ')\n .trim();\n });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n\n constructor() {\n // Sync indeterminate property to the native element\n effect(() => {\n const indet = this.indeterminate();\n this._elementRef.nativeElement.indeterminate = indet;\n });\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled is handled via the input signal binding on the host element.\n }\n\n // --- Event handlers ---\n\n // ControlValueAccessor callbacks\n\n protected onTouched: () => void = () => { /* noop */ };\n\n protected onHostClick(event: MouseEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n }\n }\n\n protected onHostChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const isChecked = target.checked;\n this.checked.set(isChecked);\n\n // Clear indeterminate on user interaction\n if (this.indeterminate()) {\n this.indeterminate.set(false);\n }\n\n this._onChange(isChecked);\n }\n\n protected onSpacePressed(event: KeyboardEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _onChange: (value: boolean) => void = () => { /* noop */ };\n}\n","import { EdsInputCheckbox } from './eds-input-checkbox';\n\nexport { EdsInputCheckbox };\n\n/** Convenience array for importing eds-input-checkbox. */\nexport const EDS_INPUT_CHECKBOX = [\n EdsInputCheckbox,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eui-eds-eds-input-checkbox.mjs","sources":["../../eds-input-checkbox/eds-input-checkbox.ts","../../eds-input-checkbox/index.ts","../../eds-input-checkbox/eui-eds-eds-input-checkbox.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n model,\n booleanAttribute,\n effect,\n forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputCheckbox]',\n template: '',\n styleUrl: './eds-input-checkbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsInputCheckbox),\n multi: true,\n },\n ],\n host: {\n type: 'checkbox',\n class: 'eds-input-checkbox',\n '[attr.invalid]': 'isInvalid() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n '[checked]': 'checked()',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(click)': 'onHostClick($event)',\n '(change)': 'onHostChange($event)',\n '(blur)': 'onTouched()',\n '(keydown.space)': 'onSpacePressed($any($event))',\n },\n})\nexport class EdsInputCheckbox implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-checkbox'\n */\n e2eAttr = input('eds-input-checkbox');\n\n /**\n * Controls the checked state of the checkbox.\n * Two-way bindable model.\n * @default false\n */\n checked = model(false);\n\n /**\n * Controls the indeterminate (mixed) state of the checkbox.\n * @default false\n */\n indeterminate = model(false);\n\n /**\n * Controls whether the checkbox is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the checkbox is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the checkbox shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n\n constructor() {\n // Sync indeterminate property to the native element\n effect(() => {\n const indet = this.indeterminate();\n this._elementRef.nativeElement.indeterminate = indet;\n });\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Disabled is handled via the input signal binding on the host element.\n }\n\n // --- Event handlers ---\n\n // ControlValueAccessor callbacks\n\n protected onTouched: () => void = () => { /* noop */ };\n\n protected onHostClick(event: MouseEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n }\n }\n\n protected onHostChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const isChecked = target.checked;\n this.checked.set(isChecked);\n\n // Clear indeterminate on user interaction\n if (this.indeterminate()) {\n this.indeterminate.set(false);\n }\n\n this._onChange(isChecked);\n }\n\n protected onSpacePressed(event: KeyboardEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n private _onChange: (value: boolean) => void = () => { /* noop */ };\n}\n","import { EdsInputCheckbox } from './eds-input-checkbox';\n\nexport { EdsInputCheckbox };\n\n/** Convenience array for importing eds-input-checkbox. */\nexport const EDS_INPUT_CHECKBOX = [\n EdsInputCheckbox,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -53,22 +53,23 @@ class EdsInputIcon {
53
53
  * @default false. When true, overrides edsIconPositionStart positioning.
54
54
  */
55
55
  this.edsIconPositionEnd = input(false, { ...(ngDevMode ? { debugName: "edsIconPositionEnd" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
56
- this.hostClasses = computed(() => [
57
- 'eds-input-icon',
58
- this.edsIconPositionStart() && !this.edsIconPositionEnd() ? 'eds-input-icon--start' : '',
59
- this.edsIconPositionEnd() ? 'eds-input-icon--end' : '',
60
- ].join(' ').trim(), /* @ts-ignore */
61
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
56
+ /**
57
+ * Resolved icon position, reflected as the `position` host attribute.
58
+ * `end` takes precedence when both inputs are set.
59
+ */
60
+ this.position = computed(() => this.edsIconPositionEnd() ? 'end' : 'start', /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
62
62
  }
63
63
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputIcon, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputIcon, isStandalone: true, selector: "eds-input-icon", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, edsIconPositionStart: { classPropertyName: "edsIconPositionStart", publicName: "edsIconPositionStart", isSignal: true, isRequired: false, transformFunction: null }, edsIconPositionEnd: { classPropertyName: "edsIconPositionEnd", publicName: "edsIconPositionEnd", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()" } }, ngImport: i0, template: "<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n", styles: [".eui-21 :host.eds-input-icon{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon-wrapper{align-items:center;display:flex;width:100%;position:relative}.eui-21 :host.eds-input-icon .eds-input-icon__content{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon__icon{position:absolute;display:flex;align-items:center;color:var(--eds-c-foreground-subtle)}.eui-21 :host.eds-input-icon.eds-input-icon--end ::ng-deep .eds-input-text{padding-right:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon.eds-input-icon--end .eds-input-icon__icon{right:var(--eds-sp-s)}.eui-21 :host.eds-input-icon.eds-input-icon--start ::ng-deep .eds-input-text{padding-left:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon.eds-input-icon--start .eds-input-icon__icon{left:var(--eds-sp-xs);top:var(--eds-sp-xs)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputIcon, isStandalone: true, selector: "eds-input-icon", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, edsIconPositionStart: { classPropertyName: "edsIconPositionStart", publicName: "edsIconPositionStart", isSignal: true, isRequired: false, transformFunction: null }, edsIconPositionEnd: { classPropertyName: "edsIconPositionEnd", publicName: "edsIconPositionEnd", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.position": "position()", "attr.data-e2e": "e2eAttr()" }, classAttribute: "eds-input-icon" }, ngImport: i0, template: "<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n", styles: [".eui-21 :host.eds-input-icon{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon-wrapper{align-items:center;display:flex;width:100%;position:relative}.eui-21 :host.eds-input-icon .eds-input-icon__content{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon__icon{position:absolute;display:flex;align-items:center;color:var(--eds-c-foreground-subtle)}.eui-21 :host.eds-input-icon[position=end] ::ng-deep .eds-input-text{padding-right:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon[position=end] .eds-input-icon__icon{right:var(--eds-sp-s)}.eui-21 :host.eds-input-icon[position=start] ::ng-deep .eds-input-text{padding-left:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon[position=start] .eds-input-icon__icon{left:var(--eds-sp-xs);top:var(--eds-sp-xs)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
65
65
  }
66
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputIcon, decorators: [{
67
67
  type: Component,
68
68
  args: [{ selector: 'eds-input-icon', changeDetection: ChangeDetectionStrategy.OnPush, host: {
69
- '[class]': 'hostClasses()',
69
+ class: 'eds-input-icon',
70
+ '[attr.position]': 'position()',
70
71
  '[attr.data-e2e]': 'e2eAttr()',
71
- }, template: "<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n", styles: [".eui-21 :host.eds-input-icon{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon-wrapper{align-items:center;display:flex;width:100%;position:relative}.eui-21 :host.eds-input-icon .eds-input-icon__content{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon__icon{position:absolute;display:flex;align-items:center;color:var(--eds-c-foreground-subtle)}.eui-21 :host.eds-input-icon.eds-input-icon--end ::ng-deep .eds-input-text{padding-right:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon.eds-input-icon--end .eds-input-icon__icon{right:var(--eds-sp-s)}.eui-21 :host.eds-input-icon.eds-input-icon--start ::ng-deep .eds-input-text{padding-left:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon.eds-input-icon--start .eds-input-icon__icon{left:var(--eds-sp-xs);top:var(--eds-sp-xs)}\n"] }]
72
+ }, template: "<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n", styles: [".eui-21 :host.eds-input-icon{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon-wrapper{align-items:center;display:flex;width:100%;position:relative}.eui-21 :host.eds-input-icon .eds-input-icon__content{display:flex;width:100%}.eui-21 :host.eds-input-icon .eds-input-icon__icon{position:absolute;display:flex;align-items:center;color:var(--eds-c-foreground-subtle)}.eui-21 :host.eds-input-icon[position=end] ::ng-deep .eds-input-text{padding-right:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon[position=end] .eds-input-icon__icon{right:var(--eds-sp-s)}.eui-21 :host.eds-input-icon[position=start] ::ng-deep .eds-input-text{padding-left:var(--eds-sp-5xl)}.eui-21 :host.eds-input-icon[position=start] .eds-input-icon__icon{left:var(--eds-sp-xs);top:var(--eds-sp-xs)}\n"] }]
72
73
  }], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], edsIconPositionStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "edsIconPositionStart", required: false }] }], edsIconPositionEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "edsIconPositionEnd", required: false }] }] } });
73
74
 
74
75
  /** Convenience array for importing all eds-input-icon components. */
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-input-icon.mjs","sources":["../../eds-input-icon/eds-input-icon.ts","../../eds-input-icon/eds-input-icon.html","../../eds-input-icon/index.ts","../../eds-input-icon/eui-eds-eds-input-icon.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, input, computed } from '@angular/core';\n\n/**\n * Container component that positions an icon relative to an input field.\n * Supports icon placement at the start (left) or end (right) of the input.\n * Typically used to enhance form inputs with visual indicators like search icons,\n * validation states, or action triggers.\n *\n * @usageNotes\n * ### Icon at start of input (default)\n * ```html\n * <eds-input-icon>\n * <eds-icon icon=\"search\"></eds-icon>\n * <input edsInputText placeholder=\"Search...\" />\n * </eds-input-icon>\n * ```\n *\n * ### Icon at end of input\n * ```html\n * <eds-input-icon [edsIconPositionEnd]=\"true\">\n * <input edsInputText type=\"password\" />\n * <eds-icon icon=\"visibility\"></eds-icon>\n * </eds-input-icon>\n * ```\n *\n * ### Accessibility\n * - Icon should be decorative or have proper aria-label\n * - Input field maintains full keyboard accessibility\n * - Ensure sufficient touch target size for mobile\n *\n * ### Notes\n * - Default position is start (left in LTR)\n * - When both positions are true, end takes precedence\n * - Icon is automatically sized and positioned\n * - Works with all edsInputText variants\n */\n@Component({\n selector: 'eds-input-icon',\n templateUrl: './eds-input-icon.html',\n styleUrl: './eds-input-icon.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsInputIcon {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-icon'\n */\n e2eAttr = input('eds-input-icon');\n\n /**\n * Positions the icon at the start (left in LTR layouts) of the input field.\n * @default true. Mutually exclusive with edsIconPositionEnd — when both are true, end takes precedence.\n */\n edsIconPositionStart = input(true, { transform: booleanAttribute });\n\n /**\n * Positions the icon at the end (right in LTR layouts) of the input field.\n * @default false. When true, overrides edsIconPositionStart positioning.\n */\n edsIconPositionEnd = input(false, { transform: booleanAttribute });\n\n hostClasses = computed(() => [\n 'eds-input-icon',\n this.edsIconPositionStart() && !this.edsIconPositionEnd() ? 'eds-input-icon--start' : '',\n this.edsIconPositionEnd() ? 'eds-input-icon--end' : '',\n ].join(' ').trim());\n}\n","<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n","import { EdsInputIcon } from './eds-input-icon';\n\nexport { EdsInputIcon };\n\n/** Convenience array for importing all eds-input-icon components. */\nexport const EDS_INPUT_ICON = [\n EdsInputIcon,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;MAWU,YAAY,CAAA;AAVzB,IAAA,WAAA,GAAA;AAWI;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,gBAAgB;oFAAC;AAEjC;;;AAGG;QACH,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,4FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;;AAGG;QACH,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC,KAAK,0FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAElE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM;YACzB,gBAAgB;AAChB,YAAA,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,uBAAuB,GAAG,EAAE;YACxF,IAAI,CAAC,kBAAkB,EAAE,GAAG,qBAAqB,GAAG,EAAE;AACzD,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;wFAAC;AACtB,IAAA;8GAxBY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,0mBC9CzB,iQAQA,EAAA,MAAA,EAAA,CAAA,2yBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDsCa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,iQAAA,EAAA,MAAA,EAAA,CAAA,2yBAAA,CAAA,EAAA;;;AExCL;AACO,MAAM,cAAc,GAAG;IAC1B,YAAY;;;ACNhB;;AAEG;;;;"}
1
+ {"version":3,"file":"eui-eds-eds-input-icon.mjs","sources":["../../eds-input-icon/eds-input-icon.ts","../../eds-input-icon/eds-input-icon.html","../../eds-input-icon/index.ts","../../eds-input-icon/eui-eds-eds-input-icon.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, booleanAttribute, input, computed } from '@angular/core';\n\n/**\n * Container component that positions an icon relative to an input field.\n * Supports icon placement at the start (left) or end (right) of the input.\n * Typically used to enhance form inputs with visual indicators like search icons,\n * validation states, or action triggers.\n *\n * @usageNotes\n * ### Icon at start of input (default)\n * ```html\n * <eds-input-icon>\n * <eds-icon icon=\"search\"></eds-icon>\n * <input edsInputText placeholder=\"Search...\" />\n * </eds-input-icon>\n * ```\n *\n * ### Icon at end of input\n * ```html\n * <eds-input-icon [edsIconPositionEnd]=\"true\">\n * <input edsInputText type=\"password\" />\n * <eds-icon icon=\"visibility\"></eds-icon>\n * </eds-input-icon>\n * ```\n *\n * ### Accessibility\n * - Icon should be decorative or have proper aria-label\n * - Input field maintains full keyboard accessibility\n * - Ensure sufficient touch target size for mobile\n *\n * ### Notes\n * - Default position is start (left in LTR)\n * - When both positions are true, end takes precedence\n * - Icon is automatically sized and positioned\n * - Works with all edsInputText variants\n */\n@Component({\n selector: 'eds-input-icon',\n templateUrl: './eds-input-icon.html',\n styleUrl: './eds-input-icon.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'eds-input-icon',\n '[attr.position]': 'position()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsInputIcon {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-icon'\n */\n e2eAttr = input('eds-input-icon');\n\n /**\n * Positions the icon at the start (left in LTR layouts) of the input field.\n * @default true. Mutually exclusive with edsIconPositionEnd — when both are true, end takes precedence.\n */\n edsIconPositionStart = input(true, { transform: booleanAttribute });\n\n /**\n * Positions the icon at the end (right in LTR layouts) of the input field.\n * @default false. When true, overrides edsIconPositionStart positioning.\n */\n edsIconPositionEnd = input(false, { transform: booleanAttribute });\n\n /**\n * Resolved icon position, reflected as the `position` host attribute.\n * `end` takes precedence when both inputs are set.\n */\n protected readonly position = computed<'start' | 'end'>(() =>\n this.edsIconPositionEnd() ? 'end' : 'start',\n );\n}\n","<span class=\"eds-input-icon-wrapper\">\n <span class=\"eds-input-icon__content\">\n <ng-content></ng-content>\n </span>\n <span class=\"eds-input-icon__icon\">\n <ng-content select=\"eds-icon\"></ng-content>\n </span>\n</span>\n","import { EdsInputIcon } from './eds-input-icon';\n\nexport { EdsInputIcon };\n\n/** Convenience array for importing all eds-input-icon components. */\nexport const EDS_INPUT_ICON = [\n EdsInputIcon,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;MAYU,YAAY,CAAA;AAXzB,IAAA,WAAA,GAAA;AAYI;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,gBAAgB;oFAAC;AAEjC;;;AAGG;QACH,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,4FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnE;;;AAGG;QACH,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC,KAAK,0FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAElE;;;AAGG;AACgB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAkB,MACpD,IAAI,CAAC,kBAAkB,EAAE,GAAG,KAAK,GAAG,OAAO;qFAC9C;AACJ,IAAA;8GA1BY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,ipBC/CzB,iQAQA,EAAA,MAAA,EAAA,CAAA,mxBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDuCa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAXxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,iBAAiB,EAAE,YAAY;AAC/B,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,iQAAA,EAAA,MAAA,EAAA,CAAA,mxBAAA,CAAA,EAAA;;;AEzCL;AACO,MAAM,cAAc,GAAG;IAC1B,YAAY;;;ACNhB;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, numberAttribute, computed, inject, ElementRef, LOCALE_ID, PLATFORM_ID, signal, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, booleanAttribute, numberAttribute, inject, ElementRef, LOCALE_ID, PLATFORM_ID, signal, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NgControl } from '@angular/forms';
4
4
  import { DOCUMENT, isPlatformBrowser } from '@angular/common';
5
5
  import * as i1 from '@eui/eds/shared';
@@ -82,16 +82,6 @@ class EdsInputNumber {
82
82
  * @default false
83
83
  */
84
84
  this.noFormat = input(false, { ...(ngDevMode ? { debugName: "noFormat" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
85
- /**
86
- * Computed host CSS classes based on current state.
87
- */
88
- this.hostClasses = computed(() => {
89
- return [
90
- 'eds-input-number',
91
- this._isInvalid() ? 'eds-input-number--invalid' : '',
92
- ].join(' ').trim();
93
- }, /* @ts-ignore */
94
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
95
85
  this._elementRef = inject(ElementRef);
96
86
  this._ngControl = inject(NgControl, { optional: true, self: true });
97
87
  this._localeId = inject(LOCALE_ID);
@@ -283,7 +273,7 @@ class EdsInputNumber {
283
273
  return isNaN(num) ? null : num;
284
274
  }
285
275
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputNumber, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
286
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputNumber, isStandalone: true, selector: "input[edsInputNumber]", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, fractionDigits: { classPropertyName: "fractionDigits", publicName: "fractionDigits", isSignal: true, isRequired: false, transformFunction: null }, fillFraction: { classPropertyName: "fillFraction", publicName: "fillFraction", isSignal: true, isRequired: false, transformFunction: null }, noFormat: { classPropertyName: "noFormat", publicName: "noFormat", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onHostInput($event)", "blur": "onBlur()", "keydown": "onKeyDown($event)", "paste": "onPaste($event)" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "attr.inputmode": "\"decimal\"", "disabled": "disabled()", "attr.readonly": "readonly() || null" } }, hostDirectives: [{ directive: i1.EdsClearableDirective, inputs: ["edsClearable", "edsClearable", "readonly", "readonly", "disabled", "disabled"] }, { directive: i1.EdsLoadingDirective, inputs: ["edsLoading", "edsLoading", "readonly", "readonly"] }], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-number{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%}.eui-21 :host.eds-input-number:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-number:not([hidden]){display:block}.eui-21 :host.eds-input-number::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-number[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-number:disabled:not([readonly]),.eui-21 :host.eds-input-number--disabled:not([readonly]){background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);pointer-events:none}.eui-21 :host.eds-input-number--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-number--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-number--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-number--loading-icon:after,.eui-21 :host.eds-input-number--loading-icon:before{content:\"\";height:var(--eds-sp-l);position:absolute;right:var(--eds-sp-s);width:var(--eds-sp-l)}.eui-21 :host.eds-input-number--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-number--loading-icon:after{animation:loading .6s linear;animation-iteration-count:infinite;border-color:var(--eui-c-white) transparent transparent;border-radius:100%;border-style:solid;border-width:var(--eds-sp-3xs);box-shadow:0 0 0 1px transparent}.eui-21 :host.eds-input-number--loading-icon--sm:after,.eui-21 :host.eds-input-number--loading-icon--sm:before{height:var(--eds-sp-m);width:var(--eds-sp-m)}@keyframes loading{to{transform:rotate(360deg)}}.eui-21 :host.eds-input-number[readonly]{pointer-events:auto}.eui-21 :host.eds-input-number[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-number.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-number.eds-input-number--loading:not(.eds-input-number--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number.eds-input-number--loading.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputNumber, isStandalone: true, selector: "input[edsInputNumber]", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, isInvalid: { classPropertyName: "isInvalid", publicName: "isInvalid", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, fractionDigits: { classPropertyName: "fractionDigits", publicName: "fractionDigits", isSignal: true, isRequired: false, transformFunction: null }, fillFraction: { classPropertyName: "fillFraction", publicName: "fillFraction", isSignal: true, isRequired: false, transformFunction: null }, noFormat: { classPropertyName: "noFormat", publicName: "noFormat", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onHostInput($event)", "blur": "onBlur()", "keydown": "onKeyDown($event)", "paste": "onPaste($event)" }, properties: { "attr.invalid": "_isInvalid() || null", "attr.data-e2e": "e2eAttr()", "attr.inputmode": "\"decimal\"", "disabled": "disabled()", "attr.readonly": "readonly() || null" }, classAttribute: "eds-input-number" }, hostDirectives: [{ directive: i1.EdsClearableDirective, inputs: ["edsClearable", "edsClearable", "readonly", "readonly", "disabled", "disabled"] }, { directive: i1.EdsLoadingDirective, inputs: ["edsLoading", "edsLoading", "readonly", "readonly"] }], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-number{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%}.eui-21 :host.eds-input-number:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-number:not([hidden]){display:block}.eui-21 :host.eds-input-number::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-number[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-number:disabled:not([readonly]),.eui-21 :host.eds-input-number--disabled:not([readonly]){background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);pointer-events:none}.eui-21 :host.eds-input-number--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-number--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-number--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-number--loading-icon:after,.eui-21 :host.eds-input-number--loading-icon:before{content:\"\";height:var(--eds-sp-l);position:absolute;right:var(--eds-sp-s);width:var(--eds-sp-l)}.eui-21 :host.eds-input-number--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-number--loading-icon:after{animation:loading .6s linear;animation-iteration-count:infinite;border-color:var(--eui-c-white) transparent transparent;border-radius:100%;border-style:solid;border-width:var(--eds-sp-3xs);box-shadow:0 0 0 1px transparent}.eui-21 :host.eds-input-number--loading-icon--sm:after,.eui-21 :host.eds-input-number--loading-icon--sm:before{height:var(--eds-sp-m);width:var(--eds-sp-m)}@keyframes loading{to{transform:rotate(360deg)}}.eui-21 :host.eds-input-number[readonly]{pointer-events:auto}.eui-21 :host.eds-input-number[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-number.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-number.eds-input-number--loading:not(.eds-input-number--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number.eds-input-number--loading.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number[invalid]{border-color:var(--eds-c-border-critical)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
287
277
  }
288
278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputNumber, decorators: [{
289
279
  type: Component,
@@ -297,7 +287,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
297
287
  inputs: ['edsLoading', 'readonly'],
298
288
  },
299
289
  ], host: {
300
- '[class]': 'hostClasses()',
290
+ class: 'eds-input-number',
291
+ '[attr.invalid]': '_isInvalid() || null',
301
292
  '[attr.data-e2e]': 'e2eAttr()',
302
293
  '[attr.inputmode]': '"decimal"',
303
294
  '[disabled]': 'disabled()',
@@ -306,7 +297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
306
297
  '(blur)': 'onBlur()',
307
298
  '(keydown)': 'onKeyDown($event)',
308
299
  '(paste)': 'onPaste($event)',
309
- }, styles: [".eui-21 :host.eds-input-number{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%}.eui-21 :host.eds-input-number:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-number:not([hidden]){display:block}.eui-21 :host.eds-input-number::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-number[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-number:disabled:not([readonly]),.eui-21 :host.eds-input-number--disabled:not([readonly]){background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);pointer-events:none}.eui-21 :host.eds-input-number--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-number--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-number--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-number--loading-icon:after,.eui-21 :host.eds-input-number--loading-icon:before{content:\"\";height:var(--eds-sp-l);position:absolute;right:var(--eds-sp-s);width:var(--eds-sp-l)}.eui-21 :host.eds-input-number--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-number--loading-icon:after{animation:loading .6s linear;animation-iteration-count:infinite;border-color:var(--eui-c-white) transparent transparent;border-radius:100%;border-style:solid;border-width:var(--eds-sp-3xs);box-shadow:0 0 0 1px transparent}.eui-21 :host.eds-input-number--loading-icon--sm:after,.eui-21 :host.eds-input-number--loading-icon--sm:before{height:var(--eds-sp-m);width:var(--eds-sp-m)}@keyframes loading{to{transform:rotate(360deg)}}.eui-21 :host.eds-input-number[readonly]{pointer-events:auto}.eui-21 :host.eds-input-number[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-number.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-number.eds-input-number--loading:not(.eds-input-number--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number.eds-input-number--loading.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}\n"] }]
300
+ }, styles: [".eui-21 :host.eds-input-number{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eds-f-paragraph-m);appearance:none;background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);border-radius:var(--eds-br-s);box-shadow:none;color:var(--eds-c-foreground-default);min-height:var(--eds-si-3xl);padding:var(--eds-sp-xs) var(--eds-sp-s);width:100%}.eui-21 :host.eds-input-number:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-number:not([hidden]){display:block}.eui-21 :host.eds-input-number::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-number[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-number:disabled:not([readonly]),.eui-21 :host.eds-input-number--disabled:not([readonly]){background-color:var(--eds-c-suface-disabled);border-color:var(--eds-c-border-disabled);color:var(--eds-c-foreground-subtler);pointer-events:none}.eui-21 :host.eds-input-number--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-number--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-number--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-number--loading-icon:after,.eui-21 :host.eds-input-number--loading-icon:before{content:\"\";height:var(--eds-sp-l);position:absolute;right:var(--eds-sp-s);width:var(--eds-sp-l)}.eui-21 :host.eds-input-number--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-number--loading-icon:after{animation:loading .6s linear;animation-iteration-count:infinite;border-color:var(--eui-c-white) transparent transparent;border-radius:100%;border-style:solid;border-width:var(--eds-sp-3xs);box-shadow:0 0 0 1px transparent}.eui-21 :host.eds-input-number--loading-icon--sm:after,.eui-21 :host.eds-input-number--loading-icon--sm:before{height:var(--eds-sp-m);width:var(--eds-sp-m)}@keyframes loading{to{transform:rotate(360deg)}}.eui-21 :host.eds-input-number[readonly]{pointer-events:auto}.eui-21 :host.eds-input-number[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-number.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-number.eds-input-number--loading:not(.eds-input-number--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number.eds-input-number--loading.eds-input-number--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-number[invalid]{border-color:var(--eds-c-border-critical)}\n"] }]
310
301
  }], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], isInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInvalid", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], fractionDigits: [{ type: i0.Input, args: [{ isSignal: true, alias: "fractionDigits", required: false }] }], fillFraction: [{ type: i0.Input, args: [{ isSignal: true, alias: "fillFraction", required: false }] }], noFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "noFormat", required: false }] }] } });
311
302
 
312
303
  /** Convenience array for importing eds-input-number. */