@12-apps/ui 6.78.2 → 6.78.4

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 (63) hide show
  1. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
  2. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
  3. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +7 -7
  4. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +5 -5
  5. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +6 -6
  6. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +2 -2
  7. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +5 -3
  8. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
  9. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +2 -2
  10. package/dist/_internal/components/feedback/index.js +4 -4
  11. package/dist/_internal/components/form/Calendar/Calendar.js +4 -4
  12. package/dist/_internal/components/form/Calendar/CalendarDay.js +1 -1
  13. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  14. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  15. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
  16. package/dist/_internal/components/form/index.js +5 -5
  17. package/dist/_internal/components/index.js +9 -9
  18. package/dist/{chunk-XGKUXYAD.js → chunk-3Z3WIQ5M.js} +2 -2
  19. package/dist/{chunk-Z7COWR4K.js → chunk-5M2NWXN4.js} +2 -2
  20. package/dist/{chunk-6PU3JYVY.js → chunk-6DAIC2MG.js} +2 -2
  21. package/dist/{chunk-6J7RGNSF.js → chunk-7HA7UH7O.js} +2 -2
  22. package/dist/{chunk-C7CIUDXZ.js → chunk-7JOLSD2W.js} +2 -2
  23. package/dist/{chunk-QBH36OBQ.js → chunk-BWFUZ4N2.js} +2 -2
  24. package/dist/{chunk-SFT4YN6O.js → chunk-FCVPVEAS.js} +2 -2
  25. package/dist/{chunk-KYTADPS2.js → chunk-GRMBCJS6.js} +2 -2
  26. package/dist/{chunk-AG3DY5TH.js → chunk-HHPJXK4Z.js} +5 -4
  27. package/dist/chunk-HHPJXK4Z.js.map +1 -0
  28. package/dist/{chunk-H3AQQOTI.js → chunk-HKGKQKQT.js} +9 -2
  29. package/dist/chunk-HKGKQKQT.js.map +1 -0
  30. package/dist/{chunk-K44FSPU7.js → chunk-LBZEPWYK.js} +2 -2
  31. package/dist/{chunk-LTLOZQPP.js → chunk-MM7BPTVV.js} +11 -3
  32. package/dist/chunk-MM7BPTVV.js.map +1 -0
  33. package/dist/{chunk-KHIUYLKY.js → chunk-MNZ6MCOK.js} +2 -2
  34. package/dist/{chunk-R53ZOW4B.js → chunk-NDGA7ZE6.js} +2 -2
  35. package/dist/data-display/CardKit.js +6 -6
  36. package/dist/data-display/DataViews.js +7 -7
  37. package/dist/feedback/ConfirmAction.js +4 -4
  38. package/dist/form/Calendar.js +4 -4
  39. package/dist/form/DateRangePicker.js +5 -5
  40. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.parts.d.ts +6 -0
  41. package/dist/types/components/feedback/ConfirmAction/ConfirmAction.parts.d.ts.map +1 -1
  42. package/dist/types/components/form/Calendar/CalendarDay.d.ts.map +1 -1
  43. package/dist/types/components/form/Calendar/CalendarMonth.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/feedback/ConfirmAction/ConfirmAction.md +3 -2
  46. package/src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx +17 -3
  47. package/src/components/form/Calendar/Calendar.md +7 -0
  48. package/src/components/form/Calendar/CalendarDay.tsx +13 -2
  49. package/src/components/form/Calendar/CalendarMonth.tsx +11 -2
  50. package/dist/chunk-AG3DY5TH.js.map +0 -1
  51. package/dist/chunk-H3AQQOTI.js.map +0 -1
  52. package/dist/chunk-LTLOZQPP.js.map +0 -1
  53. /package/dist/{chunk-XGKUXYAD.js.map → chunk-3Z3WIQ5M.js.map} +0 -0
  54. /package/dist/{chunk-Z7COWR4K.js.map → chunk-5M2NWXN4.js.map} +0 -0
  55. /package/dist/{chunk-6PU3JYVY.js.map → chunk-6DAIC2MG.js.map} +0 -0
  56. /package/dist/{chunk-6J7RGNSF.js.map → chunk-7HA7UH7O.js.map} +0 -0
  57. /package/dist/{chunk-C7CIUDXZ.js.map → chunk-7JOLSD2W.js.map} +0 -0
  58. /package/dist/{chunk-QBH36OBQ.js.map → chunk-BWFUZ4N2.js.map} +0 -0
  59. /package/dist/{chunk-SFT4YN6O.js.map → chunk-FCVPVEAS.js.map} +0 -0
  60. /package/dist/{chunk-KYTADPS2.js.map → chunk-GRMBCJS6.js.map} +0 -0
  61. /package/dist/{chunk-K44FSPU7.js.map → chunk-LBZEPWYK.js.map} +0 -0
  62. /package/dist/{chunk-KHIUYLKY.js.map → chunk-MNZ6MCOK.js.map} +0 -0
  63. /package/dist/{chunk-R53ZOW4B.js.map → chunk-NDGA7ZE6.js.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  useRemoveConfirm
4
- } from "../../../../chunk-XGKUXYAD.js";
4
+ } from "../../../../chunk-3Z3WIQ5M.js";
5
5
  import "../../../../chunk-RCTHCXS6.js";
6
6
  import "../../../../chunk-XCBQXSTR.js";
7
- import "../../../../chunk-Z7COWR4K.js";
8
- import "../../../../chunk-QBH36OBQ.js";
9
- import "../../../../chunk-K44FSPU7.js";
10
- import "../../../../chunk-LTLOZQPP.js";
7
+ import "../../../../chunk-5M2NWXN4.js";
8
+ import "../../../../chunk-BWFUZ4N2.js";
9
+ import "../../../../chunk-LBZEPWYK.js";
10
+ import "../../../../chunk-MM7BPTVV.js";
11
11
  import "../../../../chunk-EMYESBIT.js";
12
12
  import "../../../../chunk-LZRVUOMU.js";
13
13
  import "../../../../chunk-EEB66IVH.js";
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import {
3
3
  useRowConfirm
4
- } from "../../../../chunk-KYTADPS2.js";
4
+ } from "../../../../chunk-GRMBCJS6.js";
5
5
  import "../../../../chunk-XCBQXSTR.js";
6
- import "../../../../chunk-Z7COWR4K.js";
7
- import "../../../../chunk-QBH36OBQ.js";
8
- import "../../../../chunk-K44FSPU7.js";
9
- import "../../../../chunk-LTLOZQPP.js";
6
+ import "../../../../chunk-5M2NWXN4.js";
7
+ import "../../../../chunk-BWFUZ4N2.js";
8
+ import "../../../../chunk-LBZEPWYK.js";
9
+ import "../../../../chunk-MM7BPTVV.js";
10
10
  import "../../../../chunk-EMYESBIT.js";
11
11
  import "../../../../chunk-LZRVUOMU.js";
12
12
  import "../../../../chunk-EEB66IVH.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  DataViewsTableBase
4
- } from "../../../../chunk-SFT4YN6O.js";
4
+ } from "../../../../chunk-FCVPVEAS.js";
5
5
  import "../../../../chunk-4HUSG5MR.js";
6
6
  import "../../../../chunk-LI6XSM5D.js";
7
7
  import "../../../../chunk-ZOLAYP2D.js";
@@ -30,9 +30,9 @@ import "../../../../chunk-33MMQHYU.js";
30
30
  import "../../../../chunk-7D7CJRL7.js";
31
31
  import "../../../../chunk-GCZJH4XL.js";
32
32
  import "../../../../chunk-CBOB5AV6.js";
33
- import "../../../../chunk-6J7RGNSF.js";
33
+ import "../../../../chunk-7HA7UH7O.js";
34
34
  import "../../../../chunk-LG52LMAM.js";
35
- import "../../../../chunk-C7CIUDXZ.js";
35
+ import "../../../../chunk-7JOLSD2W.js";
36
36
  import "../../../../chunk-5M4TYFR3.js";
37
37
  import "../../../../chunk-O36MIQIO.js";
38
38
  import "../../../../chunk-M3DSPEZ3.js";
@@ -129,10 +129,10 @@ import "../../../../chunk-PN4HVM43.js";
129
129
  import "../../../../chunk-C3UKR3NT.js";
130
130
  import "../../../../chunk-D6KL74KI.js";
131
131
  import "../../../../chunk-XCBQXSTR.js";
132
- import "../../../../chunk-Z7COWR4K.js";
133
- import "../../../../chunk-QBH36OBQ.js";
134
- import "../../../../chunk-K44FSPU7.js";
135
- import "../../../../chunk-LTLOZQPP.js";
132
+ import "../../../../chunk-5M2NWXN4.js";
133
+ import "../../../../chunk-BWFUZ4N2.js";
134
+ import "../../../../chunk-LBZEPWYK.js";
135
+ import "../../../../chunk-MM7BPTVV.js";
136
136
  import "../../../../chunk-EMYESBIT.js";
137
137
  import "../../../../chunk-LZRVUOMU.js";
138
138
  import "../../../../chunk-EEB66IVH.js";
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  ManageViewsDialog
4
- } from "../../../../chunk-C7CIUDXZ.js";
4
+ } from "../../../../chunk-7JOLSD2W.js";
5
5
  import "../../../../chunk-KHG57NAE.js";
6
6
  import "../../../../chunk-XCBQXSTR.js";
7
- import "../../../../chunk-Z7COWR4K.js";
8
- import "../../../../chunk-QBH36OBQ.js";
9
- import "../../../../chunk-K44FSPU7.js";
10
- import "../../../../chunk-LTLOZQPP.js";
7
+ import "../../../../chunk-5M2NWXN4.js";
8
+ import "../../../../chunk-BWFUZ4N2.js";
9
+ import "../../../../chunk-LBZEPWYK.js";
10
+ import "../../../../chunk-MM7BPTVV.js";
11
11
  import "../../../../chunk-EMYESBIT.js";
12
12
  import "../../../../chunk-LZRVUOMU.js";
13
13
  import "../../../../chunk-EEB66IVH.js";
@@ -3,9 +3,9 @@ import {
3
3
  ViewDialogs,
4
4
  ViewMutationErrorAlert,
5
5
  ViewsMenuSlot
6
- } from "../../../../chunk-6J7RGNSF.js";
6
+ } from "../../../../chunk-7HA7UH7O.js";
7
7
  import "../../../../chunk-LG52LMAM.js";
8
- import "../../../../chunk-C7CIUDXZ.js";
8
+ import "../../../../chunk-7JOLSD2W.js";
9
9
  import "../../../../chunk-5M4TYFR3.js";
10
10
  import "../../../../chunk-DUVH273U.js";
11
11
  import "../../../../chunk-KHG57NAE.js";
@@ -32,10 +32,10 @@ import "../../../../chunk-MO4FFK62.js";
32
32
  import "../../../../chunk-4AJY7HMH.js";
33
33
  import "../../../../chunk-KLJYIS5L.js";
34
34
  import "../../../../chunk-XCBQXSTR.js";
35
- import "../../../../chunk-Z7COWR4K.js";
36
- import "../../../../chunk-QBH36OBQ.js";
37
- import "../../../../chunk-K44FSPU7.js";
38
- import "../../../../chunk-LTLOZQPP.js";
35
+ import "../../../../chunk-5M2NWXN4.js";
36
+ import "../../../../chunk-BWFUZ4N2.js";
37
+ import "../../../../chunk-LBZEPWYK.js";
38
+ import "../../../../chunk-MM7BPTVV.js";
39
39
  import "../../../../chunk-EMYESBIT.js";
40
40
  import "../../../../chunk-LZRVUOMU.js";
41
41
  import "../../../../chunk-EEB66IVH.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ConfirmAction
3
- } from "../../../../chunk-QBH36OBQ.js";
4
- import "../../../../chunk-LTLOZQPP.js";
3
+ } from "../../../../chunk-BWFUZ4N2.js";
4
+ import "../../../../chunk-MM7BPTVV.js";
5
5
  import "../../../../chunk-EMYESBIT.js";
6
6
  import "../../../../chunk-LZRVUOMU.js";
7
7
  import "../../../../chunk-EEB66IVH.js";
@@ -1,6 +1,7 @@
1
1
  import {
2
- ConfirmActionDialog
3
- } from "../../../../chunk-LTLOZQPP.js";
2
+ ConfirmActionDialog,
3
+ typedMatches
4
+ } from "../../../../chunk-MM7BPTVV.js";
4
5
  import "../../../../chunk-LZRVUOMU.js";
5
6
  import "../../../../chunk-EEB66IVH.js";
6
7
  import "../../../../chunk-2IBFEHIX.js";
@@ -13,6 +14,7 @@ import "../../../../chunk-N3GAFIXG.js";
13
14
  import "../../../../chunk-YKCAJ2TN.js";
14
15
  import "../../../../chunk-PZ5AY32C.js";
15
16
  export {
16
- ConfirmActionDialog
17
+ ConfirmActionDialog,
18
+ typedMatches
17
19
  };
18
20
  //# sourceMappingURL=ConfirmAction.parts.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  createConfirmButton
3
- } from "../../../../chunk-Z7COWR4K.js";
4
- import "../../../../chunk-K44FSPU7.js";
5
- import "../../../../chunk-LTLOZQPP.js";
3
+ } from "../../../../chunk-5M2NWXN4.js";
4
+ import "../../../../chunk-LBZEPWYK.js";
5
+ import "../../../../chunk-MM7BPTVV.js";
6
6
  import "../../../../chunk-EMYESBIT.js";
7
7
  import "../../../../chunk-LZRVUOMU.js";
8
8
  import "../../../../chunk-EEB66IVH.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  withConfirmation
3
- } from "../../../../chunk-K44FSPU7.js";
4
- import "../../../../chunk-LTLOZQPP.js";
3
+ } from "../../../../chunk-LBZEPWYK.js";
4
+ import "../../../../chunk-MM7BPTVV.js";
5
5
  import "../../../../chunk-EMYESBIT.js";
6
6
  import "../../../../chunk-LZRVUOMU.js";
7
7
  import "../../../../chunk-EEB66IVH.js";
@@ -68,16 +68,16 @@ import {
68
68
  import "../../../chunk-XCBQXSTR.js";
69
69
  import {
70
70
  createConfirmButton
71
- } from "../../../chunk-Z7COWR4K.js";
71
+ } from "../../../chunk-5M2NWXN4.js";
72
72
  import {
73
73
  ConfirmAction
74
- } from "../../../chunk-QBH36OBQ.js";
74
+ } from "../../../chunk-BWFUZ4N2.js";
75
75
  import {
76
76
  withConfirmation
77
- } from "../../../chunk-K44FSPU7.js";
77
+ } from "../../../chunk-LBZEPWYK.js";
78
78
  import {
79
79
  ConfirmActionDialog
80
- } from "../../../chunk-LTLOZQPP.js";
80
+ } from "../../../chunk-MM7BPTVV.js";
81
81
  import {
82
82
  useConfirmAction
83
83
  } from "../../../chunk-EMYESBIT.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Calendar,
3
3
  Calendar_default
4
- } from "../../../../chunk-R53ZOW4B.js";
4
+ } from "../../../../chunk-NDGA7ZE6.js";
5
5
  import "../../../../chunk-2ZRZTGWP.js";
6
6
  import "../../../../chunk-SUALMVL7.js";
7
- import "../../../../chunk-AG3DY5TH.js";
8
- import "../../../../chunk-6PU3JYVY.js";
9
- import "../../../../chunk-H3AQQOTI.js";
7
+ import "../../../../chunk-HHPJXK4Z.js";
8
+ import "../../../../chunk-6DAIC2MG.js";
9
+ import "../../../../chunk-HKGKQKQT.js";
10
10
  import "../../../../chunk-E2Y7G4MP.js";
11
11
  import "../../../../chunk-FFQ4NOJT.js";
12
12
  import "../../../../chunk-TERT6TIS.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CalendarDay
3
- } from "../../../../chunk-H3AQQOTI.js";
3
+ } from "../../../../chunk-HKGKQKQT.js";
4
4
  import "../../../../chunk-YKCAJ2TN.js";
5
5
  import "../../../../chunk-PZ5AY32C.js";
6
6
  export {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CalendarDayCell
3
- } from "../../../../chunk-6PU3JYVY.js";
4
- import "../../../../chunk-H3AQQOTI.js";
3
+ } from "../../../../chunk-6DAIC2MG.js";
4
+ import "../../../../chunk-HKGKQKQT.js";
5
5
  import "../../../../chunk-E2Y7G4MP.js";
6
6
  import "../../../../chunk-TERT6TIS.js";
7
7
  import "../../../../chunk-YKCAJ2TN.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  CalendarMonth
3
- } from "../../../../chunk-AG3DY5TH.js";
4
- import "../../../../chunk-6PU3JYVY.js";
5
- import "../../../../chunk-H3AQQOTI.js";
3
+ } from "../../../../chunk-HHPJXK4Z.js";
4
+ import "../../../../chunk-6DAIC2MG.js";
5
+ import "../../../../chunk-HKGKQKQT.js";
6
6
  import "../../../../chunk-E2Y7G4MP.js";
7
7
  import "../../../../chunk-TERT6TIS.js";
8
8
  import "../../../../chunk-YKCAJ2TN.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  DateRangePicker,
4
4
  DateRangePicker_default
5
- } from "../../../../chunk-KHIUYLKY.js";
5
+ } from "../../../../chunk-MNZ6MCOK.js";
6
6
  import "../../../../chunk-QKLSHNOH.js";
7
7
  import "../../../../chunk-AXZCCX7O.js";
8
8
  import "../../../../chunk-6KKQHJE7.js";
@@ -10,12 +10,12 @@ import "../../../../chunk-3YLRR4JM.js";
10
10
  import "../../../../chunk-NTO5DALI.js";
11
11
  import "../../../../chunk-FRAVVI4A.js";
12
12
  import "../../../../chunk-BO6S47KI.js";
13
- import "../../../../chunk-R53ZOW4B.js";
13
+ import "../../../../chunk-NDGA7ZE6.js";
14
14
  import "../../../../chunk-2ZRZTGWP.js";
15
15
  import "../../../../chunk-SUALMVL7.js";
16
- import "../../../../chunk-AG3DY5TH.js";
17
- import "../../../../chunk-6PU3JYVY.js";
18
- import "../../../../chunk-H3AQQOTI.js";
16
+ import "../../../../chunk-HHPJXK4Z.js";
17
+ import "../../../../chunk-6DAIC2MG.js";
18
+ import "../../../../chunk-HKGKQKQT.js";
19
19
  import "../../../../chunk-E2Y7G4MP.js";
20
20
  import "../../../../chunk-FFQ4NOJT.js";
21
21
  import "../../../../chunk-TERT6TIS.js";
@@ -121,7 +121,7 @@ import "../../../chunk-YOKUDQIJ.js";
121
121
  import "../../../chunk-BN6POCYF.js";
122
122
  import {
123
123
  DateRangePicker
124
- } from "../../../chunk-KHIUYLKY.js";
124
+ } from "../../../chunk-MNZ6MCOK.js";
125
125
  import {
126
126
  DEFAULT_QUICK_RANGES,
127
127
  DEFAULT_QUICK_RANGE_LABELS,
@@ -164,12 +164,12 @@ import "../../../chunk-JXS56EW5.js";
164
164
  import "../../../chunk-BO6S47KI.js";
165
165
  import {
166
166
  Calendar
167
- } from "../../../chunk-R53ZOW4B.js";
167
+ } from "../../../chunk-NDGA7ZE6.js";
168
168
  import "../../../chunk-2ZRZTGWP.js";
169
169
  import "../../../chunk-SUALMVL7.js";
170
- import "../../../chunk-AG3DY5TH.js";
171
- import "../../../chunk-6PU3JYVY.js";
172
- import "../../../chunk-H3AQQOTI.js";
170
+ import "../../../chunk-HHPJXK4Z.js";
171
+ import "../../../chunk-6DAIC2MG.js";
172
+ import "../../../chunk-HKGKQKQT.js";
173
173
  import "../../../chunk-E2Y7G4MP.js";
174
174
  import "../../../chunk-FFQ4NOJT.js";
175
175
  import "../../../chunk-TERT6TIS.js";
@@ -346,7 +346,7 @@ import "../../chunk-YOKUDQIJ.js";
346
346
  import "../../chunk-BN6POCYF.js";
347
347
  import {
348
348
  DateRangePicker
349
- } from "../../chunk-KHIUYLKY.js";
349
+ } from "../../chunk-MNZ6MCOK.js";
350
350
  import {
351
351
  DEFAULT_QUICK_RANGES,
352
352
  DEFAULT_QUICK_RANGE_LABELS,
@@ -407,12 +407,12 @@ import "../../chunk-JXS56EW5.js";
407
407
  import "../../chunk-BO6S47KI.js";
408
408
  import {
409
409
  Calendar
410
- } from "../../chunk-R53ZOW4B.js";
410
+ } from "../../chunk-NDGA7ZE6.js";
411
411
  import "../../chunk-2ZRZTGWP.js";
412
412
  import "../../chunk-SUALMVL7.js";
413
- import "../../chunk-AG3DY5TH.js";
414
- import "../../chunk-6PU3JYVY.js";
415
- import "../../chunk-H3AQQOTI.js";
413
+ import "../../chunk-HHPJXK4Z.js";
414
+ import "../../chunk-6DAIC2MG.js";
415
+ import "../../chunk-HKGKQKQT.js";
416
416
  import "../../chunk-E2Y7G4MP.js";
417
417
  import "../../chunk-FFQ4NOJT.js";
418
418
  import "../../chunk-TERT6TIS.js";
@@ -681,16 +681,16 @@ import {
681
681
  import "../../chunk-XCBQXSTR.js";
682
682
  import {
683
683
  createConfirmButton
684
- } from "../../chunk-Z7COWR4K.js";
684
+ } from "../../chunk-5M2NWXN4.js";
685
685
  import {
686
686
  ConfirmAction
687
- } from "../../chunk-QBH36OBQ.js";
687
+ } from "../../chunk-BWFUZ4N2.js";
688
688
  import {
689
689
  withConfirmation
690
- } from "../../chunk-K44FSPU7.js";
690
+ } from "../../chunk-LBZEPWYK.js";
691
691
  import {
692
692
  ConfirmActionDialog
693
- } from "../../chunk-LTLOZQPP.js";
693
+ } from "../../chunk-MM7BPTVV.js";
694
694
  import {
695
695
  useConfirmAction
696
696
  } from "../../chunk-EMYESBIT.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-RCTHCXS6.js";
4
4
  import {
5
5
  ConfirmActionDialog
6
- } from "./chunk-LTLOZQPP.js";
6
+ } from "./chunk-MM7BPTVV.js";
7
7
  import {
8
8
  useConfirmAction
9
9
  } from "./chunk-EMYESBIT.js";
@@ -50,4 +50,4 @@ function useRemoveConfirm({
50
50
  export {
51
51
  useRemoveConfirm
52
52
  };
53
- //# sourceMappingURL=chunk-XGKUXYAD.js.map
53
+ //# sourceMappingURL=chunk-3Z3WIQ5M.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  withConfirmation
3
- } from "./chunk-K44FSPU7.js";
3
+ } from "./chunk-LBZEPWYK.js";
4
4
  import {
5
5
  Button
6
6
  } from "./chunk-5USHYSCO.js";
@@ -18,4 +18,4 @@ function createConfirmButton(copy, errorText) {
18
18
  export {
19
19
  createConfirmButton
20
20
  };
21
- //# sourceMappingURL=chunk-Z7COWR4K.js.map
21
+ //# sourceMappingURL=chunk-5M2NWXN4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CalendarDay
3
- } from "./chunk-H3AQQOTI.js";
3
+ } from "./chunk-HKGKQKQT.js";
4
4
  import {
5
5
  buildDayArgs
6
6
  } from "./chunk-E2Y7G4MP.js";
@@ -40,4 +40,4 @@ var CalendarDayCell = ({
40
40
  export {
41
41
  CalendarDayCell
42
42
  };
43
- //# sourceMappingURL=chunk-6PU3JYVY.js.map
43
+ //# sourceMappingURL=chunk-6DAIC2MG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-LG52LMAM.js";
4
4
  import {
5
5
  ManageViewsDialog
6
- } from "./chunk-C7CIUDXZ.js";
6
+ } from "./chunk-7JOLSD2W.js";
7
7
  import {
8
8
  useDataViewsCopy
9
9
  } from "./chunk-KHG57NAE.js";
@@ -121,4 +121,4 @@ export {
121
121
  ViewsMenuSlot,
122
122
  ViewDialogs
123
123
  };
124
- //# sourceMappingURL=chunk-6J7RGNSF.js.map
124
+ //# sourceMappingURL=chunk-7HA7UH7O.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KHG57NAE.js";
4
4
  import {
5
5
  createConfirmButton
6
- } from "./chunk-Z7COWR4K.js";
6
+ } from "./chunk-5M2NWXN4.js";
7
7
  import {
8
8
  Dialog,
9
9
  DialogContent
@@ -128,4 +128,4 @@ function ManageViewsDialog({
128
128
  export {
129
129
  ManageViewsDialog
130
130
  };
131
- //# sourceMappingURL=chunk-C7CIUDXZ.js.map
131
+ //# sourceMappingURL=chunk-7JOLSD2W.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ConfirmActionDialog
3
- } from "./chunk-LTLOZQPP.js";
3
+ } from "./chunk-MM7BPTVV.js";
4
4
  import {
5
5
  useConfirmAction
6
6
  } from "./chunk-EMYESBIT.js";
@@ -23,4 +23,4 @@ ConfirmAction.displayName = "ConfirmAction";
23
23
  export {
24
24
  ConfirmAction
25
25
  };
26
- //# sourceMappingURL=chunk-QBH36OBQ.js.map
26
+ //# sourceMappingURL=chunk-BWFUZ4N2.js.map
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  ViewDialogs,
12
12
  ViewMutationErrorAlert
13
- } from "./chunk-6J7RGNSF.js";
13
+ } from "./chunk-7HA7UH7O.js";
14
14
  import {
15
15
  useUrlEchoGuard,
16
16
  useUrlSyncState
@@ -166,4 +166,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
166
166
  export {
167
167
  DataViewsTableBase
168
168
  };
169
- //# sourceMappingURL=chunk-SFT4YN6O.js.map
169
+ //# sourceMappingURL=chunk-FCVPVEAS.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ConfirmActionDialog
3
- } from "./chunk-LTLOZQPP.js";
3
+ } from "./chunk-MM7BPTVV.js";
4
4
  import {
5
5
  useConfirmAction
6
6
  } from "./chunk-EMYESBIT.js";
@@ -43,4 +43,4 @@ function useRowConfirm({
43
43
  export {
44
44
  useRowConfirm
45
45
  };
46
- //# sourceMappingURL=chunk-KYTADPS2.js.map
46
+ //# sourceMappingURL=chunk-GRMBCJS6.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CalendarDayCell
3
- } from "./chunk-6PU3JYVY.js";
3
+ } from "./chunk-6DAIC2MG.js";
4
4
  import {
5
5
  getMonthName
6
6
  } from "./chunk-TERT6TIS.js";
@@ -16,7 +16,8 @@ import IconButton from "@mui/material/IconButton/index.js";
16
16
  import Typography from "@mui/material/Typography/index.js";
17
17
  import { jsx, jsxs } from "react/jsx-runtime";
18
18
  var SPACER_WIDTH = sxRem(32);
19
- var GRID_SX = { display: "grid", gridTemplateColumns: "repeat(7, 1fr)", gap: 0.5 };
19
+ var GRID_SX = { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 0.5 };
20
+ var MONTH_SX = { flex: `1 1 ${sxRem(280)}`, minWidth: 0, maxWidth: sxRem(304) };
20
21
  var MonthNavHeader = ({ title, showPrevious, showNext, onPreviousMonth, onNextMonth }) => /* @__PURE__ */ jsxs(
21
22
  Box,
22
23
  {
@@ -75,7 +76,7 @@ var CalendarMonth = ({
75
76
  January's 5th and February's. Without a per-month hook a test can only
76
77
  reach a day positionally, which is exactly what the flakiness gate
77
78
  refuses. Additive: `calendar-grid` below is unchanged. */
78
- /* @__PURE__ */ jsxs(Box, { sx: { minWidth: sxRem(280) }, "data-testid": `calendar-month-${monthIndex}`, children: [
79
+ /* @__PURE__ */ jsxs(Box, { sx: MONTH_SX, "data-testid": `calendar-month-${monthIndex}`, children: [
79
80
  /* @__PURE__ */ jsx(
80
81
  MonthNavHeader,
81
82
  {
@@ -104,4 +105,4 @@ var CalendarMonth = ({
104
105
  export {
105
106
  CalendarMonth
106
107
  };
107
- //# sourceMappingURL=chunk-AG3DY5TH.js.map
108
+ //# sourceMappingURL=chunk-HHPJXK4Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/Calendar/CalendarMonth.tsx"],"sourcesContent":["import ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport ChevronRight from '@mui/icons-material/ChevronRight';\nimport Box from '@mui/material/Box/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { sxRem } from '../../../tokens/relative';\n\nimport { getMonthName } from './Calendar.dates';\nimport type { CalendarProps, MonthMatrix } from './Calendar.types';\nimport type { DayCellContext } from './CalendarDayCell';\nimport { CalendarDayCell } from './CalendarDayCell';\n\n/** The nav spacer's width and the weekday row's height, 32 design px through the type scale. */\nconst SPACER_WIDTH = sxRem(32);\n\n// `minmax(0, 1fr)`, not `1fr`: a bare `1fr` keeps each column at least its\n// content's width, which is what held the grid at 304px (FUT-3861).\nconst GRID_SX = { display: 'grid', gridTemplateColumns: 'repeat(7, minmax(0, 1fr))', gap: 0.5 } as const;\n\n/**\n * A month takes the room it is given, from nothing up to seven full cells and\n * their gaps (7 × 40 + 6 × 4 design px). Months side by side keep a 280 basis,\n * so a multi-month calendar still wraps rather than squeezing every month.\n */\nconst MONTH_SX = { flex: `1 1 ${sxRem(280)}`, minWidth: 0, maxWidth: sxRem(304) } as const;\n\n// Only the outermost months carry arrows; the ones between get a spacer so their\n// titles stay centred.\nconst MonthNavHeader: FC<{\n title: React.ReactNode;\n showPrevious: boolean;\n showNext: boolean;\n onPreviousMonth: () => void;\n onNextMonth: () => void;\n}> = ({ title, showPrevious, showNext, onPreviousMonth, onNextMonth }) => (\n <Box\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}\n data-testid=\"calendar-header\"\n >\n {showPrevious && (\n <IconButton onClick={onPreviousMonth} size=\"small\" data-testid=\"calendar-prev-month\">\n <ChevronLeft />\n </IconButton>\n )}\n\n <Typography\n variant=\"h6\"\n component=\"h2\"\n sx={{ fontWeight: 'bold', flex: 1, textAlign: 'center' }}\n >\n {title}\n </Typography>\n\n {showNext && (\n <IconButton onClick={onNextMonth} size=\"small\" data-testid=\"calendar-next-month\">\n <ChevronRight />\n </IconButton>\n )}\n\n {!showPrevious && !showNext && <Box sx={{ width: SPACER_WIDTH }} />}\n </Box>\n);\n\nconst WeekdayHeader: FC<{ weekdayNames: string[] }> = ({ weekdayNames }) => (\n <Box sx={{ ...GRID_SX, mb: 1 }}>\n {weekdayNames.map((weekday, index) => (\n <Box\n // Narrow weekday names repeat within a week ('S', 'T'), so position is\n // the only stable key here.\n key={`weekday-${index}`}\n role=\"columnheader\"\n data-testid={`calendar-weekday-${index}`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: SPACER_WIDTH,\n fontSize: sxRem(14),\n fontWeight: 'bold',\n color: 'text.secondary',\n }}\n >\n {weekday}\n </Box>\n ))}\n </Box>\n);\n\nexport interface CalendarMonthProps {\n matrix: MonthMatrix;\n monthIndex: number;\n monthsToShow: number;\n locale: string;\n weekdayNames: string[];\n renderHeader?: CalendarProps['renderHeader'];\n onPreviousMonth: () => void;\n onNextMonth: () => void;\n dayContext: DayCellContext;\n}\n\nexport const CalendarMonth: FC<CalendarMonthProps> = ({\n matrix,\n monthIndex,\n monthsToShow,\n locale,\n weekdayNames,\n renderHeader,\n onPreviousMonth,\n onNextMonth,\n dayContext,\n}) => {\n const monthName = getMonthName(matrix.month, matrix.year, locale);\n const title = renderHeader ? renderHeader({ month: matrix.month, year: matrix.year }) : monthName;\n\n return (\n /* The month is addressable by its position, because in a multi-month\n calendar every day number appears once PER MONTH — `calendar-date-5` is\n January's 5th and February's. Without a per-month hook a test can only\n reach a day positionally, which is exactly what the flakiness gate\n refuses. Additive: `calendar-grid` below is unchanged. */\n <Box sx={MONTH_SX} data-testid={`calendar-month-${monthIndex}`}>\n <MonthNavHeader\n title={title}\n showPrevious={monthIndex === 0}\n showNext={monthIndex === monthsToShow - 1}\n onPreviousMonth={onPreviousMonth}\n onNextMonth={onNextMonth}\n />\n\n <WeekdayHeader weekdayNames={weekdayNames} />\n\n <Box\n role=\"grid\"\n aria-labelledby={`month-${monthIndex}`}\n data-testid=\"calendar-grid\"\n sx={GRID_SX}\n >\n {matrix.weeks.flat().map((day) => (\n <CalendarDayCell key={day.key} day={day} {...dayContext} />\n ))}\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,iBAAiB;AACxB,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAChB,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AAkCrB,SAMM,KANN;AAtBF,IAAM,eAAe,MAAM,EAAE;AAI7B,IAAM,UAAU,EAAE,SAAS,QAAQ,qBAAqB,6BAA6B,KAAK,IAAI;AAO9F,IAAM,WAAW,EAAE,MAAM,OAAO,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU,MAAM,GAAG,EAAE;AAIhF,IAAM,iBAMD,CAAC,EAAE,OAAO,cAAc,UAAU,iBAAiB,YAAY,MAClE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,IAAI,EAAE;AAAA,IACpF,eAAY;AAAA,IAEX;AAAA,sBACC,oBAAC,cAAW,SAAS,iBAAiB,MAAK,SAAQ,eAAY,uBAC7D,8BAAC,eAAY,GACf;AAAA,MAGF;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,IAAI,EAAE,YAAY,QAAQ,MAAM,GAAG,WAAW,SAAS;AAAA,UAEtD;AAAA;AAAA,MACH;AAAA,MAEC,YACC,oBAAC,cAAW,SAAS,aAAa,MAAK,SAAQ,eAAY,uBACzD,8BAAC,gBAAa,GAChB;AAAA,MAGD,CAAC,gBAAgB,CAAC,YAAY,oBAAC,OAAI,IAAI,EAAE,OAAO,aAAa,GAAG;AAAA;AAAA;AACnE;AAGF,IAAM,gBAAgD,CAAC,EAAE,aAAa,MACpE,oBAAC,OAAI,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,GAC1B,uBAAa,IAAI,CAAC,SAAS,UAC1B;AAAA,EAAC;AAAA;AAAA,IAIC,MAAK;AAAA,IACL,eAAa,oBAAoB,KAAK;AAAA,IACtC,IAAI;AAAA,MACF,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU,MAAM,EAAE;AAAA,MAClB,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEC;AAAA;AAAA,EAbI,WAAW,KAAK;AAcvB,CACD,GACH;AAeK,IAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,YAAY,aAAa,OAAO,OAAO,OAAO,MAAM,MAAM;AAChE,QAAM,QAAQ,eAAe,aAAa,EAAE,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,CAAC,IAAI;AAExF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,qBAAC,OAAI,IAAI,UAAU,eAAa,kBAAkB,UAAU,IAC1D;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,cAAc,eAAe;AAAA,UAC7B,UAAU,eAAe,eAAe;AAAA,UACxC;AAAA,UACA;AAAA;AAAA,MACF;AAAA,MAEA,oBAAC,iBAAc,cAA4B;AAAA,MAE3C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,mBAAiB,SAAS,UAAU;AAAA,UACpC,eAAY;AAAA,UACZ,IAAI;AAAA,UAEH,iBAAO,MAAM,KAAK,EAAE,IAAI,CAAC,QACxB,oBAAC,mBAA8B,KAAW,GAAG,cAAvB,IAAI,GAA+B,CAC1D;AAAA;AAAA,MACH;AAAA,OACF;AAAA;AAEJ;","names":[]}
@@ -43,8 +43,15 @@ var dayCellSx = (day, visible) => ({
43
43
  display: "flex",
44
44
  alignItems: "center",
45
45
  justifyContent: "center",
46
+ // 40 is the size it ASKS for, so the month's intrinsic width stays 304 and a
47
+ // shrink-wrapping parent (the picker is inline-flex) still sizes to it; the
48
+ // column's `minmax(0, 1fr)` and this `maxWidth` let it give way below that.
46
49
  width: CELL_SIZE,
47
- height: CELL_SIZE,
50
+ maxWidth: "100%",
51
+ aspectRatio: "1 / 1",
52
+ justifySelf: "center",
53
+ boxSizing: "border-box",
54
+ padding: 0,
48
55
  border: "none",
49
56
  borderRadius: 1,
50
57
  cursor: day.disabled ? "not-allowed" : "pointer",
@@ -99,4 +106,4 @@ var CalendarDay = ({
99
106
  export {
100
107
  CalendarDay
101
108
  };
102
- //# sourceMappingURL=chunk-H3AQQOTI.js.map
109
+ //# sourceMappingURL=chunk-HKGKQKQT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/Calendar/CalendarDay.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { rem, sxRem } from '../../../tokens/relative';\n\nimport type { DayRenderArgs } from './Calendar.types';\n\n/**\n * A day cell's LARGEST edge, 40 design px through the theme's type scale. The\n * cell is a square that fills its grid column up to this size, so the month\n * shrinks with its container instead of holding a fixed 304px floor (FUT-3861).\n */\nconst CELL_SIZE = sxRem(40);\n\ninterface DayState extends DayRenderArgs {\n outside: boolean;\n focused: boolean;\n}\n\n// Order matters: these land on the element in the order listed.\nconst CLASS_FLAGS: Array<[keyof DayState, string]> = [\n ['selected', 'selected'],\n ['inRange', 'in-range'],\n ['rangeStart', 'range-start'],\n ['rangeEnd', 'range-end'],\n ['disabled', 'disabled'],\n ['today', 'today'],\n ['outside', 'outside'],\n ['hovered', 'hovered'],\n ['focused', 'focused'],\n];\n\nconst dayClassNames = (state: DayState, custom?: string): string =>\n [\n 'calendar-day',\n ...CLASS_FLAGS.filter(([flag]) => state[flag]).map(([, name]) => name),\n ...(custom ? [custom] : []),\n ].join(' ');\n\nconst isEndpoint = (day: DayRenderArgs): boolean =>\n day.selected || day.rangeStart || day.rangeEnd;\n\nconst backgroundFor = (day: DayRenderArgs): string => {\n if (isEndpoint(day)) return 'primary.main';\n if (day.inRange || day.hovered) return 'primary.light';\n return 'transparent';\n};\n\nconst colorFor = (day: DayRenderArgs, visible: boolean): string => {\n if (isEndpoint(day)) return 'primary.contrastText';\n if (day.disabled) return 'text.disabled';\n // Outside days that are switched off still occupy the grid, they just have\n // nothing to show.\n if (!visible) return 'transparent';\n return 'text.primary';\n};\n\nconst hoverBackgroundFor = (day: DayRenderArgs): string | undefined => {\n if (day.disabled) return undefined;\n return day.selected ? 'primary.dark' : 'action.hover';\n};\n\nconst dayCellSx = (day: DayRenderArgs, visible: boolean): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // 40 is the size it ASKS for, so the month's intrinsic width stays 304 and a\n // shrink-wrapping parent (the picker is inline-flex) still sizes to it; the\n // column's `minmax(0, 1fr)` and this `maxWidth` let it give way below that.\n width: CELL_SIZE,\n maxWidth: '100%',\n aspectRatio: '1 / 1',\n justifySelf: 'center',\n boxSizing: 'border-box',\n padding: 0,\n border: 'none',\n borderRadius: 1,\n cursor: day.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: backgroundFor(day),\n color: colorFor(day, visible),\n opacity: !day.inCurrentMonth && visible ? 0.5 : 1,\n fontWeight: day.today ? 'bold' : 'normal',\n '&:hover': {\n backgroundColor: hoverBackgroundFor(day),\n },\n '&:focus': {\n outline: (theme: Theme) => `${rem(theme, 2)} solid`,\n outlineColor: 'primary.main',\n outlineOffset: sxRem(1),\n },\n});\n\nexport interface CalendarDayProps {\n day: DayRenderArgs;\n focused: boolean;\n showOutsideDays: boolean;\n dayClassName?: (args: DayRenderArgs) => string;\n onSelect: (date: Date) => void;\n onHover: (date: Date) => void;\n onHoverEnd: () => void;\n}\n\nexport const CalendarDay: FC<CalendarDayProps> = ({\n day,\n focused,\n showOutsideDays,\n dayClassName,\n onSelect,\n onHover,\n onHoverEnd,\n}) => {\n const visible = day.inCurrentMonth || showOutsideDays;\n const state: DayState = { ...day, outside: !day.inCurrentMonth, focused };\n\n return (\n <Box\n component=\"button\"\n role=\"gridcell\"\n tabIndex={focused ? 0 : -1}\n aria-selected={day.selected}\n aria-disabled={day.disabled}\n aria-current={day.today ? 'date' : undefined}\n className={dayClassNames(state, dayClassName?.(day))}\n data-testid={`calendar-date-${day.date.getDate()}`}\n onClick={() => onSelect(day.date)}\n onMouseEnter={() => onHover(day.date)}\n onMouseLeave={onHoverEnd}\n sx={dayCellSx(day, visible)}\n >\n {day.selected && (\n <Box component=\"span\" data-testid=\"calendar-selected-date\" sx={{ display: 'none' }} />\n )}\n {day.today && (\n <Box component=\"span\" data-testid=\"calendar-today\" sx={{ display: 'none' }} />\n )}\n {visible ? day.date.getDate() : ''}\n </Box>\n );\n};\n"],"mappings":";;;;;;AACA,OAAO,SAAS;AAoHZ,SAeI,KAfJ;AAvGJ,IAAM,YAAY,MAAM,EAAE;AAQ1B,IAAM,cAA+C;AAAA,EACnD,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,WAAW,UAAU;AAAA,EACtB,CAAC,cAAc,aAAa;AAAA,EAC5B,CAAC,YAAY,WAAW;AAAA,EACxB,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,SAAS,OAAO;AAAA,EACjB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,WAAW,SAAS;AACvB;AAEA,IAAM,gBAAgB,CAAC,OAAiB,WACtC;AAAA,EACE;AAAA,EACA,GAAG,YAAY,OAAO,CAAC,CAAC,IAAI,MAAM,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,IAAI;AAAA,EACrE,GAAI,SAAS,CAAC,MAAM,IAAI,CAAC;AAC3B,EAAE,KAAK,GAAG;AAEZ,IAAM,aAAa,CAAC,QAClB,IAAI,YAAY,IAAI,cAAc,IAAI;AAExC,IAAM,gBAAgB,CAAC,QAA+B;AACpD,MAAI,WAAW,GAAG,EAAG,QAAO;AAC5B,MAAI,IAAI,WAAW,IAAI,QAAS,QAAO;AACvC,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,KAAoB,YAA6B;AACjE,MAAI,WAAW,GAAG,EAAG,QAAO;AAC5B,MAAI,IAAI,SAAU,QAAO;AAGzB,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AACT;AAEA,IAAM,qBAAqB,CAAC,QAA2C;AACrE,MAAI,IAAI,SAAU,QAAO;AACzB,SAAO,IAAI,WAAW,iBAAiB;AACzC;AAEA,IAAM,YAAY,CAAC,KAAoB,aAAsC;AAAA,EAC3E,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIhB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,QAAQ,IAAI,WAAW,gBAAgB;AAAA,EACvC,iBAAiB,cAAc,GAAG;AAAA,EAClC,OAAO,SAAS,KAAK,OAAO;AAAA,EAC5B,SAAS,CAAC,IAAI,kBAAkB,UAAU,MAAM;AAAA,EAChD,YAAY,IAAI,QAAQ,SAAS;AAAA,EACjC,WAAW;AAAA,IACT,iBAAiB,mBAAmB,GAAG;AAAA,EACzC;AAAA,EACA,WAAW;AAAA,IACT,SAAS,CAAC,UAAiB,GAAG,IAAI,OAAO,CAAC,CAAC;AAAA,IAC3C,cAAc;AAAA,IACd,eAAe,MAAM,CAAC;AAAA,EACxB;AACF;AAYO,IAAM,cAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,UAAU,IAAI,kBAAkB;AACtC,QAAM,QAAkB,EAAE,GAAG,KAAK,SAAS,CAAC,IAAI,gBAAgB,QAAQ;AAExE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,UAAU,UAAU,IAAI;AAAA,MACxB,iBAAe,IAAI;AAAA,MACnB,iBAAe,IAAI;AAAA,MACnB,gBAAc,IAAI,QAAQ,SAAS;AAAA,MACnC,WAAW,cAAc,OAAO,eAAe,GAAG,CAAC;AAAA,MACnD,eAAa,iBAAiB,IAAI,KAAK,QAAQ,CAAC;AAAA,MAChD,SAAS,MAAM,SAAS,IAAI,IAAI;AAAA,MAChC,cAAc,MAAM,QAAQ,IAAI,IAAI;AAAA,MACpC,cAAc;AAAA,MACd,IAAI,UAAU,KAAK,OAAO;AAAA,MAEzB;AAAA,YAAI,YACH,oBAAC,OAAI,WAAU,QAAO,eAAY,0BAAyB,IAAI,EAAE,SAAS,OAAO,GAAG;AAAA,QAErF,IAAI,SACH,oBAAC,OAAI,WAAU,QAAO,eAAY,kBAAiB,IAAI,EAAE,SAAS,OAAO,GAAG;AAAA,QAE7E,UAAU,IAAI,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA,EAClC;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ConfirmActionDialog
3
- } from "./chunk-LTLOZQPP.js";
3
+ } from "./chunk-MM7BPTVV.js";
4
4
  import {
5
5
  useConfirmAction
6
6
  } from "./chunk-EMYESBIT.js";
@@ -40,4 +40,4 @@ function withConfirmation(Wrapped, defaults) {
40
40
  export {
41
41
  withConfirmation
42
42
  };
43
- //# sourceMappingURL=chunk-K44FSPU7.js.map
43
+ //# sourceMappingURL=chunk-LBZEPWYK.js.map
@@ -23,6 +23,9 @@ function resolveInitialFocus(tone, initialFocus) {
23
23
  if (initialFocus) return initialFocus;
24
24
  return tone === "destructive" ? "cancel" : "confirm";
25
25
  }
26
+ function typedMatches(typed, expected) {
27
+ return typed.trim().toLocaleLowerCase("pt-BR") === expected.trim().toLocaleLowerCase("pt-BR");
28
+ }
26
29
  function TypeToConfirmField({
27
30
  expected,
28
31
  label,
@@ -43,7 +46,11 @@ function TypeToConfirmField({
43
46
  onChange: (event) => onChange(event.target.value),
44
47
  inputProps: {
45
48
  "aria-label": label ?? copy.typeToConfirm(expected),
46
- "data-testid": `${dataTestId}-type-to-confirm`
49
+ "data-testid": `${dataTestId}-type-to-confirm`,
50
+ // A word to copy, not prose: the phone keeps its hands off it.
51
+ autoCapitalize: "none",
52
+ autoCorrect: "off",
53
+ spellCheck: false
47
54
  }
48
55
  }
49
56
  )
@@ -67,7 +74,7 @@ function ConfirmActionDialog({
67
74
  React.useEffect(() => {
68
75
  if (state.open) setTyped("");
69
76
  }, [state.open]);
70
- const gateUnmet = typeToConfirm !== void 0 && typed.trim() !== typeToConfirm;
77
+ const gateUnmet = typeToConfirm !== void 0 && !typedMatches(typed, typeToConfirm);
71
78
  return /* @__PURE__ */ jsxs(
72
79
  AlertDialog,
73
80
  {
@@ -104,6 +111,7 @@ function ConfirmActionDialog({
104
111
  }
105
112
 
106
113
  export {
114
+ typedMatches,
107
115
  ConfirmActionDialog
108
116
  };
109
- //# sourceMappingURL=chunk-LTLOZQPP.js.map
117
+ //# sourceMappingURL=chunk-MM7BPTVV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx"],"sourcesContent":["import type { ConfirmActionCopy } from \"../../../copy\";\nimport Alert from '@mui/material/Alert/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { type ReactNode } from 'react';\n\nimport { AlertDialog } from '../../data-display/AlertDialog';\nimport { OutlinedTextFieldSlim } from '../../form/Input/outlined/text-field-slim-outlined';\n\nimport type {\n ConfirmInitialFocus,\n ConfirmOptions,\n ConfirmTone,\n UseConfirmActionResult,\n} from './ConfirmAction.types';\n\nconst DEFAULT_TEST_ID = 'confirm-action';\n\n/**\n * The popup's body: the row being acted on, then what happens to it.\n *\n * The NAME is rendered in its own right rather than woven into the sentence, so\n * it is there whatever the caller wrote — \"the popup names the specific entity\"\n * is the one thing that must not depend on each call site remembering to\n * mention it. A body with neither a name nor a description would leave the\n * operator with only the title to decide on, so a neutral fallback covers that.\n */\nfunction confirmBody(\n description: ReactNode,\n copy: ConfirmActionCopy,\n entityName?: string,\n): ReactNode {\n if (!entityName) return description ?? copy.irreversible;\n return (\n <>\n <Typography component=\"span\" sx={{ fontWeight: 600, display: \"block\" }}>\n {entityName}\n </Typography>\n {description}\n </>\n );\n}\n\n/** Destructive dialogs open on Cancel; anything else opens on the confirm. */\nfunction resolveInitialFocus(\n tone: ConfirmTone,\n initialFocus?: ConfirmInitialFocus,\n): ConfirmInitialFocus {\n if (initialFocus) return initialFocus;\n return tone === 'destructive' ? 'cancel' : 'confirm';\n}\n\n/**\n * Whether what was typed is the word asked for — trimmed, and in any case.\n * The gate is a pause, not a spelling test: a phone's automatic capital C\n * (\"Confirmar\") or a held Caps Lock must not lock the act (FUT-3905).\n */\nexport function typedMatches(typed: string, expected: string): boolean {\n return typed.trim().toLocaleLowerCase('pt-BR') === expected.trim().toLocaleLowerCase('pt-BR');\n}\n\n/**\n * The type-to-confirm field. Rendered only when `typeToConfirm` is set, which\n * should be rare: it is the guard for actions with NO recovery path, where a\n * click is too cheap a gesture. Comparison ignores case and surrounding\n * whitespace ({@link typedMatches}): a phone capitalises the first letter, and\n * \"Confirmar\" must unlock what \"confirmar\" does (FUT-3905).\n */\nfunction TypeToConfirmField({\n expected,\n label,\n value,\n onChange,\n disabled,\n dataTestId,\n copy,\n}: {\n expected: string;\n label?: string;\n /** The words this prompt renders. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n value: string;\n onChange: (next: string) => void;\n disabled: boolean;\n dataTestId: string;\n}): React.ReactElement {\n return (\n <Stack spacing={1} sx={{ mt: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label ?? copy.typeToConfirm(expected)}\n </Typography>\n {/*\n * The outlined slim field, not MUI's `TextField` (FUT-3429): same\n * composition and DOM, but no `Select` branch, so a screen that can open\n * this popup no longer ships `Select`, `Menu`, `MenuList`, `NativeSelect`\n * and `List` for a box that only ever takes a word.\n */}\n <OutlinedTextFieldSlim\n size=\"small\"\n value={value}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n // On the INPUT rather than the wrapper: a test id on MUI's TextField\n // lands on the outer div, which is not the node a test can type into.\n inputProps={{\n 'aria-label': label ?? copy.typeToConfirm(expected),\n 'data-testid': `${dataTestId}-type-to-confirm`,\n // A word to copy, not prose: the phone keeps its hands off it.\n autoCapitalize: 'none',\n autoCorrect: 'off',\n spellCheck: false,\n }}\n />\n </Stack>\n );\n}\n\nexport interface ConfirmActionDialogProps extends ConfirmOptions {\n /** The fallback body when no entity is named. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n state: UseConfirmActionResult;\n}\n\n/**\n * The popup itself: an `AlertDialog` in its destructive skin, plus the two\n * things a bare AlertDialog has no opinion about — the failure the last attempt\n * produced (shown IN the dialog, which stays open, rather than closing over a\n * write that never landed) and the optional type-to-confirm gate.\n */\nexport function ConfirmActionDialog({\n state,\n title,\n description,\n entityName,\n confirmText,\n cancelText,\n typeToConfirm,\n typeToConfirmLabel,\n tone = 'destructive',\n initialFocus,\n dataTestId = DEFAULT_TEST_ID,\n copy,\n}: ConfirmActionDialogProps): React.ReactElement {\n const [typed, setTyped] = React.useState('');\n\n // Every fresh open starts from an empty field: carrying the previous answer\n // over would hand the next delete a pre-satisfied gate.\n React.useEffect(() => {\n if (state.open) setTyped('');\n }, [state.open]);\n\n const gateUnmet = typeToConfirm !== undefined && !typedMatches(typed, typeToConfirm);\n\n return (\n <AlertDialog\n open={state.open}\n variant={tone === 'destructive' ? 'destructive' : 'default'}\n title={title}\n description={confirmBody(description, copy, entityName)}\n confirmText={confirmText}\n // `copy.cancel` is the fallback, NOT `AlertDialog`'s own. The 6.3.0 copy\n // sweep deleted this component's `cancelText = 'Cancelar'` default and\n // put the word in `ConfirmActionCopy` — where nothing then read it, so\n // every confirmation that names no `cancelText` of its own fell through\n // to `AlertDialog`'s English `'Cancel'`, in a pt-BR dialog. That is the\n // precise failure the sweep exists to prevent, one layer down: a port\n // that is required, supplied, and ignored.\n cancelText={cancelText ?? copy.cancel}\n loading={state.pending}\n confirmDisabled={gateUnmet}\n initialFocus={resolveInitialFocus(tone, initialFocus)}\n onConfirm={state.confirm}\n onCancel={state.cancel}\n onClose={state.cancel}\n data-testid={dataTestId}\n >\n {state.error && (\n <Alert severity=\"error\" sx={{ mt: 1 }} data-testid={`${dataTestId}-error`}>\n {state.error}\n </Alert>\n )}\n {typeToConfirm !== undefined && (\n <TypeToConfirmField\n expected={typeToConfirm}\n label={typeToConfirmLabel}\n value={typed}\n onChange={setTyped}\n disabled={state.pending}\n dataTestId={dataTestId}\n copy={copy}\n />\n )}\n </AlertDialog>\n );\n}\n"],"mappings":";;;;;;;;AACA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,OAAO,WAA+B;AA8BlC,mBACE,KADF;AAlBJ,IAAM,kBAAkB;AAWxB,SAAS,YACP,aACA,MACA,YACW;AACX,MAAI,CAAC,WAAY,QAAO,eAAe,KAAK;AAC5C,SACE,iCACE;AAAA,wBAAC,cAAW,WAAU,QAAO,IAAI,EAAE,YAAY,KAAK,SAAS,QAAQ,GAClE,sBACH;AAAA,IACC;AAAA,KACH;AAEJ;AAGA,SAAS,oBACP,MACA,cACqB;AACrB,MAAI,aAAc,QAAO;AACzB,SAAO,SAAS,gBAAgB,WAAW;AAC7C;AAOO,SAAS,aAAa,OAAe,UAA2B;AACrE,SAAO,MAAM,KAAK,EAAE,kBAAkB,OAAO,MAAM,SAAS,KAAK,EAAE,kBAAkB,OAAO;AAC9F;AASA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASuB;AACrB,SACE,qBAAC,SAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,GAC7B;AAAA,wBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,mBAAS,KAAK,cAAc,QAAQ,GACvC;AAAA,IAOA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,QAGhD,YAAY;AAAA,UACV,cAAc,SAAS,KAAK,cAAc,QAAQ;AAAA,UAClD,eAAe,GAAG,UAAU;AAAA;AAAA,UAE5B,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,YAAY;AAAA,QACd;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAcO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAAiD;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAI3C,QAAM,UAAU,MAAM;AACpB,QAAI,MAAM,KAAM,UAAS,EAAE;AAAA,EAC7B,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,YAAY,kBAAkB,UAAa,CAAC,aAAa,OAAO,aAAa;AAEnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,SAAS,SAAS,gBAAgB,gBAAgB;AAAA,MAClD;AAAA,MACA,aAAa,YAAY,aAAa,MAAM,UAAU;AAAA,MACtD;AAAA,MAQA,YAAY,cAAc,KAAK;AAAA,MAC/B,SAAS,MAAM;AAAA,MACf,iBAAiB;AAAA,MACjB,cAAc,oBAAoB,MAAM,YAAY;AAAA,MACpD,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,MACf,eAAa;AAAA,MAEZ;AAAA,cAAM,SACL,oBAAC,SAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,EAAE,GAAG,eAAa,GAAG,UAAU,UAC9D,gBAAM,OACT;AAAA,QAED,kBAAkB,UACjB;AAAA,UAAC;AAAA;AAAA,YACC,UAAU;AAAA,YACV,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU,MAAM;AAAA,YAChB;AAAA,YACA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-FRAVVI4A.js";
16
16
  import {
17
17
  Calendar
18
- } from "./chunk-R53ZOW4B.js";
18
+ } from "./chunk-NDGA7ZE6.js";
19
19
 
20
20
  // src/components/form/DateRangePicker/DateRangePicker.tsx
21
21
  import Box from "@mui/material/Box/index.js";
@@ -181,4 +181,4 @@ export {
181
181
  DateRangePicker,
182
182
  DateRangePicker_default
183
183
  };
184
- //# sourceMappingURL=chunk-KHIUYLKY.js.map
184
+ //# sourceMappingURL=chunk-MNZ6MCOK.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-SUALMVL7.js";
7
7
  import {
8
8
  CalendarMonth
9
- } from "./chunk-AG3DY5TH.js";
9
+ } from "./chunk-HHPJXK4Z.js";
10
10
  import {
11
11
  rem,
12
12
  sxRem
@@ -87,4 +87,4 @@ export {
87
87
  Calendar,
88
88
  Calendar_default
89
89
  };
90
- //# sourceMappingURL=chunk-R53ZOW4B.js.map
90
+ //# sourceMappingURL=chunk-NDGA7ZE6.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  useRowConfirm
3
- } from "../chunk-KYTADPS2.js";
3
+ } from "../chunk-GRMBCJS6.js";
4
4
  import {
5
5
  useRemoveConfirm
6
- } from "../chunk-XGKUXYAD.js";
6
+ } from "../chunk-3Z3WIQ5M.js";
7
7
  import {
8
8
  rowActionsToMenuItems
9
9
  } from "../chunk-ZBXG6RVJ.js";
@@ -24,10 +24,10 @@ import {
24
24
  import "../chunk-WVML3ENZ.js";
25
25
  import "../chunk-AY5GKCH7.js";
26
26
  import "../chunk-XCBQXSTR.js";
27
- import "../chunk-Z7COWR4K.js";
28
- import "../chunk-QBH36OBQ.js";
29
- import "../chunk-K44FSPU7.js";
30
- import "../chunk-LTLOZQPP.js";
27
+ import "../chunk-5M2NWXN4.js";
28
+ import "../chunk-BWFUZ4N2.js";
29
+ import "../chunk-LBZEPWYK.js";
30
+ import "../chunk-MM7BPTVV.js";
31
31
  import "../chunk-EMYESBIT.js";
32
32
  import "../chunk-LZRVUOMU.js";
33
33
  import "../chunk-EEB66IVH.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-MBMZNSBP.js";
4
4
  import {
5
5
  DataViewsTableBase
6
- } from "../chunk-SFT4YN6O.js";
6
+ } from "../chunk-FCVPVEAS.js";
7
7
  import "../chunk-4HUSG5MR.js";
8
8
  import {
9
9
  DataViewsGrid
@@ -50,9 +50,9 @@ import "../chunk-33MMQHYU.js";
50
50
  import "../chunk-7D7CJRL7.js";
51
51
  import "../chunk-GCZJH4XL.js";
52
52
  import "../chunk-CBOB5AV6.js";
53
- import "../chunk-6J7RGNSF.js";
53
+ import "../chunk-7HA7UH7O.js";
54
54
  import "../chunk-LG52LMAM.js";
55
- import "../chunk-C7CIUDXZ.js";
55
+ import "../chunk-7JOLSD2W.js";
56
56
  import "../chunk-5M4TYFR3.js";
57
57
  import "../chunk-O36MIQIO.js";
58
58
  import "../chunk-M3DSPEZ3.js";
@@ -173,10 +173,10 @@ import "../chunk-PN4HVM43.js";
173
173
  import "../chunk-C3UKR3NT.js";
174
174
  import "../chunk-D6KL74KI.js";
175
175
  import "../chunk-XCBQXSTR.js";
176
- import "../chunk-Z7COWR4K.js";
177
- import "../chunk-QBH36OBQ.js";
178
- import "../chunk-K44FSPU7.js";
179
- import "../chunk-LTLOZQPP.js";
176
+ import "../chunk-5M2NWXN4.js";
177
+ import "../chunk-BWFUZ4N2.js";
178
+ import "../chunk-LBZEPWYK.js";
179
+ import "../chunk-MM7BPTVV.js";
180
180
  import "../chunk-EMYESBIT.js";
181
181
  import "../chunk-LZRVUOMU.js";
182
182
  import "../chunk-EEB66IVH.js";
@@ -1,16 +1,16 @@
1
1
  import "../chunk-XCBQXSTR.js";
2
2
  import {
3
3
  createConfirmButton
4
- } from "../chunk-Z7COWR4K.js";
4
+ } from "../chunk-5M2NWXN4.js";
5
5
  import {
6
6
  ConfirmAction
7
- } from "../chunk-QBH36OBQ.js";
7
+ } from "../chunk-BWFUZ4N2.js";
8
8
  import {
9
9
  withConfirmation
10
- } from "../chunk-K44FSPU7.js";
10
+ } from "../chunk-LBZEPWYK.js";
11
11
  import {
12
12
  ConfirmActionDialog
13
- } from "../chunk-LTLOZQPP.js";
13
+ } from "../chunk-MM7BPTVV.js";
14
14
  import {
15
15
  useConfirmAction
16
16
  } from "../chunk-EMYESBIT.js";
@@ -1,12 +1,12 @@
1
1
  import "../chunk-BO6S47KI.js";
2
2
  import {
3
3
  Calendar
4
- } from "../chunk-R53ZOW4B.js";
4
+ } from "../chunk-NDGA7ZE6.js";
5
5
  import "../chunk-2ZRZTGWP.js";
6
6
  import "../chunk-SUALMVL7.js";
7
- import "../chunk-AG3DY5TH.js";
8
- import "../chunk-6PU3JYVY.js";
9
- import "../chunk-H3AQQOTI.js";
7
+ import "../chunk-HHPJXK4Z.js";
8
+ import "../chunk-6DAIC2MG.js";
9
+ import "../chunk-HKGKQKQT.js";
10
10
  import "../chunk-E2Y7G4MP.js";
11
11
  import "../chunk-FFQ4NOJT.js";
12
12
  import "../chunk-TERT6TIS.js";
@@ -1,7 +1,7 @@
1
1
  import "../chunk-BN6POCYF.js";
2
2
  import {
3
3
  DateRangePicker
4
- } from "../chunk-KHIUYLKY.js";
4
+ } from "../chunk-MNZ6MCOK.js";
5
5
  import {
6
6
  DEFAULT_QUICK_RANGES,
7
7
  DEFAULT_QUICK_RANGE_LABELS,
@@ -16,12 +16,12 @@ import {
16
16
  } from "../chunk-NTO5DALI.js";
17
17
  import "../chunk-FRAVVI4A.js";
18
18
  import "../chunk-BO6S47KI.js";
19
- import "../chunk-R53ZOW4B.js";
19
+ import "../chunk-NDGA7ZE6.js";
20
20
  import "../chunk-2ZRZTGWP.js";
21
21
  import "../chunk-SUALMVL7.js";
22
- import "../chunk-AG3DY5TH.js";
23
- import "../chunk-6PU3JYVY.js";
24
- import "../chunk-H3AQQOTI.js";
22
+ import "../chunk-HHPJXK4Z.js";
23
+ import "../chunk-6DAIC2MG.js";
24
+ import "../chunk-HKGKQKQT.js";
25
25
  import "../chunk-E2Y7G4MP.js";
26
26
  import "../chunk-FFQ4NOJT.js";
27
27
  import "../chunk-TERT6TIS.js";
@@ -1,6 +1,12 @@
1
1
  import type { ConfirmActionCopy } from "../../../copy";
2
2
  import React from 'react';
3
3
  import type { ConfirmOptions, UseConfirmActionResult } from './ConfirmAction.types';
4
+ /**
5
+ * Whether what was typed is the word asked for — trimmed, and in any case.
6
+ * The gate is a pause, not a spelling test: a phone's automatic capital C
7
+ * ("Confirmar") or a held Caps Lock must not lock the act (FUT-3905).
8
+ */
9
+ export declare function typedMatches(typed: string, expected: string): boolean;
4
10
  export interface ConfirmActionDialogProps extends ConfirmOptions {
5
11
  /** The fallback body when no entity is named. REQUIRED — no default copy. */
6
12
  copy: ConfirmActionCopy;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmAction.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIvD,OAAO,KAAyB,MAAM,OAAO,CAAC;AAK9C,OAAO,KAAK,EAEV,cAAc,EAEd,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAyF/B,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,6EAA6E;IAC7E,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,IAAoB,EACpB,YAAY,EACZ,UAA4B,EAC5B,IAAI,GACL,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAoD/C"}
1
+ {"version":3,"file":"ConfirmAction.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIvD,OAAO,KAAyB,MAAM,OAAO,CAAC;AAK9C,OAAO,KAAK,EAEV,cAAc,EAEd,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAsC/B;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErE;AA0DD,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,6EAA6E;IAC7E,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,KAAK,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,IAAoB,EACpB,YAAY,EACZ,UAA4B,EAC5B,IAAI,GACL,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAoD/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarDay.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Calendar/CalendarDay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4EtD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAoC5C,CAAC"}
1
+ {"version":3,"file":"CalendarDay.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Calendar/CalendarDay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuFtD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAoC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarMonth.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Calendar/CalendarMonth.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsExD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA2ChD,CAAC"}
1
+ {"version":3,"file":"CalendarMonth.d.ts","sourceRoot":"","sources":["../../../../../src/components/form/Calendar/CalendarMonth.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA+ExD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA2ChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.78.2",
3
+ "version": "6.78.4",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -114,7 +114,8 @@ with `<ConfirmActionDialog state={…} />` or your own surface.
114
114
  - `description` should say whether the action can be undone. A soft delete goes
115
115
  to the recycle bin and comes back; a purge does not. Say which. Without one,
116
116
  the popup falls back to naming the affected row.
117
- - `typeToConfirm` requires the operator to type an exact string before the
117
+ - `typeToConfirm` requires the operator to type a string (any case, trimmed — a
118
+ phone's automatic capital must not lock it, FUT-3905) before the
118
119
  confirm enables. Reserve it for actions with **no** recovery path — a
119
120
  permanent purge, suspending a live store. Everywhere else it is friction that
120
121
  buys nothing.
@@ -128,7 +129,7 @@ with `<ConfirmActionDialog state={…} />` or your own surface.
128
129
  | `description` | `ReactNode` | derived from `entityName` | The consequence. |
129
130
  | `entityName` | `string` | — | The row being acted on, echoed into the body. |
130
131
  | `cancelText` | `string` | `Cancelar` | |
131
- | `typeToConfirm` | `string` | — | Gates the confirm until typed exactly. |
132
+ | `typeToConfirm` | `string` | — | Gates the confirm until typed (any case, trimmed). |
132
133
  | `typeToConfirmLabel` | `string` | derived | Label above the field. |
133
134
  | `tone` | `'destructive' \| 'default'` | `destructive` | Colour + default focus. |
134
135
  | `initialFocus` | `'confirm' \| 'cancel'` | `cancel` when destructive | |
@@ -50,11 +50,21 @@ function resolveInitialFocus(
50
50
  return tone === 'destructive' ? 'cancel' : 'confirm';
51
51
  }
52
52
 
53
+ /**
54
+ * Whether what was typed is the word asked for — trimmed, and in any case.
55
+ * The gate is a pause, not a spelling test: a phone's automatic capital C
56
+ * ("Confirmar") or a held Caps Lock must not lock the act (FUT-3905).
57
+ */
58
+ export function typedMatches(typed: string, expected: string): boolean {
59
+ return typed.trim().toLocaleLowerCase('pt-BR') === expected.trim().toLocaleLowerCase('pt-BR');
60
+ }
61
+
53
62
  /**
54
63
  * The type-to-confirm field. Rendered only when `typeToConfirm` is set, which
55
64
  * should be rare: it is the guard for actions with NO recovery path, where a
56
- * click is too cheap a gesture. Comparison is exact — trimmed of surrounding
57
- * whitespace only, so a trailing space from a paste does not read as a mismatch.
65
+ * click is too cheap a gesture. Comparison ignores case and surrounding
66
+ * whitespace ({@link typedMatches}): a phone capitalises the first letter, and
67
+ * "Confirmar" must unlock what "confirmar" does (FUT-3905).
58
68
  */
59
69
  function TypeToConfirmField({
60
70
  expected,
@@ -95,6 +105,10 @@ function TypeToConfirmField({
95
105
  inputProps={{
96
106
  'aria-label': label ?? copy.typeToConfirm(expected),
97
107
  'data-testid': `${dataTestId}-type-to-confirm`,
108
+ // A word to copy, not prose: the phone keeps its hands off it.
109
+ autoCapitalize: 'none',
110
+ autoCorrect: 'off',
111
+ spellCheck: false,
98
112
  }}
99
113
  />
100
114
  </Stack>
@@ -135,7 +149,7 @@ export function ConfirmActionDialog({
135
149
  if (state.open) setTyped('');
136
150
  }, [state.open]);
137
151
 
138
- const gateUnmet = typeToConfirm !== undefined && typed.trim() !== typeToConfirm;
152
+ const gateUnmet = typeToConfirm !== undefined && !typedMatches(typed, typeToConfirm);
139
153
 
140
154
  return (
141
155
  <AlertDialog
@@ -116,6 +116,13 @@ export interface CalendarProps {
116
116
  - Enforce `minRangeLength`/`maxRangeLength`. If invalid, ignore or snap (configurable via your handler).
117
117
  - Fire `onIntermediateRangeChange` as user hovers. Fire `onRangeChange` once both ends are chosen.
118
118
 
119
+ ### Width
120
+
121
+ - The day grid is fluid: seven `minmax(0, 1fr)` columns, each day a square that fills its column up to 40 design px.
122
+ - A month takes the room it is given, up to 304 design px (7 × 40 + 6 × 4). Side by side, months wrap rather than squeeze, at the same width as before.
123
+ - A custom `renderDay` element is the grid item, so it is held to its column: keep it within 40 design px or it overlaps the next day.
124
+ - So a one-month calendar fits a 320 bottom sheet and a 390 `Dialog` with no consumer CSS (FUT-3861). Pinned by the `FitsA320Sheet` and `FitsA390Dialog` stories in `DateRangePicker.test.stories.tsx`.
125
+
119
126
  ### Navigation
120
127
 
121
128
  - Header buttons move month (or year with modifier keys if desired).
@@ -7,7 +7,11 @@ import { rem, sxRem } from '../../../tokens/relative';
7
7
 
8
8
  import type { DayRenderArgs } from './Calendar.types';
9
9
 
10
- /** A day cell's edge, 40 design px through the theme's type scale. */
10
+ /**
11
+ * A day cell's LARGEST edge, 40 design px through the theme's type scale. The
12
+ * cell is a square that fills its grid column up to this size, so the month
13
+ * shrinks with its container instead of holding a fixed 304px floor (FUT-3861).
14
+ */
11
15
  const CELL_SIZE = sxRem(40);
12
16
 
13
17
  interface DayState extends DayRenderArgs {
@@ -62,8 +66,15 @@ const dayCellSx = (day: DayRenderArgs, visible: boolean): SxProps<Theme> => ({
62
66
  display: 'flex',
63
67
  alignItems: 'center',
64
68
  justifyContent: 'center',
69
+ // 40 is the size it ASKS for, so the month's intrinsic width stays 304 and a
70
+ // shrink-wrapping parent (the picker is inline-flex) still sizes to it; the
71
+ // column's `minmax(0, 1fr)` and this `maxWidth` let it give way below that.
65
72
  width: CELL_SIZE,
66
- height: CELL_SIZE,
73
+ maxWidth: '100%',
74
+ aspectRatio: '1 / 1',
75
+ justifySelf: 'center',
76
+ boxSizing: 'border-box',
77
+ padding: 0,
67
78
  border: 'none',
68
79
  borderRadius: 1,
69
80
  cursor: day.disabled ? 'not-allowed' : 'pointer',
@@ -16,7 +16,16 @@ import { CalendarDayCell } from './CalendarDayCell';
16
16
  /** The nav spacer's width and the weekday row's height, 32 design px through the type scale. */
17
17
  const SPACER_WIDTH = sxRem(32);
18
18
 
19
- const GRID_SX = { display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: 0.5 } as const;
19
+ // `minmax(0, 1fr)`, not `1fr`: a bare `1fr` keeps each column at least its
20
+ // content's width, which is what held the grid at 304px (FUT-3861).
21
+ const GRID_SX = { display: 'grid', gridTemplateColumns: 'repeat(7, minmax(0, 1fr))', gap: 0.5 } as const;
22
+
23
+ /**
24
+ * A month takes the room it is given, from nothing up to seven full cells and
25
+ * their gaps (7 × 40 + 6 × 4 design px). Months side by side keep a 280 basis,
26
+ * so a multi-month calendar still wraps rather than squeezing every month.
27
+ */
28
+ const MONTH_SX = { flex: `1 1 ${sxRem(280)}`, minWidth: 0, maxWidth: sxRem(304) } as const;
20
29
 
21
30
  // Only the outermost months carry arrows; the ones between get a spacer so their
22
31
  // titles stay centred.
@@ -112,7 +121,7 @@ export const CalendarMonth: FC<CalendarMonthProps> = ({
112
121
  January's 5th and February's. Without a per-month hook a test can only
113
122
  reach a day positionally, which is exactly what the flakiness gate
114
123
  refuses. Additive: `calendar-grid` below is unchanged. */
115
- <Box sx={{ minWidth: sxRem(280) }} data-testid={`calendar-month-${monthIndex}`}>
124
+ <Box sx={MONTH_SX} data-testid={`calendar-month-${monthIndex}`}>
116
125
  <MonthNavHeader
117
126
  title={title}
118
127
  showPrevious={monthIndex === 0}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Calendar/CalendarMonth.tsx"],"sourcesContent":["import ChevronLeft from '@mui/icons-material/ChevronLeft';\nimport ChevronRight from '@mui/icons-material/ChevronRight';\nimport Box from '@mui/material/Box/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { sxRem } from '../../../tokens/relative';\n\nimport { getMonthName } from './Calendar.dates';\nimport type { CalendarProps, MonthMatrix } from './Calendar.types';\nimport type { DayCellContext } from './CalendarDayCell';\nimport { CalendarDayCell } from './CalendarDayCell';\n\n/** The nav spacer's width and the weekday row's height, 32 design px through the type scale. */\nconst SPACER_WIDTH = sxRem(32);\n\nconst GRID_SX = { display: 'grid', gridTemplateColumns: 'repeat(7, 1fr)', gap: 0.5 } as const;\n\n// Only the outermost months carry arrows; the ones between get a spacer so their\n// titles stay centred.\nconst MonthNavHeader: FC<{\n title: React.ReactNode;\n showPrevious: boolean;\n showNext: boolean;\n onPreviousMonth: () => void;\n onNextMonth: () => void;\n}> = ({ title, showPrevious, showNext, onPreviousMonth, onNextMonth }) => (\n <Box\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 2 }}\n data-testid=\"calendar-header\"\n >\n {showPrevious && (\n <IconButton onClick={onPreviousMonth} size=\"small\" data-testid=\"calendar-prev-month\">\n <ChevronLeft />\n </IconButton>\n )}\n\n <Typography\n variant=\"h6\"\n component=\"h2\"\n sx={{ fontWeight: 'bold', flex: 1, textAlign: 'center' }}\n >\n {title}\n </Typography>\n\n {showNext && (\n <IconButton onClick={onNextMonth} size=\"small\" data-testid=\"calendar-next-month\">\n <ChevronRight />\n </IconButton>\n )}\n\n {!showPrevious && !showNext && <Box sx={{ width: SPACER_WIDTH }} />}\n </Box>\n);\n\nconst WeekdayHeader: FC<{ weekdayNames: string[] }> = ({ weekdayNames }) => (\n <Box sx={{ ...GRID_SX, mb: 1 }}>\n {weekdayNames.map((weekday, index) => (\n <Box\n // Narrow weekday names repeat within a week ('S', 'T'), so position is\n // the only stable key here.\n key={`weekday-${index}`}\n role=\"columnheader\"\n data-testid={`calendar-weekday-${index}`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: SPACER_WIDTH,\n fontSize: sxRem(14),\n fontWeight: 'bold',\n color: 'text.secondary',\n }}\n >\n {weekday}\n </Box>\n ))}\n </Box>\n);\n\nexport interface CalendarMonthProps {\n matrix: MonthMatrix;\n monthIndex: number;\n monthsToShow: number;\n locale: string;\n weekdayNames: string[];\n renderHeader?: CalendarProps['renderHeader'];\n onPreviousMonth: () => void;\n onNextMonth: () => void;\n dayContext: DayCellContext;\n}\n\nexport const CalendarMonth: FC<CalendarMonthProps> = ({\n matrix,\n monthIndex,\n monthsToShow,\n locale,\n weekdayNames,\n renderHeader,\n onPreviousMonth,\n onNextMonth,\n dayContext,\n}) => {\n const monthName = getMonthName(matrix.month, matrix.year, locale);\n const title = renderHeader ? renderHeader({ month: matrix.month, year: matrix.year }) : monthName;\n\n return (\n /* The month is addressable by its position, because in a multi-month\n calendar every day number appears once PER MONTH — `calendar-date-5` is\n January's 5th and February's. Without a per-month hook a test can only\n reach a day positionally, which is exactly what the flakiness gate\n refuses. Additive: `calendar-grid` below is unchanged. */\n <Box sx={{ minWidth: sxRem(280) }} data-testid={`calendar-month-${monthIndex}`}>\n <MonthNavHeader\n title={title}\n showPrevious={monthIndex === 0}\n showNext={monthIndex === monthsToShow - 1}\n onPreviousMonth={onPreviousMonth}\n onNextMonth={onNextMonth}\n />\n\n <WeekdayHeader weekdayNames={weekdayNames} />\n\n <Box\n role=\"grid\"\n aria-labelledby={`month-${monthIndex}`}\n data-testid=\"calendar-grid\"\n sx={GRID_SX}\n >\n {matrix.weeks.flat().map((day) => (\n <CalendarDayCell key={day.key} day={day} {...dayContext} />\n ))}\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,iBAAiB;AACxB,OAAO,kBAAkB;AACzB,OAAO,SAAS;AAChB,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AAyBrB,SAMM,KANN;AAbF,IAAM,eAAe,MAAM,EAAE;AAE7B,IAAM,UAAU,EAAE,SAAS,QAAQ,qBAAqB,kBAAkB,KAAK,IAAI;AAInF,IAAM,iBAMD,CAAC,EAAE,OAAO,cAAc,UAAU,iBAAiB,YAAY,MAClE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,IAAI,EAAE;AAAA,IACpF,eAAY;AAAA,IAEX;AAAA,sBACC,oBAAC,cAAW,SAAS,iBAAiB,MAAK,SAAQ,eAAY,uBAC7D,8BAAC,eAAY,GACf;AAAA,MAGF;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,IAAI,EAAE,YAAY,QAAQ,MAAM,GAAG,WAAW,SAAS;AAAA,UAEtD;AAAA;AAAA,MACH;AAAA,MAEC,YACC,oBAAC,cAAW,SAAS,aAAa,MAAK,SAAQ,eAAY,uBACzD,8BAAC,gBAAa,GAChB;AAAA,MAGD,CAAC,gBAAgB,CAAC,YAAY,oBAAC,OAAI,IAAI,EAAE,OAAO,aAAa,GAAG;AAAA;AAAA;AACnE;AAGF,IAAM,gBAAgD,CAAC,EAAE,aAAa,MACpE,oBAAC,OAAI,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,GAC1B,uBAAa,IAAI,CAAC,SAAS,UAC1B;AAAA,EAAC;AAAA;AAAA,IAIC,MAAK;AAAA,IACL,eAAa,oBAAoB,KAAK;AAAA,IACtC,IAAI;AAAA,MACF,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU,MAAM,EAAE;AAAA,MAClB,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAEC;AAAA;AAAA,EAbI,WAAW,KAAK;AAcvB,CACD,GACH;AAeK,IAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,YAAY,aAAa,OAAO,OAAO,OAAO,MAAM,MAAM;AAChE,QAAM,QAAQ,eAAe,aAAa,EAAE,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,CAAC,IAAI;AAExF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,qBAAC,OAAI,IAAI,EAAE,UAAU,MAAM,GAAG,EAAE,GAAG,eAAa,kBAAkB,UAAU,IAC1E;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,cAAc,eAAe;AAAA,UAC7B,UAAU,eAAe,eAAe;AAAA,UACxC;AAAA,UACA;AAAA;AAAA,MACF;AAAA,MAEA,oBAAC,iBAAc,cAA4B;AAAA,MAE3C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,mBAAiB,SAAS,UAAU;AAAA,UACpC,eAAY;AAAA,UACZ,IAAI;AAAA,UAEH,iBAAO,MAAM,KAAK,EAAE,IAAI,CAAC,QACxB,oBAAC,mBAA8B,KAAW,GAAG,cAAvB,IAAI,GAA+B,CAC1D;AAAA;AAAA,MACH;AAAA,OACF;AAAA;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Calendar/CalendarDay.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { rem, sxRem } from '../../../tokens/relative';\n\nimport type { DayRenderArgs } from './Calendar.types';\n\n/** A day cell's edge, 40 design px through the theme's type scale. */\nconst CELL_SIZE = sxRem(40);\n\ninterface DayState extends DayRenderArgs {\n outside: boolean;\n focused: boolean;\n}\n\n// Order matters: these land on the element in the order listed.\nconst CLASS_FLAGS: Array<[keyof DayState, string]> = [\n ['selected', 'selected'],\n ['inRange', 'in-range'],\n ['rangeStart', 'range-start'],\n ['rangeEnd', 'range-end'],\n ['disabled', 'disabled'],\n ['today', 'today'],\n ['outside', 'outside'],\n ['hovered', 'hovered'],\n ['focused', 'focused'],\n];\n\nconst dayClassNames = (state: DayState, custom?: string): string =>\n [\n 'calendar-day',\n ...CLASS_FLAGS.filter(([flag]) => state[flag]).map(([, name]) => name),\n ...(custom ? [custom] : []),\n ].join(' ');\n\nconst isEndpoint = (day: DayRenderArgs): boolean =>\n day.selected || day.rangeStart || day.rangeEnd;\n\nconst backgroundFor = (day: DayRenderArgs): string => {\n if (isEndpoint(day)) return 'primary.main';\n if (day.inRange || day.hovered) return 'primary.light';\n return 'transparent';\n};\n\nconst colorFor = (day: DayRenderArgs, visible: boolean): string => {\n if (isEndpoint(day)) return 'primary.contrastText';\n if (day.disabled) return 'text.disabled';\n // Outside days that are switched off still occupy the grid, they just have\n // nothing to show.\n if (!visible) return 'transparent';\n return 'text.primary';\n};\n\nconst hoverBackgroundFor = (day: DayRenderArgs): string | undefined => {\n if (day.disabled) return undefined;\n return day.selected ? 'primary.dark' : 'action.hover';\n};\n\nconst dayCellSx = (day: DayRenderArgs, visible: boolean): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: CELL_SIZE,\n height: CELL_SIZE,\n border: 'none',\n borderRadius: 1,\n cursor: day.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: backgroundFor(day),\n color: colorFor(day, visible),\n opacity: !day.inCurrentMonth && visible ? 0.5 : 1,\n fontWeight: day.today ? 'bold' : 'normal',\n '&:hover': {\n backgroundColor: hoverBackgroundFor(day),\n },\n '&:focus': {\n outline: (theme: Theme) => `${rem(theme, 2)} solid`,\n outlineColor: 'primary.main',\n outlineOffset: sxRem(1),\n },\n});\n\nexport interface CalendarDayProps {\n day: DayRenderArgs;\n focused: boolean;\n showOutsideDays: boolean;\n dayClassName?: (args: DayRenderArgs) => string;\n onSelect: (date: Date) => void;\n onHover: (date: Date) => void;\n onHoverEnd: () => void;\n}\n\nexport const CalendarDay: FC<CalendarDayProps> = ({\n day,\n focused,\n showOutsideDays,\n dayClassName,\n onSelect,\n onHover,\n onHoverEnd,\n}) => {\n const visible = day.inCurrentMonth || showOutsideDays;\n const state: DayState = { ...day, outside: !day.inCurrentMonth, focused };\n\n return (\n <Box\n component=\"button\"\n role=\"gridcell\"\n tabIndex={focused ? 0 : -1}\n aria-selected={day.selected}\n aria-disabled={day.disabled}\n aria-current={day.today ? 'date' : undefined}\n className={dayClassNames(state, dayClassName?.(day))}\n data-testid={`calendar-date-${day.date.getDate()}`}\n onClick={() => onSelect(day.date)}\n onMouseEnter={() => onHover(day.date)}\n onMouseLeave={onHoverEnd}\n sx={dayCellSx(day, visible)}\n >\n {day.selected && (\n <Box component=\"span\" data-testid=\"calendar-selected-date\" sx={{ display: 'none' }} />\n )}\n {day.today && (\n <Box component=\"span\" data-testid=\"calendar-today\" sx={{ display: 'none' }} />\n )}\n {visible ? day.date.getDate() : ''}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/ConfirmAction/ConfirmAction.parts.tsx"],"sourcesContent":["import type { ConfirmActionCopy } from \"../../../copy\";\nimport Alert from '@mui/material/Alert/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { type ReactNode } from 'react';\n\nimport { AlertDialog } from '../../data-display/AlertDialog';\nimport { OutlinedTextFieldSlim } from '../../form/Input/outlined/text-field-slim-outlined';\n\nimport type {\n ConfirmInitialFocus,\n ConfirmOptions,\n ConfirmTone,\n UseConfirmActionResult,\n} from './ConfirmAction.types';\n\nconst DEFAULT_TEST_ID = 'confirm-action';\n\n/**\n * The popup's body: the row being acted on, then what happens to it.\n *\n * The NAME is rendered in its own right rather than woven into the sentence, so\n * it is there whatever the caller wrote — \"the popup names the specific entity\"\n * is the one thing that must not depend on each call site remembering to\n * mention it. A body with neither a name nor a description would leave the\n * operator with only the title to decide on, so a neutral fallback covers that.\n */\nfunction confirmBody(\n description: ReactNode,\n copy: ConfirmActionCopy,\n entityName?: string,\n): ReactNode {\n if (!entityName) return description ?? copy.irreversible;\n return (\n <>\n <Typography component=\"span\" sx={{ fontWeight: 600, display: \"block\" }}>\n {entityName}\n </Typography>\n {description}\n </>\n );\n}\n\n/** Destructive dialogs open on Cancel; anything else opens on the confirm. */\nfunction resolveInitialFocus(\n tone: ConfirmTone,\n initialFocus?: ConfirmInitialFocus,\n): ConfirmInitialFocus {\n if (initialFocus) return initialFocus;\n return tone === 'destructive' ? 'cancel' : 'confirm';\n}\n\n/**\n * The type-to-confirm field. Rendered only when `typeToConfirm` is set, which\n * should be rare: it is the guard for actions with NO recovery path, where a\n * click is too cheap a gesture. Comparison is exact — trimmed of surrounding\n * whitespace only, so a trailing space from a paste does not read as a mismatch.\n */\nfunction TypeToConfirmField({\n expected,\n label,\n value,\n onChange,\n disabled,\n dataTestId,\n copy,\n}: {\n expected: string;\n label?: string;\n /** The words this prompt renders. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n value: string;\n onChange: (next: string) => void;\n disabled: boolean;\n dataTestId: string;\n}): React.ReactElement {\n return (\n <Stack spacing={1} sx={{ mt: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label ?? copy.typeToConfirm(expected)}\n </Typography>\n {/*\n * The outlined slim field, not MUI's `TextField` (FUT-3429): same\n * composition and DOM, but no `Select` branch, so a screen that can open\n * this popup no longer ships `Select`, `Menu`, `MenuList`, `NativeSelect`\n * and `List` for a box that only ever takes a word.\n */}\n <OutlinedTextFieldSlim\n size=\"small\"\n value={value}\n disabled={disabled}\n onChange={(event) => onChange(event.target.value)}\n // On the INPUT rather than the wrapper: a test id on MUI's TextField\n // lands on the outer div, which is not the node a test can type into.\n inputProps={{\n 'aria-label': label ?? copy.typeToConfirm(expected),\n 'data-testid': `${dataTestId}-type-to-confirm`,\n }}\n />\n </Stack>\n );\n}\n\nexport interface ConfirmActionDialogProps extends ConfirmOptions {\n /** The fallback body when no entity is named. REQUIRED — no default copy. */\n copy: ConfirmActionCopy;\n state: UseConfirmActionResult;\n}\n\n/**\n * The popup itself: an `AlertDialog` in its destructive skin, plus the two\n * things a bare AlertDialog has no opinion about — the failure the last attempt\n * produced (shown IN the dialog, which stays open, rather than closing over a\n * write that never landed) and the optional type-to-confirm gate.\n */\nexport function ConfirmActionDialog({\n state,\n title,\n description,\n entityName,\n confirmText,\n cancelText,\n typeToConfirm,\n typeToConfirmLabel,\n tone = 'destructive',\n initialFocus,\n dataTestId = DEFAULT_TEST_ID,\n copy,\n}: ConfirmActionDialogProps): React.ReactElement {\n const [typed, setTyped] = React.useState('');\n\n // Every fresh open starts from an empty field: carrying the previous answer\n // over would hand the next delete a pre-satisfied gate.\n React.useEffect(() => {\n if (state.open) setTyped('');\n }, [state.open]);\n\n const gateUnmet = typeToConfirm !== undefined && typed.trim() !== typeToConfirm;\n\n return (\n <AlertDialog\n open={state.open}\n variant={tone === 'destructive' ? 'destructive' : 'default'}\n title={title}\n description={confirmBody(description, copy, entityName)}\n confirmText={confirmText}\n // `copy.cancel` is the fallback, NOT `AlertDialog`'s own. The 6.3.0 copy\n // sweep deleted this component's `cancelText = 'Cancelar'` default and\n // put the word in `ConfirmActionCopy` — where nothing then read it, so\n // every confirmation that names no `cancelText` of its own fell through\n // to `AlertDialog`'s English `'Cancel'`, in a pt-BR dialog. That is the\n // precise failure the sweep exists to prevent, one layer down: a port\n // that is required, supplied, and ignored.\n cancelText={cancelText ?? copy.cancel}\n loading={state.pending}\n confirmDisabled={gateUnmet}\n initialFocus={resolveInitialFocus(tone, initialFocus)}\n onConfirm={state.confirm}\n onCancel={state.cancel}\n onClose={state.cancel}\n data-testid={dataTestId}\n >\n {state.error && (\n <Alert severity=\"error\" sx={{ mt: 1 }} data-testid={`${dataTestId}-error`}>\n {state.error}\n </Alert>\n )}\n {typeToConfirm !== undefined && (\n <TypeToConfirmField\n expected={typeToConfirm}\n label={typeToConfirmLabel}\n value={typed}\n onChange={setTyped}\n disabled={state.pending}\n dataTestId={dataTestId}\n copy={copy}\n />\n )}\n </AlertDialog>\n );\n}\n"],"mappings":";;;;;;;;AACA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,OAAO,WAA+B;AA8BlC,mBACE,KADF;AAlBJ,IAAM,kBAAkB;AAWxB,SAAS,YACP,aACA,MACA,YACW;AACX,MAAI,CAAC,WAAY,QAAO,eAAe,KAAK;AAC5C,SACE,iCACE;AAAA,wBAAC,cAAW,WAAU,QAAO,IAAI,EAAE,YAAY,KAAK,SAAS,QAAQ,GAClE,sBACH;AAAA,IACC;AAAA,KACH;AAEJ;AAGA,SAAS,oBACP,MACA,cACqB;AACrB,MAAI,aAAc,QAAO;AACzB,SAAO,SAAS,gBAAgB,WAAW;AAC7C;AAQA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASuB;AACrB,SACE,qBAAC,SAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,GAC7B;AAAA,wBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,mBAAS,KAAK,cAAc,QAAQ,GACvC;AAAA,IAOA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,QAGhD,YAAY;AAAA,UACV,cAAc,SAAS,KAAK,cAAc,QAAQ;AAAA,UAClD,eAAe,GAAG,UAAU;AAAA,QAC9B;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAcO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAAiD;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,EAAE;AAI3C,QAAM,UAAU,MAAM;AACpB,QAAI,MAAM,KAAM,UAAS,EAAE;AAAA,EAC7B,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,QAAM,YAAY,kBAAkB,UAAa,MAAM,KAAK,MAAM;AAElE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,SAAS,SAAS,gBAAgB,gBAAgB;AAAA,MAClD;AAAA,MACA,aAAa,YAAY,aAAa,MAAM,UAAU;AAAA,MACtD;AAAA,MAQA,YAAY,cAAc,KAAK;AAAA,MAC/B,SAAS,MAAM;AAAA,MACf,iBAAiB;AAAA,MACjB,cAAc,oBAAoB,MAAM,YAAY;AAAA,MACpD,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,MACf,eAAa;AAAA,MAEZ;AAAA,cAAM,SACL,oBAAC,SAAM,UAAS,SAAQ,IAAI,EAAE,IAAI,EAAE,GAAG,eAAa,GAAG,UAAU,UAC9D,gBAAM,OACT;AAAA,QAED,kBAAkB,UACjB;AAAA,UAAC;AAAA;AAAA,YACC,UAAU;AAAA,YACV,OAAO;AAAA,YACP,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU,MAAM;AAAA,YAChB;AAAA,YACA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}