@1doc/1ds-react 2.8.0 → 2.9.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/CHANGELOG.md +1106 -0
- package/dist/components/AILabel/AILabel.js +1 -1
- package/dist/components/Accordion/Accordion.d.ts +6 -2
- package/dist/components/AttachmentCard/AttachmentCard.css +16 -0
- package/dist/components/AttachmentCard/AttachmentCard.d.ts +19 -2
- package/dist/components/AttachmentCard/AttachmentCard.js +40 -3
- package/dist/components/Avatar/Avatar.css +7 -2
- package/dist/components/Avatar/AvatarGroup.d.ts +17 -0
- package/dist/components/Avatar/AvatarGroup.js +22 -8
- package/dist/components/Badge/Badge.css +54 -2
- package/dist/components/Badge/Badge.d.ts +14 -4
- package/dist/components/Badge/Badge.js +1 -0
- package/dist/components/Box/Box.css +83 -0
- package/dist/components/Box/Box.d.ts +82 -2
- package/dist/components/Box/Box.js +42 -2
- package/dist/components/Button/Button.css +29 -0
- package/dist/components/Button/Button.d.ts +4 -4
- package/dist/components/Button/Button.js +4 -1
- package/dist/components/Calendar/Calendar.css +245 -0
- package/dist/components/Calendar/Calendar.d.ts +125 -0
- package/dist/components/Calendar/Calendar.js +320 -0
- package/dist/components/Chips/Chips.css +38 -0
- package/dist/components/Chips/Chips.d.ts +5 -2
- package/dist/components/Chips/Chips.js +2 -1
- package/dist/components/Coachmark/Coachmark.css +118 -0
- package/dist/components/Coachmark/Coachmark.d.ts +75 -0
- package/dist/components/Coachmark/Coachmark.js +321 -0
- package/dist/components/CodeBlock/CodeBlock.css +96 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts +47 -0
- package/dist/components/CodeBlock/CodeBlock.js +103 -0
- package/dist/components/ColorPicker/ColorPicker.css +133 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +73 -0
- package/dist/components/ColorPicker/ColorPicker.js +219 -0
- package/dist/components/Combobox/Combobox.css +8 -0
- package/dist/components/DataTable/DataTable.css +80 -0
- package/dist/components/DataTable/DataTable.d.ts +19 -4
- package/dist/components/DataTable/DataTable.js +59 -15
- package/dist/components/DatePicker/DatePicker.css +8 -0
- package/dist/components/DatePicker/DatePicker.js +10 -1
- package/dist/components/DescriptionList/DescriptionList.css +113 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +59 -0
- package/dist/components/DescriptionList/DescriptionList.js +51 -0
- package/dist/components/FileInput/FileInput.css +16 -0
- package/dist/components/FileInput/FileInput.d.ts +4 -2
- package/dist/components/FileInput/FileInput.js +8 -2
- package/dist/components/Grid/Grid.js +5 -5
- package/dist/components/IconPicker/IconPicker.css +107 -0
- package/dist/components/IconPicker/IconPicker.d.ts +74 -0
- package/dist/components/IconPicker/IconPicker.js +194 -0
- package/dist/components/Input/Input.css +38 -0
- package/dist/components/Input/Input.d.ts +10 -1
- package/dist/components/Input/Input.js +66 -5
- package/dist/components/Kanban/Kanban.css +4 -0
- package/dist/components/Kbd/Kbd.css +66 -0
- package/dist/components/Kbd/Kbd.d.ts +32 -0
- package/dist/components/Kbd/Kbd.js +40 -0
- package/dist/components/List/List.css +136 -0
- package/dist/components/List/List.d.ts +82 -0
- package/dist/components/List/List.js +53 -0
- package/dist/components/List/ListItem.d.ts +85 -0
- package/dist/components/List/ListItem.js +81 -0
- package/dist/components/Modal/Modal.css +80 -0
- package/dist/components/Modal/Modal.d.ts +33 -6
- package/dist/components/Modal/Modal.js +101 -6
- package/dist/components/MultiSelect/MultiSelect.css +8 -0
- package/dist/components/MultiSelect/MultiSelect.js +10 -1
- package/dist/components/OrgChart/OrgChart.css +149 -0
- package/dist/components/OrgChart/OrgChart.d.ts +83 -0
- package/dist/components/OrgChart/OrgChart.js +297 -0
- package/dist/components/OtpInput/OtpInput.css +93 -0
- package/dist/components/OtpInput/OtpInput.d.ts +60 -0
- package/dist/components/OtpInput/OtpInput.js +215 -0
- package/dist/components/PhoneInput/PhoneInput.css +8 -0
- package/dist/components/Popover/Popover.d.ts +7 -0
- package/dist/components/Popover/Popover.js +11 -1
- package/dist/components/RichTextEditor/RichTextEditor.css +203 -0
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +83 -0
- package/dist/components/RichTextEditor/RichTextEditor.js +494 -0
- package/dist/components/SegmentedControl/SegmentedControl.js +7 -2
- package/dist/components/Select/Select.css +70 -0
- package/dist/components/Select/Select.d.ts +12 -0
- package/dist/components/Select/Select.js +59 -4
- package/dist/components/Stack/Stack.css +49 -0
- package/dist/components/Stack/Stack.d.ts +65 -7
- package/dist/components/Stack/Stack.js +30 -2
- package/dist/components/StatCard/StatCard.css +73 -0
- package/dist/components/StatCard/StatCard.d.ts +17 -0
- package/dist/components/StatCard/StatCard.js +4 -1
- package/dist/components/Tabs/Tab.d.ts +15 -0
- package/dist/components/Tabs/Tab.js +30 -1
- package/dist/components/Tabs/Tabs.css +132 -0
- package/dist/components/Tabs/Tabs.d.ts +7 -0
- package/dist/components/Tabs/Tabs.js +13 -2
- package/dist/components/Tag/Tag.css +85 -2
- package/dist/components/Tag/Tag.d.ts +13 -6
- package/dist/components/Tag/Tag.js +1 -0
- package/dist/components/Text/Text.js +2 -2
- package/dist/components/Textarea/Textarea.css +8 -0
- package/dist/components/TimePicker/TimePicker.css +8 -0
- package/dist/components/Tooltip/Tooltip.css +25 -0
- package/dist/components/Tooltip/Tooltip.d.ts +11 -0
- package/dist/components/Tooltip/Tooltip.js +18 -3
- package/dist/index.d.ts +25 -0
- package/dist/index.js +14 -0
- package/dist/teste/AILabel.test.d.ts +1 -0
- package/dist/teste/AILabel.test.js +33 -0
- package/dist/teste/AccordionConteudoLivre.test.d.ts +1 -0
- package/dist/teste/AccordionConteudoLivre.test.js +29 -0
- package/dist/teste/AtributosRepassados.test.d.ts +1 -0
- package/dist/teste/AtributosRepassados.test.js +52 -0
- package/dist/teste/AttachmentCardIA.test.d.ts +1 -0
- package/dist/teste/AttachmentCardIA.test.js +89 -0
- package/dist/teste/AvatarGroupOverlap.test.d.ts +1 -0
- package/dist/teste/AvatarGroupOverlap.test.js +56 -0
- package/dist/teste/BadgeTag.test.d.ts +1 -0
- package/dist/teste/BadgeTag.test.js +42 -0
- package/dist/teste/BoxItemFlex.test.d.ts +1 -0
- package/dist/teste/BoxItemFlex.test.js +54 -0
- package/dist/teste/BoxLayout.test.d.ts +1 -0
- package/dist/teste/BoxLayout.test.js +35 -0
- package/dist/teste/Button.test.d.ts +1 -0
- package/dist/teste/Button.test.js +27 -0
- package/dist/teste/Calendar.test.d.ts +1 -0
- package/dist/teste/Calendar.test.js +221 -0
- package/dist/teste/ChipsXs.test.d.ts +1 -0
- package/dist/teste/ChipsXs.test.js +31 -0
- package/dist/teste/Coachmark.test.d.ts +1 -0
- package/dist/teste/Coachmark.test.js +149 -0
- package/dist/teste/ColorPicker.test.d.ts +1 -0
- package/dist/teste/ColorPicker.test.js +132 -0
- package/dist/teste/DataTableCelulaLivre.test.d.ts +1 -0
- package/dist/teste/DataTableCelulaLivre.test.js +76 -0
- package/dist/teste/DataTableDocumento.test.d.ts +1 -0
- package/dist/teste/DataTableDocumento.test.js +92 -0
- package/dist/teste/DatePicker.test.js +23 -0
- package/dist/teste/FileInputTrigger.test.d.ts +1 -0
- package/dist/teste/FileInputTrigger.test.js +53 -0
- package/dist/teste/IconPicker.test.d.ts +1 -0
- package/dist/teste/IconPicker.test.js +130 -0
- package/dist/teste/InputMascaraEAfins.test.d.ts +1 -0
- package/dist/teste/InputMascaraEAfins.test.js +99 -0
- package/dist/teste/KbdCodeBlock.test.d.ts +1 -0
- package/dist/teste/KbdCodeBlock.test.js +95 -0
- package/dist/teste/List.test.d.ts +1 -0
- package/dist/teste/List.test.js +153 -0
- package/dist/teste/ModalVariantes.test.d.ts +1 -0
- package/dist/teste/ModalVariantes.test.js +151 -0
- package/dist/teste/NomeAcessivelSsr.test.d.ts +1 -0
- package/dist/teste/NomeAcessivelSsr.test.js +88 -0
- package/dist/teste/OrgChart.test.d.ts +1 -0
- package/dist/teste/OrgChart.test.js +162 -0
- package/dist/teste/OtpInput.test.d.ts +1 -0
- package/dist/teste/OtpInput.test.js +143 -0
- package/dist/teste/PopoverMaxHeight.test.d.ts +1 -0
- package/dist/teste/PopoverMaxHeight.test.js +38 -0
- package/dist/teste/RichTextEditor.test.d.ts +1 -0
- package/dist/teste/RichTextEditor.test.js +287 -0
- package/dist/teste/SelectPlacementFiltro.test.d.ts +1 -0
- package/dist/teste/SelectPlacementFiltro.test.js +88 -0
- package/dist/teste/Stack.test.d.ts +1 -0
- package/dist/teste/Stack.test.js +57 -0
- package/dist/teste/StatCardRotuloTopo.test.d.ts +1 -0
- package/dist/teste/StatCardRotuloTopo.test.js +34 -0
- package/dist/teste/TabsContadorFechavel.test.d.ts +1 -0
- package/dist/teste/TabsContadorFechavel.test.js +79 -0
- package/dist/teste/TooltipDark.test.d.ts +1 -0
- package/dist/teste/TooltipDark.test.js +31 -0
- package/dist/utils/calendario.d.ts +28 -0
- package/dist/utils/calendario.js +73 -0
- package/dist/utils/html-seguro.d.ts +27 -0
- package/dist/utils/html-seguro.js +97 -0
- package/dist/utils/paleta-de-cores.d.ts +26 -0
- package/dist/utils/paleta-de-cores.js +10 -0
- package/dist/utils/texto.d.ts +5 -0
- package/dist/utils/texto.js +5 -0
- package/package.json +3 -3
- package/src/index.ts +26 -0
- package/src/teste/AILabel.test.tsx +41 -0
- package/src/teste/AccordionConteudoLivre.test.tsx +39 -0
- package/src/teste/AtributosRepassados.test.tsx +73 -0
- package/src/teste/AttachmentCardIA.test.tsx +126 -0
- package/src/teste/AvatarGroupOverlap.test.tsx +74 -0
- package/src/teste/BadgeTag.test.tsx +64 -0
- package/src/teste/BoxItemFlex.test.tsx +81 -0
- package/src/teste/BoxLayout.test.tsx +50 -0
- package/src/teste/Button.test.tsx +39 -0
- package/src/teste/Calendar.test.tsx +282 -0
- package/src/teste/ChipsXs.test.tsx +41 -0
- package/src/teste/Coachmark.test.tsx +198 -0
- package/src/teste/ColorPicker.test.tsx +153 -0
- package/src/teste/DataTableCelulaLivre.test.tsx +103 -0
- package/src/teste/DataTableDocumento.test.tsx +102 -0
- package/src/teste/DatePicker.test.tsx +38 -0
- package/src/teste/FileInputTrigger.test.tsx +89 -0
- package/src/teste/IconPicker.test.tsx +145 -0
- package/src/teste/InputMascaraEAfins.test.tsx +124 -0
- package/src/teste/KbdCodeBlock.test.tsx +106 -0
- package/src/teste/List.test.tsx +269 -0
- package/src/teste/ModalVariantes.test.tsx +173 -0
- package/src/teste/NomeAcessivelSsr.test.tsx +110 -0
- package/src/teste/OrgChart.test.tsx +183 -0
- package/src/teste/OtpInput.test.tsx +163 -0
- package/src/teste/PopoverMaxHeight.test.tsx +47 -0
- package/src/teste/RichTextEditor.test.tsx +329 -0
- package/src/teste/SelectPlacementFiltro.test.tsx +110 -0
- package/src/teste/Stack.test.tsx +80 -0
- package/src/teste/StatCardRotuloTopo.test.tsx +44 -0
- package/src/teste/TabsContadorFechavel.test.tsx +144 -0
- package/src/teste/TooltipDark.test.tsx +51 -0
- package/src/utils/calendario.ts +78 -0
- package/src/utils/html-seguro.ts +94 -0
- package/src/utils/paleta-de-cores.ts +34 -0
- package/src/utils/texto.ts +5 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import './DataTable.css';
|
|
4
|
+
import * as React from "react";
|
|
4
5
|
import { faSort, faSortUp, faSortDown, faInbox, } from "@fortawesome/free-solid-svg-icons";
|
|
5
6
|
import Icon from "../Icon/Icon";
|
|
6
7
|
import Checkbox from "../Checkbox/Checkbox";
|
|
@@ -11,7 +12,7 @@ function DataTable(props) {
|
|
|
11
12
|
function rows() {
|
|
12
13
|
return props.data || [];
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
+
function selectedIndexes() {
|
|
15
16
|
return props.selectedRows || [];
|
|
16
17
|
}
|
|
17
18
|
function selectedKeysList() {
|
|
@@ -20,9 +21,16 @@ function DataTable(props) {
|
|
|
20
21
|
function usesKeys() {
|
|
21
22
|
return !!props.rowKey;
|
|
22
23
|
}
|
|
24
|
+
function isDocument() {
|
|
25
|
+
return props.variant === "document";
|
|
26
|
+
}
|
|
27
|
+
function canSelect() {
|
|
28
|
+
return !!props.selectable && props.variant !== "document";
|
|
29
|
+
}
|
|
23
30
|
function tableClasses() {
|
|
24
31
|
return [
|
|
25
32
|
"umds-datatable",
|
|
33
|
+
props.variant === "document" ? "umds-datatable--document" : "",
|
|
26
34
|
props.density === "compact" ? "umds-datatable--compact" : "",
|
|
27
35
|
props.className,
|
|
28
36
|
]
|
|
@@ -43,8 +51,31 @@ function DataTable(props) {
|
|
|
43
51
|
function hasRows() {
|
|
44
52
|
return !props.loading && rows().length > 0;
|
|
45
53
|
}
|
|
54
|
+
function groupOf(row, index) {
|
|
55
|
+
if (!props.rowGroup)
|
|
56
|
+
return "";
|
|
57
|
+
const bruto = typeof props.rowGroup === "function"
|
|
58
|
+
? props.rowGroup(row, index)
|
|
59
|
+
: row[props.rowGroup];
|
|
60
|
+
return bruto === undefined || bruto === null ? "" : String(bruto);
|
|
61
|
+
}
|
|
62
|
+
function newGroupLabel(index) {
|
|
63
|
+
if (!props.rowGroup)
|
|
64
|
+
return "";
|
|
65
|
+
const atual = groupOf(rows()[index], index);
|
|
66
|
+
if (!atual)
|
|
67
|
+
return "";
|
|
68
|
+
if (index === 0)
|
|
69
|
+
return atual;
|
|
70
|
+
return groupOf(rows()[index - 1], index - 1) === atual ? "" : atual;
|
|
71
|
+
}
|
|
72
|
+
function groupContent(label, row, index) {
|
|
73
|
+
if (props.renderRowGroup)
|
|
74
|
+
return props.renderRowGroup(label, row, index);
|
|
75
|
+
return label;
|
|
76
|
+
}
|
|
46
77
|
function colSpan() {
|
|
47
|
-
return columnsList().length + (
|
|
78
|
+
return columnsList().length + (canSelect() ? 1 : 0);
|
|
48
79
|
}
|
|
49
80
|
function rowKeyOf(row, index) {
|
|
50
81
|
if (typeof props.rowKey === "function")
|
|
@@ -59,17 +90,17 @@ function DataTable(props) {
|
|
|
59
90
|
if (usesKeys()) {
|
|
60
91
|
return rows().every((row, i) => selectedKeysList().includes(rowKeyOf(row, i)));
|
|
61
92
|
}
|
|
62
|
-
return
|
|
93
|
+
return selectedIndexes().length === rows().length;
|
|
63
94
|
}
|
|
64
95
|
function someSelected() {
|
|
65
96
|
if (usesKeys()) {
|
|
66
97
|
return (!allSelected() &&
|
|
67
98
|
rows().some((row, i) => selectedKeysList().includes(rowKeyOf(row, i))));
|
|
68
99
|
}
|
|
69
|
-
return
|
|
100
|
+
return selectedIndexes().length > 0 && !allSelected();
|
|
70
101
|
}
|
|
71
102
|
function handleSort(col) {
|
|
72
|
-
if (!col.sortable)
|
|
103
|
+
if (!col.sortable || props.variant === "document")
|
|
73
104
|
return;
|
|
74
105
|
const dir = props.sortKey === col.key && props.sortDirection === "asc"
|
|
75
106
|
? "desc"
|
|
@@ -110,7 +141,7 @@ function DataTable(props) {
|
|
|
110
141
|
const nextKeys = current.includes(key)
|
|
111
142
|
? current.filter((k) => k !== key)
|
|
112
143
|
: [...current, key];
|
|
113
|
-
const currentIdx =
|
|
144
|
+
const currentIdx = selectedIndexes();
|
|
114
145
|
const nextIdx = currentIdx.includes(index)
|
|
115
146
|
? currentIdx.filter((i) => i !== index)
|
|
116
147
|
: [...currentIdx, index];
|
|
@@ -119,7 +150,7 @@ function DataTable(props) {
|
|
|
119
150
|
}
|
|
120
151
|
if (!props.onSelect)
|
|
121
152
|
return;
|
|
122
|
-
const current =
|
|
153
|
+
const current = selectedIndexes();
|
|
123
154
|
const next = current.includes(index)
|
|
124
155
|
? current.filter((i) => i !== index)
|
|
125
156
|
: [...current, index];
|
|
@@ -129,7 +160,7 @@ function DataTable(props) {
|
|
|
129
160
|
if (usesKeys()) {
|
|
130
161
|
return selectedKeysList().includes(rowKeyOf(row, index));
|
|
131
162
|
}
|
|
132
|
-
return
|
|
163
|
+
return selectedIndexes().includes(index);
|
|
133
164
|
}
|
|
134
165
|
function cellContent(col, row, rowIndex) {
|
|
135
166
|
if (col.render)
|
|
@@ -137,11 +168,13 @@ function DataTable(props) {
|
|
|
137
168
|
return row[col.key];
|
|
138
169
|
}
|
|
139
170
|
function handleRowClick(rowIndex, row) {
|
|
171
|
+
if (props.variant === "document")
|
|
172
|
+
return;
|
|
140
173
|
if (props.onRowClick)
|
|
141
174
|
props.onRowClick(rowIndex, row);
|
|
142
175
|
}
|
|
143
176
|
function aoTeclarNaLinha(rowIndex, row, event) {
|
|
144
|
-
if (!props.onRowClick || !event)
|
|
177
|
+
if (!props.onRowClick || props.variant === "document" || !event)
|
|
145
178
|
return;
|
|
146
179
|
// Só a própria linha aciona. Sem esta guarda, o Espaço dentro do
|
|
147
180
|
// checkbox de seleção era engolido pelo preventDefault abaixo e a
|
|
@@ -157,7 +190,7 @@ function DataTable(props) {
|
|
|
157
190
|
handleRowClick(rowIndex, row);
|
|
158
191
|
}
|
|
159
192
|
function rowTabIndex() {
|
|
160
|
-
return props.onRowClick ? 0 : undefined;
|
|
193
|
+
return props.onRowClick && props.variant !== "document" ? 0 : undefined;
|
|
161
194
|
}
|
|
162
195
|
function rowRole() {
|
|
163
196
|
return undefined;
|
|
@@ -170,14 +203,20 @@ function DataTable(props) {
|
|
|
170
203
|
function thClasses(col) {
|
|
171
204
|
return [
|
|
172
205
|
"umds-datatable__th",
|
|
173
|
-
col.sortable
|
|
174
|
-
|
|
206
|
+
col.sortable && props.variant !== "document"
|
|
207
|
+
? "umds-datatable__th--sortable"
|
|
208
|
+
: "",
|
|
209
|
+
props.sortKey === col.key && props.variant !== "document"
|
|
210
|
+
? "umds-datatable__th--sorted"
|
|
211
|
+
: "",
|
|
175
212
|
col.align ? `umds-datatable__th--${col.align}` : "",
|
|
176
213
|
]
|
|
177
214
|
.filter(Boolean)
|
|
178
215
|
.join(" ");
|
|
179
216
|
}
|
|
180
217
|
function ariaSort(col) {
|
|
218
|
+
if (props.variant === "document")
|
|
219
|
+
return undefined;
|
|
181
220
|
if (props.sortKey !== col.key)
|
|
182
221
|
return "none";
|
|
183
222
|
return props.sortDirection === "asc" ? "ascending" : "descending";
|
|
@@ -195,6 +234,9 @@ function DataTable(props) {
|
|
|
195
234
|
return faSort;
|
|
196
235
|
return props.sortDirection === "desc" ? faSortDown : faSortUp;
|
|
197
236
|
}
|
|
237
|
+
function sortableCol(col) {
|
|
238
|
+
return !!col.sortable && props.variant !== "document";
|
|
239
|
+
}
|
|
198
240
|
function tdClasses(col) {
|
|
199
241
|
return [
|
|
200
242
|
"umds-datatable__td",
|
|
@@ -207,15 +249,17 @@ function DataTable(props) {
|
|
|
207
249
|
return [
|
|
208
250
|
"umds-datatable__row",
|
|
209
251
|
isSelected(row, rowIdx) ? "umds-datatable__row--selected" : "",
|
|
210
|
-
props.onRowClick
|
|
252
|
+
props.onRowClick && props.variant !== "document"
|
|
253
|
+
? "umds-datatable__row--clickable"
|
|
254
|
+
: "",
|
|
211
255
|
]
|
|
212
256
|
.filter(Boolean)
|
|
213
257
|
.join(" ");
|
|
214
258
|
}
|
|
215
|
-
return (_jsx("div", { className: tableClasses(), children: _jsxs("table", { className: "umds-datatable__table", "aria-busy": props.loading, children: [_jsx("thead", { className: "umds-datatable__thead", children: _jsxs("tr", { children: [
|
|
259
|
+
return (_jsx("div", { className: tableClasses(), children: _jsxs("table", { className: "umds-datatable__table", "aria-busy": props.loading, children: [_jsx("thead", { className: "umds-datatable__thead", children: _jsxs("tr", { children: [canSelect() ? (_jsx("th", { scope: "col", className: "umds-datatable__th umds-datatable__th--checkbox", children: _jsx(Checkbox, { checked: allSelected(), indeterminate: someSelected(), ariaLabel: props.selectAllLabel || "Selecionar todas as linhas", onChange: (event) => toggleAll() }) })) : null, columnsList()?.map((col) => (_jsxs("th", { scope: "col", style: col.width
|
|
216
260
|
? {
|
|
217
261
|
width: col.width,
|
|
218
262
|
}
|
|
219
|
-
: {}, "aria-sort": ariaSort(col), className: thClasses(col), children: [col
|
|
263
|
+
: {}, "aria-sort": ariaSort(col), className: thClasses(col), children: [sortableCol(col) ? (_jsxs("button", { type: "button", className: "umds-datatable__sort-button umds-datatable__th-content", onClick: (event) => handleSort(col), children: [col.label, _jsx("span", { "aria-hidden": "true", className: sortIconClasses(col), children: _jsx(Icon, { variant: "inherit", customSize: "12px", icon: sortIconName(col) }) })] })) : null, !sortableCol(col) ? (_jsx("span", { className: "umds-datatable__th-content", children: col.label })) : null] }, col.key)))] }) }), _jsxs("tbody", { className: "umds-datatable__tbody", children: [props.loading ? (_jsx(_Fragment, { children: skeletonRowsList()?.map((_, rowIdx) => (_jsxs("tr", { className: "umds-datatable__row umds-datatable__row--skeleton", children: [canSelect() ? (_jsx("td", { className: "umds-datatable__td umds-datatable__td--checkbox", children: _jsx("div", { className: "umds-datatable__skeleton umds-datatable__skeleton--checkbox" }) })) : null, columnsList()?.map((col) => (_jsx("td", { className: "umds-datatable__td", children: _jsx("div", { className: "umds-datatable__skeleton" }) }, col.key)))] }, `sk-${rowIdx}`))) })) : null, isEmpty() ? (_jsx("tr", { className: "umds-datatable__row--empty", children: _jsx("td", { className: "umds-datatable__td umds-datatable__td--empty", colSpan: colSpan(), children: _jsxs("div", { className: "umds-datatable__empty", children: [_jsx("span", { "aria-hidden": "true", className: "umds-datatable__empty-icon", children: _jsx(Icon, { variant: "inherit", customSize: "48px", icon: faInbox }) }), _jsx("span", { children: props.emptyMessage || "Nenhum registro encontrado" })] }) }) })) : null, hasRows() ? (_jsx(_Fragment, { children: rows()?.map((row, rowIdx) => (_jsxs(React.Fragment, { children: [newGroupLabel(rowIdx) ? (_jsx("tr", { className: "umds-datatable__row umds-datatable__row--group", children: _jsx("th", { scope: "rowgroup", className: "umds-datatable__group", colSpan: colSpan(), children: groupContent(newGroupLabel(rowIdx), row, rowIdx) }) })) : null, _jsxs("tr", { onClick: (event) => handleRowClick(rowIdx, row), onKeyDown: (event) => aoTeclarNaLinha(rowIdx, row, event), tabIndex: rowTabIndex(), role: rowRole(), className: rowClasses(row, rowIdx), children: [canSelect() ? (_jsx("td", { className: "umds-datatable__td umds-datatable__td--checkbox", onClick: (event) => event.stopPropagation(), children: _jsx(Checkbox, { checked: isSelected(row, rowIdx), ariaLabel: rowSelectLabel(rowIdx), onChange: (event) => toggleRow(row, rowIdx) }) })) : null, columnsList()?.map((col) => (_jsx("td", { className: tdClasses(col), children: cellContent(col, row, rowIdx) }, col.key)))] })] }, rowIdx))) })) : null] })] }) }));
|
|
220
264
|
}
|
|
221
265
|
export default DataTable;
|
|
@@ -156,6 +156,14 @@
|
|
|
156
156
|
background-color: var(--umds-semantic-field-readonly-background);
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
+
/* Somente leitura não é desabilitado: o texto segue lido e o WCAG 1.4.3 vale
|
|
160
|
+
sem isenção. O placeholder padrão foi calibrado para fundo branco e cai para
|
|
161
|
+
~4,2:1 sobre o fundo de somente leitura; neutral-dark-down passa 4,5:1 em
|
|
162
|
+
todos os temas (1doc 6,78:1 · 1doc-dark 10,83:1 · alto contraste 16,48:1). */
|
|
163
|
+
.umds-datepicker--readonly .umds-datepicker__placeholder {
|
|
164
|
+
color: var(--umds-semantic-color-neutral-dark-down);
|
|
165
|
+
}
|
|
166
|
+
|
|
159
167
|
/* ── Wrapper flutuante (Portal no body; posicionado pelo floating-ui via style inline) ── */
|
|
160
168
|
.umds-datepicker__floating {
|
|
161
169
|
display: block;
|
|
@@ -34,14 +34,21 @@ function DatePicker(props) {
|
|
|
34
34
|
const [viewYear, setViewYear] = useState(() => 0);
|
|
35
35
|
const [viewMonth, setViewMonth] = useState(() => 0);
|
|
36
36
|
const [uid, setUid] = useState(() => "umds-datepicker-" + Math.random().toString(36).slice(2, 9));
|
|
37
|
-
const [internalFrom, setInternalFrom] = useState(() =>
|
|
37
|
+
const [internalFrom, setInternalFrom] = useState(() => props.mode !== "range" && props.defaultValue
|
|
38
|
+
? props.defaultValue
|
|
39
|
+
: (props.defaultRange && props.defaultRange.from) || "");
|
|
38
40
|
const [internalTo, setInternalTo] = useState(() => (props.defaultRange && props.defaultRange.to) || "");
|
|
39
41
|
const [hoverIso, setHoverIso] = useState(() => "");
|
|
40
42
|
const [focusedIso, setFocusedIso] = useState(() => "");
|
|
41
43
|
function currentFrom() {
|
|
44
|
+
if (props.mode !== "range" && props.value !== undefined) {
|
|
45
|
+
return props.value || "";
|
|
46
|
+
}
|
|
42
47
|
return props.range !== undefined ? props.range.from || "" : internalFrom;
|
|
43
48
|
}
|
|
44
49
|
function currentTo() {
|
|
50
|
+
if (props.mode !== "range" && props.value !== undefined)
|
|
51
|
+
return "";
|
|
45
52
|
return props.range !== undefined ? props.range.to || "" : internalTo;
|
|
46
53
|
}
|
|
47
54
|
function monthNames() {
|
|
@@ -491,6 +498,8 @@ function DatePicker(props) {
|
|
|
491
498
|
}
|
|
492
499
|
function handleKeydown(event) {
|
|
493
500
|
if (event && event.key === "Escape" && open) {
|
|
501
|
+
// O Esc é do calendário (fecha só ele): o Modal em volta não reage.
|
|
502
|
+
event.preventDefault();
|
|
494
503
|
closeCalendar();
|
|
495
504
|
}
|
|
496
505
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* ─────────────────────────────────────────────
|
|
2
|
+
DESCRIPTION LIST
|
|
3
|
+
Pares rótulo/valor de um documento, em <dl>.
|
|
4
|
+
|
|
5
|
+
inline: grade de bordas finas, rótulo pintado à esquerda, sem cabeçalho.
|
|
6
|
+
As linhas viram `display: contents` para as duas colunas alinharem
|
|
7
|
+
entre todos os pares; as bordas são as linhas de 1px que a grade
|
|
8
|
+
deixa entre as células (o fundo da lista é a cor da borda).
|
|
9
|
+
stacked: rótulo pequeno em cima, valor embaixo, em até 4 colunas.
|
|
10
|
+
|
|
11
|
+
Cores: semânticos · Medidas: primitivos
|
|
12
|
+
───────────────────────────────────────────── */
|
|
13
|
+
|
|
14
|
+
.umds-description-list {
|
|
15
|
+
margin: 0;
|
|
16
|
+
padding: 0;
|
|
17
|
+
font-family: var(--umds-semantic-font-family-base);
|
|
18
|
+
font-size: var(--umds-primitive-font-size-xxs); /* 14px */
|
|
19
|
+
color: var(--umds-semantic-color-neutral-dark-pure);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.umds-description-list__term,
|
|
23
|
+
.umds-description-list__description {
|
|
24
|
+
margin: 0;
|
|
25
|
+
overflow-wrap: anywhere;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* ── inline ── */
|
|
29
|
+
.umds-description-list--inline {
|
|
30
|
+
display: grid;
|
|
31
|
+
grid-template-columns: max-content minmax(0, 1fr);
|
|
32
|
+
gap: var(--umds-primitive-border-width-hairline);
|
|
33
|
+
border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
|
|
34
|
+
background: var(--umds-semantic-color-neutral-light-medium);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.umds-description-list--inline.umds-description-list--fit {
|
|
38
|
+
display: inline-grid;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.umds-description-list--inline .umds-description-list__item {
|
|
42
|
+
display: contents;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.umds-description-list--inline .umds-description-list__term,
|
|
46
|
+
.umds-description-list--inline .umds-description-list__description {
|
|
47
|
+
padding: var(--umds-primitive-spacing-quarck) var(--umds-primitive-spacing-nano); /* 4px 8px */
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* O rótulo é a coluna pintada: sem negrito e sem quebra. */
|
|
51
|
+
.umds-description-list--inline .umds-description-list__term {
|
|
52
|
+
background: var(--umds-semantic-color-background-light);
|
|
53
|
+
color: var(--umds-semantic-color-neutral-dark-down);
|
|
54
|
+
font-weight: var(--umds-primitive-font-weight-regular);
|
|
55
|
+
white-space: nowrap;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.umds-description-list--inline .umds-description-list__description {
|
|
59
|
+
background: var(--umds-semantic-color-background-white);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ── stacked ── */
|
|
63
|
+
.umds-description-list--stacked {
|
|
64
|
+
display: grid;
|
|
65
|
+
gap: var(--umds-primitive-spacing-xxxs); /* 16px */
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.umds-description-list--cols-1 { grid-template-columns: minmax(0, 1fr); }
|
|
69
|
+
.umds-description-list--cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
70
|
+
.umds-description-list--cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
71
|
+
.umds-description-list--cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
|
72
|
+
|
|
73
|
+
.umds-description-list--stacked .umds-description-list__item {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
gap: var(--umds-primitive-spacing-quarck); /* 4px */
|
|
77
|
+
min-width: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.umds-description-list--stacked .umds-description-list__term {
|
|
81
|
+
font-size: var(--umds-primitive-font-size-xxxs); /* 12px */
|
|
82
|
+
font-weight: var(--umds-primitive-font-weight-semibold);
|
|
83
|
+
color: var(--umds-semantic-color-neutral-dark-down);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.umds-description-list--bordered .umds-description-list__description {
|
|
87
|
+
padding: var(--umds-primitive-spacing-nano) var(--umds-primitive-spacing-mini); /* 8px 12px */
|
|
88
|
+
border: var(--umds-primitive-border-width-hairline) solid var(--umds-semantic-color-neutral-light-medium);
|
|
89
|
+
border-radius: var(--umds-primitive-border-radius-sm);
|
|
90
|
+
background: var(--umds-semantic-field-readonly-background);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Telas estreitas: o stacked vira uma coluna só. */
|
|
94
|
+
@media (max-width: 640px) {
|
|
95
|
+
.umds-description-list--cols-2,
|
|
96
|
+
.umds-description-list--cols-3,
|
|
97
|
+
.umds-description-list--cols-4 {
|
|
98
|
+
grid-template-columns: minmax(0, 1fr);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* ── Impressão: o par não é cortado entre duas páginas e a cor do rótulo sai ── */
|
|
103
|
+
@media print {
|
|
104
|
+
.umds-description-list {
|
|
105
|
+
-webkit-print-color-adjust: exact;
|
|
106
|
+
print-color-adjust: exact;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.umds-description-list__item {
|
|
110
|
+
break-inside: avoid;
|
|
111
|
+
page-break-inside: avoid;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import './DescriptionList.css';
|
|
2
|
+
/**
|
|
3
|
+
* Par rótulo/valor da DescriptionList.
|
|
4
|
+
* @property {string} label - Rótulo (o termo).
|
|
5
|
+
* @property {any} value - Valor (a descrição). No Vue é tratado como texto.
|
|
6
|
+
* @property {string} id - Identidade estável do par (padrão: o próprio rótulo).
|
|
7
|
+
*/
|
|
8
|
+
export interface DescriptionListItem {
|
|
9
|
+
label: string;
|
|
10
|
+
value?: any;
|
|
11
|
+
id?: string;
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DescriptionList — pares rótulo/valor de um documento, em `<dl>`.
|
|
16
|
+
*
|
|
17
|
+
* Dois desenhos para o mesmo dado:
|
|
18
|
+
* - `inline` (padrão): uma linha por par, rótulo pintado à esquerda e valor à
|
|
19
|
+
* direita, numa grade de bordas finas e SEM cabeçalho. Encolhe até o conteúdo
|
|
20
|
+
* (`fit`) ou ocupa a largura toda. É a tabela de "dotação orçamentária" de um
|
|
21
|
+
* despacho.
|
|
22
|
+
* - `stacked`: rótulo pequeno em cima e valor embaixo, em até 4 `columns`. É o
|
|
23
|
+
* bloco "Dados do processo". Com `bordered`, o valor ganha a caixa de um campo
|
|
24
|
+
* somente leitura.
|
|
25
|
+
*
|
|
26
|
+
* O que é do papel fica nela: sem hover, sem foco, sem clique, e na impressão o
|
|
27
|
+
* par nunca é cortado entre duas páginas. Para tabela com cabeçalho de coluna,
|
|
28
|
+
* use `DataTable variant="document"`.
|
|
29
|
+
*
|
|
30
|
+
* Semântica: `<dl>` com `<dt>` e `<dd>`, agrupados por `<div>` (HTML 5.2). O
|
|
31
|
+
* leitor de tela anuncia a lista de termos e a quantidade.
|
|
32
|
+
* @property {DescriptionListItem[]} items - Os pares, na ordem em que aparecem
|
|
33
|
+
* @property {string} layout - 'inline' (padrão) | 'stacked'
|
|
34
|
+
* @property {number} columns - Só no `stacked`: colunas de pares, de 1 a 4 (padrão 2)
|
|
35
|
+
* @property {boolean} bordered - Só no `stacked`: o valor numa caixa de campo somente leitura
|
|
36
|
+
* @property {boolean} fit - Só no `inline`: encolhe até o conteúdo em vez de ocupar a largura toda
|
|
37
|
+
* @property {string} emptyValue - Texto quando o valor vem vazio (padrão: "—")
|
|
38
|
+
* @property {string} ariaLabel - Nome acessível da lista
|
|
39
|
+
* @property {string} ariaLabelledby - Id do título visível que nomeia a lista
|
|
40
|
+
* @property {string} className - Classes CSS adicionais
|
|
41
|
+
* @quandoUsar Dados cadastrais e de empenho dentro do texto de um documento, ficha de processo, bloco de detalhes de uma tela de leitura: qualquer conjunto de "campo: valor".
|
|
42
|
+
* @quandoNaoUsar Para dados com várias linhas comparáveis coluna a coluna, use `DataTable`. Para campos que a pessoa edita, use `Input` e afins. Para valor com marcação (badge, link, botão), a DescriptionList no Vue só mostra texto: monte o bloco com `Stack` e `Text`.
|
|
43
|
+
*/
|
|
44
|
+
export interface DescriptionListProps {
|
|
45
|
+
items?: DescriptionListItem[];
|
|
46
|
+
layout?: "inline" | "stacked";
|
|
47
|
+
columns?: 1 | 2 | 3 | 4;
|
|
48
|
+
bordered?: boolean;
|
|
49
|
+
fit?: boolean;
|
|
50
|
+
emptyValue?: string;
|
|
51
|
+
ariaLabel?: string;
|
|
52
|
+
ariaLabelledby?: string;
|
|
53
|
+
className?: string;
|
|
54
|
+
id?: string;
|
|
55
|
+
style?: any;
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
}
|
|
58
|
+
declare function DescriptionList(props: DescriptionListProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
export default DescriptionList;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import './DescriptionList.css';
|
|
3
|
+
function DescriptionList(props) {
|
|
4
|
+
function itemList() {
|
|
5
|
+
return props.items || [];
|
|
6
|
+
}
|
|
7
|
+
function isStacked() {
|
|
8
|
+
return props.layout === "stacked";
|
|
9
|
+
}
|
|
10
|
+
function classes() {
|
|
11
|
+
const colunas = props.columns || 2;
|
|
12
|
+
return [
|
|
13
|
+
"umds-description-list",
|
|
14
|
+
props.layout === "stacked"
|
|
15
|
+
? "umds-description-list--stacked"
|
|
16
|
+
: "umds-description-list--inline",
|
|
17
|
+
props.layout === "stacked"
|
|
18
|
+
? `umds-description-list--cols-${colunas}`
|
|
19
|
+
: "",
|
|
20
|
+
props.layout === "stacked" && props.bordered
|
|
21
|
+
? "umds-description-list--bordered"
|
|
22
|
+
: "",
|
|
23
|
+
props.layout !== "stacked" && props.fit
|
|
24
|
+
? "umds-description-list--fit"
|
|
25
|
+
: "",
|
|
26
|
+
props.className,
|
|
27
|
+
]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(" ");
|
|
30
|
+
}
|
|
31
|
+
function valueText(item) {
|
|
32
|
+
const valor = item.value;
|
|
33
|
+
if (valor === undefined || valor === null || valor === "")
|
|
34
|
+
return props.emptyValue || "—";
|
|
35
|
+
return valor;
|
|
36
|
+
}
|
|
37
|
+
function itemKey(item) {
|
|
38
|
+
return item.id || item.label;
|
|
39
|
+
}
|
|
40
|
+
function htmlAttrs() {
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const chave in props) {
|
|
43
|
+
if (chave.indexOf("data-") === 0 || chave === "style") {
|
|
44
|
+
out[chave] = props[chave];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
return (_jsx("dl", { id: props.id, "aria-label": props.ariaLabel, "aria-labelledby": props.ariaLabelledby, ...htmlAttrs(), className: classes(), children: itemList()?.map((item) => (_jsxs("div", { className: "umds-description-list__item", children: [_jsx("dt", { className: "umds-description-list__term", children: item.label }), _jsx("dd", { className: "umds-description-list__description", children: valueText(item) })] }, itemKey(item)))) }));
|
|
50
|
+
}
|
|
51
|
+
export default DescriptionList;
|
|
@@ -29,6 +29,22 @@
|
|
|
29
29
|
pointer-events: none;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
/* ── Variante trigger: sem caixa; o conteúdo passado é o gatilho ── */
|
|
33
|
+
.umds-file-input--trigger {
|
|
34
|
+
display: inline-flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
align-items: flex-start;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.umds-file-input__trigger-wrap {
|
|
40
|
+
display: inline-flex;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* O input não entra no Tab: o gatilho (o botão) é quem recebe o foco. */
|
|
44
|
+
.umds-file-input--trigger .umds-file-input__native {
|
|
45
|
+
position: absolute;
|
|
46
|
+
}
|
|
47
|
+
|
|
32
48
|
/* ── Drop zone ── */
|
|
33
49
|
.umds-file-input__drop-zone {
|
|
34
50
|
cursor: pointer;
|
|
@@ -20,7 +20,7 @@ export interface FileInputFile {
|
|
|
20
20
|
* @property {boolean} multiple - Permite selecionar múltiplos arquivos
|
|
21
21
|
* @property {number} maxSize - Tamanho máximo em bytes (exibido como dica na variante base)
|
|
22
22
|
* @property {boolean} disabled - Desabilita a seleção de arquivos
|
|
23
|
-
* @property {string} variant - Variante visual: 'base' (linha) | 'card' (preview visual)
|
|
23
|
+
* @property {string} variant - Variante visual: 'base' (linha) | 'card' (preview visual) | 'trigger' (sem caixa: o seletor é aberto por outro controle, o conteúdo que você passa, como um `Button` "Anexar arquivo" ou um link "Alterar foto"; o clique nele abre o seletor e o resto (`accept`, `multiple`, `files`, `onChange`) funciona igual)
|
|
24
24
|
* @property {string} label - Rótulo exibido acima do campo
|
|
25
25
|
* @property {FileInputFile[]} files - Arquivos atualmente listados (controlado)
|
|
26
26
|
* @property {string} name - Nome do campo no submit de form nativo. Com name, os File
|
|
@@ -41,7 +41,7 @@ export interface FileInputProps {
|
|
|
41
41
|
multiple?: boolean;
|
|
42
42
|
maxSize?: number;
|
|
43
43
|
disabled?: boolean;
|
|
44
|
-
variant?: "base" | "card";
|
|
44
|
+
variant?: "base" | "card" | "trigger";
|
|
45
45
|
label?: string;
|
|
46
46
|
files?: FileInputFile[];
|
|
47
47
|
name?: string;
|
|
@@ -70,6 +70,8 @@ export interface FileInputProps {
|
|
|
70
70
|
removeAriaLabel?: string;
|
|
71
71
|
/** Prefixo do nome acessível da barra de progresso de um arquivo (recebe o nome do arquivo depois de um espaço). Troque para traduzir. @default 'Enviando' */
|
|
72
72
|
uploadingAriaLabel?: string;
|
|
73
|
+
/** Gatilho da variante `trigger` (o `Button` ou link que abre o seletor). React: filhos; Vue: slot padrão. */
|
|
74
|
+
children?: any;
|
|
73
75
|
onChange?: (files?: File[]) => void;
|
|
74
76
|
onRemove?: (index?: number) => void;
|
|
75
77
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import './FileInput.css';
|
|
4
4
|
import { useState, useRef } from "react";
|
|
5
5
|
import { faArrowUpFromBracket, faCloudArrowUp, faFile, faXmark, } from "@fortawesome/free-solid-svg-icons";
|
|
@@ -69,6 +69,12 @@ function FileInput(props) {
|
|
|
69
69
|
setNativeFiles(props.multiple ? [...nativeFiles, ...files] : files);
|
|
70
70
|
applyNativeFiles();
|
|
71
71
|
}
|
|
72
|
+
function openDialog() {
|
|
73
|
+
if (props.disabled)
|
|
74
|
+
return;
|
|
75
|
+
if (inputRef.current)
|
|
76
|
+
inputRef.current.click();
|
|
77
|
+
}
|
|
72
78
|
function handleChange(event) {
|
|
73
79
|
if (props.disabled)
|
|
74
80
|
return;
|
|
@@ -115,7 +121,7 @@ function FileInput(props) {
|
|
|
115
121
|
applyNativeFiles();
|
|
116
122
|
}
|
|
117
123
|
}
|
|
118
|
-
return (_jsxs("div", { className: wrapperClasses(), children: [props.label ? (_jsx("label", { className: "umds-file-input__label", children: props.label })) : null, _jsxs("label", { className: "umds-file-input__drop-zone", onDragOver: (event) => handleDragOver(event), onDragLeave: (event) => handleDragLeave(), onDrop: (event) => handleDrop(event), children: [_jsx("input", { type: "file", className: "umds-file-input__native", ref: inputRef, name: props.name, accept: props.accept, multiple: props.multiple, disabled: props.disabled, onChange: (event) => handleChange(event), "aria-label": props.label || props.selectFileLabel || "Selecionar arquivo", "aria-invalid": props.invalid }), props.variant !== "card" ? (_jsxs("div", { className: "umds-file-input__trigger", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__upload-icon", children: _jsx(Icon, { variant: "inherit", customSize: "20px", icon: faArrowUpFromBracket }) }), _jsxs("span", { className: "umds-file-input__trigger-text", children: [_jsx("strong", { children: props.triggerLabel || "Clique para selecionar" }), triggerHintText()] }), props.accept ? (_jsx("span", { className: "umds-file-input__hint", children: props.accept })) : null, props.maxSize ? (_jsx("span", { className: "umds-file-input__hint", children: maxSizeText() })) : null] })) : null, props.variant === "card" ? (_jsxs("div", { className: "umds-file-input__card-zone", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__card-icon", children: _jsx(Icon, { variant: "inherit", customSize: "32px", icon: faCloudArrowUp }) }), _jsxs("span", { className: "umds-file-input__card-text", children: [_jsx("strong", { children: props.dropLabel || "Arraste e solte" }), orText(), _jsx("span", { className: "umds-file-input__card-link", children: props.browseLabel || "clique para escolher" })] })] })) : null] }), hasFiles() ? (_jsx("ul", { className: "umds-file-input__list", children: filesList()?.map((file, idx) => (_jsxs("li", { className: fileClasses(file), children: [_jsxs("div", { className: "umds-file-input__file-row", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__file-avatar", children: _jsx(Icon, { variant: "inherit", customSize: "16px", icon: faFile }) }), _jsxs("div", { className: "umds-file-input__file-info", children: [_jsx("span", { className: "umds-file-input__file-name", children: file.name }), file.status !== "uploading" ? (_jsx("span", { className: "umds-file-input__file-size", children: formatSize(file.size) })) : null, file.error ? (_jsx("span", { className: "umds-file-input__file-error", children: file.error })) : null] }), _jsx("button", { type: "button", className: "umds-file-input__file-remove", onClick: (event) => handleRemove(idx), "aria-label": removeFileLabel(file.name), children: _jsx(Icon, { variant: "inherit", customSize: "10px", icon: faXmark }) })] }), file.status === "uploading" && file.progress !== undefined ? (_jsx("div", { role: "progressbar", className: "umds-file-input__progress-bar", "aria-valuenow": file.progress, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": uploadingFileLabel(file.name), children: _jsx("div", { className: "umds-file-input__progress-fill", style: {
|
|
124
|
+
return (_jsxs("div", { className: wrapperClasses(), children: [props.label && props.variant !== "trigger" ? (_jsx("label", { className: "umds-file-input__label", children: props.label })) : null, props.variant === "trigger" ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "umds-file-input__trigger-wrap", onClick: (event) => openDialog(), children: _jsx(_Fragment, { children: props.children }) }), _jsx("input", { type: "file", className: "umds-file-input__native", ref: inputRef, name: props.name, accept: props.accept, multiple: props.multiple, disabled: props.disabled, onChange: (event) => handleChange(event), "aria-label": props.label || props.selectFileLabel || "Selecionar arquivo", "aria-invalid": props.invalid, tabIndex: -1 })] })) : null, props.variant !== "trigger" ? (_jsxs("label", { className: "umds-file-input__drop-zone", onDragOver: (event) => handleDragOver(event), onDragLeave: (event) => handleDragLeave(), onDrop: (event) => handleDrop(event), children: [_jsx("input", { type: "file", className: "umds-file-input__native", ref: inputRef, name: props.name, accept: props.accept, multiple: props.multiple, disabled: props.disabled, onChange: (event) => handleChange(event), "aria-label": props.label || props.selectFileLabel || "Selecionar arquivo", "aria-invalid": props.invalid }), props.variant !== "card" ? (_jsxs("div", { className: "umds-file-input__trigger", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__upload-icon", children: _jsx(Icon, { variant: "inherit", customSize: "20px", icon: faArrowUpFromBracket }) }), _jsxs("span", { className: "umds-file-input__trigger-text", children: [_jsx("strong", { children: props.triggerLabel || "Clique para selecionar" }), triggerHintText()] }), props.accept ? (_jsx("span", { className: "umds-file-input__hint", children: props.accept })) : null, props.maxSize ? (_jsx("span", { className: "umds-file-input__hint", children: maxSizeText() })) : null] })) : null, props.variant === "card" ? (_jsxs("div", { className: "umds-file-input__card-zone", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__card-icon", children: _jsx(Icon, { variant: "inherit", customSize: "32px", icon: faCloudArrowUp }) }), _jsxs("span", { className: "umds-file-input__card-text", children: [_jsx("strong", { children: props.dropLabel || "Arraste e solte" }), orText(), _jsx("span", { className: "umds-file-input__card-link", children: props.browseLabel || "clique para escolher" })] })] })) : null] })) : null, hasFiles() ? (_jsx("ul", { className: "umds-file-input__list", children: filesList()?.map((file, idx) => (_jsxs("li", { className: fileClasses(file), children: [_jsxs("div", { className: "umds-file-input__file-row", children: [_jsx("span", { "aria-hidden": "true", className: "umds-file-input__file-avatar", children: _jsx(Icon, { variant: "inherit", customSize: "16px", icon: faFile }) }), _jsxs("div", { className: "umds-file-input__file-info", children: [_jsx("span", { className: "umds-file-input__file-name", children: file.name }), file.status !== "uploading" ? (_jsx("span", { className: "umds-file-input__file-size", children: formatSize(file.size) })) : null, file.error ? (_jsx("span", { className: "umds-file-input__file-error", children: file.error })) : null] }), _jsx("button", { type: "button", className: "umds-file-input__file-remove", onClick: (event) => handleRemove(idx), "aria-label": removeFileLabel(file.name), children: _jsx(Icon, { variant: "inherit", customSize: "10px", icon: faXmark }) })] }), file.status === "uploading" && file.progress !== undefined ? (_jsx("div", { role: "progressbar", className: "umds-file-input__progress-bar", "aria-valuenow": file.progress, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": uploadingFileLabel(file.name), children: _jsx("div", { className: "umds-file-input__progress-fill", style: {
|
|
119
125
|
width: `${file.progress}%`,
|
|
120
126
|
} }) })) : null] }, idx))) })) : null, props.invalid && props.errorMessage ? (_jsx("span", { role: "alert", className: "umds-file-input__error", children: props.errorMessage })) : null, !props.invalid && props.helperText ? (_jsx("span", { className: "umds-file-input__helper", children: props.helperText })) : null] }));
|
|
121
127
|
}
|
|
@@ -41,16 +41,16 @@ function Grid(props) {
|
|
|
41
41
|
}
|
|
42
42
|
return classList.filter(Boolean).join(" ");
|
|
43
43
|
}
|
|
44
|
-
function
|
|
44
|
+
function estiloInline() {
|
|
45
45
|
const styleObj = {};
|
|
46
46
|
if (props.container && props.spacing) {
|
|
47
47
|
const gapValue = `var(--umds-primitive-spacing-${props.spacing})`;
|
|
48
48
|
styleObj.gap = gapValue;
|
|
49
49
|
styleObj["--umds-grid-gap"] = gapValue;
|
|
50
50
|
}
|
|
51
|
-
// O gerador Vue do Mitosis
|
|
52
|
-
//
|
|
53
|
-
//
|
|
51
|
+
// O getter NÃO se chama `style`: o gerador Vue do Mitosis troca toda
|
|
52
|
+
// ocorrência da palavra (até a string "style" e comentário) por
|
|
53
|
+
// `style.value`, e o estilo do consumidor deixava de passar.
|
|
54
54
|
return styleObj;
|
|
55
55
|
}
|
|
56
56
|
function htmlAttrs() {
|
|
@@ -67,6 +67,6 @@ function Grid(props) {
|
|
|
67
67
|
}
|
|
68
68
|
return out;
|
|
69
69
|
}
|
|
70
|
-
return (_jsx("div", { id: props.id, style:
|
|
70
|
+
return (_jsx("div", { id: props.id, style: estiloInline(), ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) }));
|
|
71
71
|
}
|
|
72
72
|
export default Grid;
|