@12-apps/ui 6.83.0 → 6.84.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 (240) hide show
  1. package/dist/_internal/components/data-display/Avatar/Avatar.js +3 -3
  2. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  3. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
  4. package/dist/_internal/components/data-display/Carousel/Carousel.js +5 -5
  5. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +2 -2
  6. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  7. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  8. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  9. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  10. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  11. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +20 -19
  12. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +21 -20
  13. package/dist/_internal/components/data-display/DataViews/base-list-card.js +2 -2
  14. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +7 -3
  15. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +2 -2
  16. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +1 -1
  17. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +5 -4
  18. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +3 -3
  19. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +17 -16
  20. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +7 -6
  21. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -4
  22. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +6 -5
  23. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -3
  24. package/dist/_internal/components/data-display/DataViews/data-views-range-reset.js +9 -0
  25. package/dist/_internal/components/data-display/DataViews/data-views-range-reset.js.map +1 -0
  26. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +4 -4
  27. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/data-views-writers.js +3 -1
  29. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +2 -2
  30. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +8 -8
  31. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +7 -7
  32. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
  33. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
  34. package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +3 -3
  35. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
  36. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +3 -3
  37. package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +2 -2
  38. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +6 -6
  39. package/dist/_internal/components/data-display/index.js +29 -29
  40. package/dist/_internal/components/form/CepField/CepField.js +1 -1
  41. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +3 -3
  42. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
  43. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +2 -2
  44. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +3 -3
  45. package/dist/_internal/components/form/InputOTP/InputOTP.hooks.js +1 -1
  46. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  47. package/dist/_internal/components/form/index.js +8 -8
  48. package/dist/_internal/components/form/total-form/Fields/CepField.js +2 -2
  49. package/dist/_internal/components/form/total-form/Fields/TextField.js +1 -1
  50. package/dist/_internal/components/form/total-form/Fields/index.js +4 -4
  51. package/dist/_internal/components/index.js +37 -37
  52. package/dist/_internal/en-US.data-display.js +1 -1
  53. package/dist/_internal/pt-BR.data-display.js +1 -1
  54. package/dist/_internal/user-avatar/user-avatar.js +4 -4
  55. package/dist/charts.js +11 -11
  56. package/dist/{chunk-HF2WLLGH.js → chunk-2XI4R6UO.js} +2 -2
  57. package/dist/{chunk-HF2WLLGH.js.map → chunk-2XI4R6UO.js.map} +1 -1
  58. package/dist/{chunk-GYFKIPR2.js → chunk-4PUCT3RX.js} +2 -2
  59. package/dist/{chunk-JQSF3CUR.js → chunk-6HMDUUVJ.js} +2 -1
  60. package/dist/{chunk-JQSF3CUR.js.map → chunk-6HMDUUVJ.js.map} +1 -1
  61. package/dist/{chunk-EBEMNKTK.js → chunk-6ONQTXFM.js} +7 -4
  62. package/dist/chunk-6ONQTXFM.js.map +1 -0
  63. package/dist/{chunk-C2I7NQC4.js → chunk-74KCGLOU.js} +2 -2
  64. package/dist/{chunk-4J62V5OE.js → chunk-7YJYIMWP.js} +2 -2
  65. package/dist/{chunk-MT74NRLY.js → chunk-C2OX3C7L.js} +4 -4
  66. package/dist/{chunk-62XVHRTX.js → chunk-D7SOXI2K.js} +70 -21
  67. package/dist/chunk-D7SOXI2K.js.map +1 -0
  68. package/dist/{chunk-BO6IMK5P.js → chunk-DPHSJLMN.js} +2 -2
  69. package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
  70. package/dist/{chunk-4OTJ66ID.js → chunk-EXTES7LP.js} +15 -4
  71. package/dist/chunk-EXTES7LP.js.map +1 -0
  72. package/dist/{chunk-4IVEBBF6.js → chunk-FYJDI5BW.js} +4 -3
  73. package/dist/{chunk-4IVEBBF6.js.map → chunk-FYJDI5BW.js.map} +1 -1
  74. package/dist/{chunk-A5U7HEBI.js → chunk-GNDIVKWF.js} +4 -2
  75. package/dist/chunk-GNDIVKWF.js.map +1 -0
  76. package/dist/{chunk-XKPV52CG.js → chunk-GPTNZ57P.js} +2 -2
  77. package/dist/{chunk-ZGAOA7LN.js → chunk-H56CRMCM.js} +6 -6
  78. package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
  79. package/dist/{chunk-JK3QB7MO.js → chunk-I54LHHZS.js} +2 -2
  80. package/dist/{chunk-GLAAX5JJ.js → chunk-I5NTADBO.js} +2 -1
  81. package/dist/{chunk-GLAAX5JJ.js.map → chunk-I5NTADBO.js.map} +1 -1
  82. package/dist/{chunk-LCGK22QQ.js → chunk-IKXCAYFH.js} +5 -5
  83. package/dist/{chunk-MLGAGZJ3.js → chunk-ILNAPS44.js} +8 -7
  84. package/dist/chunk-ILNAPS44.js.map +1 -0
  85. package/dist/{chunk-D22FGMGU.js → chunk-JIAIPOEV.js} +2 -2
  86. package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
  87. package/dist/{chunk-76IHYINM.js → chunk-KEBYZ2MO.js} +16 -9
  88. package/dist/chunk-KEBYZ2MO.js.map +1 -0
  89. package/dist/{chunk-JJNY5MZL.js → chunk-KG7OTJ26.js} +2 -2
  90. package/dist/{chunk-2ZMR3TZU.js → chunk-L6UTYEUS.js} +3 -3
  91. package/dist/{chunk-WWB43LWU.js → chunk-LOGSJH2Q.js} +2 -2
  92. package/dist/{chunk-YJPBNIEM.js → chunk-MGFTHOPG.js} +2 -2
  93. package/dist/{chunk-RB3R6BJL.js → chunk-O4G7QKDU.js} +2 -2
  94. package/dist/{chunk-DYHOBKPU.js → chunk-OA6T2ME3.js} +5 -5
  95. package/dist/{chunk-U5FOJBLG.js → chunk-OOLES6RR.js} +14 -2
  96. package/dist/chunk-OOLES6RR.js.map +1 -0
  97. package/dist/{chunk-YHKHHSZH.js → chunk-OQ554425.js} +3 -3
  98. package/dist/{chunk-54OJAOXC.js → chunk-PDSZN26U.js} +2 -2
  99. package/dist/{chunk-MNNIOQTQ.js → chunk-PGVGCDPD.js} +3 -3
  100. package/dist/{chunk-RDRXTH47.js → chunk-PWXDMP7G.js} +10 -6
  101. package/dist/chunk-PWXDMP7G.js.map +1 -0
  102. package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
  103. package/dist/{chunk-UETHX57J.js → chunk-R6L376KR.js} +21 -7
  104. package/dist/chunk-R6L376KR.js.map +1 -0
  105. package/dist/{chunk-SEUJNFOD.js → chunk-RLDTV5I2.js} +2 -2
  106. package/dist/{chunk-4UCXJYOO.js → chunk-RUQNKOSP.js} +4 -4
  107. package/dist/chunk-RUQNKOSP.js.map +1 -0
  108. package/dist/{chunk-7RG37FVT.js → chunk-RXKFPXVH.js} +29 -2
  109. package/dist/chunk-RXKFPXVH.js.map +1 -0
  110. package/dist/{chunk-KSJBFT4G.js → chunk-SGAHME6W.js} +3 -3
  111. package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
  112. package/dist/{chunk-D4LMRSY7.js → chunk-UIWVSZ6I.js} +2 -2
  113. package/dist/{chunk-GJOU26UW.js → chunk-V2UJEICC.js} +3 -3
  114. package/dist/chunk-V2UJEICC.js.map +1 -0
  115. package/dist/{chunk-XATRYJ4Q.js → chunk-VQBY73QH.js} +4 -4
  116. package/dist/{chunk-SYERREN5.js → chunk-W2JYXZC2.js} +4 -4
  117. package/dist/{chunk-XNLJ2Z7T.js → chunk-YC2QYRNE.js} +5 -3
  118. package/dist/chunk-YC2QYRNE.js.map +1 -0
  119. package/dist/chunk-YOPMXGHY.js +23 -0
  120. package/dist/chunk-YOPMXGHY.js.map +1 -0
  121. package/dist/{chunk-QK3XXPBA.js → chunk-YWJCMGTE.js} +2 -2
  122. package/dist/{chunk-UQ6SAIX7.js → chunk-Z47SYKRX.js} +2 -2
  123. package/dist/data-display/Avatar.js +3 -3
  124. package/dist/data-display/CardKit.js +3 -3
  125. package/dist/data-display/Carousel.js +5 -5
  126. package/dist/data-display/Chart.js +11 -11
  127. package/dist/data-display/DataGrid.js +2 -2
  128. package/dist/data-display/DataViews.js +25 -24
  129. package/dist/data-display/FleetMap.js +9 -9
  130. package/dist/data-display/MapPreview.js +6 -6
  131. package/dist/en-US.js +1 -1
  132. package/dist/form/CepField.js +1 -1
  133. package/dist/form/DateRangePicker.js +5 -5
  134. package/dist/form/InputOTP.js +2 -2
  135. package/dist/form/total-form.js +4 -4
  136. package/dist/locales.js +2 -2
  137. package/dist/pt-BR.js +1 -1
  138. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +6 -0
  139. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
  140. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +32 -5
  141. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
  142. package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts +6 -0
  143. package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
  144. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
  145. package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts +3 -1
  146. package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts.map +1 -1
  147. package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts +3 -1
  148. package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
  149. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  150. package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts +16 -0
  151. package/dist/types/components/data-display/DataViews/data-views-range-reset.d.ts.map +1 -0
  152. package/dist/types/components/data-display/DataViews/data-views-writers.d.ts +13 -0
  153. package/dist/types/components/data-display/DataViews/data-views-writers.d.ts.map +1 -1
  154. package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts +4 -0
  155. package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts.map +1 -1
  156. package/dist/types/components/form/CepField/CepField.d.ts +1 -1
  157. package/dist/types/components/form/CepField/CepField.d.ts.map +1 -1
  158. package/dist/types/components/form/CepField/CepField.types.d.ts +8 -0
  159. package/dist/types/components/form/CepField/CepField.types.d.ts.map +1 -1
  160. package/dist/types/components/form/InputOTP/InputOTP.d.ts.map +1 -1
  161. package/dist/types/components/form/InputOTP/InputOTP.hooks.d.ts.map +1 -1
  162. package/dist/types/components/form/total-form/Fields/CepField.d.ts +6 -1
  163. package/dist/types/components/form/total-form/Fields/CepField.d.ts.map +1 -1
  164. package/dist/types/components/form/total-form/Fields/TextField.d.ts +22 -1
  165. package/dist/types/components/form/total-form/Fields/TextField.d.ts.map +1 -1
  166. package/dist/types/components/form/total-form/Fields/index.d.ts +1 -1
  167. package/dist/types/components/form/total-form/Fields/index.d.ts.map +1 -1
  168. package/dist/types/components/form/total-form/index.d.ts +1 -1
  169. package/dist/types/components/form/total-form/index.d.ts.map +1 -1
  170. package/dist/types/en-US.data-display.d.ts.map +1 -1
  171. package/dist/types/pt-BR.data-display.d.ts.map +1 -1
  172. package/dist/user-avatar.js +4 -4
  173. package/package.json +1 -1
  174. package/src/components/data-display/DataViews/data-views-copy.ts +6 -0
  175. package/src/components/data-display/DataViews/data-views-day-input.tsx +134 -38
  176. package/src/components/data-display/DataViews/data-views-empty.tsx +1 -1
  177. package/src/components/data-display/DataViews/data-views-filter-panel.tsx +8 -2
  178. package/src/components/data-display/DataViews/data-views-grid-parts.tsx +3 -1
  179. package/src/components/data-display/DataViews/data-views-inline-bar.tsx +7 -0
  180. package/src/components/data-display/DataViews/data-views-more-filters.tsx +4 -1
  181. package/src/components/data-display/DataViews/data-views-range-pill.tsx +11 -3
  182. package/src/components/data-display/DataViews/data-views-range-reset.ts +34 -0
  183. package/src/components/data-display/DataViews/data-views-writers.ts +24 -1
  184. package/src/components/data-display/DataViews/use-data-views-state.ts +6 -1
  185. package/src/components/form/CepField/CepField.md +7 -2
  186. package/src/components/form/CepField/CepField.tsx +13 -2
  187. package/src/components/form/CepField/CepField.types.ts +8 -0
  188. package/src/components/form/InputOTP/InputOTP.hooks.ts +48 -9
  189. package/src/components/form/InputOTP/InputOTP.md +6 -1
  190. package/src/components/form/InputOTP/InputOTP.tsx +40 -1
  191. package/src/components/form/total-form/Fields/CepField.tsx +7 -0
  192. package/src/components/form/total-form/Fields/TextField.tsx +64 -1
  193. package/src/components/form/total-form/Fields/index.ts +1 -1
  194. package/src/components/form/total-form/index.ts +1 -1
  195. package/src/en-US.data-display.ts +1 -0
  196. package/src/pt-BR.data-display.ts +1 -0
  197. package/dist/chunk-4OTJ66ID.js.map +0 -1
  198. package/dist/chunk-4UCXJYOO.js.map +0 -1
  199. package/dist/chunk-62XVHRTX.js.map +0 -1
  200. package/dist/chunk-76IHYINM.js.map +0 -1
  201. package/dist/chunk-7RG37FVT.js.map +0 -1
  202. package/dist/chunk-A5U7HEBI.js.map +0 -1
  203. package/dist/chunk-EBEMNKTK.js.map +0 -1
  204. package/dist/chunk-GJOU26UW.js.map +0 -1
  205. package/dist/chunk-MLGAGZJ3.js.map +0 -1
  206. package/dist/chunk-RDRXTH47.js.map +0 -1
  207. package/dist/chunk-U5FOJBLG.js.map +0 -1
  208. package/dist/chunk-UETHX57J.js.map +0 -1
  209. package/dist/chunk-XNLJ2Z7T.js.map +0 -1
  210. /package/dist/{chunk-GYFKIPR2.js.map → chunk-4PUCT3RX.js.map} +0 -0
  211. /package/dist/{chunk-C2I7NQC4.js.map → chunk-74KCGLOU.js.map} +0 -0
  212. /package/dist/{chunk-4J62V5OE.js.map → chunk-7YJYIMWP.js.map} +0 -0
  213. /package/dist/{chunk-MT74NRLY.js.map → chunk-C2OX3C7L.js.map} +0 -0
  214. /package/dist/{chunk-BO6IMK5P.js.map → chunk-DPHSJLMN.js.map} +0 -0
  215. /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
  216. /package/dist/{chunk-XKPV52CG.js.map → chunk-GPTNZ57P.js.map} +0 -0
  217. /package/dist/{chunk-ZGAOA7LN.js.map → chunk-H56CRMCM.js.map} +0 -0
  218. /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
  219. /package/dist/{chunk-JK3QB7MO.js.map → chunk-I54LHHZS.js.map} +0 -0
  220. /package/dist/{chunk-LCGK22QQ.js.map → chunk-IKXCAYFH.js.map} +0 -0
  221. /package/dist/{chunk-D22FGMGU.js.map → chunk-JIAIPOEV.js.map} +0 -0
  222. /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
  223. /package/dist/{chunk-JJNY5MZL.js.map → chunk-KG7OTJ26.js.map} +0 -0
  224. /package/dist/{chunk-2ZMR3TZU.js.map → chunk-L6UTYEUS.js.map} +0 -0
  225. /package/dist/{chunk-WWB43LWU.js.map → chunk-LOGSJH2Q.js.map} +0 -0
  226. /package/dist/{chunk-YJPBNIEM.js.map → chunk-MGFTHOPG.js.map} +0 -0
  227. /package/dist/{chunk-RB3R6BJL.js.map → chunk-O4G7QKDU.js.map} +0 -0
  228. /package/dist/{chunk-DYHOBKPU.js.map → chunk-OA6T2ME3.js.map} +0 -0
  229. /package/dist/{chunk-YHKHHSZH.js.map → chunk-OQ554425.js.map} +0 -0
  230. /package/dist/{chunk-54OJAOXC.js.map → chunk-PDSZN26U.js.map} +0 -0
  231. /package/dist/{chunk-MNNIOQTQ.js.map → chunk-PGVGCDPD.js.map} +0 -0
  232. /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
  233. /package/dist/{chunk-SEUJNFOD.js.map → chunk-RLDTV5I2.js.map} +0 -0
  234. /package/dist/{chunk-KSJBFT4G.js.map → chunk-SGAHME6W.js.map} +0 -0
  235. /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
  236. /package/dist/{chunk-D4LMRSY7.js.map → chunk-UIWVSZ6I.js.map} +0 -0
  237. /package/dist/{chunk-XATRYJ4Q.js.map → chunk-VQBY73QH.js.map} +0 -0
  238. /package/dist/{chunk-SYERREN5.js.map → chunk-W2JYXZC2.js.map} +0 -0
  239. /package/dist/{chunk-QK3XXPBA.js.map → chunk-YWJCMGTE.js.map} +0 -0
  240. /package/dist/{chunk-UQ6SAIX7.js.map → chunk-Z47SYKRX.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-inline-bar.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The INLINE filter bar — the horizontal row of controls a grid renders instead\n * of the slide-in panel on a wide screen (`inlineFilters`): the compact keyword\n * box, one pill per facet, one pill per range, and \"Mais N\" for whatever had no\n * room.\n *\n * There is no \"Filtros ativos\" row beneath it. Listing every applied filter a\n * second time, under the controls already showing them, was the same\n * information twice — and put the ✕ that removes a filter somewhere other than\n * the control that applied it. Each pill carries its own.\n *\n * Split from `data-views-filter-panel` because they are two surfaces, not one:\n * the panel is a column of stacked fields, this is a row of pills, and the only\n * thing they share is the prop shape they are both driven by.\n */\nimport Box from \"@mui/material/Box/index.js\";\nimport { useState } from \"react\";\n\n\nimport { ClearAllControl, CloseSearchControl } from \"./data-views-bar-controls\";\nimport type { GridFilterPanelProps } from \"./data-views-filter-panel\";\nimport { MoreFilters } from \"./data-views-more-filters\";\nimport type { OverflowField, OverflowSplit } from \"./data-views-overflow\";\nimport { CollapsedSearch, InlineKeyword } from \"./data-views-search\";\nimport { PillControl } from \"./data-views-category-pill\";\nimport { isQuickActive } from \"./data-views-overflow\";\nimport { QuickChip } from \"./data-views-quick-chip\";\nimport { RangePill } from \"./data-views-range-pill\";\nimport type { QuickFilterConfig, RangeValue } from \"./data-views-types\";\n\n\n\n/* ── Inline (second-line) filter bar ─────────────────────────────────────── */\n\n/** The search, in whichever of its two forms the measurement asked for. */\nfunction SearchSlot({\n search,\n onSearchChange,\n collapsed,\n expanded,\n fill,\n onOpen,\n onEscape,\n testIdPrefix,\n}: {\n search: string;\n onSearchChange: (value: string) => void;\n collapsed: boolean;\n expanded: boolean;\n /** The box owns the cluster alone, so it may shrink below its usual floor. */\n fill: boolean;\n onOpen: () => void;\n onEscape: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n if (collapsed) {\n return (\n <CollapsedSearch active={search !== \"\"} onOpen={onOpen} testId={`${testIdPrefix}-search-all`} />\n );\n }\n return (\n <InlineKeyword\n value={search}\n onChange={onSearchChange}\n testId={`${testIdPrefix}-search-all`}\n autoFocus={expanded}\n onEscape={onEscape}\n fill={fill}\n />\n );\n}\n\n/** Props the inline bar needs (the slide-in panel's, minus its own chrome). */\ntype InlineFilterBarProps<T extends Record<string, unknown>> = Pick<\n GridFilterPanelProps<T>,\n | \"testIdPrefix\"\n | \"search\"\n | \"fields\"\n | \"rangeFields\"\n | \"pills\"\n | \"ranges\"\n | \"onSearchChange\"\n | \"onTogglePill\"\n | \"onChangeRange\"\n | \"onClearField\"\n | \"onClearAll\"\n> & {\n /** The measured degradation state, computed once in `GridShell`. */\n split: OverflowSplit<T>;\n};\n\n/**\n * One filter control on the bar: a multi-select pill or a min/max range. The\n * two are the same thing from the bar's point of view — a labelled control that\n * writes into the view state — so which one to build is decided here rather\n * than in the bar's own render.\n */\nfunction InlineControl<T extends Record<string, unknown>>({\n field,\n pills,\n ranges,\n onTogglePill,\n onChangeRange,\n onClearField,\n onToggleQuick,\n onOpenChange,\n testIdPrefix,\n}: {\n field: OverflowField<T>;\n onToggleQuick?: (quick: QuickFilterConfig) => void;\n onOpenChange?: (open: boolean) => void;\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onChangeRange: (fieldId: string, range: RangeValue) => void;\n onClearField: (fieldId: string) => void;\n testIdPrefix: string;\n}): React.JSX.Element | null {\n if (field.group === \"quick\" && field.quick) {\n const quick = field.quick;\n return (\n <QuickChip\n quick={quick}\n active={isQuickActive(quick, pills)}\n onToggle={() => onToggleQuick?.(quick)}\n testIdPrefix={testIdPrefix}\n />\n );\n }\n if (field.group === \"pill\" && field.pill) {\n return (\n <PillControl\n fieldId={field.id}\n pill={field.pill}\n selected={pills[field.id] ?? []}\n onTogglePill={onTogglePill}\n onClearField={onClearField}\n onOpenChange={onOpenChange}\n testIdPrefix={testIdPrefix}\n />\n );\n }\n if (field.group === \"range\" && field.range) {\n return (\n <RangePill\n field={field.range}\n value={ranges[field.id] ?? {}}\n onChange={(range) => onChangeRange(field.id, range)}\n onOpenChange={onOpenChange}\n testIdPrefix={testIdPrefix}\n />\n );\n }\n return null;\n}\n\n/**\n * WHICH OF THE SEARCH'S THREE STATES THE BAR IS IN.\n *\n * Resting, expanded-and-sharing, or expanded-and-owning-the-cluster. They were\n * one boolean until a phone showed why they are not:\n *\n * - `fill` — an expanded box drops its usual 200px floor and takes whatever the\n * cluster has. That floor is right for a box that lives on the row; it is\n * wrong for one expanded into a cluster the ladder sized for an icon, where\n * insisting on it made the row scroll sideways (154px of overhang at 320px,\n * 84px at 390px, 42px at 500px).\n * - `takesOver` — the narrower case, where shrinking has run out of road and\n * what is left would be too small to read. Only then do the filters stand\n * down. A large phone has room to share, and evicting them there cost the\n * operator their filters for nothing.\n *\n * Once CLICKED the box stays open until Escape or its ✕, so typing is never\n * interrupted by a re-measure.\n */\nfunction useSearchMode<T extends Record<string, unknown>>(\n split: OverflowSplit<T>,\n): {\n showBox: boolean;\n expanded: boolean;\n fill: boolean;\n takesOver: boolean;\n open: () => void;\n close: () => void;\n} {\n const [searchOpen, setSearchOpen] = useState(false);\n return {\n showBox: !split.searchCollapsed || searchOpen,\n expanded: searchOpen,\n fill: split.searchCollapsed && searchOpen,\n takesOver: searchOpen && split.searchTakeover,\n open: () => setSearchOpen(true),\n close: () => setSearchOpen(false),\n };\n}\n\n/**\n * The filter CONTROLS alone — search, the fields that fit, and \"Mais N\" for the\n * ones that don't — with no row chrome of its own, because it is rendered ON\n * the toolbar line rather than under it (`ContentToolbar`'s `leadingControls`).\n *\n * The measurement driving the collapse lives on the toolbar ROW, not here —\n * see the note on `split` below.\n */\nexport function InlineFilterControls<T extends Record<string, unknown>>({\n testIdPrefix,\n pills,\n ranges,\n search,\n onSearchChange,\n onTogglePill,\n onChangeRange,\n onClearField,\n split,\n onClearAll,\n activeFilterCount,\n onControlOpenChange,\n onToggleQuick,\n clearKey,\n}: Omit<InlineFilterBarProps<T>, \"fields\" | \"rangeFields\"> & {\n /** Changes on every clear-all; the \"Mais\" fields are keyed on it (FUT-4144). */\n clearKey?: number;\n /** Presses or releases a quick chip — see `QuickFilterConfig`. */\n onToggleQuick?: (quick: QuickFilterConfig) => void;\n /** How many filters are applied — decides whether \"Limpar\" is on the bar at all. */\n activeFilterCount: number;\n /** Reports a control opening/closing so the shell can freeze the measurement. */\n onControlOpenChange?: (open: boolean) => void;\n}): React.JSX.Element {\n // MEASURED, not breakpointed — and measured ONCE, in the shell, because the\n // toolbar around it needs the same answer to drop its labels. The measured\n // element is the whole toolbar ROW (see `GridToolbar`), not this cluster:\n // `RESERVED` prices the counter and Exibir/Exportar, so measuring only the\n // controls would charge for that furniture a second time and collapse the\n // ladder while the row still had hundreds of free pixels.\n const { inline, overflow, compactControls, clearAllHidden } = split;\n const { showBox, expanded, fill, takesOver, open, close } = useSearchMode(split);\n return (\n <Box\n data-testid={`${testIdPrefix}-inline-filters`}\n sx={{\n display: \"flex\",\n flexWrap: \"nowrap\",\n alignItems: \"center\",\n gap: 1,\n minWidth: 0,\n // No squeezing: if the estimate over-packs, the row must overflow (and\n // the next measure sheds a control), not shrink labels to an ellipsis.\n \"& > *\": { flexShrink: 0 },\n }}\n >\n <SearchSlot\n search={search}\n onSearchChange={onSearchChange}\n collapsed={!showBox}\n expanded={expanded}\n fill={fill}\n onOpen={open}\n onEscape={close}\n testIdPrefix={testIdPrefix}\n />\n {takesOver && <CloseSearchControl onClose={close} testIdPrefix={testIdPrefix} />}\n {!takesOver && (\n <FilterSlots\n inline={inline}\n overflow={overflow}\n pills={pills}\n ranges={ranges}\n onTogglePill={onTogglePill}\n onChangeRange={onChangeRange}\n onClearField={onClearField}\n onToggleQuick={onToggleQuick}\n onClearAll={onClearAll}\n onControlOpenChange={onControlOpenChange}\n activeFilterCount={activeFilterCount}\n compactControls={compactControls}\n clearAllHidden={clearAllHidden}\n testIdPrefix={testIdPrefix}\n clearKey={clearKey}\n />\n )}\n </Box>\n );\n}\n\n/**\n * Everything to the right of the search: the fields that fit, \"Mais N\" for the\n * ones that don't, and \"Limpar\". Split out of `InlineFilterControls` only to\n * keep that function inside the size gate — the three are one cluster and the\n * order they render in is the order they shed in.\n */\nfunction FilterSlots<T extends Record<string, unknown>>({\n inline,\n overflow,\n pills,\n ranges,\n onTogglePill,\n onChangeRange,\n onClearField,\n onToggleQuick,\n onClearAll,\n onControlOpenChange,\n activeFilterCount,\n compactControls,\n clearAllHidden,\n testIdPrefix,\n clearKey,\n}: {\n clearKey?: number;\n onToggleQuick?: (quick: QuickFilterConfig) => void;\n inline: OverflowField<T>[];\n overflow: OverflowField<T>[];\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onChangeRange: (fieldId: string, range: RangeValue) => void;\n onClearField: (fieldId: string) => void;\n onClearAll: () => void;\n onControlOpenChange?: (open: boolean) => void;\n activeFilterCount: number;\n compactControls: boolean;\n clearAllHidden: boolean;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <>\n {inline.map((field) => (\n <InlineControl\n key={field.id}\n field={field}\n onOpenChange={onControlOpenChange}\n pills={pills}\n ranges={ranges}\n onTogglePill={onTogglePill}\n onChangeRange={onChangeRange}\n onClearField={onClearField}\n onToggleQuick={onToggleQuick}\n testIdPrefix={testIdPrefix}\n />\n ))}\n <MoreFilters\n clearKey={clearKey}\n onOpenChange={onControlOpenChange}\n onClearAll={onClearAll}\n anyApplied={activeFilterCount > 0}\n compact={compactControls}\n fields={overflow}\n pills={pills}\n ranges={ranges}\n onTogglePill={onTogglePill}\n onChangeRange={onChangeRange}\n onToggleQuick={onToggleQuick}\n testIdPrefix={testIdPrefix}\n />\n {activeFilterCount > 0 && !clearAllHidden && (\n <ClearAllControl\n onClearAll={onClearAll}\n compact={compactControls}\n testIdPrefix={testIdPrefix}\n />\n )}\n </>\n );\n}\n\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
- import {
2
- buildChartContext
3
- } from "./chunk-TZC6KIK2.js";
4
1
  import {
5
2
  ChartLegendContent,
6
3
  ChartTooltipContent
7
4
  } from "./chunk-RIRTW5EU.js";
5
+ import {
6
+ buildChartContext
7
+ } from "./chunk-TZC6KIK2.js";
8
8
  import {
9
9
  uiInk
10
10
  } from "./chunk-XJAD6E3V.js";
@@ -318,4 +318,4 @@ function renderChartByType(props, theme) {
318
318
  export {
319
319
  renderChartByType
320
320
  };
321
- //# sourceMappingURL=chunk-6ATXOJVQ.js.map
321
+ //# sourceMappingURL=chunk-QADTI63U.js.map
@@ -6,6 +6,12 @@ var PATTERNS = {
6
6
  };
7
7
  var isAllowed = (variant, text) => (PATTERNS[variant] ?? /.*/).test(text);
8
8
  var padTo = (digits, length) => Array.from({ length }, (_, i) => digits[i] ?? "");
9
+ function firstSlotFill(variant, index, inputValue, current) {
10
+ if (variant !== "numeric" || index !== 0 || inputValue.length < 2) return null;
11
+ const overtype = inputValue.length === 2 && current !== "" && inputValue.includes(current);
12
+ return overtype ? "overtype" : "code";
13
+ }
14
+ var codeOfFill = (inputValue, current, length) => inputValue.length > length && current !== "" && inputValue.startsWith(current) ? inputValue.slice(1) : inputValue;
9
15
  var useOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
10
16
  const [digits, setDigits] = useState(() => padTo([], length));
11
17
  const inputRefs = useRef([]);
@@ -24,8 +30,19 @@ var useOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
24
30
  },
25
31
  [length, onChange, onComplete]
26
32
  );
33
+ const spread = useCallback(
34
+ (text) => {
35
+ const code = text.slice(0, length);
36
+ if (!code || !isAllowed(variant, code)) return;
37
+ setDigits(padTo(code.split(""), length));
38
+ publish(code);
39
+ },
40
+ [variant, length, publish]
41
+ );
27
42
  const handleInputChange = useCallback(
28
43
  (index, inputValue) => {
44
+ const fill = firstSlotFill(variant, index, inputValue, digits[0] ?? "");
45
+ if (fill) return fill === "code" ? spread(codeOfFill(inputValue, digits[0] ?? "", length)) : void 0;
29
46
  if (!isAllowed(variant, inputValue)) return;
30
47
  const next = [...digits];
31
48
  next[index] = inputValue.slice(-1);
@@ -35,7 +52,7 @@ var useOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
35
52
  focusSlot(index + 1);
36
53
  }
37
54
  },
38
- [variant, digits, length, publish, focusSlot]
55
+ [variant, digits, length, publish, focusSlot, spread]
39
56
  );
40
57
  const handleKeyDown = useCallback(
41
58
  (index, e) => {
@@ -51,12 +68,9 @@ var useOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
51
68
  const handlePaste = useCallback(
52
69
  (e) => {
53
70
  e.preventDefault();
54
- const pasted = e.clipboardData.getData("text").slice(0, length);
55
- if (!pasted || !isAllowed(variant, pasted)) return;
56
- setDigits(padTo(pasted.split(""), length));
57
- publish(pasted);
71
+ spread(e.clipboardData.getData("text"));
58
72
  },
59
- [variant, length, publish]
73
+ [spread]
60
74
  );
61
75
  return { digits, inputRefs, handleInputChange, handleKeyDown, handlePaste };
62
76
  };
@@ -64,4 +78,4 @@ var useOtpDigits = ({ variant, length, value, onChange, onComplete }) => {
64
78
  export {
65
79
  useOtpDigits
66
80
  };
67
- //# sourceMappingURL=chunk-UETHX57J.js.map
81
+ //# sourceMappingURL=chunk-R6L376KR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/InputOTP/InputOTP.hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\n\n/**\n * What each variant accepts. `masked` constrains nothing — it only changes what\n * is drawn — so it has no pattern here.\n */\nconst PATTERNS: Record<string, RegExp> = {\n numeric: /^\\d*$/,\n alphanumeric: /^[a-zA-Z0-9]*$/,\n};\n\n/** Whether `text` is something this variant will take. */\nconst isAllowed = (variant: string, text: string) => (PATTERNS[variant] ?? /.*/).test(text);\n\n/** The digit array is always `length` long, blank-padded on the right. */\nconst padTo = (digits: string[], length: number) =>\n Array.from({ length }, (_, i) => digits[i] ?? '');\n\n/**\n * What a change to the numeric FIRST slot is, now that its `maxLength` is the\n * code's length rather than 1 (FUT-4144).\n *\n * That slot carries `one-time-code`, and the phone's SMS fill (or a password\n * manager) writes the WHOLE code into it as one change, not a paste — kept to\n * one character, the code lost every digit but the last. So:\n *\n * - `overtype`: a keystroke into the already-filled slot (its old character\n * plus the new one). Ignored, exactly as `maxLength={1}` refused it before.\n * - `code`: anything else longer than one character, written in one go.\n * Spread across the slots like a paste.\n *\n * Every other slot and variant keeps `maxLength={1}` and never gets here.\n */\nfunction firstSlotFill(variant: string, index: number, inputValue: string, current: string) {\n if (variant !== 'numeric' || index !== 0 || inputValue.length < 2) return null;\n const overtype = inputValue.length === 2 && current !== '' && inputValue.includes(current);\n return overtype ? 'overtype' : 'code';\n}\n\n/**\n * The code inside a first-slot fill. A phone that INSERTS the SMS code at the\n * caret rather than replacing the slot leaves the digit already there in\n * front: `4` + `482913` arrives as `4482913`, which spread as-is would give\n * `448291`. Longer than the code and led by that digit: the digit is dropped.\n */\nconst codeOfFill = (inputValue: string, current: string, length: number): string =>\n inputValue.length > length && current !== '' && inputValue.startsWith(current) ? inputValue.slice(1) : inputValue;\n\ninterface OtpInput {\n variant: string;\n length: number;\n value: string;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n}\n\n/**\n * The digits, and the three ways they change: typing, the keys that move\n * between slots, and a paste into the first one.\n *\n * Focus moves as a consequence of entry, so the input refs live here with the\n * state that drives them.\n */\nexport const useOtpDigits = ({ variant, length, value, onChange, onComplete }: OtpInput) => {\n const [digits, setDigits] = useState<string[]>(() => padTo([], length));\n const inputRefs = useRef<(globalThis.HTMLInputElement | null)[]>([]);\n\n useEffect(() => {\n setDigits(padTo(value.split('').slice(0, length), length));\n }, [value, length]);\n\n const focusSlot = useCallback((index: number) => {\n inputRefs.current[index]?.focus();\n }, []);\n\n /** Publishes the joined value, and reports completion when every slot is full. */\n const publish = useCallback(\n (next: string) => {\n onChange?.(next);\n if (next.length === length) {\n onComplete?.(next);\n }\n },\n [length, onChange, onComplete],\n );\n\n /** Lays a whole code across the slots from the first: a paste, or an OS/SMS fill. */\n const spread = useCallback(\n (text: string) => {\n const code = text.slice(0, length);\n // An empty code is not a rejection, but it is nothing to apply either.\n if (!code || !isAllowed(variant, code)) return;\n\n setDigits(padTo(code.split(''), length));\n publish(code);\n },\n [variant, length, publish],\n );\n\n const handleInputChange = useCallback(\n (index: number, inputValue: string) => {\n const fill = firstSlotFill(variant, index, inputValue, digits[0] ?? '');\n if (fill) return fill === 'code' ? spread(codeOfFill(inputValue, digits[0] ?? '', length)) : undefined;\n if (!isAllowed(variant, inputValue)) return;\n\n const next = [...digits];\n next[index] = inputValue.slice(-1); // one character per slot\n setDigits(next);\n publish(next.join(''));\n\n if (inputValue && index < length - 1) {\n focusSlot(index + 1);\n }\n },\n [variant, digits, length, publish, focusSlot, spread],\n );\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent) => {\n // Backspace in an already-empty slot steps back rather than deleting.\n const back =\n (e.key === 'Backspace' && !digits[index]) || e.key === 'ArrowLeft';\n\n if (back && index > 0) {\n focusSlot(index - 1);\n } else if (e.key === 'ArrowRight' && index < length - 1) {\n focusSlot(index + 1);\n }\n },\n [digits, length, focusSlot],\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n e.preventDefault();\n spread(e.clipboardData.getData('text'));\n },\n [spread],\n );\n\n return { digits, inputRefs, handleInputChange, handleKeyDown, handlePaste };\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveMapCopy
3
- } from "./chunk-D4LMRSY7.js";
3
+ } from "./chunk-UIWVSZ6I.js";
4
4
  import {
5
5
  MAX_ZOOM,
6
6
  MIN_ZOOM
@@ -116,4 +116,4 @@ var MapControlBar = ({
116
116
  export {
117
117
  MapControlBar
118
118
  };
119
- //# sourceMappingURL=chunk-SEUJNFOD.js.map
119
+ //# sourceMappingURL=chunk-RLDTV5I2.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-ATJTGQYE.js";
4
4
  import {
5
5
  PanelRangeField
6
- } from "./chunk-76IHYINM.js";
6
+ } from "./chunk-KEBYZ2MO.js";
7
7
  import {
8
8
  useDataViewsCopy
9
9
  } from "./chunk-KHG57NAE.js";
@@ -114,7 +114,7 @@ function GridFilterPanel(props) {
114
114
  onClearAll: props.onClearAll,
115
115
  clearTestId: `${props.testIdPrefix}-clear-filters`,
116
116
  ariaLabel: copy.filters.panelTitle,
117
- children: /* @__PURE__ */ jsx(FilterControls, { ...props })
117
+ children: /* @__PURE__ */ jsx(FilterControls, { ...props }, props.clearKey)
118
118
  }
119
119
  );
120
120
  }
@@ -147,7 +147,7 @@ function FilterDialog({
147
147
  children: copy.filters.clearAllFilters
148
148
  }
149
149
  ) }),
150
- /* @__PURE__ */ jsx(FilterControls, { ...props })
150
+ /* @__PURE__ */ jsx(FilterControls, { ...props }, props.clearKey)
151
151
  ] }) })
152
152
  }
153
153
  );
@@ -157,4 +157,4 @@ export {
157
157
  GridFilterPanel,
158
158
  FilterDialog
159
159
  };
160
- //# sourceMappingURL=chunk-4UCXJYOO.js.map
160
+ //# sourceMappingURL=chunk-RUQNKOSP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-filter-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport Box from \"@mui/material/Box/index.js\";\nimport Link from \"@mui/material/Link/index.js\";\n\nimport { StackedModal, StackedModalContent } from \"../../feedback/StackedModal\";\nimport { TableFilter } from \"../../layout/TableFilter\";\n\nimport { PillControl } from \"./data-views-category-pill\";\nimport { PanelRangeField } from \"./data-views-range-pill\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport type {\n FilterFieldConfig,\n RangeFieldConfig,\n RangeValue,\n} from \"./data-views-types\";\nimport { sxRem } from \"../../../tokens/relative\";\n\n/* ── Filter panel ────────────────────────────────────────────────────────── */\n\nexport interface GridFilterPanelProps<T extends Record<string, unknown>> {\n testIdPrefix: string;\n search: string;\n fields: FilterFieldConfig<T>[];\n rangeFields: RangeFieldConfig<T>[];\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n onSearchChange: (value: string) => void;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onChangeRange: (fieldId: string, range: RangeValue) => void;\n onClearField: (fieldId: string) => void;\n onClearAll: () => void;\n /**\n * Changes on every clear-all, from any surface (`useClearFilters`). The\n * controls are keyed on it, so a clear also empties a field holding text the\n * filter never applied — a refused day under an open range (FUT-4144).\n */\n clearKey?: number;\n}\n\n/** One pill field: a compact multi-select for long lists, else a checkbox list. */\nfunction PillField<T extends Record<string, unknown>>({\n field,\n selected,\n testIdPrefix,\n onTogglePill,\n onClearField,\n}: {\n field: FilterFieldConfig<T>;\n selected: string[];\n testIdPrefix: string;\n onTogglePill: (fieldId: string, value: string, checked: boolean) => void;\n onClearField: (fieldId: string) => void;\n}): React.JSX.Element {\n const testId = `${testIdPrefix}-filter-${field.id}`;\n // `searchEnabled` forces the searchable multi-select; a plain `multiselect`\n // keeps the auto \"search only when the list is long\" rule. `category` is the\n // hierarchical tree — see PillControl.\n if (field.searchEnabled || field.control === \"multiselect\" || field.control === \"category\") {\n return (\n <PillControl\n fieldId={field.id}\n pill={field}\n selected={selected}\n onTogglePill={onTogglePill}\n onClearField={onClearField}\n testIdPrefix={testIdPrefix}\n layout=\"stacked\"\n />\n );\n }\n return (\n <TableFilter.CheckboxField\n label={field.label}\n options={field.options}\n selected={new Set(selected)}\n onToggle={(value, checked) => onTogglePill(field.id, value, checked)}\n testId={testId}\n />\n );\n}\n\n/** The filter controls (keyword + pill facets + numeric ranges), surface-agnostic. */\nfunction FilterControls<T extends Record<string, unknown>>({\n testIdPrefix,\n search,\n fields,\n rangeFields,\n pills,\n ranges,\n onSearchChange,\n onTogglePill,\n onChangeRange,\n onClearField,\n}: Omit<GridFilterPanelProps<T>, \"onClearAll\">): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <>\n <TableFilter.Keyword\n value={search}\n onChange={onSearchChange}\n label={copy.search.allColumnsLabel}\n placeholder={copy.search.keywordPlaceholder}\n testId={`${testIdPrefix}-search-all`}\n />\n {(fields.length > 0 || rangeFields.length > 0) && (\n <TableFilter.Section title={copy.filters.panelTitle}>\n {fields.map((field) => (\n <PillField\n key={field.id}\n field={field}\n selected={pills[field.id] ?? []}\n testIdPrefix={testIdPrefix}\n onTogglePill={onTogglePill}\n onClearField={onClearField}\n />\n ))}\n {rangeFields.map((field) => (\n <PanelRangeField\n key={field.id}\n field={field}\n value={ranges[field.id] ?? {}}\n onChange={(range) => onChangeRange(field.id, range)}\n testId={`${testIdPrefix}-range-${field.id}`}\n />\n ))}\n </TableFilter.Section>\n )}\n </>\n );\n}\n\n/** The slide-in filter panel: keyword + checkbox facets + numeric ranges. */\nexport function GridFilterPanel<T extends Record<string, unknown>>(\n props: GridFilterPanelProps<T>,\n): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <TableFilter.Panel\n onClearAll={props.onClearAll}\n clearTestId={`${props.testIdPrefix}-clear-filters`}\n ariaLabel={copy.filters.panelTitle}\n >\n <FilterControls key={props.clearKey} {...props} />\n </TableFilter.Panel>\n );\n}\n\n/** Props for the modal filter surface used below the inline breakpoint. */\ninterface FilterDialogProps<T extends Record<string, unknown>> extends GridFilterPanelProps<T> {\n open: boolean;\n onClose: () => void;\n}\n\n/**\n * The same filter controls in a centered modal — used on smaller screens where the\n * slide-in panel would overlap the table. The \"Filtros\" toolbar button opens it.\n */\nexport function FilterDialog<T extends Record<string, unknown>>({\n open,\n onClose,\n ...props\n}: FilterDialogProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <StackedModal\n open={open}\n onClose={onClose}\n navigationTitle={copy.filters.panelTitle}\n backLabel={copy.nav.goBack}\n modalId={`${props.testIdPrefix}-filters`}\n maxWidth=\"xs\"\n dataTestId={`${props.testIdPrefix}-filter-dialog`}\n >\n <StackedModalContent>\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 2.5 }}>\n <Box sx={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <Link\n component=\"button\"\n type=\"button\"\n underline=\"hover\"\n onClick={props.onClearAll}\n data-testid={`${props.testIdPrefix}-clear-filters`}\n sx={{ fontSize: sxRem(12), color: \"text.secondary\" }}\n >\n {copy.filters.clearAllFilters}\n </Link>\n </Box>\n <FilterControls key={props.clearKey} {...props} />\n </Box>\n </StackedModalContent>\n </StackedModal>\n );\n}\n"],"mappings":"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","names":[]}
@@ -12,7 +12,32 @@ import {
12
12
 
13
13
  // src/components/form/total-form/Fields/TextField.tsx
14
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
- function TextField({ name, label, type = "text", placeholder }) {
15
+ var FIELD_OWNED = [
16
+ "id",
17
+ "name",
18
+ "type",
19
+ "value",
20
+ "defaultValue",
21
+ "onChange",
22
+ "placeholder",
23
+ "size",
24
+ "color",
25
+ "data-testid"
26
+ ];
27
+ function callerInputProps(inputProps, testId) {
28
+ const kept = Object.fromEntries(
29
+ Object.entries(inputProps ?? {}).filter(([key]) => !FIELD_OWNED.includes(key))
30
+ );
31
+ return { ...kept, "data-testid": testId };
32
+ }
33
+ function TextField({
34
+ name,
35
+ label,
36
+ type = "text",
37
+ placeholder,
38
+ autoComplete,
39
+ inputProps
40
+ }) {
16
41
  const { values, errors, setFieldValue } = useFormContext();
17
42
  const error = errors[name];
18
43
  const testId = `total-form-field-${name}`;
@@ -27,6 +52,8 @@ function TextField({ name, label, type = "text", placeholder }) {
27
52
  placeholder,
28
53
  value: values[name] ?? "",
29
54
  error: Boolean(error),
55
+ autoComplete,
56
+ inputProps: callerInputProps(inputProps, testId),
30
57
  "data-testid": testId,
31
58
  onChange: (event) => setFieldValue(name, event.target.value)
32
59
  }
@@ -38,4 +65,4 @@ function TextField({ name, label, type = "text", placeholder }) {
38
65
  export {
39
66
  TextField
40
67
  };
41
- //# sourceMappingURL=chunk-7RG37FVT.js.map
68
+ //# sourceMappingURL=chunk-RXKFPXVH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/total-form/Fields/TextField.tsx"],"sourcesContent":["'use client';\n\nimport type { InputHTMLAttributes } from 'react';\nimport React from 'react';\n\nimport { FormControl, FormLabel, FormMessage } from '../../Form';\nimport { Input } from '../../Input';\nimport { useFormContext } from '../FormContext';\n\n/** Props for the `total-form` {@link TextField}. */\nexport interface TextFieldProps {\n /** Field name; also the key into the form's values/errors. */\n name: string;\n /** Optional visible label rendered above the input. */\n label?: string;\n /** Native input type (e.g. `email`, `password`). Defaults to `text`. */\n type?: string;\n /** Placeholder shown when the field is empty. */\n placeholder?: string;\n /**\n * The `autocomplete` attribute of the `<input>`. Omitted, the browser decides\n * from the `name` — which is how a supplier's `name`/`phone`/`email` gets\n * offered the signed-in owner's own (FUT-4140). Pass `off` for somebody\n * else's data, `new-password` for a secret the password manager must not\n * fill. An `inputProps.autoComplete` wins over this one.\n */\n autoComplete?: string;\n /**\n * Attributes for the `<input>` element itself — `inputMode`, `autoCapitalize`,\n * `autoCorrect`, `spellCheck`, `maxLength`, `pattern`, `enterKeyHint`…\n *\n * They reach the `<input>`, never the wrapper `div`, where a keypad hint does\n * nothing. What the field owns — `id`, `name`, `type`, `value`, `onChange`,\n * `placeholder` and the `total-form-field-<name>` test id — is not\n * overridable here.\n */\n inputProps?: TextFieldInputProps;\n}\n\n/** The `<input>` attributes {@link TextField} lets a caller set (see `inputProps`). */\nexport type TextFieldInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'id' | 'name' | 'type' | 'value' | 'defaultValue' | 'onChange' | 'placeholder' | 'size' | 'color'\n>;\n\n/** The keys {@link TextFieldInputProps} leaves out, also dropped at runtime. */\nconst FIELD_OWNED = [\n 'id',\n 'name',\n 'type',\n 'value',\n 'defaultValue',\n 'onChange',\n 'placeholder',\n 'size',\n 'color',\n 'data-testid',\n];\n\n/**\n * The caller's `<input>` attributes, minus what the field owns.\n *\n * The type already refuses those keys; plain JS or a cast does not, and a\n * renamed id, name or test id would silently unbind the label, the form value\n * or every spec that finds the field by it. So they are dropped here too, and\n * the field's own test id is written last.\n */\nfunction callerInputProps(inputProps: TextFieldInputProps | undefined, testId: string): Record<string, unknown> {\n const kept = Object.fromEntries(\n Object.entries(inputProps ?? {}).filter(([key]) => !FIELD_OWNED.includes(key)),\n );\n return { ...kept, 'data-testid': testId };\n}\n\n/**\n * Text input field bound to {@link useFormContext}. Composes the existing\n * `@12-apps/ui` `Form*` presentational primitives and the `Input` control,\n * reading its value/error from context and writing changes back through it.\n *\n * Renders its error via `total-form-field-<name>-message` and the input via\n * `total-form-field-<name>`.\n */\nexport function TextField({\n name,\n label,\n type = 'text',\n placeholder,\n autoComplete,\n inputProps,\n}: TextFieldProps): React.ReactElement {\n const { values, errors, setFieldValue } = useFormContext();\n const error = errors[name];\n const testId = `total-form-field-${name}`;\n\n return (\n <FormControl fullWidth>\n {label && (\n <FormLabel htmlFor={name} error={Boolean(error)}>\n {label}\n </FormLabel>\n )}\n <Input\n id={name}\n name={name}\n type={type}\n placeholder={placeholder}\n value={values[name] ?? ''}\n error={Boolean(error)}\n autoComplete={autoComplete}\n inputProps={callerInputProps(inputProps, testId)}\n data-testid={testId}\n onChange={(event) => setFieldValue(name, event.target.value)}\n />\n {error && (\n <FormMessage error dataTestId={`${testId}-message`}>\n {error}\n </FormMessage>\n )}\n </FormControl>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AA+FI,SAEI,KAFJ;AAjDJ,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAUA,SAAS,iBAAiB,YAA6C,QAAyC;AAC9G,QAAM,OAAO,OAAO;AAAA,IAClB,OAAO,QAAQ,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,SAAS,GAAG,CAAC;AAAA,EAC/E;AACA,SAAO,EAAE,GAAG,MAAM,eAAe,OAAO;AAC1C;AAUO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,EAAE,QAAQ,QAAQ,cAAc,IAAI,eAAe;AACzD,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,SAAS,oBAAoB,IAAI;AAEvC,SACE,qBAAC,eAAY,WAAS,MACnB;AAAA,aACC,oBAAC,aAAU,SAAS,MAAM,OAAO,QAAQ,KAAK,GAC3C,iBACH;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,OAAO,IAAI,KAAK;AAAA,QACvB,OAAO,QAAQ,KAAK;AAAA,QACpB;AAAA,QACA,YAAY,iBAAiB,YAAY,MAAM;AAAA,QAC/C,eAAa;AAAA,QACb,UAAU,CAAC,UAAU,cAAc,MAAM,MAAM,OAAO,KAAK;AAAA;AAAA,IAC7D;AAAA,IACC,SACC,oBAAC,eAAY,OAAK,MAAC,YAAY,GAAG,MAAM,YACrC,iBACH;AAAA,KAEJ;AAEJ;","names":[]}
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-6KKQHJE7.js";
4
4
  import {
5
5
  DateRangeFields
6
- } from "./chunk-2ZMR3TZU.js";
6
+ } from "./chunk-L6UTYEUS.js";
7
7
  import {
8
8
  DEFAULT_QUICK_RANGES
9
9
  } from "./chunk-R26WP22N.js";
10
10
  import {
11
11
  useDateRangePicker
12
- } from "./chunk-YJPBNIEM.js";
12
+ } from "./chunk-MGFTHOPG.js";
13
13
  import {
14
14
  toLocalDay
15
15
  } from "./chunk-SUTOAW7I.js";
@@ -181,4 +181,4 @@ export {
181
181
  DateRangePicker,
182
182
  DateRangePicker_default
183
183
  };
184
- //# sourceMappingURL=chunk-KSJBFT4G.js.map
184
+ //# sourceMappingURL=chunk-SGAHME6W.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Chart
3
- } from "./chunk-AMLHEKSV.js";
3
+ } from "./chunk-HI7JPDD6.js";
4
4
  import {
5
5
  CHART_SEMANTIC_COLORS,
6
6
  specToChartProps
7
- } from "./chunk-HQCZT6TO.js";
7
+ } from "./chunk-JVOEVTCZ.js";
8
8
  import {
9
9
  accentFor
10
10
  } from "./chunk-B7ZHEOQQ.js";
@@ -46,4 +46,4 @@ var SpecChart = ({
46
46
  export {
47
47
  SpecChart
48
48
  };
49
- //# sourceMappingURL=chunk-SB2SEGR6.js.map
49
+ //# sourceMappingURL=chunk-TIM4PXWN.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-H2J2MTRE.js";
4
4
  import {
5
5
  EN_US_MAP_PREVIEW_COPY
6
- } from "./chunk-GLAAX5JJ.js";
6
+ } from "./chunk-I5NTADBO.js";
7
7
  import {
8
8
  rem
9
9
  } from "./chunk-YKCAJ2TN.js";
@@ -46,4 +46,4 @@ export {
46
46
  resolveMapPreviewProps,
47
47
  glassStyles
48
48
  };
49
- //# sourceMappingURL=chunk-D4LMRSY7.js.map
49
+ //# sourceMappingURL=chunk-UIWVSZ6I.js.map
@@ -6,13 +6,13 @@ import {
6
6
  } from "./chunk-66QQ7YQN.js";
7
7
  import {
8
8
  TextField
9
- } from "./chunk-7RG37FVT.js";
9
+ } from "./chunk-RXKFPXVH.js";
10
10
  import {
11
11
  SelectField
12
12
  } from "./chunk-6LMYQJZP.js";
13
13
  import {
14
14
  CepField
15
- } from "./chunk-XNLJ2Z7T.js";
15
+ } from "./chunk-YC2QYRNE.js";
16
16
  import {
17
17
  __export
18
18
  } from "./chunk-PZ5AY32C.js";
@@ -30,4 +30,4 @@ __export(Fields_exports, {
30
30
  export {
31
31
  Fields_exports
32
32
  };
33
- //# sourceMappingURL=chunk-GJOU26UW.js.map
33
+ //# sourceMappingURL=chunk-V2UJEICC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/total-form/Fields/index.ts"],"sourcesContent":["export { CategoryField } from './CategoryField';\nexport type { CategoryFieldProps } from './CategoryField';\nexport { CepField } from './CepField';\nexport type { CepFieldProps, CepFills } from './CepField';\nexport { TextField } from './TextField';\nexport type { TextFieldInputProps, TextFieldProps } from './TextField';\nexport { SelectField } from './SelectField';\nexport type { SelectFieldProps } from './SelectField';\nexport { ToggleField } from './ToggleField';\nexport type { ToggleFieldProps } from './ToggleField';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  MapCoordinates,
3
3
  MapMarkers
4
- } from "./chunk-JJNY5MZL.js";
4
+ } from "./chunk-KG7OTJ26.js";
5
5
  import {
6
6
  MapLayers
7
- } from "./chunk-YHKHHSZH.js";
7
+ } from "./chunk-OQ554425.js";
8
8
  import {
9
9
  StaticMapView
10
10
  } from "./chunk-UAOE3ZPC.js";
@@ -12,7 +12,7 @@ import {
12
12
  glassStyles,
13
13
  resolveMapCopy,
14
14
  resolveMapPreviewProps
15
- } from "./chunk-D4LMRSY7.js";
15
+ } from "./chunk-UIWVSZ6I.js";
16
16
  import {
17
17
  useMapPreview
18
18
  } from "./chunk-QSRZOXQI.js";
@@ -113,4 +113,4 @@ export {
113
113
  MapPreview,
114
114
  MapPreview_default
115
115
  };
116
- //# sourceMappingURL=chunk-XATRYJ4Q.js.map
116
+ //# sourceMappingURL=chunk-VQBY73QH.js.map
@@ -1,10 +1,10 @@
1
+ import {
2
+ ColumnsTab
3
+ } from "./chunk-WSAUWJFO.js";
1
4
  import {
2
5
  DisplayTab,
3
6
  SortTab
4
7
  } from "./chunk-YEGZIYVM.js";
5
- import {
6
- ColumnsTab
7
- } from "./chunk-WSAUWJFO.js";
8
8
  import {
9
9
  ViewActions,
10
10
  ViewFooter,
@@ -265,4 +265,4 @@ function DataViewsDisplayPanel({
265
265
  export {
266
266
  DataViewsDisplayPanel
267
267
  };
268
- //# sourceMappingURL=chunk-SYERREN5.js.map
268
+ //# sourceMappingURL=chunk-W2JYXZC2.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4XK6JQ4D.js";
4
4
  import {
5
5
  CepField
6
- } from "./chunk-EBEMNKTK.js";
6
+ } from "./chunk-6ONQTXFM.js";
7
7
 
8
8
  // src/components/form/total-form/Fields/CepField.tsx
9
9
  import { useCallback, useMemo, useRef } from "react";
@@ -43,7 +43,8 @@ function CepField2({
43
43
  debounceMs,
44
44
  copy,
45
45
  size,
46
- labelPlacement
46
+ labelPlacement,
47
+ autoComplete
47
48
  }) {
48
49
  const { values, errors, setFieldValue } = useFormContext();
49
50
  const { write, clearOwned } = useOwnedAutofill();
@@ -76,6 +77,7 @@ function CepField2({
76
77
  debounceMs,
77
78
  size,
78
79
  labelPlacement,
80
+ autoComplete,
79
81
  dataTestId: `total-form-field-${name}`
80
82
  }
81
83
  );
@@ -84,4 +86,4 @@ function CepField2({
84
86
  export {
85
87
  CepField2 as CepField
86
88
  };
87
- //# sourceMappingURL=chunk-XNLJ2Z7T.js.map
89
+ //# sourceMappingURL=chunk-YC2QYRNE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/total-form/Fields/CepField.tsx"],"sourcesContent":["'use client';\n\nimport type { CepFieldCopy } from \"../../../../copy\";\nimport React, { useCallback, useMemo, useRef } from 'react';\n\nimport type { InputSize } from '../../Input/Input.base';\nimport { CepField as BaseCepField, type CepAddress } from '../../CepField';\nimport { useFormContext } from '../FormContext';\n\n/** The resolved address parts a form can receive. */\ntype CepPart = 'street' | 'neighborhood' | 'city' | 'state';\n\n/**\n * Which form field receives each resolved part. Omit a part to leave it alone —\n * a form with no bairro column simply doesn't map `neighborhood`.\n */\nexport type CepFills = Partial<Record<CepPart, string>>;\n\n/** Props for the `total-form` {@link CepField}. */\nexport interface CepFieldProps {\n /** The lookup status wording. REQUIRED — no default copy. */\n copy: CepFieldCopy;\n /** Field name; also the key into the form's values/errors. */\n name: string;\n /** Optional visible label. Defaults to `CEP`. */\n label?: string;\n /** Resolve a complete CEP. Omit for a masked input with no lookup. */\n lookup?: (cep: string) => Promise<CepAddress | null>;\n /** Maps each resolved address part onto a field in THIS form. */\n fills?: CepFills;\n /** Milliseconds to wait after the last keystroke before looking up. */\n debounceMs?: number;\n /** The input's size — the same scale, and box heights, as `Input`. Defaults to `md`. */\n size?: InputSize;\n /** `above` (default) stacks the label over the box; `inside` floats it in the box like `Input`. */\n labelPlacement?: 'above' | 'inside';\n /**\n * The `<input>`'s `autocomplete`. Defaults to `postal-code`; pass `off` when\n * the form holds somebody else's address (FUT-4140).\n */\n autoComplete?: string;\n}\n\nconst PARTS: readonly CepPart[] = ['street', 'neighborhood', 'city', 'state'];\n\n/** Ownership-aware writes into sibling form fields. */\ninterface OwnedAutofill {\n /** Write one field, where `''` means \"no value for this part\". */\n write: (field: string, value: string) => void;\n /** Blank every field this hook still owns. */\n clearOwned: () => void;\n}\n\n/**\n * The honesty rule, in one place: this hook remembers exactly what it wrote,\n * writes only into fields that are empty or still hold its own value, and drops\n * the ownership record when it blanks one. That single invariant is what lets\n * autofill replace itself freely while never touching the user's typing.\n */\nfunction useOwnedAutofill(): OwnedAutofill {\n const { values, setFieldValue } = useFormContext();\n // What we last auto-filled per target field, so a later lookup may replace\n // its own value while a manual edit is preserved.\n const autoFilledRef = useRef<Record<string, string>>({});\n // Read values at call time without making them a dependency of the callback.\n const valuesRef = useRef(values);\n valuesRef.current = values;\n\n const write = useCallback(\n (field: string, value: string) => {\n const current = (valuesRef.current[field] ?? '').trim();\n const ours = autoFilledRef.current[field] === current;\n if (current !== '' && !ours) return;\n setFieldValue(field, value);\n if (value) {\n autoFilledRef.current[field] = value;\n } else {\n delete autoFilledRef.current[field];\n }\n },\n [setFieldValue],\n );\n\n const clearOwned = useCallback(() => {\n // Object.keys snapshots, so `write` may delete entries as we iterate.\n for (const field of Object.keys(autoFilledRef.current)) {\n write(field, '');\n }\n }, [write]);\n\n return useMemo(() => ({ write, clearOwned }), [write, clearOwned]);\n}\n\n/**\n * CEP field bound to {@link useFormContext}: masks and validates the CEP, then\n * writes the resolved logradouro/bairro/cidade/UF straight into the sibling\n * fields named by `fills`.\n *\n * It will not overwrite work the user has done. A target field is only written\n * when it is empty, or when it still holds the exact value THIS component put\n * there — so correcting the CEP re-fills the address, but a hand-edited street\n * survives the next lookup.\n *\n * @example\n * ```tsx\n * <Fields.CepField\n * name=\"postalCode\"\n * lookup={lookupCep}\n * fills={{ street: 'addressLine1', neighborhood: 'neighborhood', city: 'city', state: 'state' }}\n * />\n * ```\n */\nexport function CepField({\n name,\n label,\n lookup,\n fills,\n debounceMs,\n copy,\n size,\n labelPlacement,\n autoComplete,\n}: CepFieldProps): React.ReactElement {\n const { values, errors, setFieldValue } = useFormContext();\n const { write, clearOwned } = useOwnedAutofill();\n\n const handleResolved = useCallback(\n (address: CepAddress) => {\n if (!fills) return;\n // Every mapped part is written on EVERY resolve, absent ones as ''. A\n // \"CEP geral\" (a small município's catch-all) carries no logradouro, so\n // skipping absent parts would leave the previous CEP's street here.\n for (const part of PARTS) {\n const field = fills[part];\n if (field) write(field, address[part] ?? '');\n }\n },\n [fills, write],\n );\n\n const handleChange = useCallback(\n (masked: string) => setFieldValue(name, masked),\n [name, setFieldValue],\n );\n\n return (\n <BaseCepField\n copy={copy}\n name={name}\n label={label}\n value={values[name] ?? ''}\n error={errors[name]}\n onChange={handleChange}\n onLookup={lookup}\n onResolved={handleResolved}\n onNotFound={clearOwned}\n debounceMs={debounceMs}\n size={size}\n labelPlacement={labelPlacement}\n autoComplete={autoComplete}\n dataTestId={`total-form-field-${name}`}\n />\n );\n}\n"],"mappings":";;;;;;;;AAGA,SAAgB,aAAa,SAAS,cAAc;AA+IhD;AAvGJ,IAAM,QAA4B,CAAC,UAAU,gBAAgB,QAAQ,OAAO;AAgB5E,SAAS,mBAAkC;AACzC,QAAM,EAAE,QAAQ,cAAc,IAAI,eAAe;AAGjD,QAAM,gBAAgB,OAA+B,CAAC,CAAC;AAEvD,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AAEpB,QAAM,QAAQ;AAAA,IACZ,CAAC,OAAe,UAAkB;AAChC,YAAM,WAAW,UAAU,QAAQ,KAAK,KAAK,IAAI,KAAK;AACtD,YAAM,OAAO,cAAc,QAAQ,KAAK,MAAM;AAC9C,UAAI,YAAY,MAAM,CAAC,KAAM;AAC7B,oBAAc,OAAO,KAAK;AAC1B,UAAI,OAAO;AACT,sBAAc,QAAQ,KAAK,IAAI;AAAA,MACjC,OAAO;AACL,eAAO,cAAc,QAAQ,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,aAAa,YAAY,MAAM;AAEnC,eAAW,SAAS,OAAO,KAAK,cAAc,OAAO,GAAG;AACtD,YAAM,OAAO,EAAE;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO,QAAQ,OAAO,EAAE,OAAO,WAAW,IAAI,CAAC,OAAO,UAAU,CAAC;AACnE;AAqBO,SAASA,UAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,QAAM,EAAE,QAAQ,QAAQ,cAAc,IAAI,eAAe;AACzD,QAAM,EAAE,OAAO,WAAW,IAAI,iBAAiB;AAE/C,QAAM,iBAAiB;AAAA,IACrB,CAAC,YAAwB;AACvB,UAAI,CAAC,MAAO;AAIZ,iBAAW,QAAQ,OAAO;AACxB,cAAM,QAAQ,MAAM,IAAI;AACxB,YAAI,MAAO,OAAM,OAAO,QAAQ,IAAI,KAAK,EAAE;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,CAAC,OAAO,KAAK;AAAA,EACf;AAEA,QAAM,eAAe;AAAA,IACnB,CAAC,WAAmB,cAAc,MAAM,MAAM;AAAA,IAC9C,CAAC,MAAM,aAAa;AAAA,EACtB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,OAAO,IAAI,KAAK;AAAA,MACvB,OAAO,OAAO,IAAI;AAAA,MAClB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,oBAAoB,IAAI;AAAA;AAAA,EACtC;AAEJ;","names":["CepField"]}
@@ -0,0 +1,23 @@
1
+ // src/components/data-display/DataViews/data-views-range-reset.ts
2
+ import { useEffect, useRef, useState } from "react";
3
+ var rangeKeyOf = (range) => `${range.min ?? ""}|${range.max ?? ""}`;
4
+ function useOutsideResetKey(value) {
5
+ const [key, setKey] = useState(0);
6
+ const lastWritten = useRef(rangeKeyOf(value));
7
+ const current = rangeKeyOf(value);
8
+ useEffect(() => {
9
+ if (current === lastWritten.current) return;
10
+ lastWritten.current = current;
11
+ setKey((n) => n + 1);
12
+ }, [current]);
13
+ const emitted = (next) => {
14
+ lastWritten.current = rangeKeyOf(next);
15
+ return next;
16
+ };
17
+ return { key, emitted };
18
+ }
19
+
20
+ export {
21
+ useOutsideResetKey
22
+ };
23
+ //# sourceMappingURL=chunk-YOPMXGHY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-range-reset.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { RangeValue } from './data-views-range-types';\n\n/** One string per range CONTENT: `{}` is rebuilt on every render upstream. */\nconst rangeKeyOf = (range: RangeValue): string => `${range.min ?? ''}|${range.max ?? ''}`;\n\n/**\n * Remounts the two bound fields when the range is moved from OUTSIDE them — a\n * \"Limpar\", a preset, a saved view — and never for the fields' own writes.\n *\n * A field keeps a day it refuses (`31/02/2026`) on screen until the APPLIED\n * bound moves. When a clear empties the other bound, or a bound that was open\n * already, this field's bound does not move, so without a remount the refused\n * day would sit red under a filter that had just been cleared (FUT-4144).\n * Remounting only for outside writes keeps the caret where it is while typing.\n */\nexport function useOutsideResetKey(value: RangeValue): { key: number; emitted: (next: RangeValue) => RangeValue } {\n const [key, setKey] = useState(0);\n const lastWritten = useRef(rangeKeyOf(value));\n const current = rangeKeyOf(value);\n useEffect(() => {\n if (current === lastWritten.current) return;\n lastWritten.current = current;\n setKey((n) => n + 1);\n }, [current]);\n const emitted = (next: RangeValue) => {\n lastWritten.current = rangeKeyOf(next);\n return next;\n };\n return { key, emitted };\n}\n"],"mappings":";AAEA,SAAS,WAAW,QAAQ,gBAAgB;AAK5C,IAAM,aAAa,CAAC,UAA8B,GAAG,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO,EAAE;AAYhF,SAAS,mBAAmB,OAA+E;AAChH,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,CAAC;AAChC,QAAM,cAAc,OAAO,WAAW,KAAK,CAAC;AAC5C,QAAM,UAAU,WAAW,KAAK;AAChC,YAAU,MAAM;AACd,QAAI,YAAY,YAAY,QAAS;AACrC,gBAAY,UAAU;AACtB,WAAO,CAAC,MAAM,IAAI,CAAC;AAAA,EACrB,GAAG,CAAC,OAAO,CAAC;AACZ,QAAM,UAAU,CAAC,SAAqB;AACpC,gBAAY,UAAU,WAAW,IAAI;AACrC,WAAO;AAAA,EACT;AACA,SAAO,EAAE,KAAK,QAAQ;AACxB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EN_US_CAROUSEL_COPY
3
- } from "./chunk-GLAAX5JJ.js";
3
+ } from "./chunk-I5NTADBO.js";
4
4
  import {
5
5
  withDefaults
6
6
  } from "./chunk-HPK33ACY.js";
@@ -330,4 +330,4 @@ export {
330
330
  CarouselArrows,
331
331
  CarouselThumbnails
332
332
  };
333
- //# sourceMappingURL=chunk-QK3XXPBA.js.map
333
+ //# sourceMappingURL=chunk-YWJCMGTE.js.map
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-KHG57NAE.js";
29
29
  import {
30
30
  DataGrid
31
- } from "./chunk-DYHOBKPU.js";
31
+ } from "./chunk-OA6T2ME3.js";
32
32
  import {
33
33
  default as default2
34
34
  } from "./chunk-6DPAWXZ3.js";
@@ -250,4 +250,4 @@ function GridMain(props) {
250
250
  export {
251
251
  GridMain
252
252
  };
253
- //# sourceMappingURL=chunk-UQ6SAIX7.js.map
253
+ //# sourceMappingURL=chunk-Z47SYKRX.js.map
@@ -2,11 +2,11 @@ import "../chunk-UDQSIRAP.js";
2
2
  import {
3
3
  Avatar,
4
4
  AvatarGroup
5
- } from "../chunk-4J62V5OE.js";
5
+ } from "../chunk-7YJYIMWP.js";
6
6
  import "../chunk-3ZVUNSFF.js";
7
- import "../chunk-7XSCEHGA.js";
8
- import "../chunk-MTEQEPNY.js";
7
+ import "../chunk-EOQ6EKTS.js";
9
8
  import "../chunk-6ZZGK5DT.js";
9
+ import "../chunk-MTEQEPNY.js";
10
10
  import "../chunk-XOXXG7Q5.js";
11
11
  import "../chunk-XJAD6E3V.js";
12
12
  import "../chunk-F5H2ZXST.js";
@@ -1,3 +1,6 @@
1
+ import {
2
+ CardKebab
3
+ } from "../chunk-34FX3NRZ.js";
1
4
  import {
2
5
  useRowConfirm
3
6
  } from "../chunk-N557OEZR.js";
@@ -18,9 +21,6 @@ import {
18
21
  CardActionsProvider,
19
22
  useCardActions
20
23
  } from "../chunk-RCTHCXS6.js";
21
- import {
22
- CardKebab
23
- } from "../chunk-34FX3NRZ.js";
24
24
  import "../chunk-WVML3ENZ.js";
25
25
  import "../chunk-AY5GKCH7.js";
26
26
  import "../chunk-XCBQXSTR.js";
@@ -1,17 +1,17 @@
1
1
  import "../chunk-62FET2BM.js";
2
2
  import {
3
3
  Carousel
4
- } from "../chunk-LCGK22QQ.js";
5
- import "../chunk-C2I7NQC4.js";
4
+ } from "../chunk-IKXCAYFH.js";
5
+ import "../chunk-RUIV5TVA.js";
6
+ import "../chunk-74KCGLOU.js";
6
7
  import "../chunk-Z64TMGYT.js";
7
8
  import "../chunk-6FDLBWTE.js";
8
9
  import {
9
10
  CarouselArrows,
10
11
  CarouselIndicators,
11
12
  CarouselThumbnails
12
- } from "../chunk-QK3XXPBA.js";
13
- import "../chunk-RUIV5TVA.js";
14
- import "../chunk-GLAAX5JJ.js";
13
+ } from "../chunk-YWJCMGTE.js";
14
+ import "../chunk-I5NTADBO.js";
15
15
  import "../chunk-AA2X5GOT.js";
16
16
  import "../chunk-PZS7N74L.js";
17
17
  import "../chunk-HPK33ACY.js";
@@ -1,14 +1,11 @@
1
1
  import "../chunk-5KLSLD72.js";
2
2
  import {
3
3
  SpecChart
4
- } from "../chunk-SB2SEGR6.js";
4
+ } from "../chunk-TIM4PXWN.js";
5
5
  import {
6
6
  Chart
7
- } from "../chunk-AMLHEKSV.js";
8
- import "../chunk-6ATXOJVQ.js";
9
- import "../chunk-TZC6KIK2.js";
10
- import "../chunk-TCWISGSS.js";
11
- import "../chunk-SOHQPPYJ.js";
7
+ } from "../chunk-HI7JPDD6.js";
8
+ import "../chunk-QADTI63U.js";
12
9
  import {
13
10
  ChartContainer,
14
11
  ChartLegend,
@@ -16,21 +13,24 @@ import {
16
13
  ChartTooltip,
17
14
  ChartTooltipContent
18
15
  } from "../chunk-RIRTW5EU.js";
16
+ import "../chunk-TZC6KIK2.js";
17
+ import "../chunk-TCWISGSS.js";
18
+ import "../chunk-SOHQPPYJ.js";
19
19
  import {
20
20
  CHART_SEMANTIC_COLORS,
21
21
  ChartSpecError,
22
22
  parseChartSpec,
23
23
  specToChartProps
24
- } from "../chunk-HQCZT6TO.js";
25
- import {
26
- chartValueFormatter,
27
- formatChartValue
28
- } from "../chunk-6GPNZSAE.js";
24
+ } from "../chunk-JVOEVTCZ.js";
29
25
  import {
30
26
  getChartSpecRenderer,
31
27
  getRegisteredChartSpecTypes,
32
28
  registerChartSpecRenderer
33
29
  } from "../chunk-WKUA6P3W.js";
30
+ import {
31
+ chartValueFormatter,
32
+ formatChartValue
33
+ } from "../chunk-6GPNZSAE.js";
34
34
  import "../chunk-B7ZHEOQQ.js";
35
35
  import "../chunk-ENRB6PIN.js";
36
36
  import "../chunk-25MSGLNU.js";
@@ -1,10 +1,10 @@
1
1
  import "../chunk-L5CPOEDP.js";
2
2
  import {
3
3
  DataGrid
4
- } from "../chunk-DYHOBKPU.js";
4
+ } from "../chunk-OA6T2ME3.js";
5
+ import "../chunk-5RYPVYWP.js";
5
6
  import "../chunk-EARWC6PD.js";
6
7
  import "../chunk-LDROG4QI.js";
7
- import "../chunk-5RYPVYWP.js";
8
8
  import "../chunk-K6FW4YDA.js";
9
9
  import "../chunk-G3E66C6J.js";
10
10
  import "../chunk-YKCAJ2TN.js";