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

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 +62 -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-input-number.mjs","sources":["../../eds-input-number/eds-input-number.ts","../../eds-input-number/index.ts","../../eds-input-number/eui-eds-eds-input-number.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n signal,\n booleanAttribute,\n numberAttribute,\n computed,\n DoCheck,\n OnInit,\n LOCALE_ID,\n PLATFORM_ID,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { EdsClearableDirective, EdsLoadingDirective } from '@eui/eds/shared';\n\n/**\n * Returns the decimal and group separators for a given locale.\n */\nfunction getLocaleConfig(locale: string): { group: string; decimal: string } {\n const parts = new Intl.NumberFormat(locale, { useGrouping: true }).formatToParts(10000.1);\n return {\n group: parts.find(p => p.type === 'group')?.value || '',\n decimal: parts.find(p => p.type === 'decimal')?.value || '.',\n };\n}\n\n/**\n * EdsInputNumber is a directive-based component that applies number input behavior\n * to a native `<input>` element. It provides locale-aware number formatting with\n * thousand grouping, decimal precision, min/max enforcement, and reactive forms integration.\n *\n * @usageNotes\n * #### Basic usage\n * ```html\n * <input edsInputNumber [(ngModel)]=\"amount\" [fractionDigits]=\"2\" />\n * ```\n *\n * #### With min/max\n * ```html\n * <input edsInputNumber [min]=\"0\" [max]=\"100\" formControlName=\"percentage\" />\n * ```\n *\n * ### Accessibility\n * - Use associated `<label>` with `for` attribute\n * - Invalid state is communicated via CSS class for visual indication\n * - Uses `inputmode=\"decimal\"` for mobile keyboard optimization\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputNumber]',\n template: '',\n styleUrl: './eds-input-number.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: EdsClearableDirective,\n inputs: ['edsClearable', 'readonly', 'disabled'],\n },\n {\n directive: EdsLoadingDirective,\n inputs: ['edsLoading', 'readonly'],\n },\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.inputmode]': '\"decimal\"',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(input)': 'onHostInput($event)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeyDown($event)',\n '(paste)': 'onPaste($event)',\n },\n})\nexport class EdsInputNumber implements ControlValueAccessor, DoCheck, OnInit {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-number'\n */\n e2eAttr = input('eds-input-number');\n\n /**\n * Controls whether the input is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Minimum allowed value. Enforced on blur.\n */\n min = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * Maximum allowed value. Enforced on blur.\n */\n max = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * Number of digits allowed after the decimal point.\n * @default 0\n */\n fractionDigits = input<number, unknown>(0, { transform: (v: unknown) => numberAttribute(v, 0) });\n\n /**\n * Whether to fill the decimal part with trailing zeros.\n * @default false\n */\n fillFraction = input(false, { transform: booleanAttribute });\n\n /**\n * Disables thousand grouping. Number is displayed plain.\n * @default false\n */\n noFormat = input(false, { transform: booleanAttribute });\n\n /**\n * Computed host CSS classes based on current state.\n */\n hostClasses = computed(() => {\n return [\n 'eds-input-number',\n this._isInvalid() ? 'eds-input-number--invalid' : '',\n ].join(' ').trim();\n });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n private _ngControl = inject(NgControl, { optional: true, self: true });\n private _localeId = inject(LOCALE_ID);\n private _document = inject<Document>(DOCUMENT);\n private _platformId = inject(PLATFORM_ID);\n private _isInvalid = signal(false);\n private _localeConfig: { group: string; decimal: string };\n private _rawValue = '';\n\n constructor() {\n if (this._ngControl) {\n this._ngControl.valueAccessor = this;\n }\n this._localeConfig = getLocaleConfig(this._localeId || 'en');\n }\n\n ngOnInit(): void {\n // Apply initial formatting if element has a value attribute\n const initialValue = this._elementRef.nativeElement.value;\n if (initialValue) {\n this._rawValue = initialValue;\n this._elementRef.nativeElement.value = this.formatNumber(initialValue);\n }\n }\n\n ngDoCheck(): void {\n if (this._ngControl) {\n this._isInvalid.set(this._ngControl.invalid && this._ngControl.touched);\n } else {\n this._isInvalid.set(this.isInvalid());\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: number | string | null): void {\n if (value === null || value === undefined || value === '') {\n this._rawValue = '';\n this._elementRef.nativeElement.value = '';\n return;\n }\n this._rawValue = value.toString();\n this._elementRef.nativeElement.value = this.formatNumber(this._rawValue);\n }\n\n registerOnChange(fn: (value: number | string | null) => 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 protected onHostInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const cursorPos = target.selectionStart;\n\n // Extract raw numeric value from formatted input\n const rawValue = this.extractRawValue(target.value);\n this._rawValue = rawValue;\n\n // Re-format the display value\n const formatted = this.formatNumber(rawValue);\n const lengthDiff = formatted.length - target.value.length;\n target.value = formatted;\n\n // Restore cursor position accounting for added/removed formatting chars\n if (cursorPos !== null) {\n const newPos = Math.max(0, cursorPos + lengthDiff);\n target.setSelectionRange(newPos, newPos);\n }\n\n // Emit parsed numeric value\n this._onChange(this.parseToOutput(rawValue));\n }\n\n protected onBlur(): void {\n this._onTouched();\n\n if (this._rawValue === '') {\n return;\n }\n\n let numericValue = parseFloat(this._rawValue);\n\n // Enforce min/max on blur\n const minVal = this.min();\n const maxVal = this.max();\n if (minVal !== undefined && !isNaN(minVal) && numericValue < minVal) {\n numericValue = minVal;\n }\n if (maxVal !== undefined && !isNaN(maxVal) && numericValue > maxVal) {\n numericValue = maxVal;\n }\n\n this._rawValue = numericValue.toString();\n this._elementRef.nativeElement.value = this.formatNumber(this._rawValue);\n this._onChange(this.parseToOutput(this._rawValue));\n }\n\n protected onKeyDown(e: KeyboardEvent): void {\n // Allow control keys\n if (e.ctrlKey || e.altKey || e.metaKey || e.key.length > 1) {\n return;\n }\n\n const allowedChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n\n // Allow decimal separator if fractionDigits > 0\n if (this.fractionDigits() > 0) {\n allowedChars.push(this._localeConfig.decimal);\n allowedChars.push('.'); // Always allow dot as decimal input\n }\n\n // Allow minus sign if min is undefined or negative\n const minVal = this.min();\n if (minVal === undefined || isNaN(minVal) || minVal < 0) {\n allowedChars.push('-');\n }\n\n if (!allowedChars.includes(e.key)) {\n e.preventDefault();\n }\n }\n\n protected onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n // Extract only numeric characters from pasted text\n const cleaned = this.extractRawValue(pastedText);\n if (cleaned) {\n this._rawValue = cleaned;\n this._elementRef.nativeElement.value = this.formatNumber(cleaned);\n this._onChange(this.parseToOutput(cleaned));\n }\n }\n\n // --- Private helpers ---\n\n private formatNumber(rawValue: string): string {\n if (!rawValue || !isPlatformBrowser(this._platformId)) {\n return rawValue || '';\n }\n\n const num = parseFloat(rawValue);\n if (isNaN(num) && rawValue !== '-' && rawValue !== '.') {\n return rawValue;\n }\n\n // Handle incomplete input (just minus or dot)\n if (rawValue === '-' || rawValue === '.') {\n return rawValue;\n }\n\n const parts = rawValue.split('.');\n let integerPart = parts[0] || '0';\n let decimalPart = parts.length > 1 ? parts[1] : '';\n const isNegative = integerPart.startsWith('-');\n if (isNegative) {\n integerPart = integerPart.substring(1);\n }\n\n // Trim decimal to fractionDigits\n const maxDecimals = this.fractionDigits();\n if (decimalPart.length > maxDecimals && maxDecimals > 0) {\n decimalPart = decimalPart.substring(0, maxDecimals);\n }\n\n // Fill fraction with trailing zeros if requested\n if (this.fillFraction() && maxDecimals > 0) {\n decimalPart = decimalPart.padEnd(maxDecimals, '0');\n }\n\n // Apply thousand grouping\n if (!this.noFormat()) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this._localeConfig.group);\n }\n\n let result = isNegative ? '-' + integerPart : integerPart;\n if (decimalPart || (parts.length > 1 && maxDecimals > 0)) {\n result += this._localeConfig.decimal + decimalPart;\n }\n\n return result;\n }\n\n private extractRawValue(formattedValue: string): string {\n if (!formattedValue) {\n return '';\n }\n // Remove group separators, replace locale decimal with dot\n let raw = formattedValue;\n if (this._localeConfig.group) {\n raw = raw.split(this._localeConfig.group).join('');\n }\n raw = raw.split(this._localeConfig.decimal).join('.');\n\n // Keep only digits, dot, and minus\n raw = raw.replace(/[^\\d.-]/g, '');\n\n // Ensure only one minus at the start\n if (raw.indexOf('-') > 0) {\n raw = raw.replace(/-/g, '');\n }\n\n // Ensure only one dot\n const dotIndex = raw.indexOf('.');\n if (dotIndex !== -1) {\n raw = raw.substring(0, dotIndex + 1) + raw.substring(dotIndex + 1).replace(/\\./g, '');\n }\n\n return raw;\n }\n\n private parseToOutput(rawValue: string): number | null {\n if (!rawValue || rawValue === '-' || rawValue === '.') {\n return null;\n }\n const num = parseFloat(rawValue);\n return isNaN(num) ? null : num;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: number | string | null) => void = () => { /* noop */ };\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched: () => void = () => { /* noop */ };\n}\n","import { EdsInputNumber } from './eds-input-number';\n\nexport { EdsInputNumber };\n\n/** Convenience array for importing eds-input-number. */\nexport const EDS_INPUT_NUMBER = [\n EdsInputNumber,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAmBA;;AAEG;AACH,SAAS,eAAe,CAAC,MAAc,EAAA;IACnC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;IACzF,OAAO;AACH,QAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE;AACvD,QAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG;KAC/D;AACL;AAEA;;;;;;;;;;;;;;;;;;;;AAoBG;MA6BU,cAAc,CAAA;AAwEvB,IAAA,WAAA,GAAA;AAvEA;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,kBAAkB;oFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzD;;AAEG;QACH,IAAA,CAAA,GAAG,GAAG,KAAK,CAAkB,SAAS,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEvE;;AAEG;QACH,IAAA,CAAA,GAAG,GAAG,KAAK,CAAkB,SAAS,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEvE;;;AAGG;AACH,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAkB,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAU,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AAEhG;;;AAGG;QACH,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,KAAK,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE5D;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;AAEG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO;gBACH,kBAAkB;gBAClB,IAAI,CAAC,UAAU,EAAE,GAAG,2BAA2B,GAAG,EAAE;AACvD,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACtB,CAAC;wFAAC;AAEM,QAAA,IAAA,CAAA,WAAW,GAAiC,MAAM,CAAC,UAAU,CAAC;AAC9D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAW,QAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;QAE1B,IAAA,CAAA,SAAS,GAAG,EAAE;;AA8Nd,QAAA,IAAA,CAAA,SAAS,GAA4C,MAAK,EAAc,CAAC;;AAEzE,QAAA,IAAA,CAAA,UAAU,GAAe,MAAK,EAAc,CAAC;AA7NjD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI;QACxC;QACA,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAChE;IAEA,QAAQ,GAAA;;QAEJ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;QACzD,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC1E;IACJ;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC3E;aAAO;YACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC;IACJ;;AAIA,IAAA,UAAU,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;YACzC;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5E;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AACxD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACxB;AAEA,IAAA,gBAAgB,CAAC,WAAoB,EAAA;;IAErC;;AAIU,IAAA,WAAW,CAAC,KAAY,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc;;QAGvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;;QAGzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;AACzD,QAAA,MAAM,CAAC,KAAK,GAAG,SAAS;;AAGxB,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;AAClD,YAAA,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5C;;QAGA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD;IAEU,MAAM,GAAA;QACZ,IAAI,CAAC,UAAU,EAAE;AAEjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE;YACvB;QACJ;QAEA,IAAI,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,GAAG,MAAM,EAAE;YACjE,YAAY,GAAG,MAAM;QACzB;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,GAAG,MAAM,EAAE;YACjE,YAAY,GAAG,MAAM;QACzB;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD;AAEU,IAAA,SAAS,CAAC,CAAgB,EAAA;;QAEhC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YACxD;QACJ;QAEA,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;AAGvE,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B;QAEA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC/B,CAAC,CAAC,cAAc,EAAE;QACtB;IACJ;AAEU,IAAA,OAAO,CAAC,KAAqB,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;;QAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QAChD,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C;IACJ;;AAIQ,IAAA,YAAY,CAAC,QAAgB,EAAA;QACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACnD,OAAO,QAAQ,IAAI,EAAE;QACzB;AAEA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACpD,YAAA,OAAO,QAAQ;QACnB;;QAGA,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACtC,YAAA,OAAO,QAAQ;QACnB;QAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QACjC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;AACjC,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;QAClD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9C,IAAI,UAAU,EAAE;AACZ,YAAA,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,IAAI,WAAW,GAAG,CAAC,EAAE;YACrD,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;QACvD;;QAGA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,WAAW,GAAG,CAAC,EAAE;YACxC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;QACtD;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACxF;AAEA,QAAA,IAAI,MAAM,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,WAAW;AACzD,QAAA,IAAI,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;YACtD,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,WAAW;QACtD;AAEA,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,eAAe,CAAC,cAAsB,EAAA;QAC1C,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,EAAE;QACb;;QAEA,IAAI,GAAG,GAAG,cAAc;AACxB,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD;AACA,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGrD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;;QAGjC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B;;QAGA,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;YACjB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACzF;AAEA,QAAA,OAAO,GAAG;IACd;AAEQ,IAAA,aAAa,CAAC,QAAgB,EAAA;QAClC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACnD,YAAA,OAAO,IAAI;QACf;AACA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;AAChC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG;IAClC;8GAjSS,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,mxDAzBb,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAyBH,cAAc,EAAA,UAAA,EAAA,CAAA;kBA5B1B,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,YACvB,EAAE,EAAA,eAAA,EAEK,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,qBAAqB;AAChC,4BAAA,MAAM,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC;AACnD,yBAAA;AACD,wBAAA;AACI,4BAAA,SAAS,EAAE,mBAAmB;AAC9B,4BAAA,MAAM,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;AACrC,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,kBAAkB,EAAE,WAAW;AAC/B,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,SAAS,EAAE,qBAAqB;AAChC,wBAAA,QAAQ,EAAE,UAAU;AACpB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,iBAAiB;AAC/B,qBAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;;ACzEL;AACO,MAAM,gBAAgB,GAAG;IAC5B,cAAc;;;ACNlB;;AAEG;;;;"}
1
+ {"version":3,"file":"eui-eds-eds-input-number.mjs","sources":["../../eds-input-number/eds-input-number.ts","../../eds-input-number/index.ts","../../eds-input-number/eui-eds-eds-input-number.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n signal,\n booleanAttribute,\n numberAttribute,\n DoCheck,\n OnInit,\n LOCALE_ID,\n PLATFORM_ID,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { EdsClearableDirective, EdsLoadingDirective } from '@eui/eds/shared';\n\n/**\n * Returns the decimal and group separators for a given locale.\n */\nfunction getLocaleConfig(locale: string): { group: string; decimal: string } {\n const parts = new Intl.NumberFormat(locale, { useGrouping: true }).formatToParts(10000.1);\n return {\n group: parts.find(p => p.type === 'group')?.value || '',\n decimal: parts.find(p => p.type === 'decimal')?.value || '.',\n };\n}\n\n/**\n * EdsInputNumber is a directive-based component that applies number input behavior\n * to a native `<input>` element. It provides locale-aware number formatting with\n * thousand grouping, decimal precision, min/max enforcement, and reactive forms integration.\n *\n * @usageNotes\n * #### Basic usage\n * ```html\n * <input edsInputNumber [(ngModel)]=\"amount\" [fractionDigits]=\"2\" />\n * ```\n *\n * #### With min/max\n * ```html\n * <input edsInputNumber [min]=\"0\" [max]=\"100\" formControlName=\"percentage\" />\n * ```\n *\n * ### Accessibility\n * - Use associated `<label>` with `for` attribute\n * - Invalid state is communicated via CSS class for visual indication\n * - Uses `inputmode=\"decimal\"` for mobile keyboard optimization\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputNumber]',\n template: '',\n styleUrl: './eds-input-number.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: EdsClearableDirective,\n inputs: ['edsClearable', 'readonly', 'disabled'],\n },\n {\n directive: EdsLoadingDirective,\n inputs: ['edsLoading', 'readonly'],\n },\n ],\n host: {\n class: 'eds-input-number',\n '[attr.invalid]': '_isInvalid() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.inputmode]': '\"decimal\"',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(input)': 'onHostInput($event)',\n '(blur)': 'onBlur()',\n '(keydown)': 'onKeyDown($event)',\n '(paste)': 'onPaste($event)',\n },\n})\nexport class EdsInputNumber implements ControlValueAccessor, DoCheck, OnInit {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-number'\n */\n e2eAttr = input('eds-input-number');\n\n /**\n * Controls whether the input is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Minimum allowed value. Enforced on blur.\n */\n min = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * Maximum allowed value. Enforced on blur.\n */\n max = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * Number of digits allowed after the decimal point.\n * @default 0\n */\n fractionDigits = input<number, unknown>(0, { transform: (v: unknown) => numberAttribute(v, 0) });\n\n /**\n * Whether to fill the decimal part with trailing zeros.\n * @default false\n */\n fillFraction = input(false, { transform: booleanAttribute });\n\n /**\n * Disables thousand grouping. Number is displayed plain.\n * @default false\n */\n noFormat = input(false, { transform: booleanAttribute });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n private _ngControl = inject(NgControl, { optional: true, self: true });\n private _localeId = inject(LOCALE_ID);\n private _document = inject<Document>(DOCUMENT);\n private _platformId = inject(PLATFORM_ID);\n protected _isInvalid = signal(false);\n private _localeConfig: { group: string; decimal: string };\n private _rawValue = '';\n\n constructor() {\n if (this._ngControl) {\n this._ngControl.valueAccessor = this;\n }\n this._localeConfig = getLocaleConfig(this._localeId || 'en');\n }\n\n ngOnInit(): void {\n // Apply initial formatting if element has a value attribute\n const initialValue = this._elementRef.nativeElement.value;\n if (initialValue) {\n this._rawValue = initialValue;\n this._elementRef.nativeElement.value = this.formatNumber(initialValue);\n }\n }\n\n ngDoCheck(): void {\n if (this._ngControl) {\n this._isInvalid.set(this._ngControl.invalid && this._ngControl.touched);\n } else {\n this._isInvalid.set(this.isInvalid());\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: number | string | null): void {\n if (value === null || value === undefined || value === '') {\n this._rawValue = '';\n this._elementRef.nativeElement.value = '';\n return;\n }\n this._rawValue = value.toString();\n this._elementRef.nativeElement.value = this.formatNumber(this._rawValue);\n }\n\n registerOnChange(fn: (value: number | string | null) => 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 protected onHostInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n const cursorPos = target.selectionStart;\n\n // Extract raw numeric value from formatted input\n const rawValue = this.extractRawValue(target.value);\n this._rawValue = rawValue;\n\n // Re-format the display value\n const formatted = this.formatNumber(rawValue);\n const lengthDiff = formatted.length - target.value.length;\n target.value = formatted;\n\n // Restore cursor position accounting for added/removed formatting chars\n if (cursorPos !== null) {\n const newPos = Math.max(0, cursorPos + lengthDiff);\n target.setSelectionRange(newPos, newPos);\n }\n\n // Emit parsed numeric value\n this._onChange(this.parseToOutput(rawValue));\n }\n\n protected onBlur(): void {\n this._onTouched();\n\n if (this._rawValue === '') {\n return;\n }\n\n let numericValue = parseFloat(this._rawValue);\n\n // Enforce min/max on blur\n const minVal = this.min();\n const maxVal = this.max();\n if (minVal !== undefined && !isNaN(minVal) && numericValue < minVal) {\n numericValue = minVal;\n }\n if (maxVal !== undefined && !isNaN(maxVal) && numericValue > maxVal) {\n numericValue = maxVal;\n }\n\n this._rawValue = numericValue.toString();\n this._elementRef.nativeElement.value = this.formatNumber(this._rawValue);\n this._onChange(this.parseToOutput(this._rawValue));\n }\n\n protected onKeyDown(e: KeyboardEvent): void {\n // Allow control keys\n if (e.ctrlKey || e.altKey || e.metaKey || e.key.length > 1) {\n return;\n }\n\n const allowedChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n\n // Allow decimal separator if fractionDigits > 0\n if (this.fractionDigits() > 0) {\n allowedChars.push(this._localeConfig.decimal);\n allowedChars.push('.'); // Always allow dot as decimal input\n }\n\n // Allow minus sign if min is undefined or negative\n const minVal = this.min();\n if (minVal === undefined || isNaN(minVal) || minVal < 0) {\n allowedChars.push('-');\n }\n\n if (!allowedChars.includes(e.key)) {\n e.preventDefault();\n }\n }\n\n protected onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n // Extract only numeric characters from pasted text\n const cleaned = this.extractRawValue(pastedText);\n if (cleaned) {\n this._rawValue = cleaned;\n this._elementRef.nativeElement.value = this.formatNumber(cleaned);\n this._onChange(this.parseToOutput(cleaned));\n }\n }\n\n // --- Private helpers ---\n\n private formatNumber(rawValue: string): string {\n if (!rawValue || !isPlatformBrowser(this._platformId)) {\n return rawValue || '';\n }\n\n const num = parseFloat(rawValue);\n if (isNaN(num) && rawValue !== '-' && rawValue !== '.') {\n return rawValue;\n }\n\n // Handle incomplete input (just minus or dot)\n if (rawValue === '-' || rawValue === '.') {\n return rawValue;\n }\n\n const parts = rawValue.split('.');\n let integerPart = parts[0] || '0';\n let decimalPart = parts.length > 1 ? parts[1] : '';\n const isNegative = integerPart.startsWith('-');\n if (isNegative) {\n integerPart = integerPart.substring(1);\n }\n\n // Trim decimal to fractionDigits\n const maxDecimals = this.fractionDigits();\n if (decimalPart.length > maxDecimals && maxDecimals > 0) {\n decimalPart = decimalPart.substring(0, maxDecimals);\n }\n\n // Fill fraction with trailing zeros if requested\n if (this.fillFraction() && maxDecimals > 0) {\n decimalPart = decimalPart.padEnd(maxDecimals, '0');\n }\n\n // Apply thousand grouping\n if (!this.noFormat()) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, this._localeConfig.group);\n }\n\n let result = isNegative ? '-' + integerPart : integerPart;\n if (decimalPart || (parts.length > 1 && maxDecimals > 0)) {\n result += this._localeConfig.decimal + decimalPart;\n }\n\n return result;\n }\n\n private extractRawValue(formattedValue: string): string {\n if (!formattedValue) {\n return '';\n }\n // Remove group separators, replace locale decimal with dot\n let raw = formattedValue;\n if (this._localeConfig.group) {\n raw = raw.split(this._localeConfig.group).join('');\n }\n raw = raw.split(this._localeConfig.decimal).join('.');\n\n // Keep only digits, dot, and minus\n raw = raw.replace(/[^\\d.-]/g, '');\n\n // Ensure only one minus at the start\n if (raw.indexOf('-') > 0) {\n raw = raw.replace(/-/g, '');\n }\n\n // Ensure only one dot\n const dotIndex = raw.indexOf('.');\n if (dotIndex !== -1) {\n raw = raw.substring(0, dotIndex + 1) + raw.substring(dotIndex + 1).replace(/\\./g, '');\n }\n\n return raw;\n }\n\n private parseToOutput(rawValue: string): number | null {\n if (!rawValue || rawValue === '-' || rawValue === '.') {\n return null;\n }\n const num = parseFloat(rawValue);\n return isNaN(num) ? null : num;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: number | string | null) => void = () => { /* noop */ };\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onTouched: () => void = () => { /* noop */ };\n}\n","import { EdsInputNumber } from './eds-input-number';\n\nexport { EdsInputNumber };\n\n/** Convenience array for importing eds-input-number. */\nexport const EDS_INPUT_NUMBER = [\n EdsInputNumber,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAkBA;;AAEG;AACH,SAAS,eAAe,CAAC,MAAc,EAAA;IACnC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;IACzF,OAAO;AACH,QAAA,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE;AACvD,QAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG;KAC/D;AACL;AAEA;;;;;;;;;;;;;;;;;;;;AAoBG;MA8BU,cAAc,CAAA;AA8DvB,IAAA,WAAA,GAAA;AA7DA;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,kBAAkB;oFAAC;AAEnC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEzD;;AAEG;QACH,IAAA,CAAA,GAAG,GAAG,KAAK,CAAkB,SAAS,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEvE;;AAEG;QACH,IAAA,CAAA,GAAG,GAAG,KAAK,CAAkB,SAAS,2EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEvE;;;AAGG;AACH,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAkB,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAU,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;AAEhG;;;AAGG;QACH,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,KAAK,oFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE5D;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEhD,QAAA,IAAA,CAAA,WAAW,GAAiC,MAAM,CAAC,UAAU,CAAC;AAC9D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC9D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAW,QAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/B,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK;uFAAC;QAE5B,IAAA,CAAA,SAAS,GAAG,EAAE;;AA8Nd,QAAA,IAAA,CAAA,SAAS,GAA4C,MAAK,EAAc,CAAC;;AAEzE,QAAA,IAAA,CAAA,UAAU,GAAe,MAAK,EAAc,CAAC;AA7NjD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI;QACxC;QACA,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAChE;IAEA,QAAQ,GAAA;;QAEJ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;QACzD,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC1E;IACJ;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC3E;aAAO;YACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC;IACJ;;AAIA,IAAA,UAAU,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;YACzC;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5E;AAEA,IAAA,gBAAgB,CAAC,EAA2C,EAAA;AACxD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACvB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACxB;AAEA,IAAA,gBAAgB,CAAC,WAAoB,EAAA;;IAErC;;AAIU,IAAA,WAAW,CAAC,KAAY,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc;;QAGvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;;QAGzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;QAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;AACzD,QAAA,MAAM,CAAC,KAAK,GAAG,SAAS;;AAGxB,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;AAClD,YAAA,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5C;;QAGA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD;IAEU,MAAM,GAAA;QACZ,IAAI,CAAC,UAAU,EAAE;AAEjB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE;YACvB;QACJ;QAEA,IAAI,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,GAAG,MAAM,EAAE;YACjE,YAAY,GAAG,MAAM;QACzB;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,GAAG,MAAM,EAAE;YACjE,YAAY,GAAG,MAAM;QACzB;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE;AACxC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD;AAEU,IAAA,SAAS,CAAC,CAAgB,EAAA;;QAEhC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YACxD;QACJ;QAEA,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;AAGvE,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B;;AAGA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1B;QAEA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC/B,CAAC,CAAC,cAAc,EAAE;QACtB;IACJ;AAEU,IAAA,OAAO,CAAC,KAAqB,EAAA;QACnC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;;QAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;QAChD,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,OAAO;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C;IACJ;;AAIQ,IAAA,YAAY,CAAC,QAAgB,EAAA;QACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACnD,OAAO,QAAQ,IAAI,EAAE;QACzB;AAEA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACpD,YAAA,OAAO,QAAQ;QACnB;;QAGA,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACtC,YAAA,OAAO,QAAQ;QACnB;QAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QACjC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG;AACjC,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;QAClD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9C,IAAI,UAAU,EAAE;AACZ,YAAA,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C;;AAGA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACzC,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,IAAI,WAAW,GAAG,CAAC,EAAE;YACrD,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;QACvD;;QAGA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,WAAW,GAAG,CAAC,EAAE;YACxC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;QACtD;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACxF;AAEA,QAAA,IAAI,MAAM,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,WAAW;AACzD,QAAA,IAAI,WAAW,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;YACtD,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,WAAW;QACtD;AAEA,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,eAAe,CAAC,cAAsB,EAAA;QAC1C,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,EAAE;QACb;;QAEA,IAAI,GAAG,GAAG,cAAc;AACxB,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD;AACA,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;QAGrD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;;QAGjC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B;;QAGA,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;YACjB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACzF;AAEA,QAAA,OAAO,GAAG;IACd;AAEQ,IAAA,aAAa,CAAC,QAAgB,EAAA;QAClC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE;AACnD,YAAA,OAAO,IAAI;QACf;AACA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;AAChC,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG;IAClC;8GAvRS,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,q0DA1Bb,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+rFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0BH,cAAc,EAAA,UAAA,EAAA,CAAA;kBA7B1B,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,YACvB,EAAE,EAAA,eAAA,EAEK,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,qBAAqB;AAChC,4BAAA,MAAM,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC;AACnD,yBAAA;AACD,wBAAA;AACI,4BAAA,SAAS,EAAE,mBAAmB;AAC9B,4BAAA,MAAM,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;AACrC,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,gBAAgB,EAAE,sBAAsB;AACxC,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,kBAAkB,EAAE,WAAW;AAC/B,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,SAAS,EAAE,qBAAqB;AAChC,wBAAA,QAAQ,EAAE,UAAU;AACpB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,SAAS,EAAE,iBAAiB;AAC/B,qBAAA,EAAA,MAAA,EAAA,CAAA,+rFAAA,CAAA,EAAA;;;ACzEL;AACO,MAAM,gBAAgB,GAAG;IAC5B,cAAc;;;ACNlB;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, computed, inject, ElementRef, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, booleanAttribute, inject, ElementRef, forwardRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
 
5
5
  class EdsInputRadio {
@@ -25,18 +25,6 @@ class EdsInputRadio {
25
25
  * @default false
26
26
  */
27
27
  this.isInvalid = input(false, { ...(ngDevMode ? { debugName: "isInvalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
28
- /**
29
- * Computed host CSS classes based on current state.
30
- */
31
- this.hostClasses = computed(() => {
32
- return [
33
- 'eds-input-radio',
34
- this.isInvalid() ? 'eds-input-radio--invalid' : '',
35
- ]
36
- .join(' ')
37
- .trim();
38
- }, /* @ts-ignore */
39
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
40
28
  this._elementRef = inject(ElementRef);
41
29
  // --- Event handlers ---
42
30
  // ControlValueAccessor callbacks
@@ -76,13 +64,13 @@ class EdsInputRadio {
76
64
  }
77
65
  }
78
66
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputRadio, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
79
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputRadio, isStandalone: true, selector: "input[edsInputRadio]", 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 } }, host: { attributes: { "type": "radio" }, listeners: { "click": "onHostClick($event)", "change": "onHostChange($event)", "blur": "onTouched()", "keydown.space": "onSpacePressed($any($event))" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "disabled": "disabled()", "attr.readonly": "readonly() || null" } }, providers: [
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputRadio, isStandalone: true, selector: "input[edsInputRadio]", 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 } }, host: { attributes: { "type": "radio" }, listeners: { "click": "onHostClick($event)", "change": "onHostChange($event)", "blur": "onTouched()", "keydown.space": "onSpacePressed($any($event))" }, properties: { "attr.invalid": "isInvalid() || null", "attr.data-e2e": "e2eAttr()", "disabled": "disabled()", "attr.readonly": "readonly() || null" }, classAttribute: "eds-input-radio" }, providers: [
80
68
  {
81
69
  provide: NG_VALUE_ACCESSOR,
82
70
  useExisting: forwardRef(() => EdsInputRadio),
83
71
  multi: true,
84
72
  },
85
- ], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-radio{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-full);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio: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-radio:checked{border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-radio:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%230e47cb%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio: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-radio:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23a0a0b1%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-radio[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23333%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]):checked{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23d32f2f%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
73
+ ], ngImport: i0, template: '', isInline: true, styles: [".eui-21 :host.eds-input-radio{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-full);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio: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-radio:checked{border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-radio:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%230e47cb%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio: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-radio:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23a0a0b1%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-radio[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23333%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]):checked{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23d32f2f%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-radio[invalid]:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
86
74
  }
87
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputRadio, decorators: [{
88
76
  type: Component,
@@ -94,7 +82,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
94
82
  },
95
83
  ], host: {
96
84
  type: 'radio',
97
- '[class]': 'hostClasses()',
85
+ class: 'eds-input-radio',
86
+ '[attr.invalid]': 'isInvalid() || null',
98
87
  '[attr.data-e2e]': 'e2eAttr()',
99
88
  '[disabled]': 'disabled()',
100
89
  '[attr.readonly]': 'readonly() || null',
@@ -102,7 +91,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
102
91
  '(change)': 'onHostChange($event)',
103
92
  '(blur)': 'onTouched()',
104
93
  '(keydown.space)': 'onSpacePressed($any($event))',
105
- }, styles: [".eui-21 :host.eds-input-radio{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-full);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio: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-radio:checked{border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-radio:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%230e47cb%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio: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-radio:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23a0a0b1%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-radio[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23333%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]):checked{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23d32f2f%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-radio.eds-input-radio--invalid:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"] }]
94
+ }, styles: [".eui-21 :host.eds-input-radio{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-full);background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-s) solid var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio: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-radio:checked{border-color:var(--eds-c-border-primary)}.eui-21 :host.eds-input-radio:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%230e47cb%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio: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-radio:disabled:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23a0a0b1%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[readonly]{pointer-events:none;cursor:default}.eui-21 :host.eds-input-radio[readonly]:checked{background-color:var(--eds-c-surface-neutral-subtle);border-color:var(--eds-c-border-neutral)}.eui-21 :host.eds-input-radio[readonly]:checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23333%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]){border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]):checked{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-radio[invalid]:not(:disabled):not([readonly]):checked:before{background-image:url(\"data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%277%27 fill=%27%23d32f2f%27/%3E%3C/svg%3E\")}.eui-21 :host.eds-input-radio:focus-visible{outline:2px solid var(--eds-c-focus-default, #0e47cb);outline-offset:2px}.eui-21 :host.eds-input-radio[invalid]:focus-visible{outline-color:var(--eds-c-border-critical, #d32f2f)}\n"] }]
106
95
  }], 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 }] }] } });
107
96
 
108
97
  /** Convenience array for importing eds-input-radio. */
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-input-radio.mjs","sources":["../../eds-input-radio/eds-input-radio.ts","../../eds-input-radio/index.ts","../../eds-input-radio/eui-eds-eds-input-radio.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n booleanAttribute,\n computed,\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[edsInputRadio]',\n template: '',\n styleUrl: './eds-input-radio.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsInputRadio),\n multi: true,\n },\n ],\n host: {\n type: 'radio',\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\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 EdsInputRadio implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-radio'\n */\n e2eAttr = input('eds-input-radio');\n\n /**\n * Controls whether the radio is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the radio is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the radio 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-radio',\n this.isInvalid() ? 'eds-input-radio--invalid' : '',\n ]\n .join(' ')\n .trim();\n });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n // Radio is checked when its value matches the form control value\n this._elementRef.nativeElement.checked = this._elementRef.nativeElement.value === value;\n }\n\n registerOnChange(fn: (value: string) => 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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 this._onChange(target.value);\n this.onTouched();\n }\n\n protected onSpacePressed(event: KeyboardEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: string) => void = () => { /* noop */ };\n}\n","import { EdsInputRadio } from './eds-input-radio';\n\nexport { EdsInputRadio };\n\n/** Convenience array for importing eds-input-radio. */\nexport const EDS_INPUT_RADIO = [\n EdsInputRadio,\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-radio.mjs","sources":["../../eds-input-radio/eds-input-radio.ts","../../eds-input-radio/index.ts","../../eds-input-radio/eui-eds-eds-input-radio.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n booleanAttribute,\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[edsInputRadio]',\n template: '',\n styleUrl: './eds-input-radio.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsInputRadio),\n multi: true,\n },\n ],\n host: {\n type: 'radio',\n class: 'eds-input-radio',\n '[attr.invalid]': 'isInvalid() || null',\n '[attr.data-e2e]': 'e2eAttr()',\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 EdsInputRadio implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-radio'\n */\n e2eAttr = input('eds-input-radio');\n\n /**\n * Controls whether the radio is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the radio is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the radio 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 // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n // Radio is checked when its value matches the form control value\n this._elementRef.nativeElement.checked = this._elementRef.nativeElement.value === value;\n }\n\n registerOnChange(fn: (value: string) => 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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 this._onChange(target.value);\n this.onTouched();\n }\n\n protected onSpacePressed(event: KeyboardEvent): void {\n if (this.readonly()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: string) => void = () => { /* noop */ };\n}\n","import { EdsInputRadio } from './eds-input-radio';\n\nexport { EdsInputRadio };\n\n/** Convenience array for importing eds-input-radio. */\nexport const EDS_INPUT_RADIO = [\n EdsInputRadio,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, computed, inject, ElementRef, signal, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, booleanAttribute, inject, ElementRef, signal, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { NgControl } from '@angular/forms';
4
4
  import * as i1 from '@eui/eds/shared';
5
5
  import { EdsClearableDirective, EdsLoadingDirective } from '@eui/eds/shared';
@@ -27,18 +27,6 @@ class EdsInputText {
27
27
  * @default false
28
28
  */
29
29
  this.isInvalid = input(false, { ...(ngDevMode ? { debugName: "isInvalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
30
- /**
31
- * Computed host CSS classes based on current state.
32
- */
33
- this.hostClasses = computed(() => {
34
- return [
35
- 'eds-input-text',
36
- this._isInvalid() ? 'eds-input-text--invalid' : '',
37
- ]
38
- .join(' ')
39
- .trim();
40
- }, /* @ts-ignore */
41
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
42
30
  this._elementRef = inject(ElementRef);
43
31
  this._ngControl = inject(NgControl, { optional: true, self: true });
44
32
  this._isInvalid = signal(false, /* @ts-ignore */
@@ -78,7 +66,7 @@ class EdsInputText {
78
66
  this._onChange(target.value);
79
67
  }
80
68
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputText, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
81
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputText, isStandalone: true, selector: "input[edsInputText]", 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 } }, host: { listeners: { "input": "onHostInput($event)", "blur": "onTouched()" }, properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()", "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-text{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-text:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-text:not([hidden]){display:block}.eui-21 :host.eds-input-text::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-text[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-text:disabled:not([readonly]),.eui-21 :host.eds-input-text--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-text--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-text--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-text--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-text--loading-icon:after,.eui-21 :host.eds-input-text--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-text--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-text--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-text--loading-icon--sm:after,.eui-21 :host.eds-input-text--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-text[readonly]{pointer-events:auto}.eui-21 :host.eds-input-text[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-text.eds-input-text--loading[readonly]{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);padding-left:var(--eds-sp-s)}.eui-21 :host.eds-input-text.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-text.eds-input-text--loading:not(.eds-input-text--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text.eds-input-text--loading.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text[type=search]::-webkit-search-cancel-button{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.2", type: EdsInputText, isStandalone: true, selector: "input[edsInputText]", 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 } }, host: { listeners: { "input": "onHostInput($event)", "blur": "onTouched()" }, properties: { "attr.invalid": "_isInvalid() || null", "attr.data-e2e": "e2eAttr()", "disabled": "disabled()", "attr.readonly": "readonly() || null" }, classAttribute: "eds-input-text" }, 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-text{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-text:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-text:not([hidden]){display:block}.eui-21 :host.eds-input-text::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-text[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-text:disabled:not([readonly]),.eui-21 :host.eds-input-text--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-text--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-text--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-text--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-text--loading-icon:after,.eui-21 :host.eds-input-text--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-text--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-text--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-text--loading-icon--sm:after,.eui-21 :host.eds-input-text--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-text[readonly]{pointer-events:auto}.eui-21 :host.eds-input-text[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-text.eds-input-text--loading[readonly]{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);padding-left:var(--eds-sp-s)}.eui-21 :host.eds-input-text.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-text.eds-input-text--loading:not(.eds-input-text--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text.eds-input-text--loading.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text[type=search]::-webkit-search-cancel-button{display:none}.eui-21 :host.eds-input-text[invalid]{border-color:var(--eds-c-border-critical)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
82
70
  }
83
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsInputText, decorators: [{
84
72
  type: Component,
@@ -92,13 +80,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
92
80
  inputs: ['edsLoading', 'readonly'],
93
81
  },
94
82
  ], host: {
95
- '[class]': 'hostClasses()',
83
+ class: 'eds-input-text',
84
+ '[attr.invalid]': '_isInvalid() || null',
96
85
  '[attr.data-e2e]': 'e2eAttr()',
97
86
  '[disabled]': 'disabled()',
98
87
  '[attr.readonly]': 'readonly() || null',
99
88
  '(input)': 'onHostInput($event)',
100
89
  '(blur)': 'onTouched()',
101
- }, styles: [".eui-21 :host.eds-input-text{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-text:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-text:not([hidden]){display:block}.eui-21 :host.eds-input-text::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-text[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-text:disabled:not([readonly]),.eui-21 :host.eds-input-text--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-text--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-text--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-text--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-text--loading-icon:after,.eui-21 :host.eds-input-text--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-text--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-text--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-text--loading-icon--sm:after,.eui-21 :host.eds-input-text--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-text[readonly]{pointer-events:auto}.eui-21 :host.eds-input-text[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-text.eds-input-text--loading[readonly]{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);padding-left:var(--eds-sp-s)}.eui-21 :host.eds-input-text.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-text.eds-input-text--loading:not(.eds-input-text--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text.eds-input-text--loading.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text[type=search]::-webkit-search-cancel-button{display:none}\n"] }]
90
+ }, styles: [".eui-21 :host.eds-input-text{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-text:focus-visible:not([readonly]){outline:2px solid var(--eds-c-border-primary)!important;outline-offset:-2px!important;transition:none}.eui-21 :host.eds-input-text:not([hidden]){display:block}.eui-21 :host.eds-input-text::placeholder{color:var(--eds-c-foreground-subtler);opacity:1}.eui-21 :host.eds-input-text[readonly]{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0;pointer-events:none}.eui-21 :host.eds-input-text:disabled:not([readonly]),.eui-21 :host.eds-input-text--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-text--invalid{border-color:var(--eds-c-border-critical)}.eui-21 :host.eds-input-text--loading{padding-right:var(--eds-sp-7xl)}.eui-21 :host.eds-input-text--loading-icon{align-items:center;display:flex}.eui-21 :host.eds-input-text--loading-icon:after,.eui-21 :host.eds-input-text--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-text--loading-icon:before{border:var(--eds-sp-3xs) solid rgba(0,0,0,.35);border-radius:100%}.eui-21 :host.eds-input-text--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-text--loading-icon--sm:after,.eui-21 :host.eds-input-text--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-text[readonly]{pointer-events:auto}.eui-21 :host.eds-input-text[readonly]::placeholder{color:transparent}.eui-21 :host.eds-input-text.eds-input-text--loading[readonly]{background-color:var(--eds-c-surface-elevation);border:var(--eds-bw-xs) solid var(--eds-c-border-neutral);padding-left:var(--eds-sp-s)}.eui-21 :host.eds-input-text.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 24px)}.eui-21 :host.eds-input-text.eds-input-text--loading:not(.eds-input-text--clearable){padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text.eds-input-text--loading.eds-input-text--clearable{padding-right:calc(var(--eds-sp-s) + 28px)}.eui-21 :host.eds-input-text[type=search]::-webkit-search-cancel-button{display:none}.eui-21 :host.eds-input-text[invalid]{border-color:var(--eds-c-border-critical)}\n"] }]
102
91
  }], 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 }] }] } });
103
92
 
104
93
  /** Convenience array for importing eds-input-text. */
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-input-text.mjs","sources":["../../eds-input-text/eds-input-text.ts","../../eds-input-text/index.ts","../../eds-input-text/eui-eds-eds-input-text.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n signal,\n booleanAttribute,\n computed,\n DoCheck,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { EdsClearableDirective } from '@eui/eds/shared';\nimport { EdsLoadingDirective } from '@eui/eds/shared';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputText]',\n template: '',\n styleUrl: './eds-input-text.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: EdsClearableDirective,\n inputs: ['edsClearable', 'readonly', 'disabled'],\n },\n {\n directive: EdsLoadingDirective,\n inputs: ['edsLoading', 'readonly'],\n },\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(input)': 'onHostInput($event)',\n '(blur)': 'onTouched()',\n },\n})\nexport class EdsInputText implements ControlValueAccessor, DoCheck {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-text'\n */\n e2eAttr = input('eds-input-text');\n\n /**\n * Controls whether the input is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input 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-text',\n this._isInvalid() ? 'eds-input-text--invalid' : '',\n ]\n .join(' ')\n .trim();\n });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n private _ngControl = inject(NgControl, { optional: true, self: true });\n private _isInvalid = signal(false);\n\n constructor() {\n if (this._ngControl) {\n this._ngControl.valueAccessor = this;\n }\n }\n\n ngDoCheck(): void {\n if (this._ngControl) {\n this._isInvalid.set(this._ngControl.invalid && this._ngControl.touched);\n } else {\n this._isInvalid.set(this.isInvalid());\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n this._elementRef.nativeElement.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected onTouched: () => void = () => { /* noop */ };\n\n protected onHostInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this._onChange(target.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: string) => void = () => { /* noop */ };\n}\n","import { EdsInputText } from './eds-input-text';\n\nexport { EdsInputText };\n\n/** Convenience array for importing eds-input-text. */\nexport const EDS_INPUT_TEXT = [\n EdsInputText,\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-text.mjs","sources":["../../eds-input-text/eds-input-text.ts","../../eds-input-text/index.ts","../../eds-input-text/eui-eds-eds-input-text.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n inject,\n input,\n signal,\n booleanAttribute,\n DoCheck,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { EdsClearableDirective } from '@eui/eds/shared';\nimport { EdsLoadingDirective } from '@eui/eds/shared';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[edsInputText]',\n template: '',\n styleUrl: './eds-input-text.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: EdsClearableDirective,\n inputs: ['edsClearable', 'readonly', 'disabled'],\n },\n {\n directive: EdsLoadingDirective,\n inputs: ['edsLoading', 'readonly'],\n },\n ],\n host: {\n class: 'eds-input-text',\n '[attr.invalid]': '_isInvalid() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n '[disabled]': 'disabled()',\n '[attr.readonly]': 'readonly() || null',\n '(input)': 'onHostInput($event)',\n '(blur)': 'onTouched()',\n },\n})\nexport class EdsInputText implements ControlValueAccessor, DoCheck {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-input-text'\n */\n e2eAttr = input('eds-input-text');\n\n /**\n * Controls whether the input is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input is readonly.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the input shows an invalid/error state.\n * @default false\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n private _elementRef: ElementRef<HTMLInputElement> = inject(ElementRef);\n private _ngControl = inject(NgControl, { optional: true, self: true });\n protected _isInvalid = signal(false);\n\n constructor() {\n if (this._ngControl) {\n this._ngControl.valueAccessor = this;\n }\n }\n\n ngDoCheck(): void {\n if (this._ngControl) {\n this._isInvalid.set(this._ngControl.invalid && this._ngControl.touched);\n } else {\n this._isInvalid.set(this.isInvalid());\n }\n }\n\n // --- ControlValueAccessor ---\n\n writeValue(value: string): void {\n this._elementRef.nativeElement.value = value ?? '';\n }\n\n registerOnChange(fn: (value: string) => 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 // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected onTouched: () => void = () => { /* noop */ };\n\n protected onHostInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this._onChange(target.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onChange: (value: string) => void = () => { /* noop */ };\n}\n","import { EdsInputText } from './eds-input-text';\n\nexport { EdsInputText };\n\n/** Convenience array for importing eds-input-text. */\nexport const EDS_INPUT_TEXT = [\n EdsInputText,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -55,4 +55,4 @@ const EDS_LABEL = [
55
55
  */
56
56
 
57
57
  export { EDS_LABEL, EdsLabel };
58
- //# sourceMappingURL=eui-eds-utilities-eds-label.mjs.map
58
+ //# sourceMappingURL=eui-eds-eds-label.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eui-eds-eds-label.mjs","sources":["../../eds-label/eds-label.ts","../../eds-label/index.ts","../../eds-label/eui-eds-eds-label.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n booleanAttribute,\n inject,\n} from '@angular/core';\n\nimport { EdsColorDirective } from '@eui/eds/shared';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'label[edsLabel], span[edsLabel], div[edsLabel]',\n template: '<ng-content/>',\n styleUrl: './eds-label.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: EdsColorDirective,\n inputs: [\n 'edsNeutral',\n 'edsCritical',\n 'edsColorVariant',\n ],\n },\n ],\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class EdsLabel {\n /**\n * Marks the label as required (appends a red asterisk).\n * @default false\n */\n edsRequired = input(false, { transform: booleanAttribute });\n\n protected colorDirective = inject(EdsColorDirective);\n\n /**\n * Computed host CSS classes based on current state.\n */\n hostClasses = computed(() => {\n const colorClass = this.colorDirective.getCssClass('eds-label');\n return [\n 'eds-label',\n colorClass || 'eds-label--neutral',\n this.edsRequired() ? 'eds-label--required' : '',\n ]\n .join(' ')\n .trim();\n });\n}\n","import { EdsLabel } from './eds-label';\n\nexport { EdsLabel };\n\n/** Convenience array for importing eds-label. */\nexport const EDS_LABEL = [\n EdsLabel,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MA+Ba,QAAQ,CAAA;AApBrB,IAAA,WAAA,GAAA;AAqBI;;;AAGG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEpD;;AAEG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC;YAC/D,OAAO;gBACH,WAAW;AACX,gBAAA,UAAU,IAAI,oBAAoB;gBAClC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,GAAG,EAAE;AAClD;iBACI,IAAI,CAAC,GAAG;AACR,iBAAA,IAAI,EAAE;QACf,CAAC;wFAAC;AACL,IAAA;8GAtBY,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,qdAjBP,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAiBhB,QAAQ,EAAA,UAAA,EAAA,CAAA;kBApBpB,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gDAAgD,YAChD,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,cAAA,EAC/B;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,iBAAiB;AAC5B,4BAAA,MAAM,EAAE;gCACJ,YAAY;gCACZ,aAAa;gCACb,iBAAiB;AACpB,6BAAA;AACJ,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,eAAe;AAC7B,qBAAA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA;;;ACzBL;AACO,MAAM,SAAS,GAAG;IACrB,QAAQ;;;ACNZ;;AAEG;;;;"}
@@ -46,8 +46,7 @@ class EdsLanguageSelectorDialog {
46
46
  <span class="eds-language-dialog__code">{{ lang.code | uppercase }}</span>
47
47
  <button
48
48
  edsButton
49
- [edsPrimary]="lang.code === config?.selectedLanguage"
50
- [edsNeutral]="lang.code !== config?.selectedLanguage"
49
+ [color]="lang.code === config?.selectedLanguage ? 'primary' : 'neutral'"
51
50
  (click)="selectLanguage(lang)">
52
51
  <span [attr.lang]="lang.code">{{ lang.label }}</span>
53
52
  </button>
@@ -63,8 +62,7 @@ class EdsLanguageSelectorDialog {
63
62
  <span class="eds-language-dialog__code">{{ lang.code | uppercase }}</span>
64
63
  <button
65
64
  edsButton
66
- [edsPrimary]="lang.code === config?.selectedLanguage"
67
- [edsNeutral]="lang.code !== config?.selectedLanguage"
65
+ [color]="lang.code === config?.selectedLanguage ? 'primary' : 'neutral'"
68
66
  (click)="selectLanguage(lang)">
69
67
  <span [attr.lang]="lang.code">{{ lang.label }}</span>
70
68
  </button>
@@ -73,7 +71,7 @@ class EdsLanguageSelectorDialog {
73
71
  </div>
74
72
  }
75
73
  </div>
76
- `, isInline: true, styles: [".eds-language-dialog{padding:var(--eds-sp-m)}.eds-language-dialog__section-title{font:var(--eds-f-label-m-semibold);margin-bottom:var(--eds-sp-s)}.eds-language-dialog__section-title--additional{margin-top:var(--eds-sp-l)}.eds-language-dialog__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--eds-sp-s)}.eds-language-dialog__item{display:flex;align-items:center;gap:var(--eds-sp-xs)}.eds-language-dialog__code{font-weight:600;min-width:2rem}\n"], dependencies: [{ kind: "component", type: i1.EdsButton, selector: "button[edsButton]", inputs: ["e2eAttr", "id", "edsDisabled", "edsBlockButton", "edsIconButton", "edsAvatarButton", "edsLineWrap", "edsButtonPrimary", "edsButtonSecondary", "edsButtonTertiary", "edsButtonRounded", "edsTypeVariant", "isChecked"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
+ `, isInline: true, styles: [".eds-language-dialog{padding:var(--eds-sp-m)}.eds-language-dialog__section-title{font:var(--eds-f-label-m-semibold);margin-bottom:var(--eds-sp-s)}.eds-language-dialog__section-title--additional{margin-top:var(--eds-sp-l)}.eds-language-dialog__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--eds-sp-s)}.eds-language-dialog__item{display:flex;align-items:center;gap:var(--eds-sp-xs)}.eds-language-dialog__code{font-weight:600;min-width:2rem}\n"], dependencies: [{ kind: "component", type: i1.EdsButton, selector: "button[edsButton]", inputs: ["e2eAttr", "id", "variant", "color", "size", "disabled", "block", "iconButton", "avatarButton", "lineWrap", "rounded", "isChecked"] }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
75
  }
78
76
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsLanguageSelectorDialog, decorators: [{
79
77
  type: Component,
@@ -88,8 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
88
86
  <span class="eds-language-dialog__code">{{ lang.code | uppercase }}</span>
89
87
  <button
90
88
  edsButton
91
- [edsPrimary]="lang.code === config?.selectedLanguage"
92
- [edsNeutral]="lang.code !== config?.selectedLanguage"
89
+ [color]="lang.code === config?.selectedLanguage ? 'primary' : 'neutral'"
93
90
  (click)="selectLanguage(lang)">
94
91
  <span [attr.lang]="lang.code">{{ lang.label }}</span>
95
92
  </button>
@@ -105,8 +102,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
105
102
  <span class="eds-language-dialog__code">{{ lang.code | uppercase }}</span>
106
103
  <button
107
104
  edsButton
108
- [edsPrimary]="lang.code === config?.selectedLanguage"
109
- [edsNeutral]="lang.code !== config?.selectedLanguage"
105
+ [color]="lang.code === config?.selectedLanguage ? 'primary' : 'neutral'"
110
106
  (click)="selectLanguage(lang)">
111
107
  <span [attr.lang]="lang.code">{{ lang.label }}</span>
112
108
  </button>
@@ -1 +1 @@
1
- {"version":3,"file":"eui-eds-eds-language-selector.mjs","sources":["../../eds-language-selector/eds-language-selector-dialog.ts","../../eds-language-selector/eds-language-selector.ts","../../eds-language-selector/eds-language-selector.html","../../eds-language-selector/index.ts","../../eds-language-selector/eui-eds-eds-language-selector.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, inject, computed } from '@angular/core';\nimport { UpperCasePipe } from '@angular/common';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_DIALOG_COMPONENT_CONFIG } from '@eui/eds/eds-dialog';\nimport { EdsDialogService } from '@eui/eds/eds-dialog';\nimport { EdsLanguage } from './eds-language-selector';\n\n/** Official EU language codes. */\nconst EU_LANGUAGE_CODES = new Set([\n 'bg', 'cs', 'da', 'de', 'et', 'el', 'en', 'es', 'fr', 'ga',\n 'hr', 'it', 'lv', 'lt', 'hu', 'mt', 'nl', 'pl', 'pt', 'ro',\n 'sk', 'sl', 'fi', 'sv',\n]);\n\nexport interface EdsLanguageSelectorDialogConfig {\n /** All available languages. */\n languages: EdsLanguage[];\n /** Currently selected language code. */\n selectedLanguage: string;\n /** Callback when a language is selected. */\n onLanguageChange: (code: string) => void;\n}\n\n/**\n * Dialog content component for the language selector.\n * Displays EU and non-EU languages in separate grid sections.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'eds-language-selector-dialog',\n template: `\n <div class=\"eds-language-dialog\">\n @if (nonEuLanguages().length > 0) {\n <h4 class=\"eds-language-dialog__section-title\">EU Languages</h4>\n }\n <div class=\"eds-language-dialog__grid\">\n @for (lang of euLanguages(); track lang.code) {\n <div class=\"eds-language-dialog__item\">\n <span class=\"eds-language-dialog__code\">{{ lang.code | uppercase }}</span>\n <button\n edsButton\n [edsPrimary]=\"lang.code === config?.selectedLanguage\"\n [edsNeutral]=\"lang.code !== config?.selectedLanguage\"\n (click)=\"selectLanguage(lang)\">\n <span [attr.lang]=\"lang.code\">{{ lang.label }}</span>\n </button>\n </div>\n }\n </div>\n\n @if (nonEuLanguages().length > 0) {\n <h4 class=\"eds-language-dialog__section-title eds-language-dialog__section-title--additional\">Non-EU Languages</h4>\n <div class=\"eds-language-dialog__grid\">\n @for (lang of nonEuLanguages(); track lang.code) {\n <div class=\"eds-language-dialog__item\">\n <span class=\"eds-language-dialog__code\">{{ lang.code | uppercase }}</span>\n <button\n edsButton\n [edsPrimary]=\"lang.code === config?.selectedLanguage\"\n [edsNeutral]=\"lang.code !== config?.selectedLanguage\"\n (click)=\"selectLanguage(lang)\">\n <span [attr.lang]=\"lang.code\">{{ lang.label }}</span>\n </button>\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n .eds-language-dialog {\n padding: var(--eds-sp-m);\n }\n .eds-language-dialog__section-title {\n font: var(--eds-f-label-m-semibold);\n margin-bottom: var(--eds-sp-s);\n }\n .eds-language-dialog__section-title--additional {\n margin-top: var(--eds-sp-l);\n }\n .eds-language-dialog__grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--eds-sp-s);\n }\n .eds-language-dialog__item {\n display: flex;\n align-items: center;\n gap: var(--eds-sp-xs);\n }\n .eds-language-dialog__code {\n font-weight: 600;\n min-width: 2rem;\n }\n `],\n imports: [UpperCasePipe, ...EDS_BUTTON],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsLanguageSelectorDialog {\n config = inject<EdsLanguageSelectorDialogConfig>(EDS_DIALOG_COMPONENT_CONFIG, { optional: true });\n\n /** EU languages filtered from the provided list. */\n euLanguages = computed(() =>\n (this.config?.languages ?? []).filter(lang => EU_LANGUAGE_CODES.has(lang.code)),\n );\n\n /** Non-EU (additional) languages filtered from the provided list. */\n nonEuLanguages = computed(() =>\n (this.config?.languages ?? []).filter(lang => !EU_LANGUAGE_CODES.has(lang.code)),\n );\n\n private dialogService = inject(EdsDialogService);\n\n selectLanguage(lang: EdsLanguage): void {\n this.config?.onLanguageChange(lang.code);\n this.dialogService.closeDialog();\n }\n}\n","import { Component, input, output, signal, computed, ElementRef, inject, HostListener, Injector, booleanAttribute, afterNextRender } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { UpperCasePipe } from '@angular/common';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EdsColorDirective } from '@eui/eds/shared';\nimport { EdsDialogService } from '@eui/eds/eds-dialog';\nimport { EdsLanguageSelectorDialog, EdsLanguageSelectorDialogConfig } from './eds-language-selector-dialog';\n\nexport interface EdsLanguage {\n /** Language code (e.g. 'en', 'fr', 'de'). */\n code: string;\n\n /** Display label (e.g. 'English', 'Français'). */\n label: string;\n}\n\n/** Threshold: when languages exceed this count, a dialog is shown instead of a dropdown. */\nconst DIALOG_THRESHOLD = 3;\n\n/** Minimum space (px) needed on the right for the dropdown to align left-to-right. */\nconst DROPDOWN_MIN_WIDTH = 160;\n\n@Component({\n selector: 'eds-language-selector',\n imports: [UpperCasePipe, ...EDS_ICON],\n templateUrl: './eds-language-selector.html',\n styleUrl: './eds-language-selector.scss',\n host: {\n '[class]': 'hostClasses()',\n },\n hostDirectives: [\n {\n directive: EdsColorDirective,\n inputs: [\n 'edsBrand',\n 'edsNeutral',\n 'edsColorVariant',\n ],\n },\n ],\n})\nexport class EdsLanguageSelector {\n private colorDirective = inject(EdsColorDirective);\n\n hostClasses = computed(() => {\n const color = this.colorDirective.getCssClass('eds-language-selector');\n return `eds-language-selector ${color}`.trim();\n });\n /** Available languages. */\n languages = input<EdsLanguage[]>([]);\n\n /** Currently selected language code. */\n selectedLanguage = input<string>('en');\n\n /** Aria label for accessibility. */\n ariaLabel = input<string>('');\n\n /** Whether the dropdown aligns to the right edge (opens towards left). Can be set explicitly or computed from viewport. */\n isRightAligned = input(false, { transform: booleanAttribute });\n\n /** When true, the trigger displays a globe icon with the language code in a borderless button layout. */\n hasIconLayout = input(false, { transform: booleanAttribute });\n\n /** Emits the selected language code when user picks a language. */\n languageChange = output<string>();\n\n isOpen = signal(false);\n\n /** Index of the currently focused item in the dropdown. */\n focusedIndex = signal(-1);\n\n /** Internal override for viewport-based alignment (only used when isRightAligned is not explicitly set). */\n protected dropdownAlignRight = signal(false);\n\n /** Resolved alignment: explicit input takes priority, then viewport-based. */\n protected resolvedAlignRight = computed(() => this.isRightAligned() || this.dropdownAlignRight());\n\n /** The id of the currently active descendant for aria-activedescendant. */\n protected activeDescendantId = computed(() => {\n const idx = this.focusedIndex();\n const langs = this.languages();\n if (idx >= 0 && idx < langs.length) {\n return 'eds-lang-option-' + langs[idx].code;\n }\n return null;\n });\n\n currentLanguage = computed(() => {\n const langs = this.languages();\n const selected = this.selectedLanguage();\n return langs.find(l => l.code === selected) ?? langs[0] ?? { code: 'en', label: 'EN' };\n });\n\n computedAriaLabel = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel();\n return `Change Language - Current: ${this.currentLanguage().label}`;\n });\n\n /** Whether the language list should open in a dialog (more than 3 languages). */\n useDialog = computed(() => this.languages().length > DIALOG_THRESHOLD);\n\n private el = inject(ElementRef);\n private document = inject(DOCUMENT);\n private dialogService = inject(EdsDialogService);\n private injector = inject(Injector);\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen() && !this.el.nativeElement.contains(event.target)) {\n this.closeDropdown();\n }\n }\n\n toggle(): void {\n if (this.useDialog()) {\n this.openLanguageDialog();\n } else {\n if (!this.isOpen()) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n }\n\n selectLanguage(lang: EdsLanguage): void {\n this.closeDropdown();\n this.languageChange.emit(lang.code);\n }\n\n /** Keyboard handler on the toggle button. */\n onToggleKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.isOpen() && !this.useDialog()) {\n this.openDropdown();\n }\n }\n }\n\n /** Keyboard handler on the dropdown list. */\n onDropdownKeydown(event: KeyboardEvent): void {\n const langs = this.languages();\n const idx = this.focusedIndex();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusedIndex.set(idx < langs.length - 1 ? idx + 1 : 0);\n this.scrollFocusedIntoView();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusedIndex.set(idx > 0 ? idx - 1 : langs.length - 1);\n this.scrollFocusedIntoView();\n break;\n\n case 'Home':\n event.preventDefault();\n this.focusedIndex.set(0);\n this.scrollFocusedIntoView();\n break;\n\n case 'End':\n event.preventDefault();\n this.focusedIndex.set(langs.length - 1);\n this.scrollFocusedIntoView();\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (idx >= 0 && idx < langs.length) {\n this.selectLanguage(langs[idx]);\n }\n break;\n\n case 'Escape':\n case 'Tab':\n this.closeDropdown();\n break;\n }\n }\n\n private openDropdown(): void {\n this.computeDropdownAlignment();\n // Set initial focus to the currently selected language, or first item\n const langs = this.languages();\n const selectedIdx = langs.findIndex(l => l.code === this.selectedLanguage());\n this.focusedIndex.set(selectedIdx >= 0 ? selectedIdx : 0);\n this.isOpen.set(true);\n // Focus the active option after render\n afterNextRender(() => {\n this.scrollFocusedIntoView();\n }, { injector: this.injector });\n }\n\n private closeDropdown(): void {\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n // Return focus to the toggle button\n const toggle = this.el.nativeElement.querySelector('.language-toggle') as HTMLElement;\n toggle?.focus();\n }\n\n private scrollFocusedIntoView(): void {\n const idx = this.focusedIndex();\n const langs = this.languages();\n if (idx >= 0 && idx < langs.length) {\n const optionEl = this.el.nativeElement.querySelector(`#eds-lang-option-${langs[idx].code}`) as HTMLElement;\n optionEl?.focus();\n }\n }\n\n private computeDropdownAlignment(): void {\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const viewportWidth = this.document.documentElement.clientWidth;\n const spaceOnRight = viewportWidth - hostRect.left;\n this.dropdownAlignRight.set(spaceOnRight < DROPDOWN_MIN_WIDTH);\n }\n\n private openLanguageDialog(): void {\n const config: EdsLanguageSelectorDialogConfig = {\n languages: this.languages(),\n selectedLanguage: this.selectedLanguage(),\n onLanguageChange: (code: string) => {\n this.languageChange.emit(code);\n },\n };\n\n this.dialogService.openDialog({\n title: 'Select Language',\n hasCloseButton: true,\n hasClosedOnEscape: true,\n hasClosedOnClickOutside: true,\n width: '480px',\n bodyComponent: { component: EdsLanguageSelectorDialog, config },\n }, this.injector);\n }\n}\n","<button\n type=\"button\"\n class=\"language-toggle\"\n [class.language-toggle--icon-layout]=\"hasIconLayout()\"\n [attr.aria-label]=\"computedAriaLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n (keydown)=\"onToggleKeydown($event)\">\n @if (hasIconLayout()) {\n <eds-icon icon=\"globe\" size=\"s\" />\n <span class=\"language-code\">{{ currentLanguage().code | uppercase }}</span>\n } @else {\n <span class=\"language-code\">{{ currentLanguage().code | uppercase }}</span>\n <eds-icon [icon]=\"isOpen() ? 'caret-up' : 'caret-down'\" size=\"s\" />\n }\n</button>\n\n@if (isOpen()) {\n <ul\n class=\"language-dropdown\"\n [class.language-dropdown--align-right]=\"resolvedAlignRight()\"\n role=\"listbox\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onDropdownKeydown($event)\">\n @for (lang of languages(); track lang.code; let i = $index) {\n <li\n class=\"language-option\"\n [class.selected]=\"lang.code === selectedLanguage()\"\n [class.focused]=\"i === focusedIndex()\"\n role=\"option\"\n [id]=\"'eds-lang-option-' + lang.code\"\n [attr.aria-selected]=\"lang.code === selectedLanguage()\"\n [tabindex]=\"i === focusedIndex() ? 0 : -1\"\n (click)=\"selectLanguage(lang)\">\n <span class=\"option-code\">{{ lang.code | uppercase }}</span>\n <span class=\"option-label\">{{ lang.label }}</span>\n </li>\n }\n </ul>\n}\n","import { EdsLanguageSelector } from './eds-language-selector';\nimport { EdsLanguageSelectorDialog } from './eds-language-selector-dialog';\n\nexport { EdsLanguageSelector };\nexport { EdsLanguageSelectorDialog, EdsLanguageSelectorDialogConfig } from './eds-language-selector-dialog';\nexport { EdsLanguage } from './eds-language-selector';\n\n/** Convenience array for importing eds-language-selector. */\nexport const EDS_LANGUAGE_SELECTOR = [EdsLanguageSelector, EdsLanguageSelectorDialog] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"eui-eds-eds-language-selector.mjs","sources":["../../eds-language-selector/eds-language-selector-dialog.ts","../../eds-language-selector/eds-language-selector.ts","../../eds-language-selector/eds-language-selector.html","../../eds-language-selector/index.ts","../../eds-language-selector/eui-eds-eds-language-selector.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, inject, computed } from '@angular/core';\nimport { UpperCasePipe } from '@angular/common';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_DIALOG_COMPONENT_CONFIG } from '@eui/eds/eds-dialog';\nimport { EdsDialogService } from '@eui/eds/eds-dialog';\nimport { EdsLanguage } from './eds-language-selector';\n\n/** Official EU language codes. */\nconst EU_LANGUAGE_CODES = new Set([\n 'bg', 'cs', 'da', 'de', 'et', 'el', 'en', 'es', 'fr', 'ga',\n 'hr', 'it', 'lv', 'lt', 'hu', 'mt', 'nl', 'pl', 'pt', 'ro',\n 'sk', 'sl', 'fi', 'sv',\n]);\n\nexport interface EdsLanguageSelectorDialogConfig {\n /** All available languages. */\n languages: EdsLanguage[];\n /** Currently selected language code. */\n selectedLanguage: string;\n /** Callback when a language is selected. */\n onLanguageChange: (code: string) => void;\n}\n\n/**\n * Dialog content component for the language selector.\n * Displays EU and non-EU languages in separate grid sections.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'eds-language-selector-dialog',\n template: `\n <div class=\"eds-language-dialog\">\n @if (nonEuLanguages().length > 0) {\n <h4 class=\"eds-language-dialog__section-title\">EU Languages</h4>\n }\n <div class=\"eds-language-dialog__grid\">\n @for (lang of euLanguages(); track lang.code) {\n <div class=\"eds-language-dialog__item\">\n <span class=\"eds-language-dialog__code\">{{ lang.code | uppercase }}</span>\n <button\n edsButton\n [color]=\"lang.code === config?.selectedLanguage ? 'primary' : 'neutral'\"\n (click)=\"selectLanguage(lang)\">\n <span [attr.lang]=\"lang.code\">{{ lang.label }}</span>\n </button>\n </div>\n }\n </div>\n\n @if (nonEuLanguages().length > 0) {\n <h4 class=\"eds-language-dialog__section-title eds-language-dialog__section-title--additional\">Non-EU Languages</h4>\n <div class=\"eds-language-dialog__grid\">\n @for (lang of nonEuLanguages(); track lang.code) {\n <div class=\"eds-language-dialog__item\">\n <span class=\"eds-language-dialog__code\">{{ lang.code | uppercase }}</span>\n <button\n edsButton\n [color]=\"lang.code === config?.selectedLanguage ? 'primary' : 'neutral'\"\n (click)=\"selectLanguage(lang)\">\n <span [attr.lang]=\"lang.code\">{{ lang.label }}</span>\n </button>\n </div>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n .eds-language-dialog {\n padding: var(--eds-sp-m);\n }\n .eds-language-dialog__section-title {\n font: var(--eds-f-label-m-semibold);\n margin-bottom: var(--eds-sp-s);\n }\n .eds-language-dialog__section-title--additional {\n margin-top: var(--eds-sp-l);\n }\n .eds-language-dialog__grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: var(--eds-sp-s);\n }\n .eds-language-dialog__item {\n display: flex;\n align-items: center;\n gap: var(--eds-sp-xs);\n }\n .eds-language-dialog__code {\n font-weight: 600;\n min-width: 2rem;\n }\n `],\n imports: [UpperCasePipe, ...EDS_BUTTON],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsLanguageSelectorDialog {\n config = inject<EdsLanguageSelectorDialogConfig>(EDS_DIALOG_COMPONENT_CONFIG, { optional: true });\n\n /** EU languages filtered from the provided list. */\n euLanguages = computed(() =>\n (this.config?.languages ?? []).filter(lang => EU_LANGUAGE_CODES.has(lang.code)),\n );\n\n /** Non-EU (additional) languages filtered from the provided list. */\n nonEuLanguages = computed(() =>\n (this.config?.languages ?? []).filter(lang => !EU_LANGUAGE_CODES.has(lang.code)),\n );\n\n private dialogService = inject(EdsDialogService);\n\n selectLanguage(lang: EdsLanguage): void {\n this.config?.onLanguageChange(lang.code);\n this.dialogService.closeDialog();\n }\n}\n","import { Component, input, output, signal, computed, ElementRef, inject, HostListener, Injector, booleanAttribute, afterNextRender } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { UpperCasePipe } from '@angular/common';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\nimport { EdsColorDirective } from '@eui/eds/shared';\nimport { EdsDialogService } from '@eui/eds/eds-dialog';\nimport { EdsLanguageSelectorDialog, EdsLanguageSelectorDialogConfig } from './eds-language-selector-dialog';\n\nexport interface EdsLanguage {\n /** Language code (e.g. 'en', 'fr', 'de'). */\n code: string;\n\n /** Display label (e.g. 'English', 'Français'). */\n label: string;\n}\n\n/** Threshold: when languages exceed this count, a dialog is shown instead of a dropdown. */\nconst DIALOG_THRESHOLD = 3;\n\n/** Minimum space (px) needed on the right for the dropdown to align left-to-right. */\nconst DROPDOWN_MIN_WIDTH = 160;\n\n@Component({\n selector: 'eds-language-selector',\n imports: [UpperCasePipe, ...EDS_ICON],\n templateUrl: './eds-language-selector.html',\n styleUrl: './eds-language-selector.scss',\n host: {\n '[class]': 'hostClasses()',\n },\n hostDirectives: [\n {\n directive: EdsColorDirective,\n inputs: [\n 'edsBrand',\n 'edsNeutral',\n 'edsColorVariant',\n ],\n },\n ],\n})\nexport class EdsLanguageSelector {\n private colorDirective = inject(EdsColorDirective);\n\n hostClasses = computed(() => {\n const color = this.colorDirective.getCssClass('eds-language-selector');\n return `eds-language-selector ${color}`.trim();\n });\n /** Available languages. */\n languages = input<EdsLanguage[]>([]);\n\n /** Currently selected language code. */\n selectedLanguage = input<string>('en');\n\n /** Aria label for accessibility. */\n ariaLabel = input<string>('');\n\n /** Whether the dropdown aligns to the right edge (opens towards left). Can be set explicitly or computed from viewport. */\n isRightAligned = input(false, { transform: booleanAttribute });\n\n /** When true, the trigger displays a globe icon with the language code in a borderless button layout. */\n hasIconLayout = input(false, { transform: booleanAttribute });\n\n /** Emits the selected language code when user picks a language. */\n languageChange = output<string>();\n\n isOpen = signal(false);\n\n /** Index of the currently focused item in the dropdown. */\n focusedIndex = signal(-1);\n\n /** Internal override for viewport-based alignment (only used when isRightAligned is not explicitly set). */\n protected dropdownAlignRight = signal(false);\n\n /** Resolved alignment: explicit input takes priority, then viewport-based. */\n protected resolvedAlignRight = computed(() => this.isRightAligned() || this.dropdownAlignRight());\n\n /** The id of the currently active descendant for aria-activedescendant. */\n protected activeDescendantId = computed(() => {\n const idx = this.focusedIndex();\n const langs = this.languages();\n if (idx >= 0 && idx < langs.length) {\n return 'eds-lang-option-' + langs[idx].code;\n }\n return null;\n });\n\n currentLanguage = computed(() => {\n const langs = this.languages();\n const selected = this.selectedLanguage();\n return langs.find(l => l.code === selected) ?? langs[0] ?? { code: 'en', label: 'EN' };\n });\n\n computedAriaLabel = computed(() => {\n if (this.ariaLabel()) return this.ariaLabel();\n return `Change Language - Current: ${this.currentLanguage().label}`;\n });\n\n /** Whether the language list should open in a dialog (more than 3 languages). */\n useDialog = computed(() => this.languages().length > DIALOG_THRESHOLD);\n\n private el = inject(ElementRef);\n private document = inject(DOCUMENT);\n private dialogService = inject(EdsDialogService);\n private injector = inject(Injector);\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isOpen() && !this.el.nativeElement.contains(event.target)) {\n this.closeDropdown();\n }\n }\n\n toggle(): void {\n if (this.useDialog()) {\n this.openLanguageDialog();\n } else {\n if (!this.isOpen()) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n }\n\n selectLanguage(lang: EdsLanguage): void {\n this.closeDropdown();\n this.languageChange.emit(lang.code);\n }\n\n /** Keyboard handler on the toggle button. */\n onToggleKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n if (!this.isOpen() && !this.useDialog()) {\n this.openDropdown();\n }\n }\n }\n\n /** Keyboard handler on the dropdown list. */\n onDropdownKeydown(event: KeyboardEvent): void {\n const langs = this.languages();\n const idx = this.focusedIndex();\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.focusedIndex.set(idx < langs.length - 1 ? idx + 1 : 0);\n this.scrollFocusedIntoView();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusedIndex.set(idx > 0 ? idx - 1 : langs.length - 1);\n this.scrollFocusedIntoView();\n break;\n\n case 'Home':\n event.preventDefault();\n this.focusedIndex.set(0);\n this.scrollFocusedIntoView();\n break;\n\n case 'End':\n event.preventDefault();\n this.focusedIndex.set(langs.length - 1);\n this.scrollFocusedIntoView();\n break;\n\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (idx >= 0 && idx < langs.length) {\n this.selectLanguage(langs[idx]);\n }\n break;\n\n case 'Escape':\n case 'Tab':\n this.closeDropdown();\n break;\n }\n }\n\n private openDropdown(): void {\n this.computeDropdownAlignment();\n // Set initial focus to the currently selected language, or first item\n const langs = this.languages();\n const selectedIdx = langs.findIndex(l => l.code === this.selectedLanguage());\n this.focusedIndex.set(selectedIdx >= 0 ? selectedIdx : 0);\n this.isOpen.set(true);\n // Focus the active option after render\n afterNextRender(() => {\n this.scrollFocusedIntoView();\n }, { injector: this.injector });\n }\n\n private closeDropdown(): void {\n this.isOpen.set(false);\n this.focusedIndex.set(-1);\n // Return focus to the toggle button\n const toggle = this.el.nativeElement.querySelector('.language-toggle') as HTMLElement;\n toggle?.focus();\n }\n\n private scrollFocusedIntoView(): void {\n const idx = this.focusedIndex();\n const langs = this.languages();\n if (idx >= 0 && idx < langs.length) {\n const optionEl = this.el.nativeElement.querySelector(`#eds-lang-option-${langs[idx].code}`) as HTMLElement;\n optionEl?.focus();\n }\n }\n\n private computeDropdownAlignment(): void {\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const viewportWidth = this.document.documentElement.clientWidth;\n const spaceOnRight = viewportWidth - hostRect.left;\n this.dropdownAlignRight.set(spaceOnRight < DROPDOWN_MIN_WIDTH);\n }\n\n private openLanguageDialog(): void {\n const config: EdsLanguageSelectorDialogConfig = {\n languages: this.languages(),\n selectedLanguage: this.selectedLanguage(),\n onLanguageChange: (code: string) => {\n this.languageChange.emit(code);\n },\n };\n\n this.dialogService.openDialog({\n title: 'Select Language',\n hasCloseButton: true,\n hasClosedOnEscape: true,\n hasClosedOnClickOutside: true,\n width: '480px',\n bodyComponent: { component: EdsLanguageSelectorDialog, config },\n }, this.injector);\n }\n}\n","<button\n type=\"button\"\n class=\"language-toggle\"\n [class.language-toggle--icon-layout]=\"hasIconLayout()\"\n [attr.aria-label]=\"computedAriaLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n (keydown)=\"onToggleKeydown($event)\">\n @if (hasIconLayout()) {\n <eds-icon icon=\"globe\" size=\"s\" />\n <span class=\"language-code\">{{ currentLanguage().code | uppercase }}</span>\n } @else {\n <span class=\"language-code\">{{ currentLanguage().code | uppercase }}</span>\n <eds-icon [icon]=\"isOpen() ? 'caret-up' : 'caret-down'\" size=\"s\" />\n }\n</button>\n\n@if (isOpen()) {\n <ul\n class=\"language-dropdown\"\n [class.language-dropdown--align-right]=\"resolvedAlignRight()\"\n role=\"listbox\"\n [attr.aria-activedescendant]=\"activeDescendantId()\"\n (keydown)=\"onDropdownKeydown($event)\">\n @for (lang of languages(); track lang.code; let i = $index) {\n <li\n class=\"language-option\"\n [class.selected]=\"lang.code === selectedLanguage()\"\n [class.focused]=\"i === focusedIndex()\"\n role=\"option\"\n [id]=\"'eds-lang-option-' + lang.code\"\n [attr.aria-selected]=\"lang.code === selectedLanguage()\"\n [tabindex]=\"i === focusedIndex() ? 0 : -1\"\n (click)=\"selectLanguage(lang)\">\n <span class=\"option-code\">{{ lang.code | uppercase }}</span>\n <span class=\"option-label\">{{ lang.label }}</span>\n </li>\n }\n </ul>\n}\n","import { EdsLanguageSelector } from './eds-language-selector';\nimport { EdsLanguageSelectorDialog } from './eds-language-selector-dialog';\n\nexport { EdsLanguageSelector };\nexport { EdsLanguageSelectorDialog, EdsLanguageSelectorDialogConfig } from './eds-language-selector-dialog';\nexport { EdsLanguage } from './eds-language-selector';\n\n/** Convenience array for importing eds-language-selector. */\nexport const EDS_LANGUAGE_SELECTOR = [EdsLanguageSelector, EdsLanguageSelectorDialog] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
@@ -45,4 +45,4 @@ const EDS_LINK = [
45
45
  */
46
46
 
47
47
  export { EDS_LINK, EdsLink };
48
- //# sourceMappingURL=eui-eds-utilities-eds-link.mjs.map
48
+ //# sourceMappingURL=eui-eds-eds-link.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eui-eds-eds-link.mjs","sources":["../../eds-link/eds-link.ts","../../eds-link/index.ts","../../eds-link/eui-eds-eds-link.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n input,\n} from '@angular/core';\n\n@Component({\n // eslint-disable-next-line\n selector: 'a[edsLink]',\n template: '<ng-content/>',\n styleUrl: './eds-link.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'eds-link',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.external]': 'external() || null',\n '[attr.contrast]': 'contrast() || null',\n '[attr.underline]': 'underline() || null',\n '[attr.inherit]': 'inherit() || null',\n '[attr.target]': 'external() ? \"_blank\" : null',\n '[attr.rel]': 'external() ? \"noopener noreferrer\" : null',\n },\n})\nexport class EdsLink {\n /** @description Data attribute for e2e testing */\n e2eAttr = input('eds-link');\n\n /** @description When true, styles the link as an external link (adds icon + target=\"_blank\") */\n external = input(false, { transform: booleanAttribute });\n\n /** @description When true, applies a contrast style (dark foreground color) */\n contrast = input(false, { transform: booleanAttribute });\n\n /**\n * @description When true, adds an underline to the link.\n * By default, links have no underline — use this to explicitly opt in.\n */\n underline = input(false, { transform: booleanAttribute });\n\n /** @description When true, makes the link inherit the parent color */\n inherit = input(false, { transform: booleanAttribute });\n}\n","import { EdsLink } from './eds-link';\n\nexport * from './eds-link';\n\n/** Convenience array for importing all eds-link components. */\nexport const EDS_LINK = [\n EdsLink,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAwBa,OAAO,CAAA;AAjBpB,IAAA,WAAA,GAAA;;QAmBI,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,UAAU;oFAAC;;QAG3B,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAGxD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,KAAK,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAGzD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC1D,IAAA;8GAlBY,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,gjCAdN,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m8DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAchB,OAAO,EAAA,UAAA,EAAA,CAAA;kBAjBnB,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,YACZ,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,iBAAiB,EAAE,oBAAoB;AACvC,wBAAA,kBAAkB,EAAE,qBAAqB;AACzC,wBAAA,gBAAgB,EAAE,mBAAmB;AACrC,wBAAA,eAAe,EAAE,8BAA8B;AAC/C,wBAAA,YAAY,EAAE,2CAA2C;AAC5D,qBAAA,EAAA,MAAA,EAAA,CAAA,m8DAAA,CAAA,EAAA;;;AClBL;AACO,MAAM,QAAQ,GAAG;IACpB,OAAO;;;ACNX;;AAEG;;;;"}
@@ -68,4 +68,4 @@ const EDS_LOADING_INDICATOR = [
68
68
  */
69
69
 
70
70
  export { EDS_LOADING_INDICATOR, EdsLoadingIndicator };
71
- //# sourceMappingURL=eui-eds-utilities-eds-loading-indicator.mjs.map
71
+ //# sourceMappingURL=eui-eds-eds-loading-indicator.mjs.map