@12-apps/ui 6.2.0 → 6.3.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 (166) hide show
  1. package/dist/{chunk-35VGGLOC.js → chunk-CEKPLUQV.js} +2 -2
  2. package/dist/{chunk-35VGGLOC.js.map → chunk-CEKPLUQV.js.map} +1 -1
  3. package/dist/{chunk-62XQWGXU.js → chunk-MXPXKORR.js} +19 -17
  4. package/dist/chunk-MXPXKORR.js.map +1 -0
  5. package/dist/{chunk-7XLEWBKL.js → chunk-N554AFDB.js} +7 -10
  6. package/dist/chunk-N554AFDB.js.map +1 -0
  7. package/dist/{chunk-JDO7W4D4.js → chunk-R5ZQZSEQ.js} +2 -20
  8. package/dist/{chunk-JDO7W4D4.js.map → chunk-R5ZQZSEQ.js.map} +1 -1
  9. package/dist/{chunk-R4TYXKDD.js → chunk-TPQRIPCN.js} +52 -48
  10. package/dist/chunk-TPQRIPCN.js.map +1 -0
  11. package/dist/copy.js +1 -0
  12. package/dist/copy.js.map +1 -0
  13. package/dist/data-display/CardKit.js +15 -4
  14. package/dist/data-display/CardKit.js.map +1 -1
  15. package/dist/data-display/DataViews.js +664 -616
  16. package/dist/data-display/DataViews.js.map +1 -1
  17. package/dist/data-display/SectionOnboarding.js +3 -3
  18. package/dist/data-display/SectionOnboarding.js.map +1 -1
  19. package/dist/feedback/ConfirmAction.js +3 -5
  20. package/dist/form/CategorySelect.js +1 -1
  21. package/dist/form/CepField.js +1 -1
  22. package/dist/form/total-form.js +8 -4
  23. package/dist/form/total-form.js.map +1 -1
  24. package/dist/layout/ContentToolbar.js +1 -1
  25. package/dist/layout/TableFilter.js +1 -1
  26. package/dist/pt-BR.js +222 -0
  27. package/dist/pt-BR.js.map +1 -0
  28. package/dist/types/components/data-display/CardKit/use-remove-confirm.d.ts +4 -1
  29. package/dist/types/components/data-display/CardKit/use-remove-confirm.d.ts.map +1 -1
  30. package/dist/types/components/data-display/CardKit/use-row-confirm.d.ts +5 -2
  31. package/dist/types/components/data-display/CardKit/use-row-confirm.d.ts.map +1 -1
  32. package/dist/types/components/data-display/DataViews/DataViewsBoard.d.ts.map +1 -1
  33. package/dist/types/components/data-display/DataViews/DeleteViewDialog.d.ts.map +1 -1
  34. package/dist/types/components/data-display/DataViews/ManageViewsDialog.d.ts +4 -1
  35. package/dist/types/components/data-display/DataViews/ManageViewsDialog.d.ts.map +1 -1
  36. package/dist/types/components/data-display/DataViews/SaveViewModal.d.ts +0 -5
  37. package/dist/types/components/data-display/DataViews/SaveViewModal.d.ts.map +1 -1
  38. package/dist/types/components/data-display/DataViews/base-card.d.ts.map +1 -1
  39. package/dist/types/components/data-display/DataViews/base-list-card-gutters.d.ts.map +1 -1
  40. package/dist/types/components/data-display/DataViews/data-views-bar-controls.d.ts.map +1 -1
  41. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
  42. package/dist/types/components/data-display/DataViews/data-views-columns-tab.d.ts.map +1 -1
  43. package/dist/types/components/data-display/DataViews/data-views-copy-context.d.ts +17 -0
  44. package/dist/types/components/data-display/DataViews/data-views-copy-context.d.ts.map +1 -0
  45. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +205 -0
  46. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -0
  47. package/dist/types/components/data-display/DataViews/data-views-display-panel.d.ts.map +1 -1
  48. package/dist/types/components/data-display/DataViews/data-views-display-tabs.d.ts.map +1 -1
  49. package/dist/types/components/data-display/DataViews/data-views-export.d.ts.map +1 -1
  50. package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
  51. package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts.map +1 -1
  52. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  53. package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
  54. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  55. package/dist/types/components/data-display/DataViews/data-views-range-presets.d.ts +3 -2
  56. package/dist/types/components/data-display/DataViews/data-views-range-presets.d.ts.map +1 -1
  57. package/dist/types/components/data-display/DataViews/data-views-scopes.d.ts.map +1 -1
  58. package/dist/types/components/data-display/DataViews/data-views-search.d.ts.map +1 -1
  59. package/dist/types/components/data-display/DataViews/data-views-select-all-strip.d.ts.map +1 -1
  60. package/dist/types/components/data-display/DataViews/data-views-table-parts.d.ts.map +1 -1
  61. package/dist/types/components/data-display/DataViews/data-views-view-nav.d.ts +1 -1
  62. package/dist/types/components/data-display/DataViews/data-views-view-nav.d.ts.map +1 -1
  63. package/dist/types/components/data-display/DataViews/index.d.ts +2 -0
  64. package/dist/types/components/data-display/DataViews/index.d.ts.map +1 -1
  65. package/dist/types/components/data-display/DataViews/save-view-preview.d.ts +10 -0
  66. package/dist/types/components/data-display/DataViews/save-view-preview.d.ts.map +1 -0
  67. package/dist/types/components/data-display/DataViews/use-saved-views-controller.d.ts.map +1 -1
  68. package/dist/types/components/data-display/SectionOnboarding/SectionOnboarding.types.d.ts +6 -5
  69. package/dist/types/components/data-display/SectionOnboarding/SectionOnboarding.types.d.ts.map +1 -1
  70. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.hooks.d.ts +1 -3
  71. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.hooks.d.ts.map +1 -1
  72. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.parts.d.ts +4 -1
  73. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.parts.d.ts.map +1 -1
  74. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.types.d.ts +9 -1
  75. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.types.d.ts.map +1 -1
  76. package/dist/types/components/feedback/ConfirmAction/ConfirmButton.d.ts +2 -1
  77. package/dist/types/components/feedback/ConfirmAction/ConfirmButton.d.ts.map +1 -1
  78. package/dist/types/components/feedback/ConfirmAction/index.d.ts +2 -2
  79. package/dist/types/components/feedback/ConfirmAction/index.d.ts.map +1 -1
  80. package/dist/types/components/feedback/ConfirmAction/with-confirmation.d.ts +5 -1
  81. package/dist/types/components/feedback/ConfirmAction/with-confirmation.d.ts.map +1 -1
  82. package/dist/types/components/form/CategorySelect/CategoryPanel.d.ts +4 -1
  83. package/dist/types/components/form/CategorySelect/CategoryPanel.d.ts.map +1 -1
  84. package/dist/types/components/form/CategorySelect/CategoryPanelFoot.d.ts +5 -2
  85. package/dist/types/components/form/CategorySelect/CategoryPanelFoot.d.ts.map +1 -1
  86. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts +5 -2
  87. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
  88. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts +3 -0
  89. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts.map +1 -1
  90. package/dist/types/components/form/CategorySelect/CategorySelect.types.d.ts +5 -0
  91. package/dist/types/components/form/CategorySelect/CategorySelect.types.d.ts.map +1 -1
  92. package/dist/types/components/form/CategorySelect/CategoryTrigger.d.ts +4 -1
  93. package/dist/types/components/form/CategorySelect/CategoryTrigger.d.ts.map +1 -1
  94. package/dist/types/components/form/CepField/CepField.d.ts +1 -1
  95. package/dist/types/components/form/CepField/CepField.d.ts.map +1 -1
  96. package/dist/types/components/form/CepField/CepField.types.d.ts +3 -0
  97. package/dist/types/components/form/CepField/CepField.types.d.ts.map +1 -1
  98. package/dist/types/components/form/total-form/Fields/CategoryField.d.ts +4 -1
  99. package/dist/types/components/form/total-form/Fields/CategoryField.d.ts.map +1 -1
  100. package/dist/types/components/form/total-form/Fields/CepField.d.ts +4 -1
  101. package/dist/types/components/form/total-form/Fields/CepField.d.ts.map +1 -1
  102. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +6 -1
  103. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  104. package/dist/types/components/layout/ContentToolbar/SavedViewsMenu.d.ts.map +1 -1
  105. package/dist/types/copy.d.ts +99 -0
  106. package/dist/types/copy.d.ts.map +1 -0
  107. package/dist/types/pt-BR.d.ts +28 -0
  108. package/dist/types/pt-BR.d.ts.map +1 -0
  109. package/package.json +10 -2
  110. package/src/components/data-display/CardKit/use-remove-confirm.tsx +5 -0
  111. package/src/components/data-display/CardKit/use-row-confirm.tsx +7 -2
  112. package/src/components/data-display/DataViews/DataViewsBoard.tsx +7 -4
  113. package/src/components/data-display/DataViews/DeleteViewDialog.tsx +6 -4
  114. package/src/components/data-display/DataViews/ManageViewsDialog.tsx +26 -10
  115. package/src/components/data-display/DataViews/SaveViewModal.tsx +56 -90
  116. package/src/components/data-display/DataViews/base-card.tsx +3 -1
  117. package/src/components/data-display/DataViews/base-list-card-gutters.tsx +3 -1
  118. package/src/components/data-display/DataViews/data-views-bar-controls.tsx +8 -5
  119. package/src/components/data-display/DataViews/data-views-category-pill.tsx +6 -3
  120. package/src/components/data-display/DataViews/data-views-columns-tab.tsx +5 -3
  121. package/src/components/data-display/DataViews/data-views-copy-context.tsx +43 -0
  122. package/src/components/data-display/DataViews/data-views-copy.ts +214 -0
  123. package/src/components/data-display/DataViews/data-views-display-panel.tsx +15 -9
  124. package/src/components/data-display/DataViews/data-views-display-tabs.tsx +19 -29
  125. package/src/components/data-display/DataViews/data-views-export.tsx +9 -10
  126. package/src/components/data-display/DataViews/data-views-filter-panel.tsx +9 -5
  127. package/src/components/data-display/DataViews/data-views-grid-helpers.tsx +5 -2
  128. package/src/components/data-display/DataViews/data-views-more-fields.tsx +5 -3
  129. package/src/components/data-display/DataViews/data-views-more-filters.tsx +6 -3
  130. package/src/components/data-display/DataViews/data-views-range-pill.tsx +9 -5
  131. package/src/components/data-display/DataViews/data-views-range-presets.ts +7 -8
  132. package/src/components/data-display/DataViews/data-views-scopes.tsx +3 -1
  133. package/src/components/data-display/DataViews/data-views-search.tsx +7 -4
  134. package/src/components/data-display/DataViews/data-views-select-all-strip.tsx +5 -3
  135. package/src/components/data-display/DataViews/data-views-table-parts.tsx +7 -2
  136. package/src/components/data-display/DataViews/data-views-view-nav.tsx +22 -16
  137. package/src/components/data-display/DataViews/index.ts +20 -0
  138. package/src/components/data-display/DataViews/save-view-preview.tsx +78 -0
  139. package/src/components/data-display/DataViews/use-saved-views-controller.ts +3 -1
  140. package/src/components/data-display/SectionOnboarding/SectionOnboarding.tsx +3 -3
  141. package/src/components/data-display/SectionOnboarding/SectionOnboarding.types.ts +8 -7
  142. package/src/components/feedback/ConfirmAction/ConfirmAction.hooks.ts +2 -2
  143. package/src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx +12 -5
  144. package/src/components/feedback/ConfirmAction/ConfirmAction.types.ts +9 -1
  145. package/src/components/feedback/ConfirmAction/ConfirmButton.tsx +12 -4
  146. package/src/components/feedback/ConfirmAction/index.ts +2 -2
  147. package/src/components/feedback/ConfirmAction/with-confirmation.tsx +4 -3
  148. package/src/components/form/CategorySelect/CategoryPanel.tsx +18 -6
  149. package/src/components/form/CategorySelect/CategoryPanelFoot.tsx +10 -5
  150. package/src/components/form/CategorySelect/CategoryPanelHead.tsx +8 -3
  151. package/src/components/form/CategorySelect/CategoryPanelList.tsx +17 -10
  152. package/src/components/form/CategorySelect/CategorySelect.tsx +3 -3
  153. package/src/components/form/CategorySelect/CategorySelect.types.ts +5 -0
  154. package/src/components/form/CategorySelect/CategoryTrigger.tsx +5 -1
  155. package/src/components/form/CepField/CepField.tsx +6 -9
  156. package/src/components/form/CepField/CepField.types.ts +3 -0
  157. package/src/components/form/total-form/Fields/CategoryField.tsx +5 -0
  158. package/src/components/form/total-form/Fields/CepField.tsx +5 -0
  159. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +6 -1
  160. package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +1 -21
  161. package/src/components/layout/TableFilter/TableFilter.tsx +1 -1
  162. package/src/copy.ts +103 -0
  163. package/src/pt-BR.ts +247 -0
  164. package/dist/chunk-62XQWGXU.js.map +0 -1
  165. package/dist/chunk-7XLEWBKL.js.map +0 -1
  166. package/dist/chunk-R4TYXKDD.js.map +0 -1
@@ -10,12 +10,12 @@ import {
10
10
  } from "../chunk-JP55QWVR.js";
11
11
  import {
12
12
  TableFilter
13
- } from "../chunk-35VGGLOC.js";
13
+ } from "../chunk-CEKPLUQV.js";
14
14
  import {
15
15
  ContentToolbar,
16
16
  FilterTrigger,
17
17
  MultiSelectDropdown
18
- } from "../chunk-JDO7W4D4.js";
18
+ } from "../chunk-R5ZQZSEQ.js";
19
19
  import "../chunk-DI44UBHQ.js";
20
20
  import {
21
21
  Switch
@@ -25,7 +25,7 @@ import {
25
25
  } from "../chunk-H7UAGTVW.js";
26
26
  import {
27
27
  CategorySelect
28
- } from "../chunk-R4TYXKDD.js";
28
+ } from "../chunk-TPQRIPCN.js";
29
29
  import {
30
30
  Input
31
31
  } from "../chunk-OOKQ2LMM.js";
@@ -43,8 +43,8 @@ import {
43
43
  StackedModalContent
44
44
  } from "../chunk-QZZVHY6U.js";
45
45
  import {
46
- ConfirmButton
47
- } from "../chunk-62XQWGXU.js";
46
+ createConfirmButton
47
+ } from "../chunk-MXPXKORR.js";
48
48
  import {
49
49
  DataGrid
50
50
  } from "../chunk-QLBYAYUG.js";
@@ -350,8 +350,28 @@ function toSavedViewSummary(record) {
350
350
  return { ...record, state: record.state ?? {} };
351
351
  }
352
352
 
353
+ // src/components/data-display/DataViews/data-views-copy-context.tsx
354
+ import { createContext as createContext2, useContext as useContext2 } from "react";
355
+ import { jsx as jsx2 } from "react/jsx-runtime";
356
+ var DataViewsCopyContext = createContext2(null);
357
+ function DataViewsCopyProvider({
358
+ copy,
359
+ children
360
+ }) {
361
+ return /* @__PURE__ */ jsx2(DataViewsCopyContext.Provider, { value: copy, children });
362
+ }
363
+ function useDataViewsCopy() {
364
+ const copy = useContext2(DataViewsCopyContext);
365
+ if (!copy) {
366
+ throw new Error(
367
+ "DataViews components must be rendered inside <DataViewsCopyProvider copy={\u2026}>. @12-apps/ui ships no default copy; pass PT_BR_DATA_VIEWS_COPY to keep the pt-BR wording."
368
+ );
369
+ }
370
+ return copy;
371
+ }
372
+
353
373
  // src/components/data-display/DataViews/base-card.tsx
354
- import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
374
+ import { Fragment, jsx as jsx3, jsxs } from "react/jsx-runtime";
355
375
  function cardSx(opts) {
356
376
  const { aspectRatio, pad, scale, interactive, draggable } = opts;
357
377
  return {
@@ -379,8 +399,9 @@ function CardOverlays({
379
399
  checkboxTestId,
380
400
  menu
381
401
  }) {
402
+ const copy = useDataViewsCopy();
382
403
  return /* @__PURE__ */ jsxs(Fragment, { children: [
383
- onToggleSelect && /* @__PURE__ */ jsx2(Box, { sx: { position: "absolute", top: 4, left: 4, zIndex: 2 }, children: /* @__PURE__ */ jsx2(
404
+ onToggleSelect && /* @__PURE__ */ jsx3(Box, { sx: { position: "absolute", top: 4, left: 4, zIndex: 2 }, children: /* @__PURE__ */ jsx3(
384
405
  Checkbox,
385
406
  {
386
407
  checked: selected,
@@ -388,10 +409,10 @@ function CardOverlays({
388
409
  onClick: (event) => event.stopPropagation(),
389
410
  size: "small",
390
411
  "data-testid": checkboxTestId,
391
- "aria-label": "Selecionar"
412
+ "aria-label": copy.selection.selectRow
392
413
  }
393
414
  ) }),
394
- menu && /* @__PURE__ */ jsx2(
415
+ menu && /* @__PURE__ */ jsx3(
395
416
  Box,
396
417
  {
397
418
  sx: { position: "absolute", top: 4, right: 4, zIndex: 2 },
@@ -402,7 +423,7 @@ function CardOverlays({
402
423
  ] });
403
424
  }
404
425
  function CardMedia({ image, imageFallback }) {
405
- return /* @__PURE__ */ jsx2(
426
+ return /* @__PURE__ */ jsx3(
406
427
  Box,
407
428
  {
408
429
  sx: {
@@ -424,7 +445,7 @@ function CardBodyContent({
424
445
  fill,
425
446
  topGap
426
447
  }) {
427
- return /* @__PURE__ */ jsx2(
448
+ return /* @__PURE__ */ jsx3(
428
449
  Box,
429
450
  {
430
451
  sx: {
@@ -448,7 +469,7 @@ function CardCaption({
448
469
  topGap
449
470
  }) {
450
471
  return /* @__PURE__ */ jsxs(Box, { sx: { mt: topGap, minWidth: 0 }, children: [
451
- title != null && /* @__PURE__ */ jsx2(
472
+ title != null && /* @__PURE__ */ jsx3(
452
473
  Text,
453
474
  {
454
475
  variant: "heading",
@@ -465,7 +486,7 @@ function CardCaption({
465
486
  children: title
466
487
  }
467
488
  ),
468
- subtitle != null && /* @__PURE__ */ jsx2(Text, { variant: "caption", size: "xs", color: "secondary", as: "p", children: subtitle })
489
+ subtitle != null && /* @__PURE__ */ jsx3(Text, { variant: "caption", size: "xs", color: "secondary", as: "p", children: subtitle })
469
490
  ] });
470
491
  }
471
492
  function CardContents({
@@ -482,9 +503,9 @@ function CardContents({
482
503
  const hasCaption = title != null || subtitle != null;
483
504
  const top = contentGaps({ hasMedia, hasBody, overlays, pad });
484
505
  return /* @__PURE__ */ jsxs(Fragment, { children: [
485
- hasMedia && /* @__PURE__ */ jsx2(CardMedia, { image, imageFallback }),
486
- hasBody && /* @__PURE__ */ jsx2(CardBodyContent, { fill: !hasMedia, topGap: top.body, children }),
487
- hasCaption && /* @__PURE__ */ jsx2(CardCaption, { title, subtitle, topGap: top.caption })
506
+ hasMedia && /* @__PURE__ */ jsx3(CardMedia, { image, imageFallback }),
507
+ hasBody && /* @__PURE__ */ jsx3(CardBodyContent, { fill: !hasMedia, topGap: top.body, children }),
508
+ hasCaption && /* @__PURE__ */ jsx3(CardCaption, { title, subtitle, topGap: top.caption })
488
509
  ] });
489
510
  }
490
511
  function useCardShell(props) {
@@ -545,7 +566,7 @@ function BaseCard(props) {
545
566
  })
546
567
  },
547
568
  children: [
548
- drag.draggable && /* @__PURE__ */ jsx2(Box, { sx: { position: "absolute", bottom: 4, left: 4, zIndex: 2 }, children: /* @__PURE__ */ jsx2(
569
+ drag.draggable && /* @__PURE__ */ jsx3(Box, { sx: { position: "absolute", bottom: 4, left: 4, zIndex: 2 }, children: /* @__PURE__ */ jsx3(
549
570
  DragHandle,
550
571
  {
551
572
  handleProps: drag.handleProps,
@@ -553,7 +574,7 @@ function BaseCard(props) {
553
574
  testId: slot("drag")
554
575
  }
555
576
  ) }),
556
- /* @__PURE__ */ jsx2(
577
+ /* @__PURE__ */ jsx3(
557
578
  CardOverlays,
558
579
  {
559
580
  selected,
@@ -563,7 +584,7 @@ function BaseCard(props) {
563
584
  menu
564
585
  }
565
586
  ),
566
- /* @__PURE__ */ jsx2(
587
+ /* @__PURE__ */ jsx3(
567
588
  CardContents,
568
589
  {
569
590
  image: props.image,
@@ -605,10 +626,10 @@ function useDisclosure(props) {
605
626
  import { useTheme as useTheme2 } from "@mui/material";
606
627
 
607
628
  // src/components/data-display/DataViews/data-views-layout-context.tsx
608
- import { createContext as createContext2, useContext as useContext2, useEffect, useMemo, useState as useState2 } from "react";
629
+ import { createContext as createContext3, useContext as useContext3, useEffect, useMemo, useState as useState2 } from "react";
609
630
  import GridViewOutlinedIcon from "@mui/icons-material/GridViewOutlined";
610
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
611
- var DataViewsLayoutContext = createContext2(null);
631
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
632
+ var DataViewsLayoutContext = createContext3(null);
612
633
  var DEFAULT_ZOOM = 35;
613
634
  var BASE_CARD_WIDTH = 180;
614
635
  var CARD_SCALE_RANGE = { min: 0.75, max: 2 };
@@ -722,10 +743,10 @@ function DataViewsLayoutProvider({
722
743
  }),
723
744
  [effective, density, canUseCards, canUseList, canUseBoard, zoom]
724
745
  );
725
- return /* @__PURE__ */ jsx3(DataViewsLayoutContext.Provider, { value, children });
746
+ return /* @__PURE__ */ jsx4(DataViewsLayoutContext.Provider, { value, children });
726
747
  }
727
748
  function useDataViewsLayout() {
728
- const ctx = useContext2(DataViewsLayoutContext);
749
+ const ctx = useContext3(DataViewsLayoutContext);
729
750
  if (!ctx) {
730
751
  throw new Error("useDataViewsLayout must be used within a DataViewsLayoutProvider");
731
752
  }
@@ -733,26 +754,26 @@ function useDataViewsLayout() {
733
754
  }
734
755
 
735
756
  // src/components/data-display/DataViews/list-card-rails.tsx
736
- import { createContext as createContext4, useContext as useContext4 } from "react";
757
+ import { createContext as createContext5, useContext as useContext5 } from "react";
737
758
 
738
759
  // src/components/data-display/DataViews/list-card-cells.tsx
739
- import { createContext as createContext3, useContext as useContext3 } from "react";
740
- import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
760
+ import { createContext as createContext4, useContext as useContext4 } from "react";
761
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
741
762
  var ALIGN_ITEMS = { start: "flex-start", center: "center", end: "flex-end" };
742
763
  var TEXT_ALIGN = { start: "left", center: "center", end: "right" };
743
764
  var DEFAULT_CELL_WIDTH = "minmax(0, 1fr)";
744
765
  function cellTracks(cells) {
745
766
  return (cells ?? []).map((cell) => cell.width ?? DEFAULT_CELL_WIDTH);
746
767
  }
747
- var CellConfigContext = createContext3(null);
768
+ var CellConfigContext = createContext4(null);
748
769
  function CellConfigProvider({
749
770
  cells,
750
771
  children
751
772
  }) {
752
- return /* @__PURE__ */ jsx4(CellConfigContext.Provider, { value: cells ?? null, children });
773
+ return /* @__PURE__ */ jsx5(CellConfigContext.Provider, { value: cells ?? null, children });
753
774
  }
754
775
  function useCellConfig() {
755
- return useContext3(CellConfigContext);
776
+ return useContext4(CellConfigContext);
756
777
  }
757
778
  function Cell({
758
779
  config,
@@ -781,7 +802,7 @@ function Cell({
781
802
  textAlign: TEXT_ALIGN[align]
782
803
  },
783
804
  children: [
784
- /* @__PURE__ */ jsx4(
805
+ /* @__PURE__ */ jsx5(
785
806
  Box,
786
807
  {
787
808
  component: "span",
@@ -789,7 +810,7 @@ function Cell({
789
810
  children: config.primary(row)
790
811
  }
791
812
  ),
792
- secondary != null && /* @__PURE__ */ jsx4(
813
+ secondary != null && /* @__PURE__ */ jsx5(
793
814
  Box,
794
815
  {
795
816
  component: "span",
@@ -805,11 +826,11 @@ function ListCardCells({
805
826
  cells,
806
827
  row
807
828
  }) {
808
- return /* @__PURE__ */ jsx4(Fragment2, { children: cells.map((config) => /* @__PURE__ */ jsx4(Cell, { config, row }, config.id)) });
829
+ return /* @__PURE__ */ jsx5(Fragment2, { children: cells.map((config) => /* @__PURE__ */ jsx5(Cell, { config, row }, config.id)) });
809
830
  }
810
831
 
811
832
  // src/components/data-display/DataViews/list-card-rails.tsx
812
- import { jsx as jsx5 } from "react/jsx-runtime";
833
+ import { jsx as jsx6 } from "react/jsx-runtime";
813
834
  function metaRail(columns) {
814
835
  return `minmax(max-content, ${Math.max(columns, 1)}fr)`;
815
836
  }
@@ -831,9 +852,9 @@ var DEFAULT_RAILS = {
831
852
  value: "max-content",
832
853
  actions: "auto"
833
854
  };
834
- var ListRailsContext = createContext4(null);
855
+ var ListRailsContext = createContext5(null);
835
856
  function useListRails() {
836
- return useContext4(ListRailsContext);
857
+ return useContext5(ListRailsContext);
837
858
  }
838
859
  function railsTemplate(rails) {
839
860
  return [
@@ -893,7 +914,7 @@ function ListCardGroup({
893
914
  const configured = cells != null && cells.length > 0;
894
915
  const template = configured ? cellRailsTemplate(cellTracks(cells)) : railsTemplate(resolved);
895
916
  const railCount = configured ? cellRailCount(cells.length) : RAIL_COUNT;
896
- return /* @__PURE__ */ jsx5(ListRailsContext.Provider, { value: { density, reserveGutters, railCount }, children: /* @__PURE__ */ jsx5(CellConfigProvider, { cells, children: /* @__PURE__ */ jsx5(
917
+ return /* @__PURE__ */ jsx6(ListRailsContext.Provider, { value: { density, reserveGutters, railCount }, children: /* @__PURE__ */ jsx6(CellConfigProvider, { cells, children: /* @__PURE__ */ jsx6(
897
918
  Box,
898
919
  {
899
920
  "data-testid": dataTestId,
@@ -915,7 +936,7 @@ function ListCardGroup({
915
936
 
916
937
  // src/components/data-display/DataViews/base-list-card-slots.tsx
917
938
  import { Fragment as Fragment3 } from "react";
918
- import { Fragment as Fragment4, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
939
+ import { Fragment as Fragment4, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
919
940
  var META_BREAK = 520;
920
941
  var STACK_BREAK = 360;
921
942
  var TABULAR = { fontVariantNumeric: "tabular-nums" };
@@ -932,7 +953,7 @@ function ListCardCaption({
932
953
  testId
933
954
  }) {
934
955
  return /* @__PURE__ */ jsxs4(Box, { "data-slot": "caption", sx: { minWidth: 0 }, children: [
935
- title != null && /* @__PURE__ */ jsx6(Text, { variant: "heading", size: "sm", weight: "bold", as: "p", children: /* @__PURE__ */ jsx6(
956
+ title != null && /* @__PURE__ */ jsx7(Text, { variant: "heading", size: "sm", weight: "bold", as: "p", children: /* @__PURE__ */ jsx7(
936
957
  Box,
937
958
  {
938
959
  ...href ? { component: "a", href, target } : { component: "span" },
@@ -959,11 +980,11 @@ function ListCardCaption({
959
980
  children: title
960
981
  }
961
982
  ) }),
962
- subtitle != null && /* @__PURE__ */ jsx6(Text, { variant: "caption", size: "xs", color: "secondary", as: "p", children: /* @__PURE__ */ jsx6(Box, { component: "span", sx: { display: "block", ...CLAMP }, children: subtitle }) })
983
+ subtitle != null && /* @__PURE__ */ jsx7(Text, { variant: "caption", size: "xs", color: "secondary", as: "p", children: /* @__PURE__ */ jsx7(Box, { component: "span", sx: { display: "block", ...CLAMP }, children: subtitle }) })
963
984
  ] });
964
985
  }
965
986
  function MetaRule() {
966
- return /* @__PURE__ */ jsx6(
987
+ return /* @__PURE__ */ jsx7(
967
988
  Box,
968
989
  {
969
990
  "aria-hidden": true,
@@ -1006,8 +1027,8 @@ function ListCardMeta({
1006
1027
  },
1007
1028
  children: [
1008
1029
  items.map((item, index) => /* @__PURE__ */ jsxs4(Fragment3, { children: [
1009
- index > 0 && /* @__PURE__ */ jsx6(MetaRule, {}),
1010
- /* @__PURE__ */ jsx6(
1030
+ index > 0 && /* @__PURE__ */ jsx7(MetaRule, {}),
1031
+ /* @__PURE__ */ jsx7(
1011
1032
  Box,
1012
1033
  {
1013
1034
  sx: {
@@ -1019,12 +1040,12 @@ function ListCardMeta({
1019
1040
  // that `space-evenly` can equalise.
1020
1041
  flex: "0 0 auto"
1021
1042
  },
1022
- children: /* @__PURE__ */ jsx6(DescriptionItem, { orientation: "vertical", align: "center", ...item })
1043
+ children: /* @__PURE__ */ jsx7(DescriptionItem, { orientation: "vertical", align: "center", ...item })
1023
1044
  }
1024
1045
  )
1025
1046
  ] }, `${item.label}-${index}`)),
1026
1047
  metaSlot,
1027
- trailingRule && items.length > 0 && /* @__PURE__ */ jsx6(MetaRule, {})
1048
+ trailingRule && items.length > 0 && /* @__PURE__ */ jsx7(MetaRule, {})
1028
1049
  ]
1029
1050
  }
1030
1051
  );
@@ -1034,7 +1055,7 @@ var VALUE_FLUSH = {
1034
1055
  [`@container (max-width: ${META_BREAK}px)`]: { marginLeft: 0 }
1035
1056
  };
1036
1057
  function ListCardValue({ value }) {
1037
- return /* @__PURE__ */ jsx6(Text, { variant: "body", size: "sm", weight: "medium", as: "span", children: /* @__PURE__ */ jsx6(
1058
+ return /* @__PURE__ */ jsx7(Text, { variant: "body", size: "sm", weight: "medium", as: "span", children: /* @__PURE__ */ jsx7(
1038
1059
  Box,
1039
1060
  {
1040
1061
  component: "span",
@@ -1058,7 +1079,7 @@ function ListCardActions({
1058
1079
  "data-slot": "actions",
1059
1080
  sx: { display: "flex", alignItems: "center", gap: 0.5, position: "relative", zIndex: 1 },
1060
1081
  children: [
1061
- actions && /* @__PURE__ */ jsx6(
1082
+ actions && /* @__PURE__ */ jsx7(
1062
1083
  Box,
1063
1084
  {
1064
1085
  "data-testid": testId("actions"),
@@ -1077,7 +1098,7 @@ function ListCardActions({
1077
1098
  children: actions
1078
1099
  }
1079
1100
  ),
1080
- menu && /* @__PURE__ */ jsx6(Box, { "data-testid": testId("menu"), onClick: (event) => event.stopPropagation(), children: menu })
1101
+ menu && /* @__PURE__ */ jsx7(Box, { "data-testid": testId("menu"), onClick: (event) => event.stopPropagation(), children: menu })
1081
1102
  ]
1082
1103
  }
1083
1104
  )
@@ -1092,7 +1113,7 @@ function ListCardTail({
1092
1113
  testId
1093
1114
  }) {
1094
1115
  return /* @__PURE__ */ jsxs4(Fragment4, { children: [
1095
- /* @__PURE__ */ jsx6(
1116
+ /* @__PURE__ */ jsx7(
1096
1117
  Box,
1097
1118
  {
1098
1119
  "data-slot": "value",
@@ -1101,10 +1122,10 @@ function ListCardTail({
1101
1122
  ...separated && value != null ? VALUE_FLUSH : {}
1102
1123
  },
1103
1124
  "data-testid": testId("value"),
1104
- children: value != null && /* @__PURE__ */ jsx6(ListCardValue, { value })
1125
+ children: value != null && /* @__PURE__ */ jsx7(ListCardValue, { value })
1105
1126
  }
1106
1127
  ),
1107
- /* @__PURE__ */ jsx6(
1128
+ /* @__PURE__ */ jsx7(
1108
1129
  ListCardActions,
1109
1130
  {
1110
1131
  actions,
@@ -1271,25 +1292,25 @@ function rowStyles(props, shell, cellTemplate) {
1271
1292
  // src/components/data-display/DataViews/base-list-card-gutters.tsx
1272
1293
  import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight";
1273
1294
  import { IconButton } from "@mui/material";
1274
- import { jsx as jsx7 } from "react/jsx-runtime";
1295
+ import { jsx as jsx8 } from "react/jsx-runtime";
1275
1296
  var CHECKBOX_PAD = "-9px";
1276
1297
  function DragSlot({
1277
1298
  drag,
1278
1299
  reserve,
1279
1300
  testId
1280
1301
  }) {
1281
- if (!drag.draggable) return reserve ? /* @__PURE__ */ jsx7(Box, { "data-slot": "drag" }) : null;
1302
+ if (!drag.draggable) return reserve ? /* @__PURE__ */ jsx8(Box, { "data-slot": "drag" }) : null;
1282
1303
  return (
1283
1304
  // display:flex, as on the checkbox below: the grip is an inline-grid, and in
1284
1305
  // a block parent an inline box sits on the text baseline — the line box adds
1285
1306
  // descender leading under it (21px glyph in a 31px slot) and drops the grip
1286
1307
  // 5px below the row's centre. A flex parent has no baseline to sit on.
1287
- /* @__PURE__ */ jsx7(
1308
+ /* @__PURE__ */ jsx8(
1288
1309
  Box,
1289
1310
  {
1290
1311
  "data-slot": "drag",
1291
1312
  sx: { position: "relative", zIndex: 1, display: "flex", alignItems: "center" },
1292
- children: /* @__PURE__ */ jsx7(
1313
+ children: /* @__PURE__ */ jsx8(
1293
1314
  DragHandle,
1294
1315
  {
1295
1316
  handleProps: drag.handleProps,
@@ -1308,15 +1329,16 @@ function SelectSlot({
1308
1329
  onToggleSelect,
1309
1330
  testId
1310
1331
  }) {
1311
- if (!selectable) return reserve ? /* @__PURE__ */ jsx7(Box, { "data-slot": "select" }) : null;
1332
+ const copy = useDataViewsCopy();
1333
+ if (!selectable) return reserve ? /* @__PURE__ */ jsx8(Box, { "data-slot": "select" }) : null;
1312
1334
  return (
1313
1335
  // z-index 1: above the stretched link, or the anchor swallows the click.
1314
- /* @__PURE__ */ jsx7(
1336
+ /* @__PURE__ */ jsx8(
1315
1337
  Box,
1316
1338
  {
1317
1339
  "data-slot": "select",
1318
1340
  sx: { position: "relative", zIndex: 1, mx: CHECKBOX_PAD, display: "flex" },
1319
- children: /* @__PURE__ */ jsx7(
1341
+ children: /* @__PURE__ */ jsx8(
1320
1342
  Checkbox,
1321
1343
  {
1322
1344
  checked: selected,
@@ -1327,7 +1349,7 @@ function SelectSlot({
1327
1349
  },
1328
1350
  size: "small",
1329
1351
  "data-testid": testId,
1330
- "aria-label": "Selecionar"
1352
+ "aria-label": copy.selection.selectRow
1331
1353
  }
1332
1354
  )
1333
1355
  }
@@ -1342,17 +1364,17 @@ function DiscloseSlot({
1342
1364
  controls,
1343
1365
  testId
1344
1366
  }) {
1345
- if (!expandable) return reserve ? /* @__PURE__ */ jsx7(Box, { "data-slot": "disclose" }) : null;
1367
+ if (!expandable) return reserve ? /* @__PURE__ */ jsx8(Box, { "data-slot": "disclose" }) : null;
1346
1368
  return (
1347
1369
  // z-index 1 and flex for the same reasons the other two gutters use them:
1348
1370
  // above a stretched link that would otherwise swallow the click, and out of
1349
1371
  // a baseline that would drop the glyph below the row's centre.
1350
- /* @__PURE__ */ jsx7(
1372
+ /* @__PURE__ */ jsx8(
1351
1373
  Box,
1352
1374
  {
1353
1375
  "data-slot": "disclose",
1354
1376
  sx: { position: "relative", zIndex: 1, display: "flex", alignItems: "center" },
1355
- children: /* @__PURE__ */ jsx7(
1377
+ children: /* @__PURE__ */ jsx8(
1356
1378
  IconButton,
1357
1379
  {
1358
1380
  size: "small",
@@ -1373,7 +1395,7 @@ function DiscloseSlot({
1373
1395
  // angle, not by the animation, so dropping the tween loses nothing.
1374
1396
  "@media (prefers-reduced-motion: reduce)": { transition: "none" }
1375
1397
  },
1376
- children: /* @__PURE__ */ jsx7(KeyboardArrowRightIcon, { fontSize: "small" })
1398
+ children: /* @__PURE__ */ jsx8(KeyboardArrowRightIcon, { fontSize: "small" })
1377
1399
  }
1378
1400
  )
1379
1401
  }
@@ -1382,7 +1404,7 @@ function DiscloseSlot({
1382
1404
  }
1383
1405
 
1384
1406
  // src/components/data-display/DataViews/base-list-card.tsx
1385
- import { Fragment as Fragment5, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
1407
+ import { Fragment as Fragment5, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
1386
1408
  function useResolvedCells(props, inGroup) {
1387
1409
  const groupCells = useCellConfig();
1388
1410
  const cells = groupCells ?? props.cells ?? null;
@@ -1400,8 +1422,8 @@ function RowContent({
1400
1422
  }) {
1401
1423
  if (configured && cells != null) {
1402
1424
  return /* @__PURE__ */ jsxs5(Fragment5, { children: [
1403
- /* @__PURE__ */ jsx8(ListCardCells, { cells, row: card.row }),
1404
- /* @__PURE__ */ jsx8(
1425
+ /* @__PURE__ */ jsx9(ListCardCells, { cells, row: card.row }),
1426
+ /* @__PURE__ */ jsx9(
1405
1427
  ListCardActions,
1406
1428
  {
1407
1429
  actions: actionable ? card.actions : void 0,
@@ -1413,7 +1435,7 @@ function RowContent({
1413
1435
  ] });
1414
1436
  }
1415
1437
  return /* @__PURE__ */ jsxs5(Fragment5, { children: [
1416
- /* @__PURE__ */ jsx8(
1438
+ /* @__PURE__ */ jsx9(
1417
1439
  ListCardCaption,
1418
1440
  {
1419
1441
  title: card.title,
@@ -1423,8 +1445,8 @@ function RowContent({
1423
1445
  testId: slot("title")
1424
1446
  }
1425
1447
  ),
1426
- /* @__PURE__ */ jsx8(ListCardMeta, { meta: card.meta, metaSlot: card.metaSlot, trailingRule: card.value != null }),
1427
- /* @__PURE__ */ jsx8(
1448
+ /* @__PURE__ */ jsx9(ListCardMeta, { meta: card.meta, metaSlot: card.metaSlot, trailingRule: card.value != null }),
1449
+ /* @__PURE__ */ jsx9(
1428
1450
  ListCardTail,
1429
1451
  {
1430
1452
  value: card.value,
@@ -1443,8 +1465,8 @@ function ExpandableBody({
1443
1465
  pad,
1444
1466
  children
1445
1467
  }) {
1446
- if (!disclosure.expandable) return /* @__PURE__ */ jsx8(Fragment5, {});
1447
- return /* @__PURE__ */ jsx8(Box, { sx: { gridColumn: "1 / -1", minWidth: 0 }, children: /* @__PURE__ */ jsx8(Collapse, { in: disclosure.expanded, timeout: 150, children: /* @__PURE__ */ jsx8(
1468
+ if (!disclosure.expandable) return /* @__PURE__ */ jsx9(Fragment5, {});
1469
+ return /* @__PURE__ */ jsx9(Box, { sx: { gridColumn: "1 / -1", minWidth: 0 }, children: /* @__PURE__ */ jsx9(Collapse, { in: disclosure.expanded, timeout: 150, children: /* @__PURE__ */ jsx9(
1448
1470
  Box,
1449
1471
  {
1450
1472
  id: disclosure.regionId,
@@ -1489,8 +1511,8 @@ function BaseListCard(props) {
1489
1511
  ...drag.itemProps,
1490
1512
  sx: rowStyles(props, shell, cellTemplate),
1491
1513
  children: [
1492
- drag.dropEdge != null && /* @__PURE__ */ jsx8(DropIndicator, { edge: drag.dropEdge }),
1493
- /* @__PURE__ */ jsx8(
1514
+ drag.dropEdge != null && /* @__PURE__ */ jsx9(DropIndicator, { edge: drag.dropEdge }),
1515
+ /* @__PURE__ */ jsx9(
1494
1516
  DiscloseSlot,
1495
1517
  {
1496
1518
  expandable: disclosure.expandable,
@@ -1501,8 +1523,8 @@ function BaseListCard(props) {
1501
1523
  testId: slot("disclose")
1502
1524
  }
1503
1525
  ),
1504
- /* @__PURE__ */ jsx8(DragSlot, { drag, reserve, testId: slot("drag") }),
1505
- /* @__PURE__ */ jsx8(
1526
+ /* @__PURE__ */ jsx9(DragSlot, { drag, reserve, testId: slot("drag") }),
1527
+ /* @__PURE__ */ jsx9(
1506
1528
  SelectSlot,
1507
1529
  {
1508
1530
  selectable,
@@ -1512,9 +1534,9 @@ function BaseListCard(props) {
1512
1534
  testId: slot("checkbox")
1513
1535
  }
1514
1536
  ),
1515
- /* @__PURE__ */ jsx8(Box, { "data-slot": "leading", sx: { display: "flex", alignItems: "center" }, children: props.leading }),
1516
- /* @__PURE__ */ jsx8(RowContent, { card: props, cells, configured, slot, actionable, meta }),
1517
- /* @__PURE__ */ jsx8(ExpandableBody, { disclosure, padY, pad, children: props.children })
1537
+ /* @__PURE__ */ jsx9(Box, { "data-slot": "leading", sx: { display: "flex", alignItems: "center" }, children: props.leading }),
1538
+ /* @__PURE__ */ jsx9(RowContent, { card: props, cells, configured, slot, actionable, meta }),
1539
+ /* @__PURE__ */ jsx9(ExpandableBody, { disclosure, padY, pad, children: props.children })
1518
1540
  ]
1519
1541
  }
1520
1542
  );
@@ -1530,7 +1552,7 @@ import { useEffect as useEffect5, useState as useState11 } from "react";
1530
1552
  import { Box as Box5, Link } from "@mui/material";
1531
1553
 
1532
1554
  // src/components/data-display/DataViews/data-views-category-pill.tsx
1533
- import { jsx as jsx9 } from "react/jsx-runtime";
1555
+ import { jsx as jsx10 } from "react/jsx-runtime";
1534
1556
  function emitPillDiff(fieldId, before, after, onTogglePill) {
1535
1557
  const had = new Set(before);
1536
1558
  const wants = new Set(after);
@@ -1556,11 +1578,13 @@ function PillControl({
1556
1578
  testIdPrefix,
1557
1579
  layout = "pill"
1558
1580
  }) {
1581
+ const copy = useDataViewsCopy();
1559
1582
  const testId = `${testIdPrefix}-filter-${fieldId}`;
1560
1583
  if (pill.control === "category") {
1561
- return /* @__PURE__ */ jsx9(
1584
+ return /* @__PURE__ */ jsx10(
1562
1585
  CategorySelect,
1563
1586
  {
1587
+ copy: copy.categorySelect,
1564
1588
  placeholder: pill.label,
1565
1589
  label: layout === "stacked" ? pill.label : void 0,
1566
1590
  fullWidth: layout === "stacked",
@@ -1571,7 +1595,7 @@ function PillControl({
1571
1595
  }
1572
1596
  );
1573
1597
  }
1574
- return /* @__PURE__ */ jsx9(
1598
+ return /* @__PURE__ */ jsx10(
1575
1599
  MultiSelectDropdown,
1576
1600
  {
1577
1601
  label: pill.label,
@@ -1579,10 +1603,10 @@ function PillControl({
1579
1603
  selected: new Set(selected),
1580
1604
  onToggle: (value, checked) => onTogglePill(fieldId, value, checked),
1581
1605
  onClear: () => onClearField(fieldId),
1582
- allLabel: "Todas",
1606
+ allLabel: copy.filters.allOption,
1583
1607
  searchable: pill.searchEnabled ? true : void 0,
1584
- searchPlaceholder: "Buscar\u2026",
1585
- noResultsLabel: "Nenhum resultado",
1608
+ searchPlaceholder: copy.filters.optionSearchPlaceholder,
1609
+ noResultsLabel: copy.filters.optionsEmpty,
1586
1610
  layout,
1587
1611
  onOpenChange,
1588
1612
  "data-testid": testId
@@ -1599,7 +1623,7 @@ import { useState as useState4 } from "react";
1599
1623
  // src/components/data-display/DataViews/data-views-number-input.tsx
1600
1624
  import { Box as Box2, TextField } from "@mui/material";
1601
1625
  import { useEffect as useEffect2, useState as useState3 } from "react";
1602
- import { jsx as jsx10 } from "react/jsx-runtime";
1626
+ import { jsx as jsx11 } from "react/jsx-runtime";
1603
1627
  var ALLOWED = /[^\d.,]/g;
1604
1628
  function parsePtBrNumber(text) {
1605
1629
  const cleaned = text.replace(ALLOWED, "");
@@ -1633,7 +1657,7 @@ function NumberBoundInput({
1633
1657
  useEffect2(() => {
1634
1658
  setText((current) => parsePtBrNumber(current) === applied ? current : formatPtBrNumber(applied));
1635
1659
  }, [applied]);
1636
- return /* @__PURE__ */ jsx10(
1660
+ return /* @__PURE__ */ jsx11(
1637
1661
  TextField,
1638
1662
  {
1639
1663
  size: "small",
@@ -1653,7 +1677,7 @@ function NumberBoundInput({
1653
1677
  InputLabelProps: { shrink: true },
1654
1678
  inputProps: { "data-testid": testId, inputMode: "decimal", autoComplete: "off" },
1655
1679
  InputProps: unit ? {
1656
- startAdornment: /* @__PURE__ */ jsx10(Box2, { component: "span", sx: { mr: 0.5, color: "text.secondary" }, children: unit })
1680
+ startAdornment: /* @__PURE__ */ jsx11(Box2, { component: "span", sx: { mr: 0.5, color: "text.secondary" }, children: unit })
1657
1681
  } : void 0,
1658
1682
  sx: { width: 140 }
1659
1683
  }
@@ -1674,54 +1698,51 @@ function shiftDays(date, days) {
1674
1698
  next.setDate(next.getDate() + days);
1675
1699
  return next;
1676
1700
  }
1677
- var DAY_RANGE_PRESETS = [
1678
- {
1679
- id: "hoje",
1680
- label: "Hoje",
1681
- range: () => {
1682
- const today = isoDay(/* @__PURE__ */ new Date());
1683
- return { min: today, max: today };
1684
- }
1685
- },
1686
- {
1687
- id: "ontem",
1688
- label: "Ontem",
1689
- range: () => {
1690
- const yesterday = isoDay(shiftDays(/* @__PURE__ */ new Date(), -1));
1691
- return { min: yesterday, max: yesterday };
1692
- }
1693
- },
1694
- {
1695
- id: "semana",
1696
- label: "Esta semana",
1697
- range: () => {
1698
- const now = /* @__PURE__ */ new Date();
1699
- const sunday = shiftDays(now, -now.getDay());
1700
- return { min: isoDay(sunday), max: isoDay(shiftDays(sunday, 6)) };
1701
- }
1702
- },
1703
- {
1704
- id: "mes",
1705
- label: "Este m\xEAs",
1706
- range: () => {
1707
- const now = /* @__PURE__ */ new Date();
1708
- const year = now.getFullYear();
1709
- const month = now.getMonth();
1710
- return { min: isoDay(new Date(year, month, 1)), max: isoDay(new Date(year, month + 1, 0)) };
1711
- }
1712
- },
1713
- {
1714
- id: "ano",
1715
- label: "Este ano",
1716
- range: () => {
1717
- const year = (/* @__PURE__ */ new Date()).getFullYear();
1718
- return { min: `${year}-01-01`, max: `${year}-12-31` };
1701
+ function dayRangePresets(copy) {
1702
+ return [
1703
+ {
1704
+ id: "hoje",
1705
+ range: () => {
1706
+ const today = isoDay(/* @__PURE__ */ new Date());
1707
+ return { min: today, max: today };
1708
+ }
1709
+ },
1710
+ {
1711
+ id: "ontem",
1712
+ range: () => {
1713
+ const yesterday = isoDay(shiftDays(/* @__PURE__ */ new Date(), -1));
1714
+ return { min: yesterday, max: yesterday };
1715
+ }
1716
+ },
1717
+ {
1718
+ id: "semana",
1719
+ range: () => {
1720
+ const now = /* @__PURE__ */ new Date();
1721
+ const sunday = shiftDays(now, -now.getDay());
1722
+ return { min: isoDay(sunday), max: isoDay(shiftDays(sunday, 6)) };
1723
+ }
1724
+ },
1725
+ {
1726
+ id: "mes",
1727
+ range: () => {
1728
+ const now = /* @__PURE__ */ new Date();
1729
+ const year = now.getFullYear();
1730
+ const month = now.getMonth();
1731
+ return { min: isoDay(new Date(year, month, 1)), max: isoDay(new Date(year, month + 1, 0)) };
1732
+ }
1733
+ },
1734
+ {
1735
+ id: "ano",
1736
+ range: () => {
1737
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
1738
+ return { min: `${year}-01-01`, max: `${year}-12-31` };
1739
+ }
1719
1740
  }
1720
- }
1721
- ];
1722
- function presetsFor(field) {
1741
+ ].map((preset) => ({ ...preset, label: copy.filters.rangePresets[preset.id] ?? preset.id }));
1742
+ }
1743
+ function presetsFor(field, copy) {
1723
1744
  if (field.presets) return field.presets;
1724
- return field.kind === "day" ? DAY_RANGE_PRESETS : [];
1745
+ return field.kind === "day" ? dayRangePresets(copy) : [];
1725
1746
  }
1726
1747
  function resolvePreset(preset) {
1727
1748
  return typeof preset.range === "function" ? preset.range() : preset.range;
@@ -1733,14 +1754,14 @@ function isPresetActive(preset, value) {
1733
1754
  }
1734
1755
 
1735
1756
  // src/components/data-display/DataViews/data-views-preset-chips.tsx
1736
- import { jsx as jsx11 } from "react/jsx-runtime";
1757
+ import { jsx as jsx12 } from "react/jsx-runtime";
1737
1758
  function PresetChip({
1738
1759
  preset,
1739
1760
  active,
1740
1761
  onSelect,
1741
1762
  testId
1742
1763
  }) {
1743
- return /* @__PURE__ */ jsx11(
1764
+ return /* @__PURE__ */ jsx12(
1744
1765
  Box3,
1745
1766
  {
1746
1767
  component: "button",
@@ -1775,14 +1796,14 @@ function RangePresets({
1775
1796
  testId
1776
1797
  }) {
1777
1798
  if (presets.length === 0) return null;
1778
- return /* @__PURE__ */ jsx11(
1799
+ return /* @__PURE__ */ jsx12(
1779
1800
  Box3,
1780
1801
  {
1781
1802
  "data-testid": `${testId}-presets`,
1782
1803
  sx: { display: "flex", flexWrap: "wrap", gap: 0.75 },
1783
1804
  children: presets.map((preset) => {
1784
1805
  const active = isPresetActive(preset, value);
1785
- return /* @__PURE__ */ jsx11(
1806
+ return /* @__PURE__ */ jsx12(
1786
1807
  PresetChip,
1787
1808
  {
1788
1809
  preset,
@@ -1845,7 +1866,7 @@ function numericRange(range) {
1845
1866
  }
1846
1867
 
1847
1868
  // src/components/data-display/DataViews/data-views-range-pill.tsx
1848
- import { Fragment as Fragment6, jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
1869
+ import { Fragment as Fragment6, jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
1849
1870
  function BoundField({
1850
1871
  field,
1851
1872
  label,
@@ -1854,7 +1875,7 @@ function BoundField({
1854
1875
  testId
1855
1876
  }) {
1856
1877
  if (field.kind === "day") {
1857
- return /* @__PURE__ */ jsx12(
1878
+ return /* @__PURE__ */ jsx13(
1858
1879
  DayBoundInput,
1859
1880
  {
1860
1881
  label,
@@ -1864,7 +1885,7 @@ function BoundField({
1864
1885
  }
1865
1886
  );
1866
1887
  }
1867
- return /* @__PURE__ */ jsx12(
1888
+ return /* @__PURE__ */ jsx13(
1868
1889
  NumberBoundInput,
1869
1890
  {
1870
1891
  label,
@@ -1881,11 +1902,12 @@ function RangeBounds({
1881
1902
  onChange,
1882
1903
  testId
1883
1904
  }) {
1905
+ const copy = useDataViewsCopy();
1884
1906
  const inverted = isRangeInverted(value);
1885
1907
  return /* @__PURE__ */ jsxs6(Box4, { "data-testid": `${testId}-panel`, children: [
1886
- /* @__PURE__ */ jsx12(Box4, { sx: { "&:not(:empty)": { mb: 1.5 } }, children: /* @__PURE__ */ jsx12(RangePresets, { presets: presetsFor(field), value, onChange, testId }) }),
1908
+ /* @__PURE__ */ jsx13(Box4, { sx: { "&:not(:empty)": { mb: 1.5 } }, children: /* @__PURE__ */ jsx13(RangePresets, { presets: presetsFor(field, copy), value, onChange, testId }) }),
1887
1909
  /* @__PURE__ */ jsxs6(Box4, { sx: { display: "flex", alignItems: "center", gap: 1.5 }, children: [
1888
- /* @__PURE__ */ jsx12(
1910
+ /* @__PURE__ */ jsx13(
1889
1911
  BoundField,
1890
1912
  {
1891
1913
  field,
@@ -1895,27 +1917,27 @@ function RangeBounds({
1895
1917
  testId: `${testId}-min`
1896
1918
  }
1897
1919
  ),
1898
- /* @__PURE__ */ jsx12(
1920
+ /* @__PURE__ */ jsx13(
1899
1921
  BoundField,
1900
1922
  {
1901
1923
  field,
1902
- label: "At\xE9",
1924
+ label: copy.filters.rangeEnd,
1903
1925
  value: value.max,
1904
1926
  onChange: (max) => onChange({ ...value, max }),
1905
1927
  testId: `${testId}-max`
1906
1928
  }
1907
1929
  )
1908
1930
  ] }),
1909
- inverted && /* @__PURE__ */ jsx12(
1931
+ inverted && /* @__PURE__ */ jsx13(
1910
1932
  Typography,
1911
1933
  {
1912
1934
  component: "p",
1913
1935
  "data-testid": `${testId}-inverted`,
1914
1936
  sx: { mt: 0.75, fontSize: "0.75rem", color: "error.main" },
1915
- children: "O in\xEDcio precisa ser menor que o fim."
1937
+ children: copy.filters.rangeInvalid
1916
1938
  }
1917
1939
  ),
1918
- field.kind === "day" && !inverted && /* @__PURE__ */ jsx12(
1940
+ field.kind === "day" && !inverted && /* @__PURE__ */ jsx13(
1919
1941
  Typography,
1920
1942
  {
1921
1943
  component: "p",
@@ -1931,17 +1953,18 @@ function ClearAffordance({
1931
1953
  onClear,
1932
1954
  testId
1933
1955
  }) {
1956
+ const copy = useDataViewsCopy();
1934
1957
  const clear = (event) => {
1935
1958
  event.stopPropagation();
1936
1959
  onClear();
1937
1960
  };
1938
- return /* @__PURE__ */ jsx12(
1961
+ return /* @__PURE__ */ jsx13(
1939
1962
  Box4,
1940
1963
  {
1941
1964
  component: "span",
1942
1965
  role: "button",
1943
1966
  tabIndex: 0,
1944
- "aria-label": `Limpar ${label}`,
1967
+ "aria-label": copy.filters.clearRange(label),
1945
1968
  "data-testid": testId,
1946
1969
  onClick: clear,
1947
1970
  onKeyDown: (event) => {
@@ -1950,7 +1973,7 @@ function ClearAffordance({
1950
1973
  clear(event);
1951
1974
  },
1952
1975
  sx: { display: "inline-flex", borderRadius: 999, p: 0.125, "&:hover": { bgcolor: "action.selected" } },
1953
- children: /* @__PURE__ */ jsx12(CloseIcon, { sx: { fontSize: 14 } })
1976
+ children: /* @__PURE__ */ jsx13(CloseIcon, { sx: { fontSize: 14 } })
1954
1977
  }
1955
1978
  );
1956
1979
  }
@@ -1965,7 +1988,7 @@ function RangeTrigger({
1965
1988
  const active = isRangeSet(value);
1966
1989
  const inverted = isRangeInverted(value);
1967
1990
  const tone = inverted ? "error.main" : active ? "primary.main" : "divider";
1968
- return /* @__PURE__ */ jsx12(
1991
+ return /* @__PURE__ */ jsx13(
1969
1992
  Button2,
1970
1993
  {
1971
1994
  variant: "outlined",
@@ -1975,8 +1998,8 @@ function RangeTrigger({
1975
1998
  "aria-haspopup": "dialog",
1976
1999
  "aria-expanded": open,
1977
2000
  onClick: (event) => onOpen(event.currentTarget),
1978
- startIcon: active ? /* @__PURE__ */ jsx12(ClearAffordance, { label: field.label, onClear: () => onChange({}), testId: `${testId}-clear-inline` }) : void 0,
1979
- endIcon: /* @__PURE__ */ jsx12(ChevronDownIcon, { sx: { fontSize: 16 } }),
2001
+ startIcon: active ? /* @__PURE__ */ jsx13(ClearAffordance, { label: field.label, onClear: () => onChange({}), testId: `${testId}-clear-inline` }) : void 0,
2002
+ endIcon: /* @__PURE__ */ jsx13(ChevronDownIcon, { sx: { fontSize: 16 } }),
1980
2003
  sx: {
1981
2004
  borderRadius: 999,
1982
2005
  height: 34,
@@ -1994,7 +2017,7 @@ function RangeTrigger({
1994
2017
  bgcolor: active ? "action.selected" : "action.hover"
1995
2018
  }
1996
2019
  },
1997
- children: /* @__PURE__ */ jsx12(Box4, { component: "span", sx: { overflow: "hidden", textOverflow: "ellipsis" }, children: active ? rangeChipLabel(field, value) : field.label })
2020
+ children: /* @__PURE__ */ jsx13(Box4, { component: "span", sx: { overflow: "hidden", textOverflow: "ellipsis" }, children: active ? rangeChipLabel(field, value) : field.label })
1998
2021
  }
1999
2022
  );
2000
2023
  }
@@ -2009,7 +2032,7 @@ function RangePill({
2009
2032
  const active = isRangeSet(value);
2010
2033
  const testId = `${testIdPrefix}-range-${field.id}`;
2011
2034
  return /* @__PURE__ */ jsxs6(Fragment6, { children: [
2012
- /* @__PURE__ */ jsx12(
2035
+ /* @__PURE__ */ jsx13(
2013
2036
  RangeTrigger,
2014
2037
  {
2015
2038
  field,
@@ -2035,10 +2058,10 @@ function RangePill({
2035
2058
  anchorOrigin: { vertical: "bottom", horizontal: "left" },
2036
2059
  slotProps: { paper: { sx: { p: 2, mt: 0.5 } } },
2037
2060
  children: [
2038
- /* @__PURE__ */ jsx12(RangeBounds, { field, value, onChange, testId }),
2061
+ /* @__PURE__ */ jsx13(RangeBounds, { field, value, onChange, testId }),
2039
2062
  active && /* @__PURE__ */ jsxs6(Box4, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, mt: 1.5 }, children: [
2040
- /* @__PURE__ */ jsx12(Typography, { component: "span", sx: { fontSize: "0.75rem", color: "text.secondary" }, children: rangeChipLabel(field, value) }),
2041
- /* @__PURE__ */ jsx12(
2063
+ /* @__PURE__ */ jsx13(Typography, { component: "span", sx: { fontSize: "0.75rem", color: "text.secondary" }, children: rangeChipLabel(field, value) }),
2064
+ /* @__PURE__ */ jsx13(
2042
2065
  Button2,
2043
2066
  {
2044
2067
  variant: "text",
@@ -2061,14 +2084,15 @@ function PanelRangeField({
2061
2084
  onChange,
2062
2085
  testId
2063
2086
  }) {
2087
+ const copy = useDataViewsCopy();
2064
2088
  if (field.kind === "day") {
2065
2089
  return /* @__PURE__ */ jsxs6(Box4, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: [
2066
- /* @__PURE__ */ jsx12(Typography, { component: "span", sx: { fontSize: "0.75rem", fontWeight: 500, color: "text.secondary" }, children: field.label }),
2067
- /* @__PURE__ */ jsx12(RangeBounds, { field, value, onChange, testId })
2090
+ /* @__PURE__ */ jsx13(Typography, { component: "span", sx: { fontSize: "0.75rem", fontWeight: 500, color: "text.secondary" }, children: field.label }),
2091
+ /* @__PURE__ */ jsx13(RangeBounds, { field, value, onChange, testId })
2068
2092
  ] });
2069
2093
  }
2070
2094
  return /* @__PURE__ */ jsxs6(Box4, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: [
2071
- /* @__PURE__ */ jsx12(
2095
+ /* @__PURE__ */ jsx13(
2072
2096
  TableFilter.RangeField,
2073
2097
  {
2074
2098
  label: field.label,
@@ -2078,12 +2102,12 @@ function PanelRangeField({
2078
2102
  testId
2079
2103
  }
2080
2104
  ),
2081
- /* @__PURE__ */ jsx12(RangePresets, { presets: presetsFor(field), value, onChange, testId })
2105
+ /* @__PURE__ */ jsx13(RangePresets, { presets: presetsFor(field, copy), value, onChange, testId })
2082
2106
  ] });
2083
2107
  }
2084
2108
 
2085
2109
  // src/components/data-display/DataViews/data-views-filter-panel.tsx
2086
- import { Fragment as Fragment7, jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
2110
+ import { Fragment as Fragment7, jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
2087
2111
  function PillField({
2088
2112
  field,
2089
2113
  selected,
@@ -2093,7 +2117,7 @@ function PillField({
2093
2117
  }) {
2094
2118
  const testId = `${testIdPrefix}-filter-${field.id}`;
2095
2119
  if (field.searchEnabled || field.control === "multiselect" || field.control === "category") {
2096
- return /* @__PURE__ */ jsx13(
2120
+ return /* @__PURE__ */ jsx14(
2097
2121
  PillControl,
2098
2122
  {
2099
2123
  fieldId: field.id,
@@ -2106,7 +2130,7 @@ function PillField({
2106
2130
  }
2107
2131
  );
2108
2132
  }
2109
- return /* @__PURE__ */ jsx13(
2133
+ return /* @__PURE__ */ jsx14(
2110
2134
  TableFilter.CheckboxField,
2111
2135
  {
2112
2136
  label: field.label,
@@ -2129,19 +2153,20 @@ function FilterControls({
2129
2153
  onChangeRange,
2130
2154
  onClearField
2131
2155
  }) {
2156
+ const copy = useDataViewsCopy();
2132
2157
  return /* @__PURE__ */ jsxs7(Fragment7, { children: [
2133
- /* @__PURE__ */ jsx13(
2158
+ /* @__PURE__ */ jsx14(
2134
2159
  TableFilter.Keyword,
2135
2160
  {
2136
2161
  value: search,
2137
2162
  onChange: onSearchChange,
2138
- label: "Buscar em todas as colunas",
2139
- placeholder: "Pressione Enter para filtrar",
2163
+ label: copy.search.allColumnsLabel,
2164
+ placeholder: copy.search.keywordPlaceholder,
2140
2165
  testId: `${testIdPrefix}-search-all`
2141
2166
  }
2142
2167
  ),
2143
- (fields.length > 0 || rangeFields.length > 0) && /* @__PURE__ */ jsxs7(TableFilter.Section, { title: "Filtros", children: [
2144
- fields.map((field) => /* @__PURE__ */ jsx13(
2168
+ (fields.length > 0 || rangeFields.length > 0) && /* @__PURE__ */ jsxs7(TableFilter.Section, { title: copy.filters.panelTitle, children: [
2169
+ fields.map((field) => /* @__PURE__ */ jsx14(
2145
2170
  PillField,
2146
2171
  {
2147
2172
  field,
@@ -2152,7 +2177,7 @@ function FilterControls({
2152
2177
  },
2153
2178
  field.id
2154
2179
  )),
2155
- rangeFields.map((field) => /* @__PURE__ */ jsx13(
2180
+ rangeFields.map((field) => /* @__PURE__ */ jsx14(
2156
2181
  PanelRangeField,
2157
2182
  {
2158
2183
  field,
@@ -2166,13 +2191,14 @@ function FilterControls({
2166
2191
  ] });
2167
2192
  }
2168
2193
  function GridFilterPanel(props) {
2169
- return /* @__PURE__ */ jsx13(
2194
+ const copy = useDataViewsCopy();
2195
+ return /* @__PURE__ */ jsx14(
2170
2196
  TableFilter.Panel,
2171
2197
  {
2172
2198
  onClearAll: props.onClearAll,
2173
2199
  clearTestId: `${props.testIdPrefix}-clear-filters`,
2174
- ariaLabel: "Filtros",
2175
- children: /* @__PURE__ */ jsx13(FilterControls, { ...props })
2200
+ ariaLabel: copy.filters.panelTitle,
2201
+ children: /* @__PURE__ */ jsx14(FilterControls, { ...props })
2176
2202
  }
2177
2203
  );
2178
2204
  }
@@ -2181,17 +2207,18 @@ function FilterDialog({
2181
2207
  onClose,
2182
2208
  ...props
2183
2209
  }) {
2184
- return /* @__PURE__ */ jsx13(
2210
+ const copy = useDataViewsCopy();
2211
+ return /* @__PURE__ */ jsx14(
2185
2212
  StackedModal,
2186
2213
  {
2187
2214
  open,
2188
2215
  onClose,
2189
- navigationTitle: "Filtros",
2216
+ navigationTitle: copy.filters.panelTitle,
2190
2217
  modalId: `${props.testIdPrefix}-filters`,
2191
2218
  maxWidth: "xs",
2192
2219
  dataTestId: `${props.testIdPrefix}-filter-dialog`,
2193
- children: /* @__PURE__ */ jsx13(StackedModalContent, { children: /* @__PURE__ */ jsxs7(Box5, { sx: { display: "flex", flexDirection: "column", gap: 2.5 }, children: [
2194
- /* @__PURE__ */ jsx13(Box5, { sx: { display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx13(
2220
+ children: /* @__PURE__ */ jsx14(StackedModalContent, { children: /* @__PURE__ */ jsxs7(Box5, { sx: { display: "flex", flexDirection: "column", gap: 2.5 }, children: [
2221
+ /* @__PURE__ */ jsx14(Box5, { sx: { display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx14(
2195
2222
  Link,
2196
2223
  {
2197
2224
  component: "button",
@@ -2203,7 +2230,7 @@ function FilterDialog({
2203
2230
  children: "Clear All Filters"
2204
2231
  }
2205
2232
  ) }),
2206
- /* @__PURE__ */ jsx13(FilterControls, { ...props })
2233
+ /* @__PURE__ */ jsx14(FilterControls, { ...props })
2207
2234
  ] }) })
2208
2235
  }
2209
2236
  );
@@ -2213,7 +2240,7 @@ function FilterDialog({
2213
2240
  import React3 from "react";
2214
2241
 
2215
2242
  // src/components/data-display/DataViews/data-views-grid-helpers.tsx
2216
- import { jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
2243
+ import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
2217
2244
  function isActionsColumn(col) {
2218
2245
  return col.type === "actions" || col.id === "actions";
2219
2246
  }
@@ -2226,7 +2253,7 @@ function buildGridColumns(columns, visibleColumns, onRowClick) {
2226
2253
  hidden,
2227
2254
  cell: (ctx) => {
2228
2255
  const content = col.cell ? col.cell(ctx) : ctx.value == null ? "" : String(ctx.value);
2229
- return /* @__PURE__ */ jsx14(
2256
+ return /* @__PURE__ */ jsx15(
2230
2257
  Box,
2231
2258
  {
2232
2259
  onClick: () => onRowClick(ctx.row),
@@ -2257,6 +2284,7 @@ function buildRowActionsColumn(config) {
2257
2284
  };
2258
2285
  }
2259
2286
  function renderAutoKebab(kebabActions, row, testIdPrefix, getRowId) {
2287
+ const copy = useDataViewsCopy();
2260
2288
  const items = kebabActions.filter((action) => action.isVisible?.(row) ?? true).map((action) => ({
2261
2289
  id: action.id,
2262
2290
  label: action.rowLabel ? action.rowLabel(row) : action.label,
@@ -2264,12 +2292,12 @@ function renderAutoKebab(kebabActions, row, testIdPrefix, getRowId) {
2264
2292
  onClick: () => void action.onSelect([row])
2265
2293
  }));
2266
2294
  if (items.length === 0) return null;
2267
- return /* @__PURE__ */ jsx14(
2295
+ return /* @__PURE__ */ jsx15(
2268
2296
  DropdownMenu,
2269
2297
  {
2270
2298
  size: "sm",
2271
2299
  items,
2272
- trigger: /* @__PURE__ */ jsx14(Button, { variant: "text", size: "sm", dataTestId: `${testIdPrefix}-actions-${getRowId(row)}`, "aria-label": "A\xE7\xF5es", children: "\u22EE" })
2300
+ trigger: /* @__PURE__ */ jsx15(Button, { variant: "text", size: "sm", dataTestId: `${testIdPrefix}-actions-${getRowId(row)}`, "aria-label": copy.grid.rowActions, children: "\u22EE" })
2273
2301
  }
2274
2302
  );
2275
2303
  }
@@ -2323,20 +2351,17 @@ function renderBulkActions({
2323
2351
  clearSelection,
2324
2352
  testIdPrefix
2325
2353
  }) {
2354
+ const copy = useDataViewsCopy();
2326
2355
  if (selectedRows.length === 0) return void 0;
2327
2356
  if (rowActions) {
2328
2357
  const items = bulkMenuItems(rowActions, selectedRows, clearSelection);
2329
2358
  if (items.length === 0) return void 0;
2330
- return /* @__PURE__ */ jsx14(
2359
+ return /* @__PURE__ */ jsx15(
2331
2360
  DropdownMenu,
2332
2361
  {
2333
2362
  size: "sm",
2334
2363
  items,
2335
- trigger: /* @__PURE__ */ jsxs8(Button, { variant: "outline", size: "sm", dataTestId: `${testIdPrefix}-bulk-actions`, children: [
2336
- "A\xE7\xF5es (",
2337
- selectedRows.length,
2338
- ") \u25BE"
2339
- ] })
2364
+ trigger: /* @__PURE__ */ jsx15(Button, { variant: "outline", size: "sm", dataTestId: `${testIdPrefix}-bulk-actions`, children: copy.grid.bulkActions(selectedRows.length) })
2340
2365
  }
2341
2366
  );
2342
2367
  }
@@ -2356,7 +2381,7 @@ function cardGridTracks(targetWidth) {
2356
2381
  }
2357
2382
 
2358
2383
  // src/components/data-display/DataViews/DataViewsBoard.tsx
2359
- import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
2384
+ import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
2360
2385
  var DEFAULT_EXTRA_LABEL = "Sem etapa";
2361
2386
  function groupValueOf(row, groupBy) {
2362
2387
  const value = row[groupBy];
@@ -2398,29 +2423,27 @@ function BoardColumnHeader({
2398
2423
  sum,
2399
2424
  testId
2400
2425
  }) {
2426
+ const copy = useDataViewsCopy();
2401
2427
  return /* @__PURE__ */ jsxs9(Box, { sx: { display: "flex", flexDirection: "column", gap: 0.25 }, children: [
2402
2428
  /* @__PURE__ */ jsxs9(Box, { sx: { display: "flex", alignItems: "baseline", justifyContent: "space-between", gap: 1 }, children: [
2403
- /* @__PURE__ */ jsx15(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx15(Box, { component: "span", sx: { fontWeight: 600 }, children: label }) }),
2404
- /* @__PURE__ */ jsx15(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs9(
2429
+ /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx16(Box, { component: "span", sx: { fontWeight: 600 }, children: label }) }),
2430
+ /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx16(
2405
2431
  Box,
2406
2432
  {
2407
2433
  component: "span",
2408
2434
  "data-testid": `${testId}-count`,
2409
- "aria-label": `${label}: ${count} nesta p\xE1gina`,
2435
+ "aria-label": copy.board.countOnPage(label, count),
2410
2436
  sx: { color: "text.secondary", whiteSpace: "nowrap" },
2411
- children: [
2412
- count,
2413
- " nesta p\xE1gina"
2414
- ]
2437
+ children: copy.board.onThisPage(count)
2415
2438
  }
2416
2439
  ) })
2417
2440
  ] }),
2418
- sum !== null && /* @__PURE__ */ jsx15(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx15(
2441
+ sum !== null && /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx16(
2419
2442
  Box,
2420
2443
  {
2421
2444
  component: "span",
2422
2445
  "data-testid": `${testId}-sum`,
2423
- "aria-label": `Soma desta p\xE1gina: ${sum}`,
2446
+ "aria-label": copy.board.pageSum(sum),
2424
2447
  sx: { color: "text.secondary" },
2425
2448
  children: sum
2426
2449
  }
@@ -2457,7 +2480,7 @@ function BoardColumn({
2457
2480
  p: 1
2458
2481
  },
2459
2482
  children: [
2460
- /* @__PURE__ */ jsx15(
2483
+ /* @__PURE__ */ jsx16(
2461
2484
  BoardColumnHeader,
2462
2485
  {
2463
2486
  label: column.label,
@@ -2466,9 +2489,9 @@ function BoardColumn({
2466
2489
  testId
2467
2490
  }
2468
2491
  ),
2469
- column.rows.length === 0 ? /* @__PURE__ */ jsx15(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx15(Box, { component: "span", "data-testid": `${testId}-empty`, sx: { color: "text.disabled" }, children: "Nada nesta etapa" }) }) : column.rows.map((row) => {
2492
+ column.rows.length === 0 ? /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx16(Box, { component: "span", "data-testid": `${testId}-empty`, sx: { color: "text.disabled" }, children: "Nada nesta etapa" }) }) : column.rows.map((row) => {
2470
2493
  const id = getRowId(row);
2471
- return /* @__PURE__ */ jsx15(Box, { children: renderCard(row, {
2494
+ return /* @__PURE__ */ jsx16(Box, { children: renderCard(row, {
2472
2495
  selected: selectedIds.has(id),
2473
2496
  onToggleSelect: () => onToggleId(id),
2474
2497
  scale: cardScale
@@ -2490,12 +2513,13 @@ function DataViewsBoard({
2490
2513
  cardScale,
2491
2514
  dataTestId
2492
2515
  }) {
2516
+ const copy = useDataViewsCopy();
2493
2517
  const columns = groupRows(rows, board);
2494
2518
  const width = Math.max(MIN_COLUMN_WIDTH, Math.round(BASE_COLUMN_WIDTH * cardScale));
2495
2519
  const testId = dataTestId ? `${dataTestId}-board` : "data-views-board";
2496
2520
  return /* @__PURE__ */ jsxs9(Box, { sx: { mt: 1.5 }, children: [
2497
- /* @__PURE__ */ jsx15(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx15(Box, { component: "span", "data-testid": `${testId}-scale-note`, sx: { color: "text.secondary" }, children: "As contagens e somas abaixo referem-se apenas aos itens desta p\xE1gina." }) }),
2498
- /* @__PURE__ */ jsx15(
2521
+ /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx16(Box, { component: "span", "data-testid": `${testId}-scale-note`, sx: { color: "text.secondary" }, children: copy.board.pageScopeNote }) }),
2522
+ /* @__PURE__ */ jsx16(
2499
2523
  Box,
2500
2524
  {
2501
2525
  "data-testid": testId,
@@ -2510,7 +2534,7 @@ function DataViewsBoard({
2510
2534
  overflowX: "auto",
2511
2535
  pb: 1
2512
2536
  },
2513
- children: columns.map((column) => /* @__PURE__ */ jsx15(
2537
+ children: columns.map((column) => /* @__PURE__ */ jsx16(
2514
2538
  BoardColumn,
2515
2539
  {
2516
2540
  column,
@@ -2532,7 +2556,7 @@ function DataViewsBoard({
2532
2556
 
2533
2557
  // src/components/data-display/DataViews/data-views-select-all-strip.tsx
2534
2558
  import { Checkbox as Checkbox2 } from "@mui/material";
2535
- import { jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
2559
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
2536
2560
  function SelectAllStrip({
2537
2561
  rows,
2538
2562
  getRowId,
@@ -2540,6 +2564,7 @@ function SelectAllStrip({
2540
2564
  onChange,
2541
2565
  testIdPrefix
2542
2566
  }) {
2567
+ const copy = useDataViewsCopy();
2543
2568
  if (rows.length === 0) return null;
2544
2569
  const pageIds = rows.map(getRowId);
2545
2570
  const selectedHere = pageIds.filter((id) => selectedIds.has(id)).length;
@@ -2571,7 +2596,7 @@ function SelectAllStrip({
2571
2596
  borderRadius: 1
2572
2597
  },
2573
2598
  children: [
2574
- /* @__PURE__ */ jsx16(
2599
+ /* @__PURE__ */ jsx17(
2575
2600
  Checkbox2,
2576
2601
  {
2577
2602
  size: "small",
@@ -2579,11 +2604,11 @@ function SelectAllStrip({
2579
2604
  indeterminate: some,
2580
2605
  onChange: toggle,
2581
2606
  "data-testid": `${testIdPrefix}-select-all-box`,
2582
- inputProps: { "aria-label": "Selecionar todos nesta p\xE1gina" },
2607
+ inputProps: { "aria-label": copy.selection.selectAllOnPage },
2583
2608
  sx: { p: 0.5 }
2584
2609
  }
2585
2610
  ),
2586
- /* @__PURE__ */ jsx16(
2611
+ /* @__PURE__ */ jsx17(
2587
2612
  Button,
2588
2613
  {
2589
2614
  variant: "text",
@@ -2591,20 +2616,17 @@ function SelectAllStrip({
2591
2616
  color: "secondary",
2592
2617
  onClick: toggle,
2593
2618
  dataTestId: `${testIdPrefix}-select-all-toggle`,
2594
- children: all ? "Limpar sele\xE7\xE3o" : "Selecionar tudo"
2619
+ children: all ? copy.selection.clearSelection : copy.selection.selectAll
2595
2620
  }
2596
2621
  ),
2597
- /* @__PURE__ */ jsx16(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs10(Box, { component: "span", sx: { ml: "auto", color: "text.disabled", whiteSpace: "nowrap" }, children: [
2598
- rows.length,
2599
- " nesta p\xE1gina"
2600
- ] }) })
2622
+ /* @__PURE__ */ jsx17(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx17(Box, { component: "span", sx: { ml: "auto", color: "text.disabled", whiteSpace: "nowrap" }, children: copy.selection.onThisPage(rows.length) }) })
2601
2623
  ]
2602
2624
  }
2603
2625
  );
2604
2626
  }
2605
2627
 
2606
2628
  // src/components/data-display/DataViews/data-views-grid-bodies.tsx
2607
- import { Fragment as Fragment8, jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
2629
+ import { Fragment as Fragment8, jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
2608
2630
  function GridBody({
2609
2631
  rows,
2610
2632
  columns,
@@ -2618,7 +2640,7 @@ function GridBody({
2618
2640
  dataTestId,
2619
2641
  emptyState
2620
2642
  }) {
2621
- return /* @__PURE__ */ jsx17(
2643
+ return /* @__PURE__ */ jsx18(
2622
2644
  Box,
2623
2645
  {
2624
2646
  sx: {
@@ -2631,7 +2653,7 @@ function GridBody({
2631
2653
  "& .MuiTableCell-root": { py: rowPadding, fontSize: "0.8125rem" },
2632
2654
  "& .MuiTableCell-head": { py: 0.5, fontSize: "0.75rem" }
2633
2655
  },
2634
- children: /* @__PURE__ */ jsx17(
2656
+ children: /* @__PURE__ */ jsx18(
2635
2657
  DataGrid,
2636
2658
  {
2637
2659
  rows,
@@ -2662,9 +2684,9 @@ function CardBody({
2662
2684
  emptyState
2663
2685
  }) {
2664
2686
  if (rows.length === 0) {
2665
- return /* @__PURE__ */ jsx17(Box, { sx: { mt: 1.5 }, children: emptyState });
2687
+ return /* @__PURE__ */ jsx18(Box, { sx: { mt: 1.5 }, children: emptyState });
2666
2688
  }
2667
- return /* @__PURE__ */ jsx17(
2689
+ return /* @__PURE__ */ jsx18(
2668
2690
  Box,
2669
2691
  {
2670
2692
  sx: {
@@ -2678,7 +2700,7 @@ function CardBody({
2678
2700
  "data-testid": dataTestId ? `${dataTestId}-cards` : "data-views-cards",
2679
2701
  children: rows.map((row) => {
2680
2702
  const id = getRowId(row);
2681
- return /* @__PURE__ */ jsx17(Box, { children: renderCard(row, {
2703
+ return /* @__PURE__ */ jsx18(Box, { children: renderCard(row, {
2682
2704
  selected: selectedIds.has(id),
2683
2705
  onToggleSelect: () => onToggleId(id),
2684
2706
  scale: cardScale
@@ -2700,7 +2722,7 @@ function ListBody({
2700
2722
  emptyState
2701
2723
  }) {
2702
2724
  if (rows.length === 0) {
2703
- return /* @__PURE__ */ jsx17(Box, { sx: { mt: 1.5 }, children: emptyState });
2725
+ return /* @__PURE__ */ jsx18(Box, { sx: { mt: 1.5 }, children: emptyState });
2704
2726
  }
2705
2727
  const testId = dataTestId ? `${dataTestId}-list` : "data-views-list";
2706
2728
  const selectionFor = (id) => ({
@@ -2709,7 +2731,7 @@ function ListBody({
2709
2731
  scale: 1
2710
2732
  });
2711
2733
  if (group) {
2712
- return /* @__PURE__ */ jsx17(Box, { sx: { mt: 1.5 }, children: /* @__PURE__ */ jsx17(
2734
+ return /* @__PURE__ */ jsx18(Box, { sx: { mt: 1.5 }, children: /* @__PURE__ */ jsx18(
2713
2735
  ListCardGroup,
2714
2736
  {
2715
2737
  cells: group.cells,
@@ -2721,19 +2743,19 @@ function ListBody({
2721
2743
  dataTestId: testId,
2722
2744
  children: rows.map((row) => {
2723
2745
  const id = getRowId(row);
2724
- return /* @__PURE__ */ jsx17(React3.Fragment, { children: renderListRow(row, selectionFor(id)) }, id);
2746
+ return /* @__PURE__ */ jsx18(React3.Fragment, { children: renderListRow(row, selectionFor(id)) }, id);
2725
2747
  })
2726
2748
  }
2727
2749
  ) });
2728
2750
  }
2729
- return /* @__PURE__ */ jsx17(
2751
+ return /* @__PURE__ */ jsx18(
2730
2752
  Box,
2731
2753
  {
2732
2754
  sx: { mt: 1.5, display: "flex", flexDirection: "column", gap: rowGap },
2733
2755
  "data-testid": testId,
2734
2756
  children: rows.map((row) => {
2735
2757
  const id = getRowId(row);
2736
- return /* @__PURE__ */ jsx17(Box, { children: renderListRow(row, selectionFor(id)) }, id);
2758
+ return /* @__PURE__ */ jsx18(Box, { children: renderListRow(row, selectionFor(id)) }, id);
2737
2759
  })
2738
2760
  }
2739
2761
  );
@@ -2745,7 +2767,7 @@ function Headerless({
2745
2767
  children
2746
2768
  }) {
2747
2769
  return /* @__PURE__ */ jsxs11(Fragment8, { children: [
2748
- /* @__PURE__ */ jsx17(
2770
+ /* @__PURE__ */ jsx18(
2749
2771
  SelectAllStrip,
2750
2772
  {
2751
2773
  rows: c.matched,
@@ -2760,7 +2782,7 @@ function Headerless({
2760
2782
  }
2761
2783
  function headerlessBody({ c, getRowId, renderCard, renderListRow, listGroup, board, dataTestId, emptyState }, { layout, zoom, density }) {
2762
2784
  if (layout === "list" && renderListRow) {
2763
- return /* @__PURE__ */ jsx17(
2785
+ return /* @__PURE__ */ jsx18(
2764
2786
  ListBody,
2765
2787
  {
2766
2788
  rows: c.matched,
@@ -2777,7 +2799,7 @@ function headerlessBody({ c, getRowId, renderCard, renderListRow, listGroup, boa
2777
2799
  );
2778
2800
  }
2779
2801
  if (layout === "board" && board && renderCard) {
2780
- return /* @__PURE__ */ jsx17(
2802
+ return /* @__PURE__ */ jsx18(
2781
2803
  DataViewsBoard,
2782
2804
  {
2783
2805
  rows: c.matched,
@@ -2792,7 +2814,7 @@ function headerlessBody({ c, getRowId, renderCard, renderListRow, listGroup, boa
2792
2814
  );
2793
2815
  }
2794
2816
  if (layout === "cards" && renderCard) {
2795
- return /* @__PURE__ */ jsx17(
2817
+ return /* @__PURE__ */ jsx18(
2796
2818
  CardBody,
2797
2819
  {
2798
2820
  rows: c.matched,
@@ -2814,9 +2836,9 @@ function GridMain(props) {
2814
2836
  const layoutState = useDataViewsLayout();
2815
2837
  const body = headerlessBody(props, layoutState);
2816
2838
  if (body) {
2817
- return /* @__PURE__ */ jsx17(Headerless, { c, getRowId, testIdPrefix, children: body });
2839
+ return /* @__PURE__ */ jsx18(Headerless, { c, getRowId, testIdPrefix, children: body });
2818
2840
  }
2819
- return /* @__PURE__ */ jsx17(
2841
+ return /* @__PURE__ */ jsx18(
2820
2842
  GridBody,
2821
2843
  {
2822
2844
  rows: c.matched,
@@ -2842,12 +2864,13 @@ import { useState as useState7 } from "react";
2842
2864
  import CloseRoundedIcon from "@mui/icons-material/CloseRounded";
2843
2865
  import FilterAltOffRoundedIcon from "@mui/icons-material/FilterAltOffRounded";
2844
2866
  import { Tooltip } from "@mui/material";
2845
- import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
2867
+ import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
2846
2868
  function ClearAllControl({
2847
2869
  onClearAll,
2848
2870
  compact,
2849
2871
  testIdPrefix
2850
2872
  }) {
2873
+ const copy = useDataViewsCopy();
2851
2874
  const button = /* @__PURE__ */ jsxs12(
2852
2875
  Box,
2853
2876
  {
@@ -2855,7 +2878,7 @@ function ClearAllControl({
2855
2878
  type: "button",
2856
2879
  onClick: onClearAll,
2857
2880
  "data-testid": `${testIdPrefix}-clear-all`,
2858
- "aria-label": "Limpar filtros",
2881
+ "aria-label": copy.filters.clearAll,
2859
2882
  sx: {
2860
2883
  display: "inline-flex",
2861
2884
  alignItems: "center",
@@ -2873,24 +2896,25 @@ function ClearAllControl({
2873
2896
  "&:hover": { color: "text.primary", bgcolor: "action.hover" }
2874
2897
  },
2875
2898
  children: [
2876
- /* @__PURE__ */ jsx18(FilterAltOffRoundedIcon, { sx: { fontSize: 16 } }),
2877
- !compact && /* @__PURE__ */ jsx18(Box, { component: "span", children: "Limpar" })
2899
+ /* @__PURE__ */ jsx19(FilterAltOffRoundedIcon, { sx: { fontSize: 16 } }),
2900
+ !compact && /* @__PURE__ */ jsx19(Box, { component: "span", children: copy.filters.clear })
2878
2901
  ]
2879
2902
  }
2880
2903
  );
2881
- return compact ? /* @__PURE__ */ jsx18(Tooltip, { title: "Limpar filtros", children: button }) : button;
2904
+ return compact ? /* @__PURE__ */ jsx19(Tooltip, { title: copy.filters.clearAll, children: button }) : button;
2882
2905
  }
2883
2906
  function CloseSearchControl({
2884
2907
  onClose,
2885
2908
  testIdPrefix
2886
2909
  }) {
2887
- return /* @__PURE__ */ jsx18(Tooltip, { title: "Fechar busca", children: /* @__PURE__ */ jsx18(
2910
+ const copy = useDataViewsCopy();
2911
+ return /* @__PURE__ */ jsx19(Tooltip, { title: copy.search.close, children: /* @__PURE__ */ jsx19(
2888
2912
  Box,
2889
2913
  {
2890
2914
  component: "button",
2891
2915
  type: "button",
2892
2916
  onClick: onClose,
2893
- "aria-label": "Fechar busca",
2917
+ "aria-label": copy.search.close,
2894
2918
  "data-testid": `${testIdPrefix}-search-close`,
2895
2919
  sx: {
2896
2920
  display: "inline-flex",
@@ -2904,7 +2928,7 @@ function CloseSearchControl({
2904
2928
  color: "text.secondary",
2905
2929
  "&:hover": { color: "text.primary", bgcolor: "action.hover" }
2906
2930
  },
2907
- children: /* @__PURE__ */ jsx18(CloseRoundedIcon, { sx: { fontSize: 18 } })
2931
+ children: /* @__PURE__ */ jsx19(CloseRoundedIcon, { sx: { fontSize: 18 } })
2908
2932
  }
2909
2933
  ) });
2910
2934
  }
@@ -2917,7 +2941,7 @@ import { useState as useState5 } from "react";
2917
2941
 
2918
2942
  // src/components/data-display/DataViews/data-views-more-fields.tsx
2919
2943
  import { Checkbox as Checkbox3 } from "@mui/material";
2920
- import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
2944
+ import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
2921
2945
  var INLINE_OPTION_LIMIT = 2;
2922
2946
  function OverflowPill({
2923
2947
  field,
@@ -2926,9 +2950,10 @@ function OverflowPill({
2926
2950
  onClear,
2927
2951
  testIdPrefix
2928
2952
  }) {
2953
+ const copy = useDataViewsCopy();
2929
2954
  const options = field.pill?.options ?? [];
2930
2955
  if (options.length > INLINE_OPTION_LIMIT) {
2931
- return /* @__PURE__ */ jsx19(
2956
+ return /* @__PURE__ */ jsx20(
2932
2957
  MultiSelectDropdown,
2933
2958
  {
2934
2959
  label: field.pill?.label ?? field.label,
@@ -2936,16 +2961,16 @@ function OverflowPill({
2936
2961
  selected: new Set(values),
2937
2962
  onToggle,
2938
2963
  onClear,
2939
- allLabel: "Todas",
2964
+ allLabel: copy.filters.allOption,
2940
2965
  searchable: options.length > 6 ? true : void 0,
2941
- searchPlaceholder: "Buscar\u2026",
2942
- noResultsLabel: "Nenhum resultado",
2966
+ searchPlaceholder: copy.filters.optionSearchPlaceholder,
2967
+ noResultsLabel: copy.filters.optionsEmpty,
2943
2968
  layout: "pill",
2944
2969
  "data-testid": `${testIdPrefix}-more-${field.id}`
2945
2970
  }
2946
2971
  );
2947
2972
  }
2948
- return /* @__PURE__ */ jsx19(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 0.75 }, children: (field.pill?.options ?? []).map((option) => {
2973
+ return /* @__PURE__ */ jsx20(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 0.75 }, children: (field.pill?.options ?? []).map((option) => {
2949
2974
  const checked = values.includes(option.value);
2950
2975
  return /* @__PURE__ */ jsxs13(
2951
2976
  Box,
@@ -2967,7 +2992,7 @@ function OverflowPill({
2967
2992
  color: checked ? "primary.main" : "text.secondary"
2968
2993
  },
2969
2994
  children: [
2970
- /* @__PURE__ */ jsx19(
2995
+ /* @__PURE__ */ jsx20(
2971
2996
  Checkbox3,
2972
2997
  {
2973
2998
  size: "small",
@@ -2990,7 +3015,7 @@ function OverflowRange({
2990
3015
  testIdPrefix
2991
3016
  }) {
2992
3017
  if (!field.range) return null;
2993
- return /* @__PURE__ */ jsx19(
3018
+ return /* @__PURE__ */ jsx20(
2994
3019
  RangeBounds,
2995
3020
  {
2996
3021
  field: field.range,
@@ -3030,11 +3055,11 @@ function MoreGroup({
3030
3055
  const { applied, clear } = fieldClearing({ field, pills, ranges, onTogglePill, onChangeRange });
3031
3056
  return /* @__PURE__ */ jsxs13(Box, { sx: { mb: 1.5, "&:last-of-type": { mb: 0 } }, children: [
3032
3057
  /* @__PURE__ */ jsxs13(Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.5 }, children: [
3033
- /* @__PURE__ */ jsx19(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs13(Box, { component: "span", sx: { color: "text.secondary" }, children: [
3058
+ /* @__PURE__ */ jsx20(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs13(Box, { component: "span", sx: { color: "text.secondary" }, children: [
3034
3059
  field.label,
3035
3060
  field.group === "range" && isRangeSet(ranges[field.id] ?? {}) ? " \u2022" : ""
3036
3061
  ] }) }),
3037
- applied && /* @__PURE__ */ jsx19(
3062
+ applied && /* @__PURE__ */ jsx20(
3038
3063
  Box,
3039
3064
  {
3040
3065
  component: "button",
@@ -3056,7 +3081,7 @@ function MoreGroup({
3056
3081
  }
3057
3082
  )
3058
3083
  ] }),
3059
- field.group === "pill" ? /* @__PURE__ */ jsx19(
3084
+ field.group === "pill" ? /* @__PURE__ */ jsx20(
3060
3085
  OverflowPill,
3061
3086
  {
3062
3087
  field,
@@ -3065,7 +3090,7 @@ function MoreGroup({
3065
3090
  onClear: () => (pills[field.id] ?? []).forEach((v) => onTogglePill(field.id, v, false)),
3066
3091
  testIdPrefix
3067
3092
  }
3068
- ) : /* @__PURE__ */ jsx19(
3093
+ ) : /* @__PURE__ */ jsx20(
3069
3094
  OverflowRange,
3070
3095
  {
3071
3096
  field,
@@ -3078,7 +3103,7 @@ function MoreGroup({
3078
3103
  }
3079
3104
 
3080
3105
  // src/components/data-display/DataViews/data-views-more-filters.tsx
3081
- import { Fragment as Fragment9, jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
3106
+ import { Fragment as Fragment9, jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
3082
3107
  function MoreTrigger({
3083
3108
  count,
3084
3109
  appliedCount,
@@ -3086,8 +3111,9 @@ function MoreTrigger({
3086
3111
  onOpen,
3087
3112
  testIdPrefix
3088
3113
  }) {
3114
+ const copy = useDataViewsCopy();
3089
3115
  const applied = appliedCount > 0;
3090
- return /* @__PURE__ */ jsx20(
3116
+ return /* @__PURE__ */ jsx21(
3091
3117
  Button,
3092
3118
  {
3093
3119
  variant: "outline",
@@ -3095,7 +3121,7 @@ function MoreTrigger({
3095
3121
  color: "neutral",
3096
3122
  onClick: (event) => onOpen(event.currentTarget),
3097
3123
  dataTestId: `${testIdPrefix}-more-filters`,
3098
- "aria-label": applied ? `Mais filtros: ${count} sem espa\xE7o na barra, ${appliedCount} aplicado(s)` : `Mais filtros: ${count} sem espa\xE7o na barra`,
3124
+ "aria-label": applied ? copy.filters.moreFiltersApplied(count, appliedCount) : copy.filters.moreFilters(count),
3099
3125
  children: /* @__PURE__ */ jsxs14(
3100
3126
  Box,
3101
3127
  {
@@ -3107,9 +3133,9 @@ function MoreTrigger({
3107
3133
  color: applied ? "primary.main" : void 0
3108
3134
  },
3109
3135
  children: [
3110
- /* @__PURE__ */ jsx20(FilterAltRoundedIcon, { fontSize: "small" }),
3111
- !compact && /* @__PURE__ */ jsx20(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: "Mais" }),
3112
- /* @__PURE__ */ jsx20(
3136
+ /* @__PURE__ */ jsx21(FilterAltRoundedIcon, { fontSize: "small" }),
3137
+ !compact && /* @__PURE__ */ jsx21(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: "Mais" }),
3138
+ /* @__PURE__ */ jsx21(
3113
3139
  Box,
3114
3140
  {
3115
3141
  component: "span",
@@ -3125,7 +3151,7 @@ function MoreTrigger({
3125
3151
  children: applied ? appliedCount : count
3126
3152
  }
3127
3153
  ),
3128
- !compact && /* @__PURE__ */ jsx20(KeyboardArrowDownRoundedIcon, { fontSize: "small" })
3154
+ !compact && /* @__PURE__ */ jsx21(KeyboardArrowDownRoundedIcon, { fontSize: "small" })
3129
3155
  ]
3130
3156
  }
3131
3157
  )
@@ -3133,6 +3159,7 @@ function MoreTrigger({
3133
3159
  );
3134
3160
  }
3135
3161
  function MoreHeading() {
3162
+ const copy = useDataViewsCopy();
3136
3163
  return /* @__PURE__ */ jsxs14(
3137
3164
  Box,
3138
3165
  {
@@ -3146,8 +3173,8 @@ function MoreHeading() {
3146
3173
  borderColor: "divider"
3147
3174
  },
3148
3175
  children: [
3149
- /* @__PURE__ */ jsx20(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx20(Box, { component: "span", sx: { textTransform: "uppercase", letterSpacing: 0.5, color: "text.disabled" }, children: "Mais filtros" }) }),
3150
- /* @__PURE__ */ jsx20(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx20(Box, { component: "span", sx: { ml: "auto", color: "text.disabled" }, children: "sem espa\xE7o na barra" }) })
3176
+ /* @__PURE__ */ jsx21(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx21(Box, { component: "span", sx: { textTransform: "uppercase", letterSpacing: 0.5, color: "text.disabled" }, children: "Mais filtros" }) }),
3177
+ /* @__PURE__ */ jsx21(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx21(Box, { component: "span", sx: { ml: "auto", color: "text.disabled" }, children: copy.filters.overflowNote }) })
3151
3178
  ]
3152
3179
  }
3153
3180
  );
@@ -3156,7 +3183,7 @@ function MoreFooter({
3156
3183
  onClearAll,
3157
3184
  testIdPrefix
3158
3185
  }) {
3159
- return /* @__PURE__ */ jsx20(Box, { sx: { px: 1.5, py: 1, borderTop: 1, borderColor: "divider" }, children: /* @__PURE__ */ jsx20(
3186
+ return /* @__PURE__ */ jsx21(Box, { sx: { px: 1.5, py: 1, borderTop: 1, borderColor: "divider" }, children: /* @__PURE__ */ jsx21(
3160
3187
  Box,
3161
3188
  {
3162
3189
  component: "button",
@@ -3190,7 +3217,7 @@ function MoreFilters({
3190
3217
  const [anchor, setAnchor] = useState5(null);
3191
3218
  if (fields.length === 0) return null;
3192
3219
  return /* @__PURE__ */ jsxs14(Fragment9, { children: [
3193
- /* @__PURE__ */ jsx20(
3220
+ /* @__PURE__ */ jsx21(
3194
3221
  MoreTrigger,
3195
3222
  {
3196
3223
  count: fields.length,
@@ -3211,7 +3238,7 @@ function MoreFilters({
3211
3238
  testIdPrefix: rest.testIdPrefix
3212
3239
  }
3213
3240
  ),
3214
- /* @__PURE__ */ jsx20(
3241
+ /* @__PURE__ */ jsx21(
3215
3242
  Popover2,
3216
3243
  {
3217
3244
  open: Boolean(anchor),
@@ -3223,9 +3250,9 @@ function MoreFilters({
3223
3250
  anchorOrigin: { vertical: "bottom", horizontal: "left" },
3224
3251
  slotProps: { paper: { sx: { width: 300, maxWidth: "calc(100vw - 32px)" } } },
3225
3252
  children: /* @__PURE__ */ jsxs14(Box, { "data-testid": `${rest.testIdPrefix}-more-panel`, children: [
3226
- /* @__PURE__ */ jsx20(MoreHeading, {}),
3227
- /* @__PURE__ */ jsx20(Box, { sx: { maxHeight: 320, overflowY: "auto", overflowX: "hidden", p: 1.5, minWidth: 0 }, children: fields.map((field) => /* @__PURE__ */ jsx20(MoreGroup, { field, ...rest }, field.id)) }),
3228
- anyApplied && /* @__PURE__ */ jsx20(MoreFooter, { onClearAll, testIdPrefix: rest.testIdPrefix })
3253
+ /* @__PURE__ */ jsx21(MoreHeading, {}),
3254
+ /* @__PURE__ */ jsx21(Box, { sx: { maxHeight: 320, overflowY: "auto", overflowX: "hidden", p: 1.5, minWidth: 0 }, children: fields.map((field) => /* @__PURE__ */ jsx21(MoreGroup, { field, ...rest }, field.id)) }),
3255
+ anyApplied && /* @__PURE__ */ jsx21(MoreFooter, { onClearAll, testIdPrefix: rest.testIdPrefix })
3229
3256
  ] })
3230
3257
  }
3231
3258
  )
@@ -3237,7 +3264,7 @@ import CloseIcon2 from "@mui/icons-material/Close";
3237
3264
  import SearchIcon from "@mui/icons-material/Search";
3238
3265
  import { IconButton as IconButton2, InputAdornment, TextField as TextField2 } from "@mui/material";
3239
3266
  import { useEffect as useEffect3, useRef, useState as useState6 } from "react";
3240
- import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
3267
+ import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
3241
3268
  var SEARCH_DEBOUNCE_MS = 350;
3242
3269
  function boxWidth(fill) {
3243
3270
  return { flex: 1, minWidth: fill ? 0 : 200, maxWidth: fill ? "none" : 384 };
@@ -3250,6 +3277,7 @@ function InlineKeyword({
3250
3277
  onEscape,
3251
3278
  fill = false
3252
3279
  }) {
3280
+ const copy = useDataViewsCopy();
3253
3281
  const [draft, setDraft] = useState6(value);
3254
3282
  const prev = useRef(value);
3255
3283
  if (prev.current !== value) {
@@ -3261,7 +3289,7 @@ function InlineKeyword({
3261
3289
  const timer = setTimeout(() => onChange(draft), SEARCH_DEBOUNCE_MS);
3262
3290
  return () => clearTimeout(timer);
3263
3291
  }, [draft, value, onChange]);
3264
- return /* @__PURE__ */ jsx21(
3292
+ return /* @__PURE__ */ jsx22(
3265
3293
  TextField2,
3266
3294
  {
3267
3295
  size: "small",
@@ -3279,19 +3307,19 @@ function InlineKeyword({
3279
3307
  event.preventDefault();
3280
3308
  if (draft !== value) onChange(draft);
3281
3309
  },
3282
- placeholder: "Buscar\u2026",
3283
- inputProps: { "aria-label": "Buscar em todas as colunas", "data-testid": testId },
3310
+ placeholder: copy.search.placeholder,
3311
+ inputProps: { "aria-label": copy.search.allColumnsLabel, "data-testid": testId },
3284
3312
  InputProps: {
3285
- startAdornment: /* @__PURE__ */ jsx21(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx21(SearchIcon, { sx: { fontSize: 16, color: "text.secondary" } }) }),
3286
- endAdornment: draft ? /* @__PURE__ */ jsx21(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx21(
3313
+ startAdornment: /* @__PURE__ */ jsx22(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx22(SearchIcon, { sx: { fontSize: 16, color: "text.secondary" } }) }),
3314
+ endAdornment: draft ? /* @__PURE__ */ jsx22(InputAdornment, { position: "end", children: /* @__PURE__ */ jsx22(
3287
3315
  IconButton2,
3288
3316
  {
3289
3317
  size: "small",
3290
- "aria-label": "Limpar busca",
3318
+ "aria-label": copy.search.clear,
3291
3319
  "data-testid": testId ? `${testId}-clear` : void 0,
3292
3320
  onClick: () => setDraft(""),
3293
3321
  sx: { p: 0.25 },
3294
- children: /* @__PURE__ */ jsx21(CloseIcon2, { sx: { fontSize: 14 } })
3322
+ children: /* @__PURE__ */ jsx22(CloseIcon2, { sx: { fontSize: 14 } })
3295
3323
  }
3296
3324
  ) }) : void 0
3297
3325
  },
@@ -3304,12 +3332,13 @@ function CollapsedSearch({
3304
3332
  onOpen,
3305
3333
  testId
3306
3334
  }) {
3335
+ const copy = useDataViewsCopy();
3307
3336
  return /* @__PURE__ */ jsxs15(
3308
3337
  IconButton2,
3309
3338
  {
3310
3339
  size: "small",
3311
3340
  onClick: onOpen,
3312
- "aria-label": "Buscar",
3341
+ "aria-label": copy.search.open,
3313
3342
  "aria-expanded": false,
3314
3343
  "data-testid": testId ? `${testId}-collapsed` : void 0,
3315
3344
  sx: {
@@ -3321,8 +3350,8 @@ function CollapsedSearch({
3321
3350
  bgcolor: active ? "action.selected" : "background.paper"
3322
3351
  },
3323
3352
  children: [
3324
- /* @__PURE__ */ jsx21(SearchIcon, { sx: { fontSize: 18 } }),
3325
- active && /* @__PURE__ */ jsx21(
3353
+ /* @__PURE__ */ jsx22(SearchIcon, { sx: { fontSize: 18 } }),
3354
+ active && /* @__PURE__ */ jsx22(
3326
3355
  Box,
3327
3356
  {
3328
3357
  component: "span",
@@ -3343,7 +3372,7 @@ function CollapsedSearch({
3343
3372
  }
3344
3373
 
3345
3374
  // src/components/data-display/DataViews/data-views-inline-bar.tsx
3346
- import { Fragment as Fragment10, jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
3375
+ import { Fragment as Fragment10, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
3347
3376
  function SearchSlot({
3348
3377
  search,
3349
3378
  onSearchChange,
@@ -3355,9 +3384,9 @@ function SearchSlot({
3355
3384
  testIdPrefix
3356
3385
  }) {
3357
3386
  if (collapsed) {
3358
- return /* @__PURE__ */ jsx22(CollapsedSearch, { active: search !== "", onOpen, testId: `${testIdPrefix}-search-all` });
3387
+ return /* @__PURE__ */ jsx23(CollapsedSearch, { active: search !== "", onOpen, testId: `${testIdPrefix}-search-all` });
3359
3388
  }
3360
- return /* @__PURE__ */ jsx22(
3389
+ return /* @__PURE__ */ jsx23(
3361
3390
  InlineKeyword,
3362
3391
  {
3363
3392
  value: search,
@@ -3380,7 +3409,7 @@ function InlineControl({
3380
3409
  testIdPrefix
3381
3410
  }) {
3382
3411
  if (field.group === "pill" && field.pill) {
3383
- return /* @__PURE__ */ jsx22(
3412
+ return /* @__PURE__ */ jsx23(
3384
3413
  PillControl,
3385
3414
  {
3386
3415
  fieldId: field.id,
@@ -3394,7 +3423,7 @@ function InlineControl({
3394
3423
  );
3395
3424
  }
3396
3425
  if (field.group === "range" && field.range) {
3397
- return /* @__PURE__ */ jsx22(
3426
+ return /* @__PURE__ */ jsx23(
3398
3427
  RangePill,
3399
3428
  {
3400
3429
  field: field.range,
@@ -3449,7 +3478,7 @@ function InlineFilterControls({
3449
3478
  "& > *": { flexShrink: 0 }
3450
3479
  },
3451
3480
  children: [
3452
- /* @__PURE__ */ jsx22(
3481
+ /* @__PURE__ */ jsx23(
3453
3482
  SearchSlot,
3454
3483
  {
3455
3484
  search,
@@ -3462,8 +3491,8 @@ function InlineFilterControls({
3462
3491
  testIdPrefix
3463
3492
  }
3464
3493
  ),
3465
- takesOver && /* @__PURE__ */ jsx22(CloseSearchControl, { onClose: close, testIdPrefix }),
3466
- !takesOver && /* @__PURE__ */ jsx22(
3494
+ takesOver && /* @__PURE__ */ jsx23(CloseSearchControl, { onClose: close, testIdPrefix }),
3495
+ !takesOver && /* @__PURE__ */ jsx23(
3467
3496
  FilterSlots,
3468
3497
  {
3469
3498
  inline,
@@ -3501,7 +3530,7 @@ function FilterSlots({
3501
3530
  testIdPrefix
3502
3531
  }) {
3503
3532
  return /* @__PURE__ */ jsxs16(Fragment10, { children: [
3504
- inline.map((field) => /* @__PURE__ */ jsx22(
3533
+ inline.map((field) => /* @__PURE__ */ jsx23(
3505
3534
  InlineControl,
3506
3535
  {
3507
3536
  field,
@@ -3515,7 +3544,7 @@ function FilterSlots({
3515
3544
  },
3516
3545
  field.id
3517
3546
  )),
3518
- /* @__PURE__ */ jsx22(
3547
+ /* @__PURE__ */ jsx23(
3519
3548
  MoreFilters,
3520
3549
  {
3521
3550
  onOpenChange: onControlOpenChange,
@@ -3530,7 +3559,7 @@ function FilterSlots({
3530
3559
  testIdPrefix
3531
3560
  }
3532
3561
  ),
3533
- activeFilterCount > 0 && !clearAllHidden && /* @__PURE__ */ jsx22(
3562
+ activeFilterCount > 0 && !clearAllHidden && /* @__PURE__ */ jsx23(
3534
3563
  ClearAllControl,
3535
3564
  {
3536
3565
  onClearAll,
@@ -3746,7 +3775,7 @@ import ArrowUpwardRoundedIcon from "@mui/icons-material/ArrowUpwardRounded";
3746
3775
  import DragIndicatorRoundedIcon from "@mui/icons-material/DragIndicatorRounded";
3747
3776
  import { Checkbox as Checkbox4 } from "@mui/material";
3748
3777
  import { useState as useState8 } from "react";
3749
- import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
3778
+ import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
3750
3779
  function moved(order, id, delta) {
3751
3780
  const from = order.indexOf(id);
3752
3781
  const to = from + delta;
@@ -3765,6 +3794,7 @@ function ColumnsTab({
3765
3794
  onReset,
3766
3795
  testIdPrefix
3767
3796
  }) {
3797
+ const copy = useDataViewsCopy();
3768
3798
  const [dragId, setDragId] = useState8(null);
3769
3799
  const byId = new Map(columns.map((column) => [column.id, column]));
3770
3800
  const ordered = order.map((id) => byId.get(id)).filter((column) => Boolean(column));
@@ -3778,19 +3808,14 @@ function ColumnsTab({
3778
3808
  };
3779
3809
  return /* @__PURE__ */ jsxs17(Box, { children: [
3780
3810
  /* @__PURE__ */ jsxs17(Box, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", px: 1.5, py: 1 }, children: [
3781
- /* @__PURE__ */ jsx23(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs17(Box, { component: "span", sx: { color: "text.secondary" }, "data-testid": `${testIdPrefix}-columns-count`, children: [
3782
- /* @__PURE__ */ jsx23("strong", { children: visibleHideableCount }),
3783
- " de ",
3784
- columns.length,
3785
- " vis\xEDveis"
3786
- ] }) }),
3811
+ /* @__PURE__ */ jsx24(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx24(Box, { component: "span", sx: { color: "text.secondary" }, "data-testid": `${testIdPrefix}-columns-count`, children: copy.columns.visibleCount(visibleHideableCount, columns.length) }) }),
3787
3812
  /* @__PURE__ */ jsxs17(Box, { sx: { display: "flex", gap: 1 }, children: [
3788
- /* @__PURE__ */ jsx23(LinkButton, { label: "Mostrar todas", onClick: onShowAll, testId: `${testIdPrefix}-columns-show-all` }),
3789
- /* @__PURE__ */ jsx23(LinkButton, { label: "Padr\xE3o", onClick: onReset, testId: `${testIdPrefix}-columns-reset`, muted: true })
3813
+ /* @__PURE__ */ jsx24(LinkButton, { label: copy.columns.showAll, onClick: onShowAll, testId: `${testIdPrefix}-columns-show-all` }),
3814
+ /* @__PURE__ */ jsx24(LinkButton, { label: copy.columns.reset, onClick: onReset, testId: `${testIdPrefix}-columns-reset`, muted: true })
3790
3815
  ] })
3791
3816
  ] }),
3792
- /* @__PURE__ */ jsx23(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx23(Box, { component: "span", sx: { px: 1.5, pb: 0.5, display: "block", color: "text.disabled" }, children: "Arraste para reordenar as colunas." }) }),
3793
- /* @__PURE__ */ jsx23(Box, { sx: { px: 0.75, pb: 0.75 }, children: ordered.map((column) => /* @__PURE__ */ jsx23(
3817
+ /* @__PURE__ */ jsx24(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx24(Box, { component: "span", sx: { px: 1.5, pb: 0.5, display: "block", color: "text.disabled" }, children: "Arraste para reordenar as colunas." }) }),
3818
+ /* @__PURE__ */ jsx24(Box, { sx: { px: 0.75, pb: 0.75 }, children: ordered.map((column) => /* @__PURE__ */ jsx24(
3794
3819
  ColumnRow,
3795
3820
  {
3796
3821
  column,
@@ -3813,7 +3838,7 @@ function LinkButton({
3813
3838
  testId,
3814
3839
  muted
3815
3840
  }) {
3816
- return /* @__PURE__ */ jsx23(
3841
+ return /* @__PURE__ */ jsx24(
3817
3842
  Box,
3818
3843
  {
3819
3844
  component: "button",
@@ -3866,8 +3891,8 @@ function ColumnRow({
3866
3891
  "&:hover .dv-col-move": { opacity: 1 }
3867
3892
  },
3868
3893
  children: [
3869
- /* @__PURE__ */ jsx23(Box, { component: "span", "aria-hidden": true, sx: { display: "flex", color: "action.disabled", cursor: "grab" }, children: /* @__PURE__ */ jsx23(DragIndicatorRoundedIcon, { fontSize: "small" }) }),
3870
- /* @__PURE__ */ jsx23(
3894
+ /* @__PURE__ */ jsx24(Box, { component: "span", "aria-hidden": true, sx: { display: "flex", color: "action.disabled", cursor: "grab" }, children: /* @__PURE__ */ jsx24(DragIndicatorRoundedIcon, { fontSize: "small" }) }),
3895
+ /* @__PURE__ */ jsx24(
3871
3896
  Checkbox4,
3872
3897
  {
3873
3898
  size: "small",
@@ -3877,10 +3902,10 @@ function ColumnRow({
3877
3902
  "data-testid": `${testIdPrefix}-column-toggle-${column.id}`
3878
3903
  }
3879
3904
  ),
3880
- /* @__PURE__ */ jsx23(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx23(Box, { component: "span", sx: { flex: 1, color: visible ? "text.primary" : "text.disabled" }, children: column.label }) }),
3905
+ /* @__PURE__ */ jsx24(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx24(Box, { component: "span", sx: { flex: 1, color: visible ? "text.primary" : "text.disabled" }, children: column.label }) }),
3881
3906
  /* @__PURE__ */ jsxs17(Box, { className: "dv-col-move", sx: { ml: "auto", display: "flex", opacity: 0, transition: "opacity .15s" }, children: [
3882
- /* @__PURE__ */ jsx23(MoveButton, { label: `Mover ${column.label} para cima`, onClick: () => onMove(-1), up: true }),
3883
- /* @__PURE__ */ jsx23(MoveButton, { label: `Mover ${column.label} para baixo`, onClick: () => onMove(1) })
3907
+ /* @__PURE__ */ jsx24(MoveButton, { label: `Mover ${column.label} para cima`, onClick: () => onMove(-1), up: true }),
3908
+ /* @__PURE__ */ jsx24(MoveButton, { label: `Mover ${column.label} para baixo`, onClick: () => onMove(1) })
3884
3909
  ] })
3885
3910
  ]
3886
3911
  }
@@ -3891,7 +3916,7 @@ function MoveButton({
3891
3916
  onClick,
3892
3917
  up
3893
3918
  }) {
3894
- return /* @__PURE__ */ jsx23(
3919
+ return /* @__PURE__ */ jsx24(
3895
3920
  Box,
3896
3921
  {
3897
3922
  component: "button",
@@ -3908,7 +3933,7 @@ function MoveButton({
3908
3933
  color: "text.secondary",
3909
3934
  "&:hover": { bgcolor: "action.selected" }
3910
3935
  },
3911
- children: up ? /* @__PURE__ */ jsx23(ArrowUpwardRoundedIcon, { sx: { fontSize: 14 } }) : /* @__PURE__ */ jsx23(ArrowDownwardRoundedIcon, { sx: { fontSize: 14 } })
3936
+ children: up ? /* @__PURE__ */ jsx24(ArrowUpwardRoundedIcon, { sx: { fontSize: 14 } }) : /* @__PURE__ */ jsx24(ArrowDownwardRoundedIcon, { sx: { fontSize: 14 } })
3912
3937
  }
3913
3938
  );
3914
3939
  }
@@ -3927,7 +3952,7 @@ import { IconButton as IconButton3 } from "@mui/material";
3927
3952
  import KeyboardArrowDownRoundedIcon2 from "@mui/icons-material/KeyboardArrowDownRounded";
3928
3953
  import RestartAltRoundedIcon from "@mui/icons-material/RestartAltRounded";
3929
3954
  import SaveOutlinedIcon from "@mui/icons-material/SaveOutlined";
3930
- import { Fragment as Fragment11, jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
3955
+ import { Fragment as Fragment11, jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
3931
3956
  var rowSx2 = {
3932
3957
  display: "flex",
3933
3958
  alignItems: "center",
@@ -3950,6 +3975,7 @@ function ViewsList({
3950
3975
  onOpenActions,
3951
3976
  testIdPrefix
3952
3977
  }) {
3978
+ const copy = useDataViewsCopy();
3953
3979
  const { views, activeViewId, onSelectView } = handlers;
3954
3980
  const onMain = !activeViewId;
3955
3981
  return /* @__PURE__ */ jsxs18(Box, { sx: { p: 0.75 }, "data-testid": `${testIdPrefix}-views-list`, children: [
@@ -3962,8 +3988,8 @@ function ViewsList({
3962
3988
  "data-testid": `${testIdPrefix}-view-main`,
3963
3989
  sx: { ...rowSx2, color: onMain ? "primary.main" : "text.primary", fontWeight: onMain ? 600 : 400 },
3964
3990
  children: [
3965
- /* @__PURE__ */ jsx24(Box, { component: "span", sx: { flex: 1 }, children: "Vis\xE3o principal" }),
3966
- onMain && /* @__PURE__ */ jsx24(CheckRoundedIcon, { fontSize: "small" })
3991
+ /* @__PURE__ */ jsx25(Box, { component: "span", sx: { flex: 1 }, children: copy.nav.mainView }),
3992
+ onMain && /* @__PURE__ */ jsx25(CheckRoundedIcon, { fontSize: "small" })
3967
3993
  ]
3968
3994
  }
3969
3995
  ),
@@ -3979,27 +4005,27 @@ function ViewsList({
3979
4005
  "data-testid": `${testIdPrefix}-view-${view.id}`,
3980
4006
  sx: { ...rowSx2, minWidth: 0, color: active ? "primary.main" : "text.primary", fontWeight: active ? 600 : 400 },
3981
4007
  children: [
3982
- /* @__PURE__ */ jsx24(Box, { component: "span", sx: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: view.name }),
3983
- view.isDefault && /* @__PURE__ */ jsx24(StarOutlineRoundedIcon, { fontSize: "small", sx: { color: "warning.main" }, titleAccess: "Padr\xE3o" }),
3984
- view.pinned && /* @__PURE__ */ jsx24(PushPinOutlinedIcon, { fontSize: "small", sx: { color: "text.disabled" }, titleAccess: "Fixada" }),
3985
- view.shared && /* @__PURE__ */ jsx24(GroupOutlinedIcon, { fontSize: "small", sx: { color: "text.disabled" }, titleAccess: "Compartilhada" }),
3986
- active && /* @__PURE__ */ jsx24(CheckRoundedIcon, { fontSize: "small" })
4008
+ /* @__PURE__ */ jsx25(Box, { component: "span", sx: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: view.name }),
4009
+ view.isDefault && /* @__PURE__ */ jsx25(StarOutlineRoundedIcon, { fontSize: "small", sx: { color: "warning.main" }, titleAccess: copy.nav.defaultTag }),
4010
+ view.pinned && /* @__PURE__ */ jsx25(PushPinOutlinedIcon, { fontSize: "small", sx: { color: "text.disabled" }, titleAccess: "Fixada" }),
4011
+ view.shared && /* @__PURE__ */ jsx25(GroupOutlinedIcon, { fontSize: "small", sx: { color: "text.disabled" }, titleAccess: "Compartilhada" }),
4012
+ active && /* @__PURE__ */ jsx25(CheckRoundedIcon, { fontSize: "small" })
3987
4013
  ]
3988
4014
  }
3989
4015
  ),
3990
- /* @__PURE__ */ jsx24(
4016
+ /* @__PURE__ */ jsx25(
3991
4017
  IconButton3,
3992
4018
  {
3993
4019
  size: "small",
3994
4020
  onClick: () => onOpenActions(view),
3995
- "aria-label": `Op\xE7\xF5es de ${view.name}`,
4021
+ "aria-label": copy.nav.viewOptions(view.name),
3996
4022
  "data-testid": `${testIdPrefix}-view-${view.id}-menu`,
3997
- children: /* @__PURE__ */ jsx24(MoreVertRoundedIcon, { fontSize: "small" })
4023
+ children: /* @__PURE__ */ jsx25(MoreVertRoundedIcon, { fontSize: "small" })
3998
4024
  }
3999
4025
  )
4000
4026
  ] }, view.id);
4001
4027
  }),
4002
- views.length === 0 && /* @__PURE__ */ jsx24(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx24(Box, { component: "span", sx: { display: "block", px: 1.25, py: 1.5, color: "text.secondary", lineHeight: 1.6 }, children: "Nenhuma vis\xE3o salva. Ajuste filtros, colunas ou ordena\xE7\xE3o e salve abaixo." }) })
4028
+ views.length === 0 && /* @__PURE__ */ jsx25(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx25(Box, { component: "span", sx: { display: "block", px: 1.25, py: 1.5, color: "text.secondary", lineHeight: 1.6 }, children: copy.nav.emptyHint }) })
4003
4029
  ] });
4004
4030
  }
4005
4031
  function ViewActions({
@@ -4008,6 +4034,7 @@ function ViewActions({
4008
4034
  onBack,
4009
4035
  testIdPrefix
4010
4036
  }) {
4037
+ const copy = useDataViewsCopy();
4011
4038
  const { onEditView, onPatchView, onDeleteView } = handlers;
4012
4039
  const action = (key, Icon, label, onClick, opts = {}) => /* @__PURE__ */ jsxs18(
4013
4040
  Box,
@@ -4022,9 +4049,9 @@ function ViewActions({
4022
4049
  "&:hover": { bgcolor: opts.danger ? "error.lighter" : "action.hover" }
4023
4050
  },
4024
4051
  children: [
4025
- /* @__PURE__ */ jsx24(Icon, { fontSize: "small", sx: { color: opts.danger ? "inherit" : "text.disabled" } }),
4026
- /* @__PURE__ */ jsx24(Box, { component: "span", sx: { flex: 1 }, children: label }),
4027
- opts.on && /* @__PURE__ */ jsx24(CheckRoundedIcon, { fontSize: "small", color: "primary" })
4052
+ /* @__PURE__ */ jsx25(Icon, { fontSize: "small", sx: { color: opts.danger ? "inherit" : "text.disabled" } }),
4053
+ /* @__PURE__ */ jsx25(Box, { component: "span", sx: { flex: 1 }, children: label }),
4054
+ opts.on && /* @__PURE__ */ jsx25(CheckRoundedIcon, { fontSize: "small", color: "primary" })
4028
4055
  ]
4029
4056
  }
4030
4057
  );
@@ -4038,18 +4065,18 @@ function ViewActions({
4038
4065
  "data-testid": `${testIdPrefix}-view-actions-back`,
4039
4066
  sx: { ...rowSx2, color: "text.secondary", fontSize: "0.75rem" },
4040
4067
  children: [
4041
- /* @__PURE__ */ jsx24(ChevronLeftRoundedIcon, { fontSize: "small" }),
4042
- /* @__PURE__ */ jsx24(Box, { component: "span", sx: { flex: 1, fontWeight: 600, color: "text.primary" }, children: view.name })
4068
+ /* @__PURE__ */ jsx25(ChevronLeftRoundedIcon, { fontSize: "small" }),
4069
+ /* @__PURE__ */ jsx25(Box, { component: "span", sx: { flex: 1, fontWeight: 600, color: "text.primary" }, children: view.name })
4043
4070
  ]
4044
4071
  }
4045
4072
  ),
4046
- /* @__PURE__ */ jsx24(Box, { sx: { my: 0.5, borderTop: 1, borderColor: "divider" } }),
4047
- action("edit", EditOutlinedIcon, "Renomear e editar", () => onEditView(view)),
4048
- action("default", StarOutlineRoundedIcon2, "Definir como padr\xE3o", () => onPatchView(view, { isDefault: !view.isDefault }), { on: view.isDefault }),
4049
- action("pin", PushPinOutlinedIcon, "Fixar na barra lateral", () => onPatchView(view, { pinned: !view.pinned }), { on: view.pinned }),
4050
- action("share", GroupOutlinedIcon, "Compartilhar com a equipe", () => onPatchView(view, { shared: !view.shared }), { on: view.shared }),
4051
- /* @__PURE__ */ jsx24(Box, { sx: { my: 0.5, borderTop: 1, borderColor: "divider" } }),
4052
- action("delete", DeleteOutlineRoundedIcon, "Excluir vis\xE3o", () => onDeleteView(view), { danger: true })
4073
+ /* @__PURE__ */ jsx25(Box, { sx: { my: 0.5, borderTop: 1, borderColor: "divider" } }),
4074
+ action("edit", EditOutlinedIcon, copy.nav.editView, () => onEditView(view)),
4075
+ action("default", StarOutlineRoundedIcon2, copy.nav.setDefault, () => onPatchView(view, { isDefault: !view.isDefault }), { on: view.isDefault }),
4076
+ action("pin", PushPinOutlinedIcon, copy.nav.pinToSidebar, () => onPatchView(view, { pinned: !view.pinned }), { on: view.pinned }),
4077
+ action("share", GroupOutlinedIcon, copy.nav.shareWithTeam, () => onPatchView(view, { shared: !view.shared }), { on: view.shared }),
4078
+ /* @__PURE__ */ jsx25(Box, { sx: { my: 0.5, borderTop: 1, borderColor: "divider" } }),
4079
+ action("delete", DeleteOutlineRoundedIcon, copy.nav.deleteView, () => onDeleteView(view), { danger: true })
4053
4080
  ] });
4054
4081
  }
4055
4082
  function ToggleContents({
@@ -4058,18 +4085,19 @@ function ToggleContents({
4058
4085
  interactive,
4059
4086
  testIdPrefix
4060
4087
  }) {
4088
+ const copy = useDataViewsCopy();
4061
4089
  return /* @__PURE__ */ jsxs18(Fragment11, { children: [
4062
- /* @__PURE__ */ jsx24(Box, { component: "span", sx: { fontWeight: 600 }, "data-testid": `${testIdPrefix}-display-view-name`, children: view.activeViewName ?? "Vis\xE3o principal" }),
4063
- view.dirty && /* @__PURE__ */ jsx24(
4090
+ /* @__PURE__ */ jsx25(Box, { component: "span", sx: { fontWeight: 600 }, "data-testid": `${testIdPrefix}-display-view-name`, children: view.activeViewName ?? "{copy.nav.mainView}" }),
4091
+ view.dirty && /* @__PURE__ */ jsx25(
4064
4092
  Box,
4065
4093
  {
4066
4094
  component: "span",
4067
- "aria-label": "Altera\xE7\xF5es n\xE3o salvas",
4095
+ "aria-label": copy.nav.unsavedChanges,
4068
4096
  "data-testid": `${testIdPrefix}-display-dirty`,
4069
4097
  sx: { height: 6, width: 6, borderRadius: "50%", bgcolor: "primary.main" }
4070
4098
  }
4071
4099
  ),
4072
- interactive && /* @__PURE__ */ jsx24(
4100
+ interactive && /* @__PURE__ */ jsx25(
4073
4101
  KeyboardArrowDownRoundedIcon2,
4074
4102
  {
4075
4103
  fontSize: "small",
@@ -4086,7 +4114,7 @@ function ViewToggle({
4086
4114
  }) {
4087
4115
  const interactive = Boolean(view.nav);
4088
4116
  const affordance = interactive ? { px: 0.75, py: 0.25, cursor: "pointer", "&:hover": { bgcolor: "action.hover" } } : { px: 0, py: 0, cursor: "default" };
4089
- return /* @__PURE__ */ jsx24(
4117
+ return /* @__PURE__ */ jsx25(
4090
4118
  Box,
4091
4119
  {
4092
4120
  component: interactive ? "button" : "div",
@@ -4107,14 +4135,15 @@ function ViewToggle({
4107
4135
  bgcolor: open ? "action.selected" : "transparent",
4108
4136
  ...affordance
4109
4137
  },
4110
- children: /* @__PURE__ */ jsx24(ToggleContents, { view, open, interactive, testIdPrefix })
4138
+ children: /* @__PURE__ */ jsx25(ToggleContents, { view, open, interactive, testIdPrefix })
4111
4139
  }
4112
4140
  );
4113
4141
  }
4114
4142
  function ViewHeader(props) {
4143
+ const copy = useDataViewsCopy();
4115
4144
  return /* @__PURE__ */ jsxs18(Box, { sx: { display: "flex", alignItems: "center", gap: 1, px: 1.5, py: 1, borderBottom: 1, borderColor: "divider" }, children: [
4116
- /* @__PURE__ */ jsx24(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx24(Box, { component: "span", sx: { textTransform: "uppercase", letterSpacing: 0.5, color: "text.disabled" }, children: "Vis\xE3o" }) }),
4117
- /* @__PURE__ */ jsx24(ViewToggle, { ...props })
4145
+ /* @__PURE__ */ jsx25(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx25(Box, { component: "span", sx: { textTransform: "uppercase", letterSpacing: 0.5, color: "text.disabled" }, children: copy.nav.label }) }),
4146
+ /* @__PURE__ */ jsx25(ViewToggle, { ...props })
4118
4147
  ] });
4119
4148
  }
4120
4149
  function ViewFooter({
@@ -4122,6 +4151,7 @@ function ViewFooter({
4122
4151
  onDone,
4123
4152
  testIdPrefix
4124
4153
  }) {
4154
+ const copy = useDataViewsCopy();
4125
4155
  return /* @__PURE__ */ jsxs18(
4126
4156
  Box,
4127
4157
  {
@@ -4137,21 +4167,21 @@ function ViewFooter({
4137
4167
  bgcolor: "action.hover"
4138
4168
  },
4139
4169
  children: [
4140
- /* @__PURE__ */ jsx24(
4170
+ /* @__PURE__ */ jsx25(
4141
4171
  Button,
4142
4172
  {
4143
4173
  variant: "text",
4144
4174
  size: "sm",
4145
4175
  color: "neutral",
4146
4176
  disabled: !view.dirty,
4147
- startIcon: /* @__PURE__ */ jsx24(RestartAltRoundedIcon, { fontSize: "small" }),
4177
+ startIcon: /* @__PURE__ */ jsx25(RestartAltRoundedIcon, { fontSize: "small" }),
4148
4178
  onClick: view.onReset,
4149
4179
  dataTestId: `${testIdPrefix}-display-reset`,
4150
4180
  children: "Redefinir"
4151
4181
  }
4152
4182
  ),
4153
4183
  /* @__PURE__ */ jsxs18(Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
4154
- view.onUpdate && /* @__PURE__ */ jsx24(
4184
+ view.onUpdate && /* @__PURE__ */ jsx25(
4155
4185
  Button,
4156
4186
  {
4157
4187
  variant: "text",
@@ -4165,18 +4195,18 @@ function ViewFooter({
4165
4195
  children: "Salvar como nova"
4166
4196
  }
4167
4197
  ),
4168
- /* @__PURE__ */ jsx24(
4198
+ /* @__PURE__ */ jsx25(
4169
4199
  Button,
4170
4200
  {
4171
4201
  size: "sm",
4172
4202
  disabled: !view.dirty,
4173
- startIcon: /* @__PURE__ */ jsx24(SaveOutlinedIcon, { fontSize: "small" }),
4203
+ startIcon: /* @__PURE__ */ jsx25(SaveOutlinedIcon, { fontSize: "small" }),
4174
4204
  onClick: () => {
4175
4205
  (view.onUpdate ?? view.onSaveAs)();
4176
4206
  onDone();
4177
4207
  },
4178
4208
  dataTestId: `${testIdPrefix}-display-save`,
4179
- children: view.onUpdate ? "Atualizar vis\xE3o" : "Salvar vis\xE3o"
4209
+ children: view.onUpdate ? copy.nav.update : copy.nav.save
4180
4210
  }
4181
4211
  )
4182
4212
  ] })
@@ -4191,16 +4221,16 @@ import ArrowUpwardRoundedIcon2 from "@mui/icons-material/ArrowUpwardRounded";
4191
4221
  import { useMediaQuery } from "@mui/material";
4192
4222
 
4193
4223
  // src/components/data-display/DataViews/data-views-glyphs.tsx
4194
- import { jsx as jsx25 } from "react/jsx-runtime";
4224
+ import { jsx as jsx26 } from "react/jsx-runtime";
4195
4225
  var FRAME = { width: 32, height: 24, display: "flex" };
4196
4226
  function barColor(active) {
4197
4227
  return active ? "primary.main" : "action.disabled";
4198
4228
  }
4199
4229
  function RowsGlyph({ gap, active }) {
4200
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, flexDirection: "column", justifyContent: "center", gap: `${gap}px` }, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsx25(Box, { sx: { height: 2, width: "100%", borderRadius: 1, bgcolor: barColor(active) } }, index)) });
4230
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, flexDirection: "column", justifyContent: "center", gap: `${gap}px` }, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsx26(Box, { sx: { height: 2, width: "100%", borderRadius: 1, bgcolor: barColor(active) } }, index)) });
4201
4231
  }
4202
4232
  function TableGlyph({ active }) {
4203
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "2px" }, children: Array.from({ length: 9 }).map((_, index) => /* @__PURE__ */ jsx25(
4233
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "2px" }, children: Array.from({ length: 9 }).map((_, index) => /* @__PURE__ */ jsx26(
4204
4234
  Box,
4205
4235
  {
4206
4236
  sx: { borderRadius: 0.5, bgcolor: barColor(active), opacity: index < 3 ? 1 : 0.55 }
@@ -4209,7 +4239,7 @@ function TableGlyph({ active }) {
4209
4239
  )) });
4210
4240
  }
4211
4241
  function ListGlyph({ active }) {
4212
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, flexDirection: "column", justifyContent: "center", gap: "4px" }, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsx25(
4242
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, flexDirection: "column", justifyContent: "center", gap: "4px" }, children: [0, 1, 2].map((index) => /* @__PURE__ */ jsx26(
4213
4243
  Box,
4214
4244
  {
4215
4245
  sx: {
@@ -4221,23 +4251,23 @@ function ListGlyph({ active }) {
4221
4251
  display: "flex",
4222
4252
  alignItems: "center"
4223
4253
  },
4224
- children: /* @__PURE__ */ jsx25(Box, { sx: { ml: "2px", height: 3, width: 3, borderRadius: "50%", bgcolor: "background.paper" } })
4254
+ children: /* @__PURE__ */ jsx26(Box, { sx: { ml: "2px", height: 3, width: 3, borderRadius: "50%", bgcolor: "background.paper" } })
4225
4255
  },
4226
4256
  index
4227
4257
  )) });
4228
4258
  }
4229
4259
  function GridGlyph({ n = 3, active }) {
4230
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, display: "grid", gridTemplateColumns: `repeat(${n}, 1fr)`, gap: "2px" }, children: Array.from({ length: n * 2 }).map((_, index) => /* @__PURE__ */ jsx25(Box, { sx: { borderRadius: 0.5, bgcolor: barColor(active) } }, index)) });
4260
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, display: "grid", gridTemplateColumns: `repeat(${n}, 1fr)`, gap: "2px" }, children: Array.from({ length: n * 2 }).map((_, index) => /* @__PURE__ */ jsx26(Box, { sx: { borderRadius: 0.5, bgcolor: barColor(active) } }, index)) });
4231
4261
  }
4232
4262
  function ColumnsGlyph({ n, active }) {
4233
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, gap: "2px" }, children: Array.from({ length: n }).map((_, column) => /* @__PURE__ */ jsx25(Box, { sx: { flex: 1, borderRadius: 0.5, bgcolor: barColor(active) } }, column)) });
4263
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, gap: "2px" }, children: Array.from({ length: n }).map((_, column) => /* @__PURE__ */ jsx26(Box, { sx: { flex: 1, borderRadius: 0.5, bgcolor: barColor(active) } }, column)) });
4234
4264
  }
4235
4265
  function BoardGlyph({ active }) {
4236
- return /* @__PURE__ */ jsx25(Box, { sx: { ...FRAME, gap: "2px" }, children: [3, 2, 1].map((count, column) => /* @__PURE__ */ jsx25(Box, { sx: { flex: 1, display: "flex", flexDirection: "column", gap: "2px" }, children: Array.from({ length: count }).map((_, index) => /* @__PURE__ */ jsx25(Box, { sx: { height: 5, borderRadius: 0.5, bgcolor: barColor(active) } }, index)) }, column)) });
4266
+ return /* @__PURE__ */ jsx26(Box, { sx: { ...FRAME, gap: "2px" }, children: [3, 2, 1].map((count, column) => /* @__PURE__ */ jsx26(Box, { sx: { flex: 1, display: "flex", flexDirection: "column", gap: "2px" }, children: Array.from({ length: count }).map((_, index) => /* @__PURE__ */ jsx26(Box, { sx: { height: 5, borderRadius: 0.5, bgcolor: barColor(active) } }, index)) }, column)) });
4237
4267
  }
4238
4268
 
4239
4269
  // src/components/data-display/DataViews/data-views-display-tabs.tsx
4240
- import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
4270
+ import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
4241
4271
  function Tile({
4242
4272
  active,
4243
4273
  label,
@@ -4297,22 +4327,23 @@ function SortTab({
4297
4327
  sortKinds,
4298
4328
  testIdPrefix
4299
4329
  }) {
4330
+ const copy = useDataViewsCopy();
4300
4331
  const [ascLabel, descLabel] = directionLabels(sortKinds?.[activeField]);
4301
4332
  return /* @__PURE__ */ jsxs19(Box, { sx: { p: 1 }, children: [
4302
- /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: "Dire\xE7\xE3o" }) }),
4303
- /* @__PURE__ */ jsx26(Box, { sx: { display: "flex", gap: 0.75, mb: 1.5, mt: 0.5 }, children: ["asc", "desc"].map((direction, index) => /* @__PURE__ */ jsx26(
4333
+ /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: copy.display.direction }) }),
4334
+ /* @__PURE__ */ jsx27(Box, { sx: { display: "flex", gap: 0.75, mb: 1.5, mt: 0.5 }, children: ["asc", "desc"].map((direction, index) => /* @__PURE__ */ jsx27(
4304
4335
  Tile,
4305
4336
  {
4306
4337
  active: activeOrder === direction,
4307
4338
  label: index === 0 ? ascLabel : descLabel,
4308
4339
  onClick: () => onChange(activeField || fields[0]?.value || "", direction),
4309
4340
  testId: `${testIdPrefix}-sort-dir-${direction}`,
4310
- children: direction === "asc" ? /* @__PURE__ */ jsx26(ArrowUpwardRoundedIcon2, { fontSize: "small" }) : /* @__PURE__ */ jsx26(ArrowDownwardRoundedIcon2, { fontSize: "small" })
4341
+ children: direction === "asc" ? /* @__PURE__ */ jsx27(ArrowUpwardRoundedIcon2, { fontSize: "small" }) : /* @__PURE__ */ jsx27(ArrowDownwardRoundedIcon2, { fontSize: "small" })
4311
4342
  },
4312
4343
  direction
4313
4344
  )) }),
4314
- /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: "Campo" }) }),
4315
- fields.map((field) => /* @__PURE__ */ jsx26(
4345
+ /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: "Campo" }) }),
4346
+ fields.map((field) => /* @__PURE__ */ jsx27(
4316
4347
  SortFieldRow,
4317
4348
  {
4318
4349
  label: field.label,
@@ -4356,54 +4387,36 @@ function SortFieldRow({
4356
4387
  "&:hover": { bgcolor: "action.hover" }
4357
4388
  },
4358
4389
  children: [
4359
- /* @__PURE__ */ jsx26(
4390
+ /* @__PURE__ */ jsx27(
4360
4391
  Box,
4361
4392
  {
4362
4393
  component: "span",
4363
4394
  sx: { height: 6, width: 6, borderRadius: "50%", bgcolor: active ? "primary.main" : "action.disabled" }
4364
4395
  }
4365
4396
  ),
4366
- /* @__PURE__ */ jsx26(Box, { component: "span", sx: { flex: 1, minWidth: 0 }, children: label })
4397
+ /* @__PURE__ */ jsx27(Box, { component: "span", sx: { flex: 1, minWidth: 0 }, children: label })
4367
4398
  ]
4368
4399
  }
4369
4400
  );
4370
4401
  }
4371
- var LAYOUT_HINTS = {
4372
- table: "Colunas compar\xE1veis, boa para varrer n\xFAmeros.",
4373
- list: "Uma linha por item, com os dados principais.",
4374
- cards: "Blocos maiores, bom para poucos itens.",
4375
- board: "Colunas por etapa, para acompanhar o que est\xE1 onde."
4376
- };
4377
- var DENSITY_HEADINGS = {
4378
- table: "Altura das linhas",
4379
- list: "Altura das linhas",
4380
- cards: "Cards por linha",
4381
- board: "Largura das colunas"
4382
- };
4383
- var DENSITY_LABELS = {
4384
- table: { compact: "Baixa", cozy: "M\xE9dia", comfortable: "Alta" },
4385
- list: { compact: "Baixa", cozy: "M\xE9dia", comfortable: "Alta" },
4386
- cards: { compact: "Muitos", cozy: "M\xE9dio", comfortable: "Poucos" },
4387
- board: { compact: "Estreita", cozy: "M\xE9dia", comfortable: "Larga" }
4388
- };
4389
- function densityTiles(layout) {
4390
- const labels = DENSITY_LABELS[layout];
4402
+ function densityTiles(layout, copy) {
4403
+ const labels = copy.display.densityLabels[layout] ?? copy.display.densityLabels.table;
4391
4404
  return [
4392
- { value: "compact", label: labels.compact, gap: 2, columns: 4 },
4393
- { value: "cozy", label: labels.cozy, gap: 5, columns: 3 },
4394
- { value: "comfortable", label: labels.comfortable, gap: 8, columns: 2 }
4405
+ { value: "compact", label: labels?.compact ?? "compact", gap: 2, columns: 4 },
4406
+ { value: "cozy", label: labels?.cozy ?? "cozy", gap: 5, columns: 3 },
4407
+ { value: "comfortable", label: labels?.comfortable ?? "comfortable", gap: 8, columns: 2 }
4395
4408
  ];
4396
4409
  }
4397
4410
  function densityGlyph(layout, tile, active) {
4398
- if (layout === "cards") return /* @__PURE__ */ jsx26(GridGlyph, { n: tile.columns, active });
4399
- if (layout === "board") return /* @__PURE__ */ jsx26(ColumnsGlyph, { n: tile.columns, active });
4400
- return /* @__PURE__ */ jsx26(RowsGlyph, { gap: tile.gap, active });
4411
+ if (layout === "cards") return /* @__PURE__ */ jsx27(GridGlyph, { n: tile.columns, active });
4412
+ if (layout === "board") return /* @__PURE__ */ jsx27(ColumnsGlyph, { n: tile.columns, active });
4413
+ return /* @__PURE__ */ jsx27(RowsGlyph, { gap: tile.gap, active });
4401
4414
  }
4402
4415
  function layoutGlyph(layout, active) {
4403
- if (layout === "table") return /* @__PURE__ */ jsx26(TableGlyph, { active });
4404
- if (layout === "list") return /* @__PURE__ */ jsx26(ListGlyph, { active });
4405
- if (layout === "cards") return /* @__PURE__ */ jsx26(GridGlyph, { active });
4406
- return /* @__PURE__ */ jsx26(BoardGlyph, { active });
4416
+ if (layout === "table") return /* @__PURE__ */ jsx27(TableGlyph, { active });
4417
+ if (layout === "list") return /* @__PURE__ */ jsx27(ListGlyph, { active });
4418
+ if (layout === "cards") return /* @__PURE__ */ jsx27(GridGlyph, { active });
4419
+ return /* @__PURE__ */ jsx27(BoardGlyph, { active });
4407
4420
  }
4408
4421
  var LAYOUT_TILE_LABELS = {
4409
4422
  table: "Tabela",
@@ -4412,12 +4425,13 @@ var LAYOUT_TILE_LABELS = {
4412
4425
  board: "Quadro"
4413
4426
  };
4414
4427
  function DensityTiles({ testIdPrefix }) {
4428
+ const copy = useDataViewsCopy();
4415
4429
  const { layout, density, setDensity } = useDataViewsLayout();
4416
4430
  const isOneColumn = useMediaQuery((t) => t.breakpoints.down("sm"));
4417
4431
  if (layout === "cards" && isOneColumn) {
4418
- return /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, pt: 0.5, display: "block", color: "text.disabled" }, children: "Um card por linha nesta largura \u2014 a densidade volta em telas maiores." }) });
4432
+ return /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, pt: 0.5, display: "block", color: "text.disabled" }, children: copy.display.densityUnavailableNarrow }) });
4419
4433
  }
4420
- return /* @__PURE__ */ jsx26(Box, { sx: { display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 0.75, mt: 0.5 }, children: densityTiles(layout).map((tile) => /* @__PURE__ */ jsx26(
4434
+ return /* @__PURE__ */ jsx27(Box, { sx: { display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 0.75, mt: 0.5 }, children: densityTiles(layout, copy).map((tile) => /* @__PURE__ */ jsx27(
4421
4435
  Tile,
4422
4436
  {
4423
4437
  active: density === tile.value,
@@ -4430,6 +4444,7 @@ function DensityTiles({ testIdPrefix }) {
4430
4444
  )) });
4431
4445
  }
4432
4446
  function DisplayTab({ testIdPrefix }) {
4447
+ const copy = useDataViewsCopy();
4433
4448
  const { layout, setLayout, canUseCards, canUseList, canUseBoard } = useDataViewsLayout();
4434
4449
  const available = [
4435
4450
  "table",
@@ -4438,8 +4453,8 @@ function DisplayTab({ testIdPrefix }) {
4438
4453
  ...canUseBoard ? ["board"] : []
4439
4454
  ];
4440
4455
  return /* @__PURE__ */ jsxs19(Box, { sx: { p: 1 }, children: [
4441
- /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: "Formato" }) }),
4442
- /* @__PURE__ */ jsx26(
4456
+ /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: "Formato" }) }),
4457
+ /* @__PURE__ */ jsx27(
4443
4458
  Box,
4444
4459
  {
4445
4460
  sx: {
@@ -4448,7 +4463,7 @@ function DisplayTab({ testIdPrefix }) {
4448
4463
  gap: 0.75,
4449
4464
  mt: 0.5
4450
4465
  },
4451
- children: available.map((value) => /* @__PURE__ */ jsx26(
4466
+ children: available.map((value) => /* @__PURE__ */ jsx27(
4452
4467
  Tile,
4453
4468
  {
4454
4469
  active: layout === value,
@@ -4461,29 +4476,32 @@ function DisplayTab({ testIdPrefix }) {
4461
4476
  ))
4462
4477
  }
4463
4478
  ),
4464
- /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, py: 1, display: "block", color: "text.disabled" }, children: LAYOUT_HINTS[layout] }) }),
4465
- /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: DENSITY_HEADINGS[layout] }) }),
4466
- /* @__PURE__ */ jsx26(DensityTiles, { testIdPrefix }),
4467
- !canUseBoard && /* @__PURE__ */ jsx26(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx26(Box, { component: "span", sx: { px: 0.5, pt: 1.25, display: "block", color: "text.disabled" }, children: "Esta tela n\xE3o declara etapas, ent\xE3o n\xE3o oferece quadro." }) })
4479
+ /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, py: 1, display: "block", color: "text.disabled" }, children: copy.display.layoutHints[layout] }) }),
4480
+ /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, color: "text.secondary" }, children: copy.display.densityHeadings[layout] }) }),
4481
+ /* @__PURE__ */ jsx27(DensityTiles, { testIdPrefix }),
4482
+ !canUseBoard && /* @__PURE__ */ jsx27(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx27(Box, { component: "span", sx: { px: 0.5, pt: 1.25, display: "block", color: "text.disabled" }, children: copy.display.boardUnavailable }) })
4468
4483
  ] });
4469
4484
  }
4470
4485
 
4471
4486
  // src/components/data-display/DataViews/data-views-display-panel.tsx
4472
- import { Fragment as Fragment12, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
4473
- var TABS = [
4474
- { key: "sort", label: "Ordenar" },
4475
- { key: "columns", label: "Colunas" },
4476
- { key: "display", label: "Exibi\xE7\xE3o" }
4477
- ];
4487
+ import { Fragment as Fragment12, jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
4488
+ function displayTabs(copy) {
4489
+ return [
4490
+ { key: "sort", label: copy.display.sortTab },
4491
+ { key: "columns", label: copy.display.columnsTab },
4492
+ { key: "display", label: copy.display.panelTab }
4493
+ ];
4494
+ }
4478
4495
  function PanelTabs({
4479
4496
  tab,
4480
4497
  onChange,
4481
4498
  muted,
4482
4499
  testIdPrefix
4483
4500
  }) {
4484
- return /* @__PURE__ */ jsx27(Box, { sx: { display: "flex", gap: 0.5, p: 0.75, bgcolor: "action.hover", borderBottom: 1, borderColor: "divider" }, children: TABS.map((entry) => {
4501
+ const copy = useDataViewsCopy();
4502
+ return /* @__PURE__ */ jsx28(Box, { sx: { display: "flex", gap: 0.5, p: 0.75, bgcolor: "action.hover", borderBottom: 1, borderColor: "divider" }, children: displayTabs(copy).map((entry) => {
4485
4503
  const active = tab === entry.key && !muted;
4486
- return /* @__PURE__ */ jsx27(
4504
+ return /* @__PURE__ */ jsx28(
4487
4505
  Box,
4488
4506
  {
4489
4507
  component: "button",
@@ -4518,7 +4536,7 @@ function PanelBody({
4518
4536
  testIdPrefix
4519
4537
  }) {
4520
4538
  if (tab === "sort") {
4521
- return /* @__PURE__ */ jsx27(
4539
+ return /* @__PURE__ */ jsx28(
4522
4540
  SortTab,
4523
4541
  {
4524
4542
  fields: c.resolvedSortFields,
@@ -4531,7 +4549,7 @@ function PanelBody({
4531
4549
  );
4532
4550
  }
4533
4551
  if (tab === "columns") {
4534
- return /* @__PURE__ */ jsx27(
4552
+ return /* @__PURE__ */ jsx28(
4535
4553
  ColumnsTab,
4536
4554
  {
4537
4555
  columns: c.hideableColumns,
@@ -4545,7 +4563,7 @@ function PanelBody({
4545
4563
  }
4546
4564
  );
4547
4565
  }
4548
- return /* @__PURE__ */ jsx27(DisplayTab, { testIdPrefix });
4566
+ return /* @__PURE__ */ jsx28(DisplayTab, { testIdPrefix });
4549
4567
  }
4550
4568
  function PanelSurface({
4551
4569
  c,
@@ -4563,7 +4581,7 @@ function PanelSurface({
4563
4581
  testIdPrefix
4564
4582
  }) {
4565
4583
  return /* @__PURE__ */ jsxs20(Box, { "data-testid": `${testIdPrefix}-display-panel`, children: [
4566
- view && /* @__PURE__ */ jsx27(
4584
+ view && /* @__PURE__ */ jsx28(
4567
4585
  ViewHeader,
4568
4586
  {
4569
4587
  view,
@@ -4572,7 +4590,7 @@ function PanelSurface({
4572
4590
  testIdPrefix
4573
4591
  }
4574
4592
  ),
4575
- /* @__PURE__ */ jsx27(
4593
+ /* @__PURE__ */ jsx28(
4576
4594
  PanelTabs,
4577
4595
  {
4578
4596
  tab,
@@ -4581,7 +4599,7 @@ function PanelSurface({
4581
4599
  testIdPrefix
4582
4600
  }
4583
4601
  ),
4584
- /* @__PURE__ */ jsx27(Box, { sx: { maxHeight: 320, minHeight: 220, overflowY: "auto" }, children: nav ? /* @__PURE__ */ jsx27(
4602
+ /* @__PURE__ */ jsx28(Box, { sx: { maxHeight: 320, minHeight: 220, overflowY: "auto" }, children: nav ? /* @__PURE__ */ jsx28(
4585
4603
  ViewsBody,
4586
4604
  {
4587
4605
  nav,
@@ -4590,8 +4608,8 @@ function PanelSurface({
4590
4608
  onBack,
4591
4609
  testIdPrefix
4592
4610
  }
4593
- ) : /* @__PURE__ */ jsx27(PanelBody, { tab, c, sortKinds, testIdPrefix }) }),
4594
- view && /* @__PURE__ */ jsx27(ViewFooter, { view, onDone, testIdPrefix })
4611
+ ) : /* @__PURE__ */ jsx28(PanelBody, { tab, c, sortKinds, testIdPrefix }) }),
4612
+ view && /* @__PURE__ */ jsx28(ViewFooter, { view, onDone, testIdPrefix })
4595
4613
  ] });
4596
4614
  }
4597
4615
  function ViewsBody({
@@ -4603,9 +4621,9 @@ function ViewsBody({
4603
4621
  }) {
4604
4622
  const live = actionsFor ? nav.views.find((view) => view.id === actionsFor.id) : void 0;
4605
4623
  if (live) {
4606
- return /* @__PURE__ */ jsx27(ViewActions, { view: live, handlers: nav, onBack, testIdPrefix });
4624
+ return /* @__PURE__ */ jsx28(ViewActions, { view: live, handlers: nav, onBack, testIdPrefix });
4607
4625
  }
4608
- return /* @__PURE__ */ jsx27(ViewsList, { handlers: nav, onOpenActions, testIdPrefix });
4626
+ return /* @__PURE__ */ jsx28(ViewsList, { handlers: nav, onOpenActions, testIdPrefix });
4609
4627
  }
4610
4628
  function DisplayTrigger({
4611
4629
  dirty,
@@ -4613,7 +4631,8 @@ function DisplayTrigger({
4613
4631
  onOpen,
4614
4632
  testIdPrefix
4615
4633
  }) {
4616
- return /* @__PURE__ */ jsx27(
4634
+ const copy = useDataViewsCopy();
4635
+ return /* @__PURE__ */ jsx28(
4617
4636
  Button,
4618
4637
  {
4619
4638
  variant: "outline",
@@ -4621,13 +4640,13 @@ function DisplayTrigger({
4621
4640
  color: "neutral",
4622
4641
  onClick: (event) => onOpen(event.currentTarget),
4623
4642
  dataTestId: `${testIdPrefix}-display-trigger`,
4624
- "aria-label": "Exibir",
4625
- title: compact ? "Exibir" : void 0,
4643
+ "aria-label": copy.display.trigger,
4644
+ title: compact ? copy.display.trigger : void 0,
4626
4645
  children: /* @__PURE__ */ jsxs20(Box, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
4627
- /* @__PURE__ */ jsx27(DisplaySettingsRoundedIcon, { fontSize: "small" }),
4628
- !compact && /* @__PURE__ */ jsx27(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: "Exibir" }),
4629
- dirty && /* @__PURE__ */ jsx27(Box, { component: "span", sx: { height: 6, width: 6, borderRadius: "50%", bgcolor: "primary.main" } }),
4630
- !compact && /* @__PURE__ */ jsx27(KeyboardArrowDownRoundedIcon3, { fontSize: "small" })
4646
+ /* @__PURE__ */ jsx28(DisplaySettingsRoundedIcon, { fontSize: "small" }),
4647
+ !compact && /* @__PURE__ */ jsx28(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: copy.display.trigger }),
4648
+ dirty && /* @__PURE__ */ jsx28(Box, { component: "span", sx: { height: 6, width: 6, borderRadius: "50%", bgcolor: "primary.main" } }),
4649
+ !compact && /* @__PURE__ */ jsx28(KeyboardArrowDownRoundedIcon3, { fontSize: "small" })
4631
4650
  ] })
4632
4651
  }
4633
4652
  );
@@ -4650,7 +4669,7 @@ function DataViewsDisplayPanel({
4650
4669
  setActionsFor(null);
4651
4670
  };
4652
4671
  return /* @__PURE__ */ jsxs20(Fragment12, { children: [
4653
- /* @__PURE__ */ jsx27(
4672
+ /* @__PURE__ */ jsx28(
4654
4673
  DisplayTrigger,
4655
4674
  {
4656
4675
  dirty: Boolean(view?.dirty),
@@ -4659,7 +4678,7 @@ function DataViewsDisplayPanel({
4659
4678
  testIdPrefix
4660
4679
  }
4661
4680
  ),
4662
- /* @__PURE__ */ jsx27(
4681
+ /* @__PURE__ */ jsx28(
4663
4682
  Popover3,
4664
4683
  {
4665
4684
  open: Boolean(anchor),
@@ -4668,7 +4687,7 @@ function DataViewsDisplayPanel({
4668
4687
  anchorOrigin: { vertical: "bottom", horizontal: "right" },
4669
4688
  transformOrigin: { vertical: "top", horizontal: "right" },
4670
4689
  slotProps: { paper: { sx: { width: 320, maxWidth: "calc(100vw - 32px)" } } },
4671
- children: /* @__PURE__ */ jsx27(
4690
+ children: /* @__PURE__ */ jsx28(
4672
4691
  PanelSurface,
4673
4692
  {
4674
4693
  c,
@@ -4702,12 +4721,7 @@ import DownloadRoundedIcon from "@mui/icons-material/DownloadRounded";
4702
4721
  import KeyboardArrowDownRoundedIcon4 from "@mui/icons-material/KeyboardArrowDownRounded";
4703
4722
  import { CircularProgress, Popover as Popover4 } from "@mui/material";
4704
4723
  import { useState as useState10 } from "react";
4705
- import { Fragment as Fragment13, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
4706
- var FORMAT_COPY = {
4707
- xlsx: { label: "Excel (.xlsx)", hint: "Abre direto, com as colunas dimensionadas" },
4708
- csv: { label: "CSV (.csv)", hint: "Para importar em outro sistema" },
4709
- json: { label: "JSON (.json)", hint: "Para integra\xE7\xF5es" }
4710
- };
4724
+ import { Fragment as Fragment13, jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
4711
4725
  var ALL_FORMATS = ["xlsx", "csv", "json"];
4712
4726
  function scopeLabel(selected, total) {
4713
4727
  if (selected > 0) {
@@ -4721,7 +4735,8 @@ function ExportTrigger({
4721
4735
  testIdPrefix,
4722
4736
  compact
4723
4737
  }) {
4724
- return /* @__PURE__ */ jsx28(
4738
+ const copy = useDataViewsCopy();
4739
+ return /* @__PURE__ */ jsx29(
4725
4740
  Button,
4726
4741
  {
4727
4742
  variant: "outline",
@@ -4730,12 +4745,12 @@ function ExportTrigger({
4730
4745
  disabled: busy,
4731
4746
  onClick: (event) => onOpen(event.currentTarget),
4732
4747
  dataTestId: `${testIdPrefix}-export-trigger`,
4733
- "aria-label": "Exportar",
4734
- title: compact ? "Exportar" : void 0,
4748
+ "aria-label": copy.export.trigger,
4749
+ title: compact ? copy.export.trigger : void 0,
4735
4750
  children: /* @__PURE__ */ jsxs21(Box, { component: "span", sx: { display: "inline-flex", alignItems: "center", gap: 0.5 }, children: [
4736
- busy ? /* @__PURE__ */ jsx28(CircularProgress, { size: 14 }) : /* @__PURE__ */ jsx28(DownloadRoundedIcon, { fontSize: "small" }),
4737
- !compact && /* @__PURE__ */ jsx28(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: "Exportar" }),
4738
- !compact && /* @__PURE__ */ jsx28(KeyboardArrowDownRoundedIcon4, { fontSize: "small" })
4751
+ busy ? /* @__PURE__ */ jsx29(CircularProgress, { size: 14 }) : /* @__PURE__ */ jsx29(DownloadRoundedIcon, { fontSize: "small" }),
4752
+ !compact && /* @__PURE__ */ jsx29(Box, { component: "span", sx: { display: { xs: "none", sm: "inline" } }, children: "Exportar" }),
4753
+ !compact && /* @__PURE__ */ jsx29(KeyboardArrowDownRoundedIcon4, { fontSize: "small" })
4739
4754
  ] })
4740
4755
  }
4741
4756
  );
@@ -4745,6 +4760,7 @@ function FormatRow({
4745
4760
  onPick,
4746
4761
  testIdPrefix
4747
4762
  }) {
4763
+ const copy = useDataViewsCopy();
4748
4764
  return /* @__PURE__ */ jsxs21(
4749
4765
  Box,
4750
4766
  {
@@ -4767,8 +4783,8 @@ function FormatRow({
4767
4783
  "&:hover": { bgcolor: "action.hover" }
4768
4784
  },
4769
4785
  children: [
4770
- /* @__PURE__ */ jsx28(Box, { component: "span", sx: { fontSize: "0.8125rem" }, children: FORMAT_COPY[format].label }),
4771
- /* @__PURE__ */ jsx28(Box, { component: "span", sx: { fontSize: "0.6875rem", color: "text.disabled" }, children: FORMAT_COPY[format].hint })
4786
+ /* @__PURE__ */ jsx29(Box, { component: "span", sx: { fontSize: "0.8125rem" }, children: copy.export.formats[format]?.label ?? format }),
4787
+ /* @__PURE__ */ jsx29(Box, { component: "span", sx: { fontSize: "0.6875rem", color: "text.disabled" }, children: copy.export.formats[format]?.hint ?? "" })
4772
4788
  ]
4773
4789
  }
4774
4790
  );
@@ -4781,18 +4797,16 @@ function ExportPanel({
4781
4797
  onPick,
4782
4798
  testIdPrefix
4783
4799
  }) {
4800
+ const copy = useDataViewsCopy();
4784
4801
  return /* @__PURE__ */ jsxs21(Box, { "data-testid": `${testIdPrefix}-export-panel`, children: [
4785
4802
  /* @__PURE__ */ jsxs21(Box, { sx: { px: 1.5, pt: 1, pb: 1, borderBottom: 1, borderColor: "divider" }, children: [
4786
- /* @__PURE__ */ jsx28(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsxs21(Box, { component: "span", "data-testid": `${testIdPrefix}-export-scope`, children: [
4803
+ /* @__PURE__ */ jsx29(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsxs21(Box, { component: "span", "data-testid": `${testIdPrefix}-export-scope`, children: [
4787
4804
  "Exportando ",
4788
4805
  scopeLabel(selectedCount, totalCount)
4789
4806
  ] }) }),
4790
- /* @__PURE__ */ jsx28(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsxs21(Box, { component: "span", sx: { color: "text.disabled" }, children: [
4791
- columnCount,
4792
- " colunas vis\xEDveis, na ordem atual"
4793
- ] }) })
4807
+ /* @__PURE__ */ jsx29(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx29(Box, { component: "span", sx: { color: "text.disabled" }, children: copy.export.visibleColumns(columnCount) }) })
4794
4808
  ] }),
4795
- formats.map((format) => /* @__PURE__ */ jsx28(
4809
+ formats.map((format) => /* @__PURE__ */ jsx29(
4796
4810
  FormatRow,
4797
4811
  {
4798
4812
  format,
@@ -4831,8 +4845,8 @@ function DataViewsExportMenu({
4831
4845
  }
4832
4846
  };
4833
4847
  return /* @__PURE__ */ jsxs21(Fragment13, { children: [
4834
- /* @__PURE__ */ jsx28(ExportTrigger, { busy, onOpen: setAnchor, testIdPrefix, compact }),
4835
- /* @__PURE__ */ jsx28(
4848
+ /* @__PURE__ */ jsx29(ExportTrigger, { busy, onOpen: setAnchor, testIdPrefix, compact }),
4849
+ /* @__PURE__ */ jsx29(
4836
4850
  Popover4,
4837
4851
  {
4838
4852
  open: Boolean(anchor),
@@ -4841,7 +4855,7 @@ function DataViewsExportMenu({
4841
4855
  anchorOrigin: { vertical: "bottom", horizontal: "right" },
4842
4856
  transformOrigin: { vertical: "top", horizontal: "right" },
4843
4857
  slotProps: { paper: { sx: { width: 260, maxWidth: "calc(100vw - 32px)" } } },
4844
- children: /* @__PURE__ */ jsx28(
4858
+ children: /* @__PURE__ */ jsx29(
4845
4859
  ExportPanel,
4846
4860
  {
4847
4861
  formats: config.formats ?? ALL_FORMATS,
@@ -4858,12 +4872,12 @@ function DataViewsExportMenu({
4858
4872
  }
4859
4873
 
4860
4874
  // src/components/data-display/DataViews/data-views-toolbar.tsx
4861
- import { Fragment as Fragment14, jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
4875
+ import { Fragment as Fragment14, jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
4862
4876
  function ToolbarRightControls(props) {
4863
4877
  const { testIdPrefix, matchedCount, totalCount, filterOpen, setFilterOpen } = props;
4864
4878
  return /* @__PURE__ */ jsxs22(Fragment14, { children: [
4865
4879
  !props.counterHidden && /* @__PURE__ */ jsxs22(Fragment14, { children: [
4866
- /* @__PURE__ */ jsx29(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs22(
4880
+ /* @__PURE__ */ jsx30(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsxs22(
4867
4881
  Box,
4868
4882
  {
4869
4883
  component: "span",
@@ -4876,7 +4890,7 @@ function ToolbarRightControls(props) {
4876
4890
  ]
4877
4891
  }
4878
4892
  ) }),
4879
- /* @__PURE__ */ jsx29(
4893
+ /* @__PURE__ */ jsx30(
4880
4894
  Divider,
4881
4895
  {
4882
4896
  orientation: "vertical",
@@ -4886,7 +4900,7 @@ function ToolbarRightControls(props) {
4886
4900
  )
4887
4901
  ] }),
4888
4902
  props.toolbarRightSlot,
4889
- /* @__PURE__ */ jsx29(
4903
+ /* @__PURE__ */ jsx30(
4890
4904
  DataViewsDisplayPanel,
4891
4905
  {
4892
4906
  c: props.c,
@@ -4896,7 +4910,7 @@ function ToolbarRightControls(props) {
4896
4910
  compact: props.compactControls
4897
4911
  }
4898
4912
  ),
4899
- props.exportConfig && /* @__PURE__ */ jsx29(
4913
+ props.exportConfig && /* @__PURE__ */ jsx30(
4900
4914
  DataViewsExportMenu,
4901
4915
  {
4902
4916
  config: props.exportConfig,
@@ -4908,7 +4922,7 @@ function ToolbarRightControls(props) {
4908
4922
  compact: props.compactControls
4909
4923
  }
4910
4924
  ),
4911
- props.showFilterTrigger !== false && /* @__PURE__ */ jsx29(
4925
+ props.showFilterTrigger !== false && /* @__PURE__ */ jsx30(
4912
4926
  FilterTrigger,
4913
4927
  {
4914
4928
  open: filterOpen,
@@ -4921,7 +4935,7 @@ function ToolbarRightControls(props) {
4921
4935
  }
4922
4936
  function GridToolbar(props) {
4923
4937
  const { testIdPrefix, selectedRows } = props;
4924
- return /* @__PURE__ */ jsx29(
4938
+ return /* @__PURE__ */ jsx30(
4925
4939
  Box,
4926
4940
  {
4927
4941
  ref: props.barRef,
@@ -4933,7 +4947,7 @@ function GridToolbar(props) {
4933
4947
  mx: { xs: -2, md: -3 },
4934
4948
  px: { xs: 2, md: 3 }
4935
4949
  },
4936
- children: /* @__PURE__ */ jsx29(
4950
+ children: /* @__PURE__ */ jsx30(
4937
4951
  ContentToolbar,
4938
4952
  {
4939
4953
  hasSelection: selectedRows.length > 0,
@@ -4951,7 +4965,7 @@ function GridToolbar(props) {
4951
4965
  }),
4952
4966
  leadingControls: props.filterControls,
4953
4967
  exclusiveSelection: true,
4954
- rightControls: /* @__PURE__ */ jsx29(ToolbarRightControls, { ...props })
4968
+ rightControls: /* @__PURE__ */ jsx30(ToolbarRightControls, { ...props })
4955
4969
  }
4956
4970
  )
4957
4971
  }
@@ -4959,7 +4973,7 @@ function GridToolbar(props) {
4959
4973
  }
4960
4974
 
4961
4975
  // src/components/data-display/DataViews/data-views-shell-toolbar.tsx
4962
- import { jsx as jsx30 } from "react/jsx-runtime";
4976
+ import { jsx as jsx31 } from "react/jsx-runtime";
4963
4977
  function ShellToolbar({
4964
4978
  c,
4965
4979
  rows,
@@ -4981,7 +4995,7 @@ function ShellToolbar({
4981
4995
  label: col.label,
4982
4996
  visible: c.state.visibleColumns.includes(col.id)
4983
4997
  }));
4984
- return /* @__PURE__ */ jsx30(
4998
+ return /* @__PURE__ */ jsx31(
4985
4999
  GridToolbar,
4986
5000
  {
4987
5001
  c,
@@ -5018,7 +5032,7 @@ function ShellToolbar({
5018
5032
  // src/components/data-display/DataViews/data-views-empty.tsx
5019
5033
  import FilterAltOffRoundedIcon2 from "@mui/icons-material/FilterAltOffRounded";
5020
5034
  import InboxRoundedIcon from "@mui/icons-material/InboxRounded";
5021
- import { Fragment as Fragment15, jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
5035
+ import { Fragment as Fragment15, jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
5022
5036
  function DataViewsEmpty({
5023
5037
  filtered,
5024
5038
  onClearFilters,
@@ -5039,7 +5053,7 @@ function DataViewsEmpty({
5039
5053
  px: 2
5040
5054
  },
5041
5055
  children: [
5042
- /* @__PURE__ */ jsx31(
5056
+ /* @__PURE__ */ jsx32(
5043
5057
  Box,
5044
5058
  {
5045
5059
  sx: {
@@ -5050,13 +5064,13 @@ function DataViewsEmpty({
5050
5064
  bgcolor: "action.hover",
5051
5065
  color: "text.disabled"
5052
5066
  },
5053
- children: /* @__PURE__ */ jsx31(Icon, {})
5067
+ children: /* @__PURE__ */ jsx32(Icon, {})
5054
5068
  }
5055
5069
  ),
5056
5070
  filtered ? /* @__PURE__ */ jsxs23(Fragment15, { children: [
5057
- /* @__PURE__ */ jsx31(Text, { variant: "body", as: "p", children: /* @__PURE__ */ jsx31(Box, { component: "span", sx: { fontWeight: 600 }, children: "Nenhum resultado para esses filtros" }) }),
5058
- /* @__PURE__ */ jsx31(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx31(Box, { component: "span", sx: { display: "block", mt: 0.5, mb: 2, color: "text.secondary", maxWidth: 380 }, children: "Ajuste ou remova os filtros." }) }),
5059
- /* @__PURE__ */ jsx31(
5071
+ /* @__PURE__ */ jsx32(Text, { variant: "body", as: "p", children: /* @__PURE__ */ jsx32(Box, { component: "span", sx: { fontWeight: 600 }, children: "Nenhum resultado para esses filtros" }) }),
5072
+ /* @__PURE__ */ jsx32(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx32(Box, { component: "span", sx: { display: "block", mt: 0.5, mb: 2, color: "text.secondary", maxWidth: 380 }, children: "Ajuste ou remova os filtros." }) }),
5073
+ /* @__PURE__ */ jsx32(
5060
5074
  Button,
5061
5075
  {
5062
5076
  variant: "outline",
@@ -5078,13 +5092,13 @@ function DataViewsEmpty({
5078
5092
  }
5079
5093
 
5080
5094
  // src/components/data-display/DataViews/data-views-pagination.tsx
5081
- import { jsx as jsx32 } from "react/jsx-runtime";
5095
+ import { jsx as jsx33 } from "react/jsx-runtime";
5082
5096
  function DataViewsPagination({
5083
5097
  c,
5084
5098
  testIdPrefix
5085
5099
  }) {
5086
5100
  if (!c.serverMode || c.serverPageCount <= 1) return null;
5087
- return /* @__PURE__ */ jsx32(Box, { sx: { mt: 2, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx32(
5101
+ return /* @__PURE__ */ jsx33(Box, { sx: { mt: 2, display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsx33(
5088
5102
  Pagination,
5089
5103
  {
5090
5104
  page: c.serverPage,
@@ -5097,7 +5111,7 @@ function DataViewsPagination({
5097
5111
 
5098
5112
  // src/components/data-display/DataViews/data-views-scopes.tsx
5099
5113
  import { useEffect as useEffect4, useMemo as useMemo2, useRef as useRef3 } from "react";
5100
- import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
5114
+ import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
5101
5115
  function resolveScope(scopes, stored) {
5102
5116
  if (scopes.length === 0) return void 0;
5103
5117
  const declared = stored !== void 0 && scopes.some((scope) => scope.id === stored);
@@ -5172,7 +5186,7 @@ function ScopeCount({
5172
5186
  active,
5173
5187
  testId
5174
5188
  }) {
5175
- return /* @__PURE__ */ jsx33(
5189
+ return /* @__PURE__ */ jsx34(
5176
5190
  Box,
5177
5191
  {
5178
5192
  component: "span",
@@ -5222,7 +5236,7 @@ function ScopeTab({
5222
5236
  sx: scopeTabSx(active),
5223
5237
  children: [
5224
5238
  scope.label,
5225
- count !== void 0 && /* @__PURE__ */ jsx33(
5239
+ count !== void 0 && /* @__PURE__ */ jsx34(
5226
5240
  ScopeCount,
5227
5241
  {
5228
5242
  count,
@@ -5255,6 +5269,7 @@ function DataViewsScopeTabs({
5255
5269
  counts,
5256
5270
  testIdPrefix
5257
5271
  }) {
5272
+ const copy = useDataViewsCopy();
5258
5273
  const stripRef = useScrollActiveIntoView(value);
5259
5274
  const moveTo = (index) => {
5260
5275
  stripRef.current?.querySelectorAll('[role="tab"]')?.[index]?.focus();
@@ -5266,7 +5281,7 @@ function DataViewsScopeTabs({
5266
5281
  0,
5267
5282
  scopes.findIndex((scope) => scope.id === value)
5268
5283
  );
5269
- return /* @__PURE__ */ jsx33(Box, { ref: stripRef, role: "tablist", "aria-label": "Situa\xE7\xE3o", "data-testid": `${testIdPrefix}-scopes`, sx: STRIP_SX, children: scopes.map((scope, index) => /* @__PURE__ */ jsx33(
5284
+ return /* @__PURE__ */ jsx34(Box, { ref: stripRef, role: "tablist", "aria-label": copy.filters.scopesLabel, "data-testid": `${testIdPrefix}-scopes`, sx: STRIP_SX, children: scopes.map((scope, index) => /* @__PURE__ */ jsx34(
5270
5285
  ScopeTab,
5271
5286
  {
5272
5287
  scope,
@@ -5283,7 +5298,7 @@ function DataViewsScopeTabs({
5283
5298
  }
5284
5299
 
5285
5300
  // src/components/data-display/DataViews/data-views-scope-tabs.tsx
5286
- import { jsx as jsx34 } from "react/jsx-runtime";
5301
+ import { jsx as jsx35 } from "react/jsx-runtime";
5287
5302
  function ScopeTabsSlot({
5288
5303
  scopes,
5289
5304
  scopeFieldId,
@@ -5296,7 +5311,7 @@ function ScopeTabsSlot({
5296
5311
  const { layout } = useDataViewsLayout();
5297
5312
  const boardOwnsThisPartition = layout === "board" && Boolean(scopeFieldId) && scopeFieldId === board?.groupBy;
5298
5313
  if (boardOwnsThisPartition) return null;
5299
- return /* @__PURE__ */ jsx34(
5314
+ return /* @__PURE__ */ jsx35(
5300
5315
  DataViewsScopeTabs,
5301
5316
  {
5302
5317
  scopes,
@@ -5309,7 +5324,7 @@ function ScopeTabsSlot({
5309
5324
  }
5310
5325
 
5311
5326
  // src/components/data-display/DataViews/data-views-grid-parts.tsx
5312
- import { jsx as jsx35, jsxs as jsxs25 } from "react/jsx-runtime";
5327
+ import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
5313
5328
  function GridHeaderRow({
5314
5329
  title,
5315
5330
  headerActions,
@@ -5329,8 +5344,8 @@ function GridHeaderRow({
5329
5344
  pb: 1.5
5330
5345
  },
5331
5346
  children: [
5332
- title ? /* @__PURE__ */ jsx35(Text, { variant: "heading", size: "lg", as: "h2", children: title }) : /* @__PURE__ */ jsx35(Box, {}),
5333
- headerActions && /* @__PURE__ */ jsx35(Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: headerActions })
5347
+ title ? /* @__PURE__ */ jsx36(Text, { variant: "heading", size: "lg", as: "h2", children: title }) : /* @__PURE__ */ jsx36(Box, {}),
5348
+ headerActions && /* @__PURE__ */ jsx36(Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: headerActions })
5334
5349
  ]
5335
5350
  }
5336
5351
  );
@@ -5394,7 +5409,7 @@ function ShellStack({
5394
5409
  }) {
5395
5410
  const { c, testIdPrefix, dataTestId, scopes = [], emptyState, inlineFilters = false } = props;
5396
5411
  const { showInline, useModal, inlineVisible, filterProps, split, onControlOpenChange } = filters;
5397
- const body = /* @__PURE__ */ jsx35(
5412
+ const body = /* @__PURE__ */ jsx36(
5398
5413
  DataViewsEmpty,
5399
5414
  {
5400
5415
  filtered: c.activeFilterCount > 0 || c.state.search !== "",
@@ -5403,9 +5418,9 @@ function ShellStack({
5403
5418
  testIdPrefix
5404
5419
  }
5405
5420
  );
5406
- return /* @__PURE__ */ jsx35(TableFilter, { open: c.filterOpen, onOpenChange: c.setFilterOpen, hasActiveFilters: c.activeFilterCount > 0, children: /* @__PURE__ */ jsxs25(Stack, { spacing: 0, "data-testid": dataTestId ? `${dataTestId}-container` : void 0, children: [
5407
- /* @__PURE__ */ jsx35(GridHeaderRow, { title: props.title, headerActions: props.headerActions, testIdPrefix }),
5408
- /* @__PURE__ */ jsx35(
5421
+ return /* @__PURE__ */ jsx36(TableFilter, { open: c.filterOpen, onOpenChange: c.setFilterOpen, hasActiveFilters: c.activeFilterCount > 0, children: /* @__PURE__ */ jsxs25(Stack, { spacing: 0, "data-testid": dataTestId ? `${dataTestId}-container` : void 0, children: [
5422
+ /* @__PURE__ */ jsx36(GridHeaderRow, { title: props.title, headerActions: props.headerActions, testIdPrefix }),
5423
+ /* @__PURE__ */ jsx36(
5409
5424
  ShellToolbar,
5410
5425
  {
5411
5426
  c,
@@ -5413,7 +5428,7 @@ function ShellStack({
5413
5428
  sortKinds: props.sortKinds,
5414
5429
  displayView: props.displayView,
5415
5430
  exportConfig: props.exportConfig,
5416
- filterControls: inlineVisible ? /* @__PURE__ */ jsx35(
5431
+ filterControls: inlineVisible ? /* @__PURE__ */ jsx36(
5417
5432
  InlineFilterControls,
5418
5433
  {
5419
5434
  ...filterProps,
@@ -5432,7 +5447,7 @@ function ShellStack({
5432
5447
  showInline
5433
5448
  }
5434
5449
  ),
5435
- /* @__PURE__ */ jsx35(
5450
+ /* @__PURE__ */ jsx36(
5436
5451
  ScopeTabsSlot,
5437
5452
  {
5438
5453
  scopes,
@@ -5446,7 +5461,7 @@ function ShellStack({
5446
5461
  ),
5447
5462
  /* @__PURE__ */ jsxs25(TableFilter.Layout, { children: [
5448
5463
  /* @__PURE__ */ jsxs25(TableFilter.Main, { children: [
5449
- /* @__PURE__ */ jsx35(
5464
+ /* @__PURE__ */ jsx36(
5450
5465
  GridMain,
5451
5466
  {
5452
5467
  c,
@@ -5460,11 +5475,11 @@ function ShellStack({
5460
5475
  emptyState: body
5461
5476
  }
5462
5477
  ),
5463
- /* @__PURE__ */ jsx35(DataViewsPagination, { c, testIdPrefix })
5478
+ /* @__PURE__ */ jsx36(DataViewsPagination, { c, testIdPrefix })
5464
5479
  ] }),
5465
- inlineFilters ? null : /* @__PURE__ */ jsx35(GridFilterPanel, { ...filterProps })
5480
+ inlineFilters ? null : /* @__PURE__ */ jsx36(GridFilterPanel, { ...filterProps })
5466
5481
  ] }),
5467
- useModal && /* @__PURE__ */ jsx35(FilterDialog, { open: c.filterOpen, onClose: () => c.setFilterOpen(false), ...filterProps })
5482
+ useModal && /* @__PURE__ */ jsx36(FilterDialog, { open: c.filterOpen, onClose: () => c.setFilterOpen(false), ...filterProps })
5468
5483
  ] }) });
5469
5484
  }
5470
5485
  function GridShell(props) {
@@ -5500,8 +5515,8 @@ function GridShell(props) {
5500
5515
  ignoreStoredLayout,
5501
5516
  viewLayout: c.state.layout,
5502
5517
  children: [
5503
- /* @__PURE__ */ jsx35(LayoutStateSync, { c }),
5504
- /* @__PURE__ */ jsx35(ShellStack, { props, filters })
5518
+ /* @__PURE__ */ jsx36(LayoutStateSync, { c }),
5519
+ /* @__PURE__ */ jsx36(ShellStack, { props, filters })
5505
5520
  ]
5506
5521
  }
5507
5522
  );
@@ -5833,7 +5848,7 @@ function useDataViewsState({
5833
5848
  }
5834
5849
 
5835
5850
  // src/components/data-display/DataViews/DataViewsGrid.tsx
5836
- import { jsx as jsx36 } from "react/jsx-runtime";
5851
+ import { jsx as jsx37 } from "react/jsx-runtime";
5837
5852
  function useVisibleRowsNotifier(matched, onVisibleRowsChange) {
5838
5853
  const visibleSignature = JSON.stringify(matched);
5839
5854
  const lastSignature = useRef6(null);
@@ -5847,11 +5862,11 @@ function DataViewsGrid(props) {
5847
5862
  const { rangeFields = [], testIdPrefix = "table" } = props;
5848
5863
  const controller = useDataViewsState({ ...props, rangeFields, testIdPrefix });
5849
5864
  useVisibleRowsNotifier(controller.matched, props.onVisibleRowsChange);
5850
- return /* @__PURE__ */ jsx36(GridShell, { ...props, c: controller, rangeFields, testIdPrefix });
5865
+ return /* @__PURE__ */ jsx37(GridShell, { ...props, c: controller, rangeFields, testIdPrefix });
5851
5866
  }
5852
5867
 
5853
5868
  // src/components/data-display/DataViews/DataViewsTableBase.tsx
5854
- import { useEffect as useEffect9, useMemo as useMemo6, useRef as useRef8, useState as useState16 } from "react";
5869
+ import { useEffect as useEffect9, useMemo as useMemo7, useRef as useRef8, useState as useState16 } from "react";
5855
5870
 
5856
5871
  // src/components/data-display/DataViews/data-views-dirty.ts
5857
5872
  function isSet(range) {
@@ -5887,7 +5902,7 @@ function viewStateKey(state) {
5887
5902
  }
5888
5903
 
5889
5904
  // src/components/data-display/DataViews/DeleteViewDialog.tsx
5890
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
5905
+ import { jsx as jsx38, jsxs as jsxs26 } from "react/jsx-runtime";
5891
5906
  function DeleteViewDialog({
5892
5907
  view,
5893
5908
  onClose,
@@ -5896,29 +5911,27 @@ function DeleteViewDialog({
5896
5911
  entityLabel = "Os registros",
5897
5912
  testIdPrefix = "view"
5898
5913
  }) {
5914
+ const copy = useDataViewsCopy();
5899
5915
  if (!view) return null;
5900
- return /* @__PURE__ */ jsx37(
5916
+ return /* @__PURE__ */ jsx38(
5901
5917
  Dialog,
5902
5918
  {
5903
5919
  open: true,
5904
5920
  onClose,
5905
- title: "Excluir vis\xE3o",
5921
+ title: copy.deleteView.title,
5906
5922
  size: "sm",
5907
5923
  showCloseButton: true,
5908
5924
  dataTestId: `${testIdPrefix}-delete-modal`,
5909
- children: /* @__PURE__ */ jsx37(DialogContent, { children: /* @__PURE__ */ jsxs26(Stack, { spacing: 1.5, children: [
5925
+ children: /* @__PURE__ */ jsx38(DialogContent, { children: /* @__PURE__ */ jsxs26(Stack, { spacing: 1.5, children: [
5910
5926
  /* @__PURE__ */ jsxs26(Text, { variant: "body", as: "p", "data-testid": `${testIdPrefix}-delete-target`, children: [
5911
5927
  "Excluir ",
5912
- /* @__PURE__ */ jsx37("strong", { children: view.name }),
5928
+ /* @__PURE__ */ jsx38("strong", { children: view.name }),
5913
5929
  "?"
5914
5930
  ] }),
5915
- view.shared && /* @__PURE__ */ jsx37(Text, { variant: "body", color: "warning", as: "p", "data-testid": `${testIdPrefix}-delete-shared`, children: "Esta vis\xE3o est\xE1 compartilhada \u2014 a equipe perder\xE1 o acesso a ela." }),
5916
- /* @__PURE__ */ jsxs26(Text, { variant: "body", color: "secondary", as: "p", children: [
5917
- entityLabel,
5918
- " n\xE3o s\xE3o afetados; apenas o recorte salvo \xE9 removido."
5919
- ] }),
5931
+ view.shared && /* @__PURE__ */ jsx38(Text, { variant: "body", color: "warning", as: "p", "data-testid": `${testIdPrefix}-delete-shared`, children: copy.deleteView.sharedWarning }),
5932
+ /* @__PURE__ */ jsx38(Text, { variant: "body", color: "secondary", as: "p", children: copy.deleteView.rowsUnaffected(entityLabel) }),
5920
5933
  /* @__PURE__ */ jsxs26(Stack, { direction: "row", spacing: 1.5, sx: { justifyContent: "flex-end", pt: 0.5 }, children: [
5921
- /* @__PURE__ */ jsx37(
5934
+ /* @__PURE__ */ jsx38(
5922
5935
  Button,
5923
5936
  {
5924
5937
  variant: "text",
@@ -5928,13 +5941,13 @@ function DeleteViewDialog({
5928
5941
  children: "Cancelar"
5929
5942
  }
5930
5943
  ),
5931
- /* @__PURE__ */ jsx37(
5944
+ /* @__PURE__ */ jsx38(
5932
5945
  Button,
5933
5946
  {
5934
5947
  color: "danger",
5935
5948
  onClick: () => onConfirm(view),
5936
5949
  dataTestId: `${testIdPrefix}-delete-confirm`,
5937
- children: "Excluir vis\xE3o"
5950
+ children: copy.deleteView.confirm
5938
5951
  }
5939
5952
  )
5940
5953
  ] })
@@ -5944,21 +5957,29 @@ function DeleteViewDialog({
5944
5957
  }
5945
5958
 
5946
5959
  // src/components/data-display/DataViews/ManageViewsDialog.tsx
5947
- import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
5960
+ import { useMemo as useMemo6 } from "react";
5961
+ import { jsx as jsx39, jsxs as jsxs27 } from "react/jsx-runtime";
5948
5962
  function tags(view) {
5963
+ const copy = useDataViewsCopy();
5949
5964
  const list = [];
5950
- if (view.isDefault) list.push("Padr\xE3o");
5965
+ if (view.isDefault) list.push(copy.manageViews.defaultTag);
5951
5966
  if (view.pinned) list.push("Fixada");
5952
5967
  if (view.shared) list.push("Compartilhada");
5953
- if (!view.isOwner) list.push("De outro usu\xE1rio");
5968
+ if (!view.isOwner) list.push(copy.manageViews.otherUserTag);
5954
5969
  return list;
5955
5970
  }
5956
5971
  function ManageViewRow({
5957
5972
  view,
5958
5973
  onEdit,
5959
5974
  onDelete,
5960
- testIdPrefix
5975
+ testIdPrefix,
5976
+ confirmCopy
5961
5977
  }) {
5978
+ const ConfirmButton = useMemo6(
5979
+ () => createConfirmButton(confirmCopy, confirmCopy.defaultError),
5980
+ [confirmCopy]
5981
+ );
5982
+ const copy = useDataViewsCopy();
5962
5983
  return /* @__PURE__ */ jsxs27(
5963
5984
  Stack,
5964
5985
  {
@@ -5968,12 +5989,12 @@ function ManageViewRow({
5968
5989
  "data-testid": `${testIdPrefix}-manage-row-${view.id}`,
5969
5990
  children: [
5970
5991
  /* @__PURE__ */ jsxs27(Box, { sx: { minWidth: 0 }, children: [
5971
- /* @__PURE__ */ jsx38(Text, { variant: "body", size: "sm", as: "span", weight: "semibold", children: view.name }),
5972
- view.description && /* @__PURE__ */ jsx38(Text, { variant: "caption", as: "p", color: "secondary", children: view.description }),
5973
- tags(view).length > 0 && /* @__PURE__ */ jsx38(Text, { variant: "caption", as: "p", color: "secondary", children: tags(view).join(" \xB7 ") })
5992
+ /* @__PURE__ */ jsx39(Text, { variant: "body", size: "sm", as: "span", weight: "semibold", children: view.name }),
5993
+ view.description && /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "p", color: "secondary", children: view.description }),
5994
+ tags(view).length > 0 && /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "p", color: "secondary", children: tags(view).join(" \xB7 ") })
5974
5995
  ] }),
5975
5996
  view.isOwner && /* @__PURE__ */ jsxs27(Stack, { direction: "row", spacing: 1, sx: { flex: "0 0 auto" }, children: [
5976
- /* @__PURE__ */ jsx38(
5997
+ /* @__PURE__ */ jsx39(
5977
5998
  Button,
5978
5999
  {
5979
6000
  variant: "text",
@@ -5983,7 +6004,7 @@ function ManageViewRow({
5983
6004
  children: "Editar"
5984
6005
  }
5985
6006
  ),
5986
- /* @__PURE__ */ jsx38(
6007
+ /* @__PURE__ */ jsx39(
5987
6008
  ConfirmButton,
5988
6009
  {
5989
6010
  variant: "text",
@@ -5991,13 +6012,13 @@ function ManageViewRow({
5991
6012
  color: "danger",
5992
6013
  onClick: () => onDelete(view),
5993
6014
  confirm: {
5994
- title: "Excluir a vis\xE3o salva?",
6015
+ title: copy.manageViews.deleteTitle,
5995
6016
  entityName: view.name,
5996
- description: "Os filtros e colunas guardados nela s\xE3o perdidos. N\xE3o \xE9 poss\xEDvel restaurar.",
5997
- confirmText: "Excluir"
6017
+ description: copy.manageViews.deleteBody,
6018
+ confirmText: copy.manageViews.deleteConfirm
5998
6019
  },
5999
6020
  dataTestId: `${testIdPrefix}-manage-delete-${view.id}`,
6000
- children: "Excluir"
6021
+ children: copy.manageViews.deleteConfirm
6001
6022
  }
6002
6023
  )
6003
6024
  ] })
@@ -6011,20 +6032,23 @@ function ManageViewsDialog({
6011
6032
  views,
6012
6033
  onEdit,
6013
6034
  onDelete,
6014
- testIdPrefix = "views"
6035
+ testIdPrefix = "views",
6036
+ confirmCopy
6015
6037
  }) {
6016
- return /* @__PURE__ */ jsx38(
6038
+ const copy = useDataViewsCopy();
6039
+ return /* @__PURE__ */ jsx39(
6017
6040
  Dialog,
6018
6041
  {
6019
6042
  open,
6020
6043
  onClose,
6021
- title: "Gerenciar vis\xF5es",
6044
+ title: copy.manageViews.title,
6022
6045
  size: "md",
6023
6046
  showCloseButton: true,
6024
6047
  dataTestId: `${testIdPrefix}-manage-dialog`,
6025
- children: /* @__PURE__ */ jsx38(DialogContent, { children: /* @__PURE__ */ jsx38(Stack, { spacing: 1.5, "data-testid": `${testIdPrefix}-manage-list`, children: views.length === 0 ? /* @__PURE__ */ jsx38(Text, { variant: "body", as: "p", children: "Nenhuma vis\xE3o salva." }) : views.map((view) => /* @__PURE__ */ jsx38(
6048
+ children: /* @__PURE__ */ jsx39(DialogContent, { children: /* @__PURE__ */ jsx39(Stack, { spacing: 1.5, "data-testid": `${testIdPrefix}-manage-list`, children: views.length === 0 ? /* @__PURE__ */ jsx39(Text, { variant: "body", as: "p", children: copy.manageViews.empty }) : views.map((view) => /* @__PURE__ */ jsx39(
6026
6049
  ManageViewRow,
6027
6050
  {
6051
+ confirmCopy,
6028
6052
  view,
6029
6053
  onEdit,
6030
6054
  onDelete,
@@ -6065,8 +6089,45 @@ function describeViewState(state, fields, columns) {
6065
6089
  return { filters, columns: columnsHidden, sort };
6066
6090
  }
6067
6091
 
6092
+ // src/components/data-display/DataViews/save-view-preview.tsx
6093
+ import { jsx as jsx40, jsxs as jsxs28 } from "react/jsx-runtime";
6094
+ function SummaryRow({
6095
+ label,
6096
+ items,
6097
+ testId
6098
+ }) {
6099
+ if (items.length === 0) return null;
6100
+ return /* @__PURE__ */ jsxs28(Box, { sx: { display: "flex", gap: 1.5 }, "data-testid": testId, children: [
6101
+ /* @__PURE__ */ jsx40(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx40(Box, { component: "span", sx: { width: 116, flexShrink: 0, color: "text.secondary" }, children: label }) }),
6102
+ /* @__PURE__ */ jsx40(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx40(Box, { component: "span", sx: { minWidth: 0, flex: 1 }, children: items.join(", ") }) })
6103
+ ] });
6104
+ }
6105
+ function PreviewBox({ preview, testIdPrefix }) {
6106
+ const copy = useDataViewsCopy();
6107
+ const empty = preview.filters.length === 0 && preview.columns.length === 0 && preview.sort.length === 0;
6108
+ return /* @__PURE__ */ jsxs28(Box, { sx: { p: 1.5, borderRadius: 1.5, bgcolor: "action.hover", border: (theme) => `1px solid ${theme.palette.divider}` }, children: [
6109
+ /* @__PURE__ */ jsx40(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx40(
6110
+ Box,
6111
+ {
6112
+ component: "span",
6113
+ sx: { display: "block", mb: 1, textTransform: "uppercase", letterSpacing: 0.6, fontWeight: 600, color: "text.disabled" },
6114
+ children: copy.saveView.previewHeading
6115
+ }
6116
+ ) }),
6117
+ empty ? (
6118
+ // Saving is still allowed — an operator may be naming the default on
6119
+ // purpose — but it should not be a surprise afterwards.
6120
+ /* @__PURE__ */ jsx40(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx40(Box, { component: "span", sx: { color: "warning.main", lineHeight: 1.6 }, "data-testid": `${testIdPrefix}-preview-empty`, children: copy.saveView.previewUnchanged }) })
6121
+ ) : /* @__PURE__ */ jsxs28(Stack, { spacing: 0.75, children: [
6122
+ /* @__PURE__ */ jsx40(SummaryRow, { label: copy.saveView.previewFilters, items: preview.filters, testId: `${testIdPrefix}-preview-filters` }),
6123
+ /* @__PURE__ */ jsx40(SummaryRow, { label: copy.saveView.previewHiddenColumns, items: preview.columns, testId: `${testIdPrefix}-preview-columns` }),
6124
+ /* @__PURE__ */ jsx40(SummaryRow, { label: copy.saveView.sortRowLabel, items: preview.sort, testId: `${testIdPrefix}-preview-sort` })
6125
+ ] })
6126
+ ] });
6127
+ }
6128
+
6068
6129
  // src/components/data-display/DataViews/SaveViewModal.tsx
6069
- import { jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
6130
+ import { jsx as jsx41, jsxs as jsxs29 } from "react/jsx-runtime";
6070
6131
  function FlagRow({
6071
6132
  icon,
6072
6133
  title,
@@ -6075,7 +6136,7 @@ function FlagRow({
6075
6136
  onChange,
6076
6137
  testId
6077
6138
  }) {
6078
- return /* @__PURE__ */ jsxs28(
6139
+ return /* @__PURE__ */ jsxs29(
6079
6140
  Box,
6080
6141
  {
6081
6142
  component: "label",
@@ -6090,12 +6151,12 @@ function FlagRow({
6090
6151
  "&:hover": { bgcolor: "action.hover" }
6091
6152
  },
6092
6153
  children: [
6093
- /* @__PURE__ */ jsx39(Box, { sx: { mt: 0.25, color: "text.disabled", display: "flex" }, children: icon }),
6094
- /* @__PURE__ */ jsxs28(Box, { sx: { minWidth: 0, flex: 1 }, children: [
6095
- /* @__PURE__ */ jsx39(Text, { variant: "body", as: "span", children: /* @__PURE__ */ jsx39(Box, { component: "span", sx: { display: "block", fontSize: "0.875rem" }, children: title }) }),
6096
- /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx39(Box, { component: "span", sx: { display: "block", color: "text.secondary", lineHeight: 1.5 }, children: description }) })
6154
+ /* @__PURE__ */ jsx41(Box, { sx: { mt: 0.25, color: "text.disabled", display: "flex" }, children: icon }),
6155
+ /* @__PURE__ */ jsxs29(Box, { sx: { minWidth: 0, flex: 1 }, children: [
6156
+ /* @__PURE__ */ jsx41(Text, { variant: "body", as: "span", children: /* @__PURE__ */ jsx41(Box, { component: "span", sx: { display: "block", fontSize: "0.875rem" }, children: title }) }),
6157
+ /* @__PURE__ */ jsx41(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx41(Box, { component: "span", sx: { display: "block", color: "text.secondary", lineHeight: 1.5 }, children: description }) })
6097
6158
  ] }),
6098
- /* @__PURE__ */ jsx39(
6159
+ /* @__PURE__ */ jsx41(
6099
6160
  Switch,
6100
6161
  {
6101
6162
  size: "sm",
@@ -6117,35 +6178,36 @@ function FlagsSwitches({
6117
6178
  setIsDefault,
6118
6179
  testIdPrefix
6119
6180
  }) {
6120
- return /* @__PURE__ */ jsxs28(Stack, { spacing: 0, children: [
6121
- /* @__PURE__ */ jsx39(
6181
+ const copy = useDataViewsCopy();
6182
+ return /* @__PURE__ */ jsxs29(Stack, { spacing: 0, children: [
6183
+ /* @__PURE__ */ jsx41(
6122
6184
  FlagRow,
6123
6185
  {
6124
- icon: /* @__PURE__ */ jsx39(PushPinOutlinedIcon2, { fontSize: "small" }),
6125
- title: "Fixar na barra lateral",
6126
- description: "Aparece como atalho no menu, abaixo desta tela.",
6186
+ icon: /* @__PURE__ */ jsx41(PushPinOutlinedIcon2, { fontSize: "small" }),
6187
+ title: copy.saveView.pinnedTitle,
6188
+ description: copy.saveView.pinnedDescription,
6127
6189
  checked: pinned,
6128
6190
  onChange: setPinned,
6129
6191
  testId: `${testIdPrefix}-save-pinned`
6130
6192
  }
6131
6193
  ),
6132
- /* @__PURE__ */ jsx39(
6194
+ /* @__PURE__ */ jsx41(
6133
6195
  FlagRow,
6134
6196
  {
6135
- icon: /* @__PURE__ */ jsx39(GroupOutlinedIcon2, { fontSize: "small" }),
6136
- title: "Compartilhar com a equipe",
6137
- description: "Qualquer pessoa da loja poder\xE1 abrir e usar esta vis\xE3o.",
6197
+ icon: /* @__PURE__ */ jsx41(GroupOutlinedIcon2, { fontSize: "small" }),
6198
+ title: copy.saveView.sharedTitle,
6199
+ description: copy.saveView.sharedDescription,
6138
6200
  checked: shared,
6139
6201
  onChange: setShared,
6140
6202
  testId: `${testIdPrefix}-save-shared`
6141
6203
  }
6142
6204
  ),
6143
- /* @__PURE__ */ jsx39(
6205
+ /* @__PURE__ */ jsx41(
6144
6206
  FlagRow,
6145
6207
  {
6146
- icon: /* @__PURE__ */ jsx39(StarOutlineRoundedIcon3, { fontSize: "small" }),
6147
- title: "Definir como padr\xE3o",
6148
- description: "Esta tela abre nesta vis\xE3o em vez da Vis\xE3o principal.",
6208
+ icon: /* @__PURE__ */ jsx41(StarOutlineRoundedIcon3, { fontSize: "small" }),
6209
+ title: copy.saveView.setDefaultTitle,
6210
+ description: copy.saveView.setDefaultDescription,
6149
6211
  checked: isDefault,
6150
6212
  onChange: setIsDefault,
6151
6213
  testId: `${testIdPrefix}-save-default`
@@ -6153,39 +6215,6 @@ function FlagsSwitches({
6153
6215
  )
6154
6216
  ] });
6155
6217
  }
6156
- function SummaryRow({
6157
- label,
6158
- items,
6159
- testId
6160
- }) {
6161
- if (items.length === 0) return null;
6162
- return /* @__PURE__ */ jsxs28(Box, { sx: { display: "flex", gap: 1.5 }, "data-testid": testId, children: [
6163
- /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx39(Box, { component: "span", sx: { width: 116, flexShrink: 0, color: "text.secondary" }, children: label }) }),
6164
- /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "span", children: /* @__PURE__ */ jsx39(Box, { component: "span", sx: { minWidth: 0, flex: 1 }, children: items.join(", ") }) })
6165
- ] });
6166
- }
6167
- function PreviewBox({ preview, testIdPrefix }) {
6168
- const empty = preview.filters.length === 0 && preview.columns.length === 0 && preview.sort.length === 0;
6169
- return /* @__PURE__ */ jsxs28(Box, { sx: { p: 1.5, borderRadius: 1.5, bgcolor: "action.hover", border: (theme) => `1px solid ${theme.palette.divider}` }, children: [
6170
- /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx39(
6171
- Box,
6172
- {
6173
- component: "span",
6174
- sx: { display: "block", mb: 1, textTransform: "uppercase", letterSpacing: 0.6, fontWeight: 600, color: "text.disabled" },
6175
- children: "O que esta vis\xE3o guarda"
6176
- }
6177
- ) }),
6178
- empty ? (
6179
- // Saving is still allowed — an operator may be naming the default on
6180
- // purpose — but it should not be a surprise afterwards.
6181
- /* @__PURE__ */ jsx39(Text, { variant: "caption", as: "p", children: /* @__PURE__ */ jsx39(Box, { component: "span", sx: { color: "warning.main", lineHeight: 1.6 }, "data-testid": `${testIdPrefix}-preview-empty`, children: "Nada foi alterado \u2014 esta vis\xE3o ficar\xE1 igual \xE0 Vis\xE3o principal." }) })
6182
- ) : /* @__PURE__ */ jsxs28(Stack, { spacing: 0.75, children: [
6183
- /* @__PURE__ */ jsx39(SummaryRow, { label: "Filtros", items: preview.filters, testId: `${testIdPrefix}-preview-filters` }),
6184
- /* @__PURE__ */ jsx39(SummaryRow, { label: "Colunas ocultas", items: preview.columns, testId: `${testIdPrefix}-preview-columns` }),
6185
- /* @__PURE__ */ jsx39(SummaryRow, { label: "Ordena\xE7\xE3o", items: preview.sort, testId: `${testIdPrefix}-preview-sort` })
6186
- ] })
6187
- ] });
6188
- }
6189
6218
  function seedForm(editing) {
6190
6219
  if (!editing) {
6191
6220
  return { name: "", description: "", pinned: false, shared: false, isDefault: false };
@@ -6199,6 +6228,7 @@ function seedForm(editing) {
6199
6228
  };
6200
6229
  }
6201
6230
  function useSaveViewForm(editing, onSave) {
6231
+ const copy = useDataViewsCopy();
6202
6232
  const initial = seedForm(editing);
6203
6233
  const [name, setName] = useState14(initial.name);
6204
6234
  const [description, setDescription] = useState14(initial.description);
@@ -6214,7 +6244,7 @@ function useSaveViewForm(editing, onSave) {
6214
6244
  try {
6215
6245
  await onSave({ name: name.trim(), description: description.trim(), shared, pinned, isDefault });
6216
6246
  } catch (cause) {
6217
- setError(cause instanceof Error ? cause.message : "N\xE3o foi poss\xEDvel salvar a vis\xE3o.");
6247
+ setError(cause instanceof Error ? cause.message : copy.saveView.saveFailed);
6218
6248
  } finally {
6219
6249
  setSaving(false);
6220
6250
  }
@@ -6235,6 +6265,19 @@ function useSaveViewForm(editing, onSave) {
6235
6265
  submit
6236
6266
  };
6237
6267
  }
6268
+ function FormFooter({
6269
+ editing,
6270
+ canSave,
6271
+ onSubmit,
6272
+ onClose,
6273
+ testIdPrefix
6274
+ }) {
6275
+ const copy = useDataViewsCopy();
6276
+ return /* @__PURE__ */ jsxs29(Stack, { direction: "row", spacing: 1.5, sx: { justifyContent: "flex-end" }, children: [
6277
+ /* @__PURE__ */ jsx41(Button, { variant: "text", color: "neutral", onClick: onClose, dataTestId: `${testIdPrefix}-save-cancel`, children: copy.saveView.cancel }),
6278
+ /* @__PURE__ */ jsx41(Button, { onClick: onSubmit, disabled: !canSave, dataTestId: `${testIdPrefix}-save-submit`, children: editing ? copy.saveView.submitEditing : copy.saveView.submitCreating })
6279
+ ] });
6280
+ }
6238
6281
  function SaveViewModal({
6239
6282
  open,
6240
6283
  onClose,
@@ -6245,43 +6288,44 @@ function SaveViewModal({
6245
6288
  onSave,
6246
6289
  testIdPrefix = "view"
6247
6290
  }) {
6291
+ const copy = useDataViewsCopy();
6248
6292
  const form = useSaveViewForm(editing, onSave);
6249
6293
  const preview = describeViewState(currentState, fields, columns);
6250
- return /* @__PURE__ */ jsx39(
6294
+ return /* @__PURE__ */ jsx41(
6251
6295
  Dialog,
6252
6296
  {
6253
6297
  open,
6254
6298
  onClose,
6255
- title: editing ? "Editar vis\xE3o" : "Salvar vis\xE3o",
6299
+ title: editing ? copy.saveView.titleEditing : copy.saveView.titleCreating,
6256
6300
  size: "sm",
6257
6301
  showCloseButton: true,
6258
6302
  dataTestId: `${testIdPrefix}-save-modal`,
6259
- children: /* @__PURE__ */ jsx39(DialogContent, { children: /* @__PURE__ */ jsxs28(Stack, { spacing: 2, "data-testid": `${testIdPrefix}-save-form`, children: [
6260
- /* @__PURE__ */ jsx39(
6303
+ children: /* @__PURE__ */ jsx41(DialogContent, { children: /* @__PURE__ */ jsxs29(Stack, { spacing: 2, "data-testid": `${testIdPrefix}-save-form`, children: [
6304
+ /* @__PURE__ */ jsx41(
6261
6305
  Input,
6262
6306
  {
6263
6307
  size: "sm",
6264
6308
  fullWidth: true,
6265
- label: "Nome",
6266
- placeholder: "Ex.: Recusados no PIX desta semana",
6309
+ label: copy.saveView.nameLabel,
6310
+ placeholder: copy.saveView.namePlaceholder,
6267
6311
  value: form.name,
6268
6312
  onChange: (event) => form.setName(event.target.value),
6269
6313
  "data-testid": `${testIdPrefix}-save-name`
6270
6314
  }
6271
6315
  ),
6272
- /* @__PURE__ */ jsx39(
6316
+ /* @__PURE__ */ jsx41(
6273
6317
  Input,
6274
6318
  {
6275
6319
  size: "sm",
6276
6320
  fullWidth: true,
6277
- label: "Descri\xE7\xE3o \u2014 opcional",
6278
- placeholder: "Para que serve esta vis\xE3o",
6321
+ label: copy.saveView.descriptionLabel,
6322
+ placeholder: copy.saveView.descriptionPlaceholder,
6279
6323
  value: form.description,
6280
6324
  onChange: (event) => form.setDescription(event.target.value),
6281
6325
  "data-testid": `${testIdPrefix}-save-description`
6282
6326
  }
6283
6327
  ),
6284
- /* @__PURE__ */ jsx39(
6328
+ /* @__PURE__ */ jsx41(
6285
6329
  FlagsSwitches,
6286
6330
  {
6287
6331
  pinned: form.pinned,
@@ -6293,40 +6337,39 @@ function SaveViewModal({
6293
6337
  testIdPrefix
6294
6338
  }
6295
6339
  ),
6296
- /* @__PURE__ */ jsx39(PreviewBox, { preview, testIdPrefix }),
6297
- form.error && /* @__PURE__ */ jsx39(Text, { variant: "caption", color: "danger", as: "p", "data-testid": `${testIdPrefix}-save-error`, children: form.error }),
6298
- /* @__PURE__ */ jsxs28(Stack, { direction: "row", spacing: 1.5, sx: { justifyContent: "flex-end" }, children: [
6299
- /* @__PURE__ */ jsx39(Button, { variant: "text", color: "neutral", onClick: onClose, dataTestId: `${testIdPrefix}-save-cancel`, children: "Cancelar" }),
6300
- /* @__PURE__ */ jsx39(
6301
- Button,
6302
- {
6303
- onClick: () => void form.submit(),
6304
- disabled: !form.canSave,
6305
- dataTestId: `${testIdPrefix}-save-submit`,
6306
- children: editing ? "Salvar altera\xE7\xF5es" : "Salvar vis\xE3o"
6307
- }
6308
- )
6309
- ] })
6340
+ /* @__PURE__ */ jsx41(PreviewBox, { preview, testIdPrefix }),
6341
+ form.error && /* @__PURE__ */ jsx41(Text, { variant: "caption", color: "danger", as: "p", "data-testid": `${testIdPrefix}-save-error`, children: form.error }),
6342
+ /* @__PURE__ */ jsx41(
6343
+ FormFooter,
6344
+ {
6345
+ editing,
6346
+ canSave: form.canSave,
6347
+ onSubmit: () => void form.submit(),
6348
+ onClose,
6349
+ testIdPrefix
6350
+ }
6351
+ )
6310
6352
  ] }) })
6311
6353
  }
6312
6354
  );
6313
6355
  }
6314
6356
 
6315
6357
  // src/components/data-display/DataViews/data-views-table-parts.tsx
6316
- import { Fragment as Fragment16, jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
6358
+ import { Fragment as Fragment16, jsx as jsx42, jsxs as jsxs30 } from "react/jsx-runtime";
6317
6359
  function ViewMutationErrorAlert({
6318
6360
  error,
6319
6361
  onClose,
6320
6362
  testIdPrefix
6321
6363
  }) {
6364
+ const copy = useDataViewsCopy();
6322
6365
  if (!error) {
6323
6366
  return null;
6324
6367
  }
6325
- return /* @__PURE__ */ jsx40(
6368
+ return /* @__PURE__ */ jsx42(
6326
6369
  Alert,
6327
6370
  {
6328
6371
  variant: "danger",
6329
- title: "N\xE3o foi poss\xEDvel atualizar a vis\xE3o",
6372
+ title: copy.nav.updateFailed,
6330
6373
  description: error,
6331
6374
  closable: true,
6332
6375
  onClose,
@@ -6349,8 +6392,9 @@ function ViewDialogs({
6349
6392
  onDelete,
6350
6393
  testIdPrefix
6351
6394
  }) {
6352
- return /* @__PURE__ */ jsxs29(Fragment16, { children: [
6353
- /* @__PURE__ */ jsx40(
6395
+ const copy = useDataViewsCopy();
6396
+ return /* @__PURE__ */ jsxs30(Fragment16, { children: [
6397
+ /* @__PURE__ */ jsx42(
6354
6398
  SaveViewModal,
6355
6399
  {
6356
6400
  open: saveOpen,
@@ -6364,9 +6408,10 @@ function ViewDialogs({
6364
6408
  },
6365
6409
  editing ? `edit-${editing.id}` : "create"
6366
6410
  ),
6367
- /* @__PURE__ */ jsx40(
6411
+ /* @__PURE__ */ jsx42(
6368
6412
  ManageViewsDialog,
6369
6413
  {
6414
+ confirmCopy: copy.confirmAction,
6370
6415
  open: manageOpen,
6371
6416
  onClose: onCloseManage,
6372
6417
  views,
@@ -6436,6 +6481,7 @@ function useAppliedView(router, columnIds, views, initialView, initialState) {
6436
6481
  return { applied, currentRef, activeViewName, applyView, selectMain };
6437
6482
  }
6438
6483
  function useSavedViewsController(persistence, router, columnIds, views, initialView, initialState) {
6484
+ const copy = useDataViewsCopy();
6439
6485
  const { applied, currentRef, activeViewName, applyView, selectMain } = useAppliedView(router, columnIds, views, initialView, initialState);
6440
6486
  const [saveOpen, setSaveOpen] = useState15(false);
6441
6487
  const [editing, setEditing] = useState15(null);
@@ -6454,7 +6500,7 @@ function useSavedViewsController(persistence, router, columnIds, views, initialV
6454
6500
  setMutationError(null);
6455
6501
  router.refresh();
6456
6502
  } else {
6457
- setMutationError(error ?? "N\xE3o foi poss\xEDvel salvar a altera\xE7\xE3o da vis\xE3o.");
6503
+ setMutationError(error ?? copy.nav.saveFailed);
6458
6504
  }
6459
6505
  };
6460
6506
  const { handleSave: saveView, patchView, handleDelete } = useViewMutations(
@@ -6499,10 +6545,10 @@ function useSavedViewsController(persistence, router, columnIds, views, initialV
6499
6545
  }
6500
6546
 
6501
6547
  // src/components/data-display/DataViews/DataViewsTableBase.tsx
6502
- import { Fragment as Fragment17, jsx as jsx41, jsxs as jsxs30 } from "react/jsx-runtime";
6548
+ import { Fragment as Fragment17, jsx as jsx43, jsxs as jsxs31 } from "react/jsx-runtime";
6503
6549
  function useUrlSyncState(server, initialState) {
6504
6550
  const isServerMode = server !== void 0;
6505
- return useMemo6(
6551
+ return useMemo7(
6506
6552
  () => isServerMode && initialState ? {
6507
6553
  search: initialState.search,
6508
6554
  pills: initialState.pills,
@@ -6605,9 +6651,9 @@ function DataViewsTableBase(props) {
6605
6651
  onRequestDelete: setPendingDelete
6606
6652
  });
6607
6653
  const syncState = useUrlSyncState(server, initialState);
6608
- return /* @__PURE__ */ jsxs30(Fragment17, { children: [
6609
- /* @__PURE__ */ jsx41(ViewMutationErrorAlert, { error: ctl.mutationError, onClose: ctl.clearMutationError, testIdPrefix }),
6610
- /* @__PURE__ */ jsx41(
6654
+ return /* @__PURE__ */ jsxs31(Fragment17, { children: [
6655
+ /* @__PURE__ */ jsx43(ViewMutationErrorAlert, { error: ctl.mutationError, onClose: ctl.clearMutationError, testIdPrefix }),
6656
+ /* @__PURE__ */ jsx43(
6611
6657
  DataViewsGrid,
6612
6658
  {
6613
6659
  ...props,
@@ -6619,7 +6665,7 @@ function DataViewsTableBase(props) {
6619
6665
  }
6620
6666
  ),
6621
6667
  renderViewDialogs(ctl, fields, columns, views, testIdPrefix, markSaved),
6622
- /* @__PURE__ */ jsx41(
6668
+ /* @__PURE__ */ jsx43(
6623
6669
  DeleteViewDialog,
6624
6670
  {
6625
6671
  view: pendingDelete,
@@ -6634,7 +6680,7 @@ function DataViewsTableBase(props) {
6634
6680
  ] });
6635
6681
  }
6636
6682
  function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
6637
- return /* @__PURE__ */ jsx41(
6683
+ return /* @__PURE__ */ jsx43(
6638
6684
  ViewDialogs,
6639
6685
  {
6640
6686
  saveOpen: ctl.saveOpen,
@@ -6664,6 +6710,7 @@ export {
6664
6710
  DEFAULT_CELL_WIDTH,
6665
6711
  DEFAULT_RAILS,
6666
6712
  DataViewsBoard,
6713
+ DataViewsCopyProvider,
6667
6714
  DataViewsGrid,
6668
6715
  DataViewsScopeTabs,
6669
6716
  DataViewsTableBase,
@@ -6676,6 +6723,7 @@ export {
6676
6723
  cardScaleForZoom,
6677
6724
  resolveScope,
6678
6725
  toSavedViewSummary,
6726
+ useDataViewsCopy,
6679
6727
  useDragItem
6680
6728
  };
6681
6729
  //# sourceMappingURL=DataViews.js.map