@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.
Files changed (213) hide show
  1. package/CHANGELOG.md +1106 -0
  2. package/dist/components/AILabel/AILabel.js +1 -1
  3. package/dist/components/Accordion/Accordion.d.ts +6 -2
  4. package/dist/components/AttachmentCard/AttachmentCard.css +16 -0
  5. package/dist/components/AttachmentCard/AttachmentCard.d.ts +19 -2
  6. package/dist/components/AttachmentCard/AttachmentCard.js +40 -3
  7. package/dist/components/Avatar/Avatar.css +7 -2
  8. package/dist/components/Avatar/AvatarGroup.d.ts +17 -0
  9. package/dist/components/Avatar/AvatarGroup.js +22 -8
  10. package/dist/components/Badge/Badge.css +54 -2
  11. package/dist/components/Badge/Badge.d.ts +14 -4
  12. package/dist/components/Badge/Badge.js +1 -0
  13. package/dist/components/Box/Box.css +83 -0
  14. package/dist/components/Box/Box.d.ts +82 -2
  15. package/dist/components/Box/Box.js +42 -2
  16. package/dist/components/Button/Button.css +29 -0
  17. package/dist/components/Button/Button.d.ts +4 -4
  18. package/dist/components/Button/Button.js +4 -1
  19. package/dist/components/Calendar/Calendar.css +245 -0
  20. package/dist/components/Calendar/Calendar.d.ts +125 -0
  21. package/dist/components/Calendar/Calendar.js +320 -0
  22. package/dist/components/Chips/Chips.css +38 -0
  23. package/dist/components/Chips/Chips.d.ts +5 -2
  24. package/dist/components/Chips/Chips.js +2 -1
  25. package/dist/components/Coachmark/Coachmark.css +118 -0
  26. package/dist/components/Coachmark/Coachmark.d.ts +75 -0
  27. package/dist/components/Coachmark/Coachmark.js +321 -0
  28. package/dist/components/CodeBlock/CodeBlock.css +96 -0
  29. package/dist/components/CodeBlock/CodeBlock.d.ts +47 -0
  30. package/dist/components/CodeBlock/CodeBlock.js +103 -0
  31. package/dist/components/ColorPicker/ColorPicker.css +133 -0
  32. package/dist/components/ColorPicker/ColorPicker.d.ts +73 -0
  33. package/dist/components/ColorPicker/ColorPicker.js +219 -0
  34. package/dist/components/Combobox/Combobox.css +8 -0
  35. package/dist/components/DataTable/DataTable.css +80 -0
  36. package/dist/components/DataTable/DataTable.d.ts +19 -4
  37. package/dist/components/DataTable/DataTable.js +59 -15
  38. package/dist/components/DatePicker/DatePicker.css +8 -0
  39. package/dist/components/DatePicker/DatePicker.js +10 -1
  40. package/dist/components/DescriptionList/DescriptionList.css +113 -0
  41. package/dist/components/DescriptionList/DescriptionList.d.ts +59 -0
  42. package/dist/components/DescriptionList/DescriptionList.js +51 -0
  43. package/dist/components/FileInput/FileInput.css +16 -0
  44. package/dist/components/FileInput/FileInput.d.ts +4 -2
  45. package/dist/components/FileInput/FileInput.js +8 -2
  46. package/dist/components/Grid/Grid.js +5 -5
  47. package/dist/components/IconPicker/IconPicker.css +107 -0
  48. package/dist/components/IconPicker/IconPicker.d.ts +74 -0
  49. package/dist/components/IconPicker/IconPicker.js +194 -0
  50. package/dist/components/Input/Input.css +38 -0
  51. package/dist/components/Input/Input.d.ts +10 -1
  52. package/dist/components/Input/Input.js +66 -5
  53. package/dist/components/Kanban/Kanban.css +4 -0
  54. package/dist/components/Kbd/Kbd.css +66 -0
  55. package/dist/components/Kbd/Kbd.d.ts +32 -0
  56. package/dist/components/Kbd/Kbd.js +40 -0
  57. package/dist/components/List/List.css +136 -0
  58. package/dist/components/List/List.d.ts +82 -0
  59. package/dist/components/List/List.js +53 -0
  60. package/dist/components/List/ListItem.d.ts +85 -0
  61. package/dist/components/List/ListItem.js +81 -0
  62. package/dist/components/Modal/Modal.css +80 -0
  63. package/dist/components/Modal/Modal.d.ts +33 -6
  64. package/dist/components/Modal/Modal.js +101 -6
  65. package/dist/components/MultiSelect/MultiSelect.css +8 -0
  66. package/dist/components/MultiSelect/MultiSelect.js +10 -1
  67. package/dist/components/OrgChart/OrgChart.css +149 -0
  68. package/dist/components/OrgChart/OrgChart.d.ts +83 -0
  69. package/dist/components/OrgChart/OrgChart.js +297 -0
  70. package/dist/components/OtpInput/OtpInput.css +93 -0
  71. package/dist/components/OtpInput/OtpInput.d.ts +60 -0
  72. package/dist/components/OtpInput/OtpInput.js +215 -0
  73. package/dist/components/PhoneInput/PhoneInput.css +8 -0
  74. package/dist/components/Popover/Popover.d.ts +7 -0
  75. package/dist/components/Popover/Popover.js +11 -1
  76. package/dist/components/RichTextEditor/RichTextEditor.css +203 -0
  77. package/dist/components/RichTextEditor/RichTextEditor.d.ts +83 -0
  78. package/dist/components/RichTextEditor/RichTextEditor.js +494 -0
  79. package/dist/components/SegmentedControl/SegmentedControl.js +7 -2
  80. package/dist/components/Select/Select.css +70 -0
  81. package/dist/components/Select/Select.d.ts +12 -0
  82. package/dist/components/Select/Select.js +59 -4
  83. package/dist/components/Stack/Stack.css +49 -0
  84. package/dist/components/Stack/Stack.d.ts +65 -7
  85. package/dist/components/Stack/Stack.js +30 -2
  86. package/dist/components/StatCard/StatCard.css +73 -0
  87. package/dist/components/StatCard/StatCard.d.ts +17 -0
  88. package/dist/components/StatCard/StatCard.js +4 -1
  89. package/dist/components/Tabs/Tab.d.ts +15 -0
  90. package/dist/components/Tabs/Tab.js +30 -1
  91. package/dist/components/Tabs/Tabs.css +132 -0
  92. package/dist/components/Tabs/Tabs.d.ts +7 -0
  93. package/dist/components/Tabs/Tabs.js +13 -2
  94. package/dist/components/Tag/Tag.css +85 -2
  95. package/dist/components/Tag/Tag.d.ts +13 -6
  96. package/dist/components/Tag/Tag.js +1 -0
  97. package/dist/components/Text/Text.js +2 -2
  98. package/dist/components/Textarea/Textarea.css +8 -0
  99. package/dist/components/TimePicker/TimePicker.css +8 -0
  100. package/dist/components/Tooltip/Tooltip.css +25 -0
  101. package/dist/components/Tooltip/Tooltip.d.ts +11 -0
  102. package/dist/components/Tooltip/Tooltip.js +18 -3
  103. package/dist/index.d.ts +25 -0
  104. package/dist/index.js +14 -0
  105. package/dist/teste/AILabel.test.d.ts +1 -0
  106. package/dist/teste/AILabel.test.js +33 -0
  107. package/dist/teste/AccordionConteudoLivre.test.d.ts +1 -0
  108. package/dist/teste/AccordionConteudoLivre.test.js +29 -0
  109. package/dist/teste/AtributosRepassados.test.d.ts +1 -0
  110. package/dist/teste/AtributosRepassados.test.js +52 -0
  111. package/dist/teste/AttachmentCardIA.test.d.ts +1 -0
  112. package/dist/teste/AttachmentCardIA.test.js +89 -0
  113. package/dist/teste/AvatarGroupOverlap.test.d.ts +1 -0
  114. package/dist/teste/AvatarGroupOverlap.test.js +56 -0
  115. package/dist/teste/BadgeTag.test.d.ts +1 -0
  116. package/dist/teste/BadgeTag.test.js +42 -0
  117. package/dist/teste/BoxItemFlex.test.d.ts +1 -0
  118. package/dist/teste/BoxItemFlex.test.js +54 -0
  119. package/dist/teste/BoxLayout.test.d.ts +1 -0
  120. package/dist/teste/BoxLayout.test.js +35 -0
  121. package/dist/teste/Button.test.d.ts +1 -0
  122. package/dist/teste/Button.test.js +27 -0
  123. package/dist/teste/Calendar.test.d.ts +1 -0
  124. package/dist/teste/Calendar.test.js +221 -0
  125. package/dist/teste/ChipsXs.test.d.ts +1 -0
  126. package/dist/teste/ChipsXs.test.js +31 -0
  127. package/dist/teste/Coachmark.test.d.ts +1 -0
  128. package/dist/teste/Coachmark.test.js +149 -0
  129. package/dist/teste/ColorPicker.test.d.ts +1 -0
  130. package/dist/teste/ColorPicker.test.js +132 -0
  131. package/dist/teste/DataTableCelulaLivre.test.d.ts +1 -0
  132. package/dist/teste/DataTableCelulaLivre.test.js +76 -0
  133. package/dist/teste/DataTableDocumento.test.d.ts +1 -0
  134. package/dist/teste/DataTableDocumento.test.js +92 -0
  135. package/dist/teste/DatePicker.test.js +23 -0
  136. package/dist/teste/FileInputTrigger.test.d.ts +1 -0
  137. package/dist/teste/FileInputTrigger.test.js +53 -0
  138. package/dist/teste/IconPicker.test.d.ts +1 -0
  139. package/dist/teste/IconPicker.test.js +130 -0
  140. package/dist/teste/InputMascaraEAfins.test.d.ts +1 -0
  141. package/dist/teste/InputMascaraEAfins.test.js +99 -0
  142. package/dist/teste/KbdCodeBlock.test.d.ts +1 -0
  143. package/dist/teste/KbdCodeBlock.test.js +95 -0
  144. package/dist/teste/List.test.d.ts +1 -0
  145. package/dist/teste/List.test.js +153 -0
  146. package/dist/teste/ModalVariantes.test.d.ts +1 -0
  147. package/dist/teste/ModalVariantes.test.js +151 -0
  148. package/dist/teste/NomeAcessivelSsr.test.d.ts +1 -0
  149. package/dist/teste/NomeAcessivelSsr.test.js +88 -0
  150. package/dist/teste/OrgChart.test.d.ts +1 -0
  151. package/dist/teste/OrgChart.test.js +162 -0
  152. package/dist/teste/OtpInput.test.d.ts +1 -0
  153. package/dist/teste/OtpInput.test.js +143 -0
  154. package/dist/teste/PopoverMaxHeight.test.d.ts +1 -0
  155. package/dist/teste/PopoverMaxHeight.test.js +38 -0
  156. package/dist/teste/RichTextEditor.test.d.ts +1 -0
  157. package/dist/teste/RichTextEditor.test.js +287 -0
  158. package/dist/teste/SelectPlacementFiltro.test.d.ts +1 -0
  159. package/dist/teste/SelectPlacementFiltro.test.js +88 -0
  160. package/dist/teste/Stack.test.d.ts +1 -0
  161. package/dist/teste/Stack.test.js +57 -0
  162. package/dist/teste/StatCardRotuloTopo.test.d.ts +1 -0
  163. package/dist/teste/StatCardRotuloTopo.test.js +34 -0
  164. package/dist/teste/TabsContadorFechavel.test.d.ts +1 -0
  165. package/dist/teste/TabsContadorFechavel.test.js +79 -0
  166. package/dist/teste/TooltipDark.test.d.ts +1 -0
  167. package/dist/teste/TooltipDark.test.js +31 -0
  168. package/dist/utils/calendario.d.ts +28 -0
  169. package/dist/utils/calendario.js +73 -0
  170. package/dist/utils/html-seguro.d.ts +27 -0
  171. package/dist/utils/html-seguro.js +97 -0
  172. package/dist/utils/paleta-de-cores.d.ts +26 -0
  173. package/dist/utils/paleta-de-cores.js +10 -0
  174. package/dist/utils/texto.d.ts +5 -0
  175. package/dist/utils/texto.js +5 -0
  176. package/package.json +3 -3
  177. package/src/index.ts +26 -0
  178. package/src/teste/AILabel.test.tsx +41 -0
  179. package/src/teste/AccordionConteudoLivre.test.tsx +39 -0
  180. package/src/teste/AtributosRepassados.test.tsx +73 -0
  181. package/src/teste/AttachmentCardIA.test.tsx +126 -0
  182. package/src/teste/AvatarGroupOverlap.test.tsx +74 -0
  183. package/src/teste/BadgeTag.test.tsx +64 -0
  184. package/src/teste/BoxItemFlex.test.tsx +81 -0
  185. package/src/teste/BoxLayout.test.tsx +50 -0
  186. package/src/teste/Button.test.tsx +39 -0
  187. package/src/teste/Calendar.test.tsx +282 -0
  188. package/src/teste/ChipsXs.test.tsx +41 -0
  189. package/src/teste/Coachmark.test.tsx +198 -0
  190. package/src/teste/ColorPicker.test.tsx +153 -0
  191. package/src/teste/DataTableCelulaLivre.test.tsx +103 -0
  192. package/src/teste/DataTableDocumento.test.tsx +102 -0
  193. package/src/teste/DatePicker.test.tsx +38 -0
  194. package/src/teste/FileInputTrigger.test.tsx +89 -0
  195. package/src/teste/IconPicker.test.tsx +145 -0
  196. package/src/teste/InputMascaraEAfins.test.tsx +124 -0
  197. package/src/teste/KbdCodeBlock.test.tsx +106 -0
  198. package/src/teste/List.test.tsx +269 -0
  199. package/src/teste/ModalVariantes.test.tsx +173 -0
  200. package/src/teste/NomeAcessivelSsr.test.tsx +110 -0
  201. package/src/teste/OrgChart.test.tsx +183 -0
  202. package/src/teste/OtpInput.test.tsx +163 -0
  203. package/src/teste/PopoverMaxHeight.test.tsx +47 -0
  204. package/src/teste/RichTextEditor.test.tsx +329 -0
  205. package/src/teste/SelectPlacementFiltro.test.tsx +110 -0
  206. package/src/teste/Stack.test.tsx +80 -0
  207. package/src/teste/StatCardRotuloTopo.test.tsx +44 -0
  208. package/src/teste/TabsContadorFechavel.test.tsx +144 -0
  209. package/src/teste/TooltipDark.test.tsx +51 -0
  210. package/src/utils/calendario.ts +78 -0
  211. package/src/utils/html-seguro.ts +94 -0
  212. package/src/utils/paleta-de-cores.ts +34 -0
  213. 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 selected() {
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 + (props.selectable ? 1 : 0);
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 selected().length === rows().length;
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 selected().length > 0 && !allSelected();
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 = selected();
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 = selected();
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 selected().includes(index);
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 ? "umds-datatable__th--sortable" : "",
174
- props.sortKey === col.key ? "umds-datatable__th--sorted" : "",
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 ? "umds-datatable__row--clickable" : "",
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: [props.selectable ? (_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
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.sortable ? (_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, !col.sortable ? (_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: [props.selectable ? (_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("tr", { onClick: (event) => handleRowClick(rowIdx, row), onKeyDown: (event) => aoTeclarNaLinha(rowIdx, row, event), tabIndex: rowTabIndex(), role: rowRole(), className: rowClasses(row, rowIdx), children: [props.selectable ? (_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] })] }) }));
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(() => (props.defaultRange && props.defaultRange.from) || "");
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 style() {
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 proíbe "style" como prop declarada/lida
52
- // (getProps lança "avoid using JavaScript keyword"); estilo inline do
53
- // consumidor fica por conta do fallthrough nativo de attrs no Vue.
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: style(), ...htmlAttrs(), className: classes(), children: _jsx(_Fragment, { children: props.children }) }));
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;