@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weeehaoooz-talos-ui-feedback.mjs","sources":["../../../projects/talos-ui/feedback/alert/alert.service.ts","../../../projects/talos-ui/feedback/alert/alert.directives.ts","../../../projects/talos-ui/feedback/alert/alert/alert.component.ts","../../../projects/talos-ui/feedback/alert/alert/alert.component.html","../../../projects/talos-ui/feedback/alert/alert-container/alert-container.component.ts","../../../projects/talos-ui/feedback/alert/alert.module.ts","../../../projects/talos-ui/feedback/dialog/dialog.types.ts","../../../projects/talos-ui/feedback/dialog/dialog-ref.ts","../../../projects/talos-ui/feedback/dialog/dialog.directives.ts","../../../projects/talos-ui/feedback/dialog/dialog-header/dialog-header.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-header/dialog-header.component.html","../../../projects/talos-ui/feedback/dialog/dialog-content/dialog-content.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-content/dialog-content.component.html","../../../projects/talos-ui/feedback/dialog/dialog-footer/dialog-footer.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-footer/dialog-footer.component.html","../../../projects/talos-ui/feedback/dialog/confirm-dialog/confirm-dialog.component.ts","../../../projects/talos-ui/feedback/dialog/confirm-dialog/confirm-dialog.component.html","../../../projects/talos-ui/feedback/dialog/dialog.service.ts","../../../projects/talos-ui/feedback/dialog/dialog.module.ts","../../../projects/talos-ui/feedback/progress-bar/progress-bar.types.ts","../../../projects/talos-ui/feedback/progress-bar/progress-bar.directives.ts","../../../projects/talos-ui/feedback/progress-bar/progress-bar.component.ts","../../../projects/talos-ui/feedback/progress-bar/progress-bar.component.html","../../../projects/talos-ui/feedback/progress-bar/progress-bar.module.ts","../../../projects/talos-ui/feedback/skeleton/skeleton.types.ts","../../../projects/talos-ui/feedback/skeleton/skeleton.directives.ts","../../../projects/talos-ui/feedback/skeleton/skeleton.component.ts","../../../projects/talos-ui/feedback/skeleton/skeleton.component.html","../../../projects/talos-ui/feedback/skeleton/skeleton.module.ts","../../../projects/talos-ui/feedback/snackbar/snackbar/snackbar.component.ts","../../../projects/talos-ui/feedback/snackbar/snackbar/snackbar.component.html","../../../projects/talos-ui/feedback/snackbar/snackbar-container/snackbar-container.component.ts","../../../projects/talos-ui/feedback/snackbar/snackbar.service.ts","../../../projects/talos-ui/feedback/snackbar/snackbar.module.ts","../../../projects/talos-ui/feedback/spinner/spinner.types.ts","../../../projects/talos-ui/feedback/spinner/spinner.service.ts","../../../projects/talos-ui/feedback/spinner/spinner.component.ts","../../../projects/talos-ui/feedback/spinner/spinner.component.html","../../../projects/talos-ui/feedback/spinner/spinner.directives.ts","../../../projects/talos-ui/feedback/spinner/spinner.module.ts","../../../projects/talos-ui/feedback/tooltip/tooltip.directive.ts","../../../projects/talos-ui/feedback/weeehaoooz-talos-ui-feedback.ts"],"sourcesContent":["import {\n Injectable,\n TemplateRef,\n signal\n} from '@angular/core';\nimport {\n TalosAlertConfig,\n TalosAlertInstance,\n TalosAlertRef\n} from './alert.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosAlertService {\n /** Reactive list of currently active programmatic alerts */\n readonly alerts = signal<TalosAlertInstance[]>([]);\n\n /** Reactive list of currently active top-level banner alerts */\n readonly bannerAlerts = signal<TalosAlertInstance[]>([]);\n\n private idCounter = 0;\n\n /** Default global configurations */\n private defaultConfig: Partial<TalosAlertConfig> = {\n severity: 'success',\n appearance: 'subtle',\n size: 'md',\n showIcon: true,\n dismissible: true\n };\n\n /**\n * Override default global configurations.\n */\n setDefaultConfig(config: Partial<TalosAlertConfig>): void {\n this.defaultConfig = { ...this.defaultConfig, ...config };\n }\n\n /**\n * Main entry point to create a programmatic alert instance.\n */\n show(\n messageOrConfig: string | TemplateRef<unknown> | TalosAlertConfig,\n configOverrides: Partial<TalosAlertConfig> = {}\n ): TalosAlertRef {\n let fullConfig: TalosAlertConfig;\n\n if (\n typeof messageOrConfig === 'string' ||\n messageOrConfig instanceof TemplateRef\n ) {\n fullConfig = {\n message: messageOrConfig,\n ...configOverrides\n };\n } else {\n fullConfig = {\n ...messageOrConfig,\n ...configOverrides\n };\n }\n\n const instance: TalosAlertInstance = {\n id: fullConfig.id || `talos-alert-${++this.idCounter}-${Date.now()}`,\n severity: fullConfig.severity ?? this.defaultConfig.severity ?? 'success',\n variant: fullConfig.variant,\n appearance: fullConfig.appearance ?? this.defaultConfig.appearance ?? 'subtle',\n size: fullConfig.size ?? this.defaultConfig.size ?? 'md',\n showIcon: fullConfig.showIcon ?? this.defaultConfig.showIcon ?? true,\n icon: fullConfig.icon,\n showSeverityBadge: fullConfig.showSeverityBadge ?? false,\n dismissible: fullConfig.dismissible ?? this.defaultConfig.dismissible ?? true,\n title: fullConfig.title,\n message: fullConfig.message,\n actionLabel: fullConfig.actionLabel,\n onAction: fullConfig.onAction,\n onDismiss: fullConfig.onDismiss,\n customClass: fullConfig.customClass,\n bordered: fullConfig.bordered,\n duration: fullConfig.duration,\n data: fullConfig.data,\n createdAt: Date.now()\n };\n\n this.alerts.update((current) => [...current, instance]);\n\n if (instance.duration && instance.duration > 0) {\n setTimeout(() => {\n this.dismiss(instance.id);\n }, instance.duration);\n }\n\n return {\n id: instance.id,\n dismiss: () => this.dismiss(instance.id)\n };\n }\n\n /**\n * Display a high-visibility global banner alert.\n */\n banner(\n messageOrConfig: string | TemplateRef<unknown> | TalosAlertConfig,\n configOverrides: Partial<TalosAlertConfig> = {}\n ): TalosAlertRef {\n let fullConfig: TalosAlertConfig;\n\n if (\n typeof messageOrConfig === 'string' ||\n messageOrConfig instanceof TemplateRef\n ) {\n fullConfig = {\n message: messageOrConfig,\n appearance: 'filled',\n severity: 'info',\n ...configOverrides\n };\n } else {\n fullConfig = {\n appearance: 'filled',\n severity: 'info',\n ...messageOrConfig,\n ...configOverrides\n };\n }\n\n const instance: TalosAlertInstance = {\n id: fullConfig.id || `talos-banner-alert-${++this.idCounter}-${Date.now()}`,\n severity: fullConfig.severity ?? 'info',\n variant: fullConfig.variant,\n appearance: fullConfig.appearance ?? 'filled',\n size: fullConfig.size ?? 'md',\n showIcon: fullConfig.showIcon ?? true,\n icon: fullConfig.icon,\n showSeverityBadge: fullConfig.showSeverityBadge ?? false,\n dismissible: fullConfig.dismissible ?? true,\n title: fullConfig.title,\n message: fullConfig.message,\n actionLabel: fullConfig.actionLabel,\n onAction: fullConfig.onAction,\n onDismiss: fullConfig.onDismiss,\n customClass: fullConfig.customClass,\n bordered: fullConfig.bordered,\n duration: fullConfig.duration,\n data: fullConfig.data,\n createdAt: Date.now()\n };\n\n this.bannerAlerts.update((current) => [...current, instance]);\n\n if (instance.duration && instance.duration > 0) {\n setTimeout(() => {\n this.dismissBanner(instance.id);\n }, instance.duration);\n }\n\n return {\n id: instance.id,\n dismiss: () => this.dismissBanner(instance.id)\n };\n }\n\n /** Convenience method for Success alerts (Default severity) */\n success(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosAlertConfig>\n ): TalosAlertRef {\n return this.show(message, { ...config, severity: 'success' });\n }\n\n /** Convenience method for Info alerts */\n info(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosAlertConfig>\n ): TalosAlertRef {\n return this.show(message, { ...config, severity: 'info' });\n }\n\n /** Convenience method for Warning alerts */\n warning(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosAlertConfig>\n ): TalosAlertRef {\n return this.show(message, { ...config, severity: 'warning' });\n }\n\n /** Convenience method for Error alerts */\n error(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosAlertConfig>\n ): TalosAlertRef {\n return this.show(message, { ...config, severity: 'error' });\n }\n\n /**\n * Dismiss a specific programmatic alert by ID, or the oldest if no ID is provided.\n */\n dismiss(id?: string): void {\n if (!id) {\n const current = this.alerts();\n if (current.length === 0) return;\n id = current[0].id;\n }\n\n const target = this.alerts().find((a) => a.id === id);\n if (target?.onDismiss) {\n target.onDismiss();\n }\n\n this.alerts.update((current) => current.filter((item) => item.id !== id));\n }\n\n /**\n * Dismiss a banner alert by ID.\n */\n dismissBanner(id?: string): void {\n if (!id) {\n const current = this.bannerAlerts();\n if (current.length === 0) return;\n id = current[0].id;\n }\n\n const target = this.bannerAlerts().find((a) => a.id === id);\n if (target?.onDismiss) {\n target.onDismiss();\n }\n\n this.bannerAlerts.update((current) => current.filter((item) => item.id !== id));\n }\n\n /**\n * Dismiss all currently active alerts and banners.\n */\n dismissAll(): void {\n this.alerts().forEach((a) => a.onDismiss?.());\n this.bannerAlerts().forEach((b) => b.onDismiss?.());\n this.alerts.set([]);\n this.bannerAlerts.set([]);\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Structural / Slot directive for alert title projection.\n *\n * Usage:\n * ```html\n * <talos-alert>\n * <div talosAlertTitle>System Maintenance</div>\n * <div talosAlertDescription>All services will undergo updates tonight.</div>\n * </talos-alert>\n * ```\n */\n@Directive({\n selector: '[talosAlertTitle], talos-alert-title',\n host: {\n 'class': 'talos-alert-title-directive'\n }\n})\nexport class TalosAlertTitleDirective {}\n\n/**\n * Slot directive for alert description / message body.\n */\n@Directive({\n selector: '[talosAlertDescription], talos-alert-description',\n host: {\n 'class': 'talos-alert-description-directive'\n }\n})\nexport class TalosAlertDescriptionDirective {}\n\n/**\n * Slot directive for custom alert actions / button group.\n */\n@Directive({\n selector: '[talosAlertActions], talos-alert-actions',\n host: {\n 'class': 'talos-alert-actions-directive'\n }\n})\nexport class TalosAlertActionsDirective {}\n\n/**\n * Slot directive for custom alert icon.\n */\n@Directive({\n selector: '[talosAlertIcon], talos-alert-icon',\n host: {\n 'class': 'talos-alert-icon-directive'\n }\n})\nexport class TalosAlertIconDirective {}\n","import {\n Component,\n TemplateRef,\n Type,\n computed,\n input,\n output,\n signal\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n LucideAlertOctagon,\n LucideAlertTriangle,\n LucideCheckCircle2,\n LucideCircleAlert,\n LucideInfo,\n LucideShieldAlert,\n LucideX\n} from '@lucide/angular';\nimport {\n TalosAlertAppearance,\n TalosAlertSeverity,\n TalosAlertSize,\n TalosAlertVariant\n} from '../alert.types';\n\n@Component({\n selector: 'talos-alert',\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertTriangle,\n LucideCircleAlert,\n LucideAlertOctagon,\n LucideShieldAlert,\n LucideX\n ],\n templateUrl: './alert.component.html',\n styleUrl: './alert.component.scss',\n host: {\n '[class.talos-alert-host]': 'true',\n '[class.is-dismissing]': 'isDismissing()',\n '[class.is-dismissed]': 'isDismissed()'\n }\n})\nexport class TalosAlertComponent {\n /** Alert severity state: 'success' (default), 'info', 'warning', 'error' */\n readonly severity = input<TalosAlertSeverity | undefined>('success');\n\n /** Visual variant theme fallback */\n readonly variant = input<TalosAlertVariant | undefined>(undefined);\n\n /** Visual surface appearance style */\n readonly appearance = input<TalosAlertAppearance>('subtle');\n\n /** Sizing of padding and typography */\n readonly size = input<TalosAlertSize>('md');\n\n /** Header title text or custom TemplateRef */\n readonly title = input<string | TemplateRef<unknown> | undefined>(undefined);\n\n /** Main message content or custom TemplateRef */\n readonly message = input<string | TemplateRef<unknown> | undefined>(undefined);\n\n /** Whether to display the icon */\n readonly showIcon = input<boolean>(true);\n\n /** Custom Lucide icon component, TemplateRef, or boolean */\n readonly icon = input<Type<unknown> | TemplateRef<unknown> | boolean | null | undefined>(null);\n\n /** Whether to display a dedicated severity pill badge */\n readonly showSeverityBadge = input<boolean>(false);\n\n /** Whether the alert can be dismissed */\n readonly dismissible = input<boolean>(false);\n\n /** Action button text label */\n readonly actionLabel = input<string | undefined>(undefined);\n\n /** Optional explicit border outline */\n readonly bordered = input<boolean>(false);\n\n /** Additional CSS class */\n readonly customClass = input<string>('');\n\n /** Emitted when dismiss close button is clicked */\n readonly dismiss = output<void>();\n\n /** Emitted when action button is clicked */\n readonly action = output<void>();\n\n /** Emitted when dismiss animation has finished and alert is removed */\n readonly closed = output<void>();\n\n protected readonly isDismissing = signal<boolean>(false);\n protected readonly isDismissed = signal<boolean>(false);\n\n /** Resolved visual variant considering severity */\n readonly resolvedVariant = computed<TalosAlertVariant>(() => {\n const sev = this.severity();\n if (sev) {\n return sev;\n }\n return this.variant() ?? 'success';\n });\n\n /** Severity display label for badge */\n readonly severityLabel = computed<string>(() => {\n const sev = this.severity();\n if (sev) return sev.toUpperCase();\n return '';\n });\n\n readonly isTitleTemplate = computed(() => this.title() instanceof TemplateRef);\n readonly titleTemplate = computed(() => this.title() as TemplateRef<unknown>);\n\n readonly isMessageTemplate = computed(() => this.message() instanceof TemplateRef);\n readonly messageTemplate = computed(() => this.message() as TemplateRef<unknown>);\n\n readonly isIconTemplate = computed(() => this.icon() instanceof TemplateRef);\n readonly iconTemplate = computed(() => this.icon() as TemplateRef<unknown>);\n\n readonly customIconComponent = computed(() => {\n const ic = this.icon();\n return typeof ic === 'function' ? (ic as Type<unknown>) : null;\n });\n\n readonly ariaRole = computed(() => {\n const v = this.resolvedVariant();\n return v === 'error' || v === 'warning' || v === 'critical' ? 'alert' : 'status';\n });\n\n readonly ariaLive = computed(() => {\n const v = this.resolvedVariant();\n return v === 'error' || v === 'critical' ? 'assertive' : 'polite';\n });\n\n protected onActionClick(): void {\n this.action.emit();\n }\n\n protected onCloseClick(): void {\n if (this.isDismissing() || this.isDismissed()) return;\n this.isDismissing.set(true);\n this.dismiss.emit();\n\n setTimeout(() => {\n this.isDismissed.set(true);\n this.closed.emit();\n }, 200);\n }\n}\n","@if (!isDismissed()) {\n<div\n class=\"talos-alert\"\n [class.variant-default]=\"resolvedVariant() === 'default'\"\n [class.variant-info]=\"resolvedVariant() === 'info'\"\n [class.variant-success]=\"resolvedVariant() === 'success'\"\n [class.variant-warning]=\"resolvedVariant() === 'warning'\"\n [class.variant-error]=\"resolvedVariant() === 'error'\"\n [class.variant-primary]=\"resolvedVariant() === 'primary'\"\n [class.variant-critical]=\"resolvedVariant() === 'critical'\"\n [class.appearance-subtle]=\"appearance() === 'subtle'\"\n [class.appearance-outline]=\"appearance() === 'outline'\"\n [class.appearance-filled]=\"appearance() === 'filled'\"\n [class.appearance-accent]=\"appearance() === 'accent'\"\n [class.appearance-left-border]=\"appearance() === 'left-border'\"\n [class.size-sm]=\"size() === 'sm'\"\n [class.size-md]=\"size() === 'md'\"\n [class.size-lg]=\"size() === 'lg'\"\n [class.is-bordered]=\"bordered()\"\n [class.is-dismissing]=\"isDismissing()\"\n [class]=\"customClass()\"\n [attr.role]=\"ariaRole()\"\n [attr.aria-live]=\"ariaLive()\"\n>\n <!-- Icon Section -->\n @if (showIcon() && icon() !== false) {\n <div class=\"talos-alert-icon\" aria-hidden=\"true\">\n @if (isIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"iconTemplate()\"></ng-container>\n } @else if (customIconComponent()) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n <ng-content select=\"[talosAlertIcon], talos-alert-icon\"></ng-content>\n @switch (resolvedVariant()) {\n @case ('critical') {\n <svg lucideAlertOctagon [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @case ('primary') {\n <svg lucideShieldAlert [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"size() === 'sm' ? 16 : size() === 'lg' ? 24 : 20\"></svg>\n }\n }\n }\n </div>\n }\n\n <!-- Main Alert Body & Details -->\n <div class=\"talos-alert-body\">\n <!-- Header: Title & Severity Badge -->\n <div class=\"talos-alert-header\">\n @if (title()) {\n @if (isTitleTemplate()) {\n <div class=\"talos-alert-title\">\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n </div>\n } @else {\n <h4 class=\"talos-alert-title\">{{ title() }}</h4>\n }\n }\n <ng-content select=\"[talosAlertTitle], talos-alert-title\"></ng-content>\n\n @if (showSeverityBadge() && severityLabel()) {\n <span class=\"talos-alert-severity-badge\" [attr.data-severity]=\"resolvedVariant()\">\n {{ severityLabel() }}\n </span>\n }\n </div>\n\n <!-- Message Description Content -->\n <div class=\"talos-alert-message\">\n @if (message()) {\n @if (isMessageTemplate()) {\n <ng-container *ngTemplateOutlet=\"messageTemplate()\"></ng-container>\n } @else {\n <span>{{ message() }}</span>\n }\n }\n <ng-content select=\"[talosAlertDescription], talos-alert-description\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- Actions & Close Button -->\n <div class=\"talos-alert-actions\">\n <ng-content select=\"[talosAlertActions], talos-alert-actions\"></ng-content>\n\n @if (actionLabel()) {\n <button type=\"button\" class=\"talos-alert-action-btn\" (click)=\"onActionClick()\">\n {{ actionLabel() }}\n </button>\n }\n\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"talos-alert-close-btn\"\n aria-label=\"Dismiss alert\"\n (click)=\"onCloseClick()\"\n >\n <svg lucideX [size]=\"size() === 'sm' ? 14 : 16\"></svg>\n </button>\n }\n </div>\n</div>\n}\n","import { Component, computed, inject, input } from '@angular/core';\nimport { TalosAlertComponent } from '../alert/alert.component';\nimport { TalosAlertService } from '../alert.service';\nimport { TalosAlertInstance } from '../alert.types';\n\n@Component({\n selector: 'talos-alert-container',\n imports: [TalosAlertComponent],\n template: `\n @if (targetAlerts().length > 0) {\n <div class=\"talos-alert-container-stack\" [class.is-banner]=\"type() === 'banner'\">\n @for (item of targetAlerts(); track item.id) {\n <talos-alert\n [variant]=\"item.variant || 'default'\"\n [severity]=\"item.severity\"\n [appearance]=\"item.appearance || 'subtle'\"\n [size]=\"item.size || 'md'\"\n [title]=\"item.title\"\n [message]=\"item.message\"\n [showIcon]=\"item.showIcon ?? true\"\n [icon]=\"item.icon\"\n [showSeverityBadge]=\"item.showSeverityBadge ?? false\"\n [dismissible]=\"item.dismissible ?? true\"\n [actionLabel]=\"item.actionLabel\"\n [bordered]=\"item.bordered ?? false\"\n [customClass]=\"item.customClass || ''\"\n (dismiss)=\"onDismiss(item.id)\"\n (action)=\"onAction(item)\"\n />\n }\n </div>\n }\n `,\n styleUrl: './alert-container.component.scss',\n host: {\n '[class.talos-alert-container-host]': 'true'\n }\n})\nexport class TalosAlertContainerComponent {\n private readonly alertService = inject(TalosAlertService);\n\n /** Mode of alerts to render from the service ('inline', 'banner', or 'all') */\n readonly type = input<'inline' | 'banner' | 'all'>('inline');\n\n readonly targetAlerts = computed<TalosAlertInstance[]>(() => {\n const t = this.type();\n if (t === 'banner') {\n return this.alertService.bannerAlerts();\n }\n if (t === 'all') {\n return [...this.alertService.bannerAlerts(), ...this.alertService.alerts()];\n }\n return this.alertService.alerts();\n });\n\n onDismiss(id: string): void {\n if (this.type() === 'banner') {\n this.alertService.dismissBanner(id);\n } else {\n this.alertService.dismiss(id);\n }\n }\n\n onAction(item: TalosAlertInstance): void {\n if (item.onAction) {\n item.onAction();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosAlertComponent } from './alert/alert.component';\nimport { TalosAlertContainerComponent } from './alert-container/alert-container.component';\nimport {\n TalosAlertTitleDirective,\n TalosAlertDescriptionDirective,\n TalosAlertActionsDirective,\n TalosAlertIconDirective\n} from './alert.directives';\n\n/**\n * Convenience NgModule wrapping standalone alert components and directives.\n */\n@NgModule({\n imports: [\n TalosAlertComponent,\n TalosAlertContainerComponent,\n TalosAlertTitleDirective,\n TalosAlertDescriptionDirective,\n TalosAlertActionsDirective,\n TalosAlertIconDirective\n ],\n exports: [\n TalosAlertComponent,\n TalosAlertContainerComponent,\n TalosAlertTitleDirective,\n TalosAlertDescriptionDirective,\n TalosAlertActionsDirective,\n TalosAlertIconDirective\n ]\n})\nexport class TalosAlertModule {}\n","import { InjectionToken, TemplateRef } from '@angular/core';\n\n/** Size options for the dialog modal */\nexport type TalosDialogSize = 'auto' | 'sm' | 'md' | 'lg' | 'xl' | 'fullscreen';\n\n/** Backdrop blur intensity options */\nexport type TalosDialogBlur = boolean | 'none' | 'sm' | 'md' | 'lg';\n\n/** Visual variant for dialog styling and icons */\nexport type TalosDialogVariant = 'default' | 'primary' | 'danger' | 'warning' | 'info' | 'success';\n\n/** Footer button alignment */\nexport type TalosDialogFooterAlign = 'start' | 'center' | 'end' | 'space-between';\n\n/** Content padding variants */\nexport type TalosDialogPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * Configuration options for opening a Talos Dialog.\n */\nexport interface TalosDialogConfig<TData = unknown> {\n /** Sizing preset: 'auto' (content-hugging), 'sm' (420px), 'md' (560px), 'lg' (768px), 'xl' (1024px), or 'fullscreen' */\n size?: TalosDialogSize;\n\n /** Blur background effect: true/'md' (standard frosted glass), 'sm' (light blur), 'lg' (heavy blur), or false/'none' */\n backdropBlur?: TalosDialogBlur;\n\n /** Explicit width override (e.g. '500px', '75vw') */\n width?: string;\n\n /** Explicit min-width override */\n minWidth?: string;\n\n /** Explicit max-width override */\n maxWidth?: string;\n\n /** Explicit height override (e.g. '600px', '80vh') */\n height?: string;\n\n /** Explicit min-height override */\n minHeight?: string;\n\n /** Explicit max-height override */\n maxHeight?: string;\n\n /** Custom CSS classes to append to the dialog panel */\n panelClass?: string | string[];\n\n /** Custom CSS classes to append to the dialog backdrop */\n backdropClass?: string | string[];\n\n /** Whether the dialog has a backdrop overlay. Defaults to true. */\n hasBackdrop?: boolean;\n\n /** Whether the user can dismiss the dialog by clicking the backdrop or pressing ESC. Defaults to false. */\n disableClose?: boolean;\n\n /** Whether pressing ESC closes the dialog. Defaults to true unless disableClose is true. */\n closeOnEsc?: boolean;\n\n /** Whether clicking the backdrop closes the dialog. Defaults to true unless disableClose is true. */\n closeOnBackdropClick?: boolean;\n\n /** Arbitrary data passed to the dialog component via TALOS_DIALOG_DATA */\n data?: TData;\n\n /** Accessible label for the dialog */\n ariaLabel?: string;\n\n /** ID of the element that labels the dialog */\n ariaLabelledBy?: string;\n\n /** ID of the element that describes the dialog */\n ariaDescribedBy?: string;\n\n /** ARIA role for the dialog element ('dialog' or 'alertdialog') */\n role?: 'dialog' | 'alertdialog';\n\n /** Whether focus should automatically be trapped and moved to the first focusable element */\n autoFocus?: boolean | 'first-tabbable' | 'first-heading' | 'dialog';\n\n /** Whether focus should be restored to the triggering element upon closure */\n restoreFocus?: boolean;\n\n /** Custom ID for the dialog */\n id?: string;\n}\n\n/**\n * Options for the confirm dialog convenience method.\n */\nexport interface TalosConfirmDialogOptions {\n title: string;\n message: string | TemplateRef<unknown>;\n confirmText?: string;\n cancelText?: string;\n variant?: TalosDialogVariant;\n size?: TalosDialogSize;\n backdropBlur?: TalosDialogBlur;\n disableClose?: boolean;\n showCancel?: boolean;\n icon?: any;\n}\n\n/**\n * Options for the alert dialog convenience method.\n */\nexport interface TalosAlertDialogOptions {\n title: string;\n message: string | TemplateRef<unknown>;\n okText?: string;\n variant?: TalosDialogVariant;\n size?: TalosDialogSize;\n backdropBlur?: TalosDialogBlur;\n icon?: any;\n}\n\n/** Injection token for data passed to a dialog component */\nexport const TALOS_DIALOG_DATA = new InjectionToken<unknown>('TALOS_DIALOG_DATA');\n\n/** Injection token for dialog configuration */\nexport const TALOS_DIALOG_CONFIG = new InjectionToken<TalosDialogConfig>('TALOS_DIALOG_CONFIG');\n\n/** Injection token for dialog reference */\nexport const TALOS_DIALOG_REF = new InjectionToken<unknown>('TALOS_DIALOG_REF');\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TalosDialogConfig } from './dialog.types';\n\n/**\n * Reference to an actively open dialog instance.\n */\nexport class TalosDialogRef<R = unknown, D = unknown> {\n constructor(\n readonly cdkDialogRef: DialogRef<R, unknown>,\n readonly config: TalosDialogConfig<D>,\n readonly data?: D\n ) {}\n\n /** Unique identifier for the dialog */\n get id(): string {\n return this.cdkDialogRef.id;\n }\n\n /** Observable that emits when the dialog is closed with the result value */\n get closed(): Observable<R | undefined> {\n return this.cdkDialogRef.closed;\n }\n\n /** Observable that emits when the backdrop overlay is clicked */\n get backdropClick(): Observable<MouseEvent> {\n return this.cdkDialogRef.backdropClick;\n }\n\n /** Observable that emits keyboard events received by the dialog overlay */\n get keydownEvents(): Observable<KeyboardEvent> {\n return this.cdkDialogRef.keydownEvents;\n }\n\n /**\n * Close the dialog, optionally returning a result value to the opener.\n */\n close(result?: R): void {\n this.cdkDialogRef.close(result);\n }\n\n /**\n * Dynamically update the size of the dialog panel.\n */\n updateSize(width = '', height = ''): this {\n this.cdkDialogRef.updateSize(width, height);\n return this;\n }\n\n /**\n * Add CSS class(es) to the dialog overlay panel.\n */\n addPanelClass(classes: string | string[]): this {\n this.cdkDialogRef.addPanelClass(classes);\n return this;\n }\n\n /**\n * Remove CSS class(es) from the dialog overlay panel.\n */\n removePanelClass(classes: string | string[]): this {\n this.cdkDialogRef.removePanelClass(classes);\n return this;\n }\n}\n","import {\n Directive,\n HostListener,\n inject,\n input,\n OnInit,\n ElementRef\n} from '@angular/core';\nimport { DialogRef } from '@angular/cdk/dialog';\n\nlet uniqueTitleId = 0;\nlet uniqueDescId = 0;\n\n/**\n * Directive for the dialog title element.\n * Automatically handles accessible ARIA labeling.\n */\n@Directive({\n selector: '[talosDialogTitle]',\n host: {\n 'class': 'talos-dialog-title',\n '[attr.id]': 'id()'\n }\n})\nexport class TalosDialogTitleDirective implements OnInit {\n /** Optional custom ID for accessibility linking */\n readonly id = input<string>(`talos-dialog-title-${++uniqueTitleId}`);\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n ngOnInit(): void {\n if (this.dialogRef) {\n // Allow CDK or parent container to associate the title ID\n }\n }\n}\n\n/**\n * Directive for the dialog description/subtitle element.\n * Automatically handles accessible ARIA descriptions.\n */\n@Directive({\n selector: '[talosDialogDescription]',\n host: {\n 'class': 'talos-dialog-description',\n '[attr.id]': 'id()'\n }\n})\nexport class TalosDialogDescriptionDirective {\n /** Optional custom ID for accessibility linking */\n readonly id = input<string>(`talos-dialog-desc-${++uniqueDescId}`);\n}\n\n/**\n * Directive placed on buttons inside a dialog to trigger dismissal.\n * Passes the optional [talosDialogClose] value as the dialog result.\n */\n@Directive({\n selector: '[talosDialogClose]',\n host: {\n '(click)': 'onClick($event)'\n }\n})\nexport class TalosDialogCloseDirective {\n /** Value returned when closing the dialog */\n readonly dialogResult = input<unknown>(undefined, { alias: 'talosDialogClose' });\n\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n protected onClick(event: MouseEvent): void {\n if (this.dialogRef) {\n this.dialogRef.close(this.dialogResult());\n }\n }\n}\n","import { Component, inject, input, output } from '@angular/core';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport { LucideX } from '@lucide/angular';\nimport { TalosDialogVariant } from '../dialog.types';\nimport { TalosDialogTitleDirective, TalosDialogDescriptionDirective } from '../dialog.directives';\n\n@Component({\n selector: 'talos-dialog-header, [talosDialogHeader]',\n imports: [LucideX, TalosDialogTitleDirective, TalosDialogDescriptionDirective],\n templateUrl: './dialog-header.component.html',\n styleUrl: './dialog-header.component.scss',\n host: {\n 'class': 'talos-dialog-header-host',\n '[class.has-divider]': 'divider()',\n '[class.variant-danger]': 'variant() === \"danger\"',\n '[class.variant-warning]': 'variant() === \"warning\"',\n '[class.variant-info]': 'variant() === \"info\"',\n '[class.variant-success]': 'variant() === \"success\"'\n }\n})\nexport class TalosDialogHeaderComponent {\n /** Main dialog title */\n readonly title = input<string>();\n\n /** Subtitle or helper description */\n readonly subtitle = input<string>();\n\n /** Visual accent variant */\n readonly variant = input<TalosDialogVariant>('default');\n\n /** Whether to show a bottom divider line */\n readonly divider = input<boolean>(true);\n\n /** Whether to show the top-right X close button */\n readonly showCloseButton = input<boolean>(true);\n\n /** Accessible label for the close button */\n readonly closeButtonAriaLabel = input<string>('Close dialog');\n\n /** Emitted when the close button is clicked */\n readonly closeClick = output<MouseEvent>();\n\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n protected handleClose(event: MouseEvent): void {\n this.closeClick.emit(event);\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n}\n","<div class=\"talos-dialog-header-inner\">\n <div class=\"talos-dialog-header-left\">\n <div class=\"talos-dialog-header-icon-slot\">\n <ng-content select=\"[talos-dialog-icon], [dialog-icon], lucide-icon, svg\"></ng-content>\n </div>\n\n <div class=\"talos-dialog-header-text\">\n @if (title()) {\n <h2 talosDialogTitle class=\"talos-dialog-header-title\">{{ title() }}</h2>\n } @else {\n <ng-content select=\"[talosDialogTitle], h2, h3\"></ng-content>\n }\n\n @if (subtitle()) {\n <p talosDialogDescription class=\"talos-dialog-header-subtitle\">{{ subtitle() }}</p>\n } @else {\n <ng-content select=\"[talosDialogDescription], p\"></ng-content>\n }\n </div>\n </div>\n\n <div class=\"talos-dialog-header-actions\">\n <ng-content select=\"[talos-dialog-header-actions]\"></ng-content>\n\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"talos-dialog-header-close-btn\"\n [attr.aria-label]=\"closeButtonAriaLabel()\"\n (click)=\"handleClose($event)\"\n >\n <svg lucideX [size]=\"18\" aria-hidden=\"true\"></svg>\n </button>\n }\n </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { TalosDialogPadding } from '../dialog.types';\n\n@Component({\n selector: 'talos-dialog-content, [talosDialogContent]',\n templateUrl: './dialog-content.component.html',\n styleUrl: './dialog-content.component.scss',\n host: {\n 'class': 'talos-dialog-content-host',\n '[class.padding-none]': 'padding() === \"none\"',\n '[class.padding-sm]': 'padding() === \"sm\"',\n '[class.padding-md]': 'padding() === \"md\"',\n '[class.padding-lg]': 'padding() === \"lg\"'\n }\n})\nexport class TalosDialogContentComponent {\n /** Internal padding size */\n readonly padding = input<TalosDialogPadding>('md');\n}\n","<ng-content></ng-content>\n","import { Component, input } from '@angular/core';\nimport { TalosDialogFooterAlign } from '../dialog.types';\n\n@Component({\n selector: 'talos-dialog-footer, [talosDialogFooter]',\n templateUrl: './dialog-footer.component.html',\n styleUrl: './dialog-footer.component.scss',\n host: {\n 'class': 'talos-dialog-footer-host',\n '[class.has-divider]': 'divider()',\n '[class.is-sticky]': 'sticky()',\n '[class.align-start]': 'align() === \"start\"',\n '[class.align-center]': 'align() === \"center\"',\n '[class.align-end]': 'align() === \"end\"',\n '[class.align-space-between]': 'align() === \"space-between\"'\n }\n})\nexport class TalosDialogFooterComponent {\n /** Button alignment in footer */\n readonly align = input<TalosDialogFooterAlign>('end');\n\n /** Whether to show a top divider border */\n readonly divider = input<boolean>(true);\n\n /** Whether the footer sticks to the bottom when content scrolls */\n readonly sticky = input<boolean>(false);\n}\n","<div class=\"talos-dialog-footer-inner\">\n <ng-content></ng-content>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport {\n LucideAlertTriangle,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertCircle,\n LucideHelpCircle\n} from '@lucide/angular';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button';\nimport { TALOS_DIALOG_DATA, TalosConfirmDialogOptions } from '../dialog.types';\nimport { TalosDialogHeaderComponent } from '../dialog-header/dialog-header.component';\nimport { TalosDialogContentComponent } from '../dialog-content/dialog-content.component';\nimport { TalosDialogFooterComponent } from '../dialog-footer/dialog-footer.component';\n\n@Component({\n selector: 'talos-confirm-dialog',\n imports: [\n NgTemplateOutlet,\n TalosButtonDirective,\n TalosDialogHeaderComponent,\n TalosDialogContentComponent,\n TalosDialogFooterComponent,\n LucideAlertTriangle,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertCircle\n ],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.scss',\n host: {\n 'class': 'talos-confirm-dialog-host'\n }\n})\nexport class TalosConfirmDialogComponent {\n readonly data = inject<TalosConfirmDialogOptions>(TALOS_DIALOG_DATA, { optional: true }) || {\n title: 'Confirmation',\n message: 'Are you sure you want to proceed?'\n };\n\n private readonly dialogRef = inject(DialogRef);\n\n protected readonly title = this.data.title;\n protected readonly message = this.data.message;\n protected readonly isTemplateMessage = typeof this.data.message !== 'string';\n protected readonly confirmText = this.data.confirmText ?? 'Confirm';\n protected readonly cancelText = this.data.cancelText ?? 'Cancel';\n protected readonly variant = this.data.variant ?? 'primary';\n protected readonly showCancel = this.data.showCancel ?? true;\n\n protected get confirmButtonVariant(): 'primary' | 'danger' | 'secondary' {\n if (this.variant === 'danger') return 'danger';\n return 'primary';\n }\n\n protected onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n protected onCancel(): void {\n this.dialogRef.close(false);\n }\n}\n","<talos-dialog-header [title]=\"title\" [variant]=\"variant\" [divider]=\"false\">\n <div class=\"confirm-icon-wrapper\" [class]=\"'variant-' + variant\" talos-dialog-icon>\n @switch (variant) {\n @case ('danger') {\n <svg lucideAlertCircle [size]=\"22\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"22\"></svg>\n }\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"22\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"22\"></svg>\n }\n }\n </div>\n</talos-dialog-header>\n\n<talos-dialog-content padding=\"sm\">\n @if (isTemplateMessage) {\n <ng-container [ngTemplateOutlet]=\"$any(message)\"></ng-container>\n } @else {\n <p class=\"confirm-message-text\">{{ message }}</p>\n }\n</talos-dialog-content>\n\n<talos-dialog-footer [divider]=\"false\" align=\"end\">\n @if (showCancel) {\n <button talosButton variant=\"secondary\" size=\"md\" (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n }\n <button talosButton [variant]=\"confirmButtonVariant\" size=\"md\" (click)=\"onConfirm()\">\n {{ confirmText }}\n </button>\n</talos-dialog-footer>\n","import {\n Injectable,\n TemplateRef,\n inject,\n signal,\n Injector\n} from '@angular/core';\nimport { Dialog, DialogConfig, DialogRef } from '@angular/cdk/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport {\n TalosDialogConfig,\n TalosConfirmDialogOptions,\n TalosAlertDialogOptions,\n TALOS_DIALOG_DATA,\n TALOS_DIALOG_CONFIG,\n TALOS_DIALOG_REF\n} from './dialog.types';\nimport { TalosDialogRef } from './dialog-ref';\nimport { TalosConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosDialogService {\n private readonly cdkDialog = inject(Dialog);\n private readonly injector = inject(Injector);\n\n /** Signal of currently open dialog references */\n readonly openDialogs = signal<TalosDialogRef<unknown, unknown>[]>([]);\n\n /**\n * Open a component or template inside a modal dialog.\n */\n open<R = unknown, D = unknown>(\n componentOrTemplate: ComponentType<unknown> | TemplateRef<unknown>,\n config: TalosDialogConfig<D> = {}\n ): TalosDialogRef<R, D> {\n const size = config.size ?? 'md';\n const backdropBlur = config.backdropBlur ?? false;\n\n const panelClasses: string[] = ['talos-dialog-panel', `talos-dialog-size-${size}`];\n if (config.panelClass) {\n if (Array.isArray(config.panelClass)) {\n panelClasses.push(...config.panelClass);\n } else {\n panelClasses.push(config.panelClass);\n }\n }\n\n const backdropClasses: string[] = ['talos-dialog-backdrop'];\n if (backdropBlur === true || backdropBlur === 'md') {\n backdropClasses.push('talos-dialog-backdrop-blur-md');\n } else if (backdropBlur === 'sm') {\n backdropClasses.push('talos-dialog-backdrop-blur-sm');\n } else if (backdropBlur === 'lg') {\n backdropClasses.push('talos-dialog-backdrop-blur-lg');\n }\n\n if (config.backdropClass) {\n if (Array.isArray(config.backdropClass)) {\n backdropClasses.push(...config.backdropClass);\n } else {\n backdropClasses.push(config.backdropClass);\n }\n }\n\n const disableClose = config.disableClose ?? false;\n let talosRef: TalosDialogRef<R, D> | null = null;\n\n const cdkConfig: DialogConfig<D, DialogRef<R, unknown>> = {\n panelClass: panelClasses,\n backdropClass: backdropClasses,\n hasBackdrop: config.hasBackdrop ?? true,\n disableClose: disableClose,\n closeOnNavigation: true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restoreFocus ?? true,\n ariaLabel: config.ariaLabel,\n ariaLabelledBy: config.ariaLabelledBy,\n ariaDescribedBy: config.ariaDescribedBy,\n role: config.role ?? 'dialog',\n id: config.id,\n width: config.width,\n minWidth: config.minWidth,\n maxWidth: config.maxWidth,\n height: config.height,\n minHeight: config.minHeight,\n maxHeight: config.maxHeight,\n data: config.data,\n injector: this.injector,\n providers: (cdkDialogRef: DialogRef<R, unknown>) => {\n talosRef = new TalosDialogRef<R, D>(cdkDialogRef, config, config.data);\n return [\n { provide: TalosDialogRef, useValue: talosRef },\n { provide: TALOS_DIALOG_REF, useValue: talosRef },\n { provide: TALOS_DIALOG_DATA, useValue: config.data },\n { provide: TALOS_DIALOG_CONFIG, useValue: config }\n ];\n }\n };\n\n const cdkRef = this.cdkDialog.open<R, D, unknown>(componentOrTemplate, cdkConfig);\n if (!talosRef) {\n talosRef = new TalosDialogRef<R, D>(cdkRef, config, config.data);\n }\n const resolvedTalosRef = talosRef as TalosDialogRef<R, D>;\n\n // Track active dialogs\n this.openDialogs.update(current => [...current, resolvedTalosRef as TalosDialogRef<unknown, unknown>]);\n\n cdkRef.closed.subscribe(() => {\n this.openDialogs.update(current => current.filter(d => d.id !== resolvedTalosRef.id));\n });\n\n return resolvedTalosRef;\n }\n\n /**\n * Convenience helper to display a confirmation dialog.\n */\n confirm(options: TalosConfirmDialogOptions): TalosDialogRef<boolean> {\n return this.open<boolean, TalosConfirmDialogOptions>(TalosConfirmDialogComponent, {\n size: options.size ?? 'sm',\n backdropBlur: options.backdropBlur ?? true,\n disableClose: options.disableClose ?? false,\n role: 'alertdialog',\n data: options\n });\n }\n\n /**\n * Convenience helper to display an alert dialog.\n */\n alert(options: TalosAlertDialogOptions): TalosDialogRef<void> {\n return this.open<void, TalosConfirmDialogOptions>(TalosConfirmDialogComponent, {\n size: options.size ?? 'sm',\n backdropBlur: options.backdropBlur ?? true,\n role: 'alertdialog',\n data: {\n ...options,\n showCancel: false,\n confirmText: options.okText ?? 'OK'\n }\n });\n }\n\n /**\n * Close all currently open dialogs.\n */\n closeAll(): void {\n this.cdkDialog.closeAll();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosDialogHeaderComponent } from './dialog-header/dialog-header.component';\nimport { TalosDialogContentComponent } from './dialog-content/dialog-content.component';\nimport { TalosDialogFooterComponent } from './dialog-footer/dialog-footer.component';\nimport { TalosConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nimport {\n TalosDialogTitleDirective,\n TalosDialogDescriptionDirective,\n TalosDialogCloseDirective\n} from './dialog.directives';\n\nconst DIALOG_COMPONENTS = [\n TalosDialogHeaderComponent,\n TalosDialogContentComponent,\n TalosDialogFooterComponent,\n TalosConfirmDialogComponent,\n TalosDialogTitleDirective,\n TalosDialogDescriptionDirective,\n TalosDialogCloseDirective\n];\n\n@NgModule({\n imports: [...DIALOG_COMPONENTS],\n exports: [...DIALOG_COMPONENTS]\n})\nexport class TalosDialogModule {}\n","/**\n * Operational mode of the progress bar.\n * - 'determinate': Standard progress bar showing a discrete percentage from min to max.\n * - 'indeterminate': Animated sliding activity bar for unknown durations or async background tasks.\n * - 'buffer': Shows dual progress values (e.g. streaming buffered progress vs playback/uploaded).\n * - 'query': Reversed indeterminate animation indicating a pending query or handshake.\n */\nexport type TalosProgressBarMode = 'determinate' | 'indeterminate' | 'buffer' | 'query';\n\n/**\n * Visual semantic variant palette for the progress bar.\n */\nexport type TalosProgressBarVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'error'\n | 'info'\n | 'neutral'\n | 'gradient';\n\n/**\n * Standard sizing presets for the progress bar track height.\n * - 'xs': 2px (subtle top-of-page hairline or compact table indicator)\n * - 'sm': 4px (dense inline layout)\n * - 'md': 8px (default standard track)\n * - 'lg': 12px (prominent task progress)\n * - 'xl': 16px (large display capable of containing inside labels)\n */\nexport type TalosProgressBarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Corner shape styling of the progress bar track and fill.\n * - 'rounded': Full pill radius (default)\n * - 'square': Sharp rectangular corners (0 radius)\n * - 'subtle': Subtle corner radius (md token)\n */\nexport type TalosProgressBarShape = 'rounded' | 'square' | 'subtle';\n\n/**\n * Placement of the numeric or formatted progress value.\n * - 'end': Right side of an inline layout\n * - 'start': Left side of an inline layout\n * - 'top-end': Top right above the bar\n * - 'bottom-end': Bottom right below the bar\n * - 'inside': Centered inside the progress fill (recommended for size 'xl' or 'lg')\n */\nexport type TalosProgressBarValuePosition =\n | 'start'\n | 'end'\n | 'inside'\n | 'top-end'\n | 'bottom-end';\n\n/**\n * Placement of the progress text label.\n * - 'top': Displayed above the track\n * - 'inline': Displayed in the same row as the track\n * - 'bottom': Displayed below the track\n */\nexport type TalosProgressBarLabelPosition = 'top' | 'inline' | 'bottom';\n\n/**\n * Custom formatter callback function to transform numeric value and percentage into a readable string.\n */\nexport type TalosProgressBarFormatter = (value: number, percentage: number) => string;\n\n/**\n * Clamps a numeric value between a minimum and maximum threshold.\n *\n * @param value The value to clamp\n * @param min The lower bound (inclusive)\n * @param max The upper bound (inclusive)\n * @returns Clamped numerical value\n */\nexport function clampProgress(value: number, min: number, max: number): number {\n if (isNaN(value)) {\n return min;\n }\n if (min >= max) {\n return min;\n }\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Calculates percentage completion (0 to 100) based on value, min, and max.\n *\n * @param value Current progress value\n * @param min Minimum possible value\n * @param max Maximum possible value\n * @returns Scaled percentage between 0 and 100\n */\nexport function calculatePercentage(value: number, min: number, max: number): number {\n if (isNaN(value) || min >= max) {\n return 0;\n }\n const clamped = clampProgress(value, min, max);\n return ((clamped - min) / (max - min)) * 100;\n}\n\n/**\n * Normalizes CSS dimension input (number converted to px string, or raw string).\n *\n * @param value Dimension input as string or number\n * @returns CSS dimension string or undefined\n */\nexport function resolveProgressDimension(value: string | number | null | undefined): string | undefined {\n if (value === null || value === undefined || value === '') {\n return undefined;\n }\n if (typeof value === 'number') {\n return `${value}px`;\n }\n const trimmed = value.trim();\n if (/^\\d+$/.test(trimmed)) {\n return `${trimmed}px`;\n }\n return trimmed;\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Directive for projecting custom header label content into a `<talos-progress-bar>`.\n *\n * @example\n * ```html\n * <talos-progress-bar [value]=\"uploadProgress()\">\n * <div talosProgressLabel class=\"flex items-center gap-2\">\n * <span>Uploading assets</span>\n * <span class=\"talos-badge talos-badge--sm talos-badge--info\">Active</span>\n * </div>\n * </talos-progress-bar>\n * ```\n */\n@Directive({\n selector: '[talosProgressLabel], talos-progress-label',\n host: {\n 'class': 'talos-progress-label'\n }\n})\nexport class TalosProgressLabelDirective {}\n\n/**\n * Directive for projecting custom formatted value or badge indicator into a `<talos-progress-bar>`.\n *\n * @example\n * ```html\n * <talos-progress-bar [value]=\"75\">\n * <span talosProgressValue class=\"font-mono text-xs\">750 / 1,000 MB</span>\n * </talos-progress-bar>\n * ```\n */\n@Directive({\n selector: '[talosProgressValue], talos-progress-value',\n host: {\n 'class': 'talos-progress-value'\n }\n})\nexport class TalosProgressValueDirective {}\n\n/**\n * Directive for projecting auxiliary description, ETA, or subtext beneath a `<talos-progress-bar>`.\n *\n * @example\n * ```html\n * <talos-progress-bar [value]=\"42\">\n * <span talosProgressHint>Estimated time remaining: 2 minutes 45 seconds</span>\n * </talos-progress-bar>\n * ```\n */\n@Directive({\n selector: '[talosProgressHint], talos-progress-hint',\n host: {\n 'class': 'talos-progress-hint'\n }\n})\nexport class TalosProgressHintDirective {}\n","import {\n Component,\n booleanAttribute,\n computed,\n contentChild,\n input\n} from '@angular/core';\nimport {\n TalosProgressHintDirective,\n TalosProgressLabelDirective,\n TalosProgressValueDirective\n} from './progress-bar.directives';\nimport {\n TalosProgressBarFormatter,\n TalosProgressBarLabelPosition,\n TalosProgressBarMode,\n TalosProgressBarShape,\n TalosProgressBarSize,\n TalosProgressBarValuePosition,\n TalosProgressBarVariant,\n calculatePercentage,\n clampProgress,\n resolveProgressDimension\n} from './progress-bar.types';\n\n/**\n * Modern, accessible linear progress bar component for asynchronous task completion,\n * asset uploads, streaming buffer states, and metric progress visualization.\n *\n * Fully reactive via Angular signals, with support for indeterminate/buffer modes,\n * striped animated fills, semantic color variants, custom sizes, inside/inline labels,\n * and comprehensive WCAG AA accessibility attributes.\n *\n * @example\n * ```html\n * <!-- Determinate task progress -->\n * <talos-progress-bar [value]=\"65\" label=\"Uploading telemetry\" showValue />\n *\n * <!-- Indeterminate background worker -->\n * <talos-progress-bar mode=\"indeterminate\" variant=\"info\" size=\"sm\" />\n *\n * <!-- Streaming buffer mode -->\n * <talos-progress-bar mode=\"buffer\" [value]=\"35\" [bufferValue]=\"75\" variant=\"primary\" />\n *\n * <!-- Animated striped bar with inside label -->\n * <talos-progress-bar [value]=\"82\" size=\"xl\" striped animated variant=\"success\" [showValue]=\"true\" valuePosition=\"inside\" />\n * ```\n */\n@Component({\n selector: 'talos-progress-bar, [talosProgressBar]',\n templateUrl: './progress-bar.component.html',\n styleUrl: './progress-bar.component.scss',\n host: {\n 'class': 'talos-progress-bar-host',\n '[class.talos-progress-bar--determinate]': 'mode() === \"determinate\"',\n '[class.talos-progress-bar--indeterminate]': 'mode() === \"indeterminate\"',\n '[class.talos-progress-bar--buffer]': 'mode() === \"buffer\"',\n '[class.talos-progress-bar--query]': 'mode() === \"query\"',\n '[class.talos-progress-bar--primary]': 'variant() === \"primary\"',\n '[class.talos-progress-bar--secondary]': 'variant() === \"secondary\"',\n '[class.talos-progress-bar--success]': 'variant() === \"success\"',\n '[class.talos-progress-bar--warning]': 'variant() === \"warning\"',\n '[class.talos-progress-bar--danger]': 'variant() === \"danger\" || variant() === \"error\"',\n '[class.talos-progress-bar--error]': 'variant() === \"danger\" || variant() === \"error\"',\n '[class.talos-progress-bar--info]': 'variant() === \"info\"',\n '[class.talos-progress-bar--neutral]': 'variant() === \"neutral\"',\n '[class.talos-progress-bar--gradient]': 'variant() === \"gradient\"',\n '[class.talos-progress-bar--xs]': 'size() === \"xs\"',\n '[class.talos-progress-bar--sm]': 'size() === \"sm\"',\n '[class.talos-progress-bar--md]': 'size() === \"md\"',\n '[class.talos-progress-bar--lg]': 'size() === \"lg\"',\n '[class.talos-progress-bar--xl]': 'size() === \"xl\"',\n '[class.talos-progress-bar--rounded]': 'shape() === \"rounded\"',\n '[class.talos-progress-bar--square]': 'shape() === \"square\"',\n '[class.talos-progress-bar--subtle]': 'shape() === \"subtle\"',\n '[class.talos-progress-bar--striped]': 'striped()',\n '[class.talos-progress-bar--animated]': 'animated()',\n '[class.talos-progress-bar--inline-layout]': 'labelPosition() === \"inline\" || isInlineValueLayout()',\n '[attr.role]': '\"progressbar\"',\n '[attr.aria-valuenow]': 'isIndeterminate() ? null : clampedValue()',\n '[attr.aria-valuemin]': 'isIndeterminate() ? null : min()',\n '[attr.aria-valuemax]': 'isIndeterminate() ? null : max()',\n '[attr.aria-valuetext]': 'isIndeterminate() ? null : formattedValue()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby() ?? null',\n '[style.--talos-progress-custom-color]': 'color() ?? null',\n '[style.--talos-progress-custom-track]': 'trackColor() ?? null',\n '[style.--talos-progress-custom-buffer]': 'bufferColor() ?? null',\n '[style.--talos-progress-custom-height]': 'computedHeight()'\n }\n})\nexport class TalosProgressBarComponent {\n /**\n * Current progress value, evaluated between `min` and `max`.\n * @default 0\n */\n readonly value = input<number>(0);\n\n /**\n * Secondary buffer progress value for streaming or staged downloads.\n * Only active when `mode` is 'buffer'.\n */\n readonly bufferValue = input<number | undefined>(undefined);\n\n /**\n * Minimum possible numerical value.\n * @default 0\n */\n readonly min = input<number>(0);\n\n /**\n * Maximum possible numerical value.\n * @default 100\n */\n readonly max = input<number>(100);\n\n /**\n * Operational mode of the progress bar.\n * @default 'determinate'\n */\n readonly mode = input<TalosProgressBarMode>('determinate');\n\n /**\n * Semantic color theme variant.\n * @default 'primary'\n */\n readonly variant = input<TalosProgressBarVariant>('primary');\n\n /**\n * Track height size preset.\n * @default 'md'\n */\n readonly size = input<TalosProgressBarSize>('md');\n\n /**\n * Corner rounding shape of the progress track.\n * @default 'rounded'\n */\n readonly shape = input<TalosProgressBarShape>('rounded');\n\n /**\n * Whether to display diagonal textured stripes across the fill.\n * @default false\n */\n readonly striped = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether to continuously animate the striped texture pattern.\n * @default false\n */\n readonly animated = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether to display the calculated or formatted progress value label.\n * @default false\n */\n readonly showValue = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Positioning of the value indicator relative to the progress bar.\n * @default 'end'\n */\n readonly valuePosition = input<TalosProgressBarValuePosition>('end');\n\n /**\n * Optional custom formatting function for the displayed value.\n * Receives current numerical value and calculated percentage.\n */\n readonly valueFormatter = input<TalosProgressBarFormatter | undefined>(undefined);\n\n /**\n * Optional primary text label describing the progress context.\n */\n readonly label = input<string | undefined>(undefined);\n\n /**\n * Placement of the text label relative to the track.\n * @default 'top'\n */\n readonly labelPosition = input<TalosProgressBarLabelPosition>('top');\n\n /**\n * Custom CSS color override for the fill bar (e.g. hex, rgb, or css variable).\n */\n readonly color = input<string | undefined>(undefined);\n\n /**\n * Custom CSS background color override for the track.\n */\n readonly trackColor = input<string | undefined>(undefined);\n\n /**\n * Custom CSS background color override for the buffer bar.\n */\n readonly bufferColor = input<string | undefined>(undefined);\n\n /**\n * Custom explicit track height override (e.g., '14px', '1.25rem', or number in pixels).\n */\n readonly height = input<string | number | undefined>(undefined);\n\n /**\n * Accessible description announced by screen readers.\n * Falls back to `label` or 'Progress'.\n */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID of an external DOM element that labels this progress bar.\n */\n readonly ariaLabelledby = input<string | undefined>(undefined);\n\n /** Numerical value safely clamped within [min, max] */\n readonly clampedValue = computed<number>(() => {\n return clampProgress(this.value(), this.min(), this.max());\n });\n\n /** Scaled percentage (0 - 100) of primary progress */\n readonly percentage = computed<number>(() => {\n return calculatePercentage(this.value(), this.min(), this.max());\n });\n\n /** Scaled percentage (0 - 100) of buffer progress */\n readonly bufferPercentage = computed<number>(() => {\n const buf = this.bufferValue();\n if (buf === undefined || buf === null) {\n return 0;\n }\n return calculatePercentage(buf, this.min(), this.max());\n });\n\n /** Whether the progress bar operates in buffer mode */\n readonly isBuffer = computed<boolean>(() => {\n return this.mode() === 'buffer' || (this.bufferValue() !== undefined && this.bufferValue() !== null && this.mode() === 'determinate');\n });\n\n /** Whether the progress bar operates in an indeterminate state */\n readonly isIndeterminate = computed<boolean>(() => {\n const m = this.mode();\n return m === 'indeterminate' || m === 'query';\n });\n\n /** Formatted display string for the progress value */\n readonly formattedValue = computed<string>(() => {\n const custom = this.valueFormatter();\n const val = this.clampedValue();\n const pct = this.percentage();\n if (custom) {\n return custom(val, pct);\n }\n return `${Math.round(pct)}%`;\n });\n\n /** Resolved accessible label */\n readonly resolvedAriaLabel = computed<string>(() => {\n const custom = this.ariaLabel();\n if (custom && custom.trim().length > 0) {\n return custom.trim();\n }\n const lbl = this.label();\n if (lbl && lbl.trim().length > 0) {\n return lbl.trim();\n }\n return 'Progress';\n });\n\n /** Resolved track height override */\n readonly computedHeight = computed<string | null>(() => {\n return resolveProgressDimension(this.height()) ?? null;\n });\n\n /** Whether the value is aligned inline (start or end) alongside the bar */\n readonly isInlineValueLayout = computed<boolean>(() => {\n if (!this.showValue()) {\n return false;\n }\n const pos = this.valuePosition();\n return pos === 'start' || pos === 'end';\n });\n\n /** Optional projected custom label directive */\n readonly customLabel = contentChild(TalosProgressLabelDirective);\n\n /** Optional projected custom value directive */\n readonly customValue = contentChild(TalosProgressValueDirective);\n\n /** Optional projected custom hint directive */\n readonly customHint = contentChild(TalosProgressHintDirective);\n\n /** Whether top header container should render */\n readonly shouldRenderHeader = computed<boolean>(() => {\n const hasLabel = !!this.label() && this.labelPosition() === 'top';\n const hasTopEndValue = this.showValue() && this.valuePosition() === 'top-end';\n const hasProjected = !!this.customLabel() || !!this.customValue();\n return hasLabel || hasTopEndValue || hasProjected;\n });\n\n /** Whether bottom footer container should render */\n readonly shouldRenderFooter = computed<boolean>(() => {\n const hasBottomLabel = !!this.label() && this.labelPosition() === 'bottom';\n const hasBottomEndValue = this.showValue() && this.valuePosition() === 'bottom-end';\n const hasProjectedHint = !!this.customHint();\n return hasBottomLabel || hasBottomEndValue || hasProjectedHint;\n });\n}\n","@if (shouldRenderHeader()) {\n <div class=\"talos-progress-bar__header\">\n <div class=\"talos-progress-bar__header-left\">\n <ng-content select=\"[talosProgressLabel], talos-progress-label\"></ng-content>\n @if (label() && labelPosition() === 'top') {\n <span class=\"talos-progress-bar__label\">{{ label() }}</span>\n }\n </div>\n <div class=\"talos-progress-bar__header-right\">\n <ng-content select=\"[talosProgressValue], talos-progress-value\"></ng-content>\n @if (showValue() && valuePosition() === 'top-end') {\n <span class=\"talos-progress-bar__value talos-progress-bar__value--top-end\">{{ formattedValue() }}</span>\n }\n </div>\n </div>\n}\n\n<div class=\"talos-progress-bar__row\">\n @if (label() && labelPosition() === 'inline') {\n <span class=\"talos-progress-bar__label talos-progress-bar__label--inline\">{{ label() }}</span>\n }\n\n @if (showValue() && valuePosition() === 'start') {\n <span class=\"talos-progress-bar__value talos-progress-bar__value--start\">{{ formattedValue() }}</span>\n }\n\n <div class=\"talos-progress-bar__track\" aria-hidden=\"true\">\n @if (isBuffer()) {\n <div\n class=\"talos-progress-bar__buffer-bar\"\n [style.width.%]=\"bufferPercentage()\">\n </div>\n }\n\n <div\n class=\"talos-progress-bar__fill\"\n [style.width.%]=\"isIndeterminate() ? null : percentage()\">\n @if (showValue() && valuePosition() === 'inside' && !isIndeterminate()) {\n <span class=\"talos-progress-bar__value talos-progress-bar__value--inside\">\n {{ formattedValue() }}\n </span>\n }\n </div>\n </div>\n\n @if (showValue() && valuePosition() === 'end') {\n <span class=\"talos-progress-bar__value talos-progress-bar__value--end\">{{ formattedValue() }}</span>\n }\n</div>\n\n@if (shouldRenderFooter()) {\n <div class=\"talos-progress-bar__footer\">\n <div class=\"talos-progress-bar__footer-left\">\n @if (label() && labelPosition() === 'bottom') {\n <span class=\"talos-progress-bar__label talos-progress-bar__label--bottom\">{{ label() }}</span>\n }\n <ng-content select=\"[talosProgressHint], talos-progress-hint\"></ng-content>\n </div>\n <div class=\"talos-progress-bar__footer-right\">\n @if (showValue() && valuePosition() === 'bottom-end') {\n <span class=\"talos-progress-bar__value talos-progress-bar__value--bottom-end\">{{ formattedValue() }}</span>\n }\n </div>\n </div>\n} @else {\n <ng-content select=\"[talosProgressHint], talos-progress-hint\"></ng-content>\n}\n","import { NgModule } from '@angular/core';\nimport { TalosProgressBarComponent } from './progress-bar.component';\nimport {\n TalosProgressHintDirective,\n TalosProgressLabelDirective,\n TalosProgressValueDirective\n} from './progress-bar.directives';\n\nconst PROGRESS_BAR_DECLARATIONS = [\n TalosProgressBarComponent,\n TalosProgressLabelDirective,\n TalosProgressValueDirective,\n TalosProgressHintDirective\n];\n\n@NgModule({\n imports: [...PROGRESS_BAR_DECLARATIONS],\n exports: [...PROGRESS_BAR_DECLARATIONS]\n})\nexport class TalosProgressBarModule {}\n","/**\n * Visual shape variant for the skeleton placeholder.\n * - 'text': Standard typography line with slight corner rounding.\n * - 'circular' / 'avatar': Perfectly circular element (e.g., avatars, icon indicators).\n * - 'rectangular': Sharp or subtly rounded rectangular container (e.g., images, banners, card media).\n * - 'rounded' / 'button': Rounded container with standard border radius (e.g., buttons, tags, chips).\n * - 'card': Composite layout container placeholder.\n */\nexport type TalosSkeletonVariant =\n | 'text'\n | 'circular'\n | 'avatar'\n | 'rectangular'\n | 'rounded'\n | 'button'\n | 'card';\n\n/**\n * Animation style for the skeleton loading effect.\n * - 'shimmer': Continuous sliding gradient wave shine.\n * - 'pulse': Smooth opacity breathing effect.\n * - 'none': Static placeholder without movement.\n */\nexport type TalosSkeletonAnimation = 'shimmer' | 'pulse' | 'none';\n\n/**\n * Standard sizing presets for typography and circular skeleton loaders.\n */\nexport type TalosSkeletonSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Configuration options for the skeleton loader directive.\n */\nexport interface TalosSkeletonOptions {\n /** Visual shape of the skeleton mask */\n variant?: TalosSkeletonVariant;\n /** Animation style */\n animation?: TalosSkeletonAnimation;\n /** Width override */\n width?: string | number;\n /** Height override */\n height?: string | number;\n /** Custom border radius override */\n borderRadius?: string | number;\n /** Custom accessible label */\n ariaLabel?: string;\n}\n\n/**\n * Normalizes CSS dimension input (number converted to px string, or raw string).\n * @param value Dimension input as string or number\n * @returns CSS dimension string or undefined\n */\nexport function resolveCssDimension(value: string | number | null | undefined): string | undefined {\n if (value === null || value === undefined || value === '') {\n return undefined;\n }\n if (typeof value === 'number') {\n return `${value}px`;\n }\n const trimmed = value.trim();\n if (/^\\d+$/.test(trimmed)) {\n return `${trimmed}px`;\n }\n return trimmed;\n}\n","import {\n Directive,\n computed,\n input\n} from '@angular/core';\nimport {\n TalosSkeletonAnimation,\n TalosSkeletonVariant,\n resolveCssDimension\n} from './skeleton.types';\n\n/**\n * Directive that attaches skeleton loading state directly to any HTML tag or component.\n *\n * Conceals element content and text while preserving exact layout geometry and dimensions\n * (0 Cumulative Layout Shift), while applying an animated shimmer or pulse placeholder mask.\n *\n * @example\n * ```html\n * <h3 [talosSkeleton]=\"isLoading()\">{{ profile().name }}</h3>\n * <button [talosSkeleton]=\"isSaving()\" talosButton>Submit</button>\n * <div [talosSkeleton]=\"loading()\" talosSkeletonShape=\"circular\" style=\"width: 48px; height: 48px;\"></div>\n * ```\n */\n@Directive({\n selector: '[talosSkeleton]',\n host: {\n 'class': 'talos-skeleton-attached',\n '[class.talos-skeleton-active]': 'isActive()',\n '[class.talos-skeleton--shimmer]': 'isActive() && animation() === \"shimmer\"',\n '[class.talos-skeleton--pulse]': 'isActive() && animation() === \"pulse\"',\n '[class.talos-skeleton--no-animation]': 'isActive() && animation() === \"none\"',\n '[class.talos-skeleton--circular]': 'isActive() && isCircular()',\n '[class.talos-skeleton--rounded]': 'isActive() && isRounded()',\n '[class.talos-skeleton--rectangular]': 'isActive() && isRectangular()',\n '[style.width]': 'computedWidth()',\n '[style.height]': 'computedHeight()',\n '[style.border-radius]': 'computedRadius()',\n '[attr.aria-busy]': 'isActive() ? \"true\" : null',\n '[attr.aria-live]': 'isActive() ? \"polite\" : null',\n '[attr.aria-label]': 'isActive() ? ariaLabel() : null'\n }\n})\nexport class TalosSkeletonDirective {\n /**\n * Whether the skeleton loading state is active.\n * Accepts a boolean, string ('true'/'false'/empty attribute), or signal value.\n */\n readonly talosSkeleton = input<boolean | string | null | undefined>(true);\n\n /**\n * Animation style when skeleton state is active.\n * @default 'shimmer'\n */\n readonly animation = input<TalosSkeletonAnimation>('shimmer', {\n alias: 'talosSkeletonAnimation'\n });\n\n /**\n * Visual shape variant of the attached skeleton mask.\n * @default 'rounded'\n */\n readonly shape = input<TalosSkeletonVariant>('rounded', {\n alias: 'talosSkeletonShape'\n });\n\n /**\n * Visual shape alias for consistency with variant.\n */\n readonly variant = input<TalosSkeletonVariant | undefined>(undefined, {\n alias: 'talosSkeletonVariant'\n });\n\n /**\n * Explicit width override while loading.\n */\n readonly width = input<string | number | undefined>(undefined, {\n alias: 'talosSkeletonWidth'\n });\n\n /**\n * Explicit height override while loading.\n */\n readonly height = input<string | number | undefined>(undefined, {\n alias: 'talosSkeletonHeight'\n });\n\n /**\n * Explicit border-radius override while loading.\n */\n readonly borderRadius = input<string | number | undefined>(undefined, {\n alias: 'talosSkeletonRadius'\n });\n\n /**\n * Accessible description announced to assistive technology when busy.\n * @default 'Loading content...'\n */\n readonly ariaLabel = input<string>('Loading content...', {\n alias: 'talosSkeletonAriaLabel'\n });\n\n /** Resolved active state boolean */\n readonly isActive = computed(() => {\n const val = this.talosSkeleton();\n if (val === '' || val === 'true') {\n return true;\n }\n if (val === 'false' || val === false || val === null || val === undefined) {\n return false;\n }\n return Boolean(val);\n });\n\n /** Resolved active shape variant */\n readonly activeShape = computed<TalosSkeletonVariant>(() => {\n return this.variant() ?? this.shape();\n });\n\n readonly isCircular = computed(() => {\n const s = this.activeShape();\n return s === 'circular' || s === 'avatar';\n });\n\n readonly isRounded = computed(() => {\n const s = this.activeShape();\n return s === 'rounded' || s === 'button' || s === 'text';\n });\n\n readonly isRectangular = computed(() => {\n return this.activeShape() === 'rectangular';\n });\n\n readonly computedWidth = computed(() => {\n if (!this.isActive()) {\n return null;\n }\n return resolveCssDimension(this.width()) ?? null;\n });\n\n readonly computedHeight = computed(() => {\n if (!this.isActive()) {\n return null;\n }\n return resolveCssDimension(this.height()) ?? null;\n });\n\n readonly computedRadius = computed(() => {\n if (!this.isActive()) {\n return null;\n }\n const custom = resolveCssDimension(this.borderRadius());\n if (custom) {\n return custom;\n }\n if (this.isCircular()) {\n return '50%';\n }\n return null;\n });\n}\n","import {\n Component,\n computed,\n input\n} from '@angular/core';\nimport {\n TalosSkeletonAnimation,\n TalosSkeletonSize,\n TalosSkeletonVariant,\n resolveCssDimension\n} from './skeleton.types';\n\n/**\n * Modern, accessible skeleton loader placeholder component for asynchronous data loading states.\n *\n * Supports various geometric shapes, fluid shimmer/pulse animations, multi-line typography\n * simulation with customizable last line tapering, and automatic content projection toggle.\n *\n * @example\n * ```html\n * <!-- Single line or custom shape -->\n * <talos-skeleton variant=\"text\" width=\"180px\" />\n * <talos-skeleton variant=\"circular\" width=\"48px\" height=\"48px\" />\n *\n * <!-- Multi-line paragraph -->\n * <talos-skeleton variant=\"text\" [count]=\"3\" lastLineWidth=\"65%\" />\n *\n * <!-- Conditional content wrapper -->\n * <talos-skeleton [loading]=\"isLoading()\">\n * <div class=\"user-content\">Loaded User Profile</div>\n * </talos-skeleton>\n * ```\n */\n@Component({\n selector: 'talos-skeleton',\n templateUrl: './skeleton.component.html',\n styleUrl: './skeleton.component.scss',\n host: {\n 'class': 'talos-skeleton-host',\n '[class.talos-skeleton--hidden]': '!loading()',\n '[class.talos-skeleton--text]': 'variant() === \"text\"',\n '[class.talos-skeleton--circular]': 'isCircular()',\n '[class.talos-skeleton--rectangular]': 'variant() === \"rectangular\"',\n '[class.talos-skeleton--rounded]': 'isRounded()',\n '[class.talos-skeleton--card]': 'variant() === \"card\"',\n '[class.talos-skeleton--shimmer]': 'loading() && animation() === \"shimmer\"',\n '[class.talos-skeleton--pulse]': 'loading() && animation() === \"pulse\"',\n '[class.talos-skeleton--no-animation]': 'animation() === \"none\"',\n '[class.talos-skeleton--xs]': 'size() === \"xs\"',\n '[class.talos-skeleton--sm]': 'size() === \"sm\"',\n '[class.talos-skeleton--md]': 'size() === \"md\"',\n '[class.talos-skeleton--lg]': 'size() === \"lg\"',\n '[class.talos-skeleton--multi]': 'isMultiLine()',\n '[style.width]': '!isMultiLine() ? computedWidth() : \"100%\"',\n '[style.height]': '!isMultiLine() ? computedHeight() : null',\n '[style.border-radius]': '!isMultiLine() ? computedRadius() : null',\n '[style.gap]': 'isMultiLine() ? computedGap() : null',\n '[attr.role]': 'loading() ? \"status\" : null',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n '[attr.aria-live]': 'loading() ? \"polite\" : null',\n '[attr.aria-label]': 'loading() ? ariaLabel() : null'\n }\n})\nexport class TalosSkeletonComponent {\n /**\n * Visual shape variant of the skeleton.\n * @default 'text'\n */\n readonly variant = input<TalosSkeletonVariant>('text');\n\n /**\n * Animation style applied while loading.\n * @default 'shimmer'\n */\n readonly animation = input<TalosSkeletonAnimation>('shimmer');\n\n /**\n * Sizing scale preset for text and circular variants.\n * @default 'md'\n */\n readonly size = input<TalosSkeletonSize>('md');\n\n /**\n * Explicit width override (e.g., '100%', '240px', or number in pixels).\n */\n readonly width = input<string | number | undefined>(undefined);\n\n /**\n * Explicit height override (e.g., '2rem', '48px', or number in pixels).\n */\n readonly height = input<string | number | undefined>(undefined);\n\n /**\n * Custom border radius override (e.g., '6px', '50%').\n */\n readonly borderRadius = input<string | number | undefined>(undefined);\n\n /**\n * Number of lines to render for multi-line text placeholders.\n * @default 1\n */\n readonly count = input<number>(1);\n\n /**\n * Width of the last line when `count` > 1 (e.g. '60%' for realistic paragraph tapering).\n * @default '60%'\n */\n readonly lastLineWidth = input<string | number>('60%');\n\n /**\n * Spacing gap between lines when `count` > 1.\n * @default '0.5rem'\n */\n readonly gap = input<string | number>('0.5rem');\n\n /**\n * Whether the skeleton is actively in a loading state.\n * When false, the skeleton hides and projects inner `<ng-content>`.\n * @default true\n */\n readonly loading = input<boolean>(true);\n\n /**\n * Accessible description for screen readers during loading.\n * @default 'Loading content...'\n */\n readonly ariaLabel = input<string>('Loading content...');\n\n /** Whether the component represents a circular shape (circle or avatar) */\n readonly isCircular = computed(() => {\n const v = this.variant();\n return v === 'circular' || v === 'avatar';\n });\n\n /** Whether the component represents a rounded shape (rounded or button) */\n readonly isRounded = computed(() => {\n const v = this.variant();\n return v === 'rounded' || v === 'button';\n });\n\n /** Whether this is a multi-line text skeleton */\n readonly isMultiLine = computed(() => {\n return this.variant() === 'text' && this.count() > 1;\n });\n\n /** Normalized line array for multi-line rendering */\n readonly lineIndices = computed<number[]>(() => {\n const c = Math.max(1, Math.floor(this.count()));\n return Array.from({ length: c }, (_, i) => i);\n });\n\n /** Resolved CSS width string */\n readonly computedWidth = computed(() => resolveCssDimension(this.width()) ?? null);\n\n /** Resolved CSS height string */\n readonly computedHeight = computed(() => resolveCssDimension(this.height()) ?? null);\n\n /** Resolved CSS border radius string */\n readonly computedRadius = computed(() => {\n const custom = resolveCssDimension(this.borderRadius());\n if (custom) {\n return custom;\n }\n if (this.isCircular()) {\n return '50%';\n }\n return null;\n });\n\n /** Resolved CSS gap string */\n readonly computedGap = computed(() => resolveCssDimension(this.gap()) ?? '0.5rem');\n\n /**\n * Computes the width for an individual line in multi-line text mode.\n * @param index Line index (0-based)\n */\n getLineWidth(index: number): string {\n const total = this.count();\n if (index === total - 1 && total > 1) {\n return resolveCssDimension(this.lastLineWidth()) || '60%';\n }\n return resolveCssDimension(this.width()) || '100%';\n }\n}\n","@if (!loading()) {\n <ng-content></ng-content>\n} @else {\n @if (isMultiLine()) {\n @for (index of lineIndices(); track index) {\n <span\n class=\"talos-skeleton__line\"\n [style.width]=\"getLineWidth(index)\"\n [style.height]=\"computedHeight()\"\n aria-hidden=\"true\">\n </span>\n }\n <span class=\"sr-only\">{{ ariaLabel() }}</span>\n } @else if (variant() === 'card') {\n <div class=\"talos-skeleton__card-wrapper\" aria-hidden=\"true\">\n <div class=\"talos-skeleton__card-media\"></div>\n <div class=\"talos-skeleton__card-body\">\n <div class=\"talos-skeleton__card-row\">\n <span class=\"talos-skeleton__avatar-circle\"></span>\n <div class=\"talos-skeleton__card-lines\">\n <span class=\"talos-skeleton__line\" style=\"width: 65%\"></span>\n <span class=\"talos-skeleton__line\" style=\"width: 40%\"></span>\n </div>\n </div>\n <div class=\"talos-skeleton__card-paragraphs\">\n <span class=\"talos-skeleton__line\" style=\"width: 100%\"></span>\n <span class=\"talos-skeleton__line\" style=\"width: 88%\"></span>\n <span class=\"talos-skeleton__line\" style=\"width: 55%\"></span>\n </div>\n </div>\n </div>\n <span class=\"sr-only\">{{ ariaLabel() }}</span>\n } @else {\n <span class=\"talos-skeleton__inner\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">{{ ariaLabel() }}</span>\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosSkeletonComponent } from './skeleton.component';\nimport { TalosSkeletonDirective } from './skeleton.directives';\n\nconst SKELETON_DECLARATIONS = [\n TalosSkeletonComponent,\n TalosSkeletonDirective\n];\n\n@NgModule({\n imports: [...SKELETON_DECLARATIONS],\n exports: [...SKELETON_DECLARATIONS]\n})\nexport class TalosSkeletonModule {}\n","import {\n Component,\n TemplateRef,\n Type,\n computed,\n input,\n output,\n signal,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertTriangle,\n LucideCircleAlert,\n LucideX\n} from '@lucide/angular';\nimport { TalosSnackbarInstance } from '../snackbar.types';\n\n@Component({\n selector: 'talos-snackbar',\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertTriangle,\n LucideCircleAlert,\n LucideX\n ],\n templateUrl: './snackbar.component.html',\n styleUrl: './snackbar.component.scss'\n})\nexport class TalosSnackbarComponent implements OnInit, OnDestroy {\n /** Snackbar instance data */\n readonly instance = input.required<TalosSnackbarInstance>();\n\n /** Event emitted when snackbar requests dismissal */\n readonly dismiss = output<string>();\n\n /** Event emitted when snackbar action button is clicked */\n readonly action = output<string>();\n\n protected readonly isDismissing = signal<boolean>(false);\n protected readonly progressPercent = signal<number>(100);\n protected readonly Infinity = Infinity;\n\n\n private timerId: ReturnType<typeof setInterval> | null = null;\n private remainingMs = 0;\n private lastTickMs = 0;\n\n readonly isTopPosition = computed(() => {\n const pos = this.instance().position;\n return pos ? pos.startsWith('top') : false;\n });\n\n readonly isTemplateMessage = computed(() => {\n return this.instance().message instanceof TemplateRef;\n });\n\n\n readonly templateMessage = computed(() => {\n return this.instance().message as TemplateRef<unknown>;\n });\n\n readonly customIconComponent = computed(() => {\n const icon = this.instance().icon;\n return typeof icon === 'function' ? (icon as Type<unknown>) : null;\n });\n\n readonly ariaRole = computed(() => {\n const variant = this.instance().variant;\n return variant === 'error' || variant === 'warning' ? 'alert' : 'status';\n });\n\n readonly ariaLive = computed(() => {\n const variant = this.instance().variant;\n return variant === 'error' || variant === 'warning' ? 'assertive' : 'polite';\n });\n\n ngOnInit(): void {\n const duration = this.instance().duration;\n if (duration > 0 && duration !== Infinity) {\n this.remainingMs = duration;\n this.startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this.stopTimer();\n }\n\n private startTimer(): void {\n this.stopTimer();\n const totalDuration = this.instance().duration;\n this.lastTickMs = Date.now();\n\n this.timerId = setInterval(() => {\n if (this.instance().isPaused) return;\n\n const now = Date.now();\n const delta = now - this.lastTickMs;\n this.lastTickMs = now;\n\n this.remainingMs -= delta;\n\n if (this.remainingMs <= 0) {\n this.progressPercent.set(0);\n this.stopTimer();\n this.onCloseClick();\n } else {\n const pct = Math.max(0, (this.remainingMs / totalDuration) * 100);\n this.progressPercent.set(pct);\n }\n }, 50);\n }\n\n private stopTimer(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n this.timerId = null;\n }\n }\n\n protected onMouseEnter(): void {\n if (this.instance().pauseOnHover) {\n this.instance().isPaused = true;\n }\n }\n\n protected onMouseLeave(): void {\n if (this.instance().pauseOnHover) {\n this.instance().isPaused = false;\n this.lastTickMs = Date.now();\n }\n }\n\n protected onActionClick(): void {\n if (this.instance().onAction) {\n this.instance().onAction!();\n }\n this.action.emit(this.instance().id);\n this.onCloseClick();\n }\n\n protected onCloseClick(): void {\n if (this.isDismissing()) return;\n this.isDismissing.set(true);\n\n if (this.instance().onDismiss) {\n this.instance().onDismiss!();\n }\n\n setTimeout(() => {\n this.dismiss.emit(this.instance().id);\n }, 200);\n }\n}\n","<div class=\"talos-snackbar\" [class.variant-default]=\"instance().variant === 'default'\"\n [class.variant-info]=\"instance().variant === 'info'\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [class.pos-top]=\"isTopPosition()\" [class.pos-bottom]=\"!isTopPosition()\" [class.is-dismissing]=\"isDismissing()\"\n [class]=\"instance().customClass || ''\" [attr.role]=\"ariaRole()\" [attr.aria-live]=\"ariaLive()\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n @if (instance().icon !== false) {\n <div class=\"talos-snackbar-icon\">\n @if (instance().icon && instance().icon !== true) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n @switch (instance().variant) {\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"20\"></svg>\n }\n }\n }\n </div>\n }\n\n <div class=\"talos-snackbar-content\">\n @if (instance().title) {\n <div class=\"talos-snackbar-title\">{{ instance().title }}</div>\n }\n\n <div class=\"talos-snackbar-message\">\n @if (isTemplateMessage()) {\n <ng-container\n *ngTemplateOutlet=\"templateMessage(); context: { $implicit: instance().data, instance: instance() }\"></ng-container>\n } @else {\n {{ instance().message }}\n }\n </div>\n </div>\n\n <div class=\"talos-snackbar-actions\">\n @if (instance().actionLabel) {\n <button type=\"button\" class=\"talos-snackbar-action-btn\" (click)=\"onActionClick()\">\n {{ instance().actionLabel }}\n </button>\n }\n\n @if (instance().dismissible) {\n <button type=\"button\" class=\"talos-snackbar-close-btn\" aria-label=\"Close notification\" (click)=\"onCloseClick()\">\n <svg lucideX [size]=\"16\"></svg>\n </button>\n }\n </div>\n\n @if (instance().showProgressBar && instance().duration > 0 && instance().duration !== Infinity) {\n <div class=\"talos-snackbar-progress\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [style.width.%]=\"progressPercent()\"></div>\n }\n</div>","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { TalosSnackbarComponent } from '../snackbar/snackbar.component';\nimport { TalosSnackbarService } from '../snackbar.service';\nimport { TalosSnackbarInstance, TalosSnackbarPosition } from '../snackbar.types';\n\n@Component({\n selector: 'talos-snackbar-container',\n imports: [TalosSnackbarComponent],\n template: `\n @for (pos of positions; track pos) {\n @if (groupedSnackbars()[pos].length > 0) {\n <div class=\"talos-snackbar-position-group\" [class]=\"pos\">\n @for (item of groupedSnackbars()[pos]; track item.id) {\n <talos-snackbar\n [instance]=\"item\"\n (dismiss)=\"onDismiss($event)\"\n (action)=\"onAction($event)\"\n />\n }\n </div>\n }\n }\n `,\n styleUrl: './snackbar-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'talos-snackbar-overlay-host'\n }\n})\nexport class TalosSnackbarContainerComponent {\n private readonly snackbarService = inject(TalosSnackbarService);\n\n readonly positions: TalosSnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right'\n ];\n\n readonly groupedSnackbars = computed<Record<TalosSnackbarPosition, TalosSnackbarInstance[]>>(() => {\n const all = this.snackbarService.snackbars();\n const map: Record<TalosSnackbarPosition, TalosSnackbarInstance[]> = {\n 'top-left': [],\n 'top-center': [],\n 'top-right': [],\n 'bottom-left': [],\n 'bottom-center': [],\n 'bottom-right': []\n };\n\n for (const item of all) {\n const pos = item.position || 'bottom-right';\n if (map[pos]) {\n map[pos].push(item);\n } else {\n map['bottom-right'].push(item);\n }\n }\n\n return map;\n });\n\n onDismiss(id: string): void {\n this.snackbarService.dismiss(id);\n }\n\n onAction(id: string): void {\n // Action handled inside component and service\n }\n}\n","import {\n Injectable,\n TemplateRef,\n inject,\n signal,\n ApplicationRef,\n EnvironmentInjector,\n createComponent,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n TalosSnackbarConfig,\n TalosSnackbarInstance,\n TalosSnackbarRef,\n TalosSnackbarVariant\n} from './snackbar.types';\nimport { TalosSnackbarContainerComponent } from './snackbar-container/snackbar-container.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosSnackbarService {\n private readonly overlay = inject(Overlay);\n private overlayRef: OverlayRef | null = null;\n\n /** Reactive list of currently active snackbar instances */\n readonly snackbars = signal<TalosSnackbarInstance[]>([]);\n\n private idCounter = 0;\n\n /** Global default configuration values */\n private defaultConfig: Partial<TalosSnackbarConfig> = {\n variant: 'default',\n position: 'bottom-right',\n duration: 4000,\n dismissible: true,\n showProgressBar: true,\n pauseOnHover: true,\n icon: true\n };\n\n /**\n * Override default global configurations for all subsequent snackbars.\n */\n setDefaultConfig(config: Partial<TalosSnackbarConfig>): void {\n this.defaultConfig = { ...this.defaultConfig, ...config };\n }\n\n /**\n * Main entry point to open a configured snackbar.\n */\n show(\n messageOrConfig: string | TemplateRef<unknown> | TalosSnackbarConfig,\n configOverrides: Partial<TalosSnackbarConfig> = {}\n ): TalosSnackbarRef {\n let fullConfig: TalosSnackbarConfig;\n\n if (\n typeof messageOrConfig === 'string' ||\n messageOrConfig instanceof TemplateRef\n ) {\n fullConfig = {\n message: messageOrConfig,\n ...configOverrides\n };\n } else {\n fullConfig = {\n ...messageOrConfig,\n ...configOverrides\n };\n }\n\n const merged: TalosSnackbarInstance = {\n id: `talos-sb-${++this.idCounter}-${Date.now()}`,\n variant: fullConfig.variant ?? this.defaultConfig.variant ?? 'default',\n position: fullConfig.position ?? this.defaultConfig.position ?? 'bottom-right',\n duration: fullConfig.duration ?? this.defaultConfig.duration ?? 4000,\n dismissible: fullConfig.dismissible ?? this.defaultConfig.dismissible ?? true,\n showProgressBar: fullConfig.showProgressBar ?? this.defaultConfig.showProgressBar ?? true,\n pauseOnHover: fullConfig.pauseOnHover ?? this.defaultConfig.pauseOnHover ?? true,\n icon: fullConfig.icon ?? this.defaultConfig.icon ?? true,\n message: fullConfig.message,\n title: fullConfig.title,\n actionLabel: fullConfig.actionLabel,\n onAction: fullConfig.onAction,\n onDismiss: fullConfig.onDismiss,\n customClass: fullConfig.customClass,\n data: fullConfig.data,\n createdAt: Date.now(),\n isPaused: false\n };\n\n this.ensureOverlayCreated();\n\n this.snackbars.update((current) => [...current, merged]);\n\n return {\n id: merged.id,\n dismiss: () => this.dismiss(merged.id)\n };\n }\n\n /** Convenience method for Success variant snackbars */\n success(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'success' });\n }\n\n /** Convenience method for Error variant snackbars */\n error(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'error' });\n }\n\n /** Convenience method for Warning variant snackbars */\n warning(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'warning' });\n }\n\n /** Convenience method for Info variant snackbars */\n info(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'info' });\n }\n\n /**\n * Dismiss a specific snackbar by ID, or the oldest active snackbar if no ID is specified.\n */\n dismiss(id?: string): void {\n if (!id) {\n const current = this.snackbars();\n if (current.length === 0) return;\n id = current[0].id;\n }\n\n this.snackbars.update((current) => current.filter((item) => item.id !== id));\n\n if (this.snackbars().length === 0) {\n this.destroyOverlay();\n }\n }\n\n /**\n * Dismiss all currently active snackbars.\n */\n dismissAll(): void {\n this.snackbars.set([]);\n this.destroyOverlay();\n }\n\n private ensureOverlayCreated(): void {\n if (!this.overlayRef) {\n const positionStrategy = this.overlay.position().global();\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n panelClass: 'talos-snackbar-overlay-panel'\n });\n\n const portal = new ComponentPortal(TalosSnackbarContainerComponent);\n this.overlayRef.attach(portal);\n }\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosSnackbarComponent } from './snackbar/snackbar.component';\nimport { TalosSnackbarContainerComponent } from './snackbar-container/snackbar-container.component';\n\n/**\n * Convenience NgModule wrapping standalone snackbar components.\n * \n * Allows developers who prefer `TalosSnackbarModule` to import all snackbar elements in one go.\n */\n@NgModule({\n imports: [\n TalosSnackbarComponent,\n TalosSnackbarContainerComponent\n ],\n exports: [\n TalosSnackbarComponent,\n TalosSnackbarContainerComponent\n ]\n})\nexport class TalosSnackbarModule { }\n","/**\n * Sizing presets for the loading spinner diameter.\n * - 'xs': 16px (dense inline buttons, form affix, tags)\n * - 'sm': 20px (standard compact buttons, table cells)\n * - 'md': 28px (default cards, content sections)\n * - 'lg': 40px (prominent view loader, dialogs)\n * - 'xl': 56px (full-page or hero loading states)\n */\nexport type TalosSpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Visual semantic variant palette for the loading spinner.\n */\nexport type TalosSpinnerVariant =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'error'\n | 'info'\n | 'neutral'\n | 'subtle'\n | 'outline'\n | 'inherit';\n\n/**\n * Animation and visual rendering type for the loading spinner.\n * - 'circular': Modern SVG ring with animated rotating dash offset (default).\n * - 'dots': Three rhythmic pulsing / bouncing dots for compact inline loading.\n * - 'ring': Smooth dual-arc or segmented rotating ring.\n * - 'orbit': Modern dual-node orbital rotation for rich dashboards.\n */\nexport type TalosSpinnerType = 'circular' | 'dots' | 'ring' | 'orbit';\n\n/**\n * Rotation and animation speed presets.\n * - 'slow': 1.5s per cycle\n * - 'normal': 0.85s per cycle (default)\n * - 'fast': 0.5s per cycle\n */\nexport type TalosSpinnerSpeed = 'slow' | 'normal' | 'fast';\n\n/**\n * Placement of the optional label text relative to the spinner.\n * - 'bottom': Centered below the spinner (default for block/card layouts)\n * - 'top': Centered above the spinner\n * - 'end' / 'inline': Positioned to the right in an inline horizontal layout\n * - 'start': Positioned to the left in an inline horizontal layout\n */\nexport type TalosSpinnerLabelPosition = 'top' | 'bottom' | 'start' | 'end' | 'inline';\n\n/**\n * Configuration options for the global spinner service and programmatic triggers.\n */\nexport interface TalosSpinnerConfig {\n /** Text message or description to display */\n message?: string;\n /** Visual semantic variant */\n variant?: TalosSpinnerVariant;\n /** Size preset or custom dimension */\n size?: TalosSpinnerSize | string | number;\n /** Spinner rendering type */\n type?: TalosSpinnerType;\n /** Whether to apply a frosted glassmorphic backdrop blur */\n blur?: boolean;\n /** Whether to render over full screen viewport */\n fullscreen?: boolean;\n /** Custom accessible label */\n ariaLabel?: string;\n}\n\n/**\n * Maps standard sizing presets to pixel dimensions.\n */\nexport const SPINNER_SIZE_MAP: Record<TalosSpinnerSize, number> = {\n xs: 16,\n sm: 20,\n md: 28,\n lg: 40,\n xl: 56\n};\n\n/**\n * Maps standard sizing presets to default stroke / track widths.\n */\nexport const SPINNER_STROKE_MAP: Record<TalosSpinnerSize, number> = {\n xs: 2,\n sm: 2.5,\n md: 3,\n lg: 4,\n xl: 5\n};\n\n/**\n * Normalizes CSS dimension input (number converted to px string, or raw string).\n *\n * @param value Dimension input as string or number\n * @returns CSS dimension string or undefined\n */\nexport function resolveSpinnerDimension(value: string | number | null | undefined): string | undefined {\n if (value === null || value === undefined || value === '') {\n return undefined;\n }\n if (typeof value === 'number') {\n return `${value}px`;\n }\n const trimmed = value.trim();\n if (/^\\d+$/.test(trimmed)) {\n return `${trimmed}px`;\n }\n return trimmed;\n}\n\n/**\n * Extracts a numeric pixel dimension or falls back to size preset lookup.\n *\n * @param size Preset or custom dimension\n * @returns Numeric pixel size\n */\nexport function resolveNumericSize(size: TalosSpinnerSize | string | number | undefined): number {\n if (!size) {\n return SPINNER_SIZE_MAP.md;\n }\n if (typeof size === 'number') {\n return size;\n }\n if (size in SPINNER_SIZE_MAP) {\n return SPINNER_SIZE_MAP[size as TalosSpinnerSize];\n }\n const parsed = parseFloat(size);\n return isNaN(parsed) ? SPINNER_SIZE_MAP.md : parsed;\n}\n","import { Injectable, computed, signal } from '@angular/core';\nimport {\n TalosSpinnerConfig,\n TalosSpinnerSize,\n TalosSpinnerType,\n TalosSpinnerVariant\n} from './spinner.types';\n\n/**\n * Global singleton service for displaying full-page or application-level loading spinners.\n *\n * Implements reference-counting so concurrent asynchronous operations (such as parallel HTTP requests\n * or multi-stage workflow transitions) can safely call `show()` and `hide()` without prematurely\n * dismissing the indicator while other background tasks are still in progress.\n *\n * @example\n * ```typescript\n * const spinner = inject(TalosSpinnerService);\n *\n * // Basic usage\n * spinner.show('Syncing database...');\n * await syncData();\n * spinner.hide();\n *\n * // Advanced configuration\n * spinner.show({\n * message: 'Processing batch export...',\n * variant: 'primary',\n * size: 'lg',\n * blur: true\n * });\n * ```\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosSpinnerService {\n /** Active concurrent request counter */\n private readonly requestCount = signal<number>(0);\n\n /** Current active spinner configuration */\n private readonly currentConfig = signal<TalosSpinnerConfig | null>(null);\n\n /** Whether the global spinner is currently active */\n readonly active = computed<boolean>(() => this.requestCount() > 0);\n\n /** The message currently displayed on the global spinner */\n readonly message = computed<string | undefined>(() => this.currentConfig()?.message);\n\n /** The color variant currently used on the global spinner */\n readonly variant = computed<TalosSpinnerVariant>(() => this.currentConfig()?.variant ?? 'primary');\n\n /** The size preset currently used on the global spinner */\n readonly size = computed<TalosSpinnerSize | string | number>(() => this.currentConfig()?.size ?? 'lg');\n\n /** The animation type currently used on the global spinner */\n readonly type = computed<TalosSpinnerType>(() => this.currentConfig()?.type ?? 'circular');\n\n /** Whether backdrop blur is enabled for the global spinner */\n readonly blur = computed<boolean>(() => this.currentConfig()?.blur ?? true);\n\n /** Accessible label announced to screen readers */\n readonly ariaLabel = computed<string>(() => {\n return this.currentConfig()?.ariaLabel || this.currentConfig()?.message || 'Loading, please wait...';\n });\n\n /**\n * Activates the global loading spinner or increments the active operation counter.\n *\n * @param configOrMessage Optional configuration object or text message string\n */\n show(configOrMessage?: TalosSpinnerConfig | string): void {\n const config: TalosSpinnerConfig =\n typeof configOrMessage === 'string'\n ? { message: configOrMessage }\n : configOrMessage ?? {};\n\n this.currentConfig.set({\n variant: 'primary',\n size: 'lg',\n type: 'circular',\n blur: true,\n fullscreen: true,\n ...config\n });\n\n this.requestCount.update(count => count + 1);\n }\n\n /**\n * Decrements the active operation counter. Dismisses the global spinner once all operations have completed.\n */\n hide(): void {\n this.requestCount.update(count => {\n const next = Math.max(0, count - 1);\n if (next === 0) {\n this.currentConfig.set(null);\n }\n return next;\n });\n }\n\n /**\n * Immediately clears all active requests and forces the global spinner to hide.\n */\n forceHide(): void {\n this.requestCount.set(0);\n this.currentConfig.set(null);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input\n} from '@angular/core';\nimport { TalosSpinnerLabelDirective } from './spinner.directives';\nimport { TalosSpinnerService } from './spinner.service';\nimport {\n SPINNER_SIZE_MAP,\n SPINNER_STROKE_MAP,\n TalosSpinnerLabelPosition,\n TalosSpinnerSize,\n TalosSpinnerSpeed,\n TalosSpinnerType,\n TalosSpinnerVariant,\n resolveNumericSize,\n resolveSpinnerDimension\n} from './spinner.types';\n\n/**\n * Modern, accessible loading spinner component for inline button indicators,\n * contextual card loading overlays, and global asynchronous feedback.\n *\n * Fully reactive via Angular signals with support for circular, dots, ring,\n * and orbital animations, standard sizing presets, semantic variants, and WCAG AA compliance.\n *\n * @example\n * ```html\n * <!-- Standard inline spinner -->\n * <talos-spinner size=\"sm\" variant=\"primary\" />\n *\n * <!-- Centered card overlay with custom label -->\n * <talos-spinner [overlay]=\"true\" [loading]=\"isSyncing()\" label=\"Synchronizing records...\">\n * <div class=\"card-content\">...</div>\n * </talos-spinner>\n *\n * <!-- Bouncing dots variant for button states -->\n * <talos-spinner type=\"dots\" size=\"xs\" variant=\"inherit\" />\n * ```\n */\n@Component({\n selector: 'talos-spinner, talos-loading-spinner, [talosSpinner], [talosLoadingSpinner]',\n imports: [NgTemplateOutlet],\n templateUrl: './spinner.component.html',\n styleUrl: './spinner.component.scss',\n host: {\n 'class': 'talos-spinner-host',\n '[class.talos-spinner-host--overlay]': 'overlay()',\n '[class.talos-spinner-host--active]': 'isOverlayActive()',\n '[class.talos-spinner-host--blur]': 'blur()',\n '[class.talos-spinner-host--fullscreen]': 'fullscreen()',\n '[class.talos-spinner--primary]': 'variant() === \"primary\"',\n '[class.talos-spinner--secondary]': 'variant() === \"secondary\"',\n '[class.talos-spinner--success]': 'variant() === \"success\"',\n '[class.talos-spinner--warning]': 'variant() === \"warning\"',\n '[class.talos-spinner--danger]': 'variant() === \"danger\" || variant() === \"error\"',\n '[class.talos-spinner--error]': 'variant() === \"danger\" || variant() === \"error\"',\n '[class.talos-spinner--info]': 'variant() === \"info\"',\n '[class.talos-spinner--neutral]': 'variant() === \"neutral\"',\n '[class.talos-spinner--subtle]': 'variant() === \"subtle\"',\n '[class.talos-spinner--outline]': 'variant() === \"outline\"',\n '[class.talos-spinner--inherit]': 'variant() === \"inherit\"',\n '[class.talos-spinner--xs]': 'size() === \"xs\"',\n '[class.talos-spinner--sm]': 'size() === \"sm\"',\n '[class.talos-spinner--md]': 'size() === \"md\"',\n '[class.talos-spinner--lg]': 'size() === \"lg\"',\n '[class.talos-spinner--xl]': 'size() === \"xl\"',\n '[class.talos-spinner--circular]': 'type() === \"circular\"',\n '[class.talos-spinner--dots]': 'type() === \"dots\"',\n '[class.talos-spinner--ring]': 'type() === \"ring\"',\n '[class.talos-spinner--orbit]': 'type() === \"orbit\"',\n '[class.talos-spinner--slow]': 'speed() === \"slow\"',\n '[class.talos-spinner--fast]': 'speed() === \"fast\"',\n '[class.talos-spinner--inline]': 'isInlineLayout()',\n '[attr.role]': 'overlay() ? null : \"status\"',\n '[attr.aria-live]': 'overlay() ? null : \"polite\"',\n '[attr.aria-busy]': 'overlay() ? (isOverlayActive() ? \"true\" : \"false\") : \"true\"',\n '[attr.aria-label]': 'overlay() ? null : resolvedAriaLabel()',\n '[style.--talos-spinner-custom-size]': 'computedDimension()',\n '[style.--talos-spinner-custom-color]': 'color() ?? null',\n '[style.--talos-spinner-custom-track]': 'trackColor() ?? null'\n }\n})\nexport class TalosSpinnerComponent {\n /**\n * Visual semantic variant palette for the spinner stroke and accents.\n * @default 'primary'\n */\n readonly variant = input<TalosSpinnerVariant>('primary');\n\n /**\n * Sizing preset ('xs' | 'sm' | 'md' | 'lg' | 'xl') or custom numerical / CSS dimension.\n * @default 'md'\n */\n readonly size = input<TalosSpinnerSize | string | number>('md');\n\n /**\n * Animation visual rendering type.\n * @default 'circular'\n */\n readonly type = input<TalosSpinnerType>('circular');\n\n /**\n * Cycle animation speed preset.\n * @default 'normal'\n */\n readonly speed = input<TalosSpinnerSpeed>('normal');\n\n /**\n * Custom stroke width in pixels for SVG circular / ring animations.\n */\n readonly strokeWidth = input<number | undefined>(undefined);\n\n /**\n * Custom CSS color override for the animated spinner fill.\n */\n readonly color = input<string | undefined>(undefined);\n\n /**\n * Custom CSS background color override for the subtle circular track ring.\n */\n readonly trackColor = input<string | undefined>(undefined);\n\n /**\n * Whether to render the secondary background track ring.\n * @default true\n */\n readonly showTrack = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Optional visible text label displayed next to or below the spinner.\n */\n readonly label = input<string | undefined>(undefined);\n\n /**\n * Position of the label text relative to the spinner indicator.\n * @default 'bottom'\n */\n readonly labelPosition = input<TalosSpinnerLabelPosition>('bottom');\n\n /**\n * Whether this spinner functions as a container wrapper overlay over projected content.\n * @default false\n */\n readonly overlay = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Active state when used as an overlay wrapper.\n * @default true\n */\n readonly loading = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Whether to apply a frosted glassmorphic backdrop blur to the container overlay.\n * @default false\n */\n readonly blur = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether this overlay covers the full viewport screen.\n * @default false\n */\n readonly fullscreen = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Accessible description announced to screen readers.\n * Defaults to `label` or 'Loading, please wait...'.\n */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Projected custom label directive */\n readonly customLabel = contentChild(TalosSpinnerLabelDirective);\n\n /** Evaluated numeric pixel diameter */\n readonly numericSize = computed<number>(() => {\n return resolveNumericSize(this.size());\n });\n\n /** Computed CSS dimension string (e.g., '28px') */\n readonly computedDimension = computed<string | null>(() => {\n return resolveSpinnerDimension(this.size()) ?? null;\n });\n\n /** Evaluated stroke width based on size or custom input */\n readonly computedStrokeWidth = computed<number>(() => {\n const custom = this.strokeWidth();\n if (custom !== undefined && custom > 0) {\n return custom;\n }\n const currentSize = this.size();\n if (typeof currentSize === 'string' && currentSize in SPINNER_STROKE_MAP) {\n return SPINNER_STROKE_MAP[currentSize as TalosSpinnerSize];\n }\n const num = this.numericSize();\n return Math.max(1.75, Math.round((num / 10) * 10) / 10);\n });\n\n /** Radius of SVG circle taking stroke into account */\n readonly computedRadius = computed<number>(() => {\n const stroke = this.computedStrokeWidth();\n return Math.max(2, (48 - stroke) / 2);\n });\n\n /** Circumference of SVG circle for stroke dash animations */\n readonly computedCircumference = computed<number>(() => {\n return 2 * Math.PI * this.computedRadius();\n });\n\n /** Dash array for SVG circular arc */\n readonly computedDashArray = computed<string>(() => {\n const circ = this.computedCircumference();\n return `${circ * 0.75} ${circ * 0.25}`;\n });\n\n /** Dash offset for initial arc position */\n readonly computedDashOffset = computed<number>(() => {\n return this.computedCircumference() * 0.25;\n });\n\n /** Resolved accessible label */\n readonly resolvedAriaLabel = computed<string>(() => {\n const custom = this.ariaLabel();\n if (custom && custom.trim().length > 0) {\n return custom.trim();\n }\n const lbl = this.label();\n if (lbl && lbl.trim().length > 0) {\n return lbl.trim();\n }\n return 'Loading, please wait...';\n });\n\n /** Whether the label is arranged in horizontal inline layout with the spinner */\n readonly isInlineLayout = computed<boolean>(() => {\n const pos = this.labelPosition();\n return pos === 'inline' || pos === 'start' || pos === 'end';\n });\n\n /** Whether the overlay is actively showing */\n readonly isOverlayActive = computed<boolean>(() => {\n if (!this.overlay()) {\n return true;\n }\n return this.loading();\n });\n}\n\n/**\n * Global overlay component connected to `TalosSpinnerService`.\n *\n * Can be placed in the root template (`app.component.html`) to provide a reactive,\n * unified full-screen loading state for all global asynchronous background processes.\n *\n * @example\n * ```html\n * <!-- In app.component.html -->\n * <talos-global-spinner />\n * ```\n */\n@Component({\n selector: 'talos-global-spinner',\n imports: [TalosSpinnerComponent],\n template: `\n @if (spinnerService.active()) {\n <div\n class=\"talos-global-spinner-backdrop\"\n [class.talos-global-spinner-backdrop--blur]=\"spinnerService.blur()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"spinnerService.ariaLabel()\"\n >\n <talos-spinner\n [variant]=\"spinnerService.variant()\"\n [size]=\"spinnerService.size()\"\n [type]=\"spinnerService.type()\"\n [label]=\"spinnerService.message()\"\n labelPosition=\"bottom\"\n [ariaLabel]=\"spinnerService.ariaLabel()\"\n />\n </div>\n }\n `,\n styles: [`\n :host {\n display: contents;\n }\n\n .talos-global-spinner-backdrop {\n position: fixed;\n inset: 0;\n z-index: var(--talos-z-index-modal, 9999);\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--talos-backdrop-bg, rgba(15, 23, 42, 0.45));\n backdrop-filter: none;\n transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n animation: talos-spinner-fade-in 0.2s ease-out;\n\n &.talos-global-spinner-backdrop--blur {\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n }\n }\n\n @keyframes talos-spinner-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n `]\n})\nexport class TalosGlobalSpinnerComponent {\n readonly spinnerService = inject(TalosSpinnerService);\n}\n","@if (overlay()) {\n <!-- Wrapped content projection -->\n <div class=\"talos-spinner__content-slot\" [class.talos-spinner__content-slot--blurred]=\"isOverlayActive() && blur()\">\n <ng-content />\n </div>\n\n <!-- Active overlay backdrop scrim -->\n @if (isOverlayActive()) {\n <div\n class=\"talos-spinner__overlay\"\n [class.talos-spinner__overlay--fullscreen]=\"fullscreen()\"\n [class.talos-spinner__overlay--blur]=\"blur()\"\n role=\"status\"\n aria-live=\"polite\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n >\n <div class=\"talos-spinner__inner\" [class.talos-spinner__inner--inline]=\"isInlineLayout()\">\n <!-- Label placed start / top -->\n @if (labelPosition() === 'top' || labelPosition() === 'start') {\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n }\n\n <!-- Animated Spinner Core -->\n <ng-container *ngTemplateOutlet=\"spinnerCoreTemplate\" />\n\n <!-- Label placed end / bottom / inline -->\n @if (labelPosition() === 'bottom' || labelPosition() === 'end' || labelPosition() === 'inline') {\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n }\n </div>\n </div>\n }\n} @else {\n <!-- Inline / Standalone Spinner Presentation -->\n <div class=\"talos-spinner__inner\" [class.talos-spinner__inner--inline]=\"isInlineLayout()\">\n <!-- Label placed start / top -->\n @if (labelPosition() === 'top' || labelPosition() === 'start') {\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n }\n\n <!-- Animated Spinner Core -->\n <ng-container *ngTemplateOutlet=\"spinnerCoreTemplate\" />\n\n <!-- Label placed end / bottom / inline -->\n @if (labelPosition() === 'bottom' || labelPosition() === 'end' || labelPosition() === 'inline') {\n <ng-container *ngTemplateOutlet=\"labelTemplate\" />\n }\n </div>\n\n <!-- Screen reader fallback when no visible label exists -->\n @if (!label() && !customLabel()) {\n <span class=\"sr-only\">{{ resolvedAriaLabel() }}</span>\n }\n}\n\n<!-- Reusable Spinner Core SVG / Graphics Template -->\n<ng-template #spinnerCoreTemplate>\n <div class=\"talos-spinner__graphic\" [attr.aria-hidden]=\"true\">\n @switch (type()) {\n @case ('dots') {\n <div class=\"talos-spinner__dots\">\n <span class=\"talos-spinner__dot talos-spinner__dot--1\"></span>\n <span class=\"talos-spinner__dot talos-spinner__dot--2\"></span>\n <span class=\"talos-spinner__dot talos-spinner__dot--3\"></span>\n </div>\n }\n\n @case ('ring') {\n <svg\n class=\"talos-spinner__svg talos-spinner__svg--ring\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n @if (showTrack()) {\n <circle\n class=\"talos-spinner__track\"\n cx=\"24\"\n cy=\"24\"\n [attr.r]=\"computedRadius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n fill=\"none\"\n />\n }\n <circle\n class=\"talos-spinner__ring-arc talos-spinner__ring-arc--top\"\n cx=\"24\"\n cy=\"24\"\n [attr.r]=\"computedRadius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n <circle\n class=\"talos-spinner__ring-arc talos-spinner__ring-arc--bottom\"\n cx=\"24\"\n cy=\"24\"\n [attr.r]=\"computedRadius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n\n @case ('orbit') {\n <div class=\"talos-spinner__orbit\">\n <span class=\"talos-spinner__orbit-core\"></span>\n <span class=\"talos-spinner__orbit-satellite talos-spinner__orbit-satellite--1\"></span>\n <span class=\"talos-spinner__orbit-satellite talos-spinner__orbit-satellite--2\"></span>\n </div>\n }\n\n @default {\n <!-- Default circular spinner -->\n <svg\n class=\"talos-spinner__svg talos-spinner__svg--circular\"\n viewBox=\"0 0 48 48\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n @if (showTrack()) {\n <circle\n class=\"talos-spinner__track\"\n cx=\"24\"\n cy=\"24\"\n [attr.r]=\"computedRadius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n fill=\"none\"\n />\n }\n <circle\n class=\"talos-spinner__arc\"\n cx=\"24\"\n cy=\"24\"\n [attr.r]=\"computedRadius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n fill=\"none\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"computedDashArray()\"\n [attr.stroke-dashoffset]=\"computedDashOffset()\"\n />\n </svg>\n }\n }\n </div>\n</ng-template>\n\n<!-- Reusable Label Template -->\n<ng-template #labelTemplate>\n @if (label() || customLabel()) {\n <div\n class=\"talos-spinner__label\"\n [class.talos-spinner__label--top]=\"labelPosition() === 'top'\"\n [class.talos-spinner__label--bottom]=\"labelPosition() === 'bottom'\"\n [class.talos-spinner__label--start]=\"labelPosition() === 'start'\"\n [class.talos-spinner__label--end]=\"labelPosition() === 'end'\"\n [class.talos-spinner__label--inline]=\"labelPosition() === 'inline'\"\n >\n @if (label()) {\n <span>{{ label() }}</span>\n }\n <ng-content select=\"[talosSpinnerLabel]\" />\n </div>\n }\n</ng-template>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n EnvironmentInjector,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n createComponent,\n effect,\n inject,\n input\n} from '@angular/core';\nimport { TalosSpinnerComponent } from './spinner.component';\nimport {\n TalosSpinnerSize,\n TalosSpinnerType,\n TalosSpinnerVariant\n} from './spinner.types';\n\n/**\n * Structural / content directive for marking custom spinner label templates.\n *\n * @example\n * ```html\n * <talos-spinner>\n * <span *talosSpinnerLabel class=\"custom-label\">\n * Syncing <strong>24/100</strong> files...\n * </span>\n * </talos-spinner>\n * ```\n */\n@Directive({\n selector: '[talosSpinnerLabel]'\n})\nexport class TalosSpinnerLabelDirective {}\n\n/**\n * Directive that attaches an accessible loading spinner overlay directly onto any container element\n * (e.g., card, panel, table, or form section).\n *\n * When active, it dims the host container, applies an optional blur effect, disables interactions,\n * and renders a centered spinner indicator with optional message.\n *\n * @example\n * ```html\n * <div [talosSpinnerOverlay]=\"isUpdating()\" talosSpinnerMessage=\"Saving changes...\" talosSpinnerVariant=\"primary\">\n * <p>Card Content...</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[talosSpinnerOverlay], [talosLoading]',\n host: {\n 'class': 'talos-spinner-overlay-host',\n '[class.talos-spinner-overlay-host--active]': 'isActive()',\n '[class.talos-spinner-overlay-host--blur]': 'isActive() && blur()',\n '[attr.aria-busy]': 'isActive() ? \"true\" : null'\n }\n})\nexport class TalosSpinnerOverlayDirective implements OnDestroy {\n private readonly elementRef = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly appRef = inject(ApplicationRef);\n private readonly envInjector = inject(EnvironmentInjector);\n\n private overlayElement: HTMLElement | null = null;\n private spinnerRef: ComponentRef<TalosSpinnerComponent> | null = null;\n\n /**\n * Whether the loading overlay is currently active.\n */\n readonly talosSpinnerOverlay = input<boolean, unknown>(false, {\n transform: booleanAttribute\n });\n\n /**\n * Alias input `talosLoading` for concise developer ergonomics.\n */\n readonly talosLoading = input<boolean, unknown>(false, {\n transform: booleanAttribute\n });\n\n /**\n * Optional loading message or status string to display below the spinner.\n */\n readonly message = input<string | undefined>(undefined, {\n alias: 'talosSpinnerMessage'\n });\n\n /**\n * Semantic color variant for the attached spinner overlay.\n * @default 'primary'\n */\n readonly variant = input<TalosSpinnerVariant>('primary', {\n alias: 'talosSpinnerVariant'\n });\n\n /**\n * Size preset for the attached spinner indicator.\n * @default 'md'\n */\n readonly size = input<TalosSpinnerSize>('md', {\n alias: 'talosSpinnerSize'\n });\n\n /**\n * Animation rendering type for the attached spinner indicator.\n * @default 'circular'\n */\n readonly type = input<TalosSpinnerType>('circular', {\n alias: 'talosSpinnerType'\n });\n\n /**\n * Whether to apply a frosted glassmorphic backdrop blur effect.\n * @default true\n */\n readonly blur = input<boolean, unknown>(true, {\n alias: 'talosSpinnerBlur',\n transform: booleanAttribute\n });\n\n /**\n * Accessible description announced by assistive technologies.\n */\n readonly ariaLabel = input<string | undefined>(undefined, {\n alias: 'talosSpinnerAriaLabel'\n });\n\n constructor() {\n effect(() => {\n const active = this.isActive();\n if (active) {\n this.renderOverlay();\n } else {\n this.removeOverlay();\n }\n });\n }\n\n /**\n * Computes whether the overlay is active from either primary input or alias.\n */\n isActive(): boolean {\n return this.talosSpinnerOverlay() || this.talosLoading();\n }\n\n private renderOverlay(): void {\n if (!this.overlayElement) {\n this.overlayElement = this.renderer.createElement('div');\n this.renderer.addClass(this.overlayElement, 'talos-spinner-overlay');\n if (this.blur()) {\n this.renderer.addClass(this.overlayElement, 'talos-spinner-overlay--blur');\n }\n this.renderer.setAttribute(this.overlayElement, 'role', 'status');\n this.renderer.setAttribute(this.overlayElement, 'aria-live', 'polite');\n\n const label = this.ariaLabel() || this.message() || 'Loading, please wait...';\n this.renderer.setAttribute(this.overlayElement, 'aria-label', label);\n\n // Create component instance\n this.spinnerRef = createComponent(TalosSpinnerComponent, {\n environmentInjector: this.envInjector\n });\n\n this.updateSpinnerInputs();\n this.appRef.attachView(this.spinnerRef.hostView);\n\n this.renderer.appendChild(this.overlayElement, this.spinnerRef.location.nativeElement);\n this.renderer.appendChild(this.elementRef.nativeElement, this.overlayElement);\n } else {\n if (this.blur()) {\n this.renderer.addClass(this.overlayElement, 'talos-spinner-overlay--blur');\n } else {\n this.renderer.removeClass(this.overlayElement, 'talos-spinner-overlay--blur');\n }\n this.updateSpinnerInputs();\n }\n }\n\n private updateSpinnerInputs(): void {\n if (!this.spinnerRef) return;\n this.spinnerRef.setInput('variant', this.variant());\n this.spinnerRef.setInput('size', this.size());\n this.spinnerRef.setInput('type', this.type());\n this.spinnerRef.setInput('label', this.message());\n this.spinnerRef.setInput('labelPosition', 'bottom');\n if (this.ariaLabel()) {\n this.spinnerRef.setInput('ariaLabel', this.ariaLabel());\n }\n this.spinnerRef.changeDetectorRef.detectChanges();\n }\n\n private removeOverlay(): void {\n if (this.spinnerRef) {\n this.appRef.detachView(this.spinnerRef.hostView);\n this.spinnerRef.destroy();\n this.spinnerRef = null;\n }\n if (this.overlayElement && this.overlayElement.parentNode) {\n this.renderer.removeChild(this.overlayElement.parentNode, this.overlayElement);\n this.overlayElement = null;\n }\n }\n\n ngOnDestroy(): void {\n this.removeOverlay();\n }\n}\n","import { NgModule } from '@angular/core';\nimport {\n TalosGlobalSpinnerComponent,\n TalosSpinnerComponent\n} from './spinner.component';\nimport {\n TalosSpinnerLabelDirective,\n TalosSpinnerOverlayDirective\n} from './spinner.directives';\n\nconst SPINNER_DECLARATIONS = [\n TalosSpinnerComponent,\n TalosGlobalSpinnerComponent,\n TalosSpinnerLabelDirective,\n TalosSpinnerOverlayDirective\n];\n\n@NgModule({\n imports: [...SPINNER_DECLARATIONS],\n exports: [...SPINNER_DECLARATIONS]\n})\nexport class TalosSpinnerModule {}\n","import {\n Component,\n Directive,\n ElementRef,\n DestroyRef,\n inject,\n input,\n Injector,\n OnInit\n} from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\nexport type TooltipPosition = 'top' | 'left' | 'right' | 'bottom' | 'auto';\n\n@Component({\n selector: 'talos-tooltip-content',\n template: `<div class=\"talos-tooltip-inner\">{{ text() }}</div>`,\n host: {\n 'class': 'talos-tooltip-panel',\n 'role': 'tooltip'\n }\n})\nexport class TalosTooltipComponent {\n readonly text = input<string>('');\n}\n\n@Directive({\n selector: '[talosTooltip], [tooltip]',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(click)': 'hide()',\n '(keydown.escape)': 'hide()'\n }\n})\nexport class TalosTooltipDirective implements OnInit {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly overlay = inject(Overlay);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n private readonly focusMonitor = inject(FocusMonitor);\n\n readonly tooltip = input<string>('', { alias: 'talosTooltip' });\n readonly tooltipContent = input<string>('', { alias: 'tooltip' });\n readonly position = input<TooltipPosition>('top', { alias: 'tooltipPosition' });\n readonly disabled = input<boolean>(false, { alias: 'tooltipDisabled' });\n\n private overlayRef: OverlayRef | null = null;\n\n ngOnInit(): void {\n this.focusMonitor.monitor(this.elementRef).subscribe((origin: FocusOrigin) => {\n if (origin === 'keyboard') {\n this.show();\n } else if (!origin) {\n this.hide();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.focusMonitor.stopMonitoring(this.elementRef);\n this.hide();\n });\n }\n\n get tooltipText(): string {\n return this.tooltip() || this.tooltipContent() || '';\n }\n\n show(): void {\n if (this.disabled() || !this.tooltipText || this.overlayRef?.hasAttached()) {\n return;\n }\n\n const positionStrategy = this.createPositionStrategy();\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false\n });\n\n const portal = new ComponentPortal(TalosTooltipComponent, null, this.injector);\n const componentRef = this.overlayRef.attach(portal);\n componentRef.setInput('text', this.tooltipText);\n }\n\n hide(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n private createPositionStrategy(): PositionStrategy {\n const pos = this.position();\n const strategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withFlexibleDimensions(false)\n .withPush(false);\n\n const positions = {\n top: {\n originX: 'center' as const,\n originY: 'top' as const,\n overlayX: 'center' as const,\n overlayY: 'bottom' as const,\n offsetY: -8\n },\n bottom: {\n originX: 'center' as const,\n originY: 'bottom' as const,\n overlayX: 'center' as const,\n overlayY: 'top' as const,\n offsetY: 8\n },\n left: {\n originX: 'start' as const,\n originY: 'center' as const,\n overlayX: 'end' as const,\n overlayY: 'center' as const,\n offsetX: -8\n },\n right: {\n originX: 'end' as const,\n originY: 'center' as const,\n overlayX: 'start' as const,\n overlayY: 'center' as const,\n offsetX: 8\n }\n };\n\n if (pos === 'top') {\n strategy.withPositions([positions.top, positions.bottom, positions.left, positions.right]);\n } else if (pos === 'bottom') {\n strategy.withPositions([positions.bottom, positions.top, positions.left, positions.right]);\n } else if (pos === 'left') {\n strategy.withPositions([positions.left, positions.right, positions.top, positions.bottom]);\n } else if (pos === 'right') {\n strategy.withPositions([positions.right, positions.left, positions.top, positions.bottom]);\n } else {\n strategy.withPositions([positions.top, positions.bottom, positions.right, positions.left]);\n }\n\n return strategy;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}