@weeehaoooz/talos-ui 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +91 -15
  3. package/fesm2022/weeehaoooz-talos-ui-button.mjs.map +1 -0
  4. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs +3110 -0
  5. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs.map +1 -0
  6. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs +2414 -0
  7. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs.map +1 -0
  8. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs +1039 -0
  9. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs.map +1 -0
  10. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs +2885 -0
  11. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs.map +1 -0
  12. package/fesm2022/weeehaoooz-talos-ui-form.mjs +10799 -0
  13. package/fesm2022/weeehaoooz-talos-ui-form.mjs.map +1 -0
  14. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +1316 -7
  15. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
  16. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +3 -3
  17. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
  18. package/fesm2022/weeehaoooz-talos-ui.mjs +21592 -16293
  19. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
  20. package/package.json +20 -139
  21. package/styles/_breadcrumb.scss +16 -0
  22. package/styles/_button-group.scss +2 -1
  23. package/styles/_buttons.scss +51 -0
  24. package/styles/_dropdown.scss +438 -0
  25. package/styles/_form-controls.scss +13 -0
  26. package/styles/_progress-bar.scss +43 -0
  27. package/styles/_skeleton.scss +176 -0
  28. package/styles/_spinner.scss +58 -0
  29. package/styles/_variables.scss +33 -0
  30. package/styles/index.scss +6 -1
  31. package/types/weeehaoooz-talos-ui-button.d.ts +92 -0
  32. package/types/weeehaoooz-talos-ui-button.d.ts.map +1 -0
  33. package/types/weeehaoooz-talos-ui-data-display.d.ts +1018 -0
  34. package/types/weeehaoooz-talos-ui-data-display.d.ts.map +1 -0
  35. package/types/weeehaoooz-talos-ui-data-viz.d.ts +839 -0
  36. package/types/weeehaoooz-talos-ui-data-viz.d.ts.map +1 -0
  37. package/types/weeehaoooz-talos-ui-dropdown.d.ts +187 -0
  38. package/types/weeehaoooz-talos-ui-dropdown.d.ts.map +1 -0
  39. package/types/weeehaoooz-talos-ui-feedback.d.ts +1495 -0
  40. package/types/weeehaoooz-talos-ui-feedback.d.ts.map +1 -0
  41. package/types/weeehaoooz-talos-ui-form.d.ts +2639 -0
  42. package/types/weeehaoooz-talos-ui-form.d.ts.map +1 -0
  43. package/types/weeehaoooz-talos-ui-layout.d.ts +851 -3
  44. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -1
  45. package/types/weeehaoooz-talos-ui-nav.d.ts +1 -1
  46. package/types/weeehaoooz-talos-ui.d.ts +7148 -4629
  47. package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
  48. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
  49. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -94
  50. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
  51. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
  52. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
  53. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs +0 -1627
  54. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs.map +0 -1
  55. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
  56. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
  57. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
  58. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
  59. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
  60. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
  61. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
  62. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
  63. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
  64. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
  65. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
  66. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
  67. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
  68. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
  69. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
  70. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
  71. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
  72. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
  73. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
  74. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
  75. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
  76. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
  77. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
  78. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
  79. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
  80. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
  81. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
  82. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
  83. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
  84. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
  85. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
  86. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
  87. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
  88. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
  89. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
  90. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
  91. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
  92. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
  93. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
  94. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
  95. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
  96. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
  97. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
  98. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
  99. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
  100. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
  101. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
  102. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
  103. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
  104. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
  105. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
  106. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
  107. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
  108. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
  109. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
  110. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
  111. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
  112. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
  113. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
  114. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
  115. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
  116. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
  117. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
  118. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
  119. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -62
  120. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
  121. package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
  122. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
  123. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
  124. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
  125. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts +0 -272
  126. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts.map +0 -1
  127. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
  128. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
  129. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
  130. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
  131. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
  132. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
  133. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
  134. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
  135. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
  136. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
  137. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
  138. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
  139. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
  140. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
  141. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
  142. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
  143. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
  144. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
  145. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
  146. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
  147. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
  148. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
  149. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
  150. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
  151. package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
  152. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
  153. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
  154. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
  155. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
  156. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
  157. package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
  158. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
  159. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
  160. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
  161. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
  162. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
  163. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
  164. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
  165. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
  166. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
  167. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
  168. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
  169. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
  170. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
  171. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
  172. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
  173. package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
  174. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
  175. package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
  176. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
  177. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
  178. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
  179. package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
  180. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
  181. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
  182. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
  183. package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
  184. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
  185. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
  186. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
  187. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
  188. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
  189. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
  190. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, computed, Injectable, input, output, Component, inject, Directive, NgModule, forwardRef, effect, DestroyRef, model, ContentChild } from '@angular/core';
3
- import { NgComponentOutlet } from '@angular/common';
4
- import { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';
5
- import { LucideX, LucideChevronDown } from '@lucide/angular';
2
+ import { signal, computed, Injectable, input, output, Component, inject, Directive, NgModule, forwardRef, effect, DestroyRef, model, ContentChild, TemplateRef, contentChild, contentChildren, viewChildren, viewChild } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { NgComponentOutlet, CommonModule, NgTemplateOutlet } from '@angular/common';
5
+ import { TalosButtonDirective } from '@weeehaoooz/talos-ui/button';
6
+ import { LucideX, LucideChevronDown, LucidePlus, LucideCheck, LucideAlertTriangle } from '@lucide/angular';
6
7
 
7
8
  class LayoutService {
8
9
  // Reactive Signals for layout state
@@ -330,7 +331,7 @@ class TalosCardBodyComponent {
330
331
  padding = input(null, /* @ts-ignore */
331
332
  ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
332
333
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosCardBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
333
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.1", type: TalosCardBodyComponent, isStandalone: true, selector: "talos-card-body, talos-card-content, [talosCardBody], [talosCardContent]", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.talos-card-body-padding-none": "padding() === \"none\"", "class.talos-card-body-padding-sm": "padding() === \"sm\"", "class.talos-card-body-padding-md": "padding() === \"md\"", "class.talos-card-body-padding-lg": "padding() === \"lg\"" }, classAttribute: "talos-card-body-host" }, ngImport: i0, template: "<ng-content />\n", styles: [":host{display:block;width:100%;box-sizing:border-box;flex:1;color:var(--talos-text-color, var(--text-color, #0f172a));line-height:1.5}:host.talos-card-body-padding-none{padding:0}:host.talos-card-body-padding-sm{padding:.75rem 0}:host.talos-card-body-padding-md{padding:1rem 0}:host.talos-card-body-padding-lg{padding:1.5rem 0}\n"] });
334
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.1", type: TalosCardBodyComponent, isStandalone: true, selector: "talos-card-body, talos-card-content, [talosCardBody], [talosCardContent]", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.talos-card-body-padding-none": "padding() === \"none\"", "class.talos-card-body-padding-sm": "padding() === \"sm\"", "class.talos-card-body-padding-md": "padding() === \"md\"", "class.talos-card-body-padding-lg": "padding() === \"lg\"" }, classAttribute: "talos-card-body-host" }, ngImport: i0, template: "<ng-content />\n", styles: [":host{display:flex;flex-direction:column;width:100%;box-sizing:border-box;flex:1 1 auto;min-height:0;color:var(--talos-text-color, var(--text-color, #0f172a));line-height:1.5}:host.talos-card-body-padding-none{padding:0}:host.talos-card-body-padding-sm{padding:.75rem 0}:host.talos-card-body-padding-md{padding:1rem 0}:host.talos-card-body-padding-lg{padding:1.5rem 0}\n"] });
334
335
  }
335
336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosCardBodyComponent, decorators: [{
336
337
  type: Component,
@@ -340,7 +341,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
340
341
  '[class.talos-card-body-padding-sm]': 'padding() === "sm"',
341
342
  '[class.talos-card-body-padding-md]': 'padding() === "md"',
342
343
  '[class.talos-card-body-padding-lg]': 'padding() === "lg"'
343
- }, template: "<ng-content />\n", styles: [":host{display:block;width:100%;box-sizing:border-box;flex:1;color:var(--talos-text-color, var(--text-color, #0f172a));line-height:1.5}:host.talos-card-body-padding-none{padding:0}:host.talos-card-body-padding-sm{padding:.75rem 0}:host.talos-card-body-padding-md{padding:1rem 0}:host.talos-card-body-padding-lg{padding:1.5rem 0}\n"] }]
344
+ }, template: "<ng-content />\n", styles: [":host{display:flex;flex-direction:column;width:100%;box-sizing:border-box;flex:1 1 auto;min-height:0;color:var(--talos-text-color, var(--text-color, #0f172a));line-height:1.5}:host.talos-card-body-padding-none{padding:0}:host.talos-card-body-padding-sm{padding:.75rem 0}:host.talos-card-body-padding-md{padding:1rem 0}:host.talos-card-body-padding-lg{padding:1.5rem 0}\n"] }]
344
345
  }], propDecorators: { padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }] } });
345
346
 
346
347
  class TalosCardFooterComponent {
@@ -843,9 +844,1317 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
843
844
  }]
844
845
  }] });
845
846
 
847
+ /**
848
+ * Directive applied to an `<ng-template>` to provide a custom header label template for a tab.
849
+ *
850
+ * Usage:
851
+ * ```html
852
+ * <talos-tab>
853
+ * <ng-template talosTabLabel>
854
+ * <svg lucideBell [size]="14"></svg>
855
+ * <span>Notifications</span>
856
+ * </ng-template>
857
+ * Tab content...
858
+ * </talos-tab>
859
+ * ```
860
+ */
861
+ class TalosTabLabelDirective {
862
+ templateRef = inject((TemplateRef));
863
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
864
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosTabLabelDirective, isStandalone: true, selector: "[talosTabLabel], ng-template[talosTabLabel]", ngImport: i0 });
865
+ }
866
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabLabelDirective, decorators: [{
867
+ type: Directive,
868
+ args: [{
869
+ selector: '[talosTabLabel], ng-template[talosTabLabel]'
870
+ }]
871
+ }] });
872
+ /**
873
+ * Directive applied to an `<ng-template>` to delay rendering of the tab panel's content
874
+ * until the tab is first activated / selected (lazy loading).
875
+ *
876
+ * Usage:
877
+ * ```html
878
+ * <talos-tab label="Heavy Data">
879
+ * <ng-template talosTabContent>
880
+ * <heavy-data-grid />
881
+ * </ng-template>
882
+ * </talos-tab>
883
+ * ```
884
+ */
885
+ class TalosTabContentDirective {
886
+ templateRef = inject((TemplateRef));
887
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
888
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosTabContentDirective, isStandalone: true, selector: "[talosTabContent], ng-template[talosTabContent]", ngImport: i0 });
889
+ }
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabContentDirective, decorators: [{
891
+ type: Directive,
892
+ args: [{
893
+ selector: '[talosTabContent], ng-template[talosTabContent]'
894
+ }]
895
+ }] });
896
+
897
+ let nextTabUniqueId = 0;
898
+ /**
899
+ * An individual tab panel element to be placed inside `<talos-tabs>`.
900
+ */
901
+ class TalosTabComponent {
902
+ defaultUniqueId = `talos-tab-${nextTabUniqueId++}`;
903
+ /**
904
+ * Header label text for this tab.
905
+ */
906
+ label = input('', /* @ts-ignore */
907
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
908
+ /**
909
+ * Unique identifier for this tab. If omitted, an auto-generated id is assigned.
910
+ */
911
+ id = input('', /* @ts-ignore */
912
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
913
+ /**
914
+ * Optional icon component to display before the label text.
915
+ */
916
+ icon = input(null, /* @ts-ignore */
917
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
918
+ /**
919
+ * Optional badge count or status text rendered alongside the tab label.
920
+ */
921
+ badge = input(null, /* @ts-ignore */
922
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
923
+ /**
924
+ * Whether this tab is disabled and cannot be activated.
925
+ */
926
+ disabled = input(false, /* @ts-ignore */
927
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
928
+ /**
929
+ * Whether this tab displays an inline close action button.
930
+ */
931
+ closable = input(false, /* @ts-ignore */
932
+ ...(ngDevMode ? [{ debugName: "closable" }] : /* istanbul ignore next */ []));
933
+ /**
934
+ * Accessible description for screen readers (aria-label).
935
+ */
936
+ ariaLabel = input('', /* @ts-ignore */
937
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
938
+ /**
939
+ * Custom label template projected with `*talosTabLabel`.
940
+ */
941
+ customLabel = contentChild(TalosTabLabelDirective, /* @ts-ignore */
942
+ ...(ngDevMode ? [{ debugName: "customLabel" }] : /* istanbul ignore next */ []));
943
+ /**
944
+ * Lazy-loaded panel content projected with `*talosTabContent`.
945
+ */
946
+ lazyContent = contentChild(TalosTabContentDirective, /* @ts-ignore */
947
+ ...(ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []));
948
+ /**
949
+ * Internal selection state controlled by parent `<talos-tabs>`.
950
+ */
951
+ active = signal(false, /* @ts-ignore */
952
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
953
+ /**
954
+ * Whether this tab has been active at least once (used for lazy-loading retention).
955
+ */
956
+ hasBeenActive = signal(false, /* @ts-ignore */
957
+ ...(ngDevMode ? [{ debugName: "hasBeenActive" }] : /* istanbul ignore next */ []));
958
+ /**
959
+ * The effective unique key for this tab.
960
+ */
961
+ key = computed(() => {
962
+ const customId = this.id();
963
+ return customId !== '' && customId !== null && customId !== undefined
964
+ ? customId
965
+ : this.defaultUniqueId;
966
+ }, /* @ts-ignore */
967
+ ...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
968
+ /**
969
+ * The HTML element ID of the tab panel.
970
+ */
971
+ panelId = computed(() => `${this.key()}-panel`, /* @ts-ignore */
972
+ ...(ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []));
973
+ /**
974
+ * The HTML element ID of the tab header button.
975
+ */
976
+ headerId = computed(() => `${this.key()}-header`, /* @ts-ignore */
977
+ ...(ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []));
978
+ /**
979
+ * Sets active state and tracks lazy load retention.
980
+ */
981
+ setActive(isActive) {
982
+ this.active.set(isActive);
983
+ if (isActive) {
984
+ this.hasBeenActive.set(true);
985
+ }
986
+ }
987
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
988
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosTabComponent, isStandalone: true, selector: "talos-tab, [talosTab]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "tabpanel" }, properties: { "attr.id": "panelId()", "attr.aria-labelledby": "headerId()", "attr.tabindex": "active() ? 0 : -1", "attr.aria-hidden": "!active()", "class.talos-tab-panel--active": "active()", "hidden": "!active()" }, classAttribute: "talos-tab-panel" }, queries: [{ propertyName: "customLabel", first: true, predicate: TalosTabLabelDirective, descendants: true, isSignal: true }, { propertyName: "lazyContent", first: true, predicate: TalosTabContentDirective, descendants: true, isSignal: true }], ngImport: i0, template: "@if (lazyContent()) {\n @if (active() || hasBeenActive()) {\n <ng-container [ngTemplateOutlet]=\"lazyContent()!.templateRef\" />\n }\n} @else {\n <ng-content />\n}\n", styles: [":host{display:block;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit);outline:none}:host[hidden]{display:none!important}:host.talos-tab-panel--active{animation:talosTabFadeIn .2s cubic-bezier(.4,0,.2,1)}:host:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25));border-radius:var(--talos-radius-md, .375rem)}@keyframes talosTabFadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
989
+ }
990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabComponent, decorators: [{
991
+ type: Component,
992
+ args: [{ selector: 'talos-tab, [talosTab]', imports: [CommonModule], host: {
993
+ 'class': 'talos-tab-panel',
994
+ 'role': 'tabpanel',
995
+ '[attr.id]': 'panelId()',
996
+ '[attr.aria-labelledby]': 'headerId()',
997
+ '[attr.tabindex]': 'active() ? 0 : -1',
998
+ '[attr.aria-hidden]': '!active()',
999
+ '[class.talos-tab-panel--active]': 'active()',
1000
+ '[hidden]': '!active()'
1001
+ }, template: "@if (lazyContent()) {\n @if (active() || hasBeenActive()) {\n <ng-container [ngTemplateOutlet]=\"lazyContent()!.templateRef\" />\n }\n} @else {\n <ng-content />\n}\n", styles: [":host{display:block;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit);outline:none}:host[hidden]{display:none!important}:host.talos-tab-panel--active{animation:talosTabFadeIn .2s cubic-bezier(.4,0,.2,1)}:host:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25));border-radius:var(--talos-radius-md, .375rem)}@keyframes talosTabFadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}\n"] }]
1002
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], customLabel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TalosTabLabelDirective), { isSignal: true }] }], lazyContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TalosTabContentDirective), { isSignal: true }] }] } });
1003
+
1004
+ class TalosTabsComponent {
1005
+ /**
1006
+ * The index of the currently active tab (two-way bindable via `[(selectedIndex)]`).
1007
+ */
1008
+ selectedIndex = model(0, /* @ts-ignore */
1009
+ ...(ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []));
1010
+ /**
1011
+ * The unique ID of the currently active tab (two-way bindable via `[(activeId)]`).
1012
+ */
1013
+ activeId = model(null, /* @ts-ignore */
1014
+ ...(ngDevMode ? [{ debugName: "activeId" }] : /* istanbul ignore next */ []));
1015
+ /**
1016
+ * Visual styling variant of the tabs.
1017
+ * @default 'line'
1018
+ */
1019
+ variant = input('line', /* @ts-ignore */
1020
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1021
+ /**
1022
+ * Sizing scale of the tabs.
1023
+ * @default 'md'
1024
+ */
1025
+ size = input('md', /* @ts-ignore */
1026
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1027
+ /**
1028
+ * Layout orientation of the tab headers and panels.
1029
+ * @default 'horizontal'
1030
+ */
1031
+ orientation = input('horizontal', /* @ts-ignore */
1032
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
1033
+ /**
1034
+ * Horizontal alignment of tab headers within the container.
1035
+ * @default 'start'
1036
+ */
1037
+ align = input('start', /* @ts-ignore */
1038
+ ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
1039
+ /**
1040
+ * Optional data-driven items array. When provided, renders data-driven tabs.
1041
+ */
1042
+ items = input(null, /* @ts-ignore */
1043
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
1044
+ /**
1045
+ * Whether tabs show an inline close button by default.
1046
+ * @default false
1047
+ */
1048
+ closable = input(false, /* @ts-ignore */
1049
+ ...(ngDevMode ? [{ debugName: "closable" }] : /* istanbul ignore next */ []));
1050
+ /**
1051
+ * Whether to display an add tab button in the header bar.
1052
+ * @default false
1053
+ */
1054
+ addable = input(false, /* @ts-ignore */
1055
+ ...(ngDevMode ? [{ debugName: "addable" }] : /* istanbul ignore next */ []));
1056
+ /**
1057
+ * Whether to enable animated indicator transitions.
1058
+ * @default true
1059
+ */
1060
+ animated = input(true, /* @ts-ignore */
1061
+ ...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
1062
+ /**
1063
+ * Whether tabs stretch equally to fill the full width of the container.
1064
+ * @default false
1065
+ */
1066
+ stretched = input(false, /* @ts-ignore */
1067
+ ...(ngDevMode ? [{ debugName: "stretched" }] : /* istanbul ignore next */ []));
1068
+ /**
1069
+ * Accessible description for the tablist landmark.
1070
+ * @default 'Tabs navigation'
1071
+ */
1072
+ ariaLabel = input('Tabs navigation', /* @ts-ignore */
1073
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
1074
+ /**
1075
+ * Emitted when the selected tab changes.
1076
+ */
1077
+ tabChange = output();
1078
+ /**
1079
+ * Emitted when a tab's close button is clicked.
1080
+ */
1081
+ tabClose = output();
1082
+ /**
1083
+ * Emitted when the add tab button is clicked.
1084
+ */
1085
+ tabAdd = output();
1086
+ /**
1087
+ * Projected declarative child `<talos-tab>` instances.
1088
+ */
1089
+ projectedTabs = contentChildren(TalosTabComponent, /* @ts-ignore */
1090
+ ...(ngDevMode ? [{ debugName: "projectedTabs" }] : /* istanbul ignore next */ []));
1091
+ /**
1092
+ * DOM button elements for all rendered tab headers.
1093
+ */
1094
+ tabButtons = viewChildren('tabButton', /* @ts-ignore */
1095
+ ...(ngDevMode ? [{ debugName: "tabButtons" }] : /* istanbul ignore next */ []));
1096
+ /**
1097
+ * Container element for the tab navigation bar.
1098
+ */
1099
+ navContainer = viewChild('navContainer', /* @ts-ignore */
1100
+ ...(ngDevMode ? [{ debugName: "navContainer" }] : /* istanbul ignore next */ []));
1101
+ // Ink-bar measurement signals
1102
+ indicatorLeft = signal(0, /* @ts-ignore */
1103
+ ...(ngDevMode ? [{ debugName: "indicatorLeft" }] : /* istanbul ignore next */ []));
1104
+ indicatorTop = signal(0, /* @ts-ignore */
1105
+ ...(ngDevMode ? [{ debugName: "indicatorTop" }] : /* istanbul ignore next */ []));
1106
+ indicatorWidth = signal(0, /* @ts-ignore */
1107
+ ...(ngDevMode ? [{ debugName: "indicatorWidth" }] : /* istanbul ignore next */ []));
1108
+ indicatorHeight = signal(0, /* @ts-ignore */
1109
+ ...(ngDevMode ? [{ debugName: "indicatorHeight" }] : /* istanbul ignore next */ []));
1110
+ hasIndicator = signal(false, /* @ts-ignore */
1111
+ ...(ngDevMode ? [{ debugName: "hasIndicator" }] : /* istanbul ignore next */ []));
1112
+ /**
1113
+ * Normalized array of tab headers combining declarative children and data items.
1114
+ */
1115
+ tabHeaders = computed(() => {
1116
+ const dataItems = this.items();
1117
+ if (dataItems && dataItems.length > 0) {
1118
+ return dataItems.map(item => ({
1119
+ id: item.id,
1120
+ label: item.label,
1121
+ headerId: this.getDataHeaderId(item),
1122
+ panelId: this.getDataPanelId(item),
1123
+ icon: item.icon ?? null,
1124
+ badge: item.badge ?? null,
1125
+ disabled: item.disabled ?? false,
1126
+ closable: item.closable ?? false,
1127
+ customLabel: null,
1128
+ labelTemplate: item.labelTemplate ?? null,
1129
+ source: item
1130
+ }));
1131
+ }
1132
+ const childTabs = this.projectedTabs();
1133
+ return childTabs.map(tab => ({
1134
+ id: tab.key(),
1135
+ label: tab.label(),
1136
+ headerId: tab.headerId(),
1137
+ panelId: tab.panelId(),
1138
+ icon: tab.icon(),
1139
+ badge: tab.badge(),
1140
+ disabled: tab.disabled(),
1141
+ closable: tab.closable(),
1142
+ customLabel: tab.customLabel() ?? null,
1143
+ labelTemplate: null,
1144
+ source: tab
1145
+ }));
1146
+ }, /* @ts-ignore */
1147
+ ...(ngDevMode ? [{ debugName: "tabHeaders" }] : /* istanbul ignore next */ []));
1148
+ constructor() {
1149
+ // Sync projected children active states whenever selectedIndex or children change
1150
+ effect(() => {
1151
+ const idx = this.selectedIndex();
1152
+ const childTabs = this.projectedTabs();
1153
+ childTabs.forEach((tab, i) => {
1154
+ tab.setActive(i === idx);
1155
+ });
1156
+ });
1157
+ // Sync activeId with selectedIndex
1158
+ effect(() => {
1159
+ const headers = this.tabHeaders();
1160
+ const currentActiveId = this.activeId();
1161
+ if (currentActiveId !== null && currentActiveId !== undefined) {
1162
+ const foundIdx = headers.findIndex(h => h.id === currentActiveId);
1163
+ if (foundIdx !== -1 && foundIdx !== this.selectedIndex()) {
1164
+ this.selectedIndex.set(foundIdx);
1165
+ }
1166
+ }
1167
+ });
1168
+ // Update indicator whenever selected index or buttons update
1169
+ effect(() => {
1170
+ this.selectedIndex();
1171
+ this.tabButtons();
1172
+ this.orientation();
1173
+ this.variant();
1174
+ this.updateIndicator();
1175
+ });
1176
+ }
1177
+ ngAfterViewInit() {
1178
+ this.updateIndicator();
1179
+ }
1180
+ /**
1181
+ * Activates the tab at the given index.
1182
+ */
1183
+ selectTab(index, header) {
1184
+ if (header.disabled || this.selectedIndex() === index) {
1185
+ return;
1186
+ }
1187
+ this.selectedIndex.set(index);
1188
+ this.activeId.set(header.id);
1189
+ this.tabChange.emit({
1190
+ index,
1191
+ id: header.id,
1192
+ tab: header.source
1193
+ });
1194
+ this.updateIndicator();
1195
+ }
1196
+ /**
1197
+ * Checks whether an individual tab is closable.
1198
+ */
1199
+ isClosable(header) {
1200
+ return header.closable || this.closable();
1201
+ }
1202
+ /**
1203
+ * Closes the tab at the specified index.
1204
+ */
1205
+ closeTab(event, index, header) {
1206
+ event.preventDefault();
1207
+ event.stopPropagation();
1208
+ this.tabClose.emit({
1209
+ index,
1210
+ id: header.id,
1211
+ tab: header.source
1212
+ });
1213
+ // If closing the currently selected tab, switch to adjacent non-disabled tab
1214
+ const headers = this.tabHeaders();
1215
+ if (this.selectedIndex() === index && headers.length > 1) {
1216
+ let nextIndex = index;
1217
+ if (nextIndex >= headers.length - 1) {
1218
+ nextIndex = headers.length - 2;
1219
+ }
1220
+ // Pick first non-disabled tab if possible
1221
+ for (let i = nextIndex; i >= 0; i--) {
1222
+ if (!headers[i].disabled && i !== index) {
1223
+ this.selectTab(i, headers[i]);
1224
+ break;
1225
+ }
1226
+ }
1227
+ }
1228
+ }
1229
+ /**
1230
+ * Triggers the tab add event.
1231
+ */
1232
+ addTab() {
1233
+ this.tabAdd.emit();
1234
+ }
1235
+ /**
1236
+ * Keyboard accessibility handler following WAI-ARIA Tab guidelines.
1237
+ */
1238
+ onKeydown(event, currentIndex, currentHeader) {
1239
+ const headers = this.tabHeaders();
1240
+ const total = headers.length;
1241
+ if (total === 0) {
1242
+ return;
1243
+ }
1244
+ const isHorizontal = this.orientation() === 'horizontal';
1245
+ let targetIndex = -1;
1246
+ switch (event.key) {
1247
+ case 'ArrowRight':
1248
+ case 'ArrowDown':
1249
+ if ((isHorizontal && event.key === 'ArrowRight') || (!isHorizontal && event.key === 'ArrowDown')) {
1250
+ event.preventDefault();
1251
+ targetIndex = this.findNextAvailableTab(currentIndex, 1);
1252
+ }
1253
+ break;
1254
+ case 'ArrowLeft':
1255
+ case 'ArrowUp':
1256
+ if ((isHorizontal && event.key === 'ArrowLeft') || (!isHorizontal && event.key === 'ArrowUp')) {
1257
+ event.preventDefault();
1258
+ targetIndex = this.findNextAvailableTab(currentIndex, -1);
1259
+ }
1260
+ break;
1261
+ case 'Home':
1262
+ event.preventDefault();
1263
+ targetIndex = this.findNextAvailableTab(-1, 1);
1264
+ break;
1265
+ case 'End':
1266
+ event.preventDefault();
1267
+ targetIndex = this.findNextAvailableTab(total, -1);
1268
+ break;
1269
+ case 'Delete':
1270
+ if (this.isClosable(currentHeader)) {
1271
+ event.preventDefault();
1272
+ this.closeTab(event, currentIndex, currentHeader);
1273
+ }
1274
+ break;
1275
+ }
1276
+ if (targetIndex !== -1 && targetIndex !== currentIndex) {
1277
+ this.selectTab(targetIndex, headers[targetIndex]);
1278
+ this.focusTabButton(targetIndex);
1279
+ }
1280
+ }
1281
+ findNextAvailableTab(startIndex, direction) {
1282
+ const headers = this.tabHeaders();
1283
+ const total = headers.length;
1284
+ if (total === 0)
1285
+ return -1;
1286
+ let idx = startIndex;
1287
+ for (let count = 0; count < total; count++) {
1288
+ idx = (idx + direction + total) % total;
1289
+ if (!headers[idx].disabled) {
1290
+ return idx;
1291
+ }
1292
+ }
1293
+ return -1;
1294
+ }
1295
+ focusTabButton(index) {
1296
+ const buttons = this.tabButtons();
1297
+ if (buttons && buttons[index]) {
1298
+ buttons[index].nativeElement.focus();
1299
+ }
1300
+ }
1301
+ /**
1302
+ * Recalculates indicator offset and size for smooth animations.
1303
+ */
1304
+ updateIndicator() {
1305
+ const buttons = this.tabButtons();
1306
+ const currentIdx = this.selectedIndex();
1307
+ if (!buttons || !buttons[currentIdx]) {
1308
+ this.hasIndicator.set(false);
1309
+ return;
1310
+ }
1311
+ const activeEl = buttons[currentIdx].nativeElement;
1312
+ if (!activeEl) {
1313
+ this.hasIndicator.set(false);
1314
+ return;
1315
+ }
1316
+ this.indicatorLeft.set(activeEl.offsetLeft);
1317
+ this.indicatorTop.set(activeEl.offsetTop);
1318
+ this.indicatorWidth.set(activeEl.offsetWidth);
1319
+ this.indicatorHeight.set(activeEl.offsetHeight);
1320
+ this.hasIndicator.set(true);
1321
+ }
1322
+ /**
1323
+ * Unique panel id generator for data items.
1324
+ */
1325
+ getDataPanelId(item) {
1326
+ return `talos-tab-panel-${item.id}`;
1327
+ }
1328
+ /**
1329
+ * Unique header id generator for data items.
1330
+ */
1331
+ getDataHeaderId(item) {
1332
+ return `talos-tab-header-${item.id}`;
1333
+ }
1334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosTabsComponent, isStandalone: true, selector: "talos-tabs, [talosTabs]", inputs: { selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, activeId: { classPropertyName: "activeId", publicName: "activeId", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, addable: { classPropertyName: "addable", publicName: "addable", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, stretched: { classPropertyName: "stretched", publicName: "stretched", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", activeId: "activeIdChange", tabChange: "tabChange", tabClose: "tabClose", tabAdd: "tabAdd" }, host: { properties: { "class.talos-tabs--horizontal": "orientation() === \"horizontal\"", "class.talos-tabs--vertical": "orientation() === \"vertical\"", "class.talos-tabs--line": "variant() === \"line\"", "class.talos-tabs--pills": "variant() === \"pills\"", "class.talos-tabs--card": "variant() === \"card\"", "class.talos-tabs--segmented": "variant() === \"segmented\"", "class.talos-tabs--subtle": "variant() === \"subtle\"", "class.talos-tabs--xs": "size() === \"xs\"", "class.talos-tabs--sm": "size() === \"sm\"", "class.talos-tabs--md": "size() === \"md\"", "class.talos-tabs--lg": "size() === \"lg\"", "class.talos-tabs--align-center": "align() === \"center\"", "class.talos-tabs--align-end": "align() === \"end\"", "class.talos-tabs--stretched": "stretched() || align() === \"stretch\"", "class.talos-tabs--animated": "animated()" }, classAttribute: "talos-tabs" }, queries: [{ propertyName: "projectedTabs", predicate: TalosTabComponent, isSignal: true }], viewQueries: [{ propertyName: "tabButtons", predicate: ["tabButton"], descendants: true, isSignal: true }, { propertyName: "navContainer", first: true, predicate: ["navContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"talos-tabs__header\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <div class=\"talos-tabs__nav\" #navContainer>\n @for (tab of tabHeaders(); track tab.id; let i = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"talos-tabs__tab\"\n role=\"tab\"\n [id]=\"tab.headerId\"\n [attr.aria-controls]=\"tab.panelId\"\n [attr.aria-selected]=\"selectedIndex() === i\"\n [attr.aria-disabled]=\"tab.disabled ? 'true' : null\"\n [attr.tabindex]=\"selectedIndex() === i ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n [class.talos-tabs__tab--active]=\"selectedIndex() === i\"\n [class.talos-tabs__tab--disabled]=\"tab.disabled\"\n (click)=\"selectTab(i, tab)\"\n (keydown)=\"onKeydown($event, i, tab)\"\n >\n <!-- Icon -->\n @if (tab.icon) {\n <span class=\"talos-tabs__tab-icon\" aria-hidden=\"true\">\n <ng-container [ngComponentOutlet]=\"tab.icon\" />\n </span>\n }\n\n <!-- Custom Label Template or Text -->\n @if (tab.customLabel) {\n <span class=\"talos-tabs__tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.customLabel.templateRef\" />\n </span>\n } @else if (tab.labelTemplate) {\n <span class=\"talos-tabs__tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate\" />\n </span>\n } @else {\n <span class=\"talos-tabs__tab-label\">{{ tab.label }}</span>\n }\n\n <!-- Badge -->\n @if (tab.badge !== undefined && tab.badge !== null && tab.badge !== '') {\n <span class=\"talos-tabs__badge\" [class.talos-tabs__badge--active]=\"selectedIndex() === i\">\n {{ tab.badge }}\n </span>\n }\n\n <!-- Close Button -->\n @if (isClosable(tab)) {\n <span\n role=\"button\"\n class=\"talos-tabs__close\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Close ' + tab.label + ' tab'\"\n (click)=\"closeTab($event, i, tab)\"\n (keydown.enter)=\"closeTab($event, i, tab)\"\n (keydown.space)=\"closeTab($event, i, tab)\"\n >\n <svg lucideX [size]=\"12\"></svg>\n </span>\n }\n </button>\n }\n\n <!-- Sliding Ink-Bar Indicator (for line and segmented variants) -->\n @if (hasIndicator()) {\n @if (variant() === 'line') {\n @if (orientation() === 'horizontal') {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--line-h\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></div>\n } @else {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--line-v\"\n [style.top.px]=\"indicatorTop()\"\n [style.height.px]=\"indicatorHeight()\"\n ></div>\n }\n } @else if (variant() === 'segmented') {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--segmented\"\n [style.left.px]=\"indicatorLeft()\"\n [style.top.px]=\"indicatorTop()\"\n [style.width.px]=\"indicatorWidth()\"\n [style.height.px]=\"indicatorHeight()\"\n ></div>\n }\n }\n\n <!-- Add Tab Button -->\n @if (addable()) {\n <button\n type=\"button\"\n class=\"talos-tabs__add\"\n aria-label=\"Add new tab\"\n (click)=\"addTab()\"\n >\n <svg lucidePlus [size]=\"14\"></svg>\n </button>\n }\n </div>\n</div>\n\n<!-- Tab Panels Container -->\n<div class=\"talos-tabs__content\">\n @if (items() && items()!.length > 0) {\n <!-- Data-driven Panels -->\n @for (item of items()!; track item.id; let i = $index) {\n <div\n class=\"talos-tab-panel\"\n role=\"tabpanel\"\n [id]=\"getDataPanelId(item)\"\n [attr.aria-labelledby]=\"getDataHeaderId(item)\"\n [hidden]=\"selectedIndex() !== i\"\n [class.talos-tab-panel--active]=\"selectedIndex() === i\"\n [attr.tabindex]=\"selectedIndex() === i ? 0 : -1\"\n >\n @if (selectedIndex() === i) {\n @if (item.template) {\n <ng-container [ngTemplateOutlet]=\"item.template\" />\n } @else if (item.content) {\n <div class=\"talos-tabs__data-content\">{{ item.content }}</div>\n }\n }\n </div>\n }\n } @else {\n <!-- Declarative Projected Panels (<talos-tab>) -->\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}:host.talos-tabs--horizontal{flex-direction:column}:host.talos-tabs--horizontal .talos-tabs__header{width:100%}:host.talos-tabs--horizontal .talos-tabs__nav{flex-direction:row;align-items:center}:host.talos-tabs--vertical{flex-direction:row;gap:1.5rem}:host.talos-tabs--vertical .talos-tabs__header{flex-shrink:0;min-width:180px;max-width:240px;align-items:stretch}:host.talos-tabs--vertical .talos-tabs__nav{flex-direction:column;align-items:stretch;width:100%;gap:.25rem}:host.talos-tabs--vertical .talos-tabs__tab{justify-content:flex-start!important;text-align:left;width:100%;padding-left:.875rem;padding-right:.875rem}:host.talos-tabs--vertical .talos-tabs__tab .talos-tabs__tab-label{flex:1 1 auto;justify-content:flex-start;text-align:left}:host.talos-tabs--vertical .talos-tabs__tab .talos-tabs__badge{margin-left:auto}:host.talos-tabs--vertical .talos-tabs__content{flex:1;min-width:0;padding-top:0}.talos-tabs__header{position:relative;display:flex;align-items:center;box-sizing:border-box}.talos-tabs__nav{position:relative;display:flex;box-sizing:border-box;list-style:none;margin:0;padding:0}:host(.talos-tabs--horizontal.talos-tabs--align-center) .talos-tabs__header{justify-content:center}:host(.talos-tabs--horizontal.talos-tabs--align-end) .talos-tabs__header{justify-content:flex-end}:host(.talos-tabs--horizontal.talos-tabs--stretched) .talos-tabs__nav{width:100%}:host(.talos-tabs--horizontal.talos-tabs--stretched) .talos-tabs__tab{flex:1 1 0;justify-content:center}.talos-tabs__tab{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;background:transparent;border:none;outline:none;cursor:pointer;white-space:nowrap;font-family:inherit;font-weight:var(--talos-font-weight-medium, 500);color:var(--talos-text-muted, #64748b);-webkit-user-select:none;user-select:none;z-index:1;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1)}.talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){color:var(--talos-text-primary, #0f172a)}.talos-tabs__tab:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25));border-radius:var(--talos-radius-md, .375rem);z-index:2}.talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);font-weight:var(--talos-font-weight-semibold, 600)}.talos-tabs__tab.talos-tabs__tab--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.talos-tabs__tab-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.talos-tabs__tab-label{display:inline-flex;align-items:center}.talos-tabs__badge{display:inline-flex;align-items:center;justify-content:center;font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);line-height:1;padding:.125rem .375rem;border-radius:var(--talos-radius-full, 9999px);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .05));color:var(--talos-text-muted, #64748b);transition:background-color .2s ease,color .2s ease}.talos-tabs__badge.talos-tabs__badge--active{background-color:var(--talos-primary-light, rgba(37, 99, 235, .1));color:var(--talos-primary-color, #2563eb)}.talos-tabs__close{display:inline-flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;margin-left:.125rem;margin-right:-.25rem;border-radius:var(--talos-radius-sm, .25rem);color:var(--talos-text-muted, #64748b);cursor:pointer;transition:background-color .2s ease,color .2s ease}.talos-tabs__close:hover{background-color:#00000014;color:var(--talos-error-color, #ef4444)}.talos-tabs__close:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 2px rgba(37, 99, 235, .25))}.talos-tabs__add{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px dashed var(--talos-border-color, #cbd5e1);color:var(--talos-text-muted, #64748b);cursor:pointer;border-radius:var(--talos-radius-md, .375rem);padding:.375rem;margin-left:.375rem;transition:color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1)}.talos-tabs__add:hover{color:var(--talos-primary-color, #2563eb);border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}.talos-tabs__add:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25))}.talos-tabs__indicator{position:absolute;pointer-events:none}.talos-tabs__indicator--line-h{bottom:0;height:2px;background-color:var(--talos-primary-color, #2563eb);border-radius:2px 2px 0 0;z-index:2;transition:left .22s cubic-bezier(.4,0,.2,1),width .22s cubic-bezier(.4,0,.2,1)}.talos-tabs__indicator--line-v{right:0;width:2px;background-color:var(--talos-primary-color, #2563eb);border-radius:2px 0 0 2px;z-index:2;transition:top .22s cubic-bezier(.4,0,.2,1),height .22s cubic-bezier(.4,0,.2,1)}.talos-tabs__indicator--segmented{background-color:var(--talos-card-bg, #ffffff);border-radius:var(--talos-radius-md, .375rem);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .06));z-index:0;transition:left .22s cubic-bezier(.4,0,.2,1),top .22s cubic-bezier(.4,0,.2,1),width .22s cubic-bezier(.4,0,.2,1),height .22s cubic-bezier(.4,0,.2,1)}:host(.talos-tabs--xs) .talos-tabs__tab{font-size:var(--talos-font-size-xs, .75rem);padding:.25rem .625rem;min-height:var(--talos-height-xs, 1.625rem)}:host(.talos-tabs--sm) .talos-tabs__tab{font-size:var(--talos-font-size-sm, .8125rem);padding:.375rem .875rem;min-height:var(--talos-height-sm, 2rem)}:host(.talos-tabs--md) .talos-tabs__tab{font-size:var(--talos-font-size-base, .875rem);padding:.5rem 1.125rem;min-height:var(--talos-height-md, 2.25rem)}:host(.talos-tabs--lg) .talos-tabs__tab{font-size:var(--talos-font-size-lg, 1rem);padding:.625rem 1.375rem;min-height:var(--talos-height-lg, 2.625rem)}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__header{border-bottom:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab{background:transparent;border-radius:var(--talos-radius-md, .375rem) var(--talos-radius-md, .375rem) 0 0}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);background:transparent}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__header{border-right:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab{background:transparent;border-radius:var(--talos-radius-md, .375rem) 0 0 var(--talos-radius-md, .375rem)}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-light, rgba(37, 99, 235, .05))}:host(.talos-tabs--pills) .talos-tabs__nav{gap:.375rem}:host(.talos-tabs--pills) .talos-tabs__tab{border-radius:var(--talos-radius-full, 9999px)}:host(.talos-tabs--pills) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .05))}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-primary-color, #2563eb);color:var(--talos-text-inverse, #ffffff)}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__badge{background-color:#ffffff40;color:#fff}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__close{color:#fffc}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__close:hover{background-color:#fff3;color:#fff}:host(.talos-tabs--pills).talos-tabs--vertical .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__header{border-bottom:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__nav{gap:.25rem;margin-bottom:-1px}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab{border:1px solid transparent;border-bottom:1px solid var(--talos-border-color, #e2e8f0);border-top-left-radius:var(--talos-radius-md, .375rem);border-top-right-radius:var(--talos-radius-md, .375rem);background-color:var(--talos-card-tab-inactive-bg, rgba(0, 0, 0, .03));color:var(--talos-text-muted, #64748b)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-card-tab-hover-bg, rgba(0, 0, 0, .06));color:var(--talos-text-primary, #0f172a)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));border-color:var(--talos-border-color, #e2e8f0);border-bottom-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));color:var(--talos-primary-color, #2563eb)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__header{border-right:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__nav{gap:.25rem;margin-right:-1px}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab{border:1px solid transparent;border-right:1px solid var(--talos-border-color, #e2e8f0);border-top-left-radius:var(--talos-radius-md, .375rem);border-bottom-left-radius:var(--talos-radius-md, .375rem);background-color:var(--talos-card-tab-inactive-bg, rgba(0, 0, 0, .03));color:var(--talos-text-muted, #64748b)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-card-tab-hover-bg, rgba(0, 0, 0, .06));color:var(--talos-text-primary, #0f172a)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));border-color:var(--talos-border-color, #e2e8f0);border-right-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));color:var(--talos-primary-color, #2563eb)}:host(.talos-tabs--segmented) .talos-tabs__header{background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04));border-radius:var(--talos-radius-lg, .5rem);padding:3px;display:inline-flex;border:1px solid var(--talos-border-subtle, #e2e8f0)}:host(.talos-tabs--segmented) .talos-tabs__nav{position:relative;width:100%}:host(.talos-tabs--segmented) .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem);transition:color .2s ease}:host(.talos-tabs--segmented) .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-card-bg, #ffffff);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}:host(.talos-tabs--segmented).talos-tabs--vertical .talos-tabs__header{display:flex;flex-direction:column}:host(.talos-tabs--subtle) .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem)}:host(.talos-tabs--subtle) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--subtle) .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-primary-light, rgba(37, 99, 235, .06));color:var(--talos-primary-color, #2563eb)}.talos-tabs__content{box-sizing:border-box;width:100%;padding-top:1rem}:host(.talos-tabs--vertical) .talos-tabs__content{padding-top:0}.talos-tabs__data-content{line-height:var(--talos-line-height-normal, 1.5);color:var(--talos-text-secondary, #334155)}:host-context([data-theme=dark]),:host-context([data-mode=dark]),:host-context(.dark),:host-context(.dark-theme){color:var(--talos-text-color, var(--talos-text-primary, #f8fafc))}:host-context([data-theme=dark]) .talos-tabs__tab,:host-context([data-mode=dark]) .talos-tabs__tab,:host-context(.dark) .talos-tabs__tab,:host-context(.dark-theme) .talos-tabs__tab{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context([data-mode=dark]) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark-theme) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]) .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]) .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark) .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme) .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]) .talos-tabs__badge,:host-context([data-mode=dark]) .talos-tabs__badge,:host-context(.dark) .talos-tabs__badge,:host-context(.dark-theme) .talos-tabs__badge{background-color:#ffffff14;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__badge.talos-tabs__badge--active,:host-context([data-mode=dark]) .talos-tabs__badge.talos-tabs__badge--active,:host-context(.dark) .talos-tabs__badge.talos-tabs__badge--active,:host-context(.dark-theme) .talos-tabs__badge.talos-tabs__badge--active{background-color:#3b82f633;color:#93c5fd}:host-context([data-theme=dark]) .talos-tabs__close,:host-context([data-mode=dark]) .talos-tabs__close,:host-context(.dark) .talos-tabs__close,:host-context(.dark-theme) .talos-tabs__close{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__close:hover,:host-context([data-mode=dark]) .talos-tabs__close:hover,:host-context(.dark) .talos-tabs__close:hover,:host-context(.dark-theme) .talos-tabs__close:hover{background-color:#ffffff1f;color:var(--talos-error-color, #f87171)}:host-context([data-theme=dark]) .talos-tabs__add,:host-context([data-mode=dark]) .talos-tabs__add,:host-context(.dark) .talos-tabs__add,:host-context(.dark-theme) .talos-tabs__add{border-color:#ffffff26;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__add:hover,:host-context([data-mode=dark]) .talos-tabs__add:hover,:host-context(.dark) .talos-tabs__add:hover,:host-context(.dark-theme) .talos-tabs__add:hover{color:var(--talos-primary-color, #3b82f6);border-color:var(--talos-primary-color, #3b82f6);background-color:#3b82f61f}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header{border-bottom-color:var(--talos-border-color, rgba(255, 255, 255, .1))}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab{border-color:transparent;border-bottom-color:var(--talos-border-color, rgba(255, 255, 255, .1));background-color:#ffffff09;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff16;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));border-color:var(--talos-border-color, rgba(255, 255, 255, .12));border-bottom-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__header{border-right-color:var(--talos-border-color, rgba(255, 255, 255, .1))}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab{border-color:transparent;border-right-color:var(--talos-border-color, rgba(255, 255, 255, .1));background-color:#ffffff09;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff16;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));border-color:var(--talos-border-color, rgba(255, 255, 255, .12));border-right-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__header,:host-context(.dark).talos-tabs--segmented .talos-tabs__header,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__header{background-color:#ffffff0f;border-color:#ffffff14}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context(.dark).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__indicator--segmented{background-color:var(--talos-card-bg, #1e293b);box-shadow:0 1px 3px #0000004d}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab,:host-context(.dark).talos-tabs--segmented .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-text-primary, #f8fafc);background-color:var(--talos-card-bg, #1e293b)}:host-context([data-theme=dark]).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context([data-mode=dark]).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark-theme).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){background-color:#ffffff14;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active{background-color:#3b82f629;color:var(--talos-primary-color, #60a5fa)}:host-context([data-theme=dark]).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff0d;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff14;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]) .talos-tabs__data-content,:host-context([data-mode=dark]) .talos-tabs__data-content,:host-context(.dark) .talos-tabs__data-content,:host-context(.dark-theme) .talos-tabs__data-content{color:var(--talos-text-secondary, #cbd5e1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }, { kind: "component", type: LucidePlus, selector: "svg[lucidePlus]" }] });
1336
+ }
1337
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsComponent, decorators: [{
1338
+ type: Component,
1339
+ args: [{ selector: 'talos-tabs, [talosTabs]', imports: [
1340
+ CommonModule,
1341
+ NgTemplateOutlet,
1342
+ NgComponentOutlet,
1343
+ LucideX,
1344
+ LucidePlus
1345
+ ], host: {
1346
+ 'class': 'talos-tabs',
1347
+ '[class.talos-tabs--horizontal]': 'orientation() === "horizontal"',
1348
+ '[class.talos-tabs--vertical]': 'orientation() === "vertical"',
1349
+ '[class.talos-tabs--line]': 'variant() === "line"',
1350
+ '[class.talos-tabs--pills]': 'variant() === "pills"',
1351
+ '[class.talos-tabs--card]': 'variant() === "card"',
1352
+ '[class.talos-tabs--segmented]': 'variant() === "segmented"',
1353
+ '[class.talos-tabs--subtle]': 'variant() === "subtle"',
1354
+ '[class.talos-tabs--xs]': 'size() === "xs"',
1355
+ '[class.talos-tabs--sm]': 'size() === "sm"',
1356
+ '[class.talos-tabs--md]': 'size() === "md"',
1357
+ '[class.talos-tabs--lg]': 'size() === "lg"',
1358
+ '[class.talos-tabs--align-center]': 'align() === "center"',
1359
+ '[class.talos-tabs--align-end]': 'align() === "end"',
1360
+ '[class.talos-tabs--stretched]': 'stretched() || align() === "stretch"',
1361
+ '[class.talos-tabs--animated]': 'animated()'
1362
+ }, template: "<div\n class=\"talos-tabs__header\"\n role=\"tablist\"\n [attr.aria-orientation]=\"orientation()\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <div class=\"talos-tabs__nav\" #navContainer>\n @for (tab of tabHeaders(); track tab.id; let i = $index) {\n <button\n #tabButton\n type=\"button\"\n class=\"talos-tabs__tab\"\n role=\"tab\"\n [id]=\"tab.headerId\"\n [attr.aria-controls]=\"tab.panelId\"\n [attr.aria-selected]=\"selectedIndex() === i\"\n [attr.aria-disabled]=\"tab.disabled ? 'true' : null\"\n [attr.tabindex]=\"selectedIndex() === i ? 0 : -1\"\n [disabled]=\"tab.disabled\"\n [class.talos-tabs__tab--active]=\"selectedIndex() === i\"\n [class.talos-tabs__tab--disabled]=\"tab.disabled\"\n (click)=\"selectTab(i, tab)\"\n (keydown)=\"onKeydown($event, i, tab)\"\n >\n <!-- Icon -->\n @if (tab.icon) {\n <span class=\"talos-tabs__tab-icon\" aria-hidden=\"true\">\n <ng-container [ngComponentOutlet]=\"tab.icon\" />\n </span>\n }\n\n <!-- Custom Label Template or Text -->\n @if (tab.customLabel) {\n <span class=\"talos-tabs__tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.customLabel.templateRef\" />\n </span>\n } @else if (tab.labelTemplate) {\n <span class=\"talos-tabs__tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate\" />\n </span>\n } @else {\n <span class=\"talos-tabs__tab-label\">{{ tab.label }}</span>\n }\n\n <!-- Badge -->\n @if (tab.badge !== undefined && tab.badge !== null && tab.badge !== '') {\n <span class=\"talos-tabs__badge\" [class.talos-tabs__badge--active]=\"selectedIndex() === i\">\n {{ tab.badge }}\n </span>\n }\n\n <!-- Close Button -->\n @if (isClosable(tab)) {\n <span\n role=\"button\"\n class=\"talos-tabs__close\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Close ' + tab.label + ' tab'\"\n (click)=\"closeTab($event, i, tab)\"\n (keydown.enter)=\"closeTab($event, i, tab)\"\n (keydown.space)=\"closeTab($event, i, tab)\"\n >\n <svg lucideX [size]=\"12\"></svg>\n </span>\n }\n </button>\n }\n\n <!-- Sliding Ink-Bar Indicator (for line and segmented variants) -->\n @if (hasIndicator()) {\n @if (variant() === 'line') {\n @if (orientation() === 'horizontal') {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--line-h\"\n [style.left.px]=\"indicatorLeft()\"\n [style.width.px]=\"indicatorWidth()\"\n ></div>\n } @else {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--line-v\"\n [style.top.px]=\"indicatorTop()\"\n [style.height.px]=\"indicatorHeight()\"\n ></div>\n }\n } @else if (variant() === 'segmented') {\n <div\n class=\"talos-tabs__indicator talos-tabs__indicator--segmented\"\n [style.left.px]=\"indicatorLeft()\"\n [style.top.px]=\"indicatorTop()\"\n [style.width.px]=\"indicatorWidth()\"\n [style.height.px]=\"indicatorHeight()\"\n ></div>\n }\n }\n\n <!-- Add Tab Button -->\n @if (addable()) {\n <button\n type=\"button\"\n class=\"talos-tabs__add\"\n aria-label=\"Add new tab\"\n (click)=\"addTab()\"\n >\n <svg lucidePlus [size]=\"14\"></svg>\n </button>\n }\n </div>\n</div>\n\n<!-- Tab Panels Container -->\n<div class=\"talos-tabs__content\">\n @if (items() && items()!.length > 0) {\n <!-- Data-driven Panels -->\n @for (item of items()!; track item.id; let i = $index) {\n <div\n class=\"talos-tab-panel\"\n role=\"tabpanel\"\n [id]=\"getDataPanelId(item)\"\n [attr.aria-labelledby]=\"getDataHeaderId(item)\"\n [hidden]=\"selectedIndex() !== i\"\n [class.talos-tab-panel--active]=\"selectedIndex() === i\"\n [attr.tabindex]=\"selectedIndex() === i ? 0 : -1\"\n >\n @if (selectedIndex() === i) {\n @if (item.template) {\n <ng-container [ngTemplateOutlet]=\"item.template\" />\n } @else if (item.content) {\n <div class=\"talos-tabs__data-content\">{{ item.content }}</div>\n }\n }\n </div>\n }\n } @else {\n <!-- Declarative Projected Panels (<talos-tab>) -->\n <ng-content />\n }\n</div>\n", styles: [":host{display:flex;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}:host.talos-tabs--horizontal{flex-direction:column}:host.talos-tabs--horizontal .talos-tabs__header{width:100%}:host.talos-tabs--horizontal .talos-tabs__nav{flex-direction:row;align-items:center}:host.talos-tabs--vertical{flex-direction:row;gap:1.5rem}:host.talos-tabs--vertical .talos-tabs__header{flex-shrink:0;min-width:180px;max-width:240px;align-items:stretch}:host.talos-tabs--vertical .talos-tabs__nav{flex-direction:column;align-items:stretch;width:100%;gap:.25rem}:host.talos-tabs--vertical .talos-tabs__tab{justify-content:flex-start!important;text-align:left;width:100%;padding-left:.875rem;padding-right:.875rem}:host.talos-tabs--vertical .talos-tabs__tab .talos-tabs__tab-label{flex:1 1 auto;justify-content:flex-start;text-align:left}:host.talos-tabs--vertical .talos-tabs__tab .talos-tabs__badge{margin-left:auto}:host.talos-tabs--vertical .talos-tabs__content{flex:1;min-width:0;padding-top:0}.talos-tabs__header{position:relative;display:flex;align-items:center;box-sizing:border-box}.talos-tabs__nav{position:relative;display:flex;box-sizing:border-box;list-style:none;margin:0;padding:0}:host(.talos-tabs--horizontal.talos-tabs--align-center) .talos-tabs__header{justify-content:center}:host(.talos-tabs--horizontal.talos-tabs--align-end) .talos-tabs__header{justify-content:flex-end}:host(.talos-tabs--horizontal.talos-tabs--stretched) .talos-tabs__nav{width:100%}:host(.talos-tabs--horizontal.talos-tabs--stretched) .talos-tabs__tab{flex:1 1 0;justify-content:center}.talos-tabs__tab{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;background:transparent;border:none;outline:none;cursor:pointer;white-space:nowrap;font-family:inherit;font-weight:var(--talos-font-weight-medium, 500);color:var(--talos-text-muted, #64748b);-webkit-user-select:none;user-select:none;z-index:1;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1)}.talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){color:var(--talos-text-primary, #0f172a)}.talos-tabs__tab:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25));border-radius:var(--talos-radius-md, .375rem);z-index:2}.talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);font-weight:var(--talos-font-weight-semibold, 600)}.talos-tabs__tab.talos-tabs__tab--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.talos-tabs__tab-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.talos-tabs__tab-label{display:inline-flex;align-items:center}.talos-tabs__badge{display:inline-flex;align-items:center;justify-content:center;font-size:var(--talos-font-size-2xs, .6875rem);font-weight:var(--talos-font-weight-semibold, 600);line-height:1;padding:.125rem .375rem;border-radius:var(--talos-radius-full, 9999px);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .05));color:var(--talos-text-muted, #64748b);transition:background-color .2s ease,color .2s ease}.talos-tabs__badge.talos-tabs__badge--active{background-color:var(--talos-primary-light, rgba(37, 99, 235, .1));color:var(--talos-primary-color, #2563eb)}.talos-tabs__close{display:inline-flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;margin-left:.125rem;margin-right:-.25rem;border-radius:var(--talos-radius-sm, .25rem);color:var(--talos-text-muted, #64748b);cursor:pointer;transition:background-color .2s ease,color .2s ease}.talos-tabs__close:hover{background-color:#00000014;color:var(--talos-error-color, #ef4444)}.talos-tabs__close:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 2px rgba(37, 99, 235, .25))}.talos-tabs__add{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px dashed var(--talos-border-color, #cbd5e1);color:var(--talos-text-muted, #64748b);cursor:pointer;border-radius:var(--talos-radius-md, .375rem);padding:.375rem;margin-left:.375rem;transition:color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1)}.talos-tabs__add:hover{color:var(--talos-primary-color, #2563eb);border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}.talos-tabs__add:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25))}.talos-tabs__indicator{position:absolute;pointer-events:none}.talos-tabs__indicator--line-h{bottom:0;height:2px;background-color:var(--talos-primary-color, #2563eb);border-radius:2px 2px 0 0;z-index:2;transition:left .22s cubic-bezier(.4,0,.2,1),width .22s cubic-bezier(.4,0,.2,1)}.talos-tabs__indicator--line-v{right:0;width:2px;background-color:var(--talos-primary-color, #2563eb);border-radius:2px 0 0 2px;z-index:2;transition:top .22s cubic-bezier(.4,0,.2,1),height .22s cubic-bezier(.4,0,.2,1)}.talos-tabs__indicator--segmented{background-color:var(--talos-card-bg, #ffffff);border-radius:var(--talos-radius-md, .375rem);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .06));z-index:0;transition:left .22s cubic-bezier(.4,0,.2,1),top .22s cubic-bezier(.4,0,.2,1),width .22s cubic-bezier(.4,0,.2,1),height .22s cubic-bezier(.4,0,.2,1)}:host(.talos-tabs--xs) .talos-tabs__tab{font-size:var(--talos-font-size-xs, .75rem);padding:.25rem .625rem;min-height:var(--talos-height-xs, 1.625rem)}:host(.talos-tabs--sm) .talos-tabs__tab{font-size:var(--talos-font-size-sm, .8125rem);padding:.375rem .875rem;min-height:var(--talos-height-sm, 2rem)}:host(.talos-tabs--md) .talos-tabs__tab{font-size:var(--talos-font-size-base, .875rem);padding:.5rem 1.125rem;min-height:var(--talos-height-md, 2.25rem)}:host(.talos-tabs--lg) .talos-tabs__tab{font-size:var(--talos-font-size-lg, 1rem);padding:.625rem 1.375rem;min-height:var(--talos-height-lg, 2.625rem)}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__header{border-bottom:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab{background:transparent;border-radius:var(--talos-radius-md, .375rem) var(--talos-radius-md, .375rem) 0 0}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--line).talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);background:transparent}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__header{border-right:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab{background:transparent;border-radius:var(--talos-radius-md, .375rem) 0 0 var(--talos-radius-md, .375rem)}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--line).talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-light, rgba(37, 99, 235, .05))}:host(.talos-tabs--pills) .talos-tabs__nav{gap:.375rem}:host(.talos-tabs--pills) .talos-tabs__tab{border-radius:var(--talos-radius-full, 9999px)}:host(.talos-tabs--pills) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .05))}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-primary-color, #2563eb);color:var(--talos-text-inverse, #ffffff)}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__badge{background-color:#ffffff40;color:#fff}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__close{color:#fffc}:host(.talos-tabs--pills) .talos-tabs__tab.talos-tabs__tab--active .talos-tabs__close:hover{background-color:#fff3;color:#fff}:host(.talos-tabs--pills).talos-tabs--vertical .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__header{border-bottom:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__nav{gap:.25rem;margin-bottom:-1px}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab{border:1px solid transparent;border-bottom:1px solid var(--talos-border-color, #e2e8f0);border-top-left-radius:var(--talos-radius-md, .375rem);border-top-right-radius:var(--talos-radius-md, .375rem);background-color:var(--talos-card-tab-inactive-bg, rgba(0, 0, 0, .03));color:var(--talos-text-muted, #64748b)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-card-tab-hover-bg, rgba(0, 0, 0, .06));color:var(--talos-text-primary, #0f172a)}:host(.talos-tabs--card).talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));border-color:var(--talos-border-color, #e2e8f0);border-bottom-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));color:var(--talos-primary-color, #2563eb)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__header{border-right:1px solid var(--talos-border-color, #e2e8f0)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__nav{gap:.25rem;margin-right:-1px}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab{border:1px solid transparent;border-right:1px solid var(--talos-border-color, #e2e8f0);border-top-left-radius:var(--talos-radius-md, .375rem);border-bottom-left-radius:var(--talos-radius-md, .375rem);background-color:var(--talos-card-tab-inactive-bg, rgba(0, 0, 0, .03));color:var(--talos-text-muted, #64748b)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:var(--talos-card-tab-hover-bg, rgba(0, 0, 0, .06));color:var(--talos-text-primary, #0f172a)}:host(.talos-tabs--card).talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));border-color:var(--talos-border-color, #e2e8f0);border-right-color:var(--talos-card-bg, var(--talos-bg-surface, #ffffff));color:var(--talos-primary-color, #2563eb)}:host(.talos-tabs--segmented) .talos-tabs__header{background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04));border-radius:var(--talos-radius-lg, .5rem);padding:3px;display:inline-flex;border:1px solid var(--talos-border-subtle, #e2e8f0)}:host(.talos-tabs--segmented) .talos-tabs__nav{position:relative;width:100%}:host(.talos-tabs--segmented) .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem);transition:color .2s ease}:host(.talos-tabs--segmented) .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-card-bg, #ffffff);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .05))}:host(.talos-tabs--segmented).talos-tabs--vertical .talos-tabs__header{display:flex;flex-direction:column}:host(.talos-tabs--subtle) .talos-tabs__tab{border-radius:var(--talos-radius-md, .375rem)}:host(.talos-tabs--subtle) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}:host(.talos-tabs--subtle) .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-primary-light, rgba(37, 99, 235, .06));color:var(--talos-primary-color, #2563eb)}.talos-tabs__content{box-sizing:border-box;width:100%;padding-top:1rem}:host(.talos-tabs--vertical) .talos-tabs__content{padding-top:0}.talos-tabs__data-content{line-height:var(--talos-line-height-normal, 1.5);color:var(--talos-text-secondary, #334155)}:host-context([data-theme=dark]),:host-context([data-mode=dark]),:host-context(.dark),:host-context(.dark-theme){color:var(--talos-text-color, var(--talos-text-primary, #f8fafc))}:host-context([data-theme=dark]) .talos-tabs__tab,:host-context([data-mode=dark]) .talos-tabs__tab,:host-context(.dark) .talos-tabs__tab,:host-context(.dark-theme) .talos-tabs__tab{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context([data-mode=dark]) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark-theme) .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]) .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]) .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark) .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme) .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]) .talos-tabs__badge,:host-context([data-mode=dark]) .talos-tabs__badge,:host-context(.dark) .talos-tabs__badge,:host-context(.dark-theme) .talos-tabs__badge{background-color:#ffffff14;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__badge.talos-tabs__badge--active,:host-context([data-mode=dark]) .talos-tabs__badge.talos-tabs__badge--active,:host-context(.dark) .talos-tabs__badge.talos-tabs__badge--active,:host-context(.dark-theme) .talos-tabs__badge.talos-tabs__badge--active{background-color:#3b82f633;color:#93c5fd}:host-context([data-theme=dark]) .talos-tabs__close,:host-context([data-mode=dark]) .talos-tabs__close,:host-context(.dark) .talos-tabs__close,:host-context(.dark-theme) .talos-tabs__close{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__close:hover,:host-context([data-mode=dark]) .talos-tabs__close:hover,:host-context(.dark) .talos-tabs__close:hover,:host-context(.dark-theme) .talos-tabs__close:hover{background-color:#ffffff1f;color:var(--talos-error-color, #f87171)}:host-context([data-theme=dark]) .talos-tabs__add,:host-context([data-mode=dark]) .talos-tabs__add,:host-context(.dark) .talos-tabs__add,:host-context(.dark-theme) .talos-tabs__add{border-color:#ffffff26;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]) .talos-tabs__add:hover,:host-context([data-mode=dark]) .talos-tabs__add:hover,:host-context(.dark) .talos-tabs__add:hover,:host-context(.dark-theme) .talos-tabs__add:hover{color:var(--talos-primary-color, #3b82f6);border-color:var(--talos-primary-color, #3b82f6);background-color:#3b82f61f}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__header{border-bottom-color:var(--talos-border-color, rgba(255, 255, 255, .1))}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab{border-color:transparent;border-bottom-color:var(--talos-border-color, rgba(255, 255, 255, .1));background-color:#ffffff09;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff16;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--card.talos-tabs--horizontal .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));border-color:var(--talos-border-color, rgba(255, 255, 255, .12));border-bottom-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__header,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__header{border-right-color:var(--talos-border-color, rgba(255, 255, 255, .1))}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab{border-color:transparent;border-right-color:var(--talos-border-color, rgba(255, 255, 255, .1));background-color:#ffffff09;color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff16;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--card.talos-tabs--vertical .talos-tabs__tab.talos-tabs__tab--active{background-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));border-color:var(--talos-border-color, rgba(255, 255, 255, .12));border-right-color:var(--talos-card-bg, var(--talos-bg-surface, #0f172a));color:var(--talos-primary-color, #3b82f6)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__header,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__header,:host-context(.dark).talos-tabs--segmented .talos-tabs__header,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__header{background-color:#ffffff0f;border-color:#ffffff14}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context(.dark).talos-tabs--segmented .talos-tabs__indicator--segmented,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__indicator--segmented{background-color:var(--talos-card-bg, #1e293b);box-shadow:0 1px 3px #0000004d}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab,:host-context(.dark).talos-tabs--segmented .talos-tabs__tab,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab{color:var(--talos-text-muted, #94a3b8)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--segmented .talos-tabs__tab.talos-tabs__tab--active{color:var(--talos-text-primary, #f8fafc);background-color:var(--talos-card-bg, #1e293b)}:host-context([data-theme=dark]).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context([data-mode=dark]).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled),:host-context(.dark-theme).talos-tabs--subtle .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled){background-color:#ffffff14;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context([data-mode=dark]).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active,:host-context(.dark-theme).talos-tabs--subtle .talos-tabs__tab.talos-tabs__tab--active{background-color:#3b82f629;color:var(--talos-primary-color, #60a5fa)}:host-context([data-theme=dark]).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--line .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff0d;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context([data-mode=dark]).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active),:host-context(.dark-theme).talos-tabs--pills .talos-tabs__tab:hover:not(.talos-tabs__tab--disabled):not(.talos-tabs__tab--active){background-color:#ffffff14;color:var(--talos-text-primary, #f8fafc)}:host-context([data-theme=dark]) .talos-tabs__data-content,:host-context([data-mode=dark]) .talos-tabs__data-content,:host-context(.dark) .talos-tabs__data-content,:host-context(.dark-theme) .talos-tabs__data-content{color:var(--talos-text-secondary, #cbd5e1)}\n"] }]
1363
+ }], ctorParameters: () => [], propDecorators: { selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], activeId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeId", required: false }] }, { type: i0.Output, args: ["activeIdChange"] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], addable: [{ type: i0.Input, args: [{ isSignal: true, alias: "addable", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], stretched: [{ type: i0.Input, args: [{ isSignal: true, alias: "stretched", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], tabChange: [{ type: i0.Output, args: ["tabChange"] }], tabClose: [{ type: i0.Output, args: ["tabClose"] }], tabAdd: [{ type: i0.Output, args: ["tabAdd"] }], projectedTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TalosTabComponent), { isSignal: true }] }], tabButtons: [{ type: i0.ViewChildren, args: ['tabButton', { isSignal: true }] }], navContainer: [{ type: i0.ViewChild, args: ['navContainer', { isSignal: true }] }] } });
1364
+
1365
+ const TABS_DECLARATIONS = [
1366
+ TalosTabsComponent,
1367
+ TalosTabComponent,
1368
+ TalosTabLabelDirective,
1369
+ TalosTabContentDirective
1370
+ ];
1371
+ class TalosTabsModule {
1372
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1373
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsModule, imports: [TalosTabsComponent,
1374
+ TalosTabComponent,
1375
+ TalosTabLabelDirective,
1376
+ TalosTabContentDirective], exports: [TalosTabsComponent,
1377
+ TalosTabComponent,
1378
+ TalosTabLabelDirective,
1379
+ TalosTabContentDirective] });
1380
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsModule, imports: [TalosTabsComponent,
1381
+ TalosTabComponent] });
1382
+ }
1383
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosTabsModule, decorators: [{
1384
+ type: NgModule,
1385
+ args: [{
1386
+ imports: [...TABS_DECLARATIONS],
1387
+ exports: [...TABS_DECLARATIONS]
1388
+ }]
1389
+ }] });
1390
+
1391
+ let nextStepUniqueId = 0;
1392
+ /**
1393
+ * An individual step container component to be declared inside `<talos-stepper>`.
1394
+ */
1395
+ class TalosStepComponent {
1396
+ defaultUniqueId = `talos-step-${nextStepUniqueId++}`;
1397
+ /**
1398
+ * Title text for the step header.
1399
+ */
1400
+ label = input('', /* @ts-ignore */
1401
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1402
+ /**
1403
+ * Optional secondary description or helper text.
1404
+ */
1405
+ description = input('', /* @ts-ignore */
1406
+ ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
1407
+ /**
1408
+ * Unique identifier for this step. If omitted, an auto-generated ID is assigned.
1409
+ */
1410
+ id = input('', /* @ts-ignore */
1411
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
1412
+ /**
1413
+ * Optional icon component to display within the step indicator.
1414
+ */
1415
+ icon = input(null, /* @ts-ignore */
1416
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
1417
+ /**
1418
+ * Whether this step is optional (displays an "(Optional)" subtitle indicator).
1419
+ */
1420
+ optional = input(false, /* @ts-ignore */
1421
+ ...(ngDevMode ? [{ debugName: "optional" }] : /* istanbul ignore next */ []));
1422
+ /**
1423
+ * Whether this step is disabled and cannot be navigated to.
1424
+ */
1425
+ disabled = input(false, /* @ts-ignore */
1426
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1427
+ /**
1428
+ * Explicit completed flag. If undefined, completion is inferred automatically in sequential progression.
1429
+ */
1430
+ completed = input(undefined, /* @ts-ignore */
1431
+ ...(ngDevMode ? [{ debugName: "completed" }] : /* istanbul ignore next */ []));
1432
+ /**
1433
+ * Whether this step is in an error state.
1434
+ */
1435
+ hasError = input(false, /* @ts-ignore */
1436
+ ...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
1437
+ /**
1438
+ * Contextual error message to display when step validation fails.
1439
+ */
1440
+ errorMessage = input('', /* @ts-ignore */
1441
+ ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
1442
+ /**
1443
+ * Explicit semantic state override ('pending' | 'active' | 'completed' | 'error' | 'warning').
1444
+ */
1445
+ state = input(undefined, /* @ts-ignore */
1446
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
1447
+ /**
1448
+ * Accessible description for screen readers (aria-label).
1449
+ */
1450
+ ariaLabel = input('', /* @ts-ignore */
1451
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
1452
+ /**
1453
+ * Custom label template projected with `*talosStepLabel`.
1454
+ */
1455
+ customLabel = contentChild(TalosStepLabelDirective, /* @ts-ignore */
1456
+ ...(ngDevMode ? [{ debugName: "customLabel" }] : /* istanbul ignore next */ []));
1457
+ /**
1458
+ * Custom icon template projected with `*talosStepIcon`.
1459
+ */
1460
+ customIcon = contentChild(TalosStepIconDirective, /* @ts-ignore */
1461
+ ...(ngDevMode ? [{ debugName: "customIcon" }] : /* istanbul ignore next */ []));
1462
+ /**
1463
+ * Lazy-loaded panel content projected with `*talosStepContent`.
1464
+ */
1465
+ lazyContent = contentChild(TalosStepContentDirective, /* @ts-ignore */
1466
+ ...(ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []));
1467
+ /**
1468
+ * Root template ref for declarative step projection.
1469
+ */
1470
+ stepContentTemplate = viewChild('stepTemplate', /* @ts-ignore */
1471
+ ...(ngDevMode ? [{ debugName: "stepContentTemplate" }] : /* istanbul ignore next */ []));
1472
+ /**
1473
+ * Internal selection state controlled by the parent `<talos-stepper>`.
1474
+ */
1475
+ active = signal(false, /* @ts-ignore */
1476
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
1477
+ /**
1478
+ * Whether this step has been active at least once (used for lazy-loading retention).
1479
+ */
1480
+ hasBeenActive = signal(false, /* @ts-ignore */
1481
+ ...(ngDevMode ? [{ debugName: "hasBeenActive" }] : /* istanbul ignore next */ []));
1482
+ /**
1483
+ * The effective unique key for this step.
1484
+ */
1485
+ key = computed(() => {
1486
+ const customId = this.id();
1487
+ return customId !== '' && customId !== null && customId !== undefined
1488
+ ? customId
1489
+ : this.defaultUniqueId;
1490
+ }, /* @ts-ignore */
1491
+ ...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
1492
+ /**
1493
+ * The HTML element ID of the step panel.
1494
+ */
1495
+ panelId = computed(() => `${this.key()}-panel`, /* @ts-ignore */
1496
+ ...(ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []));
1497
+ /**
1498
+ * The HTML element ID of the step header button.
1499
+ */
1500
+ headerId = computed(() => `${this.key()}-header`, /* @ts-ignore */
1501
+ ...(ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []));
1502
+ /**
1503
+ * Updates active state and marks the step as having been visited.
1504
+ */
1505
+ setActive(isActive) {
1506
+ this.active.set(isActive);
1507
+ if (isActive) {
1508
+ this.hasBeenActive.set(true);
1509
+ }
1510
+ }
1511
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1512
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosStepComponent, isStandalone: true, selector: "talos-step, [talosStep]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, optional: { classPropertyName: "optional", publicName: "optional", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, completed: { classPropertyName: "completed", publicName: "completed", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "tabpanel" }, properties: { "attr.id": "panelId()", "attr.aria-labelledby": "headerId()", "attr.tabindex": "active() ? 0 : -1", "attr.aria-hidden": "!active()", "class.talos-step-panel--active": "active()", "hidden": "!active()" }, classAttribute: "talos-step-panel" }, queries: [{ propertyName: "customLabel", first: true, predicate: TalosStepLabelDirective, descendants: true, isSignal: true }, { propertyName: "customIcon", first: true, predicate: TalosStepIconDirective, descendants: true, isSignal: true }, { propertyName: "lazyContent", first: true, predicate: TalosStepContentDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "stepContentTemplate", first: true, predicate: ["stepTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (lazyContent(); as lazy) {\n @if (hasBeenActive()) {\n <ng-container *ngTemplateOutlet=\"lazy.templateRef\" />\n }\n} @else {\n <ng-content />\n}\n", styles: [":host{display:block;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}:host[hidden]{display:none!important}:host.talos-step-panel--active{animation:talos-step-fade-in .2s cubic-bezier(.4,0,.2,1)}@keyframes talos-step-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
1513
+ }
1514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepComponent, decorators: [{
1515
+ type: Component,
1516
+ args: [{ selector: 'talos-step, [talosStep]', imports: [CommonModule], host: {
1517
+ 'class': 'talos-step-panel',
1518
+ 'role': 'tabpanel',
1519
+ '[attr.id]': 'panelId()',
1520
+ '[attr.aria-labelledby]': 'headerId()',
1521
+ '[attr.tabindex]': 'active() ? 0 : -1',
1522
+ '[attr.aria-hidden]': '!active()',
1523
+ '[class.talos-step-panel--active]': 'active()',
1524
+ '[hidden]': '!active()'
1525
+ }, template: "@if (lazyContent(); as lazy) {\n @if (hasBeenActive()) {\n <ng-container *ngTemplateOutlet=\"lazy.templateRef\" />\n }\n} @else {\n <ng-content />\n}\n", styles: [":host{display:block;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}:host[hidden]{display:none!important}:host.talos-step-panel--active{animation:talos-step-fade-in .2s cubic-bezier(.4,0,.2,1)}@keyframes talos-step-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
1526
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], optional: [{ type: i0.Input, args: [{ isSignal: true, alias: "optional", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], completed: [{ type: i0.Input, args: [{ isSignal: true, alias: "completed", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], customLabel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TalosStepLabelDirective), { isSignal: true }] }], customIcon: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TalosStepIconDirective), { isSignal: true }] }], lazyContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TalosStepContentDirective), { isSignal: true }] }], stepContentTemplate: [{ type: i0.ViewChild, args: ['stepTemplate', { isSignal: true }] }] } });
1527
+
1528
+ class TalosStepperComponent {
1529
+ /**
1530
+ * The index of the currently active step (two-way bindable via `[(selectedIndex)]`).
1531
+ */
1532
+ selectedIndex = model(0, /* @ts-ignore */
1533
+ ...(ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []));
1534
+ /**
1535
+ * The unique ID of the currently active step (two-way bindable via `[(activeId)]`).
1536
+ */
1537
+ activeId = model(null, /* @ts-ignore */
1538
+ ...(ngDevMode ? [{ debugName: "activeId" }] : /* istanbul ignore next */ []));
1539
+ /**
1540
+ * Layout orientation of the stepper.
1541
+ * @default 'horizontal'
1542
+ */
1543
+ orientation = input('horizontal', /* @ts-ignore */
1544
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
1545
+ /**
1546
+ * Visual variant presentation style.
1547
+ * @default 'default'
1548
+ */
1549
+ variant = input('default', /* @ts-ignore */
1550
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
1551
+ /**
1552
+ * Sizing scale of the step indicator buttons and labels.
1553
+ * @default 'md'
1554
+ */
1555
+ size = input('md', /* @ts-ignore */
1556
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
1557
+ /**
1558
+ * Label position relative to step indicator in horizontal mode.
1559
+ * @default 'end'
1560
+ */
1561
+ labelPosition = input('end', /* @ts-ignore */
1562
+ ...(ngDevMode ? [{ debugName: "labelPosition" }] : /* istanbul ignore next */ []));
1563
+ /**
1564
+ * Whether strict linear step progression is enforced (disallows skipping uncompleted steps).
1565
+ * @default false
1566
+ */
1567
+ linear = input(false, /* @ts-ignore */
1568
+ ...(ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []));
1569
+ /**
1570
+ * Whether steps can be clicked to navigate directly.
1571
+ * @default true
1572
+ */
1573
+ clickable = input(true, /* @ts-ignore */
1574
+ ...(ngDevMode ? [{ debugName: "clickable" }] : /* istanbul ignore next */ []));
1575
+ /**
1576
+ * Whether to animate panel transitions.
1577
+ * @default true
1578
+ */
1579
+ animated = input(true, /* @ts-ignore */
1580
+ ...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
1581
+ /**
1582
+ * Data items for data-driven stepper configuration.
1583
+ */
1584
+ steps = input([], /* @ts-ignore */
1585
+ ...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
1586
+ /**
1587
+ * Emitted whenever the active step changes.
1588
+ */
1589
+ stepChange = output();
1590
+ /**
1591
+ * Emitted when reaching and finishing the final step.
1592
+ */
1593
+ stepperFinished = output();
1594
+ /**
1595
+ * Projected child steps in declarative mode.
1596
+ */
1597
+ childSteps = contentChildren(TalosStepComponent, /* @ts-ignore */
1598
+ ...(ngDevMode ? [{ debugName: "childSteps" }] : /* istanbul ignore next */ []));
1599
+ /**
1600
+ * Header button elements for keyboard focus navigation.
1601
+ */
1602
+ stepButtons = viewChildren('stepButton', /* @ts-ignore */
1603
+ ...(ngDevMode ? [{ debugName: "stepButtons" }] : /* istanbul ignore next */ []));
1604
+ /**
1605
+ * Unified normalized step items combining both declarative `<talos-step>` components and `steps()` input data.
1606
+ */
1607
+ normalizedSteps = computed(() => {
1608
+ const dataItems = this.steps();
1609
+ const children = this.childSteps();
1610
+ const activeIdx = this.selectedIndex();
1611
+ if (dataItems && dataItems.length > 0) {
1612
+ return dataItems.map((item, index) => {
1613
+ const id = item.id !== undefined && item.id !== '' ? item.id : `talos-step-data-${index}`;
1614
+ const headerId = `talos-step-header-${id}`;
1615
+ const panelId = `talos-step-panel-${id}`;
1616
+ const isCompleted = item.completed ?? index < activeIdx;
1617
+ const hasErr = item.hasError ?? false;
1618
+ let state;
1619
+ if (item.state) {
1620
+ state = item.state;
1621
+ }
1622
+ else if (hasErr) {
1623
+ state = 'error';
1624
+ }
1625
+ else if (index === activeIdx) {
1626
+ state = 'active';
1627
+ }
1628
+ else if (isCompleted) {
1629
+ state = 'completed';
1630
+ }
1631
+ else {
1632
+ state = 'pending';
1633
+ }
1634
+ return {
1635
+ index,
1636
+ id,
1637
+ label: item.label,
1638
+ description: item.description,
1639
+ headerId,
1640
+ panelId,
1641
+ icon: item.icon ?? null,
1642
+ optional: item.optional ?? false,
1643
+ disabled: item.disabled ?? false,
1644
+ completed: isCompleted,
1645
+ hasError: hasErr,
1646
+ errorMessage: item.errorMessage,
1647
+ state,
1648
+ ariaLabel: item.ariaLabel,
1649
+ customLabel: null,
1650
+ labelTemplate: item.labelTemplate ?? null,
1651
+ customIcon: null,
1652
+ iconTemplate: item.iconTemplate ?? null,
1653
+ contentTemplate: item.template ?? null,
1654
+ contentString: item.content,
1655
+ source: item
1656
+ };
1657
+ });
1658
+ }
1659
+ return children.map((step, index) => {
1660
+ const isCompleted = step.completed() ?? index < activeIdx;
1661
+ const hasErr = step.hasError();
1662
+ let state;
1663
+ if (step.state()) {
1664
+ state = step.state();
1665
+ }
1666
+ else if (hasErr) {
1667
+ state = 'error';
1668
+ }
1669
+ else if (index === activeIdx) {
1670
+ state = 'active';
1671
+ }
1672
+ else if (isCompleted) {
1673
+ state = 'completed';
1674
+ }
1675
+ else {
1676
+ state = 'pending';
1677
+ }
1678
+ return {
1679
+ index,
1680
+ id: step.key(),
1681
+ label: step.label(),
1682
+ description: step.description(),
1683
+ headerId: step.headerId(),
1684
+ panelId: step.panelId(),
1685
+ icon: step.icon(),
1686
+ optional: step.optional(),
1687
+ disabled: step.disabled(),
1688
+ completed: isCompleted,
1689
+ hasError: hasErr,
1690
+ errorMessage: step.errorMessage(),
1691
+ state,
1692
+ ariaLabel: step.ariaLabel(),
1693
+ customLabel: step.customLabel(),
1694
+ labelTemplate: null,
1695
+ customIcon: step.customIcon(),
1696
+ iconTemplate: null,
1697
+ contentTemplate: null,
1698
+ contentString: undefined,
1699
+ source: step
1700
+ };
1701
+ });
1702
+ }, /* @ts-ignore */
1703
+ ...(ngDevMode ? [{ debugName: "normalizedSteps" }] : /* istanbul ignore next */ []));
1704
+ /**
1705
+ * Total number of steps available.
1706
+ */
1707
+ totalSteps = computed(() => this.normalizedSteps().length, /* @ts-ignore */
1708
+ ...(ngDevMode ? [{ debugName: "totalSteps" }] : /* istanbul ignore next */ []));
1709
+ /**
1710
+ * Whether the stepper is currently at the first step.
1711
+ */
1712
+ isFirst = computed(() => this.selectedIndex() <= 0, /* @ts-ignore */
1713
+ ...(ngDevMode ? [{ debugName: "isFirst" }] : /* istanbul ignore next */ []));
1714
+ /**
1715
+ * Whether the stepper is currently at the last step.
1716
+ */
1717
+ isLast = computed(() => {
1718
+ const total = this.totalSteps();
1719
+ return total > 0 && this.selectedIndex() >= total - 1;
1720
+ }, /* @ts-ignore */
1721
+ ...(ngDevMode ? [{ debugName: "isLast" }] : /* istanbul ignore next */ []));
1722
+ /**
1723
+ * Progress percentage through the steps (0 to 100).
1724
+ */
1725
+ progressPercent = computed(() => {
1726
+ const total = this.totalSteps();
1727
+ if (total <= 1)
1728
+ return 100;
1729
+ const current = Math.min(Math.max(this.selectedIndex(), 0), total - 1);
1730
+ return Math.round((current / (total - 1)) * 100);
1731
+ }, /* @ts-ignore */
1732
+ ...(ngDevMode ? [{ debugName: "progressPercent" }] : /* istanbul ignore next */ []));
1733
+ /**
1734
+ * Currently active normalized step item.
1735
+ */
1736
+ currentStep = computed(() => {
1737
+ const steps = this.normalizedSteps();
1738
+ const idx = this.selectedIndex();
1739
+ return steps[idx] ?? null;
1740
+ }, /* @ts-ignore */
1741
+ ...(ngDevMode ? [{ debugName: "currentStep" }] : /* istanbul ignore next */ []));
1742
+ /**
1743
+ * Whether declarative children mode is active.
1744
+ */
1745
+ isDeclarative = computed(() => this.steps().length === 0, /* @ts-ignore */
1746
+ ...(ngDevMode ? [{ debugName: "isDeclarative" }] : /* istanbul ignore next */ []));
1747
+ constructor() {
1748
+ // Keep child components synced with selected index and active ID
1749
+ effect(() => {
1750
+ const idx = this.selectedIndex();
1751
+ const steps = this.normalizedSteps();
1752
+ const children = this.childSteps();
1753
+ if (children.length > 0) {
1754
+ children.forEach((child, i) => {
1755
+ child.setActive(i === idx);
1756
+ });
1757
+ }
1758
+ if (steps[idx] && this.activeId() !== steps[idx].id) {
1759
+ this.activeId.set(steps[idx].id);
1760
+ }
1761
+ });
1762
+ // Synchronize selection if activeId is modified externally
1763
+ effect(() => {
1764
+ const targetId = this.activeId();
1765
+ if (targetId === null || targetId === undefined)
1766
+ return;
1767
+ const steps = this.normalizedSteps();
1768
+ const matchedIdx = steps.findIndex(s => s.id === targetId);
1769
+ if (matchedIdx !== -1 && matchedIdx !== this.selectedIndex()) {
1770
+ this.selectStep(matchedIdx, false);
1771
+ }
1772
+ });
1773
+ }
1774
+ /**
1775
+ * Selects a specific step index if allowed by validation and disabled rules.
1776
+ */
1777
+ selectStep(index, emitEvent = true) {
1778
+ const steps = this.normalizedSteps();
1779
+ if (index < 0 || index >= steps.length) {
1780
+ return false;
1781
+ }
1782
+ const targetStep = steps[index];
1783
+ if (targetStep.disabled) {
1784
+ return false;
1785
+ }
1786
+ const currentIdx = this.selectedIndex();
1787
+ // Enforce linear progression when navigating forward
1788
+ if (this.linear() && index > currentIdx) {
1789
+ if (steps[currentIdx].hasError) {
1790
+ return false;
1791
+ }
1792
+ // If jumping ahead by more than 1 step, current step and intermediate steps must be completed
1793
+ if (index > currentIdx + 1) {
1794
+ for (let i = currentIdx; i < index; i++) {
1795
+ if (!steps[i].completed) {
1796
+ return false;
1797
+ }
1798
+ }
1799
+ }
1800
+ }
1801
+ const previousIdx = currentIdx;
1802
+ this.selectedIndex.set(index);
1803
+ this.activeId.set(targetStep.id);
1804
+ if (this.isDeclarative()) {
1805
+ this.childSteps().forEach((child, i) => {
1806
+ child.setActive(i === index);
1807
+ });
1808
+ }
1809
+ if (emitEvent) {
1810
+ this.stepChange.emit({
1811
+ index,
1812
+ previousIndex: previousIdx,
1813
+ id: targetStep.id,
1814
+ step: targetStep.source
1815
+ });
1816
+ }
1817
+ return true;
1818
+ }
1819
+ /**
1820
+ * Advances to the next step. If currently at the last step, emits `stepperFinished`.
1821
+ */
1822
+ next() {
1823
+ if (this.isLast()) {
1824
+ this.stepperFinished.emit({
1825
+ stepsCount: this.totalSteps(),
1826
+ completed: true
1827
+ });
1828
+ return false;
1829
+ }
1830
+ return this.selectStep(this.selectedIndex() + 1);
1831
+ }
1832
+ /**
1833
+ * Returns to the preceding step.
1834
+ */
1835
+ previous() {
1836
+ if (this.isFirst()) {
1837
+ return false;
1838
+ }
1839
+ return this.selectStep(this.selectedIndex() - 1);
1840
+ }
1841
+ /**
1842
+ * Jumps to a designated step index.
1843
+ */
1844
+ goTo(index) {
1845
+ return this.selectStep(index);
1846
+ }
1847
+ /**
1848
+ * Resets the stepper back to step index 0.
1849
+ */
1850
+ reset() {
1851
+ return this.selectStep(0);
1852
+ }
1853
+ /**
1854
+ * Click handler for step header indicator buttons.
1855
+ */
1856
+ onStepHeaderClick(index) {
1857
+ if (!this.clickable()) {
1858
+ return;
1859
+ }
1860
+ this.selectStep(index);
1861
+ }
1862
+ /**
1863
+ * Keyboard navigation across step header buttons.
1864
+ */
1865
+ onKeydown(event, index) {
1866
+ const isHorizontal = this.orientation() === 'horizontal';
1867
+ const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';
1868
+ const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';
1869
+ const buttons = this.stepButtons();
1870
+ let targetIndex = null;
1871
+ switch (event.key) {
1872
+ case nextKey:
1873
+ targetIndex = this.findNextFocusableIndex(index, 1);
1874
+ break;
1875
+ case prevKey:
1876
+ targetIndex = this.findNextFocusableIndex(index, -1);
1877
+ break;
1878
+ case 'Home':
1879
+ targetIndex = this.findNextFocusableIndex(-1, 1);
1880
+ break;
1881
+ case 'End':
1882
+ targetIndex = this.findNextFocusableIndex(this.totalSteps(), -1);
1883
+ break;
1884
+ case 'Enter':
1885
+ case ' ':
1886
+ event.preventDefault();
1887
+ this.onStepHeaderClick(index);
1888
+ return;
1889
+ default:
1890
+ return;
1891
+ }
1892
+ if (targetIndex !== null && targetIndex !== -1) {
1893
+ event.preventDefault();
1894
+ buttons[targetIndex]?.nativeElement?.focus();
1895
+ if (this.clickable()) {
1896
+ this.selectStep(targetIndex);
1897
+ }
1898
+ }
1899
+ }
1900
+ findNextFocusableIndex(current, direction) {
1901
+ const steps = this.normalizedSteps();
1902
+ const total = steps.length;
1903
+ let idx = current + direction;
1904
+ while (idx >= 0 && idx < total) {
1905
+ if (!steps[idx].disabled) {
1906
+ if (!this.linear() || idx <= this.selectedIndex() + 1) {
1907
+ return idx;
1908
+ }
1909
+ }
1910
+ idx += direction;
1911
+ }
1912
+ return -1;
1913
+ }
1914
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1915
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosStepperComponent, isStandalone: true, selector: "talos-stepper, [talosStepper]", inputs: { selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, activeId: { classPropertyName: "activeId", publicName: "activeId", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedIndex: "selectedIndexChange", activeId: "activeIdChange", stepChange: "stepChange", stepperFinished: "stepperFinished" }, host: { properties: { "class.talos-stepper--horizontal": "orientation() === \"horizontal\"", "class.talos-stepper--vertical": "orientation() === \"vertical\"", "class.talos-stepper--default": "variant() === \"default\" || variant() === \"circles\"", "class.talos-stepper--circles": "variant() === \"default\" || variant() === \"circles\"", "class.talos-stepper--progress": "variant() === \"progress\"", "class.talos-stepper--cards": "variant() === \"cards\"", "class.talos-stepper--sm": "size() === \"sm\"", "class.talos-stepper--md": "size() === \"md\"", "class.talos-stepper--lg": "size() === \"lg\"", "class.talos-stepper--label-bottom": "orientation() === \"horizontal\" && labelPosition() === \"bottom\"", "class.talos-stepper--label-end": "orientation() === \"vertical\" || labelPosition() === \"end\"", "class.talos-stepper--linear": "linear()", "class.talos-stepper--animated": "animated()" }, classAttribute: "talos-stepper" }, queries: [{ propertyName: "childSteps", predicate: TalosStepComponent, isSignal: true }], viewQueries: [{ propertyName: "stepButtons", predicate: ["stepButton"], descendants: true, isSignal: true }], ngImport: i0, template: "<nav class=\"talos-stepper__header\" aria-label=\"Progress\">\n @if (variant() === 'progress') {\n <!-- Compact Progress Bar Header -->\n <div class=\"talos-stepper__progress-header\">\n <div class=\"talos-stepper__progress-meta\">\n <span class=\"talos-stepper__progress-step-counter\">\n Step {{ selectedIndex() + 1 }} of {{ totalSteps() }}\n </span>\n @if (currentStep(); as curr) {\n <span class=\"talos-stepper__progress-current-title\">{{ curr.label }}</span>\n }\n <span class=\"talos-stepper__progress-percent\">{{ progressPercent() }}%</span>\n </div>\n <div class=\"talos-stepper__progress-track\" role=\"progressbar\" [attr.aria-valuenow]=\"progressPercent()\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"talos-stepper__progress-fill\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n </div>\n }\n\n <ol class=\"talos-stepper__list\" role=\"list\">\n @for (step of normalizedSteps(); track step.id; let idx = $index; let isLastStep = $last) {\n <li\n class=\"talos-stepper__item\"\n [class.talos-stepper__item--active]=\"idx === selectedIndex()\"\n [class.talos-stepper__item--completed]=\"step.state === 'completed'\"\n [class.talos-stepper__item--error]=\"step.state === 'error'\"\n [class.talos-stepper__item--warning]=\"step.state === 'warning'\"\n [class.talos-stepper__item--pending]=\"step.state === 'pending'\"\n [class.talos-stepper__item--disabled]=\"step.disabled\"\n [class.talos-stepper__item--last]=\"isLastStep\"\n >\n <button\n #stepButton\n type=\"button\"\n class=\"talos-stepper__step-btn\"\n [id]=\"step.headerId\"\n [attr.aria-controls]=\"step.panelId\"\n [attr.aria-selected]=\"idx === selectedIndex()\"\n [attr.aria-current]=\"idx === selectedIndex() ? 'step' : null\"\n [attr.aria-disabled]=\"step.disabled\"\n [attr.aria-label]=\"step.ariaLabel || (step.label + (step.optional ? ' (Optional)' : ''))\"\n [disabled]=\"step.disabled\"\n (click)=\"onStepHeaderClick(idx)\"\n (keydown)=\"onKeydown($event, idx)\"\n >\n <!-- Indicator Badge / Circle -->\n <span class=\"talos-stepper__indicator\" aria-hidden=\"true\">\n @if (step.customIcon; as customIcon) {\n <ng-container *ngTemplateOutlet=\"customIcon.templateRef\" />\n } @else if (step.iconTemplate; as iconTpl) {\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\n } @else if (step.state === 'completed') {\n <svg lucideCheck class=\"talos-stepper__check-icon\" [size]=\"16\" [strokeWidth]=\"2.5\"></svg>\n } @else if (step.state === 'error') {\n <svg lucideAlertTriangle class=\"talos-stepper__error-icon\" [size]=\"15\" [strokeWidth]=\"2.5\"></svg>\n } @else if (step.icon; as iconComp) {\n <ng-container *ngComponentOutlet=\"iconComp\" />\n } @else {\n <span class=\"talos-stepper__step-number\">{{ idx + 1 }}</span>\n }\n </span>\n\n <!-- Step Label & Description Block -->\n <span class=\"talos-stepper__label-container\">\n <span class=\"talos-stepper__title-row\">\n <span class=\"talos-stepper__label\">\n @if (step.customLabel; as customLabel) {\n <ng-container *ngTemplateOutlet=\"customLabel.templateRef\" />\n } @else if (step.labelTemplate; as labelTpl) {\n <ng-container *ngTemplateOutlet=\"labelTpl\" />\n } @else {\n {{ step.label }}\n }\n </span>\n\n @if (step.optional) {\n <span class=\"talos-stepper__optional-tag\">Optional</span>\n }\n </span>\n\n @if (step.description) {\n <span class=\"talos-stepper__description\">{{ step.description }}</span>\n }\n\n @if (step.hasError && step.errorMessage) {\n <span class=\"talos-stepper__error-message\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connecting line between steps (placed inside each non-last item) -->\n @if (!isLastStep) {\n <div\n class=\"talos-stepper__connector\"\n [class.talos-stepper__connector--active]=\"idx < selectedIndex()\"\n aria-hidden=\"true\"\n >\n <div class=\"talos-stepper__connector-line\"></div>\n </div>\n }\n </li>\n }\n </ol>\n</nav>\n\n<!-- Step Content Panels -->\n<div class=\"talos-stepper__content\">\n @if (isDeclarative()) {\n <ng-content />\n } @else {\n @for (step of normalizedSteps(); track step.id; let idx = $index) {\n @if (idx === selectedIndex()) {\n <div\n class=\"talos-step-panel talos-step-panel--active\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n role=\"tabpanel\"\n tabindex=\"0\"\n >\n @if (step.contentTemplate; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\" />\n } @else if (step.contentString; as text) {\n <div class=\"talos-stepper__data-content\">{{ text }}</div>\n }\n </div>\n }\n }\n }\n</div>\n", styles: [":host{display:flex;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}.talos-stepper__list{list-style:none;margin:0;padding:0;box-sizing:border-box}:host.talos-stepper--horizontal{flex-direction:column}:host.talos-stepper--horizontal .talos-stepper__header{width:100%}:host.talos-stepper--horizontal .talos-stepper__list{display:flex;flex-direction:row;align-items:center;width:100%}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__item{display:flex;flex-direction:row;align-items:center;flex:1}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__item.talos-stepper__item--last{flex:0 0 auto}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__step-btn{flex:0 0 auto}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector{flex:1;display:flex;align-items:center;min-width:1.5rem}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector .talos-stepper__connector-line{width:100%;height:2px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__list{align-items:flex-start}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__item{position:relative;display:flex;flex-direction:column;align-items:center;flex:1;text-align:center}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__item.talos-stepper__item--last{flex:0 0 auto;min-width:5rem}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__step-btn{flex-direction:column;align-items:center;text-align:center;position:relative;z-index:1}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__label-container{align-items:center;margin-top:.5rem;margin-left:0}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__title-row{justify-content:center}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{position:absolute;top:1.625rem;left:calc(50% + 1.25rem);right:calc(-50% + 1.25rem);padding:0;z-index:0}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector .talos-stepper__connector-line{width:100%;height:2px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--vertical{flex-direction:row;gap:2rem}:host.talos-stepper--vertical .talos-stepper__header{flex-shrink:0;min-width:220px;max-width:320px}:host.talos-stepper--vertical .talos-stepper__list{display:flex;flex-direction:column;width:100%;position:relative}:host.talos-stepper--vertical .talos-stepper__item{display:flex;flex-direction:column;position:relative}:host.talos-stepper--vertical .talos-stepper__connector{position:relative;margin-left:calc(1.625rem - 1px);min-height:1.5rem;width:2px;padding:.25rem 0}:host.talos-stepper--vertical .talos-stepper__connector .talos-stepper__connector-line{position:absolute;inset:0;width:2px;border-radius:1px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--vertical .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--vertical .talos-stepper__content{flex:1;min-width:0}.talos-stepper__step-btn{display:inline-flex;align-items:center;gap:.75rem;background:transparent;border:none;padding:.5rem;margin:0;font-family:inherit;font-size:inherit;cursor:pointer;color:inherit;text-decoration:none;border-radius:var(--talos-radius-md, .375rem);outline:none;position:relative;z-index:1;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__step-btn:hover:not(:disabled){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .03))}.talos-stepper__step-btn:hover:not(:disabled) .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb)}.talos-stepper__step-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25))}.talos-stepper__step-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.talos-stepper__indicator{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:2.25rem;height:2.25rem;border-radius:var(--talos-radius-full, 9999px);border:2px solid var(--talos-border-color, #cbd5e1);background-color:var(--talos-bg-surface, #ffffff);color:var(--talos-text-muted, #64748b);font-size:var(--talos-font-size-sm, .875rem);font-weight:600;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__item--active .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-color, #2563eb);color:#fff;box-shadow:0 0 0 3px var(--talos-primary-light, rgba(37, 99, 235, .2))}.talos-stepper__item--active .talos-stepper__label{color:var(--talos-text-primary, #0f172a);font-weight:600}.talos-stepper__item--completed .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-color, #2563eb);color:#fff}.talos-stepper__item--completed .talos-stepper__check-icon{stroke-dasharray:24;stroke-dashoffset:0;animation:talos-check-draw .3s cubic-bezier(.4,0,.2,1)}.talos-stepper__item--error .talos-stepper__indicator{border-color:var(--talos-danger-color, #ef4444);background-color:var(--talos-danger-light, #fee2e2);color:var(--talos-danger-color, #ef4444)}.talos-stepper__item--error .talos-stepper__label{color:var(--talos-danger-color, #ef4444)}.talos-stepper__item--warning .talos-stepper__indicator{border-color:var(--talos-warning-color, #f59e0b);background-color:var(--talos-warning-light, #fef3c7);color:var(--talos-warning-color, #d97706)}.talos-stepper__label-container{display:flex;flex-direction:column;text-align:left}.talos-stepper__title-row{display:inline-flex;align-items:center;gap:.375rem}.talos-stepper__label{font-size:var(--talos-font-size-sm, .875rem);font-weight:500;color:var(--talos-text-secondary, #475569);line-height:1.25;transition:color .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__description{font-size:var(--talos-font-size-xs, .75rem);color:var(--talos-text-muted, #94a3b8);margin-top:.125rem;line-height:1.35}.talos-stepper__optional-tag{font-size:.6875rem;color:var(--talos-text-muted, #94a3b8);font-weight:400;padding:.125rem .375rem;border-radius:var(--talos-radius-sm, .25rem);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}.talos-stepper__error-message{font-size:var(--talos-font-size-xs, .75rem);color:var(--talos-danger-color, #ef4444);margin-top:.125rem}:host.talos-stepper--sm .talos-stepper__indicator{width:1.75rem;height:1.75rem;font-size:.75rem}:host.talos-stepper--sm .talos-stepper__label{font-size:.8125rem}:host.talos-stepper--sm .talos-stepper__description{font-size:.6875rem}:host.talos-stepper--sm.talos-stepper--vertical .talos-stepper__connector{margin-left:calc(1.375rem - 1px)}:host.talos-stepper--sm.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{top:1.375rem;left:calc(50% + 1rem);right:calc(-50% + 1rem)}:host.talos-stepper--lg .talos-stepper__indicator{width:2.75rem;height:2.75rem;font-size:1rem}:host.talos-stepper--lg .talos-stepper__label{font-size:1rem}:host.talos-stepper--lg .talos-stepper__description{font-size:.8125rem}:host.talos-stepper--lg.talos-stepper--vertical .talos-stepper__connector{margin-left:calc(1.875rem - 1px)}:host.talos-stepper--lg.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{top:1.875rem;left:calc(50% + 1.5rem);right:calc(-50% + 1.5rem)}.talos-stepper__progress-header{margin-bottom:1.25rem;width:100%}.talos-stepper__progress-meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem;font-size:var(--talos-font-size-sm, .875rem)}.talos-stepper__progress-step-counter{font-weight:600;color:var(--talos-primary-color, #2563eb)}.talos-stepper__progress-current-title{font-weight:500;color:var(--talos-text-primary, #0f172a)}.talos-stepper__progress-percent{font-weight:500;color:var(--talos-text-muted, #64748b)}.talos-stepper__progress-track{width:100%;height:6px;background-color:var(--talos-border-color, #e2e8f0);border-radius:var(--talos-radius-full, 9999px);overflow:hidden}.talos-stepper__progress-fill{height:100%;background-color:var(--talos-primary-color, #2563eb);border-radius:var(--talos-radius-full, 9999px);transition:width .3s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--cards .talos-stepper__list{gap:.75rem}:host.talos-stepper--cards .talos-stepper__connector{display:none}:host.talos-stepper--cards .talos-stepper__item{flex:1}:host.talos-stepper--cards .talos-stepper__step-btn{width:100%;padding:1rem;background-color:var(--talos-bg-surface, #ffffff);border:1px solid var(--talos-border-color, #e2e8f0);border-radius:var(--talos-radius-lg, .5rem);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04))}:host.talos-stepper--cards .talos-stepper__step-btn:hover:not(:disabled){border-color:var(--talos-border-hover, #cbd5e1);box-shadow:var(--talos-shadow-sm, 0 1px 3px rgba(0, 0, 0, .08))}:host.talos-stepper--cards .talos-stepper__item--active .talos-stepper__step-btn{border-color:var(--talos-primary-color, #2563eb);box-shadow:0 0 0 1px var(--talos-primary-color, #2563eb),var(--talos-shadow-sm, 0 1px 3px rgba(0, 0, 0, .1))}:host.talos-stepper--cards .talos-stepper__item--completed .talos-stepper__step-btn{border-color:var(--talos-border-color, #e2e8f0);background-color:var(--talos-bg-subtle, #f8fafc)}.talos-stepper__content{margin-top:1.5rem;width:100%;box-sizing:border-box}.talos-stepper__data-content{padding:1rem 0;font-size:var(--talos-font-size-base, .875rem);color:var(--talos-text-primary, #0f172a)}@keyframes talos-check-draw{0%{stroke-dashoffset:24}to{stroke-dashoffset:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideCheck, selector: "svg[lucideCheck]" }, { kind: "component", type: LucideAlertTriangle, selector: "svg[lucideTriangleAlert], svg[lucideAlertTriangle]" }] });
1916
+ }
1917
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperComponent, decorators: [{
1918
+ type: Component,
1919
+ args: [{ selector: 'talos-stepper, [talosStepper]', imports: [
1920
+ CommonModule,
1921
+ NgTemplateOutlet,
1922
+ NgComponentOutlet,
1923
+ LucideCheck,
1924
+ LucideAlertTriangle
1925
+ ], host: {
1926
+ 'class': 'talos-stepper',
1927
+ '[class.talos-stepper--horizontal]': 'orientation() === "horizontal"',
1928
+ '[class.talos-stepper--vertical]': 'orientation() === "vertical"',
1929
+ '[class.talos-stepper--default]': 'variant() === "default" || variant() === "circles"',
1930
+ '[class.talos-stepper--circles]': 'variant() === "default" || variant() === "circles"',
1931
+ '[class.talos-stepper--progress]': 'variant() === "progress"',
1932
+ '[class.talos-stepper--cards]': 'variant() === "cards"',
1933
+ '[class.talos-stepper--sm]': 'size() === "sm"',
1934
+ '[class.talos-stepper--md]': 'size() === "md"',
1935
+ '[class.talos-stepper--lg]': 'size() === "lg"',
1936
+ '[class.talos-stepper--label-bottom]': 'orientation() === "horizontal" && labelPosition() === "bottom"',
1937
+ '[class.talos-stepper--label-end]': 'orientation() === "vertical" || labelPosition() === "end"',
1938
+ '[class.talos-stepper--linear]': 'linear()',
1939
+ '[class.talos-stepper--animated]': 'animated()'
1940
+ }, template: "<nav class=\"talos-stepper__header\" aria-label=\"Progress\">\n @if (variant() === 'progress') {\n <!-- Compact Progress Bar Header -->\n <div class=\"talos-stepper__progress-header\">\n <div class=\"talos-stepper__progress-meta\">\n <span class=\"talos-stepper__progress-step-counter\">\n Step {{ selectedIndex() + 1 }} of {{ totalSteps() }}\n </span>\n @if (currentStep(); as curr) {\n <span class=\"talos-stepper__progress-current-title\">{{ curr.label }}</span>\n }\n <span class=\"talos-stepper__progress-percent\">{{ progressPercent() }}%</span>\n </div>\n <div class=\"talos-stepper__progress-track\" role=\"progressbar\" [attr.aria-valuenow]=\"progressPercent()\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n <div class=\"talos-stepper__progress-fill\" [style.width.%]=\"progressPercent()\"></div>\n </div>\n </div>\n }\n\n <ol class=\"talos-stepper__list\" role=\"list\">\n @for (step of normalizedSteps(); track step.id; let idx = $index; let isLastStep = $last) {\n <li\n class=\"talos-stepper__item\"\n [class.talos-stepper__item--active]=\"idx === selectedIndex()\"\n [class.talos-stepper__item--completed]=\"step.state === 'completed'\"\n [class.talos-stepper__item--error]=\"step.state === 'error'\"\n [class.talos-stepper__item--warning]=\"step.state === 'warning'\"\n [class.talos-stepper__item--pending]=\"step.state === 'pending'\"\n [class.talos-stepper__item--disabled]=\"step.disabled\"\n [class.talos-stepper__item--last]=\"isLastStep\"\n >\n <button\n #stepButton\n type=\"button\"\n class=\"talos-stepper__step-btn\"\n [id]=\"step.headerId\"\n [attr.aria-controls]=\"step.panelId\"\n [attr.aria-selected]=\"idx === selectedIndex()\"\n [attr.aria-current]=\"idx === selectedIndex() ? 'step' : null\"\n [attr.aria-disabled]=\"step.disabled\"\n [attr.aria-label]=\"step.ariaLabel || (step.label + (step.optional ? ' (Optional)' : ''))\"\n [disabled]=\"step.disabled\"\n (click)=\"onStepHeaderClick(idx)\"\n (keydown)=\"onKeydown($event, idx)\"\n >\n <!-- Indicator Badge / Circle -->\n <span class=\"talos-stepper__indicator\" aria-hidden=\"true\">\n @if (step.customIcon; as customIcon) {\n <ng-container *ngTemplateOutlet=\"customIcon.templateRef\" />\n } @else if (step.iconTemplate; as iconTpl) {\n <ng-container *ngTemplateOutlet=\"iconTpl\" />\n } @else if (step.state === 'completed') {\n <svg lucideCheck class=\"talos-stepper__check-icon\" [size]=\"16\" [strokeWidth]=\"2.5\"></svg>\n } @else if (step.state === 'error') {\n <svg lucideAlertTriangle class=\"talos-stepper__error-icon\" [size]=\"15\" [strokeWidth]=\"2.5\"></svg>\n } @else if (step.icon; as iconComp) {\n <ng-container *ngComponentOutlet=\"iconComp\" />\n } @else {\n <span class=\"talos-stepper__step-number\">{{ idx + 1 }}</span>\n }\n </span>\n\n <!-- Step Label & Description Block -->\n <span class=\"talos-stepper__label-container\">\n <span class=\"talos-stepper__title-row\">\n <span class=\"talos-stepper__label\">\n @if (step.customLabel; as customLabel) {\n <ng-container *ngTemplateOutlet=\"customLabel.templateRef\" />\n } @else if (step.labelTemplate; as labelTpl) {\n <ng-container *ngTemplateOutlet=\"labelTpl\" />\n } @else {\n {{ step.label }}\n }\n </span>\n\n @if (step.optional) {\n <span class=\"talos-stepper__optional-tag\">Optional</span>\n }\n </span>\n\n @if (step.description) {\n <span class=\"talos-stepper__description\">{{ step.description }}</span>\n }\n\n @if (step.hasError && step.errorMessage) {\n <span class=\"talos-stepper__error-message\">{{ step.errorMessage }}</span>\n }\n </span>\n </button>\n\n <!-- Connecting line between steps (placed inside each non-last item) -->\n @if (!isLastStep) {\n <div\n class=\"talos-stepper__connector\"\n [class.talos-stepper__connector--active]=\"idx < selectedIndex()\"\n aria-hidden=\"true\"\n >\n <div class=\"talos-stepper__connector-line\"></div>\n </div>\n }\n </li>\n }\n </ol>\n</nav>\n\n<!-- Step Content Panels -->\n<div class=\"talos-stepper__content\">\n @if (isDeclarative()) {\n <ng-content />\n } @else {\n @for (step of normalizedSteps(); track step.id; let idx = $index) {\n @if (idx === selectedIndex()) {\n <div\n class=\"talos-step-panel talos-step-panel--active\"\n [id]=\"step.panelId\"\n [attr.aria-labelledby]=\"step.headerId\"\n role=\"tabpanel\"\n tabindex=\"0\"\n >\n @if (step.contentTemplate; as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\" />\n } @else if (step.contentString; as text) {\n <div class=\"talos-stepper__data-content\">{{ text }}</div>\n }\n </div>\n }\n }\n }\n</div>\n", styles: [":host{display:flex;box-sizing:border-box;width:100%;color:var(--talos-text-color, var(--talos-text-primary, #0f172a));font-family:var(--talos-font-sans, inherit)}.talos-stepper__list{list-style:none;margin:0;padding:0;box-sizing:border-box}:host.talos-stepper--horizontal{flex-direction:column}:host.talos-stepper--horizontal .talos-stepper__header{width:100%}:host.talos-stepper--horizontal .talos-stepper__list{display:flex;flex-direction:row;align-items:center;width:100%}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__item{display:flex;flex-direction:row;align-items:center;flex:1}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__item.talos-stepper__item--last{flex:0 0 auto}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__step-btn{flex:0 0 auto}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector{flex:1;display:flex;align-items:center;min-width:1.5rem}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector .talos-stepper__connector-line{width:100%;height:2px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--horizontal:not(.talos-stepper--label-bottom) .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__list{align-items:flex-start}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__item{position:relative;display:flex;flex-direction:column;align-items:center;flex:1;text-align:center}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__item.talos-stepper__item--last{flex:0 0 auto;min-width:5rem}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__step-btn{flex-direction:column;align-items:center;text-align:center;position:relative;z-index:1}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__label-container{align-items:center;margin-top:.5rem;margin-left:0}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__title-row{justify-content:center}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{position:absolute;top:1.625rem;left:calc(50% + 1.25rem);right:calc(-50% + 1.25rem);padding:0;z-index:0}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector .talos-stepper__connector-line{width:100%;height:2px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--vertical{flex-direction:row;gap:2rem}:host.talos-stepper--vertical .talos-stepper__header{flex-shrink:0;min-width:220px;max-width:320px}:host.talos-stepper--vertical .talos-stepper__list{display:flex;flex-direction:column;width:100%;position:relative}:host.talos-stepper--vertical .talos-stepper__item{display:flex;flex-direction:column;position:relative}:host.talos-stepper--vertical .talos-stepper__connector{position:relative;margin-left:calc(1.625rem - 1px);min-height:1.5rem;width:2px;padding:.25rem 0}:host.talos-stepper--vertical .talos-stepper__connector .talos-stepper__connector-line{position:absolute;inset:0;width:2px;border-radius:1px;background-color:var(--talos-border-color, #e2e8f0);transition:background-color .25s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--vertical .talos-stepper__connector.talos-stepper__connector--active .talos-stepper__connector-line{background-color:var(--talos-primary-color, #2563eb)}:host.talos-stepper--vertical .talos-stepper__content{flex:1;min-width:0}.talos-stepper__step-btn{display:inline-flex;align-items:center;gap:.75rem;background:transparent;border:none;padding:.5rem;margin:0;font-family:inherit;font-size:inherit;cursor:pointer;color:inherit;text-decoration:none;border-radius:var(--talos-radius-md, .375rem);outline:none;position:relative;z-index:1;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__step-btn:hover:not(:disabled){background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .03))}.talos-stepper__step-btn:hover:not(:disabled) .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb)}.talos-stepper__step-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .25))}.talos-stepper__step-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.talos-stepper__indicator{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:2.25rem;height:2.25rem;border-radius:var(--talos-radius-full, 9999px);border:2px solid var(--talos-border-color, #cbd5e1);background-color:var(--talos-bg-surface, #ffffff);color:var(--talos-text-muted, #64748b);font-size:var(--talos-font-size-sm, .875rem);font-weight:600;transition:color .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1),border-color .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__item--active .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-color, #2563eb);color:#fff;box-shadow:0 0 0 3px var(--talos-primary-light, rgba(37, 99, 235, .2))}.talos-stepper__item--active .talos-stepper__label{color:var(--talos-text-primary, #0f172a);font-weight:600}.talos-stepper__item--completed .talos-stepper__indicator{border-color:var(--talos-primary-color, #2563eb);background-color:var(--talos-primary-color, #2563eb);color:#fff}.talos-stepper__item--completed .talos-stepper__check-icon{stroke-dasharray:24;stroke-dashoffset:0;animation:talos-check-draw .3s cubic-bezier(.4,0,.2,1)}.talos-stepper__item--error .talos-stepper__indicator{border-color:var(--talos-danger-color, #ef4444);background-color:var(--talos-danger-light, #fee2e2);color:var(--talos-danger-color, #ef4444)}.talos-stepper__item--error .talos-stepper__label{color:var(--talos-danger-color, #ef4444)}.talos-stepper__item--warning .talos-stepper__indicator{border-color:var(--talos-warning-color, #f59e0b);background-color:var(--talos-warning-light, #fef3c7);color:var(--talos-warning-color, #d97706)}.talos-stepper__label-container{display:flex;flex-direction:column;text-align:left}.talos-stepper__title-row{display:inline-flex;align-items:center;gap:.375rem}.talos-stepper__label{font-size:var(--talos-font-size-sm, .875rem);font-weight:500;color:var(--talos-text-secondary, #475569);line-height:1.25;transition:color .2s cubic-bezier(.4,0,.2,1)}.talos-stepper__description{font-size:var(--talos-font-size-xs, .75rem);color:var(--talos-text-muted, #94a3b8);margin-top:.125rem;line-height:1.35}.talos-stepper__optional-tag{font-size:.6875rem;color:var(--talos-text-muted, #94a3b8);font-weight:400;padding:.125rem .375rem;border-radius:var(--talos-radius-sm, .25rem);background-color:var(--talos-bg-subtle, rgba(0, 0, 0, .04))}.talos-stepper__error-message{font-size:var(--talos-font-size-xs, .75rem);color:var(--talos-danger-color, #ef4444);margin-top:.125rem}:host.talos-stepper--sm .talos-stepper__indicator{width:1.75rem;height:1.75rem;font-size:.75rem}:host.talos-stepper--sm .talos-stepper__label{font-size:.8125rem}:host.talos-stepper--sm .talos-stepper__description{font-size:.6875rem}:host.talos-stepper--sm.talos-stepper--vertical .talos-stepper__connector{margin-left:calc(1.375rem - 1px)}:host.talos-stepper--sm.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{top:1.375rem;left:calc(50% + 1rem);right:calc(-50% + 1rem)}:host.talos-stepper--lg .talos-stepper__indicator{width:2.75rem;height:2.75rem;font-size:1rem}:host.talos-stepper--lg .talos-stepper__label{font-size:1rem}:host.talos-stepper--lg .talos-stepper__description{font-size:.8125rem}:host.talos-stepper--lg.talos-stepper--vertical .talos-stepper__connector{margin-left:calc(1.875rem - 1px)}:host.talos-stepper--lg.talos-stepper--horizontal.talos-stepper--label-bottom .talos-stepper__connector{top:1.875rem;left:calc(50% + 1.5rem);right:calc(-50% + 1.5rem)}.talos-stepper__progress-header{margin-bottom:1.25rem;width:100%}.talos-stepper__progress-meta{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem;font-size:var(--talos-font-size-sm, .875rem)}.talos-stepper__progress-step-counter{font-weight:600;color:var(--talos-primary-color, #2563eb)}.talos-stepper__progress-current-title{font-weight:500;color:var(--talos-text-primary, #0f172a)}.talos-stepper__progress-percent{font-weight:500;color:var(--talos-text-muted, #64748b)}.talos-stepper__progress-track{width:100%;height:6px;background-color:var(--talos-border-color, #e2e8f0);border-radius:var(--talos-radius-full, 9999px);overflow:hidden}.talos-stepper__progress-fill{height:100%;background-color:var(--talos-primary-color, #2563eb);border-radius:var(--talos-radius-full, 9999px);transition:width .3s cubic-bezier(.4,0,.2,1)}:host.talos-stepper--cards .talos-stepper__list{gap:.75rem}:host.talos-stepper--cards .talos-stepper__connector{display:none}:host.talos-stepper--cards .talos-stepper__item{flex:1}:host.talos-stepper--cards .talos-stepper__step-btn{width:100%;padding:1rem;background-color:var(--talos-bg-surface, #ffffff);border:1px solid var(--talos-border-color, #e2e8f0);border-radius:var(--talos-radius-lg, .5rem);box-shadow:var(--talos-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04))}:host.talos-stepper--cards .talos-stepper__step-btn:hover:not(:disabled){border-color:var(--talos-border-hover, #cbd5e1);box-shadow:var(--talos-shadow-sm, 0 1px 3px rgba(0, 0, 0, .08))}:host.talos-stepper--cards .talos-stepper__item--active .talos-stepper__step-btn{border-color:var(--talos-primary-color, #2563eb);box-shadow:0 0 0 1px var(--talos-primary-color, #2563eb),var(--talos-shadow-sm, 0 1px 3px rgba(0, 0, 0, .1))}:host.talos-stepper--cards .talos-stepper__item--completed .talos-stepper__step-btn{border-color:var(--talos-border-color, #e2e8f0);background-color:var(--talos-bg-subtle, #f8fafc)}.talos-stepper__content{margin-top:1.5rem;width:100%;box-sizing:border-box}.talos-stepper__data-content{padding:1rem 0;font-size:var(--talos-font-size-base, .875rem);color:var(--talos-text-primary, #0f172a)}@keyframes talos-check-draw{0%{stroke-dashoffset:24}to{stroke-dashoffset:0}}\n"] }]
1941
+ }], ctorParameters: () => [], propDecorators: { selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }, { type: i0.Output, args: ["selectedIndexChange"] }], activeId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeId", required: false }] }, { type: i0.Output, args: ["activeIdChange"] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }], linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: false }] }], stepChange: [{ type: i0.Output, args: ["stepChange"] }], stepperFinished: [{ type: i0.Output, args: ["stepperFinished"] }], childSteps: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TalosStepComponent), { isSignal: true }] }], stepButtons: [{ type: i0.ViewChildren, args: ['stepButton', { isSignal: true }] }] } });
1942
+
1943
+ /**
1944
+ * Directive applied to an `<ng-template>` to provide a custom header label template for a step.
1945
+ *
1946
+ * Usage:
1947
+ * ```html
1948
+ * <talos-step>
1949
+ * <ng-template talosStepLabel>
1950
+ * <svg lucideSettings [size]="14"></svg>
1951
+ * <span>Custom Step Label</span>
1952
+ * </ng-template>
1953
+ * Step content...
1954
+ * </talos-step>
1955
+ * ```
1956
+ */
1957
+ class TalosStepLabelDirective {
1958
+ templateRef = inject((TemplateRef));
1959
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepLabelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1960
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosStepLabelDirective, isStandalone: true, selector: "[talosStepLabel], ng-template[talosStepLabel]", ngImport: i0 });
1961
+ }
1962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepLabelDirective, decorators: [{
1963
+ type: Directive,
1964
+ args: [{
1965
+ selector: '[talosStepLabel], ng-template[talosStepLabel]'
1966
+ }]
1967
+ }] });
1968
+ /**
1969
+ * Directive applied to an `<ng-template>` to delay rendering of the step panel content
1970
+ * until the step is first navigated to (lazy loading).
1971
+ *
1972
+ * Usage:
1973
+ * ```html
1974
+ * <talos-step label="Billing Information">
1975
+ * <ng-template talosStepContent>
1976
+ * <heavy-billing-form />
1977
+ * </ng-template>
1978
+ * </talos-step>
1979
+ * ```
1980
+ */
1981
+ class TalosStepContentDirective {
1982
+ templateRef = inject((TemplateRef));
1983
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1984
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosStepContentDirective, isStandalone: true, selector: "[talosStepContent], ng-template[talosStepContent]", ngImport: i0 });
1985
+ }
1986
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepContentDirective, decorators: [{
1987
+ type: Directive,
1988
+ args: [{
1989
+ selector: '[talosStepContent], ng-template[talosStepContent]'
1990
+ }]
1991
+ }] });
1992
+ /**
1993
+ * Directive applied to an `<ng-template>` to provide a custom icon template
1994
+ * rendered inside the step circle or indicator badge.
1995
+ *
1996
+ * Usage:
1997
+ * ```html
1998
+ * <talos-step label="Payment">
1999
+ * <ng-template talosStepIcon let-state="state" let-index="index">
2000
+ * <svg lucideCreditCard [size]="16"></svg>
2001
+ * </ng-template>
2002
+ * Step content...
2003
+ * </talos-step>
2004
+ * ```
2005
+ */
2006
+ class TalosStepIconDirective {
2007
+ templateRef = inject((TemplateRef));
2008
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2009
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.1", type: TalosStepIconDirective, isStandalone: true, selector: "[talosStepIcon], ng-template[talosStepIcon]", ngImport: i0 });
2010
+ }
2011
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepIconDirective, decorators: [{
2012
+ type: Directive,
2013
+ args: [{
2014
+ selector: '[talosStepIcon], ng-template[talosStepIcon]'
2015
+ }]
2016
+ }] });
2017
+ /**
2018
+ * Button directive that advances the parent `<talos-stepper>` to the next step when clicked.
2019
+ *
2020
+ * Usage:
2021
+ * ```html
2022
+ * <button talosButton talosStepperNext>Continue</button>
2023
+ * ```
2024
+ */
2025
+ class TalosStepperNextDirective {
2026
+ stepper = inject(forwardRef(() => TalosStepperComponent), { optional: true });
2027
+ /**
2028
+ * Explicit stepper reference if the button resides outside the `<talos-stepper>` tree.
2029
+ */
2030
+ talosStepperNext = input(null, { ...(ngDevMode ? { debugName: "talosStepperNext" } : /* istanbul ignore next */ {}), transform: (val) => typeof val === 'string' || val === null || val === undefined ? null : val });
2031
+ onClick() {
2032
+ const target = this.talosStepperNext() ?? this.stepper;
2033
+ if (target) {
2034
+ target.next();
2035
+ }
2036
+ }
2037
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperNextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2038
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosStepperNextDirective, isStandalone: true, selector: "[talosStepperNext], button[talosStepperNext]", inputs: { talosStepperNext: { classPropertyName: "talosStepperNext", publicName: "talosStepperNext", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" } }, ngImport: i0 });
2039
+ }
2040
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperNextDirective, decorators: [{
2041
+ type: Directive,
2042
+ args: [{
2043
+ selector: '[talosStepperNext], button[talosStepperNext]',
2044
+ host: {
2045
+ 'type': 'button',
2046
+ '(click)': 'onClick()'
2047
+ }
2048
+ }]
2049
+ }], propDecorators: { talosStepperNext: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosStepperNext", required: false }] }] } });
2050
+ /**
2051
+ * Button directive that returns the parent `<talos-stepper>` to the previous step when clicked.
2052
+ *
2053
+ * Usage:
2054
+ * ```html
2055
+ * <button talosButton variant="secondary" talosStepperPrevious>Back</button>
2056
+ * ```
2057
+ */
2058
+ class TalosStepperPreviousDirective {
2059
+ stepper = inject(forwardRef(() => TalosStepperComponent), { optional: true });
2060
+ /**
2061
+ * Explicit stepper reference if the button resides outside the `<talos-stepper>` tree.
2062
+ */
2063
+ talosStepperPrevious = input(null, { ...(ngDevMode ? { debugName: "talosStepperPrevious" } : /* istanbul ignore next */ {}), transform: (val) => typeof val === 'string' || val === null || val === undefined ? null : val });
2064
+ onClick() {
2065
+ const target = this.talosStepperPrevious() ?? this.stepper;
2066
+ if (target) {
2067
+ target.previous();
2068
+ }
2069
+ }
2070
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperPreviousDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2071
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosStepperPreviousDirective, isStandalone: true, selector: "[talosStepperPrevious], button[talosStepperPrevious]", inputs: { talosStepperPrevious: { classPropertyName: "talosStepperPrevious", publicName: "talosStepperPrevious", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" } }, ngImport: i0 });
2072
+ }
2073
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperPreviousDirective, decorators: [{
2074
+ type: Directive,
2075
+ args: [{
2076
+ selector: '[talosStepperPrevious], button[talosStepperPrevious]',
2077
+ host: {
2078
+ 'type': 'button',
2079
+ '(click)': 'onClick()'
2080
+ }
2081
+ }]
2082
+ }], propDecorators: { talosStepperPrevious: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosStepperPrevious", required: false }] }] } });
2083
+ /**
2084
+ * Button directive that resets the parent `<talos-stepper>` back to step 0 when clicked.
2085
+ *
2086
+ * Usage:
2087
+ * ```html
2088
+ * <button talosButton variant="outline" talosStepperReset>Reset Wizard</button>
2089
+ * ```
2090
+ */
2091
+ class TalosStepperResetDirective {
2092
+ stepper = inject(forwardRef(() => TalosStepperComponent), { optional: true });
2093
+ /**
2094
+ * Explicit stepper reference if the button resides outside the `<talos-stepper>` tree.
2095
+ */
2096
+ talosStepperReset = input(null, { ...(ngDevMode ? { debugName: "talosStepperReset" } : /* istanbul ignore next */ {}), transform: (val) => typeof val === 'string' || val === null || val === undefined ? null : val });
2097
+ onClick() {
2098
+ const target = this.talosStepperReset() ?? this.stepper;
2099
+ if (target) {
2100
+ target.reset();
2101
+ }
2102
+ }
2103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperResetDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2104
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosStepperResetDirective, isStandalone: true, selector: "[talosStepperReset], button[talosStepperReset]", inputs: { talosStepperReset: { classPropertyName: "talosStepperReset", publicName: "talosStepperReset", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "onClick()" } }, ngImport: i0 });
2105
+ }
2106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperResetDirective, decorators: [{
2107
+ type: Directive,
2108
+ args: [{
2109
+ selector: '[talosStepperReset], button[talosStepperReset]',
2110
+ host: {
2111
+ 'type': 'button',
2112
+ '(click)': 'onClick()'
2113
+ }
2114
+ }]
2115
+ }], propDecorators: { talosStepperReset: [{ type: i0.Input, args: [{ isSignal: true, alias: "talosStepperReset", required: false }] }] } });
2116
+
2117
+ const STEPPER_DECLARATIONS = [
2118
+ TalosStepperComponent,
2119
+ TalosStepComponent,
2120
+ TalosStepLabelDirective,
2121
+ TalosStepContentDirective,
2122
+ TalosStepIconDirective,
2123
+ TalosStepperNextDirective,
2124
+ TalosStepperPreviousDirective,
2125
+ TalosStepperResetDirective
2126
+ ];
2127
+ class TalosStepperModule {
2128
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2129
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperModule, imports: [TalosStepperComponent,
2130
+ TalosStepComponent,
2131
+ TalosStepLabelDirective,
2132
+ TalosStepContentDirective,
2133
+ TalosStepIconDirective,
2134
+ TalosStepperNextDirective,
2135
+ TalosStepperPreviousDirective,
2136
+ TalosStepperResetDirective], exports: [TalosStepperComponent,
2137
+ TalosStepComponent,
2138
+ TalosStepLabelDirective,
2139
+ TalosStepContentDirective,
2140
+ TalosStepIconDirective,
2141
+ TalosStepperNextDirective,
2142
+ TalosStepperPreviousDirective,
2143
+ TalosStepperResetDirective] });
2144
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperModule, imports: [TalosStepperComponent,
2145
+ TalosStepComponent] });
2146
+ }
2147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosStepperModule, decorators: [{
2148
+ type: NgModule,
2149
+ args: [{
2150
+ imports: [...STEPPER_DECLARATIONS],
2151
+ exports: [...STEPPER_DECLARATIONS]
2152
+ }]
2153
+ }] });
2154
+
846
2155
  /**
847
2156
  * Generated bundle index. Do not edit.
848
2157
  */
849
2158
 
850
- export { LayoutService, MainLayoutComponent, SidePanelComponent, TalosCardActionsDirective, TalosCardAvatarDirective, TalosCardBodyComponent, TalosCardComponent, TalosCardFooterComponent, TalosCardHeaderComponent, TalosCardMediaDirective, TalosCardModule, TalosCardSubtitleDirective, TalosCardTitleDirective, TalosExpansionPanelActionsDirective, TalosExpansionPanelBodyComponent, TalosExpansionPanelComponent, TalosExpansionPanelContentDirective, TalosExpansionPanelDescriptionDirective, TalosExpansionPanelGroupComponent, TalosExpansionPanelHeaderComponent, TalosExpansionPanelIconDirective, TalosExpansionPanelModule, TalosExpansionPanelTitleDirective, TalosExpansionPanelToggleDirective };
2159
+ export { LayoutService, MainLayoutComponent, SidePanelComponent, TalosCardActionsDirective, TalosCardAvatarDirective, TalosCardBodyComponent, TalosCardComponent, TalosCardFooterComponent, TalosCardHeaderComponent, TalosCardMediaDirective, TalosCardModule, TalosCardSubtitleDirective, TalosCardTitleDirective, TalosExpansionPanelActionsDirective, TalosExpansionPanelBodyComponent, TalosExpansionPanelComponent, TalosExpansionPanelContentDirective, TalosExpansionPanelDescriptionDirective, TalosExpansionPanelGroupComponent, TalosExpansionPanelHeaderComponent, TalosExpansionPanelIconDirective, TalosExpansionPanelModule, TalosExpansionPanelTitleDirective, TalosExpansionPanelToggleDirective, TalosStepComponent, TalosStepContentDirective, TalosStepIconDirective, TalosStepLabelDirective, TalosStepperComponent, TalosStepperModule, TalosStepperNextDirective, TalosStepperPreviousDirective, TalosStepperResetDirective, TalosTabComponent, TalosTabContentDirective, TalosTabLabelDirective, TalosTabsComponent, TalosTabsModule };
851
2160
  //# sourceMappingURL=weeehaoooz-talos-ui-layout.mjs.map