ngx-opalbytes-components 1.28.0 → 1.30.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.
- package/README.md +298 -0
- package/cli/cao-comp.cjs +10 -10
- package/fesm2022/ngx-opalbytes-components.mjs +394 -6
- package/fesm2022/ngx-opalbytes-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/shared/components/avatar/avatar.constants.ts +17 -0
- package/src/lib/shared/components/avatar/avatar.css +44 -0
- package/src/lib/shared/components/avatar/avatar.html +27 -0
- package/src/lib/shared/components/avatar/avatar.model.ts +3 -0
- package/src/lib/shared/components/avatar/avatar.spec.ts +88 -0
- package/src/lib/shared/components/avatar/avatar.stories.ts +85 -0
- package/src/lib/shared/components/avatar/avatar.ts +83 -0
- package/src/lib/shared/components/avatar/index.ts +3 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.css +105 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.html +108 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.model.ts +54 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.spec.ts +93 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.stories.ts +122 -0
- package/src/lib/shared/components/breadcrumb/breadcrumb.ts +72 -0
- package/src/lib/shared/components/breadcrumb/index.ts +2 -0
- package/src/lib/shared/components/index.ts +5 -1
- package/src/lib/shared/components/popover/index.ts +3 -0
- package/src/lib/shared/components/popover/popover.css +149 -0
- package/src/lib/shared/components/popover/popover.html +44 -0
- package/src/lib/shared/components/popover/popover.model.ts +19 -0
- package/src/lib/shared/components/popover/popover.spec.ts +22 -0
- package/src/lib/shared/components/popover/popover.stories.ts +0 -0
- package/src/lib/shared/components/popover/popover.ts +312 -0
- package/src/lib/shared/components/progress-bar/index.ts +2 -0
- package/src/lib/shared/components/progress-bar/progress-bar.css +141 -0
- package/src/lib/shared/components/progress-bar/progress-bar.html +39 -0
- package/src/lib/shared/components/progress-bar/progress-bar.model.ts +8 -0
- package/src/lib/shared/components/progress-bar/progress-bar.spec.ts +94 -0
- package/src/lib/shared/components/progress-bar/progress-bar.stories.ts +53 -0
- package/src/lib/shared/components/progress-bar/progress-bar.ts +50 -0
- package/src/lib/shared/components/progress-spinner/index.ts +2 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.css +90 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.html +50 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.model.ts +8 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.spec.ts +85 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.stories.ts +73 -0
- package/src/lib/shared/components/progress-spinner/progress-spinner.ts +71 -0
- package/types/ngx-opalbytes-components.d.ts +262 -3
package/README.md
CHANGED
|
@@ -234,17 +234,21 @@ src/
|
|
|
234
234
|
└── components/
|
|
235
235
|
| ├── accordion/
|
|
236
236
|
| ├── accordion-item/
|
|
237
|
+
| ├── avatar/
|
|
237
238
|
| ├── base-button/
|
|
238
239
|
| ├── base-icon/
|
|
239
240
|
| ├── base-input/
|
|
240
241
|
| ├── base-time-range/
|
|
241
242
|
| ├── base-toggle/
|
|
243
|
+
| ├── breadcrumb/
|
|
242
244
|
| ├── checkbox/
|
|
243
245
|
| ├── drop-down/
|
|
244
246
|
| ├── footer/
|
|
245
247
|
| ├── kpi/
|
|
246
248
|
| ├── links-button/
|
|
247
249
|
| ├── paginator/
|
|
250
|
+
| ├── progress-bar/
|
|
251
|
+
| ├── progress-spinner/
|
|
248
252
|
| ├── radio/
|
|
249
253
|
| ├── skeleton/
|
|
250
254
|
| ├── slide-toggle/
|
|
@@ -930,6 +934,61 @@ Um componente de alternância (toggle switch) que funciona com `ngModel` ou `for
|
|
|
930
934
|
| `inputChange` | `EventEmitter<string>` | Emitido a cada mudança no input. |
|
|
931
935
|
| `statusChanged` | `EventEmitter<CaoBaseToggleComponent>` | Emitido quando o toggle é alternado. |
|
|
932
936
|
|
|
937
|
+
---
|
|
938
|
+
|
|
939
|
+
### `CaoBreadcrumbComponent`
|
|
940
|
+
|
|
941
|
+
Trilha de navegação (breadcrumb) com ícones Lucide ou imagem, link de navegação, badge e divisor customizável.
|
|
942
|
+
|
|
943
|
+
**Seletor:** `<cao-breadcrumb>`
|
|
944
|
+
|
|
945
|
+
**Interface `ICaoBreadcrumbItem`**
|
|
946
|
+
|
|
947
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
948
|
+
| --- | --- | --- | --- |
|
|
949
|
+
| `label` | `string` | — | Texto do item. |
|
|
950
|
+
| `icon` | `string` | — | Nome do ícone Lucide ou URL/caminho/data URI de imagem. |
|
|
951
|
+
| `isLucideIcon` | `boolean` | `true` | Define se `icon` é Lucide. |
|
|
952
|
+
| `iconPosition` | `'left' \| 'right'` | `'left'` | Direção do ícone em relação ao texto. |
|
|
953
|
+
| `iconColor` / `iconSize` / `iconStrokeWidth` | `string` / `number` / `number` | — / `16` / `1.5` | Aparência do ícone. |
|
|
954
|
+
| `link` | `string \| unknown[]` | — | Navegação interna (`routerLink`). |
|
|
955
|
+
| `queryParams` | `Params` | — | Query params do `link`. |
|
|
956
|
+
| `href` / `target` | `string` / `'_self' \| '_blank' ...` | — | Navegação externa. |
|
|
957
|
+
| `command` | `(e: ICaoBreadcrumbItemClickEvent) => void` | — | Callback de clique (sem `link`/`href` vira `<button>`). |
|
|
958
|
+
| `badge` / `badgeColor` / `badgeBgColor` | `string \| number` / `string` / `string` | — | Badge do item. |
|
|
959
|
+
| `disabled` | `boolean` | `false` | Desabilita o item. |
|
|
960
|
+
| `ariaLabel` / `dataCy` | `string` | — | Acessibilidade e testes E2E. |
|
|
961
|
+
|
|
962
|
+
**Atributos (Inputs)**
|
|
963
|
+
|
|
964
|
+
| Atributo | Tipo | Padrão | Descrição |
|
|
965
|
+
| --- | --- | --- | --- |
|
|
966
|
+
| `items` | `ICaoBreadcrumbItem[]` | `[]` | Itens; o último é a página atual (`aria-current="page"`). |
|
|
967
|
+
| `home` | `ICaoBreadcrumbItem` | `undefined` | Item inicial opcional. |
|
|
968
|
+
| `separator` | `string` | `'/'` | Texto do divisor. |
|
|
969
|
+
| `separatorIcon` | `string` | `''` | Ícone do divisor (sobrepõe `separator`). |
|
|
970
|
+
| `isLucideSeparatorIcon` | `boolean` | `true` | Define se `separatorIcon` é Lucide. |
|
|
971
|
+
| `separatorIconSize` / `separatorIconStrokeWidth` | `number` | `14` / `1.5` | Aparência do ícone divisor. |
|
|
972
|
+
| `linkColor`, `linkHoverColor`, `currentColor`, `separatorColor`, `fontSize`, `gap` | `string` | `''` | Atalhos para as CSS custom properties. |
|
|
973
|
+
| `ariaLabel` | `string` | `'Breadcrumb'` | `aria-label` do `<nav>`. |
|
|
974
|
+
| `dataCy` | `string` | `''` | Atributo para testes E2E. |
|
|
975
|
+
|
|
976
|
+
**Eventos (Outputs):** `itemClick` → `ICaoBreadcrumbItemClickEvent` (`item`, `index`, `originalEvent`).
|
|
977
|
+
|
|
978
|
+
**CSS Custom Properties:** `--cao-breadcrumb-link-color` (`#6b7280`), `--cao-breadcrumb-link-hover-color` (`#4f46e5`), `--cao-breadcrumb-current-color` (`#111827`), `--cao-breadcrumb-separator-color` (`#9ca3af`), `--cao-breadcrumb-disabled-color`, `--cao-breadcrumb-focus-ring`, `--cao-breadcrumb-badge-bg`, `--cao-breadcrumb-badge-text`, `--cao-breadcrumb-gap` (`8px`), `--cao-breadcrumb-font-size` (`0.875rem`).
|
|
979
|
+
|
|
980
|
+
```html
|
|
981
|
+
<cao-breadcrumb
|
|
982
|
+
[home]="{ icon: 'house', ariaLabel: 'Início', link: '/' }"
|
|
983
|
+
[items]="[
|
|
984
|
+
{ label: 'Pedidos', icon: 'package', iconPosition: 'right', link: '/pedidos', badge: 12 },
|
|
985
|
+
{ label: 'Pedido #42' }
|
|
986
|
+
]"
|
|
987
|
+
separatorIcon="chevron-right" />
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
> Depende de `BaseIcon` (copie junto ao usar `cao-comp`) e de `@angular/router`.
|
|
991
|
+
|
|
933
992
|
---
|
|
934
993
|
### `CaoAccordionComponent` e `CaoAccordionItemComponent`
|
|
935
994
|
|
|
@@ -1130,7 +1189,110 @@ export class FaqComponent {}
|
|
|
1130
1189
|
- Fora de um `<cao-accordion>`, o item se comporta como um cartão expansível independente.
|
|
1131
1190
|
|
|
1132
1191
|
---
|
|
1192
|
+
### `CaoAvatarComponent`
|
|
1193
|
+
|
|
1194
|
+
Avatar para representar usuários ou entidades, com imagem, ícone (Lucide ou imagem) ou texto (iniciais). Possui imagem padrão embutida, usada enquanto nenhuma fonte for informada ou quando a imagem falha ao carregar. Tamanho, formato e contorno (stroke) são configuráveis.
|
|
1195
|
+
|
|
1196
|
+
**Seletor:** `<cao-avatar>`
|
|
1197
|
+
|
|
1198
|
+
**Tipos**
|
|
1199
|
+
|
|
1200
|
+
| Tipo | Valores |
|
|
1201
|
+
| --- | --- |
|
|
1202
|
+
| `CaoAvatarPresetSize` | `'small'` (24px) \| `'normal'` (32px) \| `'large'` (48px) \| `'xlarge'` (64px) |
|
|
1203
|
+
| `CaoAvatarShape` | `'circle'` \| `'rounded'` \| `'square'` |
|
|
1204
|
+
| `CaoAvatarStrokeStyle` | `'solid'` \| `'dashed'` \| `'dotted'` \| `'double'` |
|
|
1205
|
+
|
|
1206
|
+
**Atributos (Inputs)**
|
|
1207
|
+
|
|
1208
|
+
| Atributo | Tipo | Padrão | Descrição |
|
|
1209
|
+
| --- | --- | --- | --- |
|
|
1210
|
+
| `src` | `string \| null \| undefined` | `''` | URL da imagem. Se vazia ou se falhar ao carregar, o avatar usa `icon`, `label` ou a imagem padrão (nessa ordem). |
|
|
1211
|
+
| `defaultSrc` | `string` | `''` | Imagem padrão customizada. Se vazia, usa a silhueta embutida (`CAO_AVATAR_DEFAULT_SRC`). |
|
|
1212
|
+
| `label` | `string` | `''` | Texto exibido (ex.: iniciais) quando não há imagem nem ícone. |
|
|
1213
|
+
| `icon` | `string` | `''` | Nome do ícone Lucide ou caminho/URL de imagem usada como ícone. |
|
|
1214
|
+
| `isLucideIcon` | `boolean` | `true` | Define se `icon` é um ícone Lucide. |
|
|
1215
|
+
| `iconColor` | `string` | `''` | Cor do ícone Lucide. Se vazia, usa `textColor`. |
|
|
1216
|
+
| `size` | `CaoAvatarPresetSize \| number \| string` | `'normal'` | Tamanho predefinido, número em px ou texto (`'72px'`, `'4.5rem'`). Valores inválidos voltam para `'normal'`. |
|
|
1217
|
+
| `shape` | `CaoAvatarShape` | `'circle'` | Formato do avatar. |
|
|
1218
|
+
| `strokeWidth` | `number \| string` | `0` | Espessura do contorno. Número é convertido para `px`; `0` remove o contorno. |
|
|
1219
|
+
| `strokeColor` | `string` | `'#ffffff'` | Cor do contorno. |
|
|
1220
|
+
| `strokeStyle` | `CaoAvatarStrokeStyle` | `'solid'` | Estilo do contorno. |
|
|
1221
|
+
| `bgColor` | `string` | `''` | Cor de fundo (sobrescreve `--cao-avatar-bg`). |
|
|
1222
|
+
| `textColor` | `string` | `''` | Cor do texto/ícone (sobrescreve `--cao-avatar-text`). |
|
|
1223
|
+
| `alt` | `string` | `''` | Texto alternativo do avatar. |
|
|
1224
|
+
| `ariaLabel` | `string` | `''` | `aria-label` do avatar. Prioridade: `ariaLabel` → `alt` → `label` → `'Avatar'`. |
|
|
1225
|
+
| `dataCy` | `string` | `''` | Atributo para testes E2E com Cypress. |
|
|
1226
|
+
|
|
1227
|
+
**Ordem de exibição**
|
|
1228
|
+
|
|
1229
|
+
1. `src` (se informado e carregado com sucesso);
|
|
1230
|
+
2. `icon`;
|
|
1231
|
+
3. `label`;
|
|
1232
|
+
4. imagem padrão (`defaultSrc` ou a silhueta embutida).
|
|
1233
|
+
|
|
1234
|
+
Se o `src` falhar ao carregar (erro 404, URL inválida etc.), o componente passa automaticamente para o próximo item da lista.
|
|
1235
|
+
|
|
1236
|
+
**Constantes exportadas**
|
|
1237
|
+
|
|
1238
|
+
| Constante | Descrição |
|
|
1239
|
+
| --- | --- |
|
|
1240
|
+
| `CAO_AVATAR_DEFAULT_SRC` | Data URI da imagem padrão (silhueta em SVG, funciona offline). |
|
|
1241
|
+
| `CAO_AVATAR_SIZES` | Mapa dos tamanhos predefinidos em px (`small`, `normal`, `large`, `xlarge`). |
|
|
1133
1242
|
|
|
1243
|
+
**CSS Custom Properties**
|
|
1244
|
+
|
|
1245
|
+
| Propriedade | Padrão | Descrição |
|
|
1246
|
+
| --- | --- | --- |
|
|
1247
|
+
| `--cao-avatar-bg` | `#e5e7eb` | Cor de fundo. |
|
|
1248
|
+
| `--cao-avatar-text` | `#374151` | Cor do texto/ícone. |
|
|
1249
|
+
| `--cao-avatar-radius` | `25%` | Raio da borda no formato `rounded`. |
|
|
1250
|
+
|
|
1251
|
+
**Exemplo básico:**
|
|
1252
|
+
|
|
1253
|
+
```html
|
|
1254
|
+
<!-- Sem src: exibe a imagem padrão -->
|
|
1255
|
+
<cao-avatar></cao-avatar>
|
|
1256
|
+
|
|
1257
|
+
<!-- Com imagem -->
|
|
1258
|
+
<cao-avatar src="https://exemplo.com/foto.png" alt="Foto de Maria" size="large"></cao-avatar>
|
|
1259
|
+
|
|
1260
|
+
<!-- Com iniciais -->
|
|
1261
|
+
<cao-avatar label="MB" bgColor="#eef2ff" textColor="#4338ca"></cao-avatar>
|
|
1262
|
+
|
|
1263
|
+
<!-- Com ícone Lucide -->
|
|
1264
|
+
<cao-avatar icon="user" bgColor="#dcfce7" iconColor="#166534"></cao-avatar>
|
|
1265
|
+
```
|
|
1266
|
+
|
|
1267
|
+
**Exemplo com tamanho, formato e contorno:**
|
|
1268
|
+
|
|
1269
|
+
```html
|
|
1270
|
+
<cao-avatar src="assets/foto.png" size="xlarge" shape="rounded"></cao-avatar>
|
|
1271
|
+
<cao-avatar src="assets/foto.png" [size]="96" shape="square"></cao-avatar>
|
|
1272
|
+
<cao-avatar src="assets/foto.png" size="7rem"></cao-avatar>
|
|
1273
|
+
|
|
1274
|
+
<cao-avatar
|
|
1275
|
+
src="assets/foto.png"
|
|
1276
|
+
size="xlarge"
|
|
1277
|
+
[strokeWidth]="3"
|
|
1278
|
+
strokeColor="#4f46e5"
|
|
1279
|
+
strokeStyle="dashed">
|
|
1280
|
+
</cao-avatar>
|
|
1281
|
+
```
|
|
1282
|
+
|
|
1283
|
+
**Exemplo com imagem padrão customizada:**
|
|
1284
|
+
|
|
1285
|
+
```html
|
|
1286
|
+
<cao-avatar [src]="usuario.foto" defaultSrc="assets/avatar-padrao.png"></cao-avatar>
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
**Observações:**
|
|
1290
|
+
|
|
1291
|
+
- Possui `role="img"` com `aria-label`; a imagem interna é decorativa (`alt=""`), evitando leitura duplicada.
|
|
1292
|
+
- A imagem padrão é um SVG em data URI e passa por `DomSanitizer.bypassSecurityTrustUrl` (conteúdo controlado pela lib). Data URIs em SVG informadas em `src` **não** recebem esse tratamento e podem ser bloqueadas pelo sanitizador do Angular — use URL, caminho de arquivo ou PNG/JPEG em base64.
|
|
1293
|
+
- Para ícones Lucide, registre os ícones usados com `provideLucideIcons` (de `@lucide/angular`).
|
|
1294
|
+
- Depende de `BaseIcon` (copie junto ao usar `cao-comp`).
|
|
1295
|
+
---
|
|
1134
1296
|
### `CaoSlideToggleComponent`
|
|
1135
1297
|
|
|
1136
1298
|
Um switch (slide toggle) acessível e customizável, com suporte a `ngModel` e formulários reativos via `ControlValueAccessor`. O visual é construído com trilho e thumb animados, sem depender do Material em runtime.
|
|
@@ -1889,6 +2051,142 @@ Controle de paginação para tabelas ou listas.
|
|
|
1889
2051
|
| --- | --- | --- |
|
|
1890
2052
|
| `pageEvent` | `EventEmitter<PageEvent>` | Emitido em qualquer evento de paginação. |
|
|
1891
2053
|
|
|
2054
|
+
---
|
|
2055
|
+
### `CaoProgressBarComponent`
|
|
2056
|
+
|
|
2057
|
+
Barra de progresso baseada no `mat-progress-bar` do Angular Material, **sem depender do Material em runtime** (apenas `@angular/core`). Suporta os modos `determinate`, `indeterminate`, `buffer` e `query`, cores e altura configuráveis e exibição opcional do percentual.
|
|
2058
|
+
|
|
2059
|
+
**Seletor:** `<cao-progress-bar>`
|
|
2060
|
+
|
|
2061
|
+
**Tipo `CaoProgressBarMode`**
|
|
2062
|
+
|
|
2063
|
+
| Valor | Descrição |
|
|
2064
|
+
| --- | --- |
|
|
2065
|
+
| `'determinate'` | Progresso conhecido, controlado por `value` (padrão). |
|
|
2066
|
+
| `'indeterminate'` | Progresso desconhecido, animação contínua. |
|
|
2067
|
+
| `'buffer'` | Exibe `value` (progresso) e `bufferValue` (buffer), com pontos animados no restante. |
|
|
2068
|
+
| `'query'` | Indeterminado com a animação invertida (ex.: aguardando resposta antes de passar a `determinate`). |
|
|
2069
|
+
|
|
2070
|
+
**Atributos (Inputs)**
|
|
2071
|
+
|
|
2072
|
+
| Atributo | Tipo | Padrão | Descrição |
|
|
2073
|
+
| --- | --- | --- | --- |
|
|
2074
|
+
| `mode` | `CaoProgressBarMode` | `'determinate'` | Modo de exibição. |
|
|
2075
|
+
| `value` | `number` | `0` | Progresso de 0 a 100 (`determinate` e `buffer`). Valores fora do intervalo são limitados. |
|
|
2076
|
+
| `bufferValue` | `number` | `0` | Valor do buffer de 0 a 100 (`buffer`). |
|
|
2077
|
+
| `color` | `string` | `''` | Cor da barra (qualquer cor CSS). Padrão visual: `#4f46e5`. |
|
|
2078
|
+
| `trackColor` | `string` | `''` | Cor do trilho. Padrão visual: `#e5e7eb`. |
|
|
2079
|
+
| `bufferColor` | `string` | `''` | Cor do buffer. Padrão: `color` com 35% de opacidade. |
|
|
2080
|
+
| `height` | `string` | `'4px'` | Altura da barra. |
|
|
2081
|
+
| `borderRadius` | `string` | `''` | Raio da borda. Padrão: totalmente arredondada. |
|
|
2082
|
+
| `animationDuration` | `string` | `''` | Duração do ciclo nos modos indeterminado/query. Padrão visual: `2s`. |
|
|
2083
|
+
| `showValue` | `boolean` | `false` | Exibe o percentual ao lado da barra (`determinate` e `buffer`). |
|
|
2084
|
+
| `ariaLabel` | `string` | `''` | `aria-label` da barra. |
|
|
2085
|
+
| `ariaLabelledBy` | `string` | `''` | `aria-labelledby` da barra. |
|
|
2086
|
+
| `dataCy` | `string` | `''` | Atributo para testes E2E com Cypress. |
|
|
2087
|
+
|
|
2088
|
+
**CSS Custom Properties**
|
|
2089
|
+
|
|
2090
|
+
| Propriedade | Padrão | Descrição |
|
|
2091
|
+
| --- | --- | --- |
|
|
2092
|
+
| `--cao-progress-bar-color` | `#4f46e5` | Cor da barra. |
|
|
2093
|
+
| `--cao-progress-bar-track-color` | `#e5e7eb` | Cor do trilho. |
|
|
2094
|
+
| `--cao-progress-bar-buffer-color` | `color-mix(in srgb, <cor> 35%, transparent)` | Cor do buffer. |
|
|
2095
|
+
| `--cao-progress-bar-text-color` | `#374151` | Cor do percentual (`showValue`). |
|
|
2096
|
+
| `--cao-progress-bar-radius` | `999px` | Raio da borda. |
|
|
2097
|
+
| `--cao-progress-bar-duration` | `2s` | Duração do ciclo da animação. |
|
|
2098
|
+
|
|
2099
|
+
**Exemplos:**
|
|
2100
|
+
|
|
2101
|
+
```html
|
|
2102
|
+
<!-- Determinate com percentual -->
|
|
2103
|
+
<cao-progress-bar [value]="progresso" [showValue]="true" ariaLabel="Upload do arquivo"></cao-progress-bar>
|
|
2104
|
+
|
|
2105
|
+
<!-- Indeterminate -->
|
|
2106
|
+
<cao-progress-bar mode="indeterminate" ariaLabel="Carregando"></cao-progress-bar>
|
|
2107
|
+
|
|
2108
|
+
<!-- Buffer -->
|
|
2109
|
+
<cao-progress-bar mode="buffer" [value]="30" [bufferValue]="65"></cao-progress-bar>
|
|
2110
|
+
|
|
2111
|
+
<!-- Query, cores e altura customizadas -->
|
|
2112
|
+
<cao-progress-bar mode="query" color="#16a34a" trackColor="#dcfce7" height="8px"></cao-progress-bar>
|
|
2113
|
+
```
|
|
2114
|
+
|
|
2115
|
+
**Observações:**
|
|
2116
|
+
|
|
2117
|
+
- Usa `role="progressbar"` com `aria-valuemin`, `aria-valuemax` e `aria-valuenow` (omitido nos modos indeterminado e query). Informe `ariaLabel` ou `ariaLabelledBy` para leitores de tela.
|
|
2118
|
+
- `value` e `bufferValue` aceitam string (`value="50"`), convertida com `numberAttribute`.
|
|
2119
|
+
- Respeita `prefers-reduced-motion`: transições são removidas e a animação indeterminada fica mais lenta.
|
|
2120
|
+
- Não possui dependências externas.
|
|
2121
|
+
---
|
|
2122
|
+
### `CaoProgressSpinnerComponent`
|
|
2123
|
+
|
|
2124
|
+
Spinner de progresso circular baseado no `mat-progress-spinner` do Angular Material, **sem depender do Material em runtime** (apenas `@angular/core`; o visual é um SVG). Suporta os modos `determinate` e `indeterminate`, diâmetro, espessura, cores, trilho e percentual central configuráveis.
|
|
2125
|
+
|
|
2126
|
+
**Seletor:** `<cao-progress-spinner>`
|
|
2127
|
+
|
|
2128
|
+
**Tipos**
|
|
2129
|
+
|
|
2130
|
+
| Tipo | Valores |
|
|
2131
|
+
| --- | --- |
|
|
2132
|
+
| `CaoProgressSpinnerMode` | `'determinate'` \| `'indeterminate'` |
|
|
2133
|
+
| `CaoProgressSpinnerLinecap` | `'round'` \| `'butt'` \| `'square'` |
|
|
2134
|
+
|
|
2135
|
+
**Atributos (Inputs)**
|
|
2136
|
+
|
|
2137
|
+
| Atributo | Tipo | Padrão | Descrição |
|
|
2138
|
+
| --- | --- | --- | --- |
|
|
2139
|
+
| `mode` | `CaoProgressSpinnerMode` | `'indeterminate'` | Modo de exibição. |
|
|
2140
|
+
| `value` | `number` | `0` | Progresso de 0 a 100 (`determinate`). Valores fora do intervalo são limitados. |
|
|
2141
|
+
| `diameter` | `number` | `48` | Diâmetro em px (mínimo `8`). |
|
|
2142
|
+
| `strokeWidth` | `number` | `0` | Espessura do traço em px. `0` = automático (10% do diâmetro). |
|
|
2143
|
+
| `strokeLinecap` | `CaoProgressSpinnerLinecap` | `'round'` | Formato da ponta do traço. |
|
|
2144
|
+
| `color` | `string` | `''` | Cor do indicador (qualquer cor CSS). Padrão visual: `#4f46e5`. |
|
|
2145
|
+
| `trackColor` | `string` | `''` | Cor do trilho (círculo de fundo). Padrão: transparente. |
|
|
2146
|
+
| `animationDuration` | `string` | `''` | Duração de uma volta no modo indeterminado. Padrão visual: `1.4s`. |
|
|
2147
|
+
| `showValue` | `boolean` | `false` | Exibe o percentual no centro (`determinate`). |
|
|
2148
|
+
| `textColor` | `string` | `''` | Cor do percentual. Padrão visual: `#111827`. |
|
|
2149
|
+
| `ariaLabel` | `string` | `''` | `aria-label` do spinner. |
|
|
2150
|
+
| `ariaLabelledBy` | `string` | `''` | `aria-labelledby` do spinner. |
|
|
2151
|
+
| `dataCy` | `string` | `''` | Atributo para testes E2E com Cypress. |
|
|
2152
|
+
|
|
2153
|
+
**CSS Custom Properties**
|
|
2154
|
+
|
|
2155
|
+
| Propriedade | Padrão | Descrição |
|
|
2156
|
+
| --- | --- | --- |
|
|
2157
|
+
| `--cao-progress-spinner-color` | `#4f46e5` | Cor do indicador. |
|
|
2158
|
+
| `--cao-progress-spinner-track-color` | `transparent` | Cor do trilho. |
|
|
2159
|
+
| `--cao-progress-spinner-text-color` | `#111827` | Cor do percentual. |
|
|
2160
|
+
| `--cao-progress-spinner-duration` | `1.4s` | Duração de uma volta (indeterminado). |
|
|
2161
|
+
|
|
2162
|
+
**Exemplos:**
|
|
2163
|
+
|
|
2164
|
+
```html
|
|
2165
|
+
<!-- Indeterminate -->
|
|
2166
|
+
<cao-progress-spinner ariaLabel="Carregando"></cao-progress-spinner>
|
|
2167
|
+
|
|
2168
|
+
<!-- Determinate com trilho e percentual -->
|
|
2169
|
+
<cao-progress-spinner
|
|
2170
|
+
mode="determinate"
|
|
2171
|
+
[value]="progresso"
|
|
2172
|
+
[diameter]="96"
|
|
2173
|
+
trackColor="#e5e7eb"
|
|
2174
|
+
[showValue]="true"
|
|
2175
|
+
ariaLabel="Progresso do envio">
|
|
2176
|
+
</cao-progress-spinner>
|
|
2177
|
+
|
|
2178
|
+
<!-- Tamanho, espessura e cor customizados -->
|
|
2179
|
+
<cao-progress-spinner [diameter]="24" [strokeWidth]="3" color="#16a34a"></cao-progress-spinner>
|
|
2180
|
+
```
|
|
2181
|
+
|
|
2182
|
+
**Observações:**
|
|
2183
|
+
|
|
2184
|
+
- Usa `role="progressbar"` com `aria-valuemin`, `aria-valuemax` e `aria-valuenow` (omitido no modo indeterminado). Informe `ariaLabel` ou `ariaLabelledBy` para leitores de tela.
|
|
2185
|
+
- `value`, `diameter` e `strokeWidth` aceitam string (`diameter="64"`), convertida com `numberAttribute`.
|
|
2186
|
+
- O diâmetro padrão é `48` (o Material usa `100`); informe `[diameter]="100"` para o mesmo tamanho.
|
|
2187
|
+
- Respeita `prefers-reduced-motion`: transições são removidas e a rotação fica mais lenta.
|
|
2188
|
+
- Não possui dependências externas.
|
|
2189
|
+
|
|
1892
2190
|
---
|
|
1893
2191
|
|
|
1894
2192
|
### `CaoSkeleton`
|
package/cli/cao-comp.cjs
CHANGED
|
@@ -185,7 +185,7 @@ import { fn } from 'storybook/test';
|
|
|
185
185
|
import { CaoBaseButtonComponent } from '../../app/components/base-button/base-button.component';
|
|
186
186
|
|
|
187
187
|
const meta: Meta<CaoBaseButtonComponent> = {
|
|
188
|
-
title: '
|
|
188
|
+
title: 'Componentes/Base Button',
|
|
189
189
|
component: CaoBaseButtonComponent,
|
|
190
190
|
tags: ['autodocs'],
|
|
191
191
|
args: { buttonClick: fn() },
|
|
@@ -327,18 +327,18 @@ function setupStorybook(destination, force) {
|
|
|
327
327
|
if (conflicts.length) {
|
|
328
328
|
process.stderr.write(
|
|
329
329
|
`Erro: os seguintes arquivos ja existem no destino (use --force para sobrescrever):\n` +
|
|
330
|
-
|
|
331
|
-
|
|
330
|
+
conflicts.map((c) => ` - ${c}`).join('\n') +
|
|
331
|
+
'\n'
|
|
332
332
|
);
|
|
333
333
|
return 1;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
process.stdout.write(
|
|
337
337
|
`Setup de Storybook gerado em "${root}".\n` +
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
338
|
+
`Arquivos criados:\n` +
|
|
339
|
+
created.map((c) => ` - ${c}`).join('\n') +
|
|
340
|
+
'\n' +
|
|
341
|
+
`Leia ${path.join(root, 'STORYBOOK-SETUP.md')} para instalar as dependencias e rodar.\n`
|
|
342
342
|
);
|
|
343
343
|
return 0;
|
|
344
344
|
}
|
|
@@ -429,7 +429,7 @@ function main() {
|
|
|
429
429
|
const available = listComponents(templatesDir).join(', ');
|
|
430
430
|
process.stderr.write(
|
|
431
431
|
`Erro: componente "${component}" nao encontrado.\n` +
|
|
432
|
-
|
|
432
|
+
`Componentes disponiveis: ${available}\n`
|
|
433
433
|
);
|
|
434
434
|
return 1;
|
|
435
435
|
}
|
|
@@ -441,8 +441,8 @@ function main() {
|
|
|
441
441
|
if (conflicts.length) {
|
|
442
442
|
process.stderr.write(
|
|
443
443
|
`Erro: os seguintes arquivos ja existem no destino (use --force para sobrescrever):\n` +
|
|
444
|
-
|
|
445
|
-
|
|
444
|
+
conflicts.map((c) => ` - ${c}`).join('\n') +
|
|
445
|
+
'\n'
|
|
446
446
|
);
|
|
447
447
|
return 1;
|
|
448
448
|
}
|