@cdevhub/ngx-tw 0.2.1 → 0.3.0

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 (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -89,32 +89,43 @@ const DEFAULT_FORMATTER = (value, max, min) => {
89
89
  */
90
90
  class ProgressBarComponent {
91
91
  /** Current progress value. When null or undefined, the bar renders indeterminate. Values outside `[options.min, options.max]` are clamped. */
92
- value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
92
+ value = input(null, /* @ts-ignore */
93
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
93
94
  /** Visual style of the bar. `'linear'` renders a single fill; `'segmented'` splits the rail into discrete steps. Defaults to `'linear'`. */
94
- variant = input('linear', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
95
+ variant = input('linear', /* @ts-ignore */
96
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
95
97
  /** Semantic color of the filled portion. Defaults to `'primary'`. Use status colors (`success`/`warning`/`error`) to reflect task outcome. */
96
- color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
98
+ color = input('primary', /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
97
100
  /** Bar thickness. `'sm'` = h-1, `'md'` = h-2, `'lg'` = h-3. Defaults to `'md'`. */
98
- size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
101
+ size = input('md', /* @ts-ignore */
102
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
99
103
  /** Visible label rendered above the bar. When set, the bar is wired to the label via `aria-labelledby`. */
100
- label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
104
+ label = input(undefined, /* @ts-ignore */
105
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
101
106
  /** Bundles non-visual configuration: value range (`min`/`max`/`segments`), value readout (`showValue`/`formatter`), and accessibility fallbacks (`ariaLabel`/`ariaLabelledby`). Every field is optional. */
102
- options = input(undefined, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
107
+ options = input(undefined, /* @ts-ignore */
108
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
103
109
  /** @internal */
104
110
  labelId = `tw-progress-bar-${nextId++}-label`;
105
111
  /** @internal */
106
- resolvedMin = computed(() => this.options()?.min ?? 0, ...(ngDevMode ? [{ debugName: "resolvedMin" }] : /* istanbul ignore next */ []));
112
+ resolvedMin = computed(() => this.options()?.min ?? 0, /* @ts-ignore */
113
+ ...(ngDevMode ? [{ debugName: "resolvedMin" }] : /* istanbul ignore next */ []));
107
114
  /** @internal */
108
- resolvedMax = computed(() => this.options()?.max ?? 100, ...(ngDevMode ? [{ debugName: "resolvedMax" }] : /* istanbul ignore next */ []));
115
+ resolvedMax = computed(() => this.options()?.max ?? 100, /* @ts-ignore */
116
+ ...(ngDevMode ? [{ debugName: "resolvedMax" }] : /* istanbul ignore next */ []));
109
117
  /** @internal */
110
- resolvedSegments = computed(() => this.options()?.segments ?? 5, ...(ngDevMode ? [{ debugName: "resolvedSegments" }] : /* istanbul ignore next */ []));
118
+ resolvedSegments = computed(() => this.options()?.segments ?? 5, /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "resolvedSegments" }] : /* istanbul ignore next */ []));
111
120
  /** @internal */
112
- resolvedShowValue = computed(() => this.options()?.showValue ?? false, ...(ngDevMode ? [{ debugName: "resolvedShowValue" }] : /* istanbul ignore next */ []));
121
+ resolvedShowValue = computed(() => this.options()?.showValue ?? false, /* @ts-ignore */
122
+ ...(ngDevMode ? [{ debugName: "resolvedShowValue" }] : /* istanbul ignore next */ []));
113
123
  /** @internal */
114
124
  isIndeterminate = computed(() => {
115
125
  const v = this.value();
116
126
  return v === null || v === undefined;
117
- }, ...(ngDevMode ? [{ debugName: "isIndeterminate" }] : /* istanbul ignore next */ []));
127
+ }, /* @ts-ignore */
128
+ ...(ngDevMode ? [{ debugName: "isIndeterminate" }] : /* istanbul ignore next */ []));
118
129
  /** @internal */
119
130
  clampedValue = computed(() => {
120
131
  const v = this.value();
@@ -127,7 +138,8 @@ class ProgressBarComponent {
127
138
  if (v > hi)
128
139
  return hi;
129
140
  return v;
130
- }, ...(ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []));
141
+ }, /* @ts-ignore */
142
+ ...(ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []));
131
143
  /** @internal */
132
144
  progressRatio = computed(() => {
133
145
  if (this.isIndeterminate())
@@ -136,21 +148,25 @@ class ProgressBarComponent {
136
148
  if (range <= 0)
137
149
  return 0;
138
150
  return (this.clampedValue() - this.resolvedMin()) / range;
139
- }, ...(ngDevMode ? [{ debugName: "progressRatio" }] : /* istanbul ignore next */ []));
151
+ }, /* @ts-ignore */
152
+ ...(ngDevMode ? [{ debugName: "progressRatio" }] : /* istanbul ignore next */ []));
140
153
  /** @internal */
141
154
  formattedValue = computed(() => {
142
155
  if (this.isIndeterminate())
143
156
  return '';
144
157
  const fmt = this.options()?.formatter ?? DEFAULT_FORMATTER;
145
158
  return fmt(this.clampedValue(), this.resolvedMax(), this.resolvedMin());
146
- }, ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
159
+ }, /* @ts-ignore */
160
+ ...(ngDevMode ? [{ debugName: "formattedValue" }] : /* istanbul ignore next */ []));
147
161
  /** @internal */
148
- hasHeader = computed(() => !!this.label() || this.resolvedShowValue(), ...(ngDevMode ? [{ debugName: "hasHeader" }] : /* istanbul ignore next */ []));
162
+ hasHeader = computed(() => !!this.label() || this.resolvedShowValue(), /* @ts-ignore */
163
+ ...(ngDevMode ? [{ debugName: "hasHeader" }] : /* istanbul ignore next */ []));
149
164
  /** @internal */
150
165
  segmentIndices = computed(() => {
151
166
  const n = Math.max(1, Math.floor(this.resolvedSegments()));
152
167
  return Array.from({ length: n }, (_, i) => i);
153
- }, ...(ngDevMode ? [{ debugName: "segmentIndices" }] : /* istanbul ignore next */ []));
168
+ }, /* @ts-ignore */
169
+ ...(ngDevMode ? [{ debugName: "segmentIndices" }] : /* istanbul ignore next */ []));
154
170
  /** @internal */
155
171
  resolvedAriaLabel = computed(() => {
156
172
  if (this.label())
@@ -158,28 +174,39 @@ class ProgressBarComponent {
158
174
  if (this.options()?.ariaLabelledby)
159
175
  return null;
160
176
  return this.options()?.ariaLabel ?? null;
161
- }, ...(ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : /* istanbul ignore next */ []));
177
+ }, /* @ts-ignore */
178
+ ...(ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : /* istanbul ignore next */ []));
162
179
  /** @internal */
163
180
  resolvedAriaLabelledby = computed(() => {
164
181
  if (this.label())
165
182
  return this.labelId;
166
183
  return this.options()?.ariaLabelledby ?? null;
167
- }, ...(ngDevMode ? [{ debugName: "resolvedAriaLabelledby" }] : /* istanbul ignore next */ []));
184
+ }, /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "resolvedAriaLabelledby" }] : /* istanbul ignore next */ []));
168
186
  // ── tv() slot computeds ──
169
187
  variantResult = computed(() => progressBarVariants({
170
188
  size: this.size(),
171
189
  variant: this.variant(),
172
190
  isIndeterminate: this.isIndeterminate(),
173
191
  hasHeader: this.hasHeader(),
174
- }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
175
- rootClasses = computed(() => this.variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
176
- headerClasses = computed(() => this.variantResult().header(), ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
177
- labelClasses = computed(() => this.variantResult().label(), ...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
178
- valueTextClasses = computed(() => this.variantResult().valueText(), ...(ngDevMode ? [{ debugName: "valueTextClasses" }] : /* istanbul ignore next */ []));
179
- railClasses = computed(() => this.variantResult().rail(), ...(ngDevMode ? [{ debugName: "railClasses" }] : /* istanbul ignore next */ []));
180
- fillClasses = computed(() => `${this.variantResult().fill()} ${FILL_COLORS[this.color()]}`, ...(ngDevMode ? [{ debugName: "fillClasses" }] : /* istanbul ignore next */ []));
181
- segmentListClasses = computed(() => this.variantResult().segmentList(), ...(ngDevMode ? [{ debugName: "segmentListClasses" }] : /* istanbul ignore next */ []));
182
- segmentBaseClasses = computed(() => this.variantResult().segment(), ...(ngDevMode ? [{ debugName: "segmentBaseClasses" }] : /* istanbul ignore next */ []));
192
+ }), /* @ts-ignore */
193
+ ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
194
+ rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
196
+ headerClasses = computed(() => this.variantResult().header(), /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
198
+ labelClasses = computed(() => this.variantResult().label(), /* @ts-ignore */
199
+ ...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
200
+ valueTextClasses = computed(() => this.variantResult().valueText(), /* @ts-ignore */
201
+ ...(ngDevMode ? [{ debugName: "valueTextClasses" }] : /* istanbul ignore next */ []));
202
+ railClasses = computed(() => this.variantResult().rail(), /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "railClasses" }] : /* istanbul ignore next */ []));
204
+ fillClasses = computed(() => `${this.variantResult().fill()} ${FILL_COLORS[this.color()]}`, /* @ts-ignore */
205
+ ...(ngDevMode ? [{ debugName: "fillClasses" }] : /* istanbul ignore next */ []));
206
+ segmentListClasses = computed(() => this.variantResult().segmentList(), /* @ts-ignore */
207
+ ...(ngDevMode ? [{ debugName: "segmentListClasses" }] : /* istanbul ignore next */ []));
208
+ segmentBaseClasses = computed(() => this.variantResult().segment(), /* @ts-ignore */
209
+ ...(ngDevMode ? [{ debugName: "segmentBaseClasses" }] : /* istanbul ignore next */ []));
183
210
  /** @internal */
184
211
  segmentClassFor(index) {
185
212
  const base = this.segmentBaseClasses();
@@ -214,8 +241,8 @@ class ProgressBarComponent {
214
241
  });
215
242
  });
216
243
  }
217
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
218
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: ProgressBarComponent, isStandalone: true, selector: "tw-progress-bar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()" } }, ngImport: i0, template: `
244
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
245
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: ProgressBarComponent, isStandalone: true, selector: "tw-progress-bar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "rootClasses()" } }, ngImport: i0, template: `
219
246
  @if (hasHeader()) {
220
247
  <div [class]="headerClasses()">
221
248
  @if (label(); as lbl) {
@@ -266,7 +293,7 @@ class ProgressBarComponent {
266
293
  }
267
294
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
268
295
  }
269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ProgressBarComponent, decorators: [{
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: ProgressBarComponent, decorators: [{
270
297
  type: Component,
271
298
  args: [{
272
299
  selector: 'tw-progress-bar',
@@ -1 +1 @@
1
- {"version":3,"file":"cdevhub-ngx-tw-progress-bar.mjs","sources":["../../../projects/ngx-tw/progress-bar/progress-bar.ts","../../../projects/ngx-tw/progress-bar/cdevhub-ngx-tw-progress-bar.ts"],"sourcesContent":["/**\n * `tw-progress-bar` — visualises measurable progress.\n *\n * Composition usecases:\n * - Upload progress (determinate linear with `options.formatter` → `\"3.2 MB / 10 MB\"`).\n * - Multi-step wizard (segmented variant, `options.segments` = step count).\n * - Skill / rating display (static determinate linear).\n * - Inline list-row progress (compact `size=\"sm\"`, constrained width via host class).\n * - Card-footer task completion (`options.showValue=true`, `color` switches to `success`/`error`).\n * - Indeterminate loading before first byte (omit `value` — the bar sweeps).\n *\n * For unknown-duration operations with no measurable progress, use `tw-spinner` instead.\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n untracked,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor } from '@cdevhub/ngx-tw/core';\n\n// `ngDevMode` is a globalThis flag set by Angular's build tooling — true in dev,\n// `false` in production builds. The `typeof` guard keeps the warning path safe\n// in environments (SSR, ad-hoc test harnesses) where the global is undeclared.\n// Preferred over `isDevMode()` because the latter is a runtime function call;\n// `ngDevMode` is a build-time constant the bundler can dead-code-eliminate.\ndeclare const ngDevMode: boolean | undefined;\n\n/** Visual style of the progress bar. */\nexport type ProgressBarVariant = 'linear' | 'segmented';\n\n/** Size scale specific to progress bars (bar thickness). */\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\n\n/** Function signature for formatting the visible / announced progress value. */\nexport type ProgressBarValueFormatter = (value: number, max: number, min: number) => string;\n\n/**\n * Non-visual configuration bundled into a single input to keep the component's public\n * surface small. Every field is optional and falls back to a sensible default.\n */\nexport interface ProgressBarOptions {\n /** Lower bound of the value range. Defaults to `0`. */\n min?: number;\n /** Upper bound of the value range. Defaults to `100`. */\n max?: number;\n /** Number of equal cells when `variant` is `'segmented'`. Ignored for `'linear'`. Defaults to `5`. */\n segments?: number;\n /** When true, renders the formatted progress value next to the label. Defaults to `false`. */\n showValue?: boolean;\n /** Custom formatter for the displayed and announced value. Defaults to an integer percentage, e.g. `'42%'`. */\n formatter?: ProgressBarValueFormatter;\n /** Accessible name when no visible `label` is provided. Mirrored to `aria-label` on the progressbar element. */\n ariaLabel?: string;\n /** ID of an external element that labels the progress bar. Mirrored to `aria-labelledby`. */\n ariaLabelledby?: string;\n}\n\n// ── Static fill-color lookup (Tailwind v4 scans class strings statically) ──\n\nconst FILL_COLORS: Record<TwColor, string> = {\n primary: 'bg-primary-500',\n secondary: 'bg-secondary-500',\n accent: 'bg-accent-500',\n neutral: 'bg-fg',\n info: 'bg-info-500',\n success: 'bg-success-500',\n warning: 'bg-warning-500',\n error: 'bg-error-500',\n};\n\n// ── tv() config ──\n\nconst progressBarVariants = tv({\n slots: {\n root: 'flex flex-col w-full',\n header: 'flex items-center justify-between gap-3',\n label: 'text-xs text-fg-muted',\n valueText: 'text-xs text-fg-muted font-medium tabular-nums',\n rail: 'relative w-full overflow-hidden rounded-full bg-surface-muted',\n fill: 'absolute inset-y-0 left-0 rounded-full',\n segmentList: 'flex w-full gap-1',\n segment: 'flex-1 rounded-full',\n },\n variants: {\n size: {\n sm: { rail: 'h-1', segment: 'h-1' },\n md: { rail: 'h-2', segment: 'h-2' },\n lg: { rail: 'h-3', segment: 'h-3' },\n },\n variant: {\n linear: { segmentList: 'hidden' },\n segmented: { rail: 'hidden' },\n },\n isIndeterminate: {\n true: { fill: 'w-[30%] animate-progress-bar-indeterminate' },\n false: { fill: 'transition-[width] duration-normal motion-reduce:transition-none' },\n },\n hasHeader: {\n true: { root: 'gap-1.5' },\n false: { root: 'gap-0' },\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'linear',\n isIndeterminate: false,\n hasHeader: false,\n },\n}, {\n twMerge: true,\n});\n\nlet nextId = 0;\n\nconst DEFAULT_FORMATTER: ProgressBarValueFormatter = (value, max, min) => {\n const range = max - min;\n if (range <= 0) return '0%';\n return `${Math.round(((value - min) / range) * 100)}%`;\n};\n\n/**\n * Indicates progress toward the completion of a task.\n *\n * @example\n * ```html\n * <tw-progress-bar [value]=\"40\" />\n * <tw-progress-bar label=\"Fetching records\" />\n * <tw-progress-bar\n * variant=\"segmented\"\n * [value]=\"step() * 25\"\n * [options]=\"{ segments: 4 }\"\n * />\n * ```\n */\n@Component({\n selector: 'tw-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n },\n template: `\n @if (hasHeader()) {\n <div [class]=\"headerClasses()\">\n @if (label(); as lbl) {\n <span [id]=\"labelId\" [class]=\"labelClasses()\">{{ lbl }}</span>\n } @else {\n <span></span>\n }\n @if (resolvedShowValue() && !isIndeterminate()) {\n <span [class]=\"valueTextClasses()\">{{ formattedValue() }}</span>\n }\n </div>\n }\n\n @if (variant() === 'linear') {\n <div\n [class]=\"railClasses()\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"resolvedMin()\"\n [attr.aria-valuemax]=\"resolvedMax()\"\n [attr.aria-valuenow]=\"isIndeterminate() ? null : clampedValue()\"\n [attr.aria-valuetext]=\"isIndeterminate() ? null : formattedValue()\"\n [attr.aria-busy]=\"isIndeterminate() ? true : null\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledby()\"\n >\n @if (isIndeterminate()) {\n <span [class]=\"fillClasses()\"></span>\n } @else {\n <span [class]=\"fillClasses()\" [style.width.%]=\"progressRatio() * 100\"></span>\n }\n </div>\n } @else {\n <div\n [class]=\"segmentListClasses()\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"resolvedMin()\"\n [attr.aria-valuemax]=\"resolvedMax()\"\n [attr.aria-valuenow]=\"isIndeterminate() ? null : clampedValue()\"\n [attr.aria-valuetext]=\"isIndeterminate() ? null : formattedValue()\"\n [attr.aria-busy]=\"isIndeterminate() ? true : null\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledby()\"\n >\n @for (i of segmentIndices(); track i) {\n <span [class]=\"segmentClassFor(i)\"></span>\n }\n </div>\n }\n `,\n})\nexport class ProgressBarComponent {\n /** Current progress value. When null or undefined, the bar renders indeterminate. Values outside `[options.min, options.max]` are clamped. */\n readonly value = input<number | null | undefined>(null);\n\n /** Visual style of the bar. `'linear'` renders a single fill; `'segmented'` splits the rail into discrete steps. Defaults to `'linear'`. */\n readonly variant = input<ProgressBarVariant>('linear');\n\n /** Semantic color of the filled portion. Defaults to `'primary'`. Use status colors (`success`/`warning`/`error`) to reflect task outcome. */\n readonly color = input<TwColor>('primary');\n\n /** Bar thickness. `'sm'` = h-1, `'md'` = h-2, `'lg'` = h-3. Defaults to `'md'`. */\n readonly size = input<ProgressBarSize>('md');\n\n /** Visible label rendered above the bar. When set, the bar is wired to the label via `aria-labelledby`. */\n readonly label = input<string | undefined>(undefined);\n\n /** Bundles non-visual configuration: value range (`min`/`max`/`segments`), value readout (`showValue`/`formatter`), and accessibility fallbacks (`ariaLabel`/`ariaLabelledby`). Every field is optional. */\n readonly options = input<ProgressBarOptions | undefined>(undefined);\n\n /** @internal */\n readonly labelId = `tw-progress-bar-${nextId++}-label`;\n\n /** @internal */\n readonly resolvedMin = computed(() => this.options()?.min ?? 0);\n\n /** @internal */\n readonly resolvedMax = computed(() => this.options()?.max ?? 100);\n\n /** @internal */\n readonly resolvedSegments = computed(() => this.options()?.segments ?? 5);\n\n /** @internal */\n readonly resolvedShowValue = computed(() => this.options()?.showValue ?? false);\n\n /** @internal */\n readonly isIndeterminate = computed(() => {\n const v = this.value();\n return v === null || v === undefined;\n });\n\n /** @internal */\n readonly clampedValue = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return this.resolvedMin();\n const lo = this.resolvedMin();\n const hi = this.resolvedMax();\n if (v < lo) return lo;\n if (v > hi) return hi;\n return v;\n });\n\n /** @internal */\n readonly progressRatio = computed(() => {\n if (this.isIndeterminate()) return 0;\n const range = this.resolvedMax() - this.resolvedMin();\n if (range <= 0) return 0;\n return (this.clampedValue() - this.resolvedMin()) / range;\n });\n\n /** @internal */\n readonly formattedValue = computed(() => {\n if (this.isIndeterminate()) return '';\n const fmt = this.options()?.formatter ?? DEFAULT_FORMATTER;\n return fmt(this.clampedValue(), this.resolvedMax(), this.resolvedMin());\n });\n\n /** @internal */\n readonly hasHeader = computed(() => !!this.label() || this.resolvedShowValue());\n\n /** @internal */\n readonly segmentIndices = computed(() => {\n const n = Math.max(1, Math.floor(this.resolvedSegments()));\n return Array.from({ length: n }, (_, i) => i);\n });\n\n /** @internal */\n readonly resolvedAriaLabel = computed(() => {\n if (this.label()) return null;\n if (this.options()?.ariaLabelledby) return null;\n return this.options()?.ariaLabel ?? null;\n });\n\n /** @internal */\n readonly resolvedAriaLabelledby = computed(() => {\n if (this.label()) return this.labelId;\n return this.options()?.ariaLabelledby ?? null;\n });\n\n // ── tv() slot computeds ──\n\n private readonly variantResult = computed(() =>\n progressBarVariants({\n size: this.size(),\n variant: this.variant(),\n isIndeterminate: this.isIndeterminate(),\n hasHeader: this.hasHeader(),\n }),\n );\n\n readonly rootClasses = computed(() => this.variantResult().root());\n readonly headerClasses = computed(() => this.variantResult().header());\n readonly labelClasses = computed(() => this.variantResult().label());\n readonly valueTextClasses = computed(() => this.variantResult().valueText());\n readonly railClasses = computed(() => this.variantResult().rail());\n readonly fillClasses = computed(() => `${this.variantResult().fill()} ${FILL_COLORS[this.color()]}`);\n readonly segmentListClasses = computed(() => this.variantResult().segmentList());\n private readonly segmentBaseClasses = computed(() => this.variantResult().segment());\n\n /** @internal */\n segmentClassFor(index: number): string {\n const base = this.segmentBaseClasses();\n const filled = (index + 1) / this.segmentIndices().length <= this.progressRatio();\n const bg = filled ? FILL_COLORS[this.color()] : 'bg-surface-muted';\n return `${base} ${bg}`;\n }\n\n // ── Dev-mode accessible-name warning (fires once per instance) ──\n //\n // The effect is reactive on purpose: if a consumer mounts the component\n // without a label and later removes the only accessible name they had, the\n // warning still fires on the *first* render where no name is present. Once\n // it has fired, `warned` short-circuits further evaluations. Production\n // builds skip the entire effect setup because `ngDevMode` is statically\n // `false` and the constructor returns early.\n\n constructor() {\n if (typeof ngDevMode !== 'undefined' && !ngDevMode) return;\n let warned = false;\n effect(() => {\n if (warned) return;\n const opts = this.options();\n if (this.label() || opts?.ariaLabel || opts?.ariaLabelledby) return;\n // `untracked` wraps the side-effect so the console.warn / flag mutation\n // can never create a reactive subscription — defensive in case future\n // work adds signal reads inside the warning block.\n untracked(() => {\n warned = true;\n console.warn(\n 'tw-progress-bar: no accessible name provided. Supply one of `label`, `options.ariaLabel`, or `options.ariaLabelledby`.',\n );\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdevhub-ngx-tw-progress-bar.mjs","sources":["../../../projects/ngx-tw/progress-bar/progress-bar.ts","../../../projects/ngx-tw/progress-bar/cdevhub-ngx-tw-progress-bar.ts"],"sourcesContent":["/**\n * `tw-progress-bar` — visualises measurable progress.\n *\n * Composition usecases:\n * - Upload progress (determinate linear with `options.formatter` → `\"3.2 MB / 10 MB\"`).\n * - Multi-step wizard (segmented variant, `options.segments` = step count).\n * - Skill / rating display (static determinate linear).\n * - Inline list-row progress (compact `size=\"sm\"`, constrained width via host class).\n * - Card-footer task completion (`options.showValue=true`, `color` switches to `success`/`error`).\n * - Indeterminate loading before first byte (omit `value` — the bar sweeps).\n *\n * For unknown-duration operations with no measurable progress, use `tw-spinner` instead.\n */\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n untracked,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor } from '@cdevhub/ngx-tw/core';\n\n// `ngDevMode` is a globalThis flag set by Angular's build tooling — true in dev,\n// `false` in production builds. The `typeof` guard keeps the warning path safe\n// in environments (SSR, ad-hoc test harnesses) where the global is undeclared.\n// Preferred over `isDevMode()` because the latter is a runtime function call;\n// `ngDevMode` is a build-time constant the bundler can dead-code-eliminate.\ndeclare const ngDevMode: boolean | undefined;\n\n/** Visual style of the progress bar. */\nexport type ProgressBarVariant = 'linear' | 'segmented';\n\n/** Size scale specific to progress bars (bar thickness). */\nexport type ProgressBarSize = 'sm' | 'md' | 'lg';\n\n/** Function signature for formatting the visible / announced progress value. */\nexport type ProgressBarValueFormatter = (value: number, max: number, min: number) => string;\n\n/**\n * Non-visual configuration bundled into a single input to keep the component's public\n * surface small. Every field is optional and falls back to a sensible default.\n */\nexport interface ProgressBarOptions {\n /** Lower bound of the value range. Defaults to `0`. */\n min?: number;\n /** Upper bound of the value range. Defaults to `100`. */\n max?: number;\n /** Number of equal cells when `variant` is `'segmented'`. Ignored for `'linear'`. Defaults to `5`. */\n segments?: number;\n /** When true, renders the formatted progress value next to the label. Defaults to `false`. */\n showValue?: boolean;\n /** Custom formatter for the displayed and announced value. Defaults to an integer percentage, e.g. `'42%'`. */\n formatter?: ProgressBarValueFormatter;\n /** Accessible name when no visible `label` is provided. Mirrored to `aria-label` on the progressbar element. */\n ariaLabel?: string;\n /** ID of an external element that labels the progress bar. Mirrored to `aria-labelledby`. */\n ariaLabelledby?: string;\n}\n\n// ── Static fill-color lookup (Tailwind v4 scans class strings statically) ──\n\nconst FILL_COLORS: Record<TwColor, string> = {\n primary: 'bg-primary-500',\n secondary: 'bg-secondary-500',\n accent: 'bg-accent-500',\n neutral: 'bg-fg',\n info: 'bg-info-500',\n success: 'bg-success-500',\n warning: 'bg-warning-500',\n error: 'bg-error-500',\n};\n\n// ── tv() config ──\n\nconst progressBarVariants = tv({\n slots: {\n root: 'flex flex-col w-full',\n header: 'flex items-center justify-between gap-3',\n label: 'text-xs text-fg-muted',\n valueText: 'text-xs text-fg-muted font-medium tabular-nums',\n rail: 'relative w-full overflow-hidden rounded-full bg-surface-muted',\n fill: 'absolute inset-y-0 left-0 rounded-full',\n segmentList: 'flex w-full gap-1',\n segment: 'flex-1 rounded-full',\n },\n variants: {\n size: {\n sm: { rail: 'h-1', segment: 'h-1' },\n md: { rail: 'h-2', segment: 'h-2' },\n lg: { rail: 'h-3', segment: 'h-3' },\n },\n variant: {\n linear: { segmentList: 'hidden' },\n segmented: { rail: 'hidden' },\n },\n isIndeterminate: {\n true: { fill: 'w-[30%] animate-progress-bar-indeterminate' },\n false: { fill: 'transition-[width] duration-normal motion-reduce:transition-none' },\n },\n hasHeader: {\n true: { root: 'gap-1.5' },\n false: { root: 'gap-0' },\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'linear',\n isIndeterminate: false,\n hasHeader: false,\n },\n}, {\n twMerge: true,\n});\n\nlet nextId = 0;\n\nconst DEFAULT_FORMATTER: ProgressBarValueFormatter = (value, max, min) => {\n const range = max - min;\n if (range <= 0) return '0%';\n return `${Math.round(((value - min) / range) * 100)}%`;\n};\n\n/**\n * Indicates progress toward the completion of a task.\n *\n * @example\n * ```html\n * <tw-progress-bar [value]=\"40\" />\n * <tw-progress-bar label=\"Fetching records\" />\n * <tw-progress-bar\n * variant=\"segmented\"\n * [value]=\"step() * 25\"\n * [options]=\"{ segments: 4 }\"\n * />\n * ```\n */\n@Component({\n selector: 'tw-progress-bar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n },\n template: `\n @if (hasHeader()) {\n <div [class]=\"headerClasses()\">\n @if (label(); as lbl) {\n <span [id]=\"labelId\" [class]=\"labelClasses()\">{{ lbl }}</span>\n } @else {\n <span></span>\n }\n @if (resolvedShowValue() && !isIndeterminate()) {\n <span [class]=\"valueTextClasses()\">{{ formattedValue() }}</span>\n }\n </div>\n }\n\n @if (variant() === 'linear') {\n <div\n [class]=\"railClasses()\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"resolvedMin()\"\n [attr.aria-valuemax]=\"resolvedMax()\"\n [attr.aria-valuenow]=\"isIndeterminate() ? null : clampedValue()\"\n [attr.aria-valuetext]=\"isIndeterminate() ? null : formattedValue()\"\n [attr.aria-busy]=\"isIndeterminate() ? true : null\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledby()\"\n >\n @if (isIndeterminate()) {\n <span [class]=\"fillClasses()\"></span>\n } @else {\n <span [class]=\"fillClasses()\" [style.width.%]=\"progressRatio() * 100\"></span>\n }\n </div>\n } @else {\n <div\n [class]=\"segmentListClasses()\"\n role=\"progressbar\"\n [attr.aria-valuemin]=\"resolvedMin()\"\n [attr.aria-valuemax]=\"resolvedMax()\"\n [attr.aria-valuenow]=\"isIndeterminate() ? null : clampedValue()\"\n [attr.aria-valuetext]=\"isIndeterminate() ? null : formattedValue()\"\n [attr.aria-busy]=\"isIndeterminate() ? true : null\"\n [attr.aria-label]=\"resolvedAriaLabel()\"\n [attr.aria-labelledby]=\"resolvedAriaLabelledby()\"\n >\n @for (i of segmentIndices(); track i) {\n <span [class]=\"segmentClassFor(i)\"></span>\n }\n </div>\n }\n `,\n})\nexport class ProgressBarComponent {\n /** Current progress value. When null or undefined, the bar renders indeterminate. Values outside `[options.min, options.max]` are clamped. */\n readonly value = input<number | null | undefined>(null);\n\n /** Visual style of the bar. `'linear'` renders a single fill; `'segmented'` splits the rail into discrete steps. Defaults to `'linear'`. */\n readonly variant = input<ProgressBarVariant>('linear');\n\n /** Semantic color of the filled portion. Defaults to `'primary'`. Use status colors (`success`/`warning`/`error`) to reflect task outcome. */\n readonly color = input<TwColor>('primary');\n\n /** Bar thickness. `'sm'` = h-1, `'md'` = h-2, `'lg'` = h-3. Defaults to `'md'`. */\n readonly size = input<ProgressBarSize>('md');\n\n /** Visible label rendered above the bar. When set, the bar is wired to the label via `aria-labelledby`. */\n readonly label = input<string | undefined>(undefined);\n\n /** Bundles non-visual configuration: value range (`min`/`max`/`segments`), value readout (`showValue`/`formatter`), and accessibility fallbacks (`ariaLabel`/`ariaLabelledby`). Every field is optional. */\n readonly options = input<ProgressBarOptions | undefined>(undefined);\n\n /** @internal */\n readonly labelId = `tw-progress-bar-${nextId++}-label`;\n\n /** @internal */\n readonly resolvedMin = computed(() => this.options()?.min ?? 0);\n\n /** @internal */\n readonly resolvedMax = computed(() => this.options()?.max ?? 100);\n\n /** @internal */\n readonly resolvedSegments = computed(() => this.options()?.segments ?? 5);\n\n /** @internal */\n readonly resolvedShowValue = computed(() => this.options()?.showValue ?? false);\n\n /** @internal */\n readonly isIndeterminate = computed(() => {\n const v = this.value();\n return v === null || v === undefined;\n });\n\n /** @internal */\n readonly clampedValue = computed(() => {\n const v = this.value();\n if (v === null || v === undefined) return this.resolvedMin();\n const lo = this.resolvedMin();\n const hi = this.resolvedMax();\n if (v < lo) return lo;\n if (v > hi) return hi;\n return v;\n });\n\n /** @internal */\n readonly progressRatio = computed(() => {\n if (this.isIndeterminate()) return 0;\n const range = this.resolvedMax() - this.resolvedMin();\n if (range <= 0) return 0;\n return (this.clampedValue() - this.resolvedMin()) / range;\n });\n\n /** @internal */\n readonly formattedValue = computed(() => {\n if (this.isIndeterminate()) return '';\n const fmt = this.options()?.formatter ?? DEFAULT_FORMATTER;\n return fmt(this.clampedValue(), this.resolvedMax(), this.resolvedMin());\n });\n\n /** @internal */\n readonly hasHeader = computed(() => !!this.label() || this.resolvedShowValue());\n\n /** @internal */\n readonly segmentIndices = computed(() => {\n const n = Math.max(1, Math.floor(this.resolvedSegments()));\n return Array.from({ length: n }, (_, i) => i);\n });\n\n /** @internal */\n readonly resolvedAriaLabel = computed(() => {\n if (this.label()) return null;\n if (this.options()?.ariaLabelledby) return null;\n return this.options()?.ariaLabel ?? null;\n });\n\n /** @internal */\n readonly resolvedAriaLabelledby = computed(() => {\n if (this.label()) return this.labelId;\n return this.options()?.ariaLabelledby ?? null;\n });\n\n // ── tv() slot computeds ──\n\n private readonly variantResult = computed(() =>\n progressBarVariants({\n size: this.size(),\n variant: this.variant(),\n isIndeterminate: this.isIndeterminate(),\n hasHeader: this.hasHeader(),\n }),\n );\n\n readonly rootClasses = computed(() => this.variantResult().root());\n readonly headerClasses = computed(() => this.variantResult().header());\n readonly labelClasses = computed(() => this.variantResult().label());\n readonly valueTextClasses = computed(() => this.variantResult().valueText());\n readonly railClasses = computed(() => this.variantResult().rail());\n readonly fillClasses = computed(() => `${this.variantResult().fill()} ${FILL_COLORS[this.color()]}`);\n readonly segmentListClasses = computed(() => this.variantResult().segmentList());\n private readonly segmentBaseClasses = computed(() => this.variantResult().segment());\n\n /** @internal */\n segmentClassFor(index: number): string {\n const base = this.segmentBaseClasses();\n const filled = (index + 1) / this.segmentIndices().length <= this.progressRatio();\n const bg = filled ? FILL_COLORS[this.color()] : 'bg-surface-muted';\n return `${base} ${bg}`;\n }\n\n // ── Dev-mode accessible-name warning (fires once per instance) ──\n //\n // The effect is reactive on purpose: if a consumer mounts the component\n // without a label and later removes the only accessible name they had, the\n // warning still fires on the *first* render where no name is present. Once\n // it has fired, `warned` short-circuits further evaluations. Production\n // builds skip the entire effect setup because `ngDevMode` is statically\n // `false` and the constructor returns early.\n\n constructor() {\n if (typeof ngDevMode !== 'undefined' && !ngDevMode) return;\n let warned = false;\n effect(() => {\n if (warned) return;\n const opts = this.options();\n if (this.label() || opts?.ariaLabel || opts?.ariaLabelledby) return;\n // `untracked` wraps the side-effect so the console.warn / flag mutation\n // can never create a reactive subscription — defensive in case future\n // work adds signal reads inside the warning block.\n untracked(() => {\n warned = true;\n console.warn(\n 'tw-progress-bar: no accessible name provided. Supply one of `label`, `options.ariaLabel`, or `options.ariaLabelledby`.',\n );\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}