@12-apps/ui 6.5.0 → 6.7.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/dist/{chunk-3KWD5Y5O.js → chunk-RXE5CUUE.js} +8 -4
- package/dist/chunk-RXE5CUUE.js.map +1 -0
- package/dist/data-display/Alert.js +1 -1
- package/dist/data-display/AsyncStateContainer.js +2 -1
- package/dist/data-display/AsyncStateContainer.js.map +1 -1
- package/dist/data-display/Banner.js +4 -2
- package/dist/data-display/Banner.js.map +1 -1
- package/dist/data-display/CardKit.js +3 -1
- package/dist/data-display/CardKit.js.map +1 -1
- package/dist/data-display/Carousel.js +5 -2
- package/dist/data-display/Carousel.js.map +1 -1
- package/dist/data-display/DataViews.js +8 -7
- package/dist/data-display/DataViews.js.map +1 -1
- package/dist/data-display/Lightbox.js +147 -117
- package/dist/data-display/Lightbox.js.map +1 -1
- package/dist/data-display/MapPreview.js +14 -10
- package/dist/data-display/MapPreview.js.map +1 -1
- package/dist/pt-BR.js +46 -3
- package/dist/pt-BR.js.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.d.ts +9 -2
- package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
- package/dist/types/components/data-display/Alert/Alert.types.d.ts +25 -9
- package/dist/types/components/data-display/Alert/Alert.types.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.d.ts.map +1 -1
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts +6 -0
- package/dist/types/components/data-display/AsyncStateContainer/AsyncStateContainer.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.d.ts.map +1 -1
- package/dist/types/components/data-display/Banner/Banner.types.d.ts +2 -0
- package/dist/types/components/data-display/Banner/Banner.types.d.ts.map +1 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts +3 -1
- package/dist/types/components/data-display/CardKit/card-actions-context.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts +3 -0
- package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +7 -0
- package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +25 -0
- package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-layout-context.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-table-parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts +9 -0
- package/dist/types/components/data-display/Lightbox/Lightbox.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/LightboxControls.d.ts.map +1 -1
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts +17 -0
- package/dist/types/components/data-display/Lightbox/lightbox-copy-context.d.ts.map +1 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts +7 -0
- package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts +9 -0
- package/dist/types/components/data-display/MapPreview/MapPreview.types.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts +2 -0
- package/dist/types/components/data-display/MapPreview/MapSearchBar.d.ts.map +1 -1
- package/dist/types/copy.d.ts +53 -0
- package/dist/types/copy.d.ts.map +1 -1
- package/dist/types/pt-BR.d.ts +5 -1
- package/dist/types/pt-BR.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/data-display/Alert/Alert.tsx +22 -5
- package/src/components/data-display/Alert/Alert.types.ts +20 -10
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx +2 -1
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts +6 -0
- package/src/components/data-display/Banner/Banner.tsx +5 -2
- package/src/components/data-display/Banner/Banner.types.ts +2 -0
- package/src/components/data-display/CardKit/card-actions-context.tsx +4 -0
- package/src/components/data-display/Carousel/Carousel.chrome.tsx +5 -0
- package/src/components/data-display/Carousel/Carousel.parts.tsx +4 -3
- package/src/components/data-display/Carousel/Carousel.types.ts +7 -0
- package/src/components/data-display/DataViews/data-views-copy.ts +25 -0
- package/src/components/data-display/DataViews/data-views-display-tabs.tsx +2 -2
- package/src/components/data-display/DataViews/data-views-export.tsx +1 -1
- package/src/components/data-display/DataViews/data-views-layout-context.tsx +3 -1
- package/src/components/data-display/DataViews/data-views-more-filters.tsx +2 -2
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +1 -1
- package/src/components/data-display/DataViews/data-views-table-parts.tsx +1 -0
- package/src/components/data-display/Lightbox/Lightbox.tsx +3 -0
- package/src/components/data-display/Lightbox/Lightbox.types.ts +9 -0
- package/src/components/data-display/Lightbox/LightboxControls.tsx +28 -15
- package/src/components/data-display/Lightbox/lightbox-copy-context.tsx +42 -0
- package/src/components/data-display/MapPreview/MapControlBar.tsx +17 -9
- package/src/components/data-display/MapPreview/MapLayers.tsx +2 -0
- package/src/components/data-display/MapPreview/MapPreview.types.ts +10 -0
- package/src/components/data-display/MapPreview/MapSearchBar.tsx +4 -1
- package/src/copy.ts +57 -0
- package/src/pt-BR.ts +48 -1
- package/dist/chunk-3KWD5Y5O.js.map +0 -1
|
@@ -28,6 +28,8 @@ const SearchField = styled(TextField)(({ theme }) => ({
|
|
|
28
28
|
}));
|
|
29
29
|
|
|
30
30
|
export interface MapSearchBarProps {
|
|
31
|
+
/** The field's accessible name — it renders no visible label. REQUIRED. */
|
|
32
|
+
label: string;
|
|
31
33
|
value: string;
|
|
32
34
|
placeholder: string;
|
|
33
35
|
isSearching: boolean;
|
|
@@ -36,6 +38,7 @@ export interface MapSearchBarProps {
|
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
export const MapSearchBar: FC<MapSearchBarProps> = ({
|
|
41
|
+
label,
|
|
39
42
|
value,
|
|
40
43
|
placeholder,
|
|
41
44
|
isSearching,
|
|
@@ -58,7 +61,7 @@ export const MapSearchBar: FC<MapSearchBarProps> = ({
|
|
|
58
61
|
),
|
|
59
62
|
}}
|
|
60
63
|
disabled={isSearching}
|
|
61
|
-
aria-label=
|
|
64
|
+
aria-label={label}
|
|
62
65
|
/>
|
|
63
66
|
</SearchBar>
|
|
64
67
|
);
|
package/src/copy.ts
CHANGED
|
@@ -129,4 +129,61 @@ export interface CepFieldCopy {
|
|
|
129
129
|
export interface TableFilterCopy {
|
|
130
130
|
/** A numeric range whose maximum is below its minimum. */
|
|
131
131
|
invalidRange: string;
|
|
132
|
+
/** The two free-text bounds, which carry no visible label of their own. */
|
|
133
|
+
rangeMin: string;
|
|
134
|
+
rangeMax: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The lightbox's controls, every one of them a glyph with no text.
|
|
139
|
+
*
|
|
140
|
+
* So this object IS what a screen-reader user hears for the whole viewer —
|
|
141
|
+
* which is why it shipped as English literals for so long without anyone
|
|
142
|
+
* noticing: the sighted path renders identically either way.
|
|
143
|
+
*/
|
|
144
|
+
export interface LightboxCopy {
|
|
145
|
+
close: string;
|
|
146
|
+
previous: string;
|
|
147
|
+
next: string;
|
|
148
|
+
zoomIn: string;
|
|
149
|
+
zoomOut: string;
|
|
150
|
+
resetZoom: string;
|
|
151
|
+
/** The slideshow toggle, in its two states. */
|
|
152
|
+
play: string;
|
|
153
|
+
pause: string;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** The map preview's control bar — same shape, same reason, as the lightbox. */
|
|
157
|
+
export interface MapPreviewCopy {
|
|
158
|
+
zoomIn: string;
|
|
159
|
+
zoomOut: string;
|
|
160
|
+
center: string;
|
|
161
|
+
mapType: string;
|
|
162
|
+
fullscreen: string;
|
|
163
|
+
search: string;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** The carousel's two arrows, which carry a glyph and nothing else. */
|
|
167
|
+
export interface CarouselCopy {
|
|
168
|
+
previous: string;
|
|
169
|
+
next: string;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The states a data surface can be in with nothing to draw, and the dismiss
|
|
174
|
+
* every banner-like surface carries.
|
|
175
|
+
*
|
|
176
|
+
* One object rather than six, because these are the same four sentences the
|
|
177
|
+
* table, the grid, the async container, the hover card and the infinite
|
|
178
|
+
* scroller each rendered their own copy of.
|
|
179
|
+
*/
|
|
180
|
+
export interface DataStateCopy {
|
|
181
|
+
/** No rows at all — distinct from "no rows for these filters". */
|
|
182
|
+
empty: string;
|
|
183
|
+
loading: string;
|
|
184
|
+
/** The infinite scroller reached the end. */
|
|
185
|
+
endOfList: string;
|
|
186
|
+
/** An alert's and a banner's dismiss, neither of which has a visible label. */
|
|
187
|
+
dismissAlert: string;
|
|
188
|
+
dismissBanner: string;
|
|
132
189
|
}
|
package/src/pt-BR.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type { DataViewsCopy } from "./components/data-display/DataViews/data-views-copy";
|
|
2
2
|
import type { SavedViewsLabels } from "./components/layout/ContentToolbar/ContentToolbar.types";
|
|
3
3
|
import type {
|
|
4
|
+
CarouselCopy,
|
|
4
5
|
CategorySelectCopy,
|
|
5
6
|
CepFieldCopy,
|
|
6
7
|
ConfirmActionCopy,
|
|
8
|
+
DataStateCopy,
|
|
9
|
+
LightboxCopy,
|
|
10
|
+
MapPreviewCopy,
|
|
7
11
|
SectionOnboardingCopy,
|
|
8
12
|
TableFilterCopy,
|
|
9
|
-
} from
|
|
13
|
+
} from './copy';
|
|
10
14
|
|
|
11
15
|
/**
|
|
12
16
|
* The pt-BR packs — NAMED constants a host passes by hand, never defaults.
|
|
@@ -101,6 +105,41 @@ export const PT_BR_SAVED_VIEWS_LABELS: SavedViewsLabels = {
|
|
|
101
105
|
|
|
102
106
|
export const PT_BR_TABLE_FILTER_COPY: TableFilterCopy = {
|
|
103
107
|
invalidRange: "O máximo deve ser maior ou igual ao mínimo.",
|
|
108
|
+
rangeMin: "Mínimo",
|
|
109
|
+
rangeMax: "Máximo",
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const PT_BR_LIGHTBOX_COPY: LightboxCopy = {
|
|
113
|
+
close: "Fechar",
|
|
114
|
+
previous: "Anterior",
|
|
115
|
+
next: "Próximo",
|
|
116
|
+
zoomIn: "Aproximar",
|
|
117
|
+
zoomOut: "Afastar",
|
|
118
|
+
resetZoom: "Restaurar o zoom",
|
|
119
|
+
play: "Iniciar a apresentação",
|
|
120
|
+
pause: "Pausar a apresentação",
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const PT_BR_MAP_PREVIEW_COPY: MapPreviewCopy = {
|
|
124
|
+
zoomIn: "Aproximar",
|
|
125
|
+
zoomOut: "Afastar",
|
|
126
|
+
center: "Centralizar o mapa",
|
|
127
|
+
mapType: "Trocar o tipo de mapa",
|
|
128
|
+
fullscreen: "Tela cheia",
|
|
129
|
+
search: "Buscar endereço",
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export const PT_BR_CAROUSEL_COPY: CarouselCopy = {
|
|
133
|
+
previous: "Anterior",
|
|
134
|
+
next: "Próximo",
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const PT_BR_DATA_STATE_COPY: DataStateCopy = {
|
|
138
|
+
empty: "Nenhum dado por aqui",
|
|
139
|
+
loading: "Carregando…",
|
|
140
|
+
endOfList: "Não há mais itens para carregar",
|
|
141
|
+
dismissAlert: "Fechar o aviso",
|
|
142
|
+
dismissBanner: "Fechar a faixa",
|
|
104
143
|
};
|
|
105
144
|
|
|
106
145
|
export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
@@ -192,6 +231,9 @@ export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
192
231
|
densityUnavailableNarrow:
|
|
193
232
|
"Um card por linha nesta largura — a densidade volta em telas maiores.",
|
|
194
233
|
trigger: "Exibir",
|
|
234
|
+
fieldHeading: "Campo",
|
|
235
|
+
formatHeading: "Formato",
|
|
236
|
+
cardZoom: "Tamanho dos cards",
|
|
195
237
|
},
|
|
196
238
|
export: {
|
|
197
239
|
formats: {
|
|
@@ -199,6 +241,7 @@ export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
199
241
|
},
|
|
200
242
|
visibleColumns: (columnCount) => `${columnCount} colunas visíveis, na ordem atual`,
|
|
201
243
|
trigger: "Exportar",
|
|
244
|
+
triggerLabel: "Exportar",
|
|
202
245
|
},
|
|
203
246
|
grid: {
|
|
204
247
|
rowActions: "Ações",
|
|
@@ -211,9 +254,12 @@ export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
211
254
|
moreFilters: (count) => `Mais filtros: ${count} sem espaço na barra`,
|
|
212
255
|
moreFiltersApplied: (count, appliedCount) =>
|
|
213
256
|
`Mais filtros: ${count} sem espaço na barra, ${appliedCount} aplicado(s)`,
|
|
257
|
+
moreTriggerLabel: "Mais",
|
|
258
|
+
moreHeading: "Mais filtros",
|
|
214
259
|
overflowNote: "sem espaço na barra",
|
|
215
260
|
rangeEnd: "Até",
|
|
216
261
|
rangeInvalid: "O início precisa ser menor que o fim.",
|
|
262
|
+
rangeInclusiveNote: "Ambas as datas entram no resultado.",
|
|
217
263
|
rangePresets: {
|
|
218
264
|
hoje: "Hoje",
|
|
219
265
|
ontem: "Ontem",
|
|
@@ -253,6 +299,7 @@ export const PT_BR_DATA_VIEWS_COPY: DataViewsCopy = {
|
|
|
253
299
|
saveAs: "Salvar como nova",
|
|
254
300
|
reset: "Redefinir",
|
|
255
301
|
updateFailed: "Não foi possível atualizar a visão",
|
|
302
|
+
dismissError: "Fechar o aviso",
|
|
256
303
|
saveFailed: "Não foi possível salvar a alteração da visão.",
|
|
257
304
|
editView: "Renomear e editar",
|
|
258
305
|
pinToSidebar: "Fixar na barra lateral",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Alert/Alert.tsx","../src/components/data-display/Alert/Alert.styles.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport {\n Alert as MuiAlert,\n AlertTitle,\n alpha,\n Box,\n Collapse,\n IconButton } from '@mui/material';\nimport { styled } from '@mui/material';\nimport React from 'react';\n\nimport {\n alertEmphasisStyles,\n alertLayoutStyles,\n alertVariantStyles,\n fadeInScale,\n getColorFromTheme,\n getVariantIcon } from './Alert.styles';\nimport type { AlertColor } from '@mui/material';\nimport type { AlertProps } from './Alert.types';\n\n// Define animations\nconst StyledAlert = styled(MuiAlert, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customColor', 'glow', 'pulse', 'animate'].includes(prop as string) })<{\n customVariant?: string;\n customColor?: string;\n glow?: boolean;\n pulse?: boolean;\n animate?: boolean;\n}>(({ theme, customVariant, customColor, glow, pulse, animate }) => {\n const colorPalette = getColorFromTheme(theme, customColor || customVariant || 'info');\n\n return {\n borderRadius: theme.spacing(1.5),\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n position: 'relative',\n overflow: 'hidden',\n animation: animate ? `${fadeInScale} 0.3s ease-out` : 'none',\n willChange: 'transform, opacity',\n\n ...alertLayoutStyles(theme, colorPalette, animate),\n\n // Hover effects\n '&:hover': {\n transform: 'translateY(-3px) scale(1.01)',\n boxShadow: `0 8px 20px ${alpha(colorPalette.main, 0.2)}`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\n '.MuiAlert-icon': {\n transform: 'scale(1.15) rotate(10deg)' },\n\n '&::before': {\n opacity: 1 } },\n\n // Active state\n '&:active': {\n transform: 'translateY(-1px) scale(0.99)',\n transition: 'transform 0.1s ease' },\n\n // Focus styles for accessibility\n '&:focus-within': {\n outline: `3px solid ${alpha(colorPalette.main, 0.5)}`,\n outlineOffset: '3px',\n boxShadow: `0 0 0 6px ${alpha(colorPalette.main, 0.1)}`,\n transition: 'all 0.2s ease' },\n\n ...alertVariantStyles(theme, customVariant, colorPalette),\n ...alertEmphasisStyles(colorPalette, Boolean(glow), Boolean(pulse)) };\n});\n\nconst ALERT_DEFAULTS = {\n variant: 'info',\n glow: false,\n pulse: false,\n showIcon: true,\n closable: false,\n animate: true,\n role: 'alert',\n 'aria-atomic': 'true',\n 'data-testid': 'alert' } satisfies Partial<AlertProps>;\n\n// Strips explicitly-undefined props before the merge so `prop={undefined}` still\n// falls back to the default, the way a destructuring default would.\nconst definedProps = (props: AlertProps): Partial<AlertProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<AlertProps>;\n\nconst testIdFor = (base: string | undefined, suffix: string) =>\n base ? `${base}-${suffix}` : `alert-${suffix}`;\n\n// glass and gradient are our own looks with no MUI severity of their own; both\n// borrow info's. danger is MUI's error.\nconst MUI_SEVERITY: Record<string, AlertColor> = {\n danger: 'error',\n glass: 'info',\n gradient: 'info' };\n\nconst toMuiSeverity = (variant: string): AlertColor =>\n MUI_SEVERITY[variant] ?? (variant as AlertColor);\n\nconst AlertContent: React.FC<{\n title?: AlertProps['title'];\n description?: AlertProps['description'];\n dataTestId?: string;\n children?: React.ReactNode;\n}> = ({ title, description, dataTestId, children }) => (\n <>\n {title && (\n <AlertTitle\n data-testid={testIdFor(dataTestId, 'title')}\n sx={{\n fontWeight: 600,\n fontSize: '1.05rem',\n marginBottom: description ? 0.5 : 0,\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n wordBreak: 'break-word' }}\n >\n {title}\n </AlertTitle>\n )}\n {description && (\n <Box\n component=\"div\"\n data-testid={testIdFor(dataTestId, 'message')}\n sx={{\n opacity: 0.9,\n fontSize: '0.925rem',\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n wordBreak: 'break-word' }}\n >\n {description}\n </Box>\n )}\n {children}\n </>\n);\n\nconst AlertCloseButton: React.FC<{ dataTestId?: string; onClose: () => void }> = ({\n dataTestId,\n onClose }) => (\n <IconButton\n data-testid={testIdFor(dataTestId, 'close')}\n aria-label=\"close alert\"\n color=\"inherit\"\n size=\"small\"\n onClick={onClose}\n sx={(theme) => ({\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n opacity: 0.7,\n '&:hover': {\n transform: 'rotate(90deg) scale(1.1)',\n opacity: 1,\n backgroundColor: alpha(theme.palette.action.hover, 0.1) },\n '&:focus': {\n opacity: 1,\n outline: 'none',\n backgroundColor: alpha(theme.palette.action.focus, 0.1) } })}\n >\n <Close fontSize=\"inherit\" />\n </IconButton>\n);\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n alertProps,\n ref,\n ) => {\n const {\n variant,\n color,\n glow,\n pulse,\n icon,\n showIcon,\n closable,\n onClose,\n title,\n description,\n children,\n animate,\n role,\n 'aria-atomic': ariaAtomic,\n 'data-testid': dataTestId,\n ...props\n } = { ...ALERT_DEFAULTS, ...definedProps(alertProps) };\n\n // Depends on `variant`, so it cannot live in the static defaults above.\n const ariaLive = alertProps['aria-live'] ?? (variant === 'danger' ? 'assertive' : 'polite');\n\n const [open, setOpen] = React.useState(true);\n const [isClosing, setIsClosing] = React.useState(false);\n\n const handleClose = () => {\n setIsClosing(true);\n window.setTimeout(() => {\n setOpen(false);\n onClose?.();\n }, 200);\n };\n\n const severity = toMuiSeverity(variant);\n\n const displayIcon = showIcon ? (\n <Box component=\"span\" data-testid={testIdFor(dataTestId, 'icon')}>\n {icon || getVariantIcon(variant)}\n </Box>\n ) : false;\n\n const content = (\n <AlertContent title={title} description={description} dataTestId={dataTestId}>\n {children}\n </AlertContent>\n );\n\n return (\n <Collapse in={open && !isClosing} timeout={300}>\n <StyledAlert\n ref={ref}\n data-testid={dataTestId || 'alert'}\n severity={severity}\n customVariant={variant}\n customColor={color}\n glow={glow}\n pulse={pulse}\n animate={animate}\n icon={displayIcon}\n role={role}\n aria-live={ariaLive}\n aria-atomic={ariaAtomic}\n tabIndex={0}\n action={closable && <AlertCloseButton dataTestId={dataTestId} onClose={handleClose} />}\n {...props}\n >\n {content}\n </StyledAlert>\n </Collapse>\n );\n },\n);\n\nAlert.displayName = 'Alert';\n","import Error from '@mui/icons-material/Error';\nimport Info from '@mui/icons-material/Info';\nimport CheckCircle from '@mui/icons-material/CheckCircle';\nimport Warning from '@mui/icons-material/Warning';\nimport { alpha, darken, keyframes, lighten } from '@mui/material';\nimport type { CSSObject, Theme } from '@mui/material';\nimport React from 'react';\n\nexport const pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 10px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\n// Additional animations can be enabled as needed\n// const slideInAnimation = keyframes`\n// from {\n// transform: translateX(-100%);\n// opacity: 0;\n// }\n// to {\n// transform: translateX(0);\n// opacity: 1;\n// }\n// `;\n\n// const bounceIn = keyframes`\n// 0% {\n// transform: scale(0.3);\n// opacity: 0;\n// }\n// 50% {\n// transform: scale(1.05);\n// }\n// 70% {\n// transform: scale(0.9);\n// }\n// 100% {\n// transform: scale(1);\n// opacity: 1;\n// }\n// `;\n\n// Removed unused slideInAnimation - can be re-added if needed for future features\n\nexport const shimmerAnimation = keyframes`\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n`;\n\nexport const fadeInScale = keyframes`\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-10px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n`;\n\nexport const iconRotate = keyframes`\n 0% {\n transform: rotate(0deg) scale(0.8);\n }\n 50% {\n transform: rotate(180deg) scale(1.1);\n }\n 100% {\n transform: rotate(360deg) scale(1);\n }\n`;\n\nexport const getColorFromTheme = (theme: Theme, variant: string) => {\n const colorMap: Record<string, { main: string; light?: string; dark?: string }> = {\n info: theme.palette.info,\n success: theme.palette.success,\n warning: theme.palette.warning,\n danger: theme.palette.error,\n primary: theme.palette.primary,\n secondary: theme.palette.secondary,\n neutral: {\n main: theme.palette.grey[500] || '#9E9E9E',\n light: theme.palette.grey[300] || '#E0E0E0',\n dark: theme.palette.grey[700] || '#616161',\n },\n };\n\n return colorMap[variant] || theme.palette.info;\n};\n\nexport const getVariantIcon = (variant: string) => {\n const iconMap: Record<string, React.ReactNode> = {\n info: <Info />,\n success: <CheckCircle />,\n warning: <Warning />,\n danger: <Error />,\n };\n\n return iconMap[variant];\n};\n\n// The palette shape getColorFromTheme returns — a main plus optional light/dark,\n// which is narrower than MUI's PaletteColor.\nexport type AlertPalette = { main: string; light?: string; dark?: string };\n\n/** The four semantic variants, which differ only in which palette they read. */\nconst SEMANTIC_VARIANTS = new Set(['info', 'success', 'warning', 'danger']);\n\n/**\n * The room the message is given — padding, the stack's rhythm, and where the\n * icon and the close button sit relative to it.\n *\n * Extracted for the same reason {@link alertVariantStyles} and\n * {@link alertEmphasisStyles} were: `styled()`'s callback is one function, and\n * every block written inline is counted against its length by the complexity\n * gate. Keeping the layout here means the callback assembles four named pieces\n * instead of carrying all of them.\n */\nexport const alertLayoutStyles = (\n theme: Theme,\n colorPalette: AlertPalette,\n animate: boolean | undefined,\n): CSSObject => ({\n // ROOM TO READ.\n //\n // MUI's `6px 16px` is sized for one line of text and nothing else. This Alert\n // routinely carries three things stacked — a sentence, a smaller explanation,\n // then a control — and at 6px they touched top and bottom and ran together\n // vertically, so the whole card read as one dense block instead of as a\n // message with parts. The generosity is what makes the structure legible; it\n // is not decoration.\n //\n // Padding stays overridable by an `sx` (a full-bleed strip legitimately wants\n // it tight), because this is a default rather than a rule.\n padding: theme.spacing(1.75, 2),\n\n '.MuiAlert-message': {\n display: 'flex',\n flexDirection: 'column',\n // 0.5 put a title, its explanation and a button 4px apart, which reads as a\n // spacing bug rather than as a group. 1 separates the lines; the extra\n // margin below goes to whatever CONTROL sits at the end, because the gap\n // between prose and a thing you press has to be bigger than the gap between\n // two lines of prose or the button looks like part of the text.\n gap: theme.spacing(1),\n fontSize: '0.95rem',\n lineHeight: 1.5,\n // No padding of its own — the root's is now doing that job, and MUI's\n // default `8px 0` on top of it would double the vertical space.\n padding: 0,\n // A CONTROL ON A TINTED PANEL NEEDS AN EDGE.\n //\n // `ghost` and `text` paint no background and no border — bare labels, which\n // works on white where the surrounding page is obviously not clickable.\n // Inside a coloured Alert it stops working: the label is one more coloured\n // phrase among several, and a \"Cancelar\" beside two lines of prose reads as\n // part of the prose.\n //\n // Only the BORDER is set, never the background or the colour, and that is\n // what makes it safe to apply to every button rather than just the bare\n // ones: a `solid` keeps its fill and its light label and gains a hairline\n // in the same hue, while a `ghost` gains the whole affordance.\n '.MuiButton-root': {\n marginTop: theme.spacing(0.5),\n border: `1px solid ${alpha(colorPalette.main, 0.45)}` },\n },\n\n '.MuiAlert-icon': {\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n alignItems: 'center',\n // Clear of the words rather than nearly touching them, and aligned to the\n // FIRST line instead of centred on the whole block — an icon floating\n // halfway down a three-line message points at nothing.\n alignSelf: 'flex-start',\n marginRight: theme.spacing(1.75),\n paddingTop: theme.spacing(0.25),\n animation: animate ? `${iconRotate} 0.6s ease-out` : 'none' },\n\n // The close button, kept off the text it sits beside.\n '.MuiAlert-action': {\n alignItems: 'flex-start',\n paddingLeft: theme.spacing(2) },\n});\n\n/**\n * A semantic Alert's surface and ink.\n *\n * ## Why this is not `alpha(main, 0.1)`\n *\n * It used to be, four times over, with `color: main` for the text. Both halves\n * were wrong, and independently so.\n *\n * The fill was TRANSLUCENT. A 10% wash only reads as a banner when something\n * opaque is behind it, so the component silently depended on where a consumer\n * put it. Placed over content — a floating notice, an invite anchored above a\n * catalogue — the page came straight through and the sentence interleaved with\n * whatever it was over. That is not a faint banner; it is an unreadable one,\n * and nothing in the component said so.\n *\n * The ink was the SEVERITY HUE at body size. `#0288d1`, this library's info\n * blue, is 3.03:1 on white — under the 4.5:1 WCAG AA floor before any wash is\n * involved. So the text failed on a plain white page too, where the fill was\n * behaving exactly as intended.\n *\n * ## Why `lighten`/`darken` rather than a hand-picked pair\n *\n * These are the same transforms MUI's own `standard` Alert uses, at the same\n * ratios — the recipe this component overrode. Reusing it means an OPAQUE tint\n * with a dark ink of the same hue, contrast that holds on any surface because\n * it no longer depends on one, and a pairing already proven across MUI's\n * palette rather than eyeballed here. Both modes are handled: on a dark theme\n * the tint darkens and the ink lightens, which an alpha wash could never do\n * because it carries the seed's own lightness through unchanged.\n *\n * The border keeps an alpha — it is a hairline over the tint it belongs to, so\n * translucency there costs nothing and lets the edge follow the fill.\n */\nconst semanticSurface = (theme: Theme, colorPalette: AlertPalette): CSSObject => {\n const dark = theme.palette.mode === 'dark';\n return {\n backgroundColor: dark ? darken(colorPalette.main, 0.8) : lighten(colorPalette.main, 0.9),\n color: dark ? lighten(colorPalette.main, 0.6) : darken(colorPalette.main, 0.6),\n border: `1px solid ${alpha(colorPalette.main, 0.35)}`,\n '.MuiAlert-icon': {\n color: colorPalette.main,\n },\n };\n};\n\n// The six visual variants. Each block is spread in only when it matches, which\n// is how the original inline version read; keeping that shape here means the\n// styled() callback carries one branch instead of six. The four semantics were\n// four IDENTICAL copies of the same block — they now share one, so the next\n// change to a banner's surface cannot land on three of them.\nexport const alertVariantStyles = (\n theme: Theme,\n customVariant: string | undefined,\n colorPalette: AlertPalette,\n): CSSObject => ({\n...(customVariant !== undefined &&\n SEMANTIC_VARIANTS.has(customVariant) &&\n semanticSurface(theme, colorPalette)),\n\n...(customVariant === 'glass' && {\n // 85%, not 10%. This is the variant that is MEANT to be see-through, and it\n // was the same mistake in a costume: at 0.1 the blur had almost nothing to\n // sit on, so `glass` was not frosted, it was a window. A frosted pane has to\n // be mostly pane — the backdrop should be legible AS texture behind the\n // text, never as competition with it.\n backgroundColor: alpha(theme.palette.background.paper, 0.85),\n backdropFilter: 'blur(20px) saturate(180%)',\n WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n border: `1px solid ${alpha(theme.palette.divider, 0.4)}`,\n color: theme.palette.text.primary,\n '.MuiAlert-icon': {\n color: theme.palette.primary.main,\n },\n // Safari before 18 and Firefox with the filter disabled paint the declared\n // alpha with nothing blurred behind it — the see-through banner this is\n // fixing. There is no degraded frost to fall back to, so it falls back to an\n // opaque pane: less pretty, still readable.\n '@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)))': {\n backgroundColor: theme.palette.background.paper,\n },\n}),\n\n...(customVariant === 'gradient' && {\n background: `linear-gradient(135deg, ${alpha(colorPalette.light || colorPalette.main, 0.9)}, ${alpha(colorPalette.dark || colorPalette.main, 0.9)})`,\n color: theme.palette.getContrastText(colorPalette.main),\n border: 'none',\n position: 'relative',\n overflow: 'hidden',\n '.MuiAlert-icon': {\n color: theme.palette.getContrastText(colorPalette.main),\n },\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: '-1000px',\n width: '100%',\n height: '100%',\n background: `linear-gradient(90deg, transparent, ${alpha(theme.palette.common.white, 0.2)}, transparent)`,\n animation: `${shimmerAnimation} 3s infinite`,\n },\n '&:hover': {\n filter: 'brightness(1.1)',\n transform: 'translateY(-2px) scale(1.01)',\n },\n}),\n});\n\n// glow and pulse combine into three distinct looks, so the combinations are\n// spelled out rather than layered — layering them would let the glow-only shadow\n// leak into the glow+pulse case.\nexport const alertEmphasisStyles = (\n colorPalette: AlertPalette,\n glow: boolean,\n pulse: boolean,\n): CSSObject => ({\n...(glow &&\n !pulse && {\n boxShadow: `0 0 20px 5px ${alpha(colorPalette.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n }),\n\n// Pulse animation\n...(pulse &&\n !glow && {\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: colorPalette.main,\n opacity: 0.2,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n\n// Both glow and pulse\n...(glow &&\n pulse && {\n position: 'relative',\n boxShadow: `0 0 20px 5px ${alpha(colorPalette.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: colorPalette.main,\n opacity: 0.2,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n});\n"],"mappings":"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","names":["alpha","jsx","alpha"]}
|