1- import { Directive , EventEmitter , HostBinding , HostListener , Input , Output , TemplateRef } from '@angular/core' ;
1+ import { Directive , EventEmitter , HostBinding , HostListener , Input , Output , TemplateRef , input } from '@angular/core' ;
22
33import { convertToBoolean , convertToInt , getDefaultSizeFn , validateSizeFn } from '../../utils/util' ;
44
55import { PoFieldSize } from '../../enums/po-field-size.enum' ;
6+ import { PoProgressShape } from './enums/po-progress-shape.enum' ;
67import { PoProgressSize } from './enums/po-progress-size.enum' ;
78import { PoProgressStatus } from './enums/po-progress-status.enum' ;
89import { PoProgressAction } from './interfaces' ;
910
1011const poProgressMaxValue = 100 ;
1112const poProgressMinValue = 0 ;
13+ const CIRCLE_DEFAULT_RADIUS = 0 ;
14+ const CIRCLE_MIN_RADIUS = 24 ;
1215
1316/**
1417 * @description
@@ -34,10 +37,24 @@ const poProgressMinValue = 0;
3437 * | **po-progress-bar** | | |
3538 * | `--background-color-tray` | Cor do background | `var(--color-brand-01-lightest)` |
3639 * | `--background-color-indicator` | Cor do background do indicador | `var(--color-action-default)` |
40+ * | **po-progress-circle** | | |
41+ * | `--background-color-tray` | Cor do background | `var(--color-brand-01-lightest)` |
42+ * | `--background-color-indicator` | Cor do background do indicador | `var(--color-action-default)` |
3743 *
3844 */
3945@Directive ( )
4046export class PoProgressBaseComponent {
47+ /**
48+ * @optional
49+ *
50+ * @description
51+ *
52+ * Define um nome acessível para o elemento com `role="progressbar"`.
53+ *
54+ * Quando não informado, o componente utiliza o valor de `p-text` como alternativa, se disponível.
55+ */
56+ @Input ( 'p-aria-label' ) ariaLabel ?: string ;
57+
4158 /**
4259 * @optional
4360 *
@@ -48,6 +65,8 @@ export class PoProgressBaseComponent {
4865 * > Se nenhuma função for passada para o evento `(p-cancel)` ou a barra de progresso estiver com o status `PoProgressStatus.Success`,
4966 * o ícone de cancelamento não será exibido.
5067 *
68+ * > Não compatível com `p-shape="circle"`.
69+ *
5170 * @default `false`
5271 */
5372 @Input ( { alias : 'p-disabled-cancel' , transform : convertToBoolean } ) disabledCancel : boolean = false ;
@@ -58,6 +77,8 @@ export class PoProgressBaseComponent {
5877 * @description
5978 *
6079 * Informação adicional que aparecerá abaixo da barra de progresso ao lado direito.
80+ *
81+ * > Não compatível com `p-shape="circle"`.
6182 */
6283 @Input ( 'p-info' ) info ?: string ;
6384
@@ -69,6 +90,8 @@ export class PoProgressBaseComponent {
6990 * Ícone que aparecerá ao lado do texto da propriedade `p-info`.
7091 *
7192 * Exemplo: `an an-check`.
93+ *
94+ * > Não compatível com `p-shape="circle"`.
7295 */
7396 @Input ( 'p-info-icon' ) infoIcon ?: string | TemplateRef < void > ;
7497
@@ -90,6 +113,8 @@ export class PoProgressBaseComponent {
90113 * @description
91114 *
92115 * Texto principal que aparecerá abaixo da barra de progresso no lado esquerdo.
116+ *
117+ * > Não compatível com `p-shape="circle"`.
93118 */
94119 @Input ( 'p-text' ) text ?: string ;
95120
@@ -107,6 +132,8 @@ export class PoProgressBaseComponent {
107132 * - **`disabled`**: Indica se o botão deve estar desabilitado (opcional).
108133 * - **`visible`**: Determina se o botão será exibido. Pode ser um valor booleano ou uma função que retorna um booleano (opcional).
109134 *
135+ * > Não compatível com `p-shape="circle"`.
136+ *
110137 * @example
111138 * **Exemplo de uso:**
112139 * ```html
@@ -144,6 +171,8 @@ export class PoProgressBaseComponent {
144171 * Evento emitido quando o botão definido em `p-custom-action` é clicado. Este evento retorna informações
145172 * relacionadas à barra de progresso ou ao arquivo/processo associado, permitindo executar ações específicas.
146173 *
174+ * > Não compatível com `p-shape="circle"`.
175+ *
147176 * @example
148177 * **Exemplo de uso:**
149178 *
@@ -185,6 +214,8 @@ export class PoProgressBaseComponent {
185214 *
186215 * > Se nenhuma função for passada para o evento ou a barra de progresso estiver com o status `PoProgressStatus.Success`,
187216 * o ícone de cancelamento não será exibido.
217+ *
218+ * > Não compatível com `p-shape="circle"`.
188219 */
189220 @Output ( 'p-cancel' ) cancel : EventEmitter < any > = new EventEmitter ( ) ;
190221
@@ -197,6 +228,8 @@ export class PoProgressBaseComponent {
197228 *
198229 * > o ícone será exibido apenas se informar uma função neste evento e o status da barra de progresso for
199230 * `PoProgressStatus.Error`.
231+ *
232+ * > Não compatível com `p-shape="circle"`.
200233 */
201234 @Output ( 'p-retry' ) retry : EventEmitter < any > = new EventEmitter ( ) ;
202235
@@ -206,6 +239,59 @@ export class PoProgressBaseComponent {
206239 private _sizeActions : string = undefined ;
207240 private _initialSizeActions : string = undefined ;
208241
242+ /**
243+ * @optional
244+ *
245+ * @description
246+ *
247+ * Define o formato visual do componente de progresso.
248+ *
249+ * Valores válidos:
250+ * - `bar`: exibe o progresso em formato de barra.
251+ * - `circle`: exibe o progresso em formato circular.
252+ *
253+ * @example
254+ * ```html
255+ * <po-progress p-shape="circle" [p-value]="50"></po-progress>
256+ * ```
257+ *
258+ * @default `bar`
259+ */
260+ shape = input < string , string > ( PoProgressShape . bar , {
261+ alias : 'p-shape' ,
262+ transform : ( value : string ) => ( PoProgressShape [ value ] ? PoProgressShape [ value ] : PoProgressShape . bar )
263+ } ) ;
264+
265+ /**
266+ * @optional
267+ *
268+ * @description
269+ *
270+ * Define o raio do círculo SVG em pixels. Permite ao usuário customizar o tamanho
271+ * do indicador circular ao utilizar `p-shape="circle"`.
272+ *
273+ * > O valor mínimo aceito é **24**.
274+ *
275+ * > Quando não informado, o componente calcula o raio automaticamente a partir do container pai.
276+ * Caso o container pai não possua dimensões definidas, o valor padrão de **45** será utilizado.
277+ *
278+ * > Não compatível com `p-shape="bar"`.
279+ *
280+ * @default `45` (automático)
281+ */
282+ radius = input < number , number > ( CIRCLE_DEFAULT_RADIUS , {
283+ alias : 'p-radius' ,
284+ transform : ( value : number ) => {
285+ // Se nenhum valor foi fornecido (undefined/null), retorna 0 para indicar "não informado"
286+ if ( value === undefined || value === null ) {
287+ return CIRCLE_DEFAULT_RADIUS ;
288+ }
289+ const intValue = convertToInt ( value , CIRCLE_DEFAULT_RADIUS ) ;
290+ // Quando o usuário informa um valor, aplica o mínimo de CIRCLE_MIN_RADIUS
291+ return intValue > 0 ? Math . max ( intValue , CIRCLE_MIN_RADIUS ) : CIRCLE_DEFAULT_RADIUS ;
292+ }
293+ } ) ;
294+
209295 /**
210296 * @optional
211297 *
@@ -282,6 +368,8 @@ export class PoProgressBaseComponent {
282368 * > Caso a acessibilidade AA não esteja configurada, o tamanho `medium` será mantido.
283369 * Para mais detalhes, consulte a documentação do [po-theme](https://po-ui.io/documentation/po-theme).
284370 *
371+ * > Não compatível com `p-shape="circle"`.
372+ *
285373 * @default `medium`
286374 */
287375 set sizeActions ( value : string ) {
@@ -302,6 +390,8 @@ export class PoProgressBaseComponent {
302390 *
303391 * Ativa a exibição da porcentagem atual da barra de progresso.
304392 *
393+ * > Se utilizada no `p-shape="circle"` e o status estiver como `error`, a porcentagem não será exibida.
394+ *
305395 * @default `false`
306396 */
307397 @Input ( { alias : 'p-show-percentage' , transform : convertToBoolean } ) showPercentage : boolean = false ;
0 commit comments