angular-visuals 0.1.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 +200 -0
- package/package.json +40 -0
- package/src/styles/angular-visuals.css +55 -0
- package/src/styles/animations.css +0 -0
- package/src/styles/palette.css +291 -0
- package/src/styles/theme.css +50 -0
- package/src/styles/typography.css +94 -0
package/README.md
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Angular Visuals
|
|
2
|
+
|
|
3
|
+
Angular Visuals é uma biblioteca de componentes standalone para Angular, criada para aplicações que precisam de uma base visual consistente sem abrir mão da composição nativa do framework.
|
|
4
|
+
|
|
5
|
+
A biblioteca oferece estilos modernos baseados em uma paleta de cores inspirada no Tailwind, tokens CSS para temas claro e escuro, componentes reutilizáveis para formulários, layout, navegação, feedback e mídia, além de um registro interno de ícones SVG.
|
|
6
|
+
|
|
7
|
+
> O pacote ainda está em desenvolvimento e será publicado futuramente no npm. Os comandos abaixo mostram o fluxo de instalação planejado.
|
|
8
|
+
|
|
9
|
+
## Instalação
|
|
10
|
+
|
|
11
|
+
Depois da publicação, instale a biblioteca e suas dependências peer:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install angular-visuals
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
A biblioteca usa Angular e Angular CDK como `peerDependencies`. Em uma aplicação Angular compatível, importe os estilos globais uma única vez, por exemplo em `src/styles.css`:
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
@import "angular-visuals/styles/angular-visuals.css";
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Configuração
|
|
24
|
+
|
|
25
|
+
Registre `provideAngularVisuals` no `ApplicationConfig`. `mode` aceita `light`, `dark` ou `system`, e `defaultVariant` define a variante de cor padrão dos componentes:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { ApplicationConfig } from '@angular/core';
|
|
29
|
+
import { provideAngularVisuals } from 'angular-visuals';
|
|
30
|
+
|
|
31
|
+
export const appConfig: ApplicationConfig = {
|
|
32
|
+
providers: [
|
|
33
|
+
provideAngularVisuals({
|
|
34
|
+
theme: {
|
|
35
|
+
mode: 'system',
|
|
36
|
+
defaultVariant: 'orange',
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Os componentes são standalone e podem ser importados diretamente no componente consumidor:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { Component } from '@angular/core';
|
|
47
|
+
import { AvBadge, AvButton, AvIcon, AvInput } from 'angular-visuals';
|
|
48
|
+
|
|
49
|
+
@Component({
|
|
50
|
+
standalone: true,
|
|
51
|
+
imports: [AvBadge, AvButton, AvIcon, AvInput],
|
|
52
|
+
template: `
|
|
53
|
+
<button av-button variant="orange" icon="check">Salvar</button>
|
|
54
|
+
<span av-badge variant="green">Ativo</span>
|
|
55
|
+
<av-input label="Nome" placeholder="Digite seu nome" />
|
|
56
|
+
`,
|
|
57
|
+
})
|
|
58
|
+
export class ExampleComponent {}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Componentes disponíveis
|
|
62
|
+
|
|
63
|
+
| Categoria | Componentes |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| Base | `AvBadge`, `AvButton`, `AvIcon` |
|
|
66
|
+
| Formulários | `AvForm`, `AvInput`, `AvSelect`, `AvMultiSelect`, `AvCheckbox`, `AvCurrencyInput`, `AvDateTimePicker`, `AvSwitch`, `AvSlider`, `AvFileUpload`, `AvTextArea` |
|
|
67
|
+
| Layout e dados | `AvGrid`, `AvTable`, `AvPaginator` |
|
|
68
|
+
| Navegação | `AvSidenav`, `AvNavLink`, `AvDropdown`, `AvTabs`, `AvTab`, `AvStepper`, `AvStep` |
|
|
69
|
+
| Feedback | `AvProgressBar`, `AvProgressBarCircle` |
|
|
70
|
+
| Mídia | `AvCarousel`, `AvCarouselItem` |
|
|
71
|
+
| Overlay | `AvTooltip` |
|
|
72
|
+
| Primitives | `AvText` |
|
|
73
|
+
|
|
74
|
+
### Primitives
|
|
75
|
+
|
|
76
|
+
`AvText` exibe texto com transições `fade` e `slide`. É útil para nomes de arquivos, contadores, mensagens curtas e estados de carregamento:
|
|
77
|
+
`AvStack` — layout vertical.
|
|
78
|
+
`AvInline` — layout horizontal.
|
|
79
|
+
`AvCluster` — layout inline com wrap para ações e tags.
|
|
80
|
+
`AvDivider` — separador para menus, diálogos e layouts.
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<av-text [text]="status" animation="fade" />
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Navegação lateral
|
|
88
|
+
|
|
89
|
+
`AvSidenav` cria uma navegação lateral responsiva. Abaixo do breakpoint configurado, ele entra em modo drawer; para habilitar abrir e fechar, use `toggleable` e passe um botão com `#toggleTrigger`.
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<button #toggleTrigger type="button" av-button icon="menu">Menu</button>
|
|
93
|
+
|
|
94
|
+
<av-sidenav toggleable [toggleTrigger]="toggleTrigger" variant="orange">
|
|
95
|
+
<av-nav-link label="Início" icon="search" href="/" active />
|
|
96
|
+
<av-nav-link label="Agenda" icon="calendar_today" href="/agenda" badge="3" />
|
|
97
|
+
|
|
98
|
+
<av-dropdown label="Financeiro" icon="payments">
|
|
99
|
+
<av-nav-link label="Receitas" href="/financeiro/receitas" />
|
|
100
|
+
<av-nav-link label="Despesas" href="/financeiro/despesas" />
|
|
101
|
+
</av-dropdown>
|
|
102
|
+
</av-sidenav>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Serviços
|
|
106
|
+
|
|
107
|
+
### `ThemeService`
|
|
108
|
+
|
|
109
|
+
Controla o tema em runtime. O modo `system` acompanha a preferência de tema do sistema e a biblioteca aplica `data-av-theme="light"` ou `data-av-theme="dark"` no elemento raiz do documento.
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { Component, inject } from '@angular/core';
|
|
113
|
+
import { ThemeService } from 'angular-visuals';
|
|
114
|
+
|
|
115
|
+
@Component({
|
|
116
|
+
template: `
|
|
117
|
+
<button type="button" (click)="useLight()">Claro</button>
|
|
118
|
+
<button type="button" (click)="useDark()">Escuro</button>
|
|
119
|
+
<button type="button" (click)="useSystem()">Sistema</button>
|
|
120
|
+
`,
|
|
121
|
+
})
|
|
122
|
+
export class ThemeControls {
|
|
123
|
+
private readonly theme = inject(ThemeService);
|
|
124
|
+
|
|
125
|
+
useLight() { this.theme.setMode('light'); }
|
|
126
|
+
useDark() { this.theme.setMode('dark'); }
|
|
127
|
+
useSystem() { this.theme.setMode('system'); }
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `AvIconRegistry`
|
|
132
|
+
|
|
133
|
+
O registro já inclui os ícones padrão e loaders animados da biblioteca. Também é possível registrar SVGs próprios em runtime, consultar um ícone ou obter um catálogo completo:
|
|
134
|
+
|
|
135
|
+
> **Atenção:** ícones registrados são renderizados automaticamente com `1em × 1em`, relativo ao `font-size` herdado.
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
import { inject } from '@angular/core';
|
|
139
|
+
import { AvIconRegistry } from 'angular-visuals';
|
|
140
|
+
|
|
141
|
+
const iconRegistry = inject(AvIconRegistry);
|
|
142
|
+
|
|
143
|
+
iconRegistry.registerIcon('custom-icon', '<svg viewBox="0 0 24 24">...</svg>');
|
|
144
|
+
|
|
145
|
+
const icon = iconRegistry.getIcon('custom-icon');
|
|
146
|
+
const iconNames = iconRegistry.getIconNames();
|
|
147
|
+
const icons = iconRegistry.getIcons(); // { name, svg }[]
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Depois de registrado, o ícone pode ser usado pelos componentes que aceitam nome de ícone, como `AvIcon` e `AvButton`:
|
|
151
|
+
|
|
152
|
+
```html
|
|
153
|
+
<span av-icon name="custom-icon"></span>
|
|
154
|
+
<button av-button icon="custom-icon">Ação</button>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Roadmap
|
|
158
|
+
### Fase 1: Feedback e primitives
|
|
159
|
+
|
|
160
|
+
1. `AvSpinner` — loading indeterminado simples.
|
|
161
|
+
2. `AvSkeleton` — estado de carregamento reutilizável.
|
|
162
|
+
3. `AvAlert` — feedback com `variant`, `appearance` e `AvIcon`.
|
|
163
|
+
4. `AvEmptyState` — estado vazio para tabelas, selects, árvores e outras telas.
|
|
164
|
+
9. `AvVisuallyHidden` — conteúdo visualmente oculto para acessibilidade.
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
10. `AvToast` — feedback temporário em overlay.
|
|
169
|
+
11. `ToastService` — API programática para exibir toasts.
|
|
170
|
+
12. `AvDialog` — base para overlays complexos.
|
|
171
|
+
13. `AvPopover` — conteúdo contextual usando a infraestrutura de overlay.
|
|
172
|
+
14. `AvDrawer` — variação estrutural de diálogo.
|
|
173
|
+
|
|
174
|
+
### Fase 3: Componentes básicos
|
|
175
|
+
|
|
176
|
+
15. `AvAccordion` — conteúdo expansível.
|
|
177
|
+
16. `AvBreadcrumb` — navegação hierárquica.
|
|
178
|
+
17. `AvRadioGroup` e `AvRadio` — controles de seleção única para completar os forms.
|
|
179
|
+
|
|
180
|
+
### Fase 4: Componentes compostos
|
|
181
|
+
|
|
182
|
+
18. `AvCombobox` — input, overlay, seleção e busca.
|
|
183
|
+
19. `AvDateRangePicker` — evolução do `AvDateTimePicker`.
|
|
184
|
+
20. `AvDataTable` — tabela com ordenação, filtros, seleção, loading, estado vazio e paginação.
|
|
185
|
+
|
|
186
|
+
### Fase 5: Componentes avançados
|
|
187
|
+
|
|
188
|
+
21. `AvTimeline` — visualização de eventos em sequência.
|
|
189
|
+
22. `AvTreeView` — árvore com seleção, expansão e teclado.
|
|
190
|
+
23. `AvCommandPalette` — busca e navegação por teclado composta por diálogo, input, ícones e estado vazio.
|
|
191
|
+
24. `AvIconPicker` — catálogo de ícones usando registry, combobox, grid e popover.
|
|
192
|
+
|
|
193
|
+
### Fase 6: Conveniências
|
|
194
|
+
|
|
195
|
+
25. `AvHeading` — tipografia semântica conveniente.
|
|
196
|
+
26. `AvBox` — primitive de composição para casos simples.
|
|
197
|
+
27. `AvCenter` — centralização de conteúdo.
|
|
198
|
+
28. `AvSpacer` — espaçamento explícito em layouts.
|
|
199
|
+
|
|
200
|
+
Componentes adicionais que podem entrar antes da versão `1.0`, conforme as necessidades dos consumidores: `AvAvatar`, `AvChip` ou `AvTag`, `AvButtonGroup`, `AvInputGroup` e `AvKbd`.
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "angular-visuals",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Angular UI component library with theming, animations and SVG icons.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"angular",
|
|
8
|
+
"ui",
|
|
9
|
+
"components",
|
|
10
|
+
"design-system",
|
|
11
|
+
"angular-components"
|
|
12
|
+
],
|
|
13
|
+
"sideEffects": [
|
|
14
|
+
"src/styles/angular-visuals.css"
|
|
15
|
+
],
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@angular/common": ">=21.0.0",
|
|
18
|
+
"@angular/core": ">=21.0.0",
|
|
19
|
+
"@angular/cdk": ">=21.0.0"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"tslib": "^2.3.0"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"src/styles"
|
|
26
|
+
],
|
|
27
|
+
"exports": {
|
|
28
|
+
"./styles/angular-visuals.css": "./src/styles/angular-visuals.css",
|
|
29
|
+
"./package.json": {
|
|
30
|
+
"default": "./package.json"
|
|
31
|
+
},
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./types/angular-visuals.d.ts",
|
|
34
|
+
"default": "./fesm2022/angular-visuals.mjs"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"module": "fesm2022/angular-visuals.mjs",
|
|
38
|
+
"typings": "types/angular-visuals.d.ts",
|
|
39
|
+
"type": "module"
|
|
40
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
@import "./palette.css";
|
|
2
|
+
@import "./animations.css";
|
|
3
|
+
@import "./typography.css";
|
|
4
|
+
@import "./theme.css";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
.bg-content {
|
|
9
|
+
background-color: var(--av-color-bg);
|
|
10
|
+
color: var(--av-color-text);
|
|
11
|
+
transition:
|
|
12
|
+
background-color 150ms ease,
|
|
13
|
+
color 150ms ease;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
html,
|
|
17
|
+
body {
|
|
18
|
+
width: 100dvw;
|
|
19
|
+
height: 100dvh;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
*::-webkit-scrollbar {
|
|
23
|
+
display: none;
|
|
24
|
+
width: 2px;
|
|
25
|
+
height: 2px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
*::-webkit-scrollbar-track {
|
|
29
|
+
background: var(--av-primary-200);
|
|
30
|
+
border-radius: 3px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
*::-webkit-scrollbar-thumb {
|
|
34
|
+
background: var(--av-primary-300);
|
|
35
|
+
border-radius: 3px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
[data-av-theme="dark"] {
|
|
39
|
+
*::-webkit-scrollbar-track {
|
|
40
|
+
background: var(--av-primary-950);
|
|
41
|
+
border-radius: 3px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
*::-webkit-scrollbar-thumb {
|
|
45
|
+
background: var(--av-primary-900);
|
|
46
|
+
border-radius: 3px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@supports not selector(::-webkit-scrollbar) {
|
|
52
|
+
body {
|
|
53
|
+
scrollbar-color: var(--av-primary-900) var(--av-primary-950);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* Black & White */
|
|
3
|
+
--av-black: #000000;
|
|
4
|
+
--av-white: #ffffff;
|
|
5
|
+
|
|
6
|
+
/* Slate */
|
|
7
|
+
--av-slate-50: #f8fafc;
|
|
8
|
+
--av-slate-100: #f1f5f9;
|
|
9
|
+
--av-slate-200: #e2e8f0;
|
|
10
|
+
--av-slate-300: #cbd5e1;
|
|
11
|
+
--av-slate-400: #94a3b8;
|
|
12
|
+
--av-slate-500: #64748b;
|
|
13
|
+
--av-slate-600: #475569;
|
|
14
|
+
--av-slate-700: #334155;
|
|
15
|
+
--av-slate-800: #1e293b;
|
|
16
|
+
--av-slate-900: #0f172a;
|
|
17
|
+
--av-slate-950: #020617;
|
|
18
|
+
|
|
19
|
+
/* Gray */
|
|
20
|
+
--av-gray-50: #f9fafb;
|
|
21
|
+
--av-gray-100: #f3f4f6;
|
|
22
|
+
--av-gray-200: #e5e7eb;
|
|
23
|
+
--av-gray-300: #d1d5db;
|
|
24
|
+
--av-gray-400: #9ca3af;
|
|
25
|
+
--av-gray-500: #6b7280;
|
|
26
|
+
--av-gray-600: #4b5563;
|
|
27
|
+
--av-gray-700: #374151;
|
|
28
|
+
--av-gray-800: #1f2937;
|
|
29
|
+
--av-gray-900: #111827;
|
|
30
|
+
--av-gray-950: #030712;
|
|
31
|
+
|
|
32
|
+
/* Zinc */
|
|
33
|
+
--av-zinc-50: #fafafa;
|
|
34
|
+
--av-zinc-100: #f4f4f5;
|
|
35
|
+
--av-zinc-200: #e4e4e7;
|
|
36
|
+
--av-zinc-300: #d4d4d8;
|
|
37
|
+
--av-zinc-400: #a1a1aa;
|
|
38
|
+
--av-zinc-500: #71717a;
|
|
39
|
+
--av-zinc-600: #52525b;
|
|
40
|
+
--av-zinc-700: #3f3f46;
|
|
41
|
+
--av-zinc-800: #27272a;
|
|
42
|
+
--av-zinc-900: #18181b;
|
|
43
|
+
--av-zinc-950: #09090b;
|
|
44
|
+
|
|
45
|
+
/* Neutral */
|
|
46
|
+
--av-neutral-50: #fafafa;
|
|
47
|
+
--av-neutral-100: #f5f5f5;
|
|
48
|
+
--av-neutral-200: #e5e5e5;
|
|
49
|
+
--av-neutral-300: #d4d4d4;
|
|
50
|
+
--av-neutral-400: #a3a3a3;
|
|
51
|
+
--av-neutral-500: #737373;
|
|
52
|
+
--av-neutral-600: #525252;
|
|
53
|
+
--av-neutral-700: #404040;
|
|
54
|
+
--av-neutral-800: #262626;
|
|
55
|
+
--av-neutral-900: #171717;
|
|
56
|
+
--av-neutral-950: #0a0a0a;
|
|
57
|
+
|
|
58
|
+
/* Stone */
|
|
59
|
+
--av-stone-50: #fafaf9;
|
|
60
|
+
--av-stone-100: #f5f5f4;
|
|
61
|
+
--av-stone-200: #e7e5e4;
|
|
62
|
+
--av-stone-300: #d6d3d1;
|
|
63
|
+
--av-stone-400: #a8a29e;
|
|
64
|
+
--av-stone-500: #78716c;
|
|
65
|
+
--av-stone-600: #57534e;
|
|
66
|
+
--av-stone-700: #44403c;
|
|
67
|
+
--av-stone-800: #292524;
|
|
68
|
+
--av-stone-900: #1c1917;
|
|
69
|
+
--av-stone-950: #0c0a09;
|
|
70
|
+
|
|
71
|
+
/* Red */
|
|
72
|
+
--av-red-50: #fef2f2;
|
|
73
|
+
--av-red-100: #fee2e2;
|
|
74
|
+
--av-red-200: #fecaca;
|
|
75
|
+
--av-red-300: #fca5a5;
|
|
76
|
+
--av-red-400: #f87171;
|
|
77
|
+
--av-red-500: #ef4444;
|
|
78
|
+
--av-red-600: #dc2626;
|
|
79
|
+
--av-red-700: #b91c1c;
|
|
80
|
+
--av-red-800: #991b1b;
|
|
81
|
+
--av-red-900: #7f1d1d;
|
|
82
|
+
--av-red-950: #450a0a;
|
|
83
|
+
|
|
84
|
+
/* Orange */
|
|
85
|
+
--av-orange-50: #fff7ed;
|
|
86
|
+
--av-orange-100: #ffedd5;
|
|
87
|
+
--av-orange-200: #fed7aa;
|
|
88
|
+
--av-orange-300: #fdba74;
|
|
89
|
+
--av-orange-400: #fb923c;
|
|
90
|
+
--av-orange-500: #f97316;
|
|
91
|
+
--av-orange-600: #ea580c;
|
|
92
|
+
--av-orange-700: #c2410c;
|
|
93
|
+
--av-orange-800: #9a3412;
|
|
94
|
+
--av-orange-900: #7c2d12;
|
|
95
|
+
--av-orange-950: #431407;
|
|
96
|
+
|
|
97
|
+
/* Amber */
|
|
98
|
+
--av-amber-50: #fffbeb;
|
|
99
|
+
--av-amber-100: #fef3c7;
|
|
100
|
+
--av-amber-200: #fde68a;
|
|
101
|
+
--av-amber-300: #fcd34d;
|
|
102
|
+
--av-amber-400: #fbbf24;
|
|
103
|
+
--av-amber-500: #f59e0b;
|
|
104
|
+
--av-amber-600: #d97706;
|
|
105
|
+
--av-amber-700: #b45309;
|
|
106
|
+
--av-amber-800: #92400e;
|
|
107
|
+
--av-amber-900: #78350f;
|
|
108
|
+
--av-amber-950: #451a03;
|
|
109
|
+
|
|
110
|
+
/* Yellow */
|
|
111
|
+
--av-yellow-50: #fefce8;
|
|
112
|
+
--av-yellow-100: #fef9c3;
|
|
113
|
+
--av-yellow-200: #fef08a;
|
|
114
|
+
--av-yellow-300: #fde047;
|
|
115
|
+
--av-yellow-400: #facc15;
|
|
116
|
+
--av-yellow-500: #eab308;
|
|
117
|
+
--av-yellow-600: #ca8a04;
|
|
118
|
+
--av-yellow-700: #a16207;
|
|
119
|
+
--av-yellow-800: #854d0e;
|
|
120
|
+
--av-yellow-900: #713f12;
|
|
121
|
+
--av-yellow-950: #422006;
|
|
122
|
+
|
|
123
|
+
/* Lime */
|
|
124
|
+
--av-lime-50: #f7fee7;
|
|
125
|
+
--av-lime-100: #ecfccb;
|
|
126
|
+
--av-lime-200: #d9f99d;
|
|
127
|
+
--av-lime-300: #bef264;
|
|
128
|
+
--av-lime-400: #a3e635;
|
|
129
|
+
--av-lime-500: #84cc16;
|
|
130
|
+
--av-lime-600: #65a30d;
|
|
131
|
+
--av-lime-700: #4d7c0f;
|
|
132
|
+
--av-lime-800: #3f6212;
|
|
133
|
+
--av-lime-900: #365314;
|
|
134
|
+
--av-lime-950: #1a2e05;
|
|
135
|
+
|
|
136
|
+
/* Green */
|
|
137
|
+
--av-green-50: #f0fdf4;
|
|
138
|
+
--av-green-100: #dcfce7;
|
|
139
|
+
--av-green-200: #bbf7d0;
|
|
140
|
+
--av-green-300: #86efac;
|
|
141
|
+
--av-green-400: #4ade80;
|
|
142
|
+
--av-green-500: #22c55e;
|
|
143
|
+
--av-green-600: #16a34a;
|
|
144
|
+
--av-green-700: #15803d;
|
|
145
|
+
--av-green-800: #166534;
|
|
146
|
+
--av-green-900: #14532d;
|
|
147
|
+
--av-green-950: #052e16;
|
|
148
|
+
|
|
149
|
+
/* Emerald */
|
|
150
|
+
--av-emerald-50: #ecfdf5;
|
|
151
|
+
--av-emerald-100: #d1fae5;
|
|
152
|
+
--av-emerald-200: #a7f3d0;
|
|
153
|
+
--av-emerald-300: #6ee7b7;
|
|
154
|
+
--av-emerald-400: #34d399;
|
|
155
|
+
--av-emerald-500: #10b981;
|
|
156
|
+
--av-emerald-600: #059669;
|
|
157
|
+
--av-emerald-700: #047857;
|
|
158
|
+
--av-emerald-800: #065f46;
|
|
159
|
+
--av-emerald-900: #064e3b;
|
|
160
|
+
--av-emerald-950: #022c22;
|
|
161
|
+
|
|
162
|
+
/* Teal */
|
|
163
|
+
--av-teal-50: #f0fdfa;
|
|
164
|
+
--av-teal-100: #ccfbf1;
|
|
165
|
+
--av-teal-200: #99f6e4;
|
|
166
|
+
--av-teal-300: #5eead4;
|
|
167
|
+
--av-teal-400: #2dd4bf;
|
|
168
|
+
--av-teal-500: #14b8a6;
|
|
169
|
+
--av-teal-600: #0d9488;
|
|
170
|
+
--av-teal-700: #0f766e;
|
|
171
|
+
--av-teal-800: #115e59;
|
|
172
|
+
--av-teal-900: #134e4a;
|
|
173
|
+
--av-teal-950: #042f2e;
|
|
174
|
+
|
|
175
|
+
/* Cyan */
|
|
176
|
+
--av-cyan-50: #ecfeff;
|
|
177
|
+
--av-cyan-100: #cffafe;
|
|
178
|
+
--av-cyan-200: #a5f3fc;
|
|
179
|
+
--av-cyan-300: #67e8f9;
|
|
180
|
+
--av-cyan-400: #22d3ee;
|
|
181
|
+
--av-cyan-500: #06b6d4;
|
|
182
|
+
--av-cyan-600: #0891b2;
|
|
183
|
+
--av-cyan-700: #0e7490;
|
|
184
|
+
--av-cyan-800: #155e75;
|
|
185
|
+
--av-cyan-900: #164e63;
|
|
186
|
+
--av-cyan-950: #083344;
|
|
187
|
+
|
|
188
|
+
/* Sky */
|
|
189
|
+
--av-sky-50: #f0f9ff;
|
|
190
|
+
--av-sky-100: #e0f2fe;
|
|
191
|
+
--av-sky-200: #bae6fd;
|
|
192
|
+
--av-sky-300: #7dd3fc;
|
|
193
|
+
--av-sky-400: #38bdf8;
|
|
194
|
+
--av-sky-500: #0ea5e9;
|
|
195
|
+
--av-sky-600: #0284c7;
|
|
196
|
+
--av-sky-700: #0369a1;
|
|
197
|
+
--av-sky-800: #075985;
|
|
198
|
+
--av-sky-900: #0c4a6e;
|
|
199
|
+
--av-sky-950: #082f49;
|
|
200
|
+
|
|
201
|
+
/* Blue */
|
|
202
|
+
--av-blue-50: #eff6ff;
|
|
203
|
+
--av-blue-100: #dbeafe;
|
|
204
|
+
--av-blue-200: #bfdbfe;
|
|
205
|
+
--av-blue-300: #93c5fd;
|
|
206
|
+
--av-blue-400: #60a5fa;
|
|
207
|
+
--av-blue-500: #3b82f6;
|
|
208
|
+
--av-blue-600: #2563eb;
|
|
209
|
+
--av-blue-700: #1d4ed8;
|
|
210
|
+
--av-blue-800: #1e40af;
|
|
211
|
+
--av-blue-900: #1e3a8a;
|
|
212
|
+
--av-blue-950: #172554;
|
|
213
|
+
|
|
214
|
+
/* Indigo */
|
|
215
|
+
--av-indigo-50: #eef2ff;
|
|
216
|
+
--av-indigo-100: #e0e7ff;
|
|
217
|
+
--av-indigo-200: #c7d2fe;
|
|
218
|
+
--av-indigo-300: #a5b4fc;
|
|
219
|
+
--av-indigo-400: #818cf8;
|
|
220
|
+
--av-indigo-500: #6366f1;
|
|
221
|
+
--av-indigo-600: #4f46e5;
|
|
222
|
+
--av-indigo-700: #4338ca;
|
|
223
|
+
--av-indigo-800: #3730a3;
|
|
224
|
+
--av-indigo-900: #312e81;
|
|
225
|
+
--av-indigo-950: #1e1b4b;
|
|
226
|
+
|
|
227
|
+
/* Violet */
|
|
228
|
+
--av-violet-50: #f5f3ff;
|
|
229
|
+
--av-violet-100: #ede9fe;
|
|
230
|
+
--av-violet-200: #ddd6fe;
|
|
231
|
+
--av-violet-300: #c4b5fd;
|
|
232
|
+
--av-violet-400: #a78bfa;
|
|
233
|
+
--av-violet-500: #8b5cf6;
|
|
234
|
+
--av-violet-600: #7c3aed;
|
|
235
|
+
--av-violet-700: #6d28d9;
|
|
236
|
+
--av-violet-800: #5b21b6;
|
|
237
|
+
--av-violet-900: #4c1d95;
|
|
238
|
+
--av-violet-950: #2e1065;
|
|
239
|
+
|
|
240
|
+
/* Purple */
|
|
241
|
+
--av-purple-50: #faf5ff;
|
|
242
|
+
--av-purple-100: #f3e8ff;
|
|
243
|
+
--av-purple-200: #e9d5ff;
|
|
244
|
+
--av-purple-300: #d8b4fe;
|
|
245
|
+
--av-purple-400: #c084fc;
|
|
246
|
+
--av-purple-500: #a855f7;
|
|
247
|
+
--av-purple-600: #9333ea;
|
|
248
|
+
--av-purple-700: #7e22ce;
|
|
249
|
+
--av-purple-800: #6b21a8;
|
|
250
|
+
--av-purple-900: #581c87;
|
|
251
|
+
--av-purple-950: #3b0764;
|
|
252
|
+
|
|
253
|
+
/* Fuchsia */
|
|
254
|
+
--av-fuchsia-50: #fdf4ff;
|
|
255
|
+
--av-fuchsia-100: #fae8ff;
|
|
256
|
+
--av-fuchsia-200: #f5d0fe;
|
|
257
|
+
--av-fuchsia-300: #f0abfc;
|
|
258
|
+
--av-fuchsia-400: #e879f9;
|
|
259
|
+
--av-fuchsia-500: #d946ef;
|
|
260
|
+
--av-fuchsia-600: #c026d3;
|
|
261
|
+
--av-fuchsia-700: #a21caf;
|
|
262
|
+
--av-fuchsia-800: #86198f;
|
|
263
|
+
--av-fuchsia-900: #701a75;
|
|
264
|
+
--av-fuchsia-950: #4a044e;
|
|
265
|
+
|
|
266
|
+
/* Pink */
|
|
267
|
+
--av-pink-50: #fdf2f8;
|
|
268
|
+
--av-pink-100: #fce7f3;
|
|
269
|
+
--av-pink-200: #fbcfe8;
|
|
270
|
+
--av-pink-300: #f472b6;
|
|
271
|
+
--av-pink-400: #f472b6;
|
|
272
|
+
--av-pink-500: #ec4899;
|
|
273
|
+
--av-pink-600: #db2777;
|
|
274
|
+
--av-pink-700: #be185d;
|
|
275
|
+
--av-pink-800: #9d174d;
|
|
276
|
+
--av-pink-900: #831843;
|
|
277
|
+
--av-pink-950: #500724;
|
|
278
|
+
|
|
279
|
+
/* Rose */
|
|
280
|
+
--av-rose-50: #fff1f2;
|
|
281
|
+
--av-rose-100: #ffe4e6;
|
|
282
|
+
--av-rose-200: #fecdd3;
|
|
283
|
+
--av-rose-300: #fda4af;
|
|
284
|
+
--av-rose-400: #fb7185;
|
|
285
|
+
--av-rose-500: #f43f5e;
|
|
286
|
+
--av-rose-600: #e11d48;
|
|
287
|
+
--av-rose-700: #be123c;
|
|
288
|
+
--av-rose-800: #9f1239;
|
|
289
|
+
--av-rose-900: #881337;
|
|
290
|
+
--av-rose-950: #4c0519;
|
|
291
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
:root,
|
|
2
|
+
:root[data-av-theme="light"] {
|
|
3
|
+
color-scheme: light;
|
|
4
|
+
|
|
5
|
+
--av-color-bg: var(--av-neutral-50);
|
|
6
|
+
--av-color-surface: var(--av-white);
|
|
7
|
+
--av-color-surface-muted: var(--av-slate-100);
|
|
8
|
+
--av-color-surface-raised: var(--av-white);
|
|
9
|
+
|
|
10
|
+
--av-color-text: var(--av-slate-900);
|
|
11
|
+
--av-color-text-muted: var(--av-slate-600);
|
|
12
|
+
--av-color-text-subtle: var(--av-slate-400);
|
|
13
|
+
--av-color-text-inverse: var(--av-white);
|
|
14
|
+
|
|
15
|
+
--av-color-border: var(--av-slate-300);
|
|
16
|
+
--av-color-border-soft: var(--av-slate-200);
|
|
17
|
+
--av-color-border-hover: var(--av-slate-400);
|
|
18
|
+
|
|
19
|
+
--av-color-danger: var(--av-red-500);
|
|
20
|
+
--av-color-danger-text: var(--av-red-800);
|
|
21
|
+
--av-color-danger-soft: var(--av-red-50);
|
|
22
|
+
|
|
23
|
+
--av-shadow-raised: 0 20px 25px -5px rgb(15 23 42 / .10), 0 8px 10px -6px rgb(15 23 42 / .10);
|
|
24
|
+
--av-shadow-control: 0 1px 2px rgb(15 23 42 / .06);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
:root[data-av-theme="dark"] {
|
|
28
|
+
color-scheme: dark;
|
|
29
|
+
|
|
30
|
+
--av-color-bg: var(--av-neutral-950);
|
|
31
|
+
--av-color-surface: var(--av-neutral-900);
|
|
32
|
+
--av-color-surface-muted: var(--av-neutral-800);
|
|
33
|
+
--av-color-surface-raised: var(--av-neutral-900);
|
|
34
|
+
|
|
35
|
+
--av-color-text: var(--av-neutral-100);
|
|
36
|
+
--av-color-text-muted: var(--av-neutral-400);
|
|
37
|
+
--av-color-text-subtle: var(--av-neutral-500);
|
|
38
|
+
--av-color-text-inverse: var(--av-neutral-950);
|
|
39
|
+
|
|
40
|
+
--av-color-border: var(--av-neutral-700);
|
|
41
|
+
--av-color-border-soft: var(--av-neutral-800);
|
|
42
|
+
--av-color-border-hover: var(--av-neutral-600);
|
|
43
|
+
|
|
44
|
+
--av-color-danger: var(--av-red-400);
|
|
45
|
+
--av-color-danger-text: var(--av-red-200);
|
|
46
|
+
--av-color-danger-soft: rgb(127 29 29 / .18);
|
|
47
|
+
|
|
48
|
+
--av-shadow-raised: 0 22px 40px rgb(0 0 0 / .46), 0 8px 16px rgb(0 0 0 / .28);
|
|
49
|
+
--av-shadow-control: 0 1px 2px rgb(0 0 0 / .24);
|
|
50
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--av-radius-xs: 0.125rem;
|
|
3
|
+
--av-radius-sm: 0.25rem;
|
|
4
|
+
--av-radius-md: 0.375rem;
|
|
5
|
+
--av-radius-lg: 0.5rem;
|
|
6
|
+
--av-radius-xl: 0.75rem;
|
|
7
|
+
--av-radius-full: calc(infinity * 1px);
|
|
8
|
+
|
|
9
|
+
--av-gap-xs: 0.5rem; /* 8px (Tailwind gap-2) */
|
|
10
|
+
--av-gap-sm: 0.75rem; /* 12px (Tailwind gap-3) */
|
|
11
|
+
--av-gap-md: 1rem; /* 16px (Tailwind gap-4) */
|
|
12
|
+
--av-gap-lg: 1.5rem; /* 24px (Tailwind gap-6) */
|
|
13
|
+
--av-gap-xl: 2rem; /* 32px (Tailwind gap-8) */
|
|
14
|
+
|
|
15
|
+
/* Tamanhos para Avatars (Largura x Altura) */
|
|
16
|
+
--av-avatar-xs: 1.5rem; /* 24px (Tailwind w-6 h-6) */
|
|
17
|
+
--av-avatar-sm: 2rem; /* 32px (Tailwind w-8 h-8) */
|
|
18
|
+
--av-avatar-md: 2.5rem; /* 40px (Tailwind w-10 h-10 - Padrão do mercado) */
|
|
19
|
+
--av-avatar-lg: 3rem; /* 48px (Tailwind w-12 h-12) */
|
|
20
|
+
--av-avatar-xl: 4rem; /* 64px (Tailwind w-16 h-16) */
|
|
21
|
+
|
|
22
|
+
/* Tamanho de Fonte (Para Avatars com Iniciais) */
|
|
23
|
+
--av-avatar-text-xs: 0.75rem; /* 12px */
|
|
24
|
+
--av-avatar-text-sm: 0.875rem; /* 14px */
|
|
25
|
+
--av-avatar-text-md: 1rem; /* 16px */
|
|
26
|
+
--av-avatar-text-lg: 1.125rem; /* 18px */
|
|
27
|
+
--av-avatar-text-xl: 1.5rem; /* 24px */
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.av-text-xs {
|
|
31
|
+
font-size: 0.75rem;
|
|
32
|
+
line-height: 1rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
.av-text-sm {
|
|
37
|
+
font-size: 0.875rem;
|
|
38
|
+
line-height: 1.25rem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.av-text-base {
|
|
42
|
+
font-size: 1rem;
|
|
43
|
+
line-height: 1.5rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.av-text-lg {
|
|
47
|
+
font-size: 1.125rem;
|
|
48
|
+
line-height: 1.75rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.av-text-xl {
|
|
52
|
+
font-size: 1.25rem;
|
|
53
|
+
line-height: 1.75rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.av-text-2xl {
|
|
57
|
+
font-size: 1.5rem;
|
|
58
|
+
line-height: 2rem;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.av-text-3xl {
|
|
62
|
+
font-size: 1.875rem;
|
|
63
|
+
line-height: 2.25rem;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.av-text-4xl {
|
|
67
|
+
font-size: 2.25rem;
|
|
68
|
+
line-height: 2.5rem;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.av-text-5xl {
|
|
72
|
+
font-size: 3rem;
|
|
73
|
+
line-height: 1;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.av-text-6xl {
|
|
77
|
+
font-size: 3.75rem;
|
|
78
|
+
line-height: 1;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.av-text-7xl {
|
|
82
|
+
font-size: 4.5rem;
|
|
83
|
+
line-height: 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.av-text-8xl {
|
|
87
|
+
font-size: 6rem;
|
|
88
|
+
line-height: 1;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.av-text-9xl {
|
|
92
|
+
font-size: 8rem;
|
|
93
|
+
line-height: 1;
|
|
94
|
+
}
|