@weeehaoooz/talos-ui 0.1.1 → 0.1.2

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 (190) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +91 -15
  3. package/fesm2022/weeehaoooz-talos-ui-button.mjs.map +1 -0
  4. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs +3110 -0
  5. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs.map +1 -0
  6. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs +2414 -0
  7. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs.map +1 -0
  8. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs +1039 -0
  9. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs.map +1 -0
  10. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs +2885 -0
  11. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs.map +1 -0
  12. package/fesm2022/weeehaoooz-talos-ui-form.mjs +10799 -0
  13. package/fesm2022/weeehaoooz-talos-ui-form.mjs.map +1 -0
  14. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +1316 -7
  15. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
  16. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +3 -3
  17. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
  18. package/fesm2022/weeehaoooz-talos-ui.mjs +21592 -16293
  19. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
  20. package/package.json +20 -139
  21. package/styles/_breadcrumb.scss +16 -0
  22. package/styles/_button-group.scss +2 -1
  23. package/styles/_buttons.scss +51 -0
  24. package/styles/_dropdown.scss +438 -0
  25. package/styles/_form-controls.scss +13 -0
  26. package/styles/_progress-bar.scss +43 -0
  27. package/styles/_skeleton.scss +176 -0
  28. package/styles/_spinner.scss +58 -0
  29. package/styles/_variables.scss +33 -0
  30. package/styles/index.scss +6 -1
  31. package/types/weeehaoooz-talos-ui-button.d.ts +92 -0
  32. package/types/weeehaoooz-talos-ui-button.d.ts.map +1 -0
  33. package/types/weeehaoooz-talos-ui-data-display.d.ts +1018 -0
  34. package/types/weeehaoooz-talos-ui-data-display.d.ts.map +1 -0
  35. package/types/weeehaoooz-talos-ui-data-viz.d.ts +839 -0
  36. package/types/weeehaoooz-talos-ui-data-viz.d.ts.map +1 -0
  37. package/types/weeehaoooz-talos-ui-dropdown.d.ts +187 -0
  38. package/types/weeehaoooz-talos-ui-dropdown.d.ts.map +1 -0
  39. package/types/weeehaoooz-talos-ui-feedback.d.ts +1495 -0
  40. package/types/weeehaoooz-talos-ui-feedback.d.ts.map +1 -0
  41. package/types/weeehaoooz-talos-ui-form.d.ts +2639 -0
  42. package/types/weeehaoooz-talos-ui-form.d.ts.map +1 -0
  43. package/types/weeehaoooz-talos-ui-layout.d.ts +851 -3
  44. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -1
  45. package/types/weeehaoooz-talos-ui-nav.d.ts +1 -1
  46. package/types/weeehaoooz-talos-ui.d.ts +7148 -4629
  47. package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
  48. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
  49. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -94
  50. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
  51. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
  52. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
  53. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs +0 -1627
  54. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs.map +0 -1
  55. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
  56. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
  57. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
  58. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
  59. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
  60. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
  61. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
  62. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
  63. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
  64. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
  65. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
  66. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
  67. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
  68. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
  69. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
  70. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
  71. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
  72. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
  73. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
  74. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
  75. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
  76. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
  77. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
  78. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
  79. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
  80. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
  81. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
  82. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
  83. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
  84. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
  85. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
  86. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
  87. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
  88. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
  89. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
  90. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
  91. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
  92. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
  93. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
  94. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
  95. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
  96. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
  97. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
  98. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
  99. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
  100. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
  101. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
  102. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
  103. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
  104. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
  105. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
  106. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
  107. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
  108. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
  109. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
  110. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
  111. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
  112. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
  113. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
  114. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
  115. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
  116. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
  117. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
  118. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
  119. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -62
  120. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
  121. package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
  122. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
  123. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
  124. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
  125. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts +0 -272
  126. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts.map +0 -1
  127. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
  128. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
  129. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
  130. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
  131. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
  132. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
  133. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
  134. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
  135. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
  136. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
  137. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
  138. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
  139. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
  140. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
  141. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
  142. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
  143. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
  144. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
  145. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
  146. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
  147. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
  148. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
  149. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
  150. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
  151. package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
  152. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
  153. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
  154. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
  155. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
  156. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
  157. package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
  158. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
  159. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
  160. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
  161. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
  162. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
  163. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
  164. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
  165. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
  166. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
  167. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
  168. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
  169. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
  170. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
  171. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
  172. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
  173. package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
  174. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
  175. package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
  176. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
  177. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
  178. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
  179. package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
  180. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
  181. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
  182. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
  183. package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
  184. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
  185. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
  186. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
  187. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
  188. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
  189. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
  190. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"weeehaoooz-talos-ui-form-drop-zone.mjs","sources":["../../../projects/talos-ui/form/drop-zone/drop-zone.directive.ts","../../../projects/talos-ui/form/drop-zone/drop-zone.component.ts","../../../projects/talos-ui/form/drop-zone/drop-zone.component.html","../../../projects/talos-ui/form/drop-zone/drop-zone.module.ts","../../../projects/talos-ui/form/drop-zone/weeehaoooz-talos-ui-form-drop-zone.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, output, signal } from '@angular/core';\n\n@Directive({\n selector: '[talosFileDrop], [talos-file-drop]',\n host: {\n 'class': 'talos-file-drop-target',\n '[class.is-drag-over]': 'isDragOver()',\n '[class.is-disabled]': 'disabled()',\n '(dragover)': 'onDragOver($event)',\n '(dragenter)': 'onDragEnter($event)',\n '(dragleave)': 'onDragLeave($event)',\n '(drop)': 'onDrop($event)'\n }\n})\nexport class TalosFileDropDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Whether the drop target is disabled */\n readonly disabled = input<boolean>(false);\n\n /** Signal emitting when files are dropped onto the element */\n readonly fileDrop = output<File[]>();\n\n /** Signal emitting when a drag enters the element */\n readonly dragOver = output<DragEvent>();\n\n /** Signal emitting when a drag leaves the element */\n readonly dragLeave = output<DragEvent>();\n\n /** Internal signal tracking active drag over state */\n readonly isDragOver = signal<boolean>(false);\n\n /** Counter to handle dragenter/dragleave transitions between child elements */\n private dragCounter = 0;\n\n onDragOver(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n\n onDragEnter(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n this.dragCounter++;\n\n if (this.dragCounter === 1) {\n this.isDragOver.set(true);\n this.dragOver.emit(event);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n this.dragCounter--;\n\n if (this.dragCounter <= 0) {\n this.dragCounter = 0;\n this.isDragOver.set(false);\n this.dragLeave.emit(event);\n }\n }\n\n onDrop(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n event.stopPropagation();\n this.dragCounter = 0;\n this.isDragOver.set(false);\n\n const dataTransfer = event.dataTransfer;\n if (!dataTransfer || !dataTransfer.files || dataTransfer.files.length === 0) {\n return;\n }\n\n const files: File[] = Array.from(dataTransfer.files);\n this.fileDrop.emit(files);\n }\n}\n","import {\n Component,\n ElementRef,\n TemplateRef,\n ViewChild,\n computed,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n DropZoneChangeEvent,\n DropZoneFile,\n DropZoneFileStatus,\n DropZoneRejection,\n DropZoneSize,\n DropZoneValidatorFn,\n DropZoneVariant,\n FileRejectionReason\n} from './drop-zone.types';\nimport { TalosFileDropDirective } from './drop-zone.directive';\n\nlet uniqueDropZoneIdCounter = 0;\n\n@Component({\n selector: 'talos-drop-zone, talos-file-upload',\n imports: [NgTemplateOutlet, TalosFileDropDirective],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TalosDropZoneComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'talos-drop-zone-host',\n '[class.is-disabled]': 'effectiveDisabled()',\n '[class.is-readonly]': 'readonly()',\n '[class.is-loading]': 'loading()',\n '[class.is-drag-over]': 'isDragOver()',\n '[class.variant-default]': 'variant() === \"default\"',\n '[class.variant-compact]': 'variant() === \"compact\"',\n '[class.variant-mini]': 'variant() === \"mini\"',\n '[class.variant-card]': 'variant() === \"card\"',\n '[class.size-sm]': 'size() === \"sm\"',\n '[class.size-md]': 'size() === \"md\"',\n '[class.size-lg]': 'size() === \"lg\"'\n }\n})\nexport class TalosDropZoneComponent implements ControlValueAccessor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // --- Signal Inputs ---\n /** Accepted file types / extensions (e.g. \"image/*\", \".pdf,.docx\", \"image/png,image/jpeg\") */\n readonly accept = input<string>('');\n\n /** Allow selecting multiple files */\n readonly multiple = input<boolean>(true);\n\n /** Maximum file size in bytes or human-readable string (e.g. 5242880 or '5MB') */\n readonly maxFileSize = input<number | string | null>(null);\n\n /** Minimum file size in bytes or human-readable string (e.g. 1024 or '1KB') */\n readonly minFileSize = input<number | string | null>(null);\n\n /** Maximum total number of files allowed */\n readonly maxFiles = input<number | null>(null);\n\n /** Disable user interactions */\n readonly disabled = input<boolean>(false);\n\n /** Make drop zone read-only */\n readonly readonly = input<boolean>(false);\n\n /** Display loading / processing spinner */\n readonly loading = input<boolean>(false);\n\n /** Layout visual variant */\n readonly variant = input<DropZoneVariant>('default');\n\n /** Sizing variant */\n readonly size = input<DropZoneSize>('md');\n\n /** Primary title displayed in the drop zone */\n readonly title = input<string>('Choose a file or drag & drop it here');\n\n /** Subtitle / hint text displayed below the title */\n readonly subTitle = input<string>('JPEG, PNG, PDF, and DOC formats, up to 50 MB');\n\n /** Text label for the browse button/link */\n readonly browseLabel = input<string>('Browse file');\n\n /** Secondary bottom helper text or error message */\n readonly hint = input<string>('');\n\n /** Whether to render the built-in staged file list preview */\n readonly showFileList = input<boolean>(true);\n\n /** Automatically manage staged files in internal state when dropped/selected */\n readonly autoManageFiles = input<boolean>(true);\n\n /** Automatically generate object URL thumbnails for image files */\n readonly autoGeneratePreviews = input<boolean>(true);\n\n /** Allow removing staged files */\n readonly removable = input<boolean>(true);\n\n /** Allow retrying failed uploads */\n readonly allowRetry = input<boolean>(true);\n\n /** Custom validator function for individual files */\n readonly validator = input<DropZoneValidatorFn | null>(null);\n\n /** Custom template for rendering staged file list items */\n readonly itemTemplate = input<TemplateRef<{ $implicit: DropZoneFile; index: number; remove: () => void; retry: () => void }> | null>(null);\n\n /** Custom template for rendering drop zone inner content */\n readonly contentTemplate = input<TemplateRef<void> | null>(null);\n\n /** Component DOM ID */\n readonly id = input<string>('');\n\n /** Form control name */\n readonly name = input<string>('');\n\n // --- Two-way Model Signal ---\n /** Staged / uploaded files model */\n readonly files = model<DropZoneFile[]>([]);\n\n // --- Signal Outputs ---\n /** Emitted with raw native File objects */\n readonly rawFilesChange = output<File[]>();\n\n /** Emitted when files are dropped */\n readonly fileDrop = output<File[]>();\n\n /** Emitted when files are selected via native file dialog */\n readonly fileSelect = output<File[]>();\n\n /** Emitted when a file is removed */\n readonly fileRemove = output<DropZoneFile>();\n\n /** Emitted when a file retry button is clicked */\n readonly fileRetry = output<DropZoneFile>();\n\n /** Emitted when files fail validation */\n readonly rejected = output<DropZoneRejection[]>();\n\n /** Emitted when drag over state changes */\n readonly dragStateChange = output<boolean>();\n\n /** Emitted with full change event payload */\n readonly change = output<DropZoneChangeEvent>();\n\n // --- View Children ---\n @ViewChild('fileInput') fileInput?: ElementRef<HTMLInputElement>;\n\n // --- IDs & Internal Signals ---\n private readonly autoId = `talos-dropzone-${uniqueDropZoneIdCounter++}`;\n readonly componentId = computed(() => this.id() || this.autoId);\n readonly inputId = computed(() => `${this.componentId()}-input`);\n\n readonly isDragOver = signal<boolean>(false);\n readonly isDisabled = signal<boolean>(false);\n readonly isTouched = signal<boolean>(false);\n\n\n // --- Computed States ---\n readonly effectiveDisabled = computed(() => this.disabled() || this.isDisabled() || this.readonly());\n\n readonly maxSizeBytes = computed(() => this.parseByteSize(this.maxFileSize()));\n readonly minSizeBytes = computed(() => this.parseByteSize(this.minFileSize()));\n\n readonly hasFiles = computed(() => this.files().length > 0);\n\n readonly isMaxFilesReached = computed(() => {\n const max = this.maxFiles();\n if (max === null || max === undefined) return false;\n return this.files().length >= max;\n });\n\n // --- ControlValueAccessor Callbacks ---\n private onChange: (value: DropZoneFile[] | File[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n // --- ControlValueAccessor Implementation ---\n\n writeValue(value: DropZoneFile[] | File[] | File | null): void {\n if (value === null || value === undefined) {\n this.files.set([]);\n return;\n }\n\n if (Array.isArray(value)) {\n const parsedFiles = value.map((item, idx) => {\n if (item instanceof File) {\n return this.createDropZoneFile(item, `file-${idx}`);\n }\n return item as DropZoneFile;\n });\n this.files.set(parsedFiles);\n } else if (value instanceof File) {\n this.files.set([this.createDropZoneFile(value, 'file-0')]);\n } else if (typeof value === 'object' && 'file' in (value as object)) {\n this.files.set([value as DropZoneFile]);\n }\n }\n\n registerOnChange(fn: (value: DropZoneFile[] | File[]) => 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 this.isDisabled.set(isDisabled);\n }\n\n // --- Public / Interaction Methods ---\n\n /**\n * Opens the native file selector dialog.\n */\n openFileDialog(): void {\n if (this.effectiveDisabled() || this.isMaxFilesReached()) return;\n if (this.fileInput) {\n // Reset input value to allow selecting the same file again\n this.fileInput.nativeElement.value = '';\n this.fileInput.nativeElement.click();\n }\n }\n\n /**\n * Keyboard handler on the drop zone container (Enter / Space to open browse dialog)\n */\n onKeyDown(event: KeyboardEvent): void {\n if (this.effectiveDisabled()) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.openFileDialog();\n }\n }\n\n /**\n * Native file input change handler\n */\n onNativeInputChange(event: Event): void {\n if (this.effectiveDisabled()) return;\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n this.fileSelect.emit(files);\n this.processFiles(files);\n this.markAsTouched();\n }\n\n /**\n * Handles files dropped onto the dropzone\n */\n onDropFiles(droppedFiles: File[]): void {\n if (this.effectiveDisabled()) return;\n this.fileDrop.emit(droppedFiles);\n this.processFiles(droppedFiles);\n this.markAsTouched();\n }\n\n /**\n * Updates drag over state\n */\n onDragState(isOver: boolean): void {\n if (this.effectiveDisabled()) return;\n this.isDragOver.set(isOver);\n this.dragStateChange.emit(isOver);\n }\n\n /**\n * Removes a file from the staged list\n */\n removeFile(dropFile: DropZoneFile, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.effectiveDisabled() || !this.removable()) return;\n\n // Revoke preview URL if created\n if (dropFile.previewUrl && dropFile.previewUrl.startsWith('blob:')) {\n URL.revokeObjectURL(dropFile.previewUrl);\n }\n\n const updated = this.files().filter((f) => f.id !== dropFile.id);\n this.files.set(updated);\n this.fileRemove.emit(dropFile);\n this.emitChanges(updated);\n this.markAsTouched();\n }\n\n /**\n * Retries uploading a file\n */\n retryFile(dropFile: DropZoneFile, event?: MouseEvent): void {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (this.effectiveDisabled() || !this.allowRetry()) return;\n\n // Update status to pending\n const updated = this.files().map((f) => {\n if (f.id === dropFile.id) {\n return { ...f, status: 'pending' as DropZoneFileStatus, errorMessage: undefined, progress: 0 };\n }\n return f;\n });\n\n this.files.set(updated);\n this.fileRetry.emit(dropFile);\n this.emitChanges(updated);\n }\n\n /**\n * Updates the progress or status of a staged file programmatically.\n */\n updateFileProgress(fileId: string, progress: number, status?: DropZoneFileStatus, errorMessage?: string): void {\n const updated = this.files().map((f) => {\n if (f.id === fileId) {\n return {\n ...f,\n progress: Math.min(100, Math.max(0, progress)),\n status: status ?? (progress >= 100 ? 'success' : 'uploading'),\n errorMessage\n };\n }\n return f;\n });\n this.files.set(updated);\n this.emitChanges(updated);\n }\n\n /**\n * Clear all files from the drop zone.\n */\n clearFiles(): void {\n // Revoke preview URLs\n for (const f of this.files()) {\n if (f.previewUrl && f.previewUrl.startsWith('blob:')) {\n URL.revokeObjectURL(f.previewUrl);\n }\n }\n this.files.set([]);\n this.emitChanges([]);\n this.markAsTouched();\n }\n\n // --- Processing & Validation ---\n\n private processFiles(rawFiles: File[]): void {\n if (!rawFiles || rawFiles.length === 0) return;\n\n const currentFiles = this.files();\n const accepted: DropZoneFile[] = [];\n const rejections: DropZoneRejection[] = [];\n\n const isMultiple = this.multiple();\n const maxFilesAllowed = this.maxFiles();\n\n // If single mode, replace existing or take only the first file\n const targetFiles = isMultiple ? rawFiles : [rawFiles[0]];\n\n for (const file of targetFiles) {\n // Check total count constraint\n const simulatedCount = isMultiple ? currentFiles.length + accepted.length : accepted.length;\n if (maxFilesAllowed !== null && maxFilesAllowed !== undefined && simulatedCount >= maxFilesAllowed) {\n rejections.push({\n file,\n reason: 'MAX_FILES_EXCEEDED',\n message: `Maximum allowed number of files (${maxFilesAllowed}) reached.`\n });\n continue;\n }\n\n // Check file validation\n const validation = this.validateFile(file);\n if (!validation.valid && validation.rejection) {\n rejections.push(validation.rejection);\n continue;\n }\n\n const dropZoneFile = this.createDropZoneFile(file);\n accepted.push(dropZoneFile);\n }\n\n if (rejections.length > 0) {\n this.rejected.emit(rejections);\n }\n\n if (accepted.length > 0 && this.autoManageFiles()) {\n let nextFiles: DropZoneFile[];\n if (isMultiple) {\n nextFiles = [...currentFiles, ...accepted];\n } else {\n // Clear previous previews if replacing\n for (const f of currentFiles) {\n if (f.previewUrl && f.previewUrl.startsWith('blob:')) {\n URL.revokeObjectURL(f.previewUrl);\n }\n }\n nextFiles = accepted;\n }\n\n this.files.set(nextFiles);\n this.emitChanges(nextFiles, rejections);\n } else if (rejections.length > 0) {\n this.change.emit({\n files: currentFiles,\n rawFiles: currentFiles.map((f) => f.file),\n rejected: rejections\n });\n }\n }\n\n private validateFile(file: File): { valid: boolean; rejection?: DropZoneRejection } {\n // 1. Accept filter check\n const acceptStr = this.accept();\n if (acceptStr && !this.checkAccept(file, acceptStr)) {\n return {\n valid: false,\n rejection: {\n file,\n reason: 'INVALID_TYPE',\n message: `File type \"${file.type || 'unknown'}\" is not supported.`\n }\n };\n }\n\n // 2. Max file size check\n const maxBytes = this.maxSizeBytes();\n if (maxBytes !== null && file.size > maxBytes) {\n return {\n valid: false,\n rejection: {\n file,\n reason: 'FILE_TOO_LARGE',\n message: `File size (${this.formatBytes(file.size)}) exceeds maximum limit of ${this.formatBytes(maxBytes)}.`\n }\n };\n }\n\n // 3. Min file size check\n const minBytes = this.minSizeBytes();\n if (minBytes !== null && file.size < minBytes) {\n return {\n valid: false,\n rejection: {\n file,\n reason: 'FILE_TOO_SMALL',\n message: `File size (${this.formatBytes(file.size)}) is smaller than minimum required ${this.formatBytes(minBytes)}.`\n }\n };\n }\n\n // 4. Custom validator check\n const customVal = this.validator();\n if (customVal) {\n const errorMsg = customVal(file);\n if (errorMsg) {\n return {\n valid: false,\n rejection: {\n file,\n reason: 'CUSTOM_VALIDATION_FAILED',\n message: errorMsg\n }\n };\n }\n }\n\n return { valid: true };\n }\n\n private checkAccept(file: File, accept: string): boolean {\n const rules = accept.split(',').map((r) => r.trim().toLowerCase());\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n for (const rule of rules) {\n if (!rule) continue;\n\n if (rule.startsWith('.')) {\n // Extension check (e.g. .pdf, .png)\n if (fileName.endsWith(rule)) return true;\n } else if (rule.endsWith('/*')) {\n // Wildcard MIME check (e.g. image/*, video/*, audio/*)\n const prefix = rule.slice(0, -1); // \"image/\"\n if (fileType.startsWith(prefix)) return true;\n } else if (fileType === rule) {\n // Exact MIME check (e.g. application/pdf)\n return true;\n }\n }\n\n return false;\n }\n\n private createDropZoneFile(file: File, idPrefix = 'file'): DropZoneFile {\n const id = `${idPrefix}-${Math.random().toString(36).substring(2, 9)}`;\n let previewUrl: string | undefined;\n\n if (this.autoGeneratePreviews() && file.type.startsWith('image/')) {\n try {\n previewUrl = URL.createObjectURL(file);\n } catch {\n previewUrl = undefined;\n }\n }\n\n return {\n id,\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n progress: 0,\n status: 'pending',\n previewUrl\n };\n }\n\n private emitChanges(updatedFiles: DropZoneFile[], rejections: DropZoneRejection[] = []): void {\n const raw = updatedFiles.map((f) => f.file);\n this.rawFilesChange.emit(raw);\n this.onChange(updatedFiles);\n this.change.emit({\n files: updatedFiles,\n rawFiles: raw,\n rejected: rejections\n });\n }\n\n private markAsTouched(): void {\n if (!this.isTouched()) {\n this.isTouched.set(true);\n this.onTouched();\n }\n }\n\n // --- Formatters & Helpers ---\n\n parseByteSize(size: number | string | null | undefined): number | null {\n if (size === null || size === undefined || size === '') return null;\n if (typeof size === 'number') return size;\n\n const cleaned = size.trim().toUpperCase();\n const match = cleaned.match(/^(\\d+(?:\\.\\d+)?)\\s*(B|KB|MB|GB|TB)?$/);\n if (!match) return null;\n\n const num = parseFloat(match[1]);\n const unit = match[2] || 'B';\n\n const multipliers: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n TB: 1024 * 1024 * 1024 * 1024\n };\n\n return Math.round(num * (multipliers[unit] || 1));\n }\n\n formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const formatted = parseFloat((bytes / Math.pow(k, i)).toFixed(dm));\n return `${formatted} ${sizes[i]}`;\n }\n\n getFileTypeCategory(file: DropZoneFile): 'image' | 'pdf' | 'doc' | 'archive' | 'audio' | 'video' | 'code' | 'generic' {\n const type = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n\n if (type.startsWith('image/') || /\\.(png|jpg|jpeg|gif|webp|svg|bmp|ico)$/.test(name)) return 'image';\n if (type === 'application/pdf' || name.endsWith('.pdf')) return 'pdf';\n if (\n type.includes('word') ||\n type.includes('document') ||\n type.includes('sheet') ||\n type.includes('excel') ||\n type.includes('presentation') ||\n type.includes('powerpoint') ||\n /\\.(doc|docx|xls|xlsx|ppt|pptx|txt|rtf|csv)$/.test(name)\n ) {\n return 'doc';\n }\n if (type.includes('zip') || type.includes('compressed') || type.includes('tar') || /\\.(zip|rar|7z|tar|gz)$/.test(name)) {\n return 'archive';\n }\n if (type.startsWith('audio/') || /\\.(mp3|wav|ogg|flac|m4a)$/.test(name)) return 'audio';\n if (type.startsWith('video/') || /\\.(mp4|webm|mkv|mov|avi)$/.test(name)) return 'video';\n if (/\\.(ts|js|json|html|css|scss|py|go|rs|java|c|cpp|sql|xml|yaml|yml)$/.test(name)) return 'code';\n\n return 'generic';\n }\n}\n","<div\n class=\"talos-drop-zone-area\"\n talosFileDrop\n [disabled]=\"effectiveDisabled() || isMaxFilesReached()\"\n (fileDrop)=\"onDropFiles($event)\"\n (dragOver)=\"onDragState(true)\"\n (dragLeave)=\"onDragState(false)\"\n (click)=\"openFileDialog()\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"effectiveDisabled() ? 'true' : null\"\n [attr.aria-label]=\"title()\"\n [attr.id]=\"componentId()\"\n>\n <!-- Hidden Native File Input -->\n <input\n #fileInput\n type=\"file\"\n class=\"talos-drop-zone-native-input\"\n [attr.id]=\"inputId()\"\n [attr.name]=\"name() || null\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"effectiveDisabled() || isMaxFilesReached()\"\n (change)=\"onNativeInputChange($event)\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n />\n\n <!-- Loading Overlay -->\n @if (loading()) {\n <div class=\"talos-drop-zone-loading-overlay\" aria-live=\"polite\" aria-busy=\"true\">\n <div class=\"talos-drop-zone-spinner\" aria-hidden=\"true\"></div>\n <span class=\"talos-drop-zone-loading-text\">Processing files...</span>\n </div>\n }\n\n <!-- Drop Zone Inner Content -->\n @if (contentTemplate()) {\n <ng-container [ngTemplateOutlet]=\"contentTemplate()!\" />\n } @else {\n <div class=\"talos-drop-zone-content\">\n <div class=\"talos-drop-zone-icon-wrapper\" aria-hidden=\"true\">\n <svg\n class=\"talos-drop-zone-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242\" />\n <path d=\"M12 12v9\" />\n <path d=\"m16 16-4-4-4 4\" />\n </svg>\n </div>\n\n <div class=\"talos-drop-zone-text-group\">\n <div class=\"talos-drop-zone-title\">\n <span>{{ title() }}</span>\n @if (browseLabel()) {\n <span class=\"talos-drop-zone-browse-link\"> {{ browseLabel() }}</span>\n }\n </div>\n\n @if (subTitle()) {\n <p class=\"talos-drop-zone-subtitle\">{{ subTitle() }}</p>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- Helper / Error Hint -->\n@if (hint()) {\n <div class=\"talos-drop-zone-hint\">\n {{ hint() }}\n </div>\n}\n\n<!-- Attached / Staged Files List Preview -->\n@if (showFileList() && hasFiles()) {\n <div class=\"talos-drop-zone-file-list\" aria-label=\"Attached files\">\n <div class=\"talos-drop-zone-file-list-header\">\n <span class=\"talos-drop-zone-file-list-title\">\n Attached files ({{ files().length }}{{ maxFiles() ? ' / ' + maxFiles() : '' }})\n </span>\n @if (removable() && !effectiveDisabled()) {\n <button\n type=\"button\"\n class=\"talos-drop-zone-clear-all-btn\"\n (click)=\"clearFiles()\"\n aria-label=\"Clear all attached files\"\n >\n Clear all\n </button>\n }\n </div>\n\n <div class=\"talos-drop-zone-files-grid\">\n @for (file of files(); track file.id; let idx = $index) {\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"{\n $implicit: file,\n index: idx,\n remove: removeFile.bind(this, file),\n retry: retryFile.bind(this, file)\n }\"\n />\n } @else {\n <div\n class=\"talos-drop-zone-file-item\"\n [class.status-pending]=\"file.status === 'pending'\"\n [class.status-uploading]=\"file.status === 'uploading'\"\n [class.status-success]=\"file.status === 'success'\"\n [class.status-error]=\"file.status === 'error'\"\n >\n <!-- Thumbnail or Icon -->\n <div class=\"talos-drop-zone-file-preview\" aria-hidden=\"true\">\n @if (file.previewUrl) {\n <img [src]=\"file.previewUrl\" [alt]=\"file.name\" class=\"talos-drop-zone-img-preview\" />\n } @else {\n @switch (getFileTypeCategory(file)) {\n @case ('pdf') {\n <div class=\"talos-drop-zone-type-badge type-pdf\">\n <span>PDF</span>\n </div>\n }\n @case ('doc') {\n <div class=\"talos-drop-zone-type-badge type-doc\">\n <span>DOC</span>\n </div>\n }\n @case ('archive') {\n <div class=\"talos-drop-zone-type-badge type-archive\">\n <span>ZIP</span>\n </div>\n }\n @case ('audio') {\n <div class=\"talos-drop-zone-type-badge type-audio\">\n <span>AUD</span>\n </div>\n }\n @case ('video') {\n <div class=\"talos-drop-zone-type-badge type-video\">\n <span>VID</span>\n </div>\n }\n @case ('code') {\n <div class=\"talos-drop-zone-type-badge type-code\">\n <span>&lt;/&gt;</span>\n </div>\n }\n @default {\n <div class=\"talos-drop-zone-type-badge type-generic\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n </div>\n }\n }\n }\n </div>\n\n <!-- File Info & Progress -->\n <div class=\"talos-drop-zone-file-meta\">\n <div class=\"talos-drop-zone-file-header\">\n <span class=\"talos-drop-zone-file-name\" [title]=\"file.name\">{{ file.name }}</span>\n <span class=\"talos-drop-zone-file-size\">{{ formatBytes(file.size) }}</span>\n </div>\n\n @if (file.status === 'uploading' && file.progress !== undefined) {\n <div class=\"talos-drop-zone-file-progress-bar\" role=\"progressbar\" [attr.aria-valuenow]=\"file.progress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"talos-drop-zone-file-progress-fill\" [style.width.%]=\"file.progress\"></div>\n </div>\n }\n\n @if (file.status === 'error' && file.errorMessage) {\n <div class=\"talos-drop-zone-file-error-msg\">\n {{ file.errorMessage }}\n </div>\n }\n </div>\n\n <!-- Status Indicator / Actions -->\n <div class=\"talos-drop-zone-file-actions\">\n @if (file.status === 'uploading') {\n <span class=\"talos-drop-zone-file-percent\">{{ file.progress }}%</span>\n }\n\n @if (file.status === 'success') {\n <span class=\"talos-drop-zone-status-icon status-success\" title=\"Uploaded successfully\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </span>\n }\n\n @if (file.status === 'error' && allowRetry()) {\n <button\n type=\"button\"\n class=\"talos-drop-zone-action-btn btn-retry\"\n [attr.aria-label]=\"'Retry upload for ' + file.name\"\n (click)=\"retryFile(file, $event)\"\n title=\"Retry upload\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21.5 2v6h-6M21.34 15.57a10 10 0 1 1-.57-8.38l5.67-5.67\" />\n </svg>\n </button>\n }\n\n @if (removable() && !effectiveDisabled()) {\n <button\n type=\"button\"\n class=\"talos-drop-zone-action-btn btn-remove\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n (click)=\"removeFile(file, $event)\"\n title=\"Remove file\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { TalosDropZoneComponent } from './drop-zone.component';\nimport { TalosFileDropDirective } from './drop-zone.directive';\n\n@NgModule({\n imports: [TalosDropZoneComponent, TalosFileDropDirective],\n exports: [TalosDropZoneComponent, TalosFileDropDirective]\n})\nexport class TalosDropZoneModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,147 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ElementRef, input, signal, computed, Component, NgModule } from '@angular/core';
3
-
4
- let formFieldUniqueId = 0;
5
- class TalosFormFieldComponent {
6
- elementRef = inject((ElementRef));
7
- // Signal Inputs
8
- label = input('', /* @ts-ignore */
9
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
10
- floating = input(false, /* @ts-ignore */
11
- ...(ngDevMode ? [{ debugName: "floating" }] : /* istanbul ignore next */ []));
12
- floatingLabel = input(false, /* @ts-ignore */
13
- ...(ngDevMode ? [{ debugName: "floatingLabel" }] : /* istanbul ignore next */ []));
14
- hint = input('', /* @ts-ignore */
15
- ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
16
- error = input('', /* @ts-ignore */
17
- ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
18
- required = input(false, /* @ts-ignore */
19
- ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
20
- disabled = input(false, /* @ts-ignore */
21
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
22
- invalid = input(false, /* @ts-ignore */
23
- ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
24
- size = input('md', /* @ts-ignore */
25
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
26
- forId = input('', /* @ts-ignore */
27
- ...(ngDevMode ? [{ debugName: "forId" }] : /* istanbul ignore next */ []));
28
- // Internal state
29
- isFocused = signal(false, /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
31
- hasValue = signal(false, /* @ts-ignore */
32
- ...(ngDevMode ? [{ debugName: "hasValue" }] : /* istanbul ignore next */ []));
33
- isTextarea = signal(false, /* @ts-ignore */
34
- ...(ngDevMode ? [{ debugName: "isTextarea" }] : /* istanbul ignore next */ []));
35
- hasPrefix = signal(false, /* @ts-ignore */
36
- ...(ngDevMode ? [{ debugName: "hasPrefix" }] : /* istanbul ignore next */ []));
37
- hasSuffix = signal(false, /* @ts-ignore */
38
- ...(ngDevMode ? [{ debugName: "hasSuffix" }] : /* istanbul ignore next */ []));
39
- autoId = `talos-field-${++formFieldUniqueId}`;
40
- inputId = computed(() => this.forId() || `${this.autoId}-input`, /* @ts-ignore */
41
- ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
42
- isFloatingMode = computed(() => this.floating() || this.floatingLabel(), /* @ts-ignore */
43
- ...(ngDevMode ? [{ debugName: "isFloatingMode" }] : /* istanbul ignore next */ []));
44
- isFloated = computed(() => {
45
- if (!this.isFloatingMode()) {
46
- return false;
47
- }
48
- return this.isFocused() || this.hasValue();
49
- }, /* @ts-ignore */
50
- ...(ngDevMode ? [{ debugName: "isFloated" }] : /* istanbul ignore next */ []));
51
- ngAfterContentChecked() {
52
- this.checkValue();
53
- }
54
- onFocusIn() {
55
- this.isFocused.set(true);
56
- this.checkValue();
57
- }
58
- onFocusOut() {
59
- this.isFocused.set(false);
60
- this.checkValue();
61
- }
62
- onInput() {
63
- this.checkValue();
64
- }
65
- onLabelClick() {
66
- const root = this.elementRef.nativeElement;
67
- const inputEl = root.querySelector('input, textarea, select, [tabindex="0"]');
68
- if (inputEl) {
69
- inputEl.focus();
70
- }
71
- }
72
- checkValue() {
73
- const root = this.elementRef.nativeElement;
74
- const textareaEl = root.querySelector('textarea');
75
- this.isTextarea.set(!!textareaEl);
76
- const prefixEl = root.querySelector('[talosPrefix], [talosTextPrefix], [talos-prefix], [talos-text-prefix], [talosLead], [talosStart], .talos-input-prefix, .password-prefix-icon');
77
- this.hasPrefix.set(!!prefixEl);
78
- const suffixEl = root.querySelector('[talosSuffix], [talosPostfix], [talosTextSuffix], [talosTextPostfix], [talos-suffix], [talos-postfix], [talosTrail], [talosEnd], .talos-input-suffix, .password-mask-toggle-btn');
79
- this.hasSuffix.set(!!suffixEl);
80
- const inputEl = root.querySelector('input, textarea, select');
81
- if (inputEl) {
82
- this.hasValue.set(!!inputEl.value);
83
- }
84
- if (prefixEl) {
85
- const prefixWidth = prefixEl.getBoundingClientRect().width;
86
- if (prefixWidth > 0) {
87
- // Base control padding (10px / 0.625rem) + prefix width + inner spacing (6px)
88
- root.style.setProperty('--talos-prefix-offset', `${Math.round(prefixWidth + 16)}px`);
89
- }
90
- }
91
- else {
92
- root.style.removeProperty('--talos-prefix-offset');
93
- }
94
- if (suffixEl) {
95
- const suffixWidth = suffixEl.getBoundingClientRect().width;
96
- if (suffixWidth > 0) {
97
- // Base control padding (10px / 0.625rem) + suffix width + inner spacing (6px)
98
- root.style.setProperty('--talos-suffix-offset', `${Math.round(suffixWidth + 16)}px`);
99
- }
100
- }
101
- else {
102
- root.style.removeProperty('--talos-suffix-offset');
103
- }
104
- }
105
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
106
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosFormFieldComponent, isStandalone: true, selector: "talos-form-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, floating: { classPropertyName: "floating", publicName: "floating", isSignal: true, isRequired: false, transformFunction: null }, floatingLabel: { classPropertyName: "floatingLabel", publicName: "floatingLabel", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, forId: { classPropertyName: "forId", publicName: "forId", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusOut()", "input": "onInput()" }, properties: { "class.is-floating": "isFloatingMode()", "class.is-floated": "isFloated()", "class.is-focused": "isFocused()", "class.is-disabled": "disabled()", "class.is-invalid": "invalid() || !!error()", "class.is-textarea": "isTextarea()", "class.has-prefix": "hasPrefix()", "class.has-suffix": "hasSuffix()", "class.form-field-sm": "size() === \"sm\"", "class.form-field-md": "size() === \"md\"", "class.form-field-lg": "size() === \"lg\"" }, classAttribute: "talos-form-field-host" }, ngImport: i0, template: "<div class=\"form-field-wrapper\" [class.has-floating-label]=\"isFloatingMode()\">\n @if (label() && !isFloatingMode()) {\n <label class=\"talos-field-label\" [attr.for]=\"inputId()\" (click)=\"onLabelClick()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div class=\"form-field-control-container\">\n <ng-content></ng-content>\n\n @if (label() && isFloatingMode()) {\n <label\n class=\"talos-floating-label\"\n [class.is-floated]=\"isFloated()\"\n [attr.for]=\"inputId()\"\n (click)=\"onLabelClick()\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n </div>\n\n @if (error()) {\n <span class=\"field-error\" role=\"alert\">{{ error() }}</span>\n } @else if (hint()) {\n <span class=\"field-help\">{{ hint() }}</span>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box;--talos-control-height: 2.25rem;--talos-control-padding-x: .625rem;--talos-control-font-size: .8125rem;--talos-affix-btn-size: var(--talos-affix-btn-size-md, 1.5rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-md, .875rem)}.form-field-wrapper{display:flex;flex-direction:column;position:relative;width:100%}.form-field-wrapper .talos-field-label{display:inline-flex;align-items:center;font-size:var(--talos-control-font-size, .8125rem);font-weight:600;color:var(--talos-text-color, #0f172a);margin-bottom:.375rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .15s ease}.form-field-wrapper .talos-field-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.form-field-wrapper .form-field-control-container{position:relative;width:100%;display:flex;flex-direction:column}.form-field-wrapper .talos-floating-label{position:absolute;left:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%);transform-origin:left center;font-size:var(--talos-control-font-size, .8125rem);font-weight:500;color:var(--talos-input-placeholder-color, #94a3b8);pointer-events:none;-webkit-user-select:none;user-select:none;background-color:var(--talos-input-bg, var(--talos-card-bg, #ffffff));padding:0 .25rem;border-radius:.25rem;line-height:1;z-index:2;transition:transform .18s cubic-bezier(.4,0,.2,1),font-size .18s cubic-bezier(.4,0,.2,1),color .18s cubic-bezier(.4,0,.2,1),left .18s cubic-bezier(.4,0,.2,1),top .18s cubic-bezier(.4,0,.2,1)}.form-field-wrapper .talos-floating-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.form-field-wrapper .talos-floating-label.is-floated{top:0!important;left:var(--talos-control-padding-x, .625rem)!important;transform:translateY(-50%) scale(.85)!important;font-size:.75rem;font-weight:600;color:var(--talos-text-muted, #64748b)}.form-field-wrapper .field-error{font-size:.75rem;color:var(--talos-error-color, #ef4444);margin-top:.375rem;font-weight:500}.form-field-wrapper .field-help{font-size:.75rem;color:var(--talos-text-muted, #64748b);margin-top:.375rem}.form-field-control-container>::ng-deep .talos-input-prefix,.form-field-control-container>::ng-deep [talosPrefix],.form-field-control-container>::ng-deep [talosTextPrefix],.form-field-control-container>::ng-deep [talosLead],.form-field-control-container>::ng-deep [talosStart],::ng-deep .form-field-control-container>.talos-input-prefix,::ng-deep .form-field-control-container>[talosPrefix],::ng-deep .form-field-control-container>[talosTextPrefix],::ng-deep .form-field-control-container>[talosLead],::ng-deep .form-field-control-container>[talosStart]{position:absolute;left:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%)!important;display:inline-flex;align-items:center;justify-content:center;color:var(--talos-text-muted, #64748b);font-size:var(--talos-control-font-size, .8125rem);font-weight:500;line-height:1;z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap}.form-field-control-container>::ng-deep .talos-input-prefix.affix-interactive,.form-field-control-container>::ng-deep .talos-input-prefix button,.form-field-control-container>::ng-deep .talos-input-prefix a,.form-field-control-container>::ng-deep [talosPrefix].affix-interactive,.form-field-control-container>::ng-deep [talosPrefix] button,.form-field-control-container>::ng-deep [talosPrefix] a,.form-field-control-container>::ng-deep [talosTextPrefix].affix-interactive,.form-field-control-container>::ng-deep [talosTextPrefix] button,.form-field-control-container>::ng-deep [talosTextPrefix] a,.form-field-control-container>::ng-deep [talosLead].affix-interactive,.form-field-control-container>::ng-deep [talosLead] button,.form-field-control-container>::ng-deep [talosLead] a,.form-field-control-container>::ng-deep [talosStart].affix-interactive,.form-field-control-container>::ng-deep [talosStart] button,.form-field-control-container>::ng-deep [talosStart] a,::ng-deep .form-field-control-container>.talos-input-prefix.affix-interactive,::ng-deep .form-field-control-container>.talos-input-prefix button,::ng-deep .form-field-control-container>.talos-input-prefix a,::ng-deep .form-field-control-container>[talosPrefix].affix-interactive,::ng-deep .form-field-control-container>[talosPrefix] button,::ng-deep .form-field-control-container>[talosPrefix] a,::ng-deep .form-field-control-container>[talosTextPrefix].affix-interactive,::ng-deep .form-field-control-container>[talosTextPrefix] button,::ng-deep .form-field-control-container>[talosTextPrefix] a,::ng-deep .form-field-control-container>[talosLead].affix-interactive,::ng-deep .form-field-control-container>[talosLead] button,::ng-deep .form-field-control-container>[talosLead] a,::ng-deep .form-field-control-container>[talosStart].affix-interactive,::ng-deep .form-field-control-container>[talosStart] button,::ng-deep .form-field-control-container>[talosStart] a{pointer-events:auto}.form-field-control-container>::ng-deep .talos-input-prefix:hover,.form-field-control-container>::ng-deep .talos-input-prefix:active,.form-field-control-container>::ng-deep .talos-input-prefix:focus,.form-field-control-container>::ng-deep [talosPrefix]:hover,.form-field-control-container>::ng-deep [talosPrefix]:active,.form-field-control-container>::ng-deep [talosPrefix]:focus,.form-field-control-container>::ng-deep [talosTextPrefix]:hover,.form-field-control-container>::ng-deep [talosTextPrefix]:active,.form-field-control-container>::ng-deep [talosTextPrefix]:focus,.form-field-control-container>::ng-deep [talosLead]:hover,.form-field-control-container>::ng-deep [talosLead]:active,.form-field-control-container>::ng-deep [talosLead]:focus,.form-field-control-container>::ng-deep [talosStart]:hover,.form-field-control-container>::ng-deep [talosStart]:active,.form-field-control-container>::ng-deep [talosStart]:focus,::ng-deep .form-field-control-container>.talos-input-prefix:hover,::ng-deep .form-field-control-container>.talos-input-prefix:active,::ng-deep .form-field-control-container>.talos-input-prefix:focus,::ng-deep .form-field-control-container>[talosPrefix]:hover,::ng-deep .form-field-control-container>[talosPrefix]:active,::ng-deep .form-field-control-container>[talosPrefix]:focus,::ng-deep .form-field-control-container>[talosTextPrefix]:hover,::ng-deep .form-field-control-container>[talosTextPrefix]:active,::ng-deep .form-field-control-container>[talosTextPrefix]:focus,::ng-deep .form-field-control-container>[talosLead]:hover,::ng-deep .form-field-control-container>[talosLead]:active,::ng-deep .form-field-control-container>[talosLead]:focus,::ng-deep .form-field-control-container>[talosStart]:hover,::ng-deep .form-field-control-container>[talosStart]:active,::ng-deep .form-field-control-container>[talosStart]:focus{transform:translateY(-50%)!important}.form-field-control-container>::ng-deep .talos-input-suffix,.form-field-control-container>::ng-deep [talosSuffix],.form-field-control-container>::ng-deep [talosPostfix],.form-field-control-container>::ng-deep [talosTextSuffix],.form-field-control-container>::ng-deep [talosTextPostfix],.form-field-control-container>::ng-deep [talosTrail],.form-field-control-container>::ng-deep [talosEnd],::ng-deep .form-field-control-container>.talos-input-suffix,::ng-deep .form-field-control-container>[talosSuffix],::ng-deep .form-field-control-container>[talosPostfix],::ng-deep .form-field-control-container>[talosTextSuffix],::ng-deep .form-field-control-container>[talosTextPostfix],::ng-deep .form-field-control-container>[talosTrail],::ng-deep .form-field-control-container>[talosEnd]{position:absolute;right:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%)!important;display:inline-flex;align-items:center;justify-content:center;color:var(--talos-text-muted, #64748b);font-size:var(--talos-control-font-size, .8125rem);font-weight:500;line-height:1;z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap}.form-field-control-container>::ng-deep .talos-input-suffix.affix-interactive,.form-field-control-container>::ng-deep .talos-input-suffix button,.form-field-control-container>::ng-deep .talos-input-suffix a,.form-field-control-container>::ng-deep [talosSuffix].affix-interactive,.form-field-control-container>::ng-deep [talosSuffix] button,.form-field-control-container>::ng-deep [talosSuffix] a,.form-field-control-container>::ng-deep [talosPostfix].affix-interactive,.form-field-control-container>::ng-deep [talosPostfix] button,.form-field-control-container>::ng-deep [talosPostfix] a,.form-field-control-container>::ng-deep [talosTextSuffix].affix-interactive,.form-field-control-container>::ng-deep [talosTextSuffix] button,.form-field-control-container>::ng-deep [talosTextSuffix] a,.form-field-control-container>::ng-deep [talosTextPostfix].affix-interactive,.form-field-control-container>::ng-deep [talosTextPostfix] button,.form-field-control-container>::ng-deep [talosTextPostfix] a,.form-field-control-container>::ng-deep [talosTrail].affix-interactive,.form-field-control-container>::ng-deep [talosTrail] button,.form-field-control-container>::ng-deep [talosTrail] a,.form-field-control-container>::ng-deep [talosEnd].affix-interactive,.form-field-control-container>::ng-deep [talosEnd] button,.form-field-control-container>::ng-deep [talosEnd] a,::ng-deep .form-field-control-container>.talos-input-suffix.affix-interactive,::ng-deep .form-field-control-container>.talos-input-suffix button,::ng-deep .form-field-control-container>.talos-input-suffix a,::ng-deep .form-field-control-container>[talosSuffix].affix-interactive,::ng-deep .form-field-control-container>[talosSuffix] button,::ng-deep .form-field-control-container>[talosSuffix] a,::ng-deep .form-field-control-container>[talosPostfix].affix-interactive,::ng-deep .form-field-control-container>[talosPostfix] button,::ng-deep .form-field-control-container>[talosPostfix] a,::ng-deep .form-field-control-container>[talosTextSuffix].affix-interactive,::ng-deep .form-field-control-container>[talosTextSuffix] button,::ng-deep .form-field-control-container>[talosTextSuffix] a,::ng-deep .form-field-control-container>[talosTextPostfix].affix-interactive,::ng-deep .form-field-control-container>[talosTextPostfix] button,::ng-deep .form-field-control-container>[talosTextPostfix] a,::ng-deep .form-field-control-container>[talosTrail].affix-interactive,::ng-deep .form-field-control-container>[talosTrail] button,::ng-deep .form-field-control-container>[talosTrail] a,::ng-deep .form-field-control-container>[talosEnd].affix-interactive,::ng-deep .form-field-control-container>[talosEnd] button,::ng-deep .form-field-control-container>[talosEnd] a{pointer-events:auto}.form-field-control-container>::ng-deep .talos-input-suffix:hover,.form-field-control-container>::ng-deep .talos-input-suffix:active,.form-field-control-container>::ng-deep .talos-input-suffix:focus,.form-field-control-container>::ng-deep [talosSuffix]:hover,.form-field-control-container>::ng-deep [talosSuffix]:active,.form-field-control-container>::ng-deep [talosSuffix]:focus,.form-field-control-container>::ng-deep [talosPostfix]:hover,.form-field-control-container>::ng-deep [talosPostfix]:active,.form-field-control-container>::ng-deep [talosPostfix]:focus,.form-field-control-container>::ng-deep [talosTextSuffix]:hover,.form-field-control-container>::ng-deep [talosTextSuffix]:active,.form-field-control-container>::ng-deep [talosTextSuffix]:focus,.form-field-control-container>::ng-deep [talosTextPostfix]:hover,.form-field-control-container>::ng-deep [talosTextPostfix]:active,.form-field-control-container>::ng-deep [talosTextPostfix]:focus,.form-field-control-container>::ng-deep [talosTrail]:hover,.form-field-control-container>::ng-deep [talosTrail]:active,.form-field-control-container>::ng-deep [talosTrail]:focus,.form-field-control-container>::ng-deep [talosEnd]:hover,.form-field-control-container>::ng-deep [talosEnd]:active,.form-field-control-container>::ng-deep [talosEnd]:focus,::ng-deep .form-field-control-container>.talos-input-suffix:hover,::ng-deep .form-field-control-container>.talos-input-suffix:active,::ng-deep .form-field-control-container>.talos-input-suffix:focus,::ng-deep .form-field-control-container>[talosSuffix]:hover,::ng-deep .form-field-control-container>[talosSuffix]:active,::ng-deep .form-field-control-container>[talosSuffix]:focus,::ng-deep .form-field-control-container>[talosPostfix]:hover,::ng-deep .form-field-control-container>[talosPostfix]:active,::ng-deep .form-field-control-container>[talosPostfix]:focus,::ng-deep .form-field-control-container>[talosTextSuffix]:hover,::ng-deep .form-field-control-container>[talosTextSuffix]:active,::ng-deep .form-field-control-container>[talosTextSuffix]:focus,::ng-deep .form-field-control-container>[talosTextPostfix]:hover,::ng-deep .form-field-control-container>[talosTextPostfix]:active,::ng-deep .form-field-control-container>[talosTextPostfix]:focus,::ng-deep .form-field-control-container>[talosTrail]:hover,::ng-deep .form-field-control-container>[talosTrail]:active,::ng-deep .form-field-control-container>[talosTrail]:focus,::ng-deep .form-field-control-container>[talosEnd]:hover,::ng-deep .form-field-control-container>[talosEnd]:active,::ng-deep .form-field-control-container>[talosEnd]:focus{transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix,.form-field-control-container>::ng-deep button.talos-input-prefix,.form-field-control-container>::ng-deep button[talosSuffix],.form-field-control-container>::ng-deep button[talosPostfix],.form-field-control-container>::ng-deep button[talosPrefix],.form-field-control-container>::ng-deep button[talosLead],.form-field-control-container>::ng-deep button[talosTrail],.form-field-control-container>::ng-deep button[talosStart],.form-field-control-container>::ng-deep button[talosEnd],.form-field-control-container>::ng-deep button[talosAffixButton],.form-field-control-container>::ng-deep button.talos-affix-btn,.form-field-control-container>::ng-deep button.talos-affix-element,.form-field-control-container>::ng-deep .affix-interactive,::ng-deep .form-field-control-container>button.talos-input-suffix,::ng-deep .form-field-control-container>button.talos-input-prefix,::ng-deep .form-field-control-container>button[talosSuffix],::ng-deep .form-field-control-container>button[talosPostfix],::ng-deep .form-field-control-container>button[talosPrefix],::ng-deep .form-field-control-container>button[talosLead],::ng-deep .form-field-control-container>button[talosTrail],::ng-deep .form-field-control-container>button[talosStart],::ng-deep .form-field-control-container>button[talosEnd],::ng-deep .form-field-control-container>button[talosAffixButton],::ng-deep .form-field-control-container>button.talos-affix-btn,::ng-deep .form-field-control-container>button.talos-affix-element,::ng-deep .form-field-control-container>.affix-interactive{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;width:var(--talos-affix-btn-size, 1.5rem)!important;height:var(--talos-affix-btn-size, 1.5rem)!important;min-width:var(--talos-affix-btn-size, 1.5rem)!important;padding:0!important;margin:0!important;border-radius:var(--talos-affix-btn-radius, .25rem);background:transparent;border:none;outline:none;color:var(--talos-affix-btn-color, var(--talos-text-muted, #64748b));transition:color .15s ease,background-color .15s ease,box-shadow .15s ease}.form-field-control-container>::ng-deep button.talos-input-suffix svg,.form-field-control-container>::ng-deep button.talos-input-suffix i,.form-field-control-container>::ng-deep button.talos-input-suffix [lucideIcon],.form-field-control-container>::ng-deep button.talos-input-suffix .lucide,.form-field-control-container>::ng-deep button.talos-input-prefix svg,.form-field-control-container>::ng-deep button.talos-input-prefix i,.form-field-control-container>::ng-deep button.talos-input-prefix [lucideIcon],.form-field-control-container>::ng-deep button.talos-input-prefix .lucide,.form-field-control-container>::ng-deep button[talosSuffix] svg,.form-field-control-container>::ng-deep button[talosSuffix] i,.form-field-control-container>::ng-deep button[talosSuffix] [lucideIcon],.form-field-control-container>::ng-deep button[talosSuffix] .lucide,.form-field-control-container>::ng-deep button[talosPostfix] svg,.form-field-control-container>::ng-deep button[talosPostfix] i,.form-field-control-container>::ng-deep button[talosPostfix] [lucideIcon],.form-field-control-container>::ng-deep button[talosPostfix] .lucide,.form-field-control-container>::ng-deep button[talosPrefix] svg,.form-field-control-container>::ng-deep button[talosPrefix] i,.form-field-control-container>::ng-deep button[talosPrefix] [lucideIcon],.form-field-control-container>::ng-deep button[talosPrefix] .lucide,.form-field-control-container>::ng-deep button[talosLead] svg,.form-field-control-container>::ng-deep button[talosLead] i,.form-field-control-container>::ng-deep button[talosLead] [lucideIcon],.form-field-control-container>::ng-deep button[talosLead] .lucide,.form-field-control-container>::ng-deep button[talosTrail] svg,.form-field-control-container>::ng-deep button[talosTrail] i,.form-field-control-container>::ng-deep button[talosTrail] [lucideIcon],.form-field-control-container>::ng-deep button[talosTrail] .lucide,.form-field-control-container>::ng-deep button[talosStart] svg,.form-field-control-container>::ng-deep button[talosStart] i,.form-field-control-container>::ng-deep button[talosStart] [lucideIcon],.form-field-control-container>::ng-deep button[talosStart] .lucide,.form-field-control-container>::ng-deep button[talosEnd] svg,.form-field-control-container>::ng-deep button[talosEnd] i,.form-field-control-container>::ng-deep button[talosEnd] [lucideIcon],.form-field-control-container>::ng-deep button[talosEnd] .lucide,.form-field-control-container>::ng-deep button[talosAffixButton] svg,.form-field-control-container>::ng-deep button[talosAffixButton] i,.form-field-control-container>::ng-deep button[talosAffixButton] [lucideIcon],.form-field-control-container>::ng-deep button[talosAffixButton] .lucide,.form-field-control-container>::ng-deep button.talos-affix-btn svg,.form-field-control-container>::ng-deep button.talos-affix-btn i,.form-field-control-container>::ng-deep button.talos-affix-btn [lucideIcon],.form-field-control-container>::ng-deep button.talos-affix-btn .lucide,.form-field-control-container>::ng-deep button.talos-affix-element svg,.form-field-control-container>::ng-deep button.talos-affix-element i,.form-field-control-container>::ng-deep button.talos-affix-element [lucideIcon],.form-field-control-container>::ng-deep button.talos-affix-element .lucide,.form-field-control-container>::ng-deep .affix-interactive svg,.form-field-control-container>::ng-deep .affix-interactive i,.form-field-control-container>::ng-deep .affix-interactive [lucideIcon],.form-field-control-container>::ng-deep .affix-interactive .lucide,::ng-deep .form-field-control-container>button.talos-input-suffix svg,::ng-deep .form-field-control-container>button.talos-input-suffix i,::ng-deep .form-field-control-container>button.talos-input-suffix [lucideIcon],::ng-deep .form-field-control-container>button.talos-input-suffix .lucide,::ng-deep .form-field-control-container>button.talos-input-prefix svg,::ng-deep .form-field-control-container>button.talos-input-prefix i,::ng-deep .form-field-control-container>button.talos-input-prefix [lucideIcon],::ng-deep .form-field-control-container>button.talos-input-prefix .lucide,::ng-deep .form-field-control-container>button[talosSuffix] svg,::ng-deep .form-field-control-container>button[talosSuffix] i,::ng-deep .form-field-control-container>button[talosSuffix] [lucideIcon],::ng-deep .form-field-control-container>button[talosSuffix] .lucide,::ng-deep .form-field-control-container>button[talosPostfix] svg,::ng-deep .form-field-control-container>button[talosPostfix] i,::ng-deep .form-field-control-container>button[talosPostfix] [lucideIcon],::ng-deep .form-field-control-container>button[talosPostfix] .lucide,::ng-deep .form-field-control-container>button[talosPrefix] svg,::ng-deep .form-field-control-container>button[talosPrefix] i,::ng-deep .form-field-control-container>button[talosPrefix] [lucideIcon],::ng-deep .form-field-control-container>button[talosPrefix] .lucide,::ng-deep .form-field-control-container>button[talosLead] svg,::ng-deep .form-field-control-container>button[talosLead] i,::ng-deep .form-field-control-container>button[talosLead] [lucideIcon],::ng-deep .form-field-control-container>button[talosLead] .lucide,::ng-deep .form-field-control-container>button[talosTrail] svg,::ng-deep .form-field-control-container>button[talosTrail] i,::ng-deep .form-field-control-container>button[talosTrail] [lucideIcon],::ng-deep .form-field-control-container>button[talosTrail] .lucide,::ng-deep .form-field-control-container>button[talosStart] svg,::ng-deep .form-field-control-container>button[talosStart] i,::ng-deep .form-field-control-container>button[talosStart] [lucideIcon],::ng-deep .form-field-control-container>button[talosStart] .lucide,::ng-deep .form-field-control-container>button[talosEnd] svg,::ng-deep .form-field-control-container>button[talosEnd] i,::ng-deep .form-field-control-container>button[talosEnd] [lucideIcon],::ng-deep .form-field-control-container>button[talosEnd] .lucide,::ng-deep .form-field-control-container>button[talosAffixButton] svg,::ng-deep .form-field-control-container>button[talosAffixButton] i,::ng-deep .form-field-control-container>button[talosAffixButton] [lucideIcon],::ng-deep .form-field-control-container>button[talosAffixButton] .lucide,::ng-deep .form-field-control-container>button.talos-affix-btn svg,::ng-deep .form-field-control-container>button.talos-affix-btn i,::ng-deep .form-field-control-container>button.talos-affix-btn [lucideIcon],::ng-deep .form-field-control-container>button.talos-affix-btn .lucide,::ng-deep .form-field-control-container>button.talos-affix-element svg,::ng-deep .form-field-control-container>button.talos-affix-element i,::ng-deep .form-field-control-container>button.talos-affix-element [lucideIcon],::ng-deep .form-field-control-container>button.talos-affix-element .lucide,::ng-deep .form-field-control-container>.affix-interactive svg,::ng-deep .form-field-control-container>.affix-interactive i,::ng-deep .form-field-control-container>.affix-interactive [lucideIcon],::ng-deep .form-field-control-container>.affix-interactive .lucide{width:var(--talos-affix-btn-icon-size, .875rem);height:var(--talos-affix-btn-icon-size, .875rem);flex-shrink:0}.form-field-control-container>::ng-deep button.talos-input-suffix:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:hover:not(:disabled):not(.is-disabled){color:var(--talos-affix-btn-hover-color, var(--talos-text-color, #0f172a));background-color:var(--talos-affix-btn-hover-bg, var(--talos-bg-subtle, rgba(148, 163, 184, .15)));box-shadow:none;transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:active:not(:disabled):not(.is-disabled){background-color:var(--talos-affix-btn-active-bg, rgba(148, 163, 184, .25));transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:focus-visible:not(:disabled):not(.is-disabled){outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 2px rgba(37, 99, 235, .25));transform:translateY(-50%)!important}:host(.has-prefix) ::ng-deep .form-field-control-container>input.talos-input,:host(.has-prefix) ::ng-deep .form-field-control-container>input{padding-left:var(--talos-prefix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.625rem))!important}:host(.has-suffix) ::ng-deep .form-field-control-container>input.talos-input,:host(.has-suffix) ::ng-deep .form-field-control-container>input{padding-right:var(--talos-suffix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.75rem))!important}:host(.has-prefix) .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.625rem))!important}:host(.form-field-sm){--talos-control-height: 2rem;--talos-control-padding-x: .5rem;--talos-control-font-size: .75rem;--talos-affix-btn-size: var(--talos-affix-btn-size-sm, 1.375rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-sm, .8125rem)}:host(.form-field-sm) .talos-floating-label{left:.5rem}:host(.form-field-sm) .talos-floating-label.is-floated{left:.5rem!important}:host(.form-field-sm).has-prefix .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, 1.875rem)!important}:host(.form-field-lg){--talos-control-height: 2.75rem;--talos-control-padding-x: .75rem;--talos-control-font-size: .875rem;--talos-affix-btn-size: var(--talos-affix-btn-size-lg, 1.75rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-lg, 1rem)}:host(.form-field-lg) .talos-floating-label{left:.75rem}:host(.form-field-lg) .talos-floating-label.is-floated{left:.75rem!important}:host(.form-field-lg).has-prefix .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, 2.625rem)!important}:host(.is-textarea) .form-field-control-container>::ng-deep .talos-input-prefix,:host(.is-textarea) .form-field-control-container>::ng-deep [talosPrefix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextPrefix],:host(.is-textarea) ::ng-deep .form-field-control-container>.talos-input-prefix,:host(.is-textarea) ::ng-deep .form-field-control-container>[talosPrefix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextPrefix],:host(:has(textarea)) .form-field-control-container>::ng-deep .talos-input-prefix,:host(:has(textarea)) .form-field-control-container>::ng-deep [talosPrefix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextPrefix],:host(:has(textarea)) ::ng-deep .form-field-control-container>.talos-input-prefix,:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosPrefix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextPrefix]{top:.625rem;transform:none}:host(.is-textarea) .form-field-control-container>::ng-deep .talos-input-suffix,:host(.is-textarea) .form-field-control-container>::ng-deep [talosSuffix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosPostfix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextSuffix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextPostfix],:host(.is-textarea) ::ng-deep .form-field-control-container>.talos-input-suffix,:host(.is-textarea) ::ng-deep .form-field-control-container>[talosSuffix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosPostfix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextSuffix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextPostfix],:host(:has(textarea)) .form-field-control-container>::ng-deep .talos-input-suffix,:host(:has(textarea)) .form-field-control-container>::ng-deep [talosSuffix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosPostfix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextSuffix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextPostfix],:host(:has(textarea)) ::ng-deep .form-field-control-container>.talos-input-suffix,:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosSuffix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosPostfix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextSuffix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextPostfix]{top:.625rem;transform:none}:host(.is-textarea) .talos-floating-label:not(.is-floated),:host(:has(textarea)) .talos-floating-label:not(.is-floated){top:.5rem;transform:none}:host(.is-textarea.form-field-sm) .talos-floating-label:not(.is-floated),:host(.form-field-sm:has(textarea)) .talos-floating-label:not(.is-floated){top:.375rem;left:.5rem;transform:none}:host(.is-textarea.form-field-lg) .talos-floating-label:not(.is-floated),:host(.form-field-lg:has(textarea)) .talos-floating-label:not(.is-floated){top:.625rem;left:.75rem;transform:none}:host(.is-focused) .talos-floating-label.is-floated{color:var(--talos-primary-color, #2563eb)}:host(.is-invalid) .talos-field-label,:host(.is-invalid) .talos-floating-label.is-floated{color:var(--talos-error-color, #ef4444)}:host(.is-disabled){opacity:.65;cursor:not-allowed}:host(.is-disabled) .talos-field-label,:host(.is-disabled) .talos-floating-label{color:var(--talos-input-disabled-color, #94a3b8);cursor:not-allowed}\n"] });
107
- }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldComponent, decorators: [{
109
- type: Component,
110
- args: [{ selector: 'talos-form-field', host: {
111
- 'class': 'talos-form-field-host',
112
- '[class.is-floating]': 'isFloatingMode()',
113
- '[class.is-floated]': 'isFloated()',
114
- '[class.is-focused]': 'isFocused()',
115
- '[class.is-disabled]': 'disabled()',
116
- '[class.is-invalid]': 'invalid() || !!error()',
117
- '[class.is-textarea]': 'isTextarea()',
118
- '[class.has-prefix]': 'hasPrefix()',
119
- '[class.has-suffix]': 'hasSuffix()',
120
- '[class.form-field-sm]': 'size() === "sm"',
121
- '[class.form-field-md]': 'size() === "md"',
122
- '[class.form-field-lg]': 'size() === "lg"',
123
- '(focusin)': 'onFocusIn()',
124
- '(focusout)': 'onFocusOut()',
125
- '(input)': 'onInput()'
126
- }, template: "<div class=\"form-field-wrapper\" [class.has-floating-label]=\"isFloatingMode()\">\n @if (label() && !isFloatingMode()) {\n <label class=\"talos-field-label\" [attr.for]=\"inputId()\" (click)=\"onLabelClick()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div class=\"form-field-control-container\">\n <ng-content></ng-content>\n\n @if (label() && isFloatingMode()) {\n <label\n class=\"talos-floating-label\"\n [class.is-floated]=\"isFloated()\"\n [attr.for]=\"inputId()\"\n (click)=\"onLabelClick()\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n </div>\n\n @if (error()) {\n <span class=\"field-error\" role=\"alert\">{{ error() }}</span>\n } @else if (hint()) {\n <span class=\"field-help\">{{ hint() }}</span>\n }\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;box-sizing:border-box;--talos-control-height: 2.25rem;--talos-control-padding-x: .625rem;--talos-control-font-size: .8125rem;--talos-affix-btn-size: var(--talos-affix-btn-size-md, 1.5rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-md, .875rem)}.form-field-wrapper{display:flex;flex-direction:column;position:relative;width:100%}.form-field-wrapper .talos-field-label{display:inline-flex;align-items:center;font-size:var(--talos-control-font-size, .8125rem);font-weight:600;color:var(--talos-text-color, #0f172a);margin-bottom:.375rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .15s ease}.form-field-wrapper .talos-field-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.form-field-wrapper .form-field-control-container{position:relative;width:100%;display:flex;flex-direction:column}.form-field-wrapper .talos-floating-label{position:absolute;left:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%);transform-origin:left center;font-size:var(--talos-control-font-size, .8125rem);font-weight:500;color:var(--talos-input-placeholder-color, #94a3b8);pointer-events:none;-webkit-user-select:none;user-select:none;background-color:var(--talos-input-bg, var(--talos-card-bg, #ffffff));padding:0 .25rem;border-radius:.25rem;line-height:1;z-index:2;transition:transform .18s cubic-bezier(.4,0,.2,1),font-size .18s cubic-bezier(.4,0,.2,1),color .18s cubic-bezier(.4,0,.2,1),left .18s cubic-bezier(.4,0,.2,1),top .18s cubic-bezier(.4,0,.2,1)}.form-field-wrapper .talos-floating-label .required-star{color:var(--talos-error-color, #ef4444);margin-left:.25rem}.form-field-wrapper .talos-floating-label.is-floated{top:0!important;left:var(--talos-control-padding-x, .625rem)!important;transform:translateY(-50%) scale(.85)!important;font-size:.75rem;font-weight:600;color:var(--talos-text-muted, #64748b)}.form-field-wrapper .field-error{font-size:.75rem;color:var(--talos-error-color, #ef4444);margin-top:.375rem;font-weight:500}.form-field-wrapper .field-help{font-size:.75rem;color:var(--talos-text-muted, #64748b);margin-top:.375rem}.form-field-control-container>::ng-deep .talos-input-prefix,.form-field-control-container>::ng-deep [talosPrefix],.form-field-control-container>::ng-deep [talosTextPrefix],.form-field-control-container>::ng-deep [talosLead],.form-field-control-container>::ng-deep [talosStart],::ng-deep .form-field-control-container>.talos-input-prefix,::ng-deep .form-field-control-container>[talosPrefix],::ng-deep .form-field-control-container>[talosTextPrefix],::ng-deep .form-field-control-container>[talosLead],::ng-deep .form-field-control-container>[talosStart]{position:absolute;left:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%)!important;display:inline-flex;align-items:center;justify-content:center;color:var(--talos-text-muted, #64748b);font-size:var(--talos-control-font-size, .8125rem);font-weight:500;line-height:1;z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap}.form-field-control-container>::ng-deep .talos-input-prefix.affix-interactive,.form-field-control-container>::ng-deep .talos-input-prefix button,.form-field-control-container>::ng-deep .talos-input-prefix a,.form-field-control-container>::ng-deep [talosPrefix].affix-interactive,.form-field-control-container>::ng-deep [talosPrefix] button,.form-field-control-container>::ng-deep [talosPrefix] a,.form-field-control-container>::ng-deep [talosTextPrefix].affix-interactive,.form-field-control-container>::ng-deep [talosTextPrefix] button,.form-field-control-container>::ng-deep [talosTextPrefix] a,.form-field-control-container>::ng-deep [talosLead].affix-interactive,.form-field-control-container>::ng-deep [talosLead] button,.form-field-control-container>::ng-deep [talosLead] a,.form-field-control-container>::ng-deep [talosStart].affix-interactive,.form-field-control-container>::ng-deep [talosStart] button,.form-field-control-container>::ng-deep [talosStart] a,::ng-deep .form-field-control-container>.talos-input-prefix.affix-interactive,::ng-deep .form-field-control-container>.talos-input-prefix button,::ng-deep .form-field-control-container>.talos-input-prefix a,::ng-deep .form-field-control-container>[talosPrefix].affix-interactive,::ng-deep .form-field-control-container>[talosPrefix] button,::ng-deep .form-field-control-container>[talosPrefix] a,::ng-deep .form-field-control-container>[talosTextPrefix].affix-interactive,::ng-deep .form-field-control-container>[talosTextPrefix] button,::ng-deep .form-field-control-container>[talosTextPrefix] a,::ng-deep .form-field-control-container>[talosLead].affix-interactive,::ng-deep .form-field-control-container>[talosLead] button,::ng-deep .form-field-control-container>[talosLead] a,::ng-deep .form-field-control-container>[talosStart].affix-interactive,::ng-deep .form-field-control-container>[talosStart] button,::ng-deep .form-field-control-container>[talosStart] a{pointer-events:auto}.form-field-control-container>::ng-deep .talos-input-prefix:hover,.form-field-control-container>::ng-deep .talos-input-prefix:active,.form-field-control-container>::ng-deep .talos-input-prefix:focus,.form-field-control-container>::ng-deep [talosPrefix]:hover,.form-field-control-container>::ng-deep [talosPrefix]:active,.form-field-control-container>::ng-deep [talosPrefix]:focus,.form-field-control-container>::ng-deep [talosTextPrefix]:hover,.form-field-control-container>::ng-deep [talosTextPrefix]:active,.form-field-control-container>::ng-deep [talosTextPrefix]:focus,.form-field-control-container>::ng-deep [talosLead]:hover,.form-field-control-container>::ng-deep [talosLead]:active,.form-field-control-container>::ng-deep [talosLead]:focus,.form-field-control-container>::ng-deep [talosStart]:hover,.form-field-control-container>::ng-deep [talosStart]:active,.form-field-control-container>::ng-deep [talosStart]:focus,::ng-deep .form-field-control-container>.talos-input-prefix:hover,::ng-deep .form-field-control-container>.talos-input-prefix:active,::ng-deep .form-field-control-container>.talos-input-prefix:focus,::ng-deep .form-field-control-container>[talosPrefix]:hover,::ng-deep .form-field-control-container>[talosPrefix]:active,::ng-deep .form-field-control-container>[talosPrefix]:focus,::ng-deep .form-field-control-container>[talosTextPrefix]:hover,::ng-deep .form-field-control-container>[talosTextPrefix]:active,::ng-deep .form-field-control-container>[talosTextPrefix]:focus,::ng-deep .form-field-control-container>[talosLead]:hover,::ng-deep .form-field-control-container>[talosLead]:active,::ng-deep .form-field-control-container>[talosLead]:focus,::ng-deep .form-field-control-container>[talosStart]:hover,::ng-deep .form-field-control-container>[talosStart]:active,::ng-deep .form-field-control-container>[talosStart]:focus{transform:translateY(-50%)!important}.form-field-control-container>::ng-deep .talos-input-suffix,.form-field-control-container>::ng-deep [talosSuffix],.form-field-control-container>::ng-deep [talosPostfix],.form-field-control-container>::ng-deep [talosTextSuffix],.form-field-control-container>::ng-deep [talosTextPostfix],.form-field-control-container>::ng-deep [talosTrail],.form-field-control-container>::ng-deep [talosEnd],::ng-deep .form-field-control-container>.talos-input-suffix,::ng-deep .form-field-control-container>[talosSuffix],::ng-deep .form-field-control-container>[talosPostfix],::ng-deep .form-field-control-container>[talosTextSuffix],::ng-deep .form-field-control-container>[talosTextPostfix],::ng-deep .form-field-control-container>[talosTrail],::ng-deep .form-field-control-container>[talosEnd]{position:absolute;right:var(--talos-control-padding-x, .625rem);top:calc(var(--talos-control-height, 2.25rem) / 2);transform:translateY(-50%)!important;display:inline-flex;align-items:center;justify-content:center;color:var(--talos-text-muted, #64748b);font-size:var(--talos-control-font-size, .8125rem);font-weight:500;line-height:1;z-index:3;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap}.form-field-control-container>::ng-deep .talos-input-suffix.affix-interactive,.form-field-control-container>::ng-deep .talos-input-suffix button,.form-field-control-container>::ng-deep .talos-input-suffix a,.form-field-control-container>::ng-deep [talosSuffix].affix-interactive,.form-field-control-container>::ng-deep [talosSuffix] button,.form-field-control-container>::ng-deep [talosSuffix] a,.form-field-control-container>::ng-deep [talosPostfix].affix-interactive,.form-field-control-container>::ng-deep [talosPostfix] button,.form-field-control-container>::ng-deep [talosPostfix] a,.form-field-control-container>::ng-deep [talosTextSuffix].affix-interactive,.form-field-control-container>::ng-deep [talosTextSuffix] button,.form-field-control-container>::ng-deep [talosTextSuffix] a,.form-field-control-container>::ng-deep [talosTextPostfix].affix-interactive,.form-field-control-container>::ng-deep [talosTextPostfix] button,.form-field-control-container>::ng-deep [talosTextPostfix] a,.form-field-control-container>::ng-deep [talosTrail].affix-interactive,.form-field-control-container>::ng-deep [talosTrail] button,.form-field-control-container>::ng-deep [talosTrail] a,.form-field-control-container>::ng-deep [talosEnd].affix-interactive,.form-field-control-container>::ng-deep [talosEnd] button,.form-field-control-container>::ng-deep [talosEnd] a,::ng-deep .form-field-control-container>.talos-input-suffix.affix-interactive,::ng-deep .form-field-control-container>.talos-input-suffix button,::ng-deep .form-field-control-container>.talos-input-suffix a,::ng-deep .form-field-control-container>[talosSuffix].affix-interactive,::ng-deep .form-field-control-container>[talosSuffix] button,::ng-deep .form-field-control-container>[talosSuffix] a,::ng-deep .form-field-control-container>[talosPostfix].affix-interactive,::ng-deep .form-field-control-container>[talosPostfix] button,::ng-deep .form-field-control-container>[talosPostfix] a,::ng-deep .form-field-control-container>[talosTextSuffix].affix-interactive,::ng-deep .form-field-control-container>[talosTextSuffix] button,::ng-deep .form-field-control-container>[talosTextSuffix] a,::ng-deep .form-field-control-container>[talosTextPostfix].affix-interactive,::ng-deep .form-field-control-container>[talosTextPostfix] button,::ng-deep .form-field-control-container>[talosTextPostfix] a,::ng-deep .form-field-control-container>[talosTrail].affix-interactive,::ng-deep .form-field-control-container>[talosTrail] button,::ng-deep .form-field-control-container>[talosTrail] a,::ng-deep .form-field-control-container>[talosEnd].affix-interactive,::ng-deep .form-field-control-container>[talosEnd] button,::ng-deep .form-field-control-container>[talosEnd] a{pointer-events:auto}.form-field-control-container>::ng-deep .talos-input-suffix:hover,.form-field-control-container>::ng-deep .talos-input-suffix:active,.form-field-control-container>::ng-deep .talos-input-suffix:focus,.form-field-control-container>::ng-deep [talosSuffix]:hover,.form-field-control-container>::ng-deep [talosSuffix]:active,.form-field-control-container>::ng-deep [talosSuffix]:focus,.form-field-control-container>::ng-deep [talosPostfix]:hover,.form-field-control-container>::ng-deep [talosPostfix]:active,.form-field-control-container>::ng-deep [talosPostfix]:focus,.form-field-control-container>::ng-deep [talosTextSuffix]:hover,.form-field-control-container>::ng-deep [talosTextSuffix]:active,.form-field-control-container>::ng-deep [talosTextSuffix]:focus,.form-field-control-container>::ng-deep [talosTextPostfix]:hover,.form-field-control-container>::ng-deep [talosTextPostfix]:active,.form-field-control-container>::ng-deep [talosTextPostfix]:focus,.form-field-control-container>::ng-deep [talosTrail]:hover,.form-field-control-container>::ng-deep [talosTrail]:active,.form-field-control-container>::ng-deep [talosTrail]:focus,.form-field-control-container>::ng-deep [talosEnd]:hover,.form-field-control-container>::ng-deep [talosEnd]:active,.form-field-control-container>::ng-deep [talosEnd]:focus,::ng-deep .form-field-control-container>.talos-input-suffix:hover,::ng-deep .form-field-control-container>.talos-input-suffix:active,::ng-deep .form-field-control-container>.talos-input-suffix:focus,::ng-deep .form-field-control-container>[talosSuffix]:hover,::ng-deep .form-field-control-container>[talosSuffix]:active,::ng-deep .form-field-control-container>[talosSuffix]:focus,::ng-deep .form-field-control-container>[talosPostfix]:hover,::ng-deep .form-field-control-container>[talosPostfix]:active,::ng-deep .form-field-control-container>[talosPostfix]:focus,::ng-deep .form-field-control-container>[talosTextSuffix]:hover,::ng-deep .form-field-control-container>[talosTextSuffix]:active,::ng-deep .form-field-control-container>[talosTextSuffix]:focus,::ng-deep .form-field-control-container>[talosTextPostfix]:hover,::ng-deep .form-field-control-container>[talosTextPostfix]:active,::ng-deep .form-field-control-container>[talosTextPostfix]:focus,::ng-deep .form-field-control-container>[talosTrail]:hover,::ng-deep .form-field-control-container>[talosTrail]:active,::ng-deep .form-field-control-container>[talosTrail]:focus,::ng-deep .form-field-control-container>[talosEnd]:hover,::ng-deep .form-field-control-container>[talosEnd]:active,::ng-deep .form-field-control-container>[talosEnd]:focus{transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix,.form-field-control-container>::ng-deep button.talos-input-prefix,.form-field-control-container>::ng-deep button[talosSuffix],.form-field-control-container>::ng-deep button[talosPostfix],.form-field-control-container>::ng-deep button[talosPrefix],.form-field-control-container>::ng-deep button[talosLead],.form-field-control-container>::ng-deep button[talosTrail],.form-field-control-container>::ng-deep button[talosStart],.form-field-control-container>::ng-deep button[talosEnd],.form-field-control-container>::ng-deep button[talosAffixButton],.form-field-control-container>::ng-deep button.talos-affix-btn,.form-field-control-container>::ng-deep button.talos-affix-element,.form-field-control-container>::ng-deep .affix-interactive,::ng-deep .form-field-control-container>button.talos-input-suffix,::ng-deep .form-field-control-container>button.talos-input-prefix,::ng-deep .form-field-control-container>button[talosSuffix],::ng-deep .form-field-control-container>button[talosPostfix],::ng-deep .form-field-control-container>button[talosPrefix],::ng-deep .form-field-control-container>button[talosLead],::ng-deep .form-field-control-container>button[talosTrail],::ng-deep .form-field-control-container>button[talosStart],::ng-deep .form-field-control-container>button[talosEnd],::ng-deep .form-field-control-container>button[talosAffixButton],::ng-deep .form-field-control-container>button.talos-affix-btn,::ng-deep .form-field-control-container>button.talos-affix-element,::ng-deep .form-field-control-container>.affix-interactive{pointer-events:auto;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;width:var(--talos-affix-btn-size, 1.5rem)!important;height:var(--talos-affix-btn-size, 1.5rem)!important;min-width:var(--talos-affix-btn-size, 1.5rem)!important;padding:0!important;margin:0!important;border-radius:var(--talos-affix-btn-radius, .25rem);background:transparent;border:none;outline:none;color:var(--talos-affix-btn-color, var(--talos-text-muted, #64748b));transition:color .15s ease,background-color .15s ease,box-shadow .15s ease}.form-field-control-container>::ng-deep button.talos-input-suffix svg,.form-field-control-container>::ng-deep button.talos-input-suffix i,.form-field-control-container>::ng-deep button.talos-input-suffix [lucideIcon],.form-field-control-container>::ng-deep button.talos-input-suffix .lucide,.form-field-control-container>::ng-deep button.talos-input-prefix svg,.form-field-control-container>::ng-deep button.talos-input-prefix i,.form-field-control-container>::ng-deep button.talos-input-prefix [lucideIcon],.form-field-control-container>::ng-deep button.talos-input-prefix .lucide,.form-field-control-container>::ng-deep button[talosSuffix] svg,.form-field-control-container>::ng-deep button[talosSuffix] i,.form-field-control-container>::ng-deep button[talosSuffix] [lucideIcon],.form-field-control-container>::ng-deep button[talosSuffix] .lucide,.form-field-control-container>::ng-deep button[talosPostfix] svg,.form-field-control-container>::ng-deep button[talosPostfix] i,.form-field-control-container>::ng-deep button[talosPostfix] [lucideIcon],.form-field-control-container>::ng-deep button[talosPostfix] .lucide,.form-field-control-container>::ng-deep button[talosPrefix] svg,.form-field-control-container>::ng-deep button[talosPrefix] i,.form-field-control-container>::ng-deep button[talosPrefix] [lucideIcon],.form-field-control-container>::ng-deep button[talosPrefix] .lucide,.form-field-control-container>::ng-deep button[talosLead] svg,.form-field-control-container>::ng-deep button[talosLead] i,.form-field-control-container>::ng-deep button[talosLead] [lucideIcon],.form-field-control-container>::ng-deep button[talosLead] .lucide,.form-field-control-container>::ng-deep button[talosTrail] svg,.form-field-control-container>::ng-deep button[talosTrail] i,.form-field-control-container>::ng-deep button[talosTrail] [lucideIcon],.form-field-control-container>::ng-deep button[talosTrail] .lucide,.form-field-control-container>::ng-deep button[talosStart] svg,.form-field-control-container>::ng-deep button[talosStart] i,.form-field-control-container>::ng-deep button[talosStart] [lucideIcon],.form-field-control-container>::ng-deep button[talosStart] .lucide,.form-field-control-container>::ng-deep button[talosEnd] svg,.form-field-control-container>::ng-deep button[talosEnd] i,.form-field-control-container>::ng-deep button[talosEnd] [lucideIcon],.form-field-control-container>::ng-deep button[talosEnd] .lucide,.form-field-control-container>::ng-deep button[talosAffixButton] svg,.form-field-control-container>::ng-deep button[talosAffixButton] i,.form-field-control-container>::ng-deep button[talosAffixButton] [lucideIcon],.form-field-control-container>::ng-deep button[talosAffixButton] .lucide,.form-field-control-container>::ng-deep button.talos-affix-btn svg,.form-field-control-container>::ng-deep button.talos-affix-btn i,.form-field-control-container>::ng-deep button.talos-affix-btn [lucideIcon],.form-field-control-container>::ng-deep button.talos-affix-btn .lucide,.form-field-control-container>::ng-deep button.talos-affix-element svg,.form-field-control-container>::ng-deep button.talos-affix-element i,.form-field-control-container>::ng-deep button.talos-affix-element [lucideIcon],.form-field-control-container>::ng-deep button.talos-affix-element .lucide,.form-field-control-container>::ng-deep .affix-interactive svg,.form-field-control-container>::ng-deep .affix-interactive i,.form-field-control-container>::ng-deep .affix-interactive [lucideIcon],.form-field-control-container>::ng-deep .affix-interactive .lucide,::ng-deep .form-field-control-container>button.talos-input-suffix svg,::ng-deep .form-field-control-container>button.talos-input-suffix i,::ng-deep .form-field-control-container>button.talos-input-suffix [lucideIcon],::ng-deep .form-field-control-container>button.talos-input-suffix .lucide,::ng-deep .form-field-control-container>button.talos-input-prefix svg,::ng-deep .form-field-control-container>button.talos-input-prefix i,::ng-deep .form-field-control-container>button.talos-input-prefix [lucideIcon],::ng-deep .form-field-control-container>button.talos-input-prefix .lucide,::ng-deep .form-field-control-container>button[talosSuffix] svg,::ng-deep .form-field-control-container>button[talosSuffix] i,::ng-deep .form-field-control-container>button[talosSuffix] [lucideIcon],::ng-deep .form-field-control-container>button[talosSuffix] .lucide,::ng-deep .form-field-control-container>button[talosPostfix] svg,::ng-deep .form-field-control-container>button[talosPostfix] i,::ng-deep .form-field-control-container>button[talosPostfix] [lucideIcon],::ng-deep .form-field-control-container>button[talosPostfix] .lucide,::ng-deep .form-field-control-container>button[talosPrefix] svg,::ng-deep .form-field-control-container>button[talosPrefix] i,::ng-deep .form-field-control-container>button[talosPrefix] [lucideIcon],::ng-deep .form-field-control-container>button[talosPrefix] .lucide,::ng-deep .form-field-control-container>button[talosLead] svg,::ng-deep .form-field-control-container>button[talosLead] i,::ng-deep .form-field-control-container>button[talosLead] [lucideIcon],::ng-deep .form-field-control-container>button[talosLead] .lucide,::ng-deep .form-field-control-container>button[talosTrail] svg,::ng-deep .form-field-control-container>button[talosTrail] i,::ng-deep .form-field-control-container>button[talosTrail] [lucideIcon],::ng-deep .form-field-control-container>button[talosTrail] .lucide,::ng-deep .form-field-control-container>button[talosStart] svg,::ng-deep .form-field-control-container>button[talosStart] i,::ng-deep .form-field-control-container>button[talosStart] [lucideIcon],::ng-deep .form-field-control-container>button[talosStart] .lucide,::ng-deep .form-field-control-container>button[talosEnd] svg,::ng-deep .form-field-control-container>button[talosEnd] i,::ng-deep .form-field-control-container>button[talosEnd] [lucideIcon],::ng-deep .form-field-control-container>button[talosEnd] .lucide,::ng-deep .form-field-control-container>button[talosAffixButton] svg,::ng-deep .form-field-control-container>button[talosAffixButton] i,::ng-deep .form-field-control-container>button[talosAffixButton] [lucideIcon],::ng-deep .form-field-control-container>button[talosAffixButton] .lucide,::ng-deep .form-field-control-container>button.talos-affix-btn svg,::ng-deep .form-field-control-container>button.talos-affix-btn i,::ng-deep .form-field-control-container>button.talos-affix-btn [lucideIcon],::ng-deep .form-field-control-container>button.talos-affix-btn .lucide,::ng-deep .form-field-control-container>button.talos-affix-element svg,::ng-deep .form-field-control-container>button.talos-affix-element i,::ng-deep .form-field-control-container>button.talos-affix-element [lucideIcon],::ng-deep .form-field-control-container>button.talos-affix-element .lucide,::ng-deep .form-field-control-container>.affix-interactive svg,::ng-deep .form-field-control-container>.affix-interactive i,::ng-deep .form-field-control-container>.affix-interactive [lucideIcon],::ng-deep .form-field-control-container>.affix-interactive .lucide{width:var(--talos-affix-btn-icon-size, .875rem);height:var(--talos-affix-btn-icon-size, .875rem);flex-shrink:0}.form-field-control-container>::ng-deep button.talos-input-suffix:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:hover:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:hover:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:hover:not(:disabled):not(.is-disabled){color:var(--talos-affix-btn-hover-color, var(--talos-text-color, #0f172a));background-color:var(--talos-affix-btn-hover-bg, var(--talos-bg-subtle, rgba(148, 163, 184, .15)));box-shadow:none;transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:active:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:active:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:active:not(:disabled):not(.is-disabled){background-color:var(--talos-affix-btn-active-bg, rgba(148, 163, 184, .25));transform:translateY(-50%)!important}.form-field-control-container>::ng-deep button.talos-input-suffix:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-input-prefix:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosSuffix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPostfix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosPrefix]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosLead]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosTrail]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosStart]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosEnd]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button[talosAffixButton]:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-btn:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep button.talos-affix-element:focus-visible:not(:disabled):not(.is-disabled),.form-field-control-container>::ng-deep .affix-interactive:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-suffix:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-input-prefix:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosSuffix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPostfix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosPrefix]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosLead]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosTrail]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosStart]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosEnd]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button[talosAffixButton]:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-btn:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>button.talos-affix-element:focus-visible:not(:disabled):not(.is-disabled),::ng-deep .form-field-control-container>.affix-interactive:focus-visible:not(:disabled):not(.is-disabled){outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 2px rgba(37, 99, 235, .25));transform:translateY(-50%)!important}:host(.has-prefix) ::ng-deep .form-field-control-container>input.talos-input,:host(.has-prefix) ::ng-deep .form-field-control-container>input{padding-left:var(--talos-prefix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.625rem))!important}:host(.has-suffix) ::ng-deep .form-field-control-container>input.talos-input,:host(.has-suffix) ::ng-deep .form-field-control-container>input{padding-right:var(--talos-suffix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.75rem))!important}:host(.has-prefix) .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, calc(var(--talos-control-padding-x, .625rem) + 1.625rem))!important}:host(.form-field-sm){--talos-control-height: 2rem;--talos-control-padding-x: .5rem;--talos-control-font-size: .75rem;--talos-affix-btn-size: var(--talos-affix-btn-size-sm, 1.375rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-sm, .8125rem)}:host(.form-field-sm) .talos-floating-label{left:.5rem}:host(.form-field-sm) .talos-floating-label.is-floated{left:.5rem!important}:host(.form-field-sm).has-prefix .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, 1.875rem)!important}:host(.form-field-lg){--talos-control-height: 2.75rem;--talos-control-padding-x: .75rem;--talos-control-font-size: .875rem;--talos-affix-btn-size: var(--talos-affix-btn-size-lg, 1.75rem);--talos-affix-btn-icon-size: var(--talos-affix-btn-icon-size-lg, 1rem)}:host(.form-field-lg) .talos-floating-label{left:.75rem}:host(.form-field-lg) .talos-floating-label.is-floated{left:.75rem!important}:host(.form-field-lg).has-prefix .talos-floating-label:not(.is-floated){left:var(--talos-prefix-offset, 2.625rem)!important}:host(.is-textarea) .form-field-control-container>::ng-deep .talos-input-prefix,:host(.is-textarea) .form-field-control-container>::ng-deep [talosPrefix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextPrefix],:host(.is-textarea) ::ng-deep .form-field-control-container>.talos-input-prefix,:host(.is-textarea) ::ng-deep .form-field-control-container>[talosPrefix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextPrefix],:host(:has(textarea)) .form-field-control-container>::ng-deep .talos-input-prefix,:host(:has(textarea)) .form-field-control-container>::ng-deep [talosPrefix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextPrefix],:host(:has(textarea)) ::ng-deep .form-field-control-container>.talos-input-prefix,:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosPrefix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextPrefix]{top:.625rem;transform:none}:host(.is-textarea) .form-field-control-container>::ng-deep .talos-input-suffix,:host(.is-textarea) .form-field-control-container>::ng-deep [talosSuffix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosPostfix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextSuffix],:host(.is-textarea) .form-field-control-container>::ng-deep [talosTextPostfix],:host(.is-textarea) ::ng-deep .form-field-control-container>.talos-input-suffix,:host(.is-textarea) ::ng-deep .form-field-control-container>[talosSuffix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosPostfix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextSuffix],:host(.is-textarea) ::ng-deep .form-field-control-container>[talosTextPostfix],:host(:has(textarea)) .form-field-control-container>::ng-deep .talos-input-suffix,:host(:has(textarea)) .form-field-control-container>::ng-deep [talosSuffix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosPostfix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextSuffix],:host(:has(textarea)) .form-field-control-container>::ng-deep [talosTextPostfix],:host(:has(textarea)) ::ng-deep .form-field-control-container>.talos-input-suffix,:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosSuffix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosPostfix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextSuffix],:host(:has(textarea)) ::ng-deep .form-field-control-container>[talosTextPostfix]{top:.625rem;transform:none}:host(.is-textarea) .talos-floating-label:not(.is-floated),:host(:has(textarea)) .talos-floating-label:not(.is-floated){top:.5rem;transform:none}:host(.is-textarea.form-field-sm) .talos-floating-label:not(.is-floated),:host(.form-field-sm:has(textarea)) .talos-floating-label:not(.is-floated){top:.375rem;left:.5rem;transform:none}:host(.is-textarea.form-field-lg) .talos-floating-label:not(.is-floated),:host(.form-field-lg:has(textarea)) .talos-floating-label:not(.is-floated){top:.625rem;left:.75rem;transform:none}:host(.is-focused) .talos-floating-label.is-floated{color:var(--talos-primary-color, #2563eb)}:host(.is-invalid) .talos-field-label,:host(.is-invalid) .talos-floating-label.is-floated{color:var(--talos-error-color, #ef4444)}:host(.is-disabled){opacity:.65;cursor:not-allowed}:host(.is-disabled) .talos-field-label,:host(.is-disabled) .talos-floating-label{color:var(--talos-input-disabled-color, #94a3b8);cursor:not-allowed}\n"] }]
127
- }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], floating: [{ type: i0.Input, args: [{ isSignal: true, alias: "floating", required: false }] }], floatingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatingLabel", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], forId: [{ type: i0.Input, args: [{ isSignal: true, alias: "forId", required: false }] }] } });
128
-
129
- class TalosFormFieldModule {
130
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
131
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldModule, imports: [TalosFormFieldComponent], exports: [TalosFormFieldComponent] });
132
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldModule });
133
- }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosFormFieldModule, decorators: [{
135
- type: NgModule,
136
- args: [{
137
- imports: [TalosFormFieldComponent],
138
- exports: [TalosFormFieldComponent]
139
- }]
140
- }] });
141
-
142
- /**
143
- * Generated bundle index. Do not edit.
144
- */
145
-
146
- export { TalosFormFieldComponent, TalosFormFieldModule };
147
- //# sourceMappingURL=weeehaoooz-talos-ui-form-form-field.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"weeehaoooz-talos-ui-form-form-field.mjs","sources":["../../../projects/talos-ui/form/form-field/form-field.component.ts","../../../projects/talos-ui/form/form-field/form-field.component.html","../../../projects/talos-ui/form/form-field/form-field.module.ts","../../../projects/talos-ui/form/form-field/weeehaoooz-talos-ui-form-form-field.ts"],"sourcesContent":["import {\n AfterContentChecked,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n signal\n} from '@angular/core';\n\nlet formFieldUniqueId = 0;\n\n@Component({\n selector: 'talos-form-field',\n templateUrl: './form-field.component.html',\n styleUrl: './form-field.component.scss',\n host: {\n 'class': 'talos-form-field-host',\n '[class.is-floating]': 'isFloatingMode()',\n '[class.is-floated]': 'isFloated()',\n '[class.is-focused]': 'isFocused()',\n '[class.is-disabled]': 'disabled()',\n '[class.is-invalid]': 'invalid() || !!error()',\n '[class.is-textarea]': 'isTextarea()',\n '[class.has-prefix]': 'hasPrefix()',\n '[class.has-suffix]': 'hasSuffix()',\n '[class.form-field-sm]': 'size() === \"sm\"',\n '[class.form-field-md]': 'size() === \"md\"',\n '[class.form-field-lg]': 'size() === \"lg\"',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()',\n '(input)': 'onInput()'\n }\n})\nexport class TalosFormFieldComponent implements AfterContentChecked {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n // Signal Inputs\n readonly label = input<string>('');\n readonly floating = input<boolean>(false);\n readonly floatingLabel = input<boolean>(false);\n readonly hint = input<string>('');\n readonly error = input<string>('');\n readonly required = input<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly invalid = input<boolean>(false);\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly forId = input<string>('');\n\n // Internal state\n readonly isFocused = signal<boolean>(false);\n readonly hasValue = signal<boolean>(false);\n readonly isTextarea = signal<boolean>(false);\n readonly hasPrefix = signal<boolean>(false);\n readonly hasSuffix = signal<boolean>(false);\n\n private readonly autoId = `talos-field-${++formFieldUniqueId}`;\n readonly inputId = computed(() => this.forId() || `${this.autoId}-input`);\n\n readonly isFloatingMode = computed(() => this.floating() || this.floatingLabel());\n\n readonly isFloated = computed(() => {\n if (!this.isFloatingMode()) {\n return false;\n }\n return this.isFocused() || this.hasValue();\n });\n\n ngAfterContentChecked(): void {\n this.checkValue();\n }\n\n onFocusIn(): void {\n this.isFocused.set(true);\n this.checkValue();\n }\n\n onFocusOut(): void {\n this.isFocused.set(false);\n this.checkValue();\n }\n\n onInput(): void {\n this.checkValue();\n }\n\n onLabelClick(): void {\n const root = this.elementRef.nativeElement as HTMLElement;\n const inputEl = root.querySelector('input, textarea, select, [tabindex=\"0\"]') as HTMLElement | null;\n if (inputEl) {\n inputEl.focus();\n }\n }\n\n checkValue(): void {\n const root = this.elementRef.nativeElement as HTMLElement;\n const textareaEl = root.querySelector('textarea');\n this.isTextarea.set(!!textareaEl);\n\n const prefixEl = root.querySelector<HTMLElement>(\n '[talosPrefix], [talosTextPrefix], [talos-prefix], [talos-text-prefix], [talosLead], [talosStart], .talos-input-prefix, .password-prefix-icon'\n );\n this.hasPrefix.set(!!prefixEl);\n\n const suffixEl = root.querySelector<HTMLElement>(\n '[talosSuffix], [talosPostfix], [talosTextSuffix], [talosTextPostfix], [talos-suffix], [talos-postfix], [talosTrail], [talosEnd], .talos-input-suffix, .password-mask-toggle-btn'\n );\n this.hasSuffix.set(!!suffixEl);\n\n const inputEl = root.querySelector<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>('input, textarea, select');\n if (inputEl) {\n this.hasValue.set(!!inputEl.value);\n }\n\n if (prefixEl) {\n const prefixWidth = prefixEl.getBoundingClientRect().width;\n if (prefixWidth > 0) {\n // Base control padding (10px / 0.625rem) + prefix width + inner spacing (6px)\n root.style.setProperty('--talos-prefix-offset', `${Math.round(prefixWidth + 16)}px`);\n }\n } else {\n root.style.removeProperty('--talos-prefix-offset');\n }\n\n if (suffixEl) {\n const suffixWidth = suffixEl.getBoundingClientRect().width;\n if (suffixWidth > 0) {\n // Base control padding (10px / 0.625rem) + suffix width + inner spacing (6px)\n root.style.setProperty('--talos-suffix-offset', `${Math.round(suffixWidth + 16)}px`);\n }\n } else {\n root.style.removeProperty('--talos-suffix-offset');\n }\n }\n}\n","<div class=\"form-field-wrapper\" [class.has-floating-label]=\"isFloatingMode()\">\n @if (label() && !isFloatingMode()) {\n <label class=\"talos-field-label\" [attr.for]=\"inputId()\" (click)=\"onLabelClick()\">\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div class=\"form-field-control-container\">\n <ng-content></ng-content>\n\n @if (label() && isFloatingMode()) {\n <label\n class=\"talos-floating-label\"\n [class.is-floated]=\"isFloated()\"\n [attr.for]=\"inputId()\"\n (click)=\"onLabelClick()\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"required-star\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n </div>\n\n @if (error()) {\n <span class=\"field-error\" role=\"alert\">{{ error() }}</span>\n } @else if (hint()) {\n <span class=\"field-help\">{{ hint() }}</span>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { TalosFormFieldComponent } from './form-field.component';\n\n@NgModule({\n imports: [TalosFormFieldComponent],\n exports: [TalosFormFieldComponent]\n})\nexport class TalosFormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { input, Directive } from '@angular/core';
3
-
4
- class TalosInputDirective {
5
- /** Sizing variation for input or textarea */
6
- size = input('md', /* @ts-ignore */
7
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
8
- /** Whether the input is in an invalid error state */
9
- invalid = input(false, /* @ts-ignore */
10
- ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
11
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosInputDirective, isStandalone: true, selector: "input[talosInput], textarea[talosInput], input[talosTextarea], textarea[talosTextarea], input[talos-input], textarea[talos-textarea]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.input-sm": "size() === \"sm\"", "class.input-md": "size() === \"md\"", "class.input-lg": "size() === \"lg\"", "class.is-invalid": "invalid()" }, classAttribute: "talos-input" }, ngImport: i0 });
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosInputDirective, decorators: [{
15
- type: Directive,
16
- args: [{
17
- selector: 'input[talosInput], textarea[talosInput], input[talosTextarea], textarea[talosTextarea], input[talos-input], textarea[talos-textarea]',
18
- host: {
19
- 'class': 'talos-input',
20
- '[class.input-sm]': 'size() === "sm"',
21
- '[class.input-md]': 'size() === "md"',
22
- '[class.input-lg]': 'size() === "lg"',
23
- '[class.is-invalid]': 'invalid()'
24
- }
25
- }]
26
- }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }] } });
27
-
28
- /**
29
- * Generated bundle index. Do not edit.
30
- */
31
-
32
- export { TalosInputDirective };
33
- //# sourceMappingURL=weeehaoooz-talos-ui-form-input.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"weeehaoooz-talos-ui-form-input.mjs","sources":["../../../projects/talos-ui/form/input/input.directive.ts","../../../projects/talos-ui/form/input/weeehaoooz-talos-ui-form-input.ts"],"sourcesContent":["import { Directive, input } from '@angular/core';\n\nexport type InputSize = 'sm' | 'md' | 'lg';\n\n@Directive({\n selector: 'input[talosInput], textarea[talosInput], input[talosTextarea], textarea[talosTextarea], input[talos-input], textarea[talos-textarea]',\n host: {\n 'class': 'talos-input',\n '[class.input-sm]': 'size() === \"sm\"',\n '[class.input-md]': 'size() === \"md\"',\n '[class.input-lg]': 'size() === \"lg\"',\n '[class.is-invalid]': 'invalid()'\n }\n})\nexport class TalosInputDirective {\n /** Sizing variation for input or textarea */\n readonly size = input<InputSize>('md');\n\n /** Whether the input is in an invalid error state */\n readonly invalid = input<boolean>(false);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAca,mBAAmB,CAAA;;IAErB,IAAI,GAAG,KAAK,CAAY,IAAI;6EAAC;;IAG7B,OAAO,GAAG,KAAK,CAAU,KAAK;gFAAC;uGAL7B,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sIAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sIAAsI;AAChJ,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,kBAAkB,EAAE,iBAAiB;AACrC,wBAAA,kBAAkB,EAAE,iBAAiB;AACrC,wBAAA,kBAAkB,EAAE,iBAAiB;AACrC,wBAAA,oBAAoB,EAAE;AACvB;AACF,iBAAA;;;ACbD;;AAEG;;;;"}