@1doc/1ds-react 0.0.1
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 +34 -0
- package/dist/components/Alert/Alert.css +188 -0
- package/dist/components/Alert/Alert.d.ts +65 -0
- package/dist/components/Alert/Alert.js +56 -0
- package/dist/components/Avatar/Avatar.css +88 -0
- package/dist/components/Avatar/Avatar.d.ts +34 -0
- package/dist/components/Avatar/Avatar.js +16 -0
- package/dist/components/Avatar/AvatarGroup.d.ts +12 -0
- package/dist/components/Avatar/AvatarGroup.js +8 -0
- package/dist/components/Badge/Badge.css +155 -0
- package/dist/components/Badge/Badge.d.ts +46 -0
- package/dist/components/Badge/Badge.js +17 -0
- package/dist/components/Button/Button.css +199 -0
- package/dist/components/Button/Button.d.ts +23 -0
- package/dist/components/Button/Button.js +62 -0
- package/dist/components/Checkbox/Checkbox.css +122 -0
- package/dist/components/Checkbox/Checkbox.d.ts +21 -0
- package/dist/components/Checkbox/Checkbox.js +49 -0
- package/dist/components/Divider/Divider.css +81 -0
- package/dist/components/Divider/Divider.d.ts +18 -0
- package/dist/components/Divider/Divider.js +26 -0
- package/dist/components/Grid/Grid.css +154 -0
- package/dist/components/Grid/Grid.d.ts +21 -0
- package/dist/components/Grid/Grid.js +53 -0
- package/dist/components/Icon/Icon.css +41 -0
- package/dist/components/Icon/Icon.d.ts +12 -0
- package/dist/components/Icon/Icon.js +29 -0
- package/dist/components/Input/Input.css +190 -0
- package/dist/components/Input/Input.d.ts +32 -0
- package/dist/components/Input/Input.js +58 -0
- package/dist/components/Link/Link.css +76 -0
- package/dist/components/Link/Link.d.ts +15 -0
- package/dist/components/Link/Link.js +19 -0
- package/dist/components/Logo/Logo.css +32 -0
- package/dist/components/Logo/Logo.d.ts +10 -0
- package/dist/components/Logo/Logo.js +16 -0
- package/dist/components/Modal/Modal.css +155 -0
- package/dist/components/Modal/Modal.d.ts +36 -0
- package/dist/components/Modal/Modal.js +55 -0
- package/dist/components/Radio/Radio.css +114 -0
- package/dist/components/Radio/Radio.d.ts +19 -0
- package/dist/components/Radio/Radio.js +39 -0
- package/dist/components/Select/Select.css +291 -0
- package/dist/components/Select/Select.d.ts +38 -0
- package/dist/components/Select/Select.js +246 -0
- package/dist/components/Spinner/Spinner.css +60 -0
- package/dist/components/Spinner/Spinner.d.ts +16 -0
- package/dist/components/Spinner/Spinner.js +16 -0
- package/dist/components/Switch/Switch.css +127 -0
- package/dist/components/Switch/Switch.d.ts +18 -0
- package/dist/components/Switch/Switch.js +57 -0
- package/dist/components/Tabs/Tab.d.ts +19 -0
- package/dist/components/Tabs/Tab.js +76 -0
- package/dist/components/Tabs/TabContent.d.ts +15 -0
- package/dist/components/Tabs/TabContent.js +11 -0
- package/dist/components/Tabs/Tabs.css +124 -0
- package/dist/components/Tabs/Tabs.d.ts +20 -0
- package/dist/components/Tabs/Tabs.js +14 -0
- package/dist/components/Tabs/TabsContent.d.ts +16 -0
- package/dist/components/Tabs/TabsContent.js +12 -0
- package/dist/components/Tabs/tabs.context.d.ts +2 -0
- package/dist/components/Tabs/tabs.context.js +2 -0
- package/dist/components/Tag/Tag.css +140 -0
- package/dist/components/Tag/Tag.d.ts +63 -0
- package/dist/components/Tag/Tag.js +48 -0
- package/dist/components/Text/Text.css +1213 -0
- package/dist/components/Text/Text.d.ts +70 -0
- package/dist/components/Text/Text.js +89 -0
- package/dist/components/Textarea/Textarea.css +133 -0
- package/dist/components/Textarea/Textarea.d.ts +28 -0
- package/dist/components/Textarea/Textarea.js +72 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +27 -0
- package/dist/utils/theme.d.ts +30 -0
- package/dist/utils/theme.js +106 -0
- package/package.json +26 -0
- package/scripts/postbuild.js +21 -0
- package/src/index.ts +28 -0
- package/src/utils/theme.ts +136 -0
- package/tsconfig.json +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @1doc/1ds-react
|
|
2
|
+
|
|
3
|
+
Biblioteca de componentes React do 1ds Design System.
|
|
4
|
+
|
|
5
|
+
## Instalação
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @1doc/1ds-react @1doc/1ds-tokens
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuração
|
|
12
|
+
|
|
13
|
+
Importe o CSS dos tokens no seu arquivo principal (`App.tsx` ou `main.tsx`):
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import "@1doc/1ds-tokens/dist/css/primitives.css";
|
|
17
|
+
import "@1doc/1ds-tokens/dist/css/semantic.css";
|
|
18
|
+
import "@1doc/1ds-tokens/dist/css/theme-1doc.css";
|
|
19
|
+
import "iconoir/css/iconoir.css";
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Uso
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { Button } from "@1doc/1ds-react";
|
|
26
|
+
|
|
27
|
+
function App() {
|
|
28
|
+
return (
|
|
29
|
+
<Button variant="primary" onClick={() => console.log("Click")}>
|
|
30
|
+
Clique aqui
|
|
31
|
+
</Button>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/* ============================================
|
|
2
|
+
Alert Component
|
|
3
|
+
Tipos: neutral, success, warning, error
|
|
4
|
+
Variantes: soft, solid
|
|
5
|
+
============================================ */
|
|
6
|
+
|
|
7
|
+
.umds-alert {
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: flex-start;
|
|
10
|
+
gap: 16px;
|
|
11
|
+
padding: 16px;
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
box-sizing: border-box;
|
|
14
|
+
width: 475px;
|
|
15
|
+
max-width: calc(100vw - 32px);
|
|
16
|
+
transition: all 0.3s ease;
|
|
17
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
18
|
+
|
|
19
|
+
font-family: var(--umds-semantic-font-family-base, 'Open Sans', 'Inter', sans-serif);
|
|
20
|
+
position: fixed;
|
|
21
|
+
z-index: 9999;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ----------------------------------------
|
|
25
|
+
Positioning modifiers
|
|
26
|
+
---------------------------------------- */
|
|
27
|
+
.umds-alert--top-right {
|
|
28
|
+
top: 24px;
|
|
29
|
+
right: 24px;
|
|
30
|
+
}
|
|
31
|
+
.umds-alert--top-left {
|
|
32
|
+
top: 24px;
|
|
33
|
+
left: 24px;
|
|
34
|
+
}
|
|
35
|
+
.umds-alert--top-center {
|
|
36
|
+
top: 24px;
|
|
37
|
+
left: 50%;
|
|
38
|
+
transform: translateX(-50%);
|
|
39
|
+
}
|
|
40
|
+
.umds-alert--bottom-right {
|
|
41
|
+
bottom: 24px;
|
|
42
|
+
right: 24px;
|
|
43
|
+
}
|
|
44
|
+
.umds-alert--bottom-left {
|
|
45
|
+
bottom: 24px;
|
|
46
|
+
left: 24px;
|
|
47
|
+
}
|
|
48
|
+
.umds-alert--bottom-center {
|
|
49
|
+
bottom: 24px;
|
|
50
|
+
left: 50%;
|
|
51
|
+
transform: translateX(-50%);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ----------------------------------------
|
|
55
|
+
Internal elements
|
|
56
|
+
---------------------------------------- */
|
|
57
|
+
.umds-alert__icon-wrapper {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: flex-start;
|
|
60
|
+
flex-shrink: 0;
|
|
61
|
+
margin-top: 2px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.umds-alert__content {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-direction: column;
|
|
67
|
+
gap: 4px;
|
|
68
|
+
flex: 1 1 0;
|
|
69
|
+
min-width: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.umds-alert__title-container {
|
|
73
|
+
display: flex;
|
|
74
|
+
width: 100%;
|
|
75
|
+
align-items: flex-start;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.umds-alert__title-text {
|
|
79
|
+
font-weight: var(--umds-primitive-font-weight-semibold, 600) !important;
|
|
80
|
+
font-size: var(--umds-primitive-font-size-xxxxs, 12px) !important;
|
|
81
|
+
margin: 0;
|
|
82
|
+
line-height: normal;
|
|
83
|
+
letter-spacing: 0.06px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.umds-alert__description-text {
|
|
87
|
+
font-weight: var(--umds-primitive-font-weight-regular, 400) !important;
|
|
88
|
+
font-size: var(--umds-primitive-font-size-xxxxs, 12px) !important;
|
|
89
|
+
margin: 0;
|
|
90
|
+
line-height: normal;
|
|
91
|
+
letter-spacing: 0.06px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.umds-alert__actions {
|
|
95
|
+
display: flex;
|
|
96
|
+
gap: 8px;
|
|
97
|
+
padding-top: 8px;
|
|
98
|
+
align-items: flex-start;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.umds-alert__close {
|
|
102
|
+
all: unset;
|
|
103
|
+
display: flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
justify-content: center;
|
|
106
|
+
flex-shrink: 0;
|
|
107
|
+
width: 24px;
|
|
108
|
+
height: 24px;
|
|
109
|
+
cursor: pointer;
|
|
110
|
+
border-radius: 4px;
|
|
111
|
+
transition: opacity 0.2s ease, background-color 0.2s ease;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.umds-alert__close:hover,
|
|
115
|
+
.umds-alert__close:focus-visible {
|
|
116
|
+
opacity: 0.8;
|
|
117
|
+
background-color: rgba(0, 0, 0, 0.05); /* very soft fallback highlight */
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.umds-alert__close:focus-visible {
|
|
121
|
+
outline: 2px solid var(--umds-semantic-color-primary-pure);
|
|
122
|
+
outline-offset: 1px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* ----------------------------------------
|
|
126
|
+
Theme Variantes: SOFT
|
|
127
|
+
---------------------------------------- */
|
|
128
|
+
|
|
129
|
+
/* Neutral Soft */
|
|
130
|
+
.umds-alert--soft.umds-alert--neutral {
|
|
131
|
+
background-color: var(--umds-semantic-color-background-white, white);
|
|
132
|
+
color: var(--umds-semantic-color-neutral-dark-pure, #333);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Warning Soft (Uses info tokens on 1ds standard for warning logic from figma) */
|
|
136
|
+
.umds-alert--soft.umds-alert--warning {
|
|
137
|
+
background-color: var(--umds-semantic-color-feedback-info-light, #ffe9d9);
|
|
138
|
+
border: 1px solid var(--umds-semantic-color-feedback-info-pure, #db6816);
|
|
139
|
+
color: var(--umds-semantic-color-feedback-info-dark, #99470c);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* Success Soft */
|
|
143
|
+
.umds-alert--soft.umds-alert--success {
|
|
144
|
+
background-color: var(--umds-semantic-color-feedback-positive-light, #cef2e1);
|
|
145
|
+
border: 1px solid var(--umds-semantic-color-feedback-positive-pure, #0f874e);
|
|
146
|
+
color: var(--umds-semantic-color-feedback-positive-dark, #0f4c30);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* Error Soft */
|
|
150
|
+
.umds-alert--soft.umds-alert--error {
|
|
151
|
+
background-color: var(--umds-semantic-color-feedback-negative-light, #ffe6ea);
|
|
152
|
+
border: 1px solid var(--umds-semantic-color-feedback-negative-pure, #b2132e);
|
|
153
|
+
color: var(--umds-semantic-color-feedback-negative-dark, #801224);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* ----------------------------------------
|
|
157
|
+
Theme Variantes: SOLID
|
|
158
|
+
---------------------------------------- */
|
|
159
|
+
|
|
160
|
+
/* Neutral Solid */
|
|
161
|
+
.umds-alert--solid.umds-alert--neutral {
|
|
162
|
+
background-color: var(--umds-semantic-color-neutral-dark-pure, #333333);
|
|
163
|
+
color: var(--umds-semantic-color-neutral-light-pure, #ffffff);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Warning Solid */
|
|
167
|
+
.umds-alert--solid.umds-alert--warning {
|
|
168
|
+
background-color: var(--umds-semantic-color-feedback-info-pure, #db6816);
|
|
169
|
+
color: var(--umds-semantic-color-neutral-light-pure, #ffffff);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Success Solid */
|
|
173
|
+
.umds-alert--solid.umds-alert--success {
|
|
174
|
+
background-color: var(--umds-semantic-color-feedback-positive-pure, #0f874e);
|
|
175
|
+
color: var(--umds-semantic-color-neutral-light-pure, #ffffff);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* Error Solid */
|
|
179
|
+
.umds-alert--solid.umds-alert--error {
|
|
180
|
+
background-color: var(--umds-semantic-color-feedback-negative-pure, #b2132e);
|
|
181
|
+
color: var(--umds-semantic-color-neutral-light-pure, #ffffff);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* Overrides for close icon on SOLID */
|
|
185
|
+
.umds-alert--solid .umds-alert__close:hover,
|
|
186
|
+
.umds-alert--solid .umds-alert__close:focus-visible {
|
|
187
|
+
background-color: rgba(255, 255, 255, 0.15);
|
|
188
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import './Alert.css';
|
|
2
|
+
/**
|
|
3
|
+
* Componente Alert é utilizado para comunicar mensagens importantes que requerem a atenção imediata do usuário.
|
|
4
|
+
* Pode indicar sucessos, avisos, erros ou informações relevantes de forma clara e destacada.
|
|
5
|
+
*/
|
|
6
|
+
export interface AlertProps {
|
|
7
|
+
/**
|
|
8
|
+
* Título do alerta.
|
|
9
|
+
*/
|
|
10
|
+
title?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Propriedade obrigatória do aviso que explica do que se trata o alerta.
|
|
13
|
+
*/
|
|
14
|
+
description?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Tipo/Cor semântico do alerta.
|
|
17
|
+
* @default 'neutral'
|
|
18
|
+
*/
|
|
19
|
+
type?: "neutral" | "success" | "warning" | "error";
|
|
20
|
+
/**
|
|
21
|
+
* Estilo visual ('soft' para fundos claros; 'solid' para preenchimentos escuros/cores fortes).
|
|
22
|
+
* @default 'soft'
|
|
23
|
+
*/
|
|
24
|
+
variant?: "soft" | "solid";
|
|
25
|
+
/**
|
|
26
|
+
* Posição vertical na tela para a exibição flutuante.
|
|
27
|
+
* @default 'top'
|
|
28
|
+
*/
|
|
29
|
+
verticalPosition?: "top" | "bottom";
|
|
30
|
+
/**
|
|
31
|
+
* Posição horizontal na tela para a exibição flutuante.
|
|
32
|
+
* @default 'right'
|
|
33
|
+
*/
|
|
34
|
+
horizontalPosition?: "left" | "center" | "right";
|
|
35
|
+
/**
|
|
36
|
+
* Tempo em milissegundos que o alerta ficará na tela e desaparecerá.
|
|
37
|
+
* Se 0, ou não definido, o alerta não desaparece de forma automática.
|
|
38
|
+
* @default 0
|
|
39
|
+
*/
|
|
40
|
+
time?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Define ou não a visibilidade do ícone de dispensar o aviso.
|
|
43
|
+
* @default false
|
|
44
|
+
*/
|
|
45
|
+
dismissable?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Possibilita uso de elementos HTML/Componentes JSX ou text simples no bloco de ação (links/etc).
|
|
48
|
+
*/
|
|
49
|
+
content?: any;
|
|
50
|
+
/**
|
|
51
|
+
* Slot principal no Mitosis para o custom content generalizado.
|
|
52
|
+
*/
|
|
53
|
+
children?: any;
|
|
54
|
+
/**
|
|
55
|
+
* Permite sobrescrever classes customizadas na raiz do container do alerta
|
|
56
|
+
*/
|
|
57
|
+
className?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Evento acionado ao clicar para fechar o alerta
|
|
60
|
+
*/
|
|
61
|
+
onClose?: (event?: any) => void;
|
|
62
|
+
[key: string]: any;
|
|
63
|
+
}
|
|
64
|
+
declare function Alert(props: AlertProps): import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
export default Alert;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import './Alert.css';
|
|
3
|
+
"use client";
|
|
4
|
+
import { useState, useEffect } from "react";
|
|
5
|
+
import Icon from "../Icon/Icon";
|
|
6
|
+
import Text from "../Text/Text";
|
|
7
|
+
function Alert(props) {
|
|
8
|
+
const [visible, setVisible] = useState(() => true);
|
|
9
|
+
const [timeoutId, setTimeoutId] = useState(() => 0);
|
|
10
|
+
function classes() {
|
|
11
|
+
return [
|
|
12
|
+
"umds-alert",
|
|
13
|
+
`umds-alert--${props.type || "neutral"}`,
|
|
14
|
+
`umds-alert--${props.variant || "soft"}`,
|
|
15
|
+
`umds-alert--${props.verticalPosition || "top"}-${props.horizontalPosition || "right"}`,
|
|
16
|
+
props.className,
|
|
17
|
+
]
|
|
18
|
+
.filter(Boolean)
|
|
19
|
+
.join(" ");
|
|
20
|
+
}
|
|
21
|
+
function iconName() {
|
|
22
|
+
const currentType = props.type || "neutral";
|
|
23
|
+
if (currentType === "success")
|
|
24
|
+
return "check-circle";
|
|
25
|
+
if (currentType === "error")
|
|
26
|
+
return "xmark-circle";
|
|
27
|
+
if (currentType === "warning")
|
|
28
|
+
return "warning-triangle";
|
|
29
|
+
return "info-circle";
|
|
30
|
+
}
|
|
31
|
+
function handleClose(event) {
|
|
32
|
+
if (event)
|
|
33
|
+
event.stopPropagation();
|
|
34
|
+
setVisible(false);
|
|
35
|
+
if (props.onClose) {
|
|
36
|
+
props.onClose(event);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
const timeProp = typeof props.time === "number" ? props.time : 0;
|
|
41
|
+
if (timeProp > 0) {
|
|
42
|
+
setTimeoutId(setTimeout(() => {
|
|
43
|
+
handleClose(null);
|
|
44
|
+
}, timeProp));
|
|
45
|
+
}
|
|
46
|
+
}, []);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
return () => {
|
|
49
|
+
if (timeoutId) {
|
|
50
|
+
clearTimeout(timeoutId);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}, []);
|
|
54
|
+
return (_jsx(_Fragment, { children: visible ? (_jsx(_Fragment, { children: _jsxs("div", { role: "alert", ...props, className: classes(), children: [_jsx("div", { className: "umds-alert__icon-wrapper", children: _jsx(Icon, { variant: "inherit", size: "md", name: iconName() }) }), _jsxs("div", { className: "umds-alert__content", children: [props.title ? (_jsx("div", { className: "umds-alert__title-container", children: _jsx(Text, { variant: "body2", as: "p", className: "umds-alert__title-text", children: props.title }) })) : null, props.description ? (_jsx(Text, { variant: "caption", as: "p", className: "umds-alert__description-text", children: props.description })) : null, props.content || props.children ? (_jsx("div", { className: "umds-alert__actions", children: _jsx(_Fragment, { children: props.content || "{props.content || props.children}" }) })) : null] }), props.dismissable ? (_jsx("button", { type: "button", "aria-label": "Dispensar alerta", className: "umds-alert__close", onClick: (event) => handleClose(event), children: _jsx(Icon, { name: "nav-arrow-up", variant: "inherit", size: "md" }) })) : null] }) })) : null }));
|
|
55
|
+
}
|
|
56
|
+
export default Alert;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
.umds-avatar {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
border-radius: 9999px;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
font-family: var(--umds-semantic-font-family-base, inherit);
|
|
8
|
+
font-weight: 600;
|
|
9
|
+
/* SemiBold */
|
|
10
|
+
text-transform: uppercase;
|
|
11
|
+
line-height: 1;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
flex-shrink: 0;
|
|
14
|
+
white-space: nowrap;
|
|
15
|
+
user-select: none;
|
|
16
|
+
border: 1.5px solid var(--umds-semantic-color-background-white);
|
|
17
|
+
/* Borda branca global */
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Sizes */
|
|
21
|
+
.umds-avatar--xs {
|
|
22
|
+
width: 16px;
|
|
23
|
+
height: 16px;
|
|
24
|
+
font-size: 8px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.umds-avatar--sm {
|
|
28
|
+
width: 24px;
|
|
29
|
+
height: 24px;
|
|
30
|
+
font-size: 12px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.umds-avatar--md {
|
|
34
|
+
width: 42px;
|
|
35
|
+
height: 42px;
|
|
36
|
+
font-size: 16px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.umds-avatar--lg {
|
|
40
|
+
width: 64px;
|
|
41
|
+
height: 64px;
|
|
42
|
+
font-size: 24px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Types */
|
|
46
|
+
.umds-avatar--letter {
|
|
47
|
+
background-color: var(--umds-semantic-color-primary-light);
|
|
48
|
+
color: var(--umds-semantic-color-primary-dark);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.umds-avatar--number {
|
|
52
|
+
background-color: var(--umds-semantic-color-primary-dark);
|
|
53
|
+
/* Alterado para Primary Dark */
|
|
54
|
+
color: var(--umds-semantic-color-background-white);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Ajuste fino para fonte do Number se necessário */
|
|
58
|
+
.umds-avatar--number.umds-avatar--xs {
|
|
59
|
+
font-size: 6px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.umds-avatar--photo {
|
|
63
|
+
background-color: var(--umds-semantic-color-neutral-light-medium);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.umds-avatar__image {
|
|
67
|
+
width: 100%;
|
|
68
|
+
height: 100%;
|
|
69
|
+
object-fit: cover;
|
|
70
|
+
display: block;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Avatar Group Styles */
|
|
74
|
+
.umds-avatar-group {
|
|
75
|
+
display: inline-flex;
|
|
76
|
+
flex-direction: row;
|
|
77
|
+
align-items: center;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.umds-avatar-group .umds-avatar {
|
|
81
|
+
/* Border já definida no componente base */
|
|
82
|
+
margin-right: -6px;
|
|
83
|
+
z-index: 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.umds-avatar-group .umds-avatar:hover {
|
|
87
|
+
z-index: 5;
|
|
88
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import './Avatar.css';
|
|
2
|
+
export interface AvatarProps {
|
|
3
|
+
/**
|
|
4
|
+
* URL da imagem. Se fornecida, o tipo será automaticamente 'Photo' visualmente,
|
|
5
|
+
* a menos que haja erro no carregamento (fallback para Letter/Number).
|
|
6
|
+
*/
|
|
7
|
+
src?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Texto alternativo para a imagem (acessibilidade).
|
|
10
|
+
*/
|
|
11
|
+
alt?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Tamanho do avatar.
|
|
14
|
+
* XS: 16px, SM: 24px, MD: 42px, LG: 64px.
|
|
15
|
+
* @default 'md'
|
|
16
|
+
*/
|
|
17
|
+
size?: "xs" | "sm" | "md" | "lg";
|
|
18
|
+
/**
|
|
19
|
+
* Tipo do avatar. Controla estilos de cor.
|
|
20
|
+
* @default 'letter'
|
|
21
|
+
*/
|
|
22
|
+
type?: "photo" | "letter" | "number";
|
|
23
|
+
/**
|
|
24
|
+
* Conteúdo interno (Iniciais ou Número).
|
|
25
|
+
* Ex: "AB", "+3".
|
|
26
|
+
*/
|
|
27
|
+
children?: any;
|
|
28
|
+
/**
|
|
29
|
+
* Classes adicionais.
|
|
30
|
+
*/
|
|
31
|
+
className?: string;
|
|
32
|
+
}
|
|
33
|
+
declare function Avatar(props: AvatarProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export default Avatar;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import './Avatar.css';
|
|
3
|
+
function Avatar(props) {
|
|
4
|
+
function classes() {
|
|
5
|
+
return [
|
|
6
|
+
"umds-avatar",
|
|
7
|
+
`umds-avatar--${props.size || "md"}`,
|
|
8
|
+
`umds-avatar--${props.type || (props.src ? "photo" : "letter")}`,
|
|
9
|
+
props.className,
|
|
10
|
+
]
|
|
11
|
+
.filter(Boolean)
|
|
12
|
+
.join(" ");
|
|
13
|
+
}
|
|
14
|
+
return (_jsxs("div", { className: classes(), children: [props.src ? (_jsx("img", { className: "umds-avatar__image", src: props.src, alt: props.alt || "" })) : null, !props.src ? _jsx(_Fragment, { children: props.children }) : null] }));
|
|
15
|
+
}
|
|
16
|
+
export default Avatar;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AvatarGroupProps {
|
|
2
|
+
/**
|
|
3
|
+
* Conteúdo (lista de Avatars).
|
|
4
|
+
*/
|
|
5
|
+
children?: any;
|
|
6
|
+
/**
|
|
7
|
+
* Classes adicionais.
|
|
8
|
+
*/
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
declare function AvatarGroup(props: AvatarGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default AvatarGroup;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
function AvatarGroup(props) {
|
|
3
|
+
function classes() {
|
|
4
|
+
return ["umds-avatar-group", props.className].filter(Boolean).join(" ");
|
|
5
|
+
}
|
|
6
|
+
return _jsx("div", { className: classes(), children: props.children });
|
|
7
|
+
}
|
|
8
|
+
export default AvatarGroup;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
.umds-badge {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
border-radius: 4px;
|
|
6
|
+
font-family: var(--umds-semantic-font-family-base, sans-serif);
|
|
7
|
+
font-weight: 600;
|
|
8
|
+
line-height: 1;
|
|
9
|
+
white-space: nowrap;
|
|
10
|
+
letter-spacing: normal;
|
|
11
|
+
border: 1px solid transparent;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
gap: 6px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.umds-badge__icon {
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
align-self: center;
|
|
19
|
+
flex-shrink: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.umds-badge__icon:empty {
|
|
23
|
+
display: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.umds-badge__icon svg,
|
|
27
|
+
.umds-badge__icon img,
|
|
28
|
+
.umds-badge__icon .umds-icon {
|
|
29
|
+
width: 1.15em;
|
|
30
|
+
height: 1.15em;
|
|
31
|
+
font-size: 1.15em;
|
|
32
|
+
display: block;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Sizes (Heights in REM as requested) */
|
|
36
|
+
.umds-badge--lg {
|
|
37
|
+
font-size: 14px;
|
|
38
|
+
padding: 0 16px;
|
|
39
|
+
height: 3rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.umds-badge--md {
|
|
43
|
+
font-size: 12px;
|
|
44
|
+
padding: 0 12px;
|
|
45
|
+
height: 2rem;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.umds-badge--sm {
|
|
49
|
+
font-size: 10px;
|
|
50
|
+
padding: 0 8px;
|
|
51
|
+
height: 1.5rem;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.umds-badge--xs {
|
|
55
|
+
font-size: 9px;
|
|
56
|
+
padding: 0 6px;
|
|
57
|
+
height: 1rem;
|
|
58
|
+
gap: 4px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.umds-badge--pill {
|
|
62
|
+
font-size: 9px;
|
|
63
|
+
/* Ajuste para caber em 0.75rem (12px) */
|
|
64
|
+
padding: 0 6px;
|
|
65
|
+
height: 0.75rem;
|
|
66
|
+
border-radius: 9999px;
|
|
67
|
+
font-weight: 700;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Hide icons in Pill size */
|
|
71
|
+
.umds-badge--pill .umds-badge__icon {
|
|
72
|
+
display: none !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* --- Solid --- */
|
|
76
|
+
.umds-badge--solid.umds-badge--neutral {
|
|
77
|
+
background-color: var(--umds-semantic-color-neutral-dark-down);
|
|
78
|
+
color: var(--umds-semantic-color-background-white);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.umds-badge--solid.umds-badge--positive {
|
|
82
|
+
background-color: var(--umds-semantic-color-feedback-positive-pure);
|
|
83
|
+
color: var(--umds-semantic-color-background-white);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.umds-badge--solid.umds-badge--negative {
|
|
87
|
+
background-color: var(--umds-semantic-color-feedback-negative-pure);
|
|
88
|
+
color: var(--umds-semantic-color-background-white);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.umds-badge--solid.umds-badge--info {
|
|
92
|
+
background-color: var(--umds-semantic-color-feedback-info-pure);
|
|
93
|
+
color: var(--umds-semantic-color-background-white);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.umds-badge--solid.umds-badge--primary {
|
|
97
|
+
background-color: var(--umds-semantic-color-primary-pure);
|
|
98
|
+
color: var(--umds-semantic-color-background-white);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* --- Soft (Subtle) --- */
|
|
102
|
+
.umds-badge--soft.umds-badge--neutral {
|
|
103
|
+
background-color: var(--umds-semantic-color-neutral-light-medium);
|
|
104
|
+
color: var(--umds-semantic-color-neutral-dark-pure);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.umds-badge--soft.umds-badge--positive {
|
|
108
|
+
background-color: var(--umds-semantic-color-feedback-positive-light);
|
|
109
|
+
color: var(--umds-semantic-color-feedback-positive-dark);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.umds-badge--soft.umds-badge--negative {
|
|
113
|
+
background-color: var(--umds-semantic-color-feedback-negative-light);
|
|
114
|
+
color: var(--umds-semantic-color-feedback-negative-dark);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.umds-badge--soft.umds-badge--info {
|
|
118
|
+
background-color: var(--umds-semantic-color-feedback-info-light);
|
|
119
|
+
color: var(--umds-semantic-color-feedback-info-dark);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.umds-badge--soft.umds-badge--primary {
|
|
123
|
+
background-color: var(--umds-semantic-color-primary-light);
|
|
124
|
+
color: var(--umds-semantic-color-primary-pure);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* --- Outlined --- */
|
|
128
|
+
.umds-badge--outlined {
|
|
129
|
+
background-color: transparent;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.umds-badge--outlined.umds-badge--neutral {
|
|
133
|
+
border-color: var(--umds-semantic-color-neutral-dark-medium);
|
|
134
|
+
color: var(--umds-semantic-color-neutral-dark-medium);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.umds-badge--outlined.umds-badge--positive {
|
|
138
|
+
border-color: var(--umds-semantic-color-feedback-positive-pure);
|
|
139
|
+
color: var(--umds-semantic-color-feedback-positive-pure);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.umds-badge--outlined.umds-badge--negative {
|
|
143
|
+
border-color: var(--umds-semantic-color-feedback-negative-pure);
|
|
144
|
+
color: var(--umds-semantic-color-feedback-negative-pure);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.umds-badge--outlined.umds-badge--info {
|
|
148
|
+
border-color: var(--umds-semantic-color-feedback-info-pure);
|
|
149
|
+
color: var(--umds-semantic-color-feedback-info-pure);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.umds-badge--outlined.umds-badge--primary {
|
|
153
|
+
border-color: var(--umds-semantic-color-primary-pure);
|
|
154
|
+
color: var(--umds-semantic-color-primary-pure);
|
|
155
|
+
}
|