@weeehaoooz/talos-ui 0.1.0 → 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 (187) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +115 -18
  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 +1320 -11
  15. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
  16. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +119 -72
  17. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
  18. package/fesm2022/weeehaoooz-talos-ui.mjs +22190 -15213
  19. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
  20. package/package.json +20 -135
  21. package/styles/_breadcrumb.scss +16 -0
  22. package/styles/_button-group.scss +156 -7
  23. package/styles/_buttons.scss +156 -8
  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 +37 -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 +36 -10
  46. package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -1
  47. package/types/weeehaoooz-talos-ui.d.ts +6949 -4137
  48. package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
  49. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
  50. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -93
  51. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
  52. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
  53. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
  54. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
  55. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
  56. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
  57. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
  58. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
  59. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
  60. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
  61. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
  62. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
  63. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
  64. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
  65. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
  66. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
  67. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
  68. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
  69. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
  70. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
  71. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
  72. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
  73. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
  74. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
  75. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
  76. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
  77. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
  78. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
  79. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
  80. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
  81. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
  82. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
  83. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
  84. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
  85. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
  86. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
  87. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
  88. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
  89. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
  90. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
  91. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
  92. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
  93. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
  94. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
  95. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
  96. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
  97. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
  98. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
  99. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
  100. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
  101. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
  102. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
  103. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
  104. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
  105. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
  106. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
  107. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
  108. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
  109. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
  110. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
  111. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
  112. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
  113. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
  114. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
  115. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
  116. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
  117. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
  118. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -59
  119. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
  120. package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
  121. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
  122. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
  123. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
  124. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
  125. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
  126. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
  127. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
  128. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
  129. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
  130. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
  131. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
  132. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
  133. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
  134. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
  135. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
  136. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
  137. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
  138. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
  139. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
  140. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
  141. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
  142. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
  143. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
  144. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
  145. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
  146. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
  147. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
  148. package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
  149. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
  150. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
  151. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
  152. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
  153. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
  154. package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
  155. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
  156. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
  157. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
  158. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
  159. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
  160. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
  161. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
  162. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
  163. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
  164. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
  165. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
  166. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
  167. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
  168. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
  169. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
  170. package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
  171. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
  172. package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
  173. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
  174. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
  175. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
  176. package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
  177. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
  178. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
  179. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
  180. package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
  181. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
  182. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
  183. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
  184. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
  185. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
  186. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
  187. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
@@ -1,351 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { input, computed, Component, NgModule } from '@angular/core';
3
-
4
- /**
5
- * Types and interfaces for TalosMiniGaugeComponent
6
- */
7
-
8
- const PRESET_COLORS = {
9
- primary: '#2563eb',
10
- blue: '#3b82f6',
11
- success: '#16a34a',
12
- emerald: '#10b981',
13
- danger: '#ef4444',
14
- rose: '#f43f5e',
15
- warning: '#f59e0b',
16
- amber: '#d97706',
17
- info: '#0284c7',
18
- cyan: '#06b6d4',
19
- violet: '#8b5cf6',
20
- slate: '#64748b'
21
- };
22
- const DEFAULT_THRESHOLDS = [
23
- { from: 0, to: 60, color: '#10b981' },
24
- { from: 60, to: 85, color: '#f59e0b' },
25
- { from: 85, to: 100, color: '#ef4444' }
26
- ];
27
- class TalosMiniGaugeComponent {
28
- /** Current gauge value */
29
- value = input(0, /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
31
- /** Minimum gauge scale */
32
- min = input(0, /* @ts-ignore */
33
- ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
34
- /** Maximum gauge scale */
35
- max = input(100, /* @ts-ignore */
36
- ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
37
- /** Optional target benchmark marker value */
38
- target = input(null, /* @ts-ignore */
39
- ...(ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []));
40
- /** Gauge rendering style */
41
- type = input('semi-circle', /* @ts-ignore */
42
- ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
43
- /** Value indicator pointer style: arc fill, needle, or dot */
44
- indicator = input('arc', /* @ts-ignore */
45
- ...(ngDevMode ? [{ debugName: "indicator" }] : /* istanbul ignore next */ []));
46
- /** Custom colored threshold zones */
47
- thresholds = input(null, /* @ts-ignore */
48
- ...(ngDevMode ? [{ debugName: "thresholds" }] : /* istanbul ignore next */ []));
49
- /** Base color or palette when no thresholds are used */
50
- color = input('primary', /* @ts-ignore */
51
- ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
52
- /** Background track color */
53
- trackColor = input(null, /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "trackColor" }] : /* istanbul ignore next */ []));
55
- /** Preset size */
56
- size = input('md', /* @ts-ignore */
57
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
58
- /** Custom width */
59
- width = input(null, /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
61
- /** Custom height */
62
- height = input(null, /* @ts-ignore */
63
- ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
64
- /** Arc stroke width */
65
- strokeWidth = input(8, /* @ts-ignore */
66
- ...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
67
- /** Arc stroke linecap style ('round' | 'butt') */
68
- lineCap = input('round', /* @ts-ignore */
69
- ...(ngDevMode ? [{ debugName: "lineCap" }] : /* istanbul ignore next */ []));
70
- /** Show numerical value readout in center/bottom */
71
- showValue = input(true, /* @ts-ignore */
72
- ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
73
- /** Show min and max numbers at gauge edges */
74
- showMinMax = input(false, /* @ts-ignore */
75
- ...(ngDevMode ? [{ debugName: "showMinMax" }] : /* istanbul ignore next */ []));
76
- /** Unit label string (e.g. '%', 'ms', 'rpm') */
77
- unit = input('', /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []));
79
- /** Value formatter */
80
- valueFormatter = input((val) => val.toLocaleString(), /* @ts-ignore */
81
- ...(ngDevMode ? [{ debugName: "valueFormatter" }] : /* istanbul ignore next */ []));
82
- /** Custom ARIA label */
83
- ariaLabel = input(null, /* @ts-ignore */
84
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
85
- /** Enable animation */
86
- animated = input(true, /* @ts-ignore */
87
- ...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
88
- /** SVG Coordinate constants */
89
- cx = 50;
90
- cySemi = 44;
91
- cyArch = 42;
92
- radius = 36;
93
- /** Needle length tailored per circular gauge type */
94
- needleLength = computed(() => {
95
- return this.type() === 'semi-circle' ? 30 : 26;
96
- }, /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "needleLength" }] : /* istanbul ignore next */ []));
98
- hostWidth = computed(() => {
99
- const custom = this.width();
100
- if (custom !== null)
101
- return typeof custom === 'number' ? `${custom}px` : custom;
102
- if (this.size() === 'responsive')
103
- return '100%';
104
- return null;
105
- }, /* @ts-ignore */
106
- ...(ngDevMode ? [{ debugName: "hostWidth" }] : /* istanbul ignore next */ []));
107
- hostHeight = computed(() => {
108
- const custom = this.height();
109
- if (custom !== null)
110
- return typeof custom === 'number' ? `${custom}px` : custom;
111
- return null;
112
- }, /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "hostHeight" }] : /* istanbul ignore next */ []));
114
- /** Clamped and normalized ratio [0..1] */
115
- normalizedRatio = computed(() => {
116
- const val = this.value();
117
- const minVal = this.min();
118
- const maxVal = this.max();
119
- if (maxVal <= minVal)
120
- return 0;
121
- return Math.min(1, Math.max(0, (val - minVal) / (maxVal - minVal)));
122
- }, /* @ts-ignore */
123
- ...(ngDevMode ? [{ debugName: "normalizedRatio" }] : /* istanbul ignore next */ []));
124
- /** Target ratio [0..1] */
125
- targetRatio = computed(() => {
126
- const tgt = this.target();
127
- if (tgt === null)
128
- return null;
129
- const minVal = this.min();
130
- const maxVal = this.max();
131
- if (maxVal <= minVal)
132
- return 0;
133
- return Math.min(1, Math.max(0, (tgt - minVal) / (maxVal - minVal)));
134
- }, /* @ts-ignore */
135
- ...(ngDevMode ? [{ debugName: "targetRatio" }] : /* istanbul ignore next */ []));
136
- /** ViewBox string based on gauge type */
137
- viewBox = computed(() => {
138
- const t = this.type();
139
- if (t === 'semi-circle')
140
- return '0 0 100 50';
141
- if (t === 'arch')
142
- return '0 0 100 66';
143
- return '0 0 100 14';
144
- }, /* @ts-ignore */
145
- ...(ngDevMode ? [{ debugName: "viewBox" }] : /* istanbul ignore next */ []));
146
- /** Start & End angles in degrees for circular gauge types */
147
- angleSpan = computed(() => {
148
- const t = this.type();
149
- if (t === 'semi-circle') {
150
- return { start: 180, end: 0, total: 180 };
151
- }
152
- // Arch: 240 degree arc from 210° (bottom-left) to -30° (bottom-right)
153
- return { start: 210, end: -30, total: 240 };
154
- }, /* @ts-ignore */
155
- ...(ngDevMode ? [{ debugName: "angleSpan" }] : /* istanbul ignore next */ []));
156
- /** Current value angle in degrees */
157
- currentAngle = computed(() => {
158
- const { start, total } = this.angleSpan();
159
- const ratio = this.normalizedRatio();
160
- return start - ratio * total;
161
- }, /* @ts-ignore */
162
- ...(ngDevMode ? [{ debugName: "currentAngle" }] : /* istanbul ignore next */ []));
163
- /** Needle transform for needle indicator */
164
- needleTransform = computed(() => {
165
- const t = this.type();
166
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
167
- const angle = this.currentAngle();
168
- // SVG rotation: angle 0 is right, 180 is left. Standard SVG rotate origin is center.
169
- const svgRotation = 180 - angle;
170
- return `rotate(${svgRotation} ${this.cx} ${cy})`;
171
- }, /* @ts-ignore */
172
- ...(ngDevMode ? [{ debugName: "needleTransform" }] : /* istanbul ignore next */ []));
173
- /** Target marker position & rotation */
174
- targetMarkerProps = computed(() => {
175
- const ratio = this.targetRatio();
176
- if (ratio === null)
177
- return null;
178
- const t = this.type();
179
- if (t === 'linear') {
180
- return { x: ratio * 100, y: 0, rotation: 0 };
181
- }
182
- const { start, total } = this.angleSpan();
183
- const angle = start - ratio * total;
184
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
185
- const rad = (angle * Math.PI) / 180;
186
- const r = this.radius;
187
- const x = this.cx + r * Math.cos(rad);
188
- const y = cy - r * Math.sin(rad);
189
- return { x, y, angle };
190
- }, /* @ts-ignore */
191
- ...(ngDevMode ? [{ debugName: "targetMarkerProps" }] : /* istanbul ignore next */ []));
192
- /** Dot transform for dot indicator (rotates along the circular arc path) */
193
- dotTransform = computed(() => {
194
- const t = this.type();
195
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
196
- const angle = this.currentAngle();
197
- // SVG rotation: angle 0 is right, 180 is left. Standard SVG rotate origin is center.
198
- const svgRotation = 180 - angle;
199
- return `rotate(${svgRotation} ${this.cx} ${cy})`;
200
- }, /* @ts-ignore */
201
- ...(ngDevMode ? [{ debugName: "dotTransform" }] : /* istanbul ignore next */ []));
202
- /** Dot indicator position */
203
- dotIndicatorPosition = computed(() => {
204
- const t = this.type();
205
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
206
- const angle = this.currentAngle();
207
- const rad = (angle * Math.PI) / 180;
208
- const r = this.radius;
209
- const x = this.cx + r * Math.cos(rad);
210
- const y = cy - r * Math.sin(rad);
211
- return { x, y };
212
- }, /* @ts-ignore */
213
- ...(ngDevMode ? [{ debugName: "dotIndicatorPosition" }] : /* istanbul ignore next */ []));
214
- /** Base track SVG path */
215
- trackPath = computed(() => {
216
- const t = this.type();
217
- if (t === 'linear')
218
- return '';
219
- const { start, end } = this.angleSpan();
220
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
221
- return this.createArcSvgPath(this.cx, cy, this.radius, start, end);
222
- }, /* @ts-ignore */
223
- ...(ngDevMode ? [{ debugName: "trackPath" }] : /* istanbul ignore next */ []));
224
- /** Active value arc SVG path */
225
- valueArcPath = computed(() => {
226
- const t = this.type();
227
- if (t === 'linear')
228
- return '';
229
- const { start } = this.angleSpan();
230
- const curAngle = this.currentAngle();
231
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
232
- // Minimum small arc to prevent SVG zero-length render glitches
233
- const safeEndAngle = Math.abs(curAngle - start) < 0.1 ? start - 0.1 : curAngle;
234
- return this.createArcSvgPath(this.cx, cy, this.radius, start, safeEndAngle);
235
- }, /* @ts-ignore */
236
- ...(ngDevMode ? [{ debugName: "valueArcPath" }] : /* istanbul ignore next */ []));
237
- /** Active color based on thresholds or color input */
238
- activeColor = computed(() => {
239
- const val = this.value();
240
- const ths = this.thresholds();
241
- if (ths && ths.length > 0) {
242
- for (const th of ths) {
243
- if (val >= th.from && val <= th.to) {
244
- return PRESET_COLORS[th.color] || th.color;
245
- }
246
- }
247
- return PRESET_COLORS[ths[ths.length - 1].color] || ths[ths.length - 1].color;
248
- }
249
- const c = this.color();
250
- return PRESET_COLORS[c] || c;
251
- }, /* @ts-ignore */
252
- ...(ngDevMode ? [{ debugName: "activeColor" }] : /* istanbul ignore next */ []));
253
- /** Threshold band segments */
254
- thresholdSegments = computed(() => {
255
- const ths = this.thresholds();
256
- if (!ths || ths.length === 0)
257
- return [];
258
- const t = this.type();
259
- const minVal = this.min();
260
- const maxVal = this.max();
261
- const span = maxVal - minVal;
262
- if (span <= 0)
263
- return [];
264
- const { start, total } = this.angleSpan();
265
- const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;
266
- return ths.map((th, idx) => {
267
- const fromRatio = Math.min(1, Math.max(0, (th.from - minVal) / span));
268
- const toRatio = Math.min(1, Math.max(0, (th.to - minVal) / span));
269
- const angleStart = start - fromRatio * total;
270
- const angleEnd = start - toRatio * total;
271
- const path = t !== 'linear' ? this.createArcSvgPath(this.cx, cy, this.radius, angleStart, angleEnd) : '';
272
- const color = PRESET_COLORS[th.color] || th.color;
273
- return {
274
- path,
275
- color,
276
- from: th.from,
277
- to: th.to,
278
- isFirst: idx === 0,
279
- isLast: idx === ths.length - 1
280
- };
281
- });
282
- }, /* @ts-ignore */
283
- ...(ngDevMode ? [{ debugName: "thresholdSegments" }] : /* istanbul ignore next */ []));
284
- computedAriaLabel = computed(() => {
285
- const custom = this.ariaLabel();
286
- if (custom)
287
- return custom;
288
- const u = this.unit() ? ` ${this.unit()}` : '';
289
- return `Gauge: ${this.valueFormatter()(this.value())}${u} (Range ${this.min()} to ${this.max()})`;
290
- }, /* @ts-ignore */
291
- ...(ngDevMode ? [{ debugName: "computedAriaLabel" }] : /* istanbul ignore next */ []));
292
- /** Helper to generate SVG Arc Path 'M x1 y1 A r r 0 largeArc sweep x2 y2' */
293
- createArcSvgPath(cx, cy, r, startAngleDeg, endAngleDeg) {
294
- const startRad = (startAngleDeg * Math.PI) / 180;
295
- const endRad = (endAngleDeg * Math.PI) / 180;
296
- const x1 = cx + r * Math.cos(startRad);
297
- const y1 = cy - r * Math.sin(startRad);
298
- const x2 = cx + r * Math.cos(endRad);
299
- const y2 = cy - r * Math.sin(endRad);
300
- // Delta angle in degrees clockwise
301
- const deltaAngle = startAngleDeg - endAngleDeg;
302
- const largeArcFlag = deltaAngle > 180 ? 1 : 0;
303
- const sweepFlag = 1; // clockwise downwards
304
- return `M ${x1.toFixed(2)} ${y1.toFixed(2)} A ${r} ${r} 0 ${largeArcFlag} ${sweepFlag} ${x2.toFixed(2)} ${y2.toFixed(2)}`;
305
- }
306
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
307
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosMiniGaugeComponent, isStandalone: true, selector: "talos-mini-gauge", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, thresholds: { classPropertyName: "thresholds", publicName: "thresholds", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, trackColor: { classPropertyName: "trackColor", publicName: "trackColor", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, lineCap: { classPropertyName: "lineCap", publicName: "lineCap", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, showMinMax: { classPropertyName: "showMinMax", publicName: "showMinMax", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.talos-gauge-semi-circle": "type() === \"semi-circle\"", "class.talos-gauge-arch": "type() === \"arch\"", "class.talos-gauge-linear": "type() === \"linear\"", "class.talos-gauge-xs": "size() === \"xs\"", "class.talos-gauge-sm": "size() === \"sm\"", "class.talos-gauge-md": "size() === \"md\"", "class.talos-gauge-lg": "size() === \"lg\"", "class.talos-gauge-xl": "size() === \"xl\"", "class.talos-gauge-responsive": "size() === \"responsive\"", "class.talos-gauge-animated": "animated()", "style.width": "hostWidth()", "style.height": "hostHeight()", "attr.role": "\"meter\"", "attr.aria-valuenow": "value()", "attr.aria-valuemin": "min()", "attr.aria-valuemax": "max()", "attr.aria-label": "computedAriaLabel()" }, classAttribute: "talos-mini-gauge" }, ngImport: i0, template: "<svg\n class=\"talos-mini-gauge-svg\"\n [attr.viewBox]=\"viewBox()\"\n aria-hidden=\"true\"\n>\n <!-- Circular Types: Semi-circle and Arch -->\n @if (type() === 'semi-circle' || type() === 'arch') {\n <!-- Full Background Track (if no thresholds or as base) -->\n @if (thresholds() === null) {\n <path\n class=\"talos-gauge-track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Colored Threshold Bands with curved outer ends -->\n @if (thresholds() !== null) {\n @for (band of thresholdSegments(); track band.from) {\n <path\n class=\"talos-gauge-threshold-band\"\n [attr.d]=\"band.path\"\n [attr.stroke]=\"band.color\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap() === 'round' && (band.isFirst || band.isLast) ? 'round' : 'butt'\"\n />\n }\n }\n\n <!-- Value Indicator: Arc Fill -->\n @if (indicator() === 'arc' && thresholds() === null) {\n <path\n class=\"talos-gauge-value-arc\"\n [attr.d]=\"valueArcPath()\"\n [attr.stroke]=\"activeColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Value Indicator: Needle -->\n @if (indicator() === 'needle') {\n <g\n class=\"talos-gauge-needle-group\"\n [attr.transform]=\"needleTransform()\"\n >\n <line\n [attr.x1]=\"cx\"\n [attr.y1]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.x2]=\"cx - needleLength()\"\n [attr.y2]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.stroke]=\"activeColor()\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"4\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"1.5\"\n fill=\"#ffffff\"\n />\n </g>\n }\n\n <!-- Value Indicator: Dot Glow Marker -->\n @if (indicator() === 'dot') {\n <g\n class=\"talos-gauge-dot-group\"\n [attr.transform]=\"dotTransform()\"\n >\n <circle\n class=\"talos-gauge-dot-outer\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"6\"\n [attr.fill]=\"activeColor()\"\n opacity=\"0.3\"\n />\n <circle\n class=\"talos-gauge-dot\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"3.5\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n </g>\n }\n\n <!-- Target Marker Tick -->\n @if (targetMarkerProps(); as tgt) {\n <circle\n class=\"talos-gauge-target-tick\"\n [attr.cx]=\"tgt.x\"\n [attr.cy]=\"tgt.y\"\n r=\"2.5\"\n fill=\"var(--talos-text-color, #0f172a)\"\n stroke=\"#ffffff\"\n stroke-width=\"1\"\n />\n }\n }\n\n <!-- Linear / Bullet Type -->\n @if (type() === 'linear') {\n <!-- Linear Track -->\n <rect\n class=\"talos-gauge-linear-track\"\n x=\"0\"\n y=\"2\"\n width=\"100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n />\n\n <!-- Linear Value Fill -->\n <rect\n class=\"talos-gauge-linear-fill\"\n x=\"0\"\n y=\"2\"\n [attr.width]=\"normalizedRatio() * 100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"activeColor()\"\n />\n\n <!-- Linear Target Marker -->\n @if (targetRatio() !== null) {\n <line\n class=\"talos-gauge-linear-target\"\n [attr.x1]=\"targetRatio()! * 100\"\n y1=\"0\"\n [attr.x2]=\"targetRatio()! * 100\"\n y2=\"12\"\n stroke=\"var(--talos-text-color, #0f172a)\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n }\n }\n</svg>\n\n<!-- Center / Bottom Readout -->\n@if (showValue()) {\n <div class=\"talos-gauge-readout\">\n <span class=\"talos-gauge-value\">{{ valueFormatter()(value()) }}</span>\n @if (unit()) {\n <span class=\"talos-gauge-unit\">{{ unit() }}</span>\n }\n </div>\n}\n\n<!-- Min / Max labels -->\n@if (showMinMax()) {\n <div class=\"talos-gauge-minmax\">\n <span class=\"talos-gauge-min\">{{ min() }}</span>\n <span class=\"talos-gauge-max\">{{ max() }}</span>\n </div>\n}\n", styles: [":host{position:relative;display:inline-flex;flex-direction:column;align-items:center;justify-content:flex-start;vertical-align:middle;box-sizing:border-box;-webkit-user-select:none;user-select:none;height:auto;container-type:inline-size}:host.talos-gauge-xs{width:56px}:host.talos-gauge-xs.talos-gauge-linear{width:90px}:host.talos-gauge-sm{width:72px}:host.talos-gauge-sm.talos-gauge-linear{width:110px}:host.talos-gauge-md{width:96px}:host.talos-gauge-md.talos-gauge-linear{width:140px}:host.talos-gauge-lg{width:128px}:host.talos-gauge-lg.talos-gauge-linear{width:180px}:host.talos-gauge-xl{width:160px}:host.talos-gauge-xl.talos-gauge-linear{width:220px}:host.talos-gauge-responsive{width:100%;display:flex}:host .talos-mini-gauge-svg{width:100%;height:auto;display:block;flex-shrink:0;overflow:visible}:host .talos-gauge-track{opacity:.6}:host .talos-gauge-value-arc{transition:d .3s cubic-bezier(.4,0,.2,1),stroke .2s ease}:host .talos-gauge-needle-group{transition:transform .35s cubic-bezier(.34,1.56,.64,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-dot-group{transition:transform .35s cubic-bezier(.34,1.56,.64,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-dot,:host .talos-gauge-dot-outer{transition:fill .2s ease}:host .talos-gauge-linear-fill{transition:width .3s cubic-bezier(.4,0,.2,1),fill .2s ease}:host .talos-gauge-linear-target{filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-target-tick{filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}:host .talos-gauge-readout{position:relative;display:flex;align-items:baseline;justify-content:center;gap:1.5px;line-height:1.1;text-align:center;font-weight:700;color:var(--talos-text-color, #0f172a);font-variant-numeric:tabular-nums;letter-spacing:-.02em;width:100%;margin-top:4px}:host .talos-gauge-readout .talos-gauge-value{font-size:clamp(.75rem,16cqi,3.5rem)}:host .talos-gauge-readout .talos-gauge-unit{font-size:clamp(.5625rem,10.5cqi,2rem);font-weight:500;color:var(--talos-text-muted, #64748b);margin-left:1px}:host.talos-gauge-semi-circle .talos-gauge-readout{margin-top:4px}:host.talos-gauge-arch .talos-gauge-readout{margin-top:2px}:host.talos-gauge-linear .talos-gauge-readout{margin-top:6px}:host.talos-gauge-linear .talos-gauge-readout .talos-gauge-value{font-size:clamp(.75rem,9cqi,1.75rem)}:host.talos-gauge-linear .talos-gauge-readout .talos-gauge-unit{font-size:clamp(.5625rem,6.5cqi,1.25rem)}:host .talos-gauge-minmax{width:100%;display:flex;justify-content:space-between;font-size:clamp(.5rem,8cqi,1rem);color:var(--talos-text-muted, #64748b);font-weight:500;margin-top:2px;padding:0 4px;box-sizing:border-box}:host:not(.talos-gauge-animated) .talos-gauge-value-arc,:host:not(.talos-gauge-animated) .talos-gauge-needle-group,:host:not(.talos-gauge-animated) .talos-gauge-dot-group,:host:not(.talos-gauge-animated) .talos-gauge-linear-fill{transition:none!important}:root[data-theme=dark] :host .talos-gauge-track,:root[data-theme=dark] :host .talos-gauge-linear-track,:root.dark :host .talos-gauge-track,:root.dark :host .talos-gauge-linear-track,[data-theme=dark] :host .talos-gauge-track,[data-theme=dark] :host .talos-gauge-linear-track,[data-mode=dark] :host .talos-gauge-track,[data-mode=dark] :host .talos-gauge-linear-track,.dark :host .talos-gauge-track,.dark :host .talos-gauge-linear-track,.dark-theme :host .talos-gauge-track,.dark-theme :host .talos-gauge-linear-track{stroke:var(--talos-border-color, #334155);fill:var(--talos-border-color, #334155)}:root[data-theme=dark] :host .talos-gauge-readout,:root.dark :host .talos-gauge-readout,[data-theme=dark] :host .talos-gauge-readout,[data-mode=dark] :host .talos-gauge-readout,.dark :host .talos-gauge-readout,.dark-theme :host .talos-gauge-readout{color:var(--talos-text-color, #f8fafc)}:root[data-theme=dark] :host .talos-gauge-readout .talos-gauge-unit,:root.dark :host .talos-gauge-readout .talos-gauge-unit,[data-theme=dark] :host .talos-gauge-readout .talos-gauge-unit,[data-mode=dark] :host .talos-gauge-readout .talos-gauge-unit,.dark :host .talos-gauge-readout .talos-gauge-unit,.dark-theme :host .talos-gauge-readout .talos-gauge-unit{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] :host .talos-gauge-minmax,:root.dark :host .talos-gauge-minmax,[data-theme=dark] :host .talos-gauge-minmax,[data-mode=dark] :host .talos-gauge-minmax,.dark :host .talos-gauge-minmax,.dark-theme :host .talos-gauge-minmax{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] :host .talos-gauge-target-tick,:root.dark :host .talos-gauge-target-tick,[data-theme=dark] :host .talos-gauge-target-tick,[data-mode=dark] :host .talos-gauge-target-tick,.dark :host .talos-gauge-target-tick,.dark-theme :host .talos-gauge-target-tick{fill:#fff;stroke:#0f172a}:root[data-theme=dark] :host .talos-gauge-linear-target,:root.dark :host .talos-gauge-linear-target,[data-theme=dark] :host .talos-gauge-linear-target,[data-mode=dark] :host .talos-gauge-linear-target,.dark :host .talos-gauge-linear-target,.dark-theme :host .talos-gauge-linear-target{stroke:#fff}\n"] });
308
- }
309
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeComponent, decorators: [{
310
- type: Component,
311
- args: [{ selector: 'talos-mini-gauge', host: {
312
- 'class': 'talos-mini-gauge',
313
- '[class.talos-gauge-semi-circle]': 'type() === "semi-circle"',
314
- '[class.talos-gauge-arch]': 'type() === "arch"',
315
- '[class.talos-gauge-linear]': 'type() === "linear"',
316
- '[class.talos-gauge-xs]': 'size() === "xs"',
317
- '[class.talos-gauge-sm]': 'size() === "sm"',
318
- '[class.talos-gauge-md]': 'size() === "md"',
319
- '[class.talos-gauge-lg]': 'size() === "lg"',
320
- '[class.talos-gauge-xl]': 'size() === "xl"',
321
- '[class.talos-gauge-responsive]': 'size() === "responsive"',
322
- '[class.talos-gauge-animated]': 'animated()',
323
- '[style.width]': 'hostWidth()',
324
- '[style.height]': 'hostHeight()',
325
- '[attr.role]': '"meter"',
326
- '[attr.aria-valuenow]': 'value()',
327
- '[attr.aria-valuemin]': 'min()',
328
- '[attr.aria-valuemax]': 'max()',
329
- '[attr.aria-label]': 'computedAriaLabel()'
330
- }, template: "<svg\n class=\"talos-mini-gauge-svg\"\n [attr.viewBox]=\"viewBox()\"\n aria-hidden=\"true\"\n>\n <!-- Circular Types: Semi-circle and Arch -->\n @if (type() === 'semi-circle' || type() === 'arch') {\n <!-- Full Background Track (if no thresholds or as base) -->\n @if (thresholds() === null) {\n <path\n class=\"talos-gauge-track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Colored Threshold Bands with curved outer ends -->\n @if (thresholds() !== null) {\n @for (band of thresholdSegments(); track band.from) {\n <path\n class=\"talos-gauge-threshold-band\"\n [attr.d]=\"band.path\"\n [attr.stroke]=\"band.color\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap() === 'round' && (band.isFirst || band.isLast) ? 'round' : 'butt'\"\n />\n }\n }\n\n <!-- Value Indicator: Arc Fill -->\n @if (indicator() === 'arc' && thresholds() === null) {\n <path\n class=\"talos-gauge-value-arc\"\n [attr.d]=\"valueArcPath()\"\n [attr.stroke]=\"activeColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Value Indicator: Needle -->\n @if (indicator() === 'needle') {\n <g\n class=\"talos-gauge-needle-group\"\n [attr.transform]=\"needleTransform()\"\n >\n <line\n [attr.x1]=\"cx\"\n [attr.y1]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.x2]=\"cx - needleLength()\"\n [attr.y2]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.stroke]=\"activeColor()\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"4\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"1.5\"\n fill=\"#ffffff\"\n />\n </g>\n }\n\n <!-- Value Indicator: Dot Glow Marker -->\n @if (indicator() === 'dot') {\n <g\n class=\"talos-gauge-dot-group\"\n [attr.transform]=\"dotTransform()\"\n >\n <circle\n class=\"talos-gauge-dot-outer\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"6\"\n [attr.fill]=\"activeColor()\"\n opacity=\"0.3\"\n />\n <circle\n class=\"talos-gauge-dot\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"3.5\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n </g>\n }\n\n <!-- Target Marker Tick -->\n @if (targetMarkerProps(); as tgt) {\n <circle\n class=\"talos-gauge-target-tick\"\n [attr.cx]=\"tgt.x\"\n [attr.cy]=\"tgt.y\"\n r=\"2.5\"\n fill=\"var(--talos-text-color, #0f172a)\"\n stroke=\"#ffffff\"\n stroke-width=\"1\"\n />\n }\n }\n\n <!-- Linear / Bullet Type -->\n @if (type() === 'linear') {\n <!-- Linear Track -->\n <rect\n class=\"talos-gauge-linear-track\"\n x=\"0\"\n y=\"2\"\n width=\"100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n />\n\n <!-- Linear Value Fill -->\n <rect\n class=\"talos-gauge-linear-fill\"\n x=\"0\"\n y=\"2\"\n [attr.width]=\"normalizedRatio() * 100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"activeColor()\"\n />\n\n <!-- Linear Target Marker -->\n @if (targetRatio() !== null) {\n <line\n class=\"talos-gauge-linear-target\"\n [attr.x1]=\"targetRatio()! * 100\"\n y1=\"0\"\n [attr.x2]=\"targetRatio()! * 100\"\n y2=\"12\"\n stroke=\"var(--talos-text-color, #0f172a)\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n }\n }\n</svg>\n\n<!-- Center / Bottom Readout -->\n@if (showValue()) {\n <div class=\"talos-gauge-readout\">\n <span class=\"talos-gauge-value\">{{ valueFormatter()(value()) }}</span>\n @if (unit()) {\n <span class=\"talos-gauge-unit\">{{ unit() }}</span>\n }\n </div>\n}\n\n<!-- Min / Max labels -->\n@if (showMinMax()) {\n <div class=\"talos-gauge-minmax\">\n <span class=\"talos-gauge-min\">{{ min() }}</span>\n <span class=\"talos-gauge-max\">{{ max() }}</span>\n </div>\n}\n", styles: [":host{position:relative;display:inline-flex;flex-direction:column;align-items:center;justify-content:flex-start;vertical-align:middle;box-sizing:border-box;-webkit-user-select:none;user-select:none;height:auto;container-type:inline-size}:host.talos-gauge-xs{width:56px}:host.talos-gauge-xs.talos-gauge-linear{width:90px}:host.talos-gauge-sm{width:72px}:host.talos-gauge-sm.talos-gauge-linear{width:110px}:host.talos-gauge-md{width:96px}:host.talos-gauge-md.talos-gauge-linear{width:140px}:host.talos-gauge-lg{width:128px}:host.talos-gauge-lg.talos-gauge-linear{width:180px}:host.talos-gauge-xl{width:160px}:host.talos-gauge-xl.talos-gauge-linear{width:220px}:host.talos-gauge-responsive{width:100%;display:flex}:host .talos-mini-gauge-svg{width:100%;height:auto;display:block;flex-shrink:0;overflow:visible}:host .talos-gauge-track{opacity:.6}:host .talos-gauge-value-arc{transition:d .3s cubic-bezier(.4,0,.2,1),stroke .2s ease}:host .talos-gauge-needle-group{transition:transform .35s cubic-bezier(.34,1.56,.64,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-dot-group{transition:transform .35s cubic-bezier(.34,1.56,.64,1);filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-dot,:host .talos-gauge-dot-outer{transition:fill .2s ease}:host .talos-gauge-linear-fill{transition:width .3s cubic-bezier(.4,0,.2,1),fill .2s ease}:host .talos-gauge-linear-target{filter:drop-shadow(0 1px 2px rgba(0,0,0,.25))}:host .talos-gauge-target-tick{filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}:host .talos-gauge-readout{position:relative;display:flex;align-items:baseline;justify-content:center;gap:1.5px;line-height:1.1;text-align:center;font-weight:700;color:var(--talos-text-color, #0f172a);font-variant-numeric:tabular-nums;letter-spacing:-.02em;width:100%;margin-top:4px}:host .talos-gauge-readout .talos-gauge-value{font-size:clamp(.75rem,16cqi,3.5rem)}:host .talos-gauge-readout .talos-gauge-unit{font-size:clamp(.5625rem,10.5cqi,2rem);font-weight:500;color:var(--talos-text-muted, #64748b);margin-left:1px}:host.talos-gauge-semi-circle .talos-gauge-readout{margin-top:4px}:host.talos-gauge-arch .talos-gauge-readout{margin-top:2px}:host.talos-gauge-linear .talos-gauge-readout{margin-top:6px}:host.talos-gauge-linear .talos-gauge-readout .talos-gauge-value{font-size:clamp(.75rem,9cqi,1.75rem)}:host.talos-gauge-linear .talos-gauge-readout .talos-gauge-unit{font-size:clamp(.5625rem,6.5cqi,1.25rem)}:host .talos-gauge-minmax{width:100%;display:flex;justify-content:space-between;font-size:clamp(.5rem,8cqi,1rem);color:var(--talos-text-muted, #64748b);font-weight:500;margin-top:2px;padding:0 4px;box-sizing:border-box}:host:not(.talos-gauge-animated) .talos-gauge-value-arc,:host:not(.talos-gauge-animated) .talos-gauge-needle-group,:host:not(.talos-gauge-animated) .talos-gauge-dot-group,:host:not(.talos-gauge-animated) .talos-gauge-linear-fill{transition:none!important}:root[data-theme=dark] :host .talos-gauge-track,:root[data-theme=dark] :host .talos-gauge-linear-track,:root.dark :host .talos-gauge-track,:root.dark :host .talos-gauge-linear-track,[data-theme=dark] :host .talos-gauge-track,[data-theme=dark] :host .talos-gauge-linear-track,[data-mode=dark] :host .talos-gauge-track,[data-mode=dark] :host .talos-gauge-linear-track,.dark :host .talos-gauge-track,.dark :host .talos-gauge-linear-track,.dark-theme :host .talos-gauge-track,.dark-theme :host .talos-gauge-linear-track{stroke:var(--talos-border-color, #334155);fill:var(--talos-border-color, #334155)}:root[data-theme=dark] :host .talos-gauge-readout,:root.dark :host .talos-gauge-readout,[data-theme=dark] :host .talos-gauge-readout,[data-mode=dark] :host .talos-gauge-readout,.dark :host .talos-gauge-readout,.dark-theme :host .talos-gauge-readout{color:var(--talos-text-color, #f8fafc)}:root[data-theme=dark] :host .talos-gauge-readout .talos-gauge-unit,:root.dark :host .talos-gauge-readout .talos-gauge-unit,[data-theme=dark] :host .talos-gauge-readout .talos-gauge-unit,[data-mode=dark] :host .talos-gauge-readout .talos-gauge-unit,.dark :host .talos-gauge-readout .talos-gauge-unit,.dark-theme :host .talos-gauge-readout .talos-gauge-unit{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] :host .talos-gauge-minmax,:root.dark :host .talos-gauge-minmax,[data-theme=dark] :host .talos-gauge-minmax,[data-mode=dark] :host .talos-gauge-minmax,.dark :host .talos-gauge-minmax,.dark-theme :host .talos-gauge-minmax{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] :host .talos-gauge-target-tick,:root.dark :host .talos-gauge-target-tick,[data-theme=dark] :host .talos-gauge-target-tick,[data-mode=dark] :host .talos-gauge-target-tick,.dark :host .talos-gauge-target-tick,.dark-theme :host .talos-gauge-target-tick{fill:#fff;stroke:#0f172a}:root[data-theme=dark] :host .talos-gauge-linear-target,:root.dark :host .talos-gauge-linear-target,[data-theme=dark] :host .talos-gauge-linear-target,[data-mode=dark] :host .talos-gauge-linear-target,.dark :host .talos-gauge-linear-target,.dark-theme :host .talos-gauge-linear-target{stroke:#fff}\n"] }]
331
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], thresholds: [{ type: i0.Input, args: [{ isSignal: true, alias: "thresholds", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], trackColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackColor", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], lineCap: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineCap", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], showMinMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMinMax", required: false }] }], unit: [{ type: i0.Input, args: [{ isSignal: true, alias: "unit", required: false }] }], valueFormatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueFormatter", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }] } });
332
-
333
- class TalosMiniGaugeModule {
334
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
335
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeModule, imports: [TalosMiniGaugeComponent], exports: [TalosMiniGaugeComponent] });
336
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeModule });
337
- }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniGaugeModule, decorators: [{
339
- type: NgModule,
340
- args: [{
341
- imports: [TalosMiniGaugeComponent],
342
- exports: [TalosMiniGaugeComponent]
343
- }]
344
- }] });
345
-
346
- /**
347
- * Generated bundle index. Do not edit.
348
- */
349
-
350
- export { TalosMiniGaugeComponent, TalosMiniGaugeModule };
351
- //# sourceMappingURL=weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"weeehaoooz-talos-ui-data-viz-mini-gauge.mjs","sources":["../../../projects/talos-ui/data-viz/mini-gauge/mini-gauge.types.ts","../../../projects/talos-ui/data-viz/mini-gauge/mini-gauge.component.ts","../../../projects/talos-ui/data-viz/mini-gauge/mini-gauge.component.html","../../../projects/talos-ui/data-viz/mini-gauge/mini-gauge.module.ts","../../../projects/talos-ui/data-viz/mini-gauge/weeehaoooz-talos-ui-data-viz-mini-gauge.ts"],"sourcesContent":["/**\n * Types and interfaces for TalosMiniGaugeComponent\n */\n\nexport type MiniGaugeType = 'semi-circle' | 'arch' | 'linear';\n\nexport type GaugeSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'responsive' | 'custom';\n\nexport type MiniGaugeIndicator = 'arc' | 'needle' | 'dot';\n\nexport interface GaugeThreshold {\n from: number;\n to: number;\n color: string;\n label?: string;\n}\n\nexport interface GaugeMarker {\n value: number;\n color?: string;\n label?: string;\n shape?: 'line' | 'dot' | 'triangle';\n}\n","import { Component, computed, input } from '@angular/core';\nimport {\n GaugeSize,\n GaugeThreshold,\n MiniGaugeIndicator,\n MiniGaugeType\n} from './mini-gauge.types';\n\nconst PRESET_COLORS: Record<string, string> = {\n primary: '#2563eb',\n blue: '#3b82f6',\n success: '#16a34a',\n emerald: '#10b981',\n danger: '#ef4444',\n rose: '#f43f5e',\n warning: '#f59e0b',\n amber: '#d97706',\n info: '#0284c7',\n cyan: '#06b6d4',\n violet: '#8b5cf6',\n slate: '#64748b'\n};\n\nconst DEFAULT_THRESHOLDS: GaugeThreshold[] = [\n { from: 0, to: 60, color: '#10b981' },\n { from: 60, to: 85, color: '#f59e0b' },\n { from: 85, to: 100, color: '#ef4444' }\n];\n\ninterface ArcSegment {\n path: string;\n color: string;\n from: number;\n to: number;\n isFirst: boolean;\n isLast: boolean;\n}\n\n@Component({\n selector: 'talos-mini-gauge',\n templateUrl: './mini-gauge.component.html',\n styleUrl: './mini-gauge.component.scss',\n host: {\n 'class': 'talos-mini-gauge',\n '[class.talos-gauge-semi-circle]': 'type() === \"semi-circle\"',\n '[class.talos-gauge-arch]': 'type() === \"arch\"',\n '[class.talos-gauge-linear]': 'type() === \"linear\"',\n '[class.talos-gauge-xs]': 'size() === \"xs\"',\n '[class.talos-gauge-sm]': 'size() === \"sm\"',\n '[class.talos-gauge-md]': 'size() === \"md\"',\n '[class.talos-gauge-lg]': 'size() === \"lg\"',\n '[class.talos-gauge-xl]': 'size() === \"xl\"',\n '[class.talos-gauge-responsive]': 'size() === \"responsive\"',\n '[class.talos-gauge-animated]': 'animated()',\n '[style.width]': 'hostWidth()',\n '[style.height]': 'hostHeight()',\n '[attr.role]': '\"meter\"',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-label]': 'computedAriaLabel()'\n }\n})\nexport class TalosMiniGaugeComponent {\n /** Current gauge value */\n readonly value = input<number>(0);\n\n /** Minimum gauge scale */\n readonly min = input<number>(0);\n\n /** Maximum gauge scale */\n readonly max = input<number>(100);\n\n /** Optional target benchmark marker value */\n readonly target = input<number | null>(null);\n\n /** Gauge rendering style */\n readonly type = input<MiniGaugeType>('semi-circle');\n\n /** Value indicator pointer style: arc fill, needle, or dot */\n readonly indicator = input<MiniGaugeIndicator>('arc');\n\n /** Custom colored threshold zones */\n readonly thresholds = input<GaugeThreshold[] | null>(null);\n\n /** Base color or palette when no thresholds are used */\n readonly color = input<string>('primary');\n\n /** Background track color */\n readonly trackColor = input<string | null>(null);\n\n /** Preset size */\n readonly size = input<GaugeSize>('md');\n\n /** Custom width */\n readonly width = input<number | string | null>(null);\n\n /** Custom height */\n readonly height = input<number | string | null>(null);\n\n /** Arc stroke width */\n readonly strokeWidth = input<number>(8);\n\n /** Arc stroke linecap style ('round' | 'butt') */\n readonly lineCap = input<'round' | 'butt'>('round');\n\n /** Show numerical value readout in center/bottom */\n readonly showValue = input<boolean>(true);\n\n /** Show min and max numbers at gauge edges */\n readonly showMinMax = input<boolean>(false);\n\n /** Unit label string (e.g. '%', 'ms', 'rpm') */\n readonly unit = input<string>('');\n\n /** Value formatter */\n readonly valueFormatter = input<(val: number) => string>((val) => val.toLocaleString());\n\n /** Custom ARIA label */\n readonly ariaLabel = input<string | null>(null);\n\n /** Enable animation */\n readonly animated = input<boolean>(true);\n\n /** SVG Coordinate constants */\n protected readonly cx = 50;\n protected readonly cySemi = 44;\n protected readonly cyArch = 42;\n protected readonly radius = 36;\n\n /** Needle length tailored per circular gauge type */\n readonly needleLength = computed(() => {\n return this.type() === 'semi-circle' ? 30 : 26;\n });\n\n readonly hostWidth = computed(() => {\n const custom = this.width();\n if (custom !== null) return typeof custom === 'number' ? `${custom}px` : custom;\n if (this.size() === 'responsive') return '100%';\n return null;\n });\n\n readonly hostHeight = computed(() => {\n const custom = this.height();\n if (custom !== null) return typeof custom === 'number' ? `${custom}px` : custom;\n return null;\n });\n\n /** Clamped and normalized ratio [0..1] */\n readonly normalizedRatio = computed(() => {\n const val = this.value();\n const minVal = this.min();\n const maxVal = this.max();\n if (maxVal <= minVal) return 0;\n return Math.min(1, Math.max(0, (val - minVal) / (maxVal - minVal)));\n });\n\n /** Target ratio [0..1] */\n readonly targetRatio = computed(() => {\n const tgt = this.target();\n if (tgt === null) return null;\n const minVal = this.min();\n const maxVal = this.max();\n if (maxVal <= minVal) return 0;\n return Math.min(1, Math.max(0, (tgt - minVal) / (maxVal - minVal)));\n });\n\n /** ViewBox string based on gauge type */\n readonly viewBox = computed(() => {\n const t = this.type();\n if (t === 'semi-circle') return '0 0 100 50';\n if (t === 'arch') return '0 0 100 66';\n return '0 0 100 14';\n });\n\n /** Start & End angles in degrees for circular gauge types */\n readonly angleSpan = computed(() => {\n const t = this.type();\n if (t === 'semi-circle') {\n return { start: 180, end: 0, total: 180 };\n }\n // Arch: 240 degree arc from 210° (bottom-left) to -30° (bottom-right)\n return { start: 210, end: -30, total: 240 };\n });\n\n /** Current value angle in degrees */\n readonly currentAngle = computed(() => {\n const { start, total } = this.angleSpan();\n const ratio = this.normalizedRatio();\n return start - ratio * total;\n });\n\n /** Needle transform for needle indicator */\n readonly needleTransform = computed(() => {\n const t = this.type();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n const angle = this.currentAngle();\n // SVG rotation: angle 0 is right, 180 is left. Standard SVG rotate origin is center.\n const svgRotation = 180 - angle;\n return `rotate(${svgRotation} ${this.cx} ${cy})`;\n });\n\n /** Target marker position & rotation */\n readonly targetMarkerProps = computed(() => {\n const ratio = this.targetRatio();\n if (ratio === null) return null;\n\n const t = this.type();\n if (t === 'linear') {\n return { x: ratio * 100, y: 0, rotation: 0 };\n }\n\n const { start, total } = this.angleSpan();\n const angle = start - ratio * total;\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n const rad = (angle * Math.PI) / 180;\n const r = this.radius;\n\n const x = this.cx + r * Math.cos(rad);\n const y = cy - r * Math.sin(rad);\n\n return { x, y, angle };\n });\n\n /** Dot transform for dot indicator (rotates along the circular arc path) */\n readonly dotTransform = computed(() => {\n const t = this.type();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n const angle = this.currentAngle();\n // SVG rotation: angle 0 is right, 180 is left. Standard SVG rotate origin is center.\n const svgRotation = 180 - angle;\n return `rotate(${svgRotation} ${this.cx} ${cy})`;\n });\n\n /** Dot indicator position */\n readonly dotIndicatorPosition = computed(() => {\n const t = this.type();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n const angle = this.currentAngle();\n const rad = (angle * Math.PI) / 180;\n const r = this.radius;\n\n const x = this.cx + r * Math.cos(rad);\n const y = cy - r * Math.sin(rad);\n return { x, y };\n });\n\n /** Base track SVG path */\n readonly trackPath = computed(() => {\n const t = this.type();\n if (t === 'linear') return '';\n\n const { start, end } = this.angleSpan();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n return this.createArcSvgPath(this.cx, cy, this.radius, start, end);\n });\n\n /** Active value arc SVG path */\n readonly valueArcPath = computed(() => {\n const t = this.type();\n if (t === 'linear') return '';\n\n const { start } = this.angleSpan();\n const curAngle = this.currentAngle();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n\n // Minimum small arc to prevent SVG zero-length render glitches\n const safeEndAngle = Math.abs(curAngle - start) < 0.1 ? start - 0.1 : curAngle;\n return this.createArcSvgPath(this.cx, cy, this.radius, start, safeEndAngle);\n });\n\n /** Active color based on thresholds or color input */\n readonly activeColor = computed(() => {\n const val = this.value();\n const ths = this.thresholds();\n\n if (ths && ths.length > 0) {\n for (const th of ths) {\n if (val >= th.from && val <= th.to) {\n return PRESET_COLORS[th.color] || th.color;\n }\n }\n return PRESET_COLORS[ths[ths.length - 1].color] || ths[ths.length - 1].color;\n }\n\n const c = this.color();\n return PRESET_COLORS[c] || c;\n });\n\n /** Threshold band segments */\n readonly thresholdSegments = computed<ArcSegment[]>(() => {\n const ths = this.thresholds();\n if (!ths || ths.length === 0) return [];\n\n const t = this.type();\n const minVal = this.min();\n const maxVal = this.max();\n const span = maxVal - minVal;\n if (span <= 0) return [];\n\n const { start, total } = this.angleSpan();\n const cy = t === 'semi-circle' ? this.cySemi : this.cyArch;\n\n return ths.map((th, idx) => {\n const fromRatio = Math.min(1, Math.max(0, (th.from - minVal) / span));\n const toRatio = Math.min(1, Math.max(0, (th.to - minVal) / span));\n\n const angleStart = start - fromRatio * total;\n const angleEnd = start - toRatio * total;\n\n const path = t !== 'linear' ? this.createArcSvgPath(this.cx, cy, this.radius, angleStart, angleEnd) : '';\n const color = PRESET_COLORS[th.color] || th.color;\n\n return {\n path,\n color,\n from: th.from,\n to: th.to,\n isFirst: idx === 0,\n isLast: idx === ths.length - 1\n };\n });\n });\n\n readonly computedAriaLabel = computed(() => {\n const custom = this.ariaLabel();\n if (custom) return custom;\n const u = this.unit() ? ` ${this.unit()}` : '';\n return `Gauge: ${this.valueFormatter()(this.value())}${u} (Range ${this.min()} to ${this.max()})`;\n });\n\n /** Helper to generate SVG Arc Path 'M x1 y1 A r r 0 largeArc sweep x2 y2' */\n private createArcSvgPath(\n cx: number,\n cy: number,\n r: number,\n startAngleDeg: number,\n endAngleDeg: number\n ): string {\n const startRad = (startAngleDeg * Math.PI) / 180;\n const endRad = (endAngleDeg * Math.PI) / 180;\n\n const x1 = cx + r * Math.cos(startRad);\n const y1 = cy - r * Math.sin(startRad);\n\n const x2 = cx + r * Math.cos(endRad);\n const y2 = cy - r * Math.sin(endRad);\n\n // Delta angle in degrees clockwise\n const deltaAngle = startAngleDeg - endAngleDeg;\n const largeArcFlag = deltaAngle > 180 ? 1 : 0;\n const sweepFlag = 1; // clockwise downwards\n\n return `M ${x1.toFixed(2)} ${y1.toFixed(2)} A ${r} ${r} 0 ${largeArcFlag} ${sweepFlag} ${x2.toFixed(2)} ${y2.toFixed(2)}`;\n }\n}\n","<svg\n class=\"talos-mini-gauge-svg\"\n [attr.viewBox]=\"viewBox()\"\n aria-hidden=\"true\"\n>\n <!-- Circular Types: Semi-circle and Arch -->\n @if (type() === 'semi-circle' || type() === 'arch') {\n <!-- Full Background Track (if no thresholds or as base) -->\n @if (thresholds() === null) {\n <path\n class=\"talos-gauge-track\"\n [attr.d]=\"trackPath()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Colored Threshold Bands with curved outer ends -->\n @if (thresholds() !== null) {\n @for (band of thresholdSegments(); track band.from) {\n <path\n class=\"talos-gauge-threshold-band\"\n [attr.d]=\"band.path\"\n [attr.stroke]=\"band.color\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap() === 'round' && (band.isFirst || band.isLast) ? 'round' : 'butt'\"\n />\n }\n }\n\n <!-- Value Indicator: Arc Fill -->\n @if (indicator() === 'arc' && thresholds() === null) {\n <path\n class=\"talos-gauge-value-arc\"\n [attr.d]=\"valueArcPath()\"\n [attr.stroke]=\"activeColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n fill=\"none\"\n [attr.stroke-linecap]=\"lineCap()\"\n />\n }\n\n <!-- Value Indicator: Needle -->\n @if (indicator() === 'needle') {\n <g\n class=\"talos-gauge-needle-group\"\n [attr.transform]=\"needleTransform()\"\n >\n <line\n [attr.x1]=\"cx\"\n [attr.y1]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.x2]=\"cx - needleLength()\"\n [attr.y2]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n [attr.stroke]=\"activeColor()\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"4\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n <circle\n [attr.cx]=\"cx\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"1.5\"\n fill=\"#ffffff\"\n />\n </g>\n }\n\n <!-- Value Indicator: Dot Glow Marker -->\n @if (indicator() === 'dot') {\n <g\n class=\"talos-gauge-dot-group\"\n [attr.transform]=\"dotTransform()\"\n >\n <circle\n class=\"talos-gauge-dot-outer\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"6\"\n [attr.fill]=\"activeColor()\"\n opacity=\"0.3\"\n />\n <circle\n class=\"talos-gauge-dot\"\n [attr.cx]=\"cx - radius\"\n [attr.cy]=\"type() === 'semi-circle' ? cySemi : cyArch\"\n r=\"3.5\"\n [attr.fill]=\"activeColor()\"\n stroke=\"#ffffff\"\n stroke-width=\"1.5\"\n />\n </g>\n }\n\n <!-- Target Marker Tick -->\n @if (targetMarkerProps(); as tgt) {\n <circle\n class=\"talos-gauge-target-tick\"\n [attr.cx]=\"tgt.x\"\n [attr.cy]=\"tgt.y\"\n r=\"2.5\"\n fill=\"var(--talos-text-color, #0f172a)\"\n stroke=\"#ffffff\"\n stroke-width=\"1\"\n />\n }\n }\n\n <!-- Linear / Bullet Type -->\n @if (type() === 'linear') {\n <!-- Linear Track -->\n <rect\n class=\"talos-gauge-linear-track\"\n x=\"0\"\n y=\"2\"\n width=\"100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n />\n\n <!-- Linear Value Fill -->\n <rect\n class=\"talos-gauge-linear-fill\"\n x=\"0\"\n y=\"2\"\n [attr.width]=\"normalizedRatio() * 100\"\n height=\"8\"\n rx=\"4\"\n ry=\"4\"\n [attr.fill]=\"activeColor()\"\n />\n\n <!-- Linear Target Marker -->\n @if (targetRatio() !== null) {\n <line\n class=\"talos-gauge-linear-target\"\n [attr.x1]=\"targetRatio()! * 100\"\n y1=\"0\"\n [attr.x2]=\"targetRatio()! * 100\"\n y2=\"12\"\n stroke=\"var(--talos-text-color, #0f172a)\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n }\n }\n</svg>\n\n<!-- Center / Bottom Readout -->\n@if (showValue()) {\n <div class=\"talos-gauge-readout\">\n <span class=\"talos-gauge-value\">{{ valueFormatter()(value()) }}</span>\n @if (unit()) {\n <span class=\"talos-gauge-unit\">{{ unit() }}</span>\n }\n </div>\n}\n\n<!-- Min / Max labels -->\n@if (showMinMax()) {\n <div class=\"talos-gauge-minmax\">\n <span class=\"talos-gauge-min\">{{ min() }}</span>\n <span class=\"talos-gauge-max\">{{ max() }}</span>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { TalosMiniGaugeComponent } from './mini-gauge.component';\n\n@NgModule({\n imports: [TalosMiniGaugeComponent],\n exports: [TalosMiniGaugeComponent]\n})\nexport class TalosMiniGaugeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}