@po-ui/ng-components 21.33.0 → 22.0.0-next.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 (164) hide show
  1. package/README.md +2 -2
  2. package/fesm2022/{po-ui-ng-components-po-chart-modal-table.component-B4RdhBpp.mjs → po-ui-ng-components-po-chart-modal-table.component-BfgIJ-rf.mjs} +7 -6
  3. package/fesm2022/po-ui-ng-components-po-chart-modal-table.component-BfgIJ-rf.mjs.map +1 -0
  4. package/fesm2022/po-ui-ng-components.mjs +2866 -3250
  5. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  6. package/lib/components/index.d.ts +0 -1
  7. package/lib/components/po-accordion/po-accordion-item-body/po-accordion-item-body.component.d.ts +4 -0
  8. package/lib/components/po-accordion/po-accordion.module.d.ts +0 -38
  9. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.d.ts +1 -0
  10. package/lib/components/po-field/po-search-ai/po-search-ai-base.component.d.ts +0 -4
  11. package/lib/components/po-listbox/po-listbox-base.component.d.ts +1 -1
  12. package/lib/components/po-navbar/po-navbar.component.d.ts +2 -3
  13. package/lib/components/po-navbar/po-navbar.module.d.ts +0 -38
  14. package/lib/components/po-page/po-page-slide/po-page-slide-base.component.d.ts +0 -39
  15. package/lib/components/po-page/po-page-slide/po-page-slide.component.d.ts +5 -13
  16. package/lib/components/po-slide/po-slide.component.d.ts +2 -3
  17. package/lib/components/po-slide/po-slide.module.d.ts +0 -37
  18. package/lib/components/po-stepper/po-stepper.component.d.ts +0 -1
  19. package/lib/components/po-table/po-table.component.d.ts +1 -1
  20. package/lib/components/po-tree-view/po-tree-view.module.d.ts +1 -0
  21. package/lib/components/po-widget/po-widget-base.component.d.ts +0 -1
  22. package/lib/interceptors/po-http-interceptor/po-http-interceptor-base.service.d.ts +3 -8
  23. package/lib/interceptors/po-http-request/po-http-request-interceptor.service.d.ts +0 -1
  24. package/lib/services/po-component-injector/po-component-injector.service.d.ts +12 -5
  25. package/lib/utils/util.d.ts +0 -13
  26. package/package.json +13 -15
  27. package/po-ui-ng-components-22.0.0-next.0.tgz +0 -0
  28. package/schematics/collection.json +0 -20
  29. package/schematics/migrations.json +5 -0
  30. package/schematics/ng-add/index.js +1 -1
  31. package/schematics/ng-add/setup-project.d.ts +1 -0
  32. package/schematics/ng-add/setup-project.js +95 -0
  33. package/schematics/ng-add/setup-project.js.map +1 -1
  34. package/schematics/ng-generate/sidemenu/files/__appFileName__.spec.ts.template +35 -0
  35. package/schematics/ng-generate/sidemenu/files/{app.ts.template → __appFileName__.ts.template} +3 -3
  36. package/schematics/ng-generate/sidemenu/files-standalone/{app.spec.ts.template → __appFileName__.spec.ts.template} +4 -4
  37. package/schematics/ng-generate/sidemenu/files-standalone/{app.ts.template → __appFileName__.ts.template} +3 -3
  38. package/schematics/ng-generate/sidemenu/index.js +9 -3
  39. package/schematics/ng-generate/sidemenu/index.js.map +1 -1
  40. package/schematics/ng-generate/sidemenu/schema.d.ts +9 -0
  41. package/schematics/ng-generate/sidemenu/schema.json +5 -0
  42. package/schematics/ng-update/v14/index.js +1 -1
  43. package/schematics/ng-update/v15/index.js +1 -1
  44. package/schematics/ng-update/v16/index.js +1 -1
  45. package/schematics/ng-update/v17/index.js +1 -1
  46. package/schematics/ng-update/v18/index.js +3 -3
  47. package/schematics/ng-update/v18/index.js.map +1 -1
  48. package/schematics/ng-update/v19/index.js +3 -3
  49. package/schematics/ng-update/v19/index.js.map +1 -1
  50. package/schematics/ng-update/v2/index.js +1 -1
  51. package/schematics/ng-update/v20/index.js +3 -3
  52. package/schematics/ng-update/v20/index.js.map +1 -1
  53. package/schematics/ng-update/v21/index.js +1 -1
  54. package/schematics/ng-update/v22/changes.d.ts +29 -0
  55. package/schematics/ng-update/v22/changes.js +44 -0
  56. package/schematics/ng-update/v22/changes.js.map +1 -0
  57. package/schematics/ng-update/v22/gauge-html-migration.d.ts +35 -0
  58. package/schematics/ng-update/v22/gauge-html-migration.js +308 -0
  59. package/schematics/ng-update/v22/gauge-html-migration.js.map +1 -0
  60. package/schematics/ng-update/v22/gauge-manual-test/all-cases.component.html +723 -0
  61. package/schematics/ng-update/v22/gauge-property-map.d.ts +53 -0
  62. package/schematics/ng-update/v22/gauge-property-map.js +298 -0
  63. package/schematics/ng-update/v22/gauge-property-map.js.map +1 -0
  64. package/schematics/ng-update/v22/gauge-ts-migration.d.ts +41 -0
  65. package/schematics/ng-update/v22/gauge-ts-migration.js +326 -0
  66. package/schematics/ng-update/v22/gauge-ts-migration.js.map +1 -0
  67. package/schematics/ng-update/v22/index.d.ts +39 -0
  68. package/schematics/ng-update/v22/index.js +253 -0
  69. package/schematics/ng-update/v22/index.js.map +1 -0
  70. package/schematics/ng-update/v22/migration-report.d.ts +48 -0
  71. package/schematics/ng-update/v22/migration-report.js +50 -0
  72. package/schematics/ng-update/v22/migration-report.js.map +1 -0
  73. package/schematics/ng-update/v3/index.js +1 -1
  74. package/schematics/ng-update/v4/index.js +1 -1
  75. package/schematics/ng-update/v5/index.js +1 -1
  76. package/schematics/ng-update/v6/index.js +1 -1
  77. package/schematics/package.json +3 -0
  78. package/types/po-ui-ng-components.d.ts +40 -490
  79. package/fesm2022/po-ui-ng-components-po-chart-modal-table.component-B4RdhBpp.mjs.map +0 -1
  80. package/lib/components/po-gauge/index.d.ts +0 -4
  81. package/lib/components/po-gauge/interfaces/po-gauge-coordinates.interface.d.ts +0 -19
  82. package/lib/components/po-gauge/interfaces/po-gauge-options.interface.d.ts +0 -69
  83. package/lib/components/po-gauge/interfaces/po-gauge-ranges.interface.d.ts +0 -44
  84. package/lib/components/po-gauge/interfaces/po-gauge-svg-container.interface.d.ts +0 -15
  85. package/lib/components/po-gauge/po-gauge-base.component.d.ts +0 -133
  86. package/lib/components/po-gauge/po-gauge-default-values.constant.d.ts +0 -5
  87. package/lib/components/po-gauge/po-gauge.component.d.ts +0 -30
  88. package/lib/components/po-gauge/po-gauge.module.d.ts +0 -6
  89. package/po-ui-ng-components-21.33.0.tgz +0 -0
  90. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  91. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -3
  92. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -32
  93. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -19
  94. package/schematics/ng-generate/po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +0 -19
  95. package/schematics/ng-generate/po-page-default/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -3
  96. package/schematics/ng-generate/po-page-default/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -31
  97. package/schematics/ng-generate/po-page-default/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -23
  98. package/schematics/ng-generate/po-page-default/index.d.ts +0 -4
  99. package/schematics/ng-generate/po-page-default/index.js +0 -13
  100. package/schematics/ng-generate/po-page-default/index.js.map +0 -1
  101. package/schematics/ng-generate/po-page-default/schema.d.ts +0 -3
  102. package/schematics/ng-generate/po-page-default/schema.js +0 -3
  103. package/schematics/ng-generate/po-page-default/schema.js.map +0 -1
  104. package/schematics/ng-generate/po-page-default/schema.json +0 -67
  105. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  106. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  107. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -8
  108. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -32
  109. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -27
  110. package/schematics/ng-generate/po-page-detail/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +0 -19
  111. package/schematics/ng-generate/po-page-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  112. package/schematics/ng-generate/po-page-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -8
  113. package/schematics/ng-generate/po-page-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -31
  114. package/schematics/ng-generate/po-page-detail/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -33
  115. package/schematics/ng-generate/po-page-detail/index.d.ts +0 -4
  116. package/schematics/ng-generate/po-page-detail/index.js +0 -13
  117. package/schematics/ng-generate/po-page-detail/index.js.map +0 -1
  118. package/schematics/ng-generate/po-page-detail/schema.d.ts +0 -3
  119. package/schematics/ng-generate/po-page-detail/schema.js +0 -3
  120. package/schematics/ng-generate/po-page-detail/schema.js.map +0 -1
  121. package/schematics/ng-generate/po-page-detail/schema.json +0 -67
  122. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  123. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  124. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -8
  125. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -32
  126. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -27
  127. package/schematics/ng-generate/po-page-edit/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +0 -19
  128. package/schematics/ng-generate/po-page-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  129. package/schematics/ng-generate/po-page-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  130. package/schematics/ng-generate/po-page-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -8
  131. package/schematics/ng-generate/po-page-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -31
  132. package/schematics/ng-generate/po-page-edit/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -33
  133. package/schematics/ng-generate/po-page-edit/index.d.ts +0 -4
  134. package/schematics/ng-generate/po-page-edit/index.js +0 -13
  135. package/schematics/ng-generate/po-page-edit/index.js.map +0 -1
  136. package/schematics/ng-generate/po-page-edit/schema.d.ts +0 -3
  137. package/schematics/ng-generate/po-page-edit/schema.js +0 -3
  138. package/schematics/ng-generate/po-page-edit/schema.js.map +0 -1
  139. package/schematics/ng-generate/po-page-edit/schema.json +0 -67
  140. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  141. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  142. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -28
  143. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -37
  144. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -34
  145. package/schematics/ng-generate/po-page-list/files/__path__/__name@dasherize__/__name@dasherize__.module.ts.template +0 -19
  146. package/schematics/ng-generate/po-page-list/files-standalone/__path__/__name@dasherize__/__name@dasherize__-routing.module.ts.template +0 -14
  147. package/schematics/ng-generate/po-page-list/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template +0 -0
  148. package/schematics/ng-generate/po-page-list/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.html.template +0 -28
  149. package/schematics/ng-generate/po-page-list/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.spec.ts.template +0 -36
  150. package/schematics/ng-generate/po-page-list/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.ts.template +0 -42
  151. package/schematics/ng-generate/po-page-list/index.d.ts +0 -7
  152. package/schematics/ng-generate/po-page-list/index.js +0 -16
  153. package/schematics/ng-generate/po-page-list/index.js.map +0 -1
  154. package/schematics/ng-generate/po-page-list/schema.d.ts +0 -5
  155. package/schematics/ng-generate/po-page-list/schema.js +0 -3
  156. package/schematics/ng-generate/po-page-list/schema.js.map +0 -1
  157. package/schematics/ng-generate/po-page-list/schema.json +0 -78
  158. package/schematics/ng-generate/sidemenu/files/app.__style__.template +0 -0
  159. package/schematics/ng-generate/sidemenu/files/app.spec.ts.template +0 -33
  160. package/schematics/ng-generate/sidemenu/files-standalone/app.__style__.template +0 -0
  161. /package/schematics/ng-generate/{po-page-default/files/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template → sidemenu/files/__appFileName__.__style__.template} +0 -0
  162. /package/schematics/ng-generate/sidemenu/files/{app.html.template → __appFileName__.html.template} +0 -0
  163. /package/schematics/ng-generate/{po-page-default/files-standalone/__path__/__name@dasherize__/__name@dasherize__.component.__style__.template → sidemenu/files-standalone/__appFileName__.__style__.template} +0 -0
  164. /package/schematics/ng-generate/sidemenu/files-standalone/{app.html.template → __appFileName__.html.template} +0 -0
@@ -0,0 +1,723 @@
1
+ <!-- ═══════════════════════════════════════════════════════════════════════════
2
+ CASO 1: Uso mínimo — apenas p-value (sem ranges)
3
+ ═══════════════════════════════════════════════════════════════════════════ -->
4
+ <h3>Caso 1: Apenas p-value</h3>
5
+ <po-gauge [p-value]="percentual"></po-gauge>
6
+
7
+ <!-- CASO 1b: p-value literal numérico -->
8
+ <h3>Caso 1b: p-value literal</h3>
9
+ <po-gauge [p-value]="50"></po-gauge>
10
+
11
+ <!-- CASO 1c: p-value como string estática (sem binding) — migração deve converter para [p-value] -->
12
+ <h3>Caso 1c: p-value string numérica com binding</h3>
13
+ <po-gauge [p-value]="75"></po-gauge>
14
+
15
+ <!-- CASO 1d: p-value zero -->
16
+ <h3>Caso 1d: p-value zero</h3>
17
+ <po-gauge [p-value]="0"></po-gauge>
18
+
19
+ <!-- CASO 1e: p-value acima de 100 (overflow) -->
20
+ <h3>Caso 1e: p-value overflow (>100)</h3>
21
+ <po-gauge [p-value]="150"></po-gauge>
22
+
23
+ <!-- CASO 1f: p-value negativo -->
24
+ <h3>Caso 1f: p-value negativo</h3>
25
+ <po-gauge [p-value]="negativeValue"></po-gauge>
26
+
27
+ <!-- ═══════════════════════════════════════════════════════════════════════════
28
+ CASO 2: Todas as propriedades mapeáveis
29
+ ═══════════════════════════════════════════════════════════════════════════ -->
30
+ <h3>Caso 2: Todas as propriedades</h3>
31
+ <po-gauge
32
+ [p-value]="currentValue"
33
+ [p-ranges]="gaugeRanges"
34
+ [p-description]="descricao"
35
+ p-title="Velocidade"
36
+ [p-height]="300"
37
+ [p-show-from-to-legend]="true"
38
+ [p-show-pointer]="true"
39
+ >
40
+ </po-gauge>
41
+
42
+ <!-- CASO 2b: Todas propriedades com valores false explícitos -->
43
+ <h3>Caso 2b: Booleans explicitamente false</h3>
44
+ <po-gauge
45
+ [p-value]="currentValue"
46
+ [p-ranges]="gaugeRanges"
47
+ [p-description]="descricao"
48
+ p-title="Sem Ponteiro"
49
+ [p-height]="350"
50
+ [p-show-from-to-legend]="false"
51
+ [p-show-pointer]="false"
52
+ >
53
+ </po-gauge>
54
+
55
+ <!-- ═══════════════════════════════════════════════════════════════════════════
56
+ CASO 3: p-value + p-ranges + p-description
57
+ ═══════════════════════════════════════════════════════════════════════════ -->
58
+ <h3>Caso 3: Com ranges e description</h3>
59
+ <po-gauge [p-value]="score" [p-ranges]="scoreRanges" p-description="Pontuação geral" [p-height]="250"> </po-gauge>
60
+
61
+ <!-- CASO 3b: ranges sem label (legenda oculta) -->
62
+ <h3>Caso 3b: Ranges sem label</h3>
63
+ <po-gauge [p-value]="70" [p-ranges]="rangesWithoutLabel" p-description="Sem legenda de ranges"> </po-gauge>
64
+
65
+ <!-- CASO 3c: ranges com cores hexadecimais -->
66
+ <h3>Caso 3c: Ranges com cores hex</h3>
67
+ <po-gauge [p-value]="45" [p-ranges]="rangesHexColor" p-title="Hex Colors"> </po-gauge>
68
+
69
+ <!-- CASO 3d: ranges com cores RGB -->
70
+ <h3>Caso 3d: Ranges com cores RGB</h3>
71
+ <po-gauge [p-value]="60" [p-ranges]="rangesRgbColor" p-title="RGB Colors"> </po-gauge>
72
+
73
+ <!-- CASO 3e: ranges com cores do tema PO (color-01, color-02...) -->
74
+ <h3>Caso 3e: Ranges com cores do tema</h3>
75
+ <po-gauge [p-value]="80" [p-ranges]="rangesThemeColor" p-title="Theme Colors"> </po-gauge>
76
+
77
+ <!-- ═══════════════════════════════════════════════════════════════════════════
78
+ CASO 4: p-options (variável) junto de propriedades individuais
79
+ ═══════════════════════════════════════════════════════════════════════════ -->
80
+ <h3>Caso 4: Com p-options variável</h3>
81
+ <po-gauge [p-value]="valor" p-title="Medidor" [p-options]="gaugeOptions"> </po-gauge>
82
+
83
+ <!-- CASO 4b: p-options como objeto literal inline -->
84
+ <h3>Caso 4b: p-options inline</h3>
85
+ <po-gauge [p-value]="temperatura" [p-height]="200" [p-options]="{ showContainerGauge: false, showFromToLegend: true }">
86
+ </po-gauge>
87
+
88
+ <!-- CASO 4c: p-options com todas as propriedades -->
89
+ <h3>Caso 4c: p-options completo</h3>
90
+ <po-gauge [p-value]="85" [p-ranges]="gaugeRanges" p-title="Full Options" [p-options]="fullOptions"> </po-gauge>
91
+
92
+ <!-- CASO 4d: p-options com header options -->
93
+ <h3>Caso 4d: p-options com header</h3>
94
+ <po-gauge [p-value]="55" [p-ranges]="gaugeRanges" p-title="Header Options" [p-options]="optionsWithHeader"> </po-gauge>
95
+
96
+ <!-- CASO 4e: p-options com subtitleGauge -->
97
+ <h3>Caso 4e: p-options com subtitleGauge</h3>
98
+ <po-gauge [p-value]="72" [p-ranges]="scoreRanges" p-title="Com Subtitle" [p-options]="optionsWithSubtitle"> </po-gauge>
99
+
100
+ <!-- CASO 4f: p-options com descriptionChart -->
101
+ <h3>Caso 4f: p-options com descriptionChart</h3>
102
+ <po-gauge
103
+ [p-value]="63"
104
+ [p-ranges]="gaugeRanges"
105
+ p-title="Com DescriptionChart"
106
+ [p-options]="optionsWithDescriptionChart"
107
+ >
108
+ </po-gauge>
109
+
110
+ <!-- CASO 4g: p-options com showContainerGauge false -->
111
+ <h3>Caso 4g: p-options sem container</h3>
112
+ <po-gauge [p-value]="40" p-title="Sem Container" [p-options]="{ showContainerGauge: false }"> </po-gauge>
113
+
114
+ <!-- CASO 4h: p-options com pointer false -->
115
+ <h3>Caso 4h: p-options pointer false</h3>
116
+ <po-gauge [p-value]="66" [p-ranges]="gaugeRanges" p-title="Pointer Off" [p-options]="{ pointer: false }"> </po-gauge>
117
+
118
+ <!-- CASO 4i: p-options inline completo -->
119
+ <h3>Caso 4i: p-options inline completo</h3>
120
+ <po-gauge
121
+ [p-value]="77"
122
+ [p-ranges]="gaugeRanges"
123
+ p-title="Inline Completo"
124
+ [p-options]="{
125
+ showFromToLegend: true,
126
+ pointer: true,
127
+ showContainerGauge: true,
128
+ subtitleGauge: 'Sub inline',
129
+ descriptionChart: 'Desc inline'
130
+ }"
131
+ >
132
+ </po-gauge>
133
+
134
+ <!-- ═══════════════════════════════════════════════════════════════════════════
135
+ CASO 5: Atributos estáticos (sem binding)
136
+ ═══════════════════════════════════════════════════════════════════════════ -->
137
+ <h3>Caso 5: Estático</h3>
138
+ <po-gauge p-title="Metade" p-description="Está em 50%"></po-gauge>
139
+
140
+ <!-- CASO 5b: mix de binding e estático -->
141
+ <h3>Caso 5b: Mix binding + estático</h3>
142
+ <po-gauge [p-value]="dynamicValue" p-title="Título Fixo" p-description="Descrição fixa" [p-ranges]="myRanges">
143
+ </po-gauge>
144
+
145
+ <!-- CASO 5c: apenas p-title estático -->
146
+ <h3>Caso 5c: Apenas título estático</h3>
147
+ <po-gauge p-title="Título Sozinho"></po-gauge>
148
+
149
+ <!-- CASO 5d: p-value estático + p-title estático -->
150
+ <h3>Caso 5d: Value e title estáticos</h3>
151
+ <po-gauge [p-value]="82" p-title="Performance" p-description="82% do alvo"></po-gauge>
152
+
153
+ <!-- ═══════════════════════════════════════════════════════════════════════════
154
+ CASO 6: Múltiplos po-gauge no mesmo template
155
+ ═══════════════════════════════════════════════════════════════════════════ -->
156
+ <h3>Caso 6: Múltiplos gauges</h3>
157
+ <div class="row">
158
+ <div class="col">
159
+ <po-gauge [p-value]="cpu" p-title="CPU" [p-ranges]="cpuRanges"></po-gauge>
160
+ </div>
161
+ <div class="col">
162
+ <po-gauge [p-value]="memory" p-title="Memória" [p-ranges]="memRanges"></po-gauge>
163
+ </div>
164
+ <div class="col">
165
+ <po-gauge [p-value]="disk" p-title="Disco" [p-show-pointer]="true"></po-gauge>
166
+ </div>
167
+ </div>
168
+
169
+ <!-- CASO 6b: Múltiplos gauges com diferentes configurações -->
170
+ <h3>Caso 6b: Gauges variados lado a lado</h3>
171
+ <div class="po-row">
172
+ <div class="po-md-4">
173
+ <po-gauge [p-value]="25" p-title="Simples" p-description="Sem ranges"></po-gauge>
174
+ </div>
175
+ <div class="po-md-4">
176
+ <po-gauge [p-value]="50" p-title="Com Ranges" [p-ranges]="gaugeRanges" [p-show-from-to-legend]="true"> </po-gauge>
177
+ </div>
178
+ <div class="po-md-4">
179
+ <po-gauge [p-value]="90" p-title="Com Options" [p-ranges]="gaugeRanges" [p-options]="gaugeOptions"> </po-gauge>
180
+ </div>
181
+ </div>
182
+
183
+ <!-- ═══════════════════════════════════════════════════════════════════════════
184
+ CASO 7: Conteúdo projetado (content projection)
185
+ ═══════════════════════════════════════════════════════════════════════════ -->
186
+ <h3>Caso 7: Conteúdo projetado</h3>
187
+ <po-gauge [p-value]="progress" p-title="Upload"> </po-gauge>
188
+
189
+ <!-- CASO 7b: com ranges + descrição -->
190
+ <h3>Caso 7b: Ranges + descrição</h3>
191
+ <po-gauge [p-value]="score" [p-ranges]="ranges" p-description="Avaliação"> </po-gauge>
192
+
193
+ <!-- ═══════════════════════════════════════════════════════════════════════════
194
+ CASO 8: Atributos genéricos preservados (class, id, ngClass, ngIf, etc.)
195
+ ═══════════════════════════════════════════════════════════════════════════ -->
196
+ <h3>Caso 8: Atributos genéricos</h3>
197
+ <po-gauge
198
+ [p-value]="val"
199
+ p-title="Com Extras"
200
+ class="my-gauge"
201
+ id="gauge-main"
202
+ [ngClass]="{ active: isActive }"
203
+ *ngIf="showGauge"
204
+ (click)="onGaugeClick()"
205
+ >
206
+ </po-gauge>
207
+
208
+ <!-- CASO 8b: com style inline -->
209
+ <h3>Caso 8b: Com style inline</h3>
210
+ <po-gauge [p-value]="val" p-title="Styled" style="margin-top: 16px" [style.opacity]="isActive ? 1 : 0.5"> </po-gauge>
211
+
212
+ <!-- CASO 8c: com data attributes -->
213
+ <h3>Caso 8c: Com data attributes</h3>
214
+ <po-gauge
215
+ [p-value]="val"
216
+ p-title="Data Attrs"
217
+ data-testid="gauge-test"
218
+ data-cy="cypress-gauge"
219
+ [attr.aria-label]="'Gauge value: ' + val"
220
+ >
221
+ </po-gauge>
222
+
223
+ <!-- ═══════════════════════════════════════════════════════════════════════════
224
+ CASO 9: Dentro de estruturas condicionais Angular
225
+ ═══════════════════════════════════════════════════════════════════════════ -->
226
+ <h3>Caso 9: Dentro de *ngIf</h3>
227
+ <div *ngIf="showGauge">
228
+ <po-gauge [p-value]="val" p-title="Condicional"></po-gauge>
229
+ </div>
230
+
231
+ <!-- CASO 9b: Dentro de *ngFor -->
232
+ <h3>Caso 9b: Dentro de *ngFor</h3>
233
+ <div *ngFor="let item of gaugeItems; let i = index">
234
+ <po-gauge [p-value]="item.value" [p-title]="item.title" [p-ranges]="item.ranges" [p-description]="item.description">
235
+ </po-gauge>
236
+ </div>
237
+
238
+ <!-- CASO 9c: Dentro de ng-container com ngSwitch -->
239
+ <h3>Caso 9c: Com ngSwitch</h3>
240
+ <ng-container [ngSwitch]="gaugeType">
241
+ <po-gauge *ngSwitchCase="'simple'" [p-value]="val" p-title="Simple"></po-gauge>
242
+ <po-gauge *ngSwitchCase="'ranged'" [p-value]="val" [p-ranges]="gaugeRanges" p-title="Ranged"></po-gauge>
243
+ <po-gauge *ngSwitchDefault [p-value]="val" p-title="Default"></po-gauge>
244
+ </ng-container>
245
+
246
+ <!-- CASO 9d: Com ng-template e ngTemplateOutlet -->
247
+ <h3>Caso 9d: Com ng-template</h3>
248
+ <ng-template #gaugeTemplate>
249
+ <po-gauge [p-value]="val" p-title="Template" [p-ranges]="gaugeRanges"></po-gauge>
250
+ </ng-template>
251
+ <ng-container *ngTemplateOutlet="gaugeTemplate"></ng-container>
252
+
253
+ <!-- ═══════════════════════════════════════════════════════════════════════════
254
+ CASO 10: p-show-from-to-legend e p-show-pointer isolados
255
+ ═══════════════════════════════════════════════════════════════════════════ -->
256
+ <h3>Caso 10: showFromToLegend isolado</h3>
257
+ <po-gauge [p-value]="72" [p-ranges]="gaugeRanges" p-title="From-To Legend" [p-show-from-to-legend]="true"> </po-gauge>
258
+
259
+ <!-- CASO 10b: showPointer isolado false -->
260
+ <h3>Caso 10b: showPointer false</h3>
261
+ <po-gauge [p-value]="45" [p-ranges]="gaugeRanges" p-title="Sem Ponteiro" [p-show-pointer]="false"> </po-gauge>
262
+
263
+ <!-- CASO 10c: showPointer com variável -->
264
+ <h3>Caso 10c: showPointer dinâmico</h3>
265
+ <po-gauge [p-value]="60" [p-ranges]="gaugeRanges" p-title="Pointer Dinâmico" [p-show-pointer]="showPointerFlag">
266
+ </po-gauge>
267
+
268
+ <!-- CASO 10d: showFromToLegend com variável -->
269
+ <h3>Caso 10d: showFromToLegend dinâmico</h3>
270
+ <po-gauge [p-value]="55" [p-ranges]="gaugeRanges" p-title="Legend Dinâmico" [p-show-from-to-legend]="showLegendFlag">
271
+ </po-gauge>
272
+
273
+ <!-- CASO 10e: Ambos show flags com expressão -->
274
+ <h3>Caso 10e: Flags com expressão</h3>
275
+ <po-gauge
276
+ [p-value]="88"
277
+ [p-ranges]="gaugeRanges"
278
+ p-title="Expressões"
279
+ [p-show-from-to-legend]="properties.includes('showFromToLegend')"
280
+ [p-show-pointer]="properties.includes('showPointer')"
281
+ >
282
+ </po-gauge>
283
+
284
+ <!-- ═══════════════════════════════════════════════════════════════════════════
285
+ CASO 11: Convivência com po-chart existente
286
+ ═══════════════════════════════════════════════════════════════════════════ -->
287
+ <h3>Caso 11: Gauge ao lado de po-chart</h3>
288
+ <div class="po-row">
289
+ <div class="po-md-6">
290
+ <po-gauge [p-value]="cpu" p-title="CPU Usage" [p-ranges]="cpuRanges"></po-gauge>
291
+ </div>
292
+ <div class="po-md-6">
293
+ <po-chart p-title="Existente" [p-series]="chartSeries"></po-chart>
294
+ </div>
295
+ </div>
296
+
297
+ <!-- CASO 11b: Gauge pendente ao lado de po-chart já existente -->
298
+ <h3>Caso 11b: Pendente de migração</h3>
299
+ <po-gauge [p-value]="b" p-title="Ainda pendente"></po-gauge>
300
+
301
+ <!-- ═══════════════════════════════════════════════════════════════════════════
302
+ CASO 12: Atributos em múltiplas linhas (indentação)
303
+ ═══════════════════════════════════════════════════════════════════════════ -->
304
+ <h3>Caso 12: Multiline</h3>
305
+ <po-gauge
306
+ [p-value]="longVariableName"
307
+ [p-ranges]="rangesArray"
308
+ p-title="Multiline"
309
+ [p-height]="400"
310
+ [p-show-pointer]="true"
311
+ p-description="Teste de indentação preservada"
312
+ >
313
+ </po-gauge>
314
+
315
+ <!-- CASO 12b: tudo em uma linha só -->
316
+ <h3>Caso 12b: Inline</h3>
317
+ <po-gauge [p-value]="x" [p-ranges]="r" p-title="Inline" [p-height]="100" [p-show-from-to-legend]="true"></po-gauge>
318
+
319
+ <!-- CASO 12c: self-closing style (sem conteúdo, mas com /> implícito) -->
320
+ <h3>Caso 12c: Tag fechada imediata</h3>
321
+ <po-gauge [p-value]="x" p-title="Fechada"></po-gauge>
322
+
323
+ <!-- ═══════════════════════════════════════════════════════════════════════════
324
+ CASO 13: p-height variações
325
+ ═══════════════════════════════════════════════════════════════════════════ -->
326
+ <h3>Caso 13: Height mínimo (300)</h3>
327
+ <po-gauge [p-value]="50" p-title="Min Height" [p-height]="300"></po-gauge>
328
+
329
+ <!-- CASO 13b: Height abaixo do mínimo (deve usar 300) -->
330
+ <h3>Caso 13b: Height abaixo do mínimo</h3>
331
+ <po-gauge [p-value]="50" p-title="Below Min" [p-height]="100"></po-gauge>
332
+
333
+ <!-- CASO 13c: Height grande -->
334
+ <h3>Caso 13c: Height grande</h3>
335
+ <po-gauge [p-value]="50" p-title="Big Height" [p-height]="600"></po-gauge>
336
+
337
+ <!-- CASO 13d: Height com variável -->
338
+ <h3>Caso 13d: Height dinâmico</h3>
339
+ <po-gauge [p-value]="50" p-title="Dynamic Height" [p-height]="dynamicHeight"></po-gauge>
340
+
341
+ <!-- CASO 13e: Height com valor literal -->
342
+ <h3>Caso 13e: Height literal</h3>
343
+ <po-gauge [p-value]="50" p-title="Static Height" [p-height]="400"></po-gauge>
344
+
345
+ <!-- ═══════════════════════════════════════════════════════════════════════════
346
+ CASO 14: p-description variações
347
+ ═══════════════════════════════════════════════════════════════════════════ -->
348
+ <h3>Caso 14: Description com ranges (acima do gauge)</h3>
349
+ <po-gauge [p-value]="75" [p-ranges]="gaugeRanges" p-description="Descrição acima do gauge" p-title="Com Ranges">
350
+ </po-gauge>
351
+
352
+ <!-- CASO 14b: Description sem ranges (dentro do arco) -->
353
+ <h3>Caso 14b: Description sem ranges (dentro do arco)</h3>
354
+ <po-gauge [p-value]="75" p-description="Dentro do arco"> </po-gauge>
355
+
356
+ <!-- CASO 14c: Description com binding de variável -->
357
+ <h3>Caso 14c: Description dinâmico</h3>
358
+ <po-gauge [p-value]="75" [p-description]="dynamicDescription"> </po-gauge>
359
+
360
+ <!-- CASO 14d: Description longo -->
361
+ <h3>Caso 14d: Description longo</h3>
362
+ <po-gauge
363
+ [p-value]="75"
364
+ p-description="Esta é uma descrição muito longa para testar o comportamento do componente com textos extensos"
365
+ >
366
+ </po-gauge>
367
+
368
+ <!-- ═══════════════════════════════════════════════════════════════════════════
369
+ CASO 15: p-title variações
370
+ ═══════════════════════════════════════════════════════════════════════════ -->
371
+ <h3>Caso 15: Title com binding</h3>
372
+ <po-gauge [p-value]="50" [p-title]="dynamicTitle"></po-gauge>
373
+
374
+ <!-- CASO 15b: Title com interpolação via variável -->
375
+ <h3>Caso 15b: Title com expressão ternária</h3>
376
+ <po-gauge [p-value]="50" [p-title]="isActive ? 'Ativo' : 'Inativo'"></po-gauge>
377
+
378
+ <!-- ═══════════════════════════════════════════════════════════════════════════
379
+ CASO 16: Conflito p-options vs propriedades individuais (prioridade)
380
+ ═══════════════════════════════════════════════════════════════════════════ -->
381
+ <h3>Caso 16: p-options + p-show-from-to-legend (conflito)</h3>
382
+ <po-gauge
383
+ [p-value]="60"
384
+ [p-ranges]="gaugeRanges"
385
+ p-title="Conflito"
386
+ [p-show-from-to-legend]="true"
387
+ [p-show-pointer]="false"
388
+ [p-options]="{ showFromToLegend: false, pointer: true }"
389
+ >
390
+ </po-gauge>
391
+
392
+ <!-- CASO 16b: p-options com description + p-description separado -->
393
+ <h3>Caso 16b: Conflito description</h3>
394
+ <po-gauge
395
+ [p-value]="70"
396
+ [p-ranges]="gaugeRanges"
397
+ p-title="Conflito Desc"
398
+ p-description="Desc pela propriedade"
399
+ [p-options]="{ descriptionChart: 'Desc pelo options' }"
400
+ >
401
+ </po-gauge>
402
+
403
+ <!-- ═══════════════════════════════════════════════════════════════════════════
404
+ CASO 17: Ranges com valores extremos
405
+ ═══════════════════════════════════════════════════════════════════════════ -->
406
+ <h3>Caso 17: Ranges com valor abaixo do from mínimo</h3>
407
+ <po-gauge [p-value]="5" [p-ranges]="rangesStartAt20" p-title="Value < min from"> </po-gauge>
408
+
409
+ <!-- CASO 17b: Ranges com valor acima do to máximo -->
410
+ <h3>Caso 17b: Value acima do max to</h3>
411
+ <po-gauge [p-value]="120" [p-ranges]="rangesEndAt80" p-title="Value > max to"> </po-gauge>
412
+
413
+ <!-- CASO 17c: Ranges com from/to negativos -->
414
+ <h3>Caso 17c: Ranges negativos</h3>
415
+ <po-gauge [p-value]="-15" [p-ranges]="negativeRanges" p-title="Negative Ranges"> </po-gauge>
416
+
417
+ <!-- CASO 17d: Single range -->
418
+ <h3>Caso 17d: Um único range</h3>
419
+ <po-gauge [p-value]="50" [p-ranges]="singleRange" p-title="Single Range"> </po-gauge>
420
+
421
+ <!-- CASO 17e: Muitos ranges -->
422
+ <h3>Caso 17e: Muitos ranges (12)</h3>
423
+ <po-gauge [p-value]="50" [p-ranges]="manyRanges" p-title="Many Ranges" [p-show-from-to-legend]="true"> </po-gauge>
424
+
425
+ <!-- ═══════════════════════════════════════════════════════════════════════════
426
+ CASO 18: Uso dentro de po-container (exemplo do sample-summary)
427
+ ═══════════════════════════════════════════════════════════════════════════ -->
428
+ <h3>Caso 18: Dentro de po-container</h3>
429
+ <po-container>
430
+ <div class="po-font-title po-mb-3">Sales Performance</div>
431
+ <div class="po-row">
432
+ <div class="po-md-6">
433
+ <po-gauge
434
+ p-title="Employee turnover rate"
435
+ [p-value]="25"
436
+ p-description="25% of turnover"
437
+ [p-show-from-to-legend]="true"
438
+ [p-ranges]="turnoverRanges"
439
+ >
440
+ </po-gauge>
441
+ </div>
442
+ <div class="po-md-6">
443
+ <po-gauge
444
+ p-title="Sales performance"
445
+ [p-value]="82"
446
+ p-description="The sales increased in 82%"
447
+ [p-show-from-to-legend]="true"
448
+ [p-ranges]="salesRanges"
449
+ >
450
+ </po-gauge>
451
+ </div>
452
+ </div>
453
+ </po-container>
454
+
455
+ <!-- ═══════════════════════════════════════════════════════════════════════════
456
+ CASO 19: Uso com pipe
457
+ ═══════════════════════════════════════════════════════════════════════════ -->
458
+ <h3>Caso 19: Value com expressão concatenada</h3>
459
+ <po-gauge [p-value]="rawValue" [p-title]="'Score: ' + score"> </po-gauge>
460
+
461
+ <!-- CASO 19b: Description com pipe -->
462
+ <h3>Caso 19b: Description com pipe</h3>
463
+ <po-gauge [p-value]="score" [p-description]="descricao | uppercase"> </po-gauge>
464
+
465
+ <!-- ═══════════════════════════════════════════════════════════════════════════
466
+ CASO 20: Uso com async pipe (Observable)
467
+ ═══════════════════════════════════════════════════════════════════════════ -->
468
+ <h3>Caso 20: Value com async pipe</h3>
469
+ <po-gauge
470
+ [p-value]="$any(gaugeValue$ | async)"
471
+ [p-title]="$any(gaugeTitle$ | async)"
472
+ [p-ranges]="$any(gaugeRanges$ | async)"
473
+ >
474
+ </po-gauge>
475
+
476
+ <!-- ═══════════════════════════════════════════════════════════════════════════
477
+ CASO 21: Gauge sem nenhuma propriedade (empty)
478
+ ═══════════════════════════════════════════════════════════════════════════ -->
479
+ <h3>Caso 21: Gauge vazio (sem props)</h3>
480
+ <po-gauge></po-gauge>
481
+
482
+ <!-- ═══════════════════════════════════════════════════════════════════════════
483
+ CASO 22: p-options com header completo
484
+ ═══════════════════════════════════════════════════════════════════════════ -->
485
+ <h3>Caso 22: Header options completo</h3>
486
+ <po-gauge [p-value]="85" [p-ranges]="gaugeRanges" p-title="Full Header" [p-options]="fullHeaderOptions"> </po-gauge>
487
+
488
+ <!-- ═══════════════════════════════════════════════════════════════════════════
489
+ CASO 23: Uso com ViewChild / template reference
490
+ ═══════════════════════════════════════════════════════════════════════════ -->
491
+ <h3>Caso 23: Com template reference</h3>
492
+ <po-gauge #myGauge [p-value]="val" p-title="Com Ref" [p-ranges]="gaugeRanges"> </po-gauge>
493
+
494
+ <!-- ═══════════════════════════════════════════════════════════════════════════
495
+ CASO 24: Combinação com outros componentes PO
496
+ ═══════════════════════════════════════════════════════════════════════════ -->
497
+ <h3>Caso 24: Dentro de po-widget</h3>
498
+ <po-widget p-title="Dashboard">
499
+ <po-gauge [p-value]="cpu" p-title="CPU" [p-ranges]="cpuRanges"></po-gauge>
500
+ </po-widget>
501
+
502
+ <!-- CASO 24b: Dentro de po-accordion -->
503
+ <h3>Caso 24b: Dentro de po-accordion</h3>
504
+ <po-accordion>
505
+ <po-accordion-item p-label="Gauge 1">
506
+ <po-gauge [p-value]="25" p-title="Accordion Gauge" [p-ranges]="gaugeRanges"></po-gauge>
507
+ </po-accordion-item>
508
+ </po-accordion>
509
+
510
+ <!-- ═══════════════════════════════════════════════════════════════════════════
511
+ CASO 25: p-value com expressões complexas
512
+ ═══════════════════════════════════════════════════════════════════════════ -->
513
+ <h3>Caso 25: Value com expressão aritmética</h3>
514
+ <po-gauge [p-value]="cpu + memory" p-title="Soma"></po-gauge>
515
+
516
+ <!-- CASO 25b: Value com ternário -->
517
+ <h3>Caso 25b: Value com ternário</h3>
518
+ <po-gauge [p-value]="isActive ? 100 : 0" p-title="Ternário"></po-gauge>
519
+
520
+ <!-- CASO 25c: Value com método -->
521
+ <h3>Caso 25c: Value com método</h3>
522
+ <po-gauge [p-value]="getGaugeValue()" p-title="Método"></po-gauge>
523
+
524
+ <!-- CASO 25d: Value com acesso a propriedade de objeto -->
525
+ <h3>Caso 25d: Value de objeto</h3>
526
+ <po-gauge [p-value]="gaugeData.value" [p-title]="gaugeData.title" [p-ranges]="gaugeData.ranges"></po-gauge>
527
+
528
+ <!-- CASO 25e: Value com non-null assertion -->
529
+ <h3>Caso 25e: Value com non-null assertion</h3>
530
+ <po-gauge [p-value]="gaugeData!.value" [p-title]="gaugeData!.title"></po-gauge>
531
+
532
+ <!-- ═══════════════════════════════════════════════════════════════════════════
533
+ CASO 26: Indentação com tabs vs espaços
534
+ ═══════════════════════════════════════════════════════════════════════════ -->
535
+ <h3>Caso 26: Indentação com 2 espaços</h3>
536
+ <div>
537
+ <po-gauge [p-value]="50" p-title="2 Spaces" [p-ranges]="gaugeRanges"> </po-gauge>
538
+ </div>
539
+
540
+ <!-- CASO 26b: Indentação com 4 espaços -->
541
+ <h3>Caso 26b: Indentação com 4 espaços</h3>
542
+ <div>
543
+ <po-gauge [p-value]="50" p-title="4 Spaces" [p-ranges]="gaugeRanges" [p-height]="350"> </po-gauge>
544
+ </div>
545
+
546
+ <!-- ═══════════════════════════════════════════════════════════════════════════
547
+ CASO 27: Uso com @if / @for (nova sintaxe de controle Angular 17+)
548
+ ═══════════════════════════════════════════════════════════════════════════ -->
549
+ <h3>Caso 27: Com &#64;if (Angular 17+)</h3>
550
+ @if (showGauge) {
551
+ <po-gauge [p-value]="val" p-title="New Control Flow"></po-gauge>
552
+ }
553
+
554
+ <!-- CASO 27b: Com @for -->
555
+ <h3>Caso 27b: Com &#64;for</h3>
556
+ @for (item of gaugeItems; track item.title) {
557
+ <po-gauge [p-value]="item.value" [p-title]="item.title" [p-ranges]="item.ranges"> </po-gauge>
558
+ }
559
+
560
+ <!-- CASO 27c: Com @switch -->
561
+ <h3>Caso 27c: Com &#64;switch</h3>
562
+ @switch (gaugeType) {
563
+ @case ('simple') {
564
+ <po-gauge [p-value]="val" p-title="Simple Switch"></po-gauge>
565
+ }
566
+ @case ('ranged') {
567
+ <po-gauge [p-value]="val" [p-ranges]="gaugeRanges" p-title="Ranged Switch"></po-gauge>
568
+ }
569
+ @default {
570
+ <po-gauge [p-value]="val" p-title="Default Switch"></po-gauge>
571
+ }
572
+ }
573
+
574
+ <!-- ═══════════════════════════════════════════════════════════════════════════
575
+ CASO 28: Gauge com p-ranges vazio (array vazio)
576
+ ═══════════════════════════════════════════════════════════════════════════ -->
577
+ <h3>Caso 28: Ranges vazio</h3>
578
+ <po-gauge [p-value]="50" [p-ranges]="emptyRanges" p-title="Empty Ranges"></po-gauge>
579
+
580
+ <!-- CASO 28b: Ranges undefined/null -->
581
+ <h3>Caso 28b: Ranges null</h3>
582
+ <po-gauge [p-value]="50" [p-ranges]="nullRanges" p-title="Null Ranges"></po-gauge>
583
+
584
+ <!-- ═══════════════════════════════════════════════════════════════════════════
585
+ CASO 29: p-options com apenas showContainerGauge
586
+ ═══════════════════════════════════════════════════════════════════════════ -->
587
+ <h3>Caso 29: Options apenas showContainerGauge true</h3>
588
+ <po-gauge [p-value]="80" p-title="Container True" [p-options]="{ showContainerGauge: true }"> </po-gauge>
589
+
590
+ <!-- ═══════════════════════════════════════════════════════════════════════════
591
+ CASO 30: Gauge com atributos extras (simulação de cenário com atributos custom)
592
+ ═══════════════════════════════════════════════════════════════════════════ -->
593
+ <h3>Caso 30: Atributos extras preservados</h3>
594
+ <po-gauge [p-value]="50" p-title="Título Extra" p-description="Descrição Extra" [attr.data-i18n]="'gauge-30'">
595
+ </po-gauge>
596
+
597
+ <!-- ═══════════════════════════════════════════════════════════════════════════
598
+ CASO 31: Gauge com comentários HTML internos
599
+ ═══════════════════════════════════════════════════════════════════════════ -->
600
+ <h3>Caso 31: Gauge entre comentários HTML</h3>
601
+ <!-- comentário antes -->
602
+ <po-gauge [p-value]="val" p-title="Com Comentário" [p-ranges]="gaugeRanges"> </po-gauge>
603
+ <!-- comentário depois -->
604
+
605
+ <!-- ═══════════════════════════════════════════════════════════════════════════
606
+ CASO 32: Uso do po-gauge labs (todas as propriedades dinâmicas)
607
+ ═══════════════════════════════════════════════════════════════════════════ -->
608
+ <h3>Caso 32: Labs-style (tudo dinâmico)</h3>
609
+ <po-gauge
610
+ [p-description]="labsDescription"
611
+ [p-height]="labsHeight"
612
+ [p-ranges]="labsRanges"
613
+ [p-title]="labsTitle"
614
+ [p-value]="labsValue"
615
+ [p-options]="labsOptions"
616
+ [p-show-from-to-legend]="labsShowFromToLegend"
617
+ [p-show-pointer]="labsShowPointer"
618
+ >
619
+ </po-gauge>
620
+
621
+ <!-- ═══════════════════════════════════════════════════════════════════════════
622
+ CASO 33: Apenas p-value sem nenhum outro atributo de gauge
623
+ ═══════════════════════════════════════════════════════════════════════════ -->
624
+ <h3>Caso 33: Minimal — só valor decimal</h3>
625
+ <po-gauge [p-value]="33.33"></po-gauge>
626
+
627
+ <!-- CASO 33b: Valor com muitas decimais -->
628
+ <h3>Caso 33b: Valor decimal longo</h3>
629
+ <po-gauge [p-value]="66.6666667"></po-gauge>
630
+
631
+ <!-- ═══════════════════════════════════════════════════════════════════════════
632
+ CASO 34: Gauge com output events (click, etc) - atributos não-gauge
633
+ ═══════════════════════════════════════════════════════════════════════════ -->
634
+ <h3>Caso 34: Com múltiplos event handlers</h3>
635
+ <po-gauge
636
+ [p-value]="val"
637
+ p-title="Events"
638
+ (click)="onGaugeClick()"
639
+ (mouseenter)="onMouseEnter()"
640
+ (mouseleave)="onMouseLeave()"
641
+ >
642
+ </po-gauge>
643
+
644
+ <!-- ═══════════════════════════════════════════════════════════════════════════
645
+ CASO 35: Gauge dentro de formulário
646
+ ═══════════════════════════════════════════════════════════════════════════ -->
647
+ <h3>Caso 35: Dentro de form</h3>
648
+ <form>
649
+ <po-gauge [p-value]="formValue" p-title="Form Gauge" [p-ranges]="gaugeRanges" [p-show-from-to-legend]="true">
650
+ </po-gauge>
651
+ </form>
652
+
653
+ <!-- ═══════════════════════════════════════════════════════════════════════════
654
+ CASO 36: p-ranges com ranges inline (literal array no template)
655
+ ═══════════════════════════════════════════════════════════════════════════ -->
656
+ <h3>Caso 36: Ranges inline literal</h3>
657
+ <po-gauge
658
+ [p-value]="60"
659
+ p-title="Inline Ranges"
660
+ [p-ranges]="[
661
+ { from: 0, to: 50, label: 'Low', color: 'red' },
662
+ { from: 50, to: 100, label: 'High', color: 'green' }
663
+ ]"
664
+ >
665
+ </po-gauge>
666
+
667
+ <!-- ═══════════════════════════════════════════════════════════════════════════
668
+ CASO 37: Gauge com binding de duas vias (banana-in-a-box) - edge case
669
+ ═══════════════════════════════════════════════════════════════════════════ -->
670
+ <h3>Caso 37: Atributos não-standard</h3>
671
+ <po-gauge [p-value]="val" p-title="Non-Standard" [hidden]="!showGauge" tabindex="0" role="img"> </po-gauge>
672
+
673
+ <!-- ═══════════════════════════════════════════════════════════════════════════
674
+ CASO 38: Gauge com múltiplas classes e bindings de estilo
675
+ ═══════════════════════════════════════════════════════════════════════════ -->
676
+ <h3>Caso 38: Múltiplas classes</h3>
677
+ <po-gauge
678
+ [p-value]="val"
679
+ p-title="Multi Class"
680
+ class="gauge-wrapper po-mb-3 po-mt-2"
681
+ [class.highlighted]="isActive"
682
+ [class.dimmed]="!isActive"
683
+ >
684
+ </po-gauge>
685
+
686
+ <!-- ═══════════════════════════════════════════════════════════════════════════
687
+ CASO 39: Gauge com @Input de componente pai passado como parâmetro
688
+ ═══════════════════════════════════════════════════════════════════════════ -->
689
+ <h3>Caso 39: Propriedades de @Input do pai</h3>
690
+ <po-gauge
691
+ [p-value]="inputValue"
692
+ [p-title]="inputTitle"
693
+ [p-description]="inputDescription"
694
+ [p-ranges]="inputRanges"
695
+ [p-height]="inputHeight"
696
+ [p-show-from-to-legend]="inputShowLegend"
697
+ [p-show-pointer]="inputShowPointer"
698
+ [p-options]="inputOptions"
699
+ >
700
+ </po-gauge>
701
+
702
+ <!-- ═══════════════════════════════════════════════════════════════════════════
703
+ CASO 40: Combinação de p-options e TODAS as propriedades individuais
704
+ ═══════════════════════════════════════════════════════════════════════════ -->
705
+ <h3>Caso 40: Tudo junto — máximo de propriedades</h3>
706
+ <po-gauge
707
+ [p-value]="currentValue"
708
+ [p-ranges]="gaugeRanges"
709
+ [p-description]="descricao"
710
+ [p-title]="dynamicTitle"
711
+ [p-height]="dynamicHeight"
712
+ [p-show-from-to-legend]="showLegendFlag"
713
+ [p-show-pointer]="showPointerFlag"
714
+ [p-options]="fullOptions"
715
+ class="full-gauge"
716
+ id="gauge-full"
717
+ [ngClass]="{ active: isActive }"
718
+ *ngIf="showGauge"
719
+ data-testid="full-gauge"
720
+ #fullGauge
721
+ (click)="onGaugeClick()"
722
+ >
723
+ </po-gauge>