@12-apps/ui 6.66.2 → 6.68.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 (291) hide show
  1. package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
  2. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  3. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  4. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  5. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  6. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  7. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  8. package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
  9. package/dist/_internal/components/data-display/Chip/Chip.metrics.js +5 -1
  10. package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
  11. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  12. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +34 -31
  13. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +36 -33
  14. package/dist/_internal/components/data-display/DataViews/base-card.js +2 -2
  15. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +5 -5
  16. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +6 -6
  17. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +4 -4
  18. package/dist/_internal/components/data-display/DataViews/base-list-card.js +8 -8
  19. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +4 -4
  20. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +3 -3
  21. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -3
  22. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +6 -6
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +7 -6
  24. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +31 -28
  25. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +11 -5
  26. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +2 -2
  27. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +8 -3
  28. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +7 -4
  29. package/dist/_internal/components/data-display/DataViews/data-views-overflow-fields.js +18 -0
  30. package/dist/_internal/components/data-display/DataViews/data-views-overflow-fields.js.map +1 -0
  31. package/dist/_internal/components/data-display/DataViews/data-views-overflow.js +6 -2
  32. package/dist/_internal/components/data-display/DataViews/data-views-quick-chip.js +20 -0
  33. package/dist/_internal/components/data-display/DataViews/data-views-quick-chip.js.map +1 -0
  34. package/dist/_internal/components/data-display/DataViews/data-views-quick-types.js +1 -0
  35. package/dist/_internal/components/data-display/DataViews/data-views-quick-types.js.map +1 -0
  36. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  37. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +3 -3
  38. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +8 -7
  39. package/dist/_internal/components/data-display/DataViews/data-views-sticky-head.js +21 -0
  40. package/dist/_internal/components/data-display/DataViews/data-views-sticky-head.js.map +1 -0
  41. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +7 -6
  42. package/dist/_internal/components/data-display/DataViews/data-views-types.js +1 -1
  43. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +3 -3
  44. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +3 -3
  45. package/dist/_internal/components/data-display/DataViews/use-saved-views-controller.js +2 -2
  46. package/dist/_internal/components/data-display/index.js +22 -22
  47. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +3 -3
  48. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -2
  49. package/dist/_internal/components/feedback/StackedModal/StackedModal.styles.js +1 -1
  50. package/dist/_internal/components/feedback/index.js +3 -3
  51. package/dist/_internal/components/index.js +33 -33
  52. package/dist/_internal/components/layout/SettingCard/SettingCard.js +6 -6
  53. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +4 -4
  54. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +5 -5
  55. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +5 -5
  56. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +7 -7
  57. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +6 -6
  58. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +7 -7
  59. package/dist/_internal/components/layout/index.js +10 -10
  60. package/dist/_internal/components/navigation/Tabs/Tabs.js +1 -1
  61. package/dist/_internal/components/navigation/index.js +1 -1
  62. package/dist/_internal/user-avatar/user-avatar.js +5 -5
  63. package/dist/charts.js +11 -11
  64. package/dist/{chunk-35L5YMYQ.js → chunk-2QB4WIU5.js} +6 -6
  65. package/dist/{chunk-AAXLQFC7.js → chunk-3FIIMP7I.js} +2 -2
  66. package/dist/{chunk-6A6GZRXD.js → chunk-3VXS7O3X.js} +2 -2
  67. package/dist/chunk-4IE66GY2.js +89 -0
  68. package/dist/chunk-4IE66GY2.js.map +1 -0
  69. package/dist/{chunk-JYMXYSDP.js → chunk-5CAWRMDX.js} +2 -2
  70. package/dist/{chunk-647DEGIU.js → chunk-5WJFCQFN.js} +7 -7
  71. package/dist/{chunk-M6V7Y7CP.js → chunk-6CZC5S6O.js} +3 -3
  72. package/dist/chunk-6CZC5S6O.js.map +1 -0
  73. package/dist/{chunk-K6KBASL2.js → chunk-72L5C74V.js} +2 -2
  74. package/dist/chunk-AT6UKTH4.js +129 -0
  75. package/dist/chunk-AT6UKTH4.js.map +1 -0
  76. package/dist/{chunk-BI7YMVKZ.js → chunk-B2JSUFDX.js} +2 -2
  77. package/dist/{chunk-7J5JR33K.js → chunk-BBBHPK2Q.js} +2 -2
  78. package/dist/{chunk-UZ2CEJOO.js → chunk-CSJ7WNXU.js} +2 -2
  79. package/dist/{chunk-6QYKZMEE.js → chunk-CSLBRJ7N.js} +40 -25
  80. package/dist/chunk-CSLBRJ7N.js.map +1 -0
  81. package/dist/{chunk-LMIOWP6H.js → chunk-D34PZJH3.js} +2 -2
  82. package/dist/{chunk-HYQJJLBC.js → chunk-DHAXUVMR.js} +27 -3
  83. package/dist/chunk-DHAXUVMR.js.map +1 -0
  84. package/dist/{chunk-TKLPPAS5.js → chunk-E5GYHN4X.js} +4 -4
  85. package/dist/{chunk-KU6VHNRV.js → chunk-E5I776YW.js} +6 -2
  86. package/dist/{chunk-KU6VHNRV.js.map → chunk-E5I776YW.js.map} +1 -1
  87. package/dist/{chunk-SUZLGB5I.js → chunk-E6K2UZGR.js} +3 -3
  88. package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
  89. package/dist/{chunk-L7OWFJUU.js → chunk-EZAQIEYB.js} +40 -34
  90. package/dist/chunk-EZAQIEYB.js.map +1 -0
  91. package/dist/chunk-GCYGVWOI.js +59 -0
  92. package/dist/chunk-GCYGVWOI.js.map +1 -0
  93. package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
  94. package/dist/{chunk-O2P2KTKN.js → chunk-HLYYB4O5.js} +1 -1
  95. package/dist/chunk-HLYYB4O5.js.map +1 -0
  96. package/dist/{chunk-SAJDNO43.js → chunk-IGMD6S76.js} +3 -3
  97. package/dist/{chunk-EZFQO77P.js → chunk-IPYV7BLH.js} +2 -2
  98. package/dist/{chunk-KARMRTTM.js → chunk-J2RUDZVJ.js} +7 -7
  99. package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
  100. package/dist/{chunk-VJB63DUM.js → chunk-K3PMMW23.js} +2 -2
  101. package/dist/{chunk-TNVO3EVF.js → chunk-KT3TF2LT.js} +5 -3
  102. package/dist/chunk-KT3TF2LT.js.map +1 -0
  103. package/dist/{chunk-6S3S2K7O.js → chunk-L7HKMTKR.js} +3 -3
  104. package/dist/chunk-L7HKMTKR.js.map +1 -0
  105. package/dist/{chunk-J6DYHBID.js → chunk-LIN4A2BW.js} +7 -7
  106. package/dist/{chunk-7JS2SPRW.js → chunk-LKRXLWCC.js} +3 -3
  107. package/dist/{chunk-FXZUVZON.js → chunk-LWZ2K225.js} +6 -6
  108. package/dist/{chunk-EWTSQTVR.js → chunk-NI67M453.js} +6 -5
  109. package/dist/chunk-NI67M453.js.map +1 -0
  110. package/dist/{chunk-MJ6EAND6.js → chunk-Q7BGMLCX.js} +2 -2
  111. package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
  112. package/dist/{chunk-CMLIWUBW.js → chunk-QPCHABOZ.js} +24 -1
  113. package/dist/chunk-QPCHABOZ.js.map +1 -0
  114. package/dist/{chunk-L6MGAPBX.js → chunk-RCZ4KL2H.js} +5 -3
  115. package/dist/chunk-RCZ4KL2H.js.map +1 -0
  116. package/dist/{chunk-YLSSQJZM.js → chunk-T7ZERP7A.js} +30 -2
  117. package/dist/chunk-T7ZERP7A.js.map +1 -0
  118. package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
  119. package/dist/{chunk-Y7YKIIYS.js → chunk-TQXB2OHP.js} +28 -4
  120. package/dist/chunk-TQXB2OHP.js.map +1 -0
  121. package/dist/{chunk-KUFDUXYB.js → chunk-U6ODZJCH.js} +2 -2
  122. package/dist/{chunk-3WLS7Z7D.js → chunk-UMOHHWXY.js} +3 -3
  123. package/dist/{chunk-S4JXSC4D.js → chunk-V6SRBQMN.js} +5 -5
  124. package/dist/{chunk-JY5YINUH.js → chunk-WQ32YFM5.js} +15 -7
  125. package/dist/chunk-WQ32YFM5.js.map +1 -0
  126. package/dist/{chunk-ERA3AEWU.js → chunk-WTGIW7LX.js} +12 -3
  127. package/dist/chunk-WTGIW7LX.js.map +1 -0
  128. package/dist/{chunk-2VMIHFMX.js → chunk-WVIJFS5Y.js} +9 -4
  129. package/dist/chunk-WVIJFS5Y.js.map +1 -0
  130. package/dist/{chunk-375HTCF2.js → chunk-Y2CCXB7R.js} +18 -2
  131. package/dist/chunk-Y2CCXB7R.js.map +1 -0
  132. package/dist/{chunk-33XGC4YU.js → chunk-YEGZIYVM.js} +2 -2
  133. package/dist/{chunk-3PGY4UL4.js → chunk-YKQA4NPM.js} +37 -7
  134. package/dist/chunk-YKQA4NPM.js.map +1 -0
  135. package/dist/{chunk-XMVPNCYM.js → chunk-YQGVO3ZU.js} +3 -3
  136. package/dist/{chunk-OJFE5PK6.js → chunk-ZZO5MRMV.js} +2 -2
  137. package/dist/data-display/Avatar.js +4 -4
  138. package/dist/data-display/CardKit.js +7 -7
  139. package/dist/data-display/Carousel.js +2 -2
  140. package/dist/data-display/Chart.js +11 -11
  141. package/dist/data-display/Chip.js +3 -3
  142. package/dist/data-display/DataGrid.js +2 -2
  143. package/dist/data-display/DataViews.js +45 -42
  144. package/dist/feedback/StackedModal.js +3 -3
  145. package/dist/layout/SettingCard.js +10 -10
  146. package/dist/native/data-display/Chip.js +20 -1
  147. package/dist/native/data-display/Chip.js.map +1 -1
  148. package/dist/navigation/Tabs.js +1 -1
  149. package/dist/types/components/data-display/Chip/Chip.base.d.ts +5 -1
  150. package/dist/types/components/data-display/Chip/Chip.base.d.ts.map +1 -1
  151. package/dist/types/components/data-display/Chip/Chip.d.ts.map +1 -1
  152. package/dist/types/components/data-display/Chip/Chip.metrics.d.ts +4 -0
  153. package/dist/types/components/data-display/Chip/Chip.metrics.d.ts.map +1 -1
  154. package/dist/types/components/data-display/Chip/Chip.styles.d.ts +2 -7
  155. package/dist/types/components/data-display/Chip/Chip.styles.d.ts.map +1 -1
  156. package/dist/types/components/data-display/DataViews/DataViewsGrid.d.ts +15 -1
  157. package/dist/types/components/data-display/DataViews/DataViewsGrid.d.ts.map +1 -1
  158. package/dist/types/components/data-display/DataViews/DataViewsTableBase.d.ts +5 -1
  159. package/dist/types/components/data-display/DataViews/DataViewsTableBase.d.ts.map +1 -1
  160. package/dist/types/components/data-display/DataViews/data-views-empty.d.ts +10 -0
  161. package/dist/types/components/data-display/DataViews/data-views-empty.d.ts.map +1 -1
  162. package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts +2 -0
  163. package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts.map +1 -1
  164. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts +5 -1
  165. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
  166. package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts +4 -1
  167. package/dist/types/components/data-display/DataViews/data-views-inline-bar.d.ts.map +1 -1
  168. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts +10 -1
  169. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  170. package/dist/types/components/data-display/DataViews/data-views-more-filters.d.ts.map +1 -1
  171. package/dist/types/components/data-display/DataViews/data-views-overflow-fields.d.ts +56 -0
  172. package/dist/types/components/data-display/DataViews/data-views-overflow-fields.d.ts.map +1 -0
  173. package/dist/types/components/data-display/DataViews/data-views-overflow.d.ts +7 -5
  174. package/dist/types/components/data-display/DataViews/data-views-overflow.d.ts.map +1 -1
  175. package/dist/types/components/data-display/DataViews/data-views-quick-chip.d.ts +16 -0
  176. package/dist/types/components/data-display/DataViews/data-views-quick-chip.d.ts.map +1 -0
  177. package/dist/types/components/data-display/DataViews/data-views-quick-types.d.ts +33 -0
  178. package/dist/types/components/data-display/DataViews/data-views-quick-types.d.ts.map +1 -0
  179. package/dist/types/components/data-display/DataViews/data-views-range-types.d.ts +2 -0
  180. package/dist/types/components/data-display/DataViews/data-views-range-types.d.ts.map +1 -1
  181. package/dist/types/components/data-display/DataViews/data-views-shell-toolbar.d.ts +11 -6
  182. package/dist/types/components/data-display/DataViews/data-views-shell-toolbar.d.ts.map +1 -1
  183. package/dist/types/components/data-display/DataViews/data-views-sticky-head.d.ts +45 -0
  184. package/dist/types/components/data-display/DataViews/data-views-sticky-head.d.ts.map +1 -0
  185. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts +6 -0
  186. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts.map +1 -1
  187. package/dist/types/components/data-display/DataViews/data-views-types.d.ts +7 -4
  188. package/dist/types/components/data-display/DataViews/data-views-types.d.ts.map +1 -1
  189. package/dist/types/components/data-display/DataViews/index.d.ts +1 -1
  190. package/dist/types/components/data-display/DataViews/index.d.ts.map +1 -1
  191. package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
  192. package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts +2 -1
  193. package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts.map +1 -1
  194. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +17 -0
  195. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
  196. package/dist/types/components/feedback/StackedModal/index.d.ts +1 -1
  197. package/dist/types/components/feedback/StackedModal/index.d.ts.map +1 -1
  198. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  199. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +12 -0
  200. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
  201. package/dist/types/components/navigation/Tabs/index.d.ts +1 -1
  202. package/dist/types/components/navigation/Tabs/index.d.ts.map +1 -1
  203. package/dist/types-native/components/data-display/Chip/Chip.base.d.ts +5 -1
  204. package/dist/types-native/components/data-display/Chip/Chip.base.d.ts.map +1 -1
  205. package/dist/types-native/components/data-display/Chip/Chip.look.native.d.ts.map +1 -1
  206. package/dist/types-native/components/data-display/Chip/Chip.metrics.d.ts +4 -0
  207. package/dist/types-native/components/data-display/Chip/Chip.metrics.d.ts.map +1 -1
  208. package/dist/user-avatar.js +5 -5
  209. package/package.json +1 -1
  210. package/src/components/data-display/Chip/Chip.base.ts +5 -1
  211. package/src/components/data-display/Chip/Chip.look.native.ts +22 -1
  212. package/src/components/data-display/Chip/Chip.metrics.ts +5 -0
  213. package/src/components/data-display/Chip/Chip.styles.tsx +38 -1
  214. package/src/components/data-display/Chip/Chip.tsx +6 -2
  215. package/src/components/data-display/Chip/chip.md +2 -2
  216. package/src/components/data-display/DataViews/DataViewsGrid.tsx +15 -0
  217. package/src/components/data-display/DataViews/DataViewsTableBase.tsx +5 -0
  218. package/src/components/data-display/DataViews/RESPONSIVE-BEHAVIOUR.md +50 -0
  219. package/src/components/data-display/DataViews/data-views-empty.tsx +25 -0
  220. package/src/components/data-display/DataViews/data-views-grid-bodies.tsx +11 -1
  221. package/src/components/data-display/DataViews/data-views-grid-parts.tsx +27 -15
  222. package/src/components/data-display/DataViews/data-views-inline-bar.tsx +24 -1
  223. package/src/components/data-display/DataViews/data-views-more-fields.tsx +34 -1
  224. package/src/components/data-display/DataViews/data-views-more-filters.tsx +20 -4
  225. package/src/components/data-display/DataViews/data-views-overflow-fields.ts +110 -0
  226. package/src/components/data-display/DataViews/data-views-overflow.ts +58 -36
  227. package/src/components/data-display/DataViews/data-views-quick-chip.tsx +143 -0
  228. package/src/components/data-display/DataViews/data-views-quick-types.ts +33 -0
  229. package/src/components/data-display/DataViews/data-views-range-types.ts +2 -0
  230. package/src/components/data-display/DataViews/data-views-shell-toolbar.tsx +31 -23
  231. package/src/components/data-display/DataViews/data-views-sticky-head.ts +132 -0
  232. package/src/components/data-display/DataViews/data-views-toolbar.tsx +9 -0
  233. package/src/components/data-display/DataViews/data-views-types.ts +7 -11
  234. package/src/components/data-display/DataViews/index.ts +1 -0
  235. package/src/components/feedback/StackedModal/StackedModal.md +1 -0
  236. package/src/components/feedback/StackedModal/StackedModal.styles.ts +53 -6
  237. package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
  238. package/src/components/feedback/StackedModal/StackedModal.types.ts +17 -0
  239. package/src/components/feedback/StackedModal/index.ts +1 -1
  240. package/src/components/navigation/Tabs/Tabs.md +1 -0
  241. package/src/components/navigation/Tabs/Tabs.tsx +30 -1
  242. package/src/components/navigation/Tabs/Tabs.types.ts +14 -0
  243. package/src/components/navigation/Tabs/index.ts +1 -1
  244. package/dist/chunk-2VMIHFMX.js.map +0 -1
  245. package/dist/chunk-375HTCF2.js.map +0 -1
  246. package/dist/chunk-3PGY4UL4.js.map +0 -1
  247. package/dist/chunk-6QYKZMEE.js.map +0 -1
  248. package/dist/chunk-6S3S2K7O.js.map +0 -1
  249. package/dist/chunk-CMLIWUBW.js.map +0 -1
  250. package/dist/chunk-ERA3AEWU.js.map +0 -1
  251. package/dist/chunk-EWTSQTVR.js.map +0 -1
  252. package/dist/chunk-HYQJJLBC.js.map +0 -1
  253. package/dist/chunk-JY5YINUH.js.map +0 -1
  254. package/dist/chunk-L6MGAPBX.js.map +0 -1
  255. package/dist/chunk-L7OWFJUU.js.map +0 -1
  256. package/dist/chunk-M6V7Y7CP.js.map +0 -1
  257. package/dist/chunk-O2P2KTKN.js.map +0 -1
  258. package/dist/chunk-TNVO3EVF.js.map +0 -1
  259. package/dist/chunk-Y7YKIIYS.js.map +0 -1
  260. package/dist/chunk-YLSSQJZM.js.map +0 -1
  261. /package/dist/{chunk-35L5YMYQ.js.map → chunk-2QB4WIU5.js.map} +0 -0
  262. /package/dist/{chunk-AAXLQFC7.js.map → chunk-3FIIMP7I.js.map} +0 -0
  263. /package/dist/{chunk-6A6GZRXD.js.map → chunk-3VXS7O3X.js.map} +0 -0
  264. /package/dist/{chunk-JYMXYSDP.js.map → chunk-5CAWRMDX.js.map} +0 -0
  265. /package/dist/{chunk-647DEGIU.js.map → chunk-5WJFCQFN.js.map} +0 -0
  266. /package/dist/{chunk-K6KBASL2.js.map → chunk-72L5C74V.js.map} +0 -0
  267. /package/dist/{chunk-BI7YMVKZ.js.map → chunk-B2JSUFDX.js.map} +0 -0
  268. /package/dist/{chunk-7J5JR33K.js.map → chunk-BBBHPK2Q.js.map} +0 -0
  269. /package/dist/{chunk-UZ2CEJOO.js.map → chunk-CSJ7WNXU.js.map} +0 -0
  270. /package/dist/{chunk-LMIOWP6H.js.map → chunk-D34PZJH3.js.map} +0 -0
  271. /package/dist/{chunk-TKLPPAS5.js.map → chunk-E5GYHN4X.js.map} +0 -0
  272. /package/dist/{chunk-SUZLGB5I.js.map → chunk-E6K2UZGR.js.map} +0 -0
  273. /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
  274. /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
  275. /package/dist/{chunk-SAJDNO43.js.map → chunk-IGMD6S76.js.map} +0 -0
  276. /package/dist/{chunk-EZFQO77P.js.map → chunk-IPYV7BLH.js.map} +0 -0
  277. /package/dist/{chunk-KARMRTTM.js.map → chunk-J2RUDZVJ.js.map} +0 -0
  278. /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
  279. /package/dist/{chunk-VJB63DUM.js.map → chunk-K3PMMW23.js.map} +0 -0
  280. /package/dist/{chunk-J6DYHBID.js.map → chunk-LIN4A2BW.js.map} +0 -0
  281. /package/dist/{chunk-7JS2SPRW.js.map → chunk-LKRXLWCC.js.map} +0 -0
  282. /package/dist/{chunk-FXZUVZON.js.map → chunk-LWZ2K225.js.map} +0 -0
  283. /package/dist/{chunk-MJ6EAND6.js.map → chunk-Q7BGMLCX.js.map} +0 -0
  284. /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
  285. /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
  286. /package/dist/{chunk-KUFDUXYB.js.map → chunk-U6ODZJCH.js.map} +0 -0
  287. /package/dist/{chunk-3WLS7Z7D.js.map → chunk-UMOHHWXY.js.map} +0 -0
  288. /package/dist/{chunk-S4JXSC4D.js.map → chunk-V6SRBQMN.js.map} +0 -0
  289. /package/dist/{chunk-33XGC4YU.js.map → chunk-YEGZIYVM.js.map} +0 -0
  290. /package/dist/{chunk-XMVPNCYM.js.map → chunk-YQGVO3ZU.js.map} +0 -0
  291. /package/dist/{chunk-OJFE5PK6.js.map → chunk-ZZO5MRMV.js.map} +0 -0
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  rowGutters
3
- } from "./chunk-3WLS7Z7D.js";
3
+ } from "./chunk-UMOHHWXY.js";
4
4
  import {
5
5
  cellRailsTemplate
6
- } from "./chunk-7J5JR33K.js";
6
+ } from "./chunk-BBBHPK2Q.js";
7
7
  import {
8
8
  cellTracks,
9
9
  compactCellTracks,
@@ -55,4 +55,4 @@ export {
55
55
  useRowLayout,
56
56
  StandaloneContainer
57
57
  };
58
- //# sourceMappingURL=chunk-SUZLGB5I.js.map
58
+ //# sourceMappingURL=chunk-E6K2UZGR.js.map
@@ -1,9 +1,3 @@
1
- import {
2
- pulseAnimation,
3
- rotateAnimation,
4
- scaleInAnimation,
5
- shimmerAnimation
6
- } from "./chunk-MTEQEPNY.js";
7
1
  import {
8
2
  ACTIVE_SCALE,
9
3
  AVATAR_SIZES,
@@ -23,6 +17,12 @@ import {
23
17
  SPINNER,
24
18
  STATUS_DOT
25
19
  } from "./chunk-6ZZGK5DT.js";
20
+ import {
21
+ pulseAnimation,
22
+ rotateAnimation,
23
+ scaleInAnimation,
24
+ shimmerAnimation
25
+ } from "./chunk-MTEQEPNY.js";
26
26
  import {
27
27
  absoluteInk,
28
28
  controlNeutral,
@@ -277,4 +277,4 @@ function AvatarView(props) {
277
277
  export {
278
278
  AvatarView
279
279
  };
280
- //# sourceMappingURL=chunk-7XSCEHGA.js.map
280
+ //# sourceMappingURL=chunk-EOQ6EKTS.js.map
@@ -1,43 +1,50 @@
1
1
  import {
2
- GridMain
3
- } from "./chunk-JY5YINUH.js";
4
- import {
5
- FilterDialog,
6
- GridFilterPanel
7
- } from "./chunk-TKLPPAS5.js";
8
- import {
9
- DataViewsEmpty
10
- } from "./chunk-375HTCF2.js";
2
+ ShellEmpty
3
+ } from "./chunk-Y2CCXB7R.js";
11
4
  import {
12
5
  InlineFilterControls
13
- } from "./chunk-Y7YKIIYS.js";
6
+ } from "./chunk-TQXB2OHP.js";
14
7
  import {
15
8
  GridHeaderRow
16
9
  } from "./chunk-X3AFXHY5.js";
10
+ import {
11
+ GridMain
12
+ } from "./chunk-WQ32YFM5.js";
13
+ import {
14
+ FilterDialog,
15
+ GridFilterPanel
16
+ } from "./chunk-E5GYHN4X.js";
17
17
  import {
18
18
  DataViewsPagination
19
19
  } from "./chunk-XZFTRGRW.js";
20
20
  import {
21
- toOverflowFields,
22
21
  useFilterOverflow
23
- } from "./chunk-6QYKZMEE.js";
22
+ } from "./chunk-CSLBRJ7N.js";
23
+ import {
24
+ toOverflowFields,
25
+ toggleQuick
26
+ } from "./chunk-GCYGVWOI.js";
24
27
  import {
25
28
  allOnPageSelected,
26
29
  resolveSelectionExtra
27
30
  } from "./chunk-5YDS6HO3.js";
28
31
  import {
29
32
  ScopeTabsSlot
30
- } from "./chunk-VJB63DUM.js";
33
+ } from "./chunk-K3PMMW23.js";
31
34
  import {
32
35
  ShellToolbar
33
- } from "./chunk-L6MGAPBX.js";
36
+ } from "./chunk-RCZ4KL2H.js";
37
+ import {
38
+ SHELL_PROPS,
39
+ useStickyBarTop
40
+ } from "./chunk-4IE66GY2.js";
34
41
  import {
35
42
  togglePillValues
36
43
  } from "./chunk-XZE5FIRB.js";
37
44
  import {
38
45
  DataViewsLayoutProvider,
39
46
  useDataViewsLayout
40
- } from "./chunk-JYMXYSDP.js";
47
+ } from "./chunk-5CAWRMDX.js";
41
48
  import {
42
49
  useDataViewsCopy
43
50
  } from "./chunk-KHG57NAE.js";
@@ -49,7 +56,7 @@ import {
49
56
  } from "./chunk-WEBEOBN5.js";
50
57
 
51
58
  // src/components/data-display/DataViews/data-views-grid-parts.tsx
52
- import { useEffect, useState } from "react";
59
+ import { useEffect, useRef, useState } from "react";
53
60
  import { jsx, jsxs } from "react/jsx-runtime";
54
61
  function LayoutStateSync({
55
62
  c
@@ -68,12 +75,13 @@ function useGridShellFilters({
68
75
  rangeFields,
69
76
  testIdPrefix,
70
77
  alwaysShowSearch,
71
- hasExport
78
+ hasExport,
79
+ quickFilters
72
80
  }) {
73
81
  const { state } = c;
74
82
  const [openControls, setOpenControls] = useState(0);
75
83
  const split = useFilterOverflow(
76
- toOverflowFields(fields, rangeFields),
84
+ toOverflowFields(fields, rangeFields, quickFilters),
77
85
  state.pills,
78
86
  c.ranges,
79
87
  openControls > 0,
@@ -81,7 +89,7 @@ function useGridShellFilters({
81
89
  );
82
90
  const showInline = inlineFilters;
83
91
  const useModal = false;
84
- const inlineVisible = showInline && (alwaysShowSearch || fields.length > 0 || rangeFields.length > 0 || state.search !== "");
92
+ const inlineVisible = showInline && (alwaysShowSearch || fields.length > 0 || rangeFields.length > 0 || quickFilters.length > 0 || state.search !== "");
85
93
  const filterProps = {
86
94
  testIdPrefix,
87
95
  search: state.search,
@@ -94,7 +102,8 @@ function useGridShellFilters({
94
102
  onTogglePill: (fieldId, value, checked) => c.patch(({ pills }) => ({ pills: { ...pills, [fieldId]: togglePillValues(pills[fieldId], value, checked) } })),
95
103
  onChangeRange: (fieldId, range) => c.patch({ ranges: { ...c.ranges, [fieldId]: range } }),
96
104
  onClearField: (fieldId) => c.patch({ pills: { ...state.pills, [fieldId]: [] } }),
97
- onClearAll: () => c.patch({ search: "", pills: {}, ranges: {} })
105
+ onClearAll: () => c.patch({ search: "", pills: {}, ranges: {} }),
106
+ onToggleQuick: (quick) => c.patch(({ pills }) => ({ pills: toggleQuick(pills, quick) }))
98
107
  };
99
108
  return {
100
109
  showInline,
@@ -112,15 +121,9 @@ function ShellStack({
112
121
  const copy = useDataViewsCopy();
113
122
  const { c, testIdPrefix, dataTestId, scopes = [], emptyState, inlineFilters = false } = props;
114
123
  const { showInline, useModal, inlineVisible, filterProps, split, onControlOpenChange } = filters;
115
- const body = /* @__PURE__ */ jsx(
116
- DataViewsEmpty,
117
- {
118
- filtered: c.activeFilterCount > 0 || c.state.search !== "",
119
- onClearFilters: () => c.patch({ search: "", pills: {}, ranges: {} }),
120
- emptyState,
121
- testIdPrefix
122
- }
123
- );
124
+ const shellRef = useRef(null);
125
+ useStickyBarTop(shellRef, props.stickyToolbar === true);
126
+ const body = /* @__PURE__ */ jsx(ShellEmpty, { c, emptyState, testIdPrefix });
124
127
  return /* @__PURE__ */ jsx(
125
128
  TableFilter,
126
129
  {
@@ -128,7 +131,7 @@ function ShellStack({
128
131
  open: c.filterOpen,
129
132
  onOpenChange: c.setFilterOpen,
130
133
  hasActiveFilters: c.activeFilterCount > 0,
131
- children: /* @__PURE__ */ jsxs(default2, { spacing: 0, "data-testid": dataTestId ? `${dataTestId}-container` : void 0, children: [
134
+ children: /* @__PURE__ */ jsxs(default2, { ref: shellRef, spacing: 0, "data-testid": dataTestId ? `${dataTestId}-container` : void 0, ...props.stickyToolbar ? SHELL_PROPS : {}, children: [
132
135
  /* @__PURE__ */ jsx(GridHeaderRow, { title: props.title, headerActions: props.headerActions, testIdPrefix }),
133
136
  /* @__PURE__ */ jsx(
134
137
  ShellToolbar,
@@ -156,7 +159,8 @@ function ShellStack({
156
159
  toolbarRightSlot: props.toolbarRightSlot,
157
160
  compactControls: showInline && split.compactControls,
158
161
  counterHidden: showInline && split.counterHidden,
159
- showInline
162
+ showInline,
163
+ sticky: props.stickyToolbar === true
160
164
  }
161
165
  ),
162
166
  /* @__PURE__ */ jsx(
@@ -186,7 +190,8 @@ function ShellStack({
186
190
  selectable: props.selectable !== false,
187
191
  dataTestId,
188
192
  testIdPrefix,
189
- emptyState: body
193
+ emptyState: body,
194
+ stickyHead: props.stickyToolbar === true
190
195
  }
191
196
  ),
192
197
  /* @__PURE__ */ jsx(DataViewsPagination, { c, testIdPrefix })
@@ -219,7 +224,8 @@ function GridShell(props) {
219
224
  rangeFields,
220
225
  testIdPrefix,
221
226
  alwaysShowSearch,
222
- hasExport: props.exportConfig !== void 0
227
+ hasExport: props.exportConfig !== void 0,
228
+ quickFilters: props.quickFilters ?? []
223
229
  });
224
230
  return /* @__PURE__ */ jsxs(
225
231
  DataViewsLayoutProvider,
@@ -241,4 +247,4 @@ function GridShell(props) {
241
247
  export {
242
248
  GridShell
243
249
  };
244
- //# sourceMappingURL=chunk-L7OWFJUU.js.map
250
+ //# sourceMappingURL=chunk-EZAQIEYB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-grid-parts.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { TableFilter } from \"../../layout/TableFilter\";\nimport { Stack } from \"../../../mui/Stack\";\n\nimport {\n DataViewsLayoutProvider,\n useDataViewsLayout,\n type DataViewsLayout,\n} from \"./data-views-layout-context\";\nimport { FilterDialog, GridFilterPanel } from \"./data-views-filter-panel\";\nimport { GridMain } from \"./data-views-grid-bodies\";\nimport type { ListGroupConfig } from \"./list-card-rails\";\nimport { InlineFilterControls } from \"./data-views-inline-bar\";\nimport { toOverflowFields, useFilterOverflow, type OverflowSplit } from \"./data-views-overflow\";\nimport { GridHeaderRow } from \"./data-views-header-row\";\nimport { allOnPageSelected, resolveSelectionExtra, type SelectionExtraRender } from \"./data-views-selection-extra\";\nimport { ShellToolbar } from \"./data-views-shell-toolbar\";\nimport type { DisplayPanelView } from \"./data-views-display-panel\";\nimport type { DataViewExport } from \"./data-views-export\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { ShellEmpty } from \"./data-views-empty\";\nimport { DataViewsPagination } from \"./data-views-pagination\";\nimport type { BoardConfig } from \"./DataViewsBoard\";\nimport { type ScopeConfig } from \"./data-views-scopes\";\nimport { ScopeTabsSlot } from \"./data-views-scope-tabs\";\nimport { SHELL_PROPS, useStickyBarTop } from \"./data-views-sticky-head\";\nimport { togglePillValues } from \"./data-views-grid-helpers\";\nimport { toggleQuick } from \"./data-views-overflow-fields\";\nimport type {\n DataViewCardSelection,\n FilterFieldConfig,\n QuickFilterConfig,\n RangeFieldConfig,\n RangeValue,\n RowAction,\n} from \"./data-views-types\";\nimport type { DataViewRowDetail } from \"./data-views-row-detail\";\nimport type { DataViewsController } from \"./use-data-views-state\";\n\n/* ── Layout ⇄ view-state mirror ──────────────────────────────────────────── */\n\n/**\n * Mirrors the LIVE layout back into the view state, so saving a view captures\n * the layout the user is actually looking at.\n *\n * A component rather than a callback prop because only something INSIDE the\n * provider can read the layout, and only the controller can write the state.\n * The `stored !== layout` guard is what makes it idempotent: `c` is rebuilt on\n * every render, so an unguarded effect here would patch → re-render → patch.\n *\n * It re-fires when `stored` changes too, which is the case that matters after\n * applying a saved view: `appliedState` REPLACES the state, so a view saved\n * before layouts were captured clears `state.layout`, and the mirror puts the\n * current one back rather than leaving the next save with nothing to store.\n */\nfunction LayoutStateSync<T extends Record<string, unknown>>({\n c,\n}: {\n c: DataViewsController<T>;\n}): null {\n const { layout } = useDataViewsLayout();\n const stored = c.state.layout;\n useEffect(() => {\n if (stored !== layout) c.patch({ layout });\n // `c` is intentionally out of the deps — see the guard above.\n }, [layout, stored]);\n return null;\n}\n\n/* ── Shell (composes toolbar + body + panel) ─────────────────────────────── */\n\n/** The shared filter-surface props consumed by the inline bar, panel, and modal. */\ninterface FilterSurfaceProps<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 /** Press a quick chip (its field becomes `[value]`), or release the pressed one. */\n onToggleQuick: (quick: QuickFilterConfig) => void;\n}\n\n/**\n * Derives the responsive filter state (which surface to show at this width) and\n * the filter-mutation handlers from the controller — pulled out of `GridShell`\n * so the component body stays under the size/complexity budget.\n */\n/** Grouped rather than positional: the list had grown past readability. */\ninterface GridShellFiltersArgs<T extends Record<string, unknown>> {\n c: DataViewsController<T>;\n inlineFilters: boolean;\n fields: FilterFieldConfig<T>[];\n rangeFields: RangeFieldConfig<T>[];\n testIdPrefix: string;\n alwaysShowSearch: boolean;\n /** Is \"Exportar\" on the bar? Half the right cluster's cost when it is not. */\n hasExport: boolean;\n quickFilters: QuickFilterConfig[];\n}\n\nfunction useGridShellFilters<T extends Record<string, unknown>>({\n c,\n inlineFilters,\n fields,\n rangeFields,\n testIdPrefix,\n alwaysShowSearch,\n hasExport,\n quickFilters,\n}: GridShellFiltersArgs<T>): {\n showInline: boolean;\n useModal: boolean;\n inlineVisible: boolean;\n filterProps: FilterSurfaceProps<T>;\n split: OverflowSplit<T>;\n onControlOpenChange: (open: boolean) => void;\n} {\n const { state } = c;\n // How many filter controls are open. A COUNT, not a flag: closing one popover\n // by opening another overlaps, and a boolean would unfreeze mid-handover.\n const [openControls, setOpenControls] = useState(0);\n // ONE measurement for the whole shell: the filter row decides which controls\n // it can keep, and the TOOLBAR needs the same answer to drop its labels.\n // Measuring twice would let the two disagree at the crossover width.\n const split = useFilterOverflow(\n toOverflowFields(fields, rangeFields, quickFilters),\n state.pills,\n c.ranges,\n openControls > 0,\n hasExport,\n );\n // THE BAR RENDERS AT EVERY WIDTH. It used to be swapped for a full-screen\n // filter MODAL below `lg`, which was the responsive strategy before the\n // measured ladder existed — and the two now do the same job, badly together:\n // the modal took the bar away at 1199px, and with it the very degradation\n // (labels off, search collapsed, filters into \"Mais\") that exists to make a\n // narrow bar work. So a 900px window got no bar and no ladder, and the\n // operator lost the search entirely rather than gaining a compact one.\n //\n // The ladder is measured, so it already covers every width the modal did.\n const showInline = inlineFilters;\n const useModal = false;\n const inlineVisible =\n showInline &&\n (alwaysShowSearch ||\n fields.length > 0 ||\n rangeFields.length > 0 ||\n quickFilters.length > 0 ||\n state.search !== \"\");\n const filterProps: FilterSurfaceProps<T> = {\n testIdPrefix,\n search: state.search,\n fields,\n rangeFields,\n pills: state.pills,\n ranges: c.ranges,\n onSearchChange: (value) => c.patch({ search: value }),\n // Updater, never the render's `state` — see {@link DataViewStatePatch}.\n onTogglePill: (fieldId, value, checked) =>\n c.patch(({ pills }) => ({ pills: { ...pills, [fieldId]: togglePillValues(pills[fieldId], value, checked) } })),\n onChangeRange: (fieldId, range) => c.patch({ ranges: { ...c.ranges, [fieldId]: range } }),\n onClearField: (fieldId) => c.patch({ pills: { ...state.pills, [fieldId]: [] } }),\n onClearAll: () => c.patch({ search: \"\", pills: {}, ranges: {} }),\n onToggleQuick: (quick) => c.patch(({ pills }) => ({ pills: toggleQuick(pills, quick) })),\n };\n return {\n showInline,\n useModal,\n inlineVisible,\n filterProps,\n split,\n onControlOpenChange: (open) =>\n setOpenControls((count) => Math.max(0, count + (open ? 1 : -1))),\n };\n}\n\ninterface GridShellProps<T extends Record<string, unknown>> {\n c: DataViewsController<T>;\n rows: T[];\n fields: FilterFieldConfig<T>[];\n rangeFields: RangeFieldConfig<T>[];\n getRowId: (row: T) => string | number;\n testIdPrefix: string;\n dataTestId?: string;\n emptyState?: React.ReactNode;\n toolbarRightSlot?: React.ReactNode;\n rowActions?: RowAction<T>[];\n bulkActions?: (selectedRows: T[], clearSelection: () => void) => React.ReactNode;\n /** A widening control beside the selection count — see `resolveSelectionExtra`. */\n selectionExtra?: SelectionExtraRender<T>;\n /** Opt-in \"Grade\" (cards) layout: renders each row as an entity-supplied card.\n * Omit ⇒ table only (no layout toggle). */\n renderCard?: (row: T, selection: DataViewCardSelection) => React.ReactNode;\n /**\n * Opt-in \"Quadro\" (board) layout. Needs `renderCard` too — the board reuses\n * the entity's card, so a board config without one simply offers no board\n * rather than failing: that is a config gap, not a runtime error.\n */\n board?: BoardConfig<T>;\n /** Opt-in \"Lista\" layout: one full-width, entity-rendered row per record. */\n renderListRow?: (row: T, selection: DataViewCardSelection) => React.ReactNode;\n /** The Lista's shared columns, so its rows line up by construction. */\n listGroup?: ListGroupConfig<T>;\n /** Opt-in expandable rows, drawn by the table layout only. */\n rowDetail?: DataViewRowDetail<T>;\n /** Row selection, on by default. False ⇒ no checkboxes in any layout, no select-all. */\n selectable?: boolean;\n /** The page-level partition rendered as tabs under the toolbar. */\n scopes?: ScopeConfig[];\n /**\n * The row field the scopes partition by. Compared against the board's\n * `groupBy` so the two are not shown as the same partition twice.\n */\n scopeFieldId?: string;\n /** Per-sort-field value kind, so directions read in the column's own terms. */\n sortKinds?: Record<string, string>;\n /** The saved-view chrome bracketing the Exibir panel. */\n displayView?: DisplayPanelView;\n /** Injected export — the host re-queries; the grid never fetches. */\n exportConfig?: DataViewExport;\n /** Page title in the grid's own header row, above the scopes + toolbar. */\n title?: string;\n /** Primary page actions rendered at the header row's right. */\n headerActions?: React.ReactNode;\n /** Which layout to show first when the user has expressed no preference (default \"table\"). */\n defaultLayout?: DataViewsLayout;\n /** Pin to `defaultLayout`, ignoring the remembered preference (stories/docs). */\n ignoreStoredLayout?: boolean;\n /**\n * Opt into the responsive inline filter UX: a collapsible filter row below the\n * toolbar on wide screens and a modal on narrow ones. When false (default),\n * keep the classic slide-in filter panel opened by the \"Filtros\" button.\n */\n inlineFilters?: boolean;\n /**\n * Keep the inline search box on screen even with no filter fields and no\n * active search. Without it a grid whose only filter IS the search (`fields`\n * empty) can never OFFER one: the row renders only once a search exists, so\n * the operator would have to hand-edit the URL to start one. Default false —\n * every grid that ships filter fields already shows the row.\n */\n alwaysShowSearch?: boolean;\n /** One-click toggle chips at the head of the bar — see `QuickFilterConfig`. */\n quickFilters?: QuickFilterConfig[];\n /** Pin the toolbar and the table header while the page scrolls. */\n stickyToolbar?: boolean;\n}\n\n/** The scrollable content region: scope tabs, toolbar, filter bar, body, pager. */\nfunction ShellStack<T extends Record<string, unknown>>({\n props,\n filters,\n}: {\n props: GridShellProps<T>;\n filters: ReturnType<typeof useGridShellFilters<T>>;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { c, testIdPrefix, dataTestId, scopes = [], emptyState, inlineFilters = false } = props;\n const { showInline, useModal, inlineVisible, filterProps, split, onControlOpenChange } = filters;\n const shellRef = useRef<HTMLDivElement>(null);\n useStickyBarTop(shellRef, props.stickyToolbar === true);\n const body = <ShellEmpty c={c} emptyState={emptyState} testIdPrefix={testIdPrefix} />;\n return (\n <TableFilter\n copy={copy.tableFilter} open={c.filterOpen} onOpenChange={c.setFilterOpen}\n hasActiveFilters={c.activeFilterCount > 0}\n >\n <Stack ref={shellRef} spacing={0} data-testid={dataTestId ? `${dataTestId}-container` : undefined} {...(props.stickyToolbar ? SHELL_PROPS : {})}>\n <GridHeaderRow title={props.title} headerActions={props.headerActions} testIdPrefix={testIdPrefix} />\n <ShellToolbar\n c={c}\n rows={props.rows}\n sortKinds={props.sortKinds}\n displayView={props.displayView}\n exportConfig={props.exportConfig}\n filterControls={\n inlineVisible ? (\n <InlineFilterControls\n {...filterProps} split={split} activeFilterCount={c.activeFilterCount}\n onControlOpenChange={onControlOpenChange}\n />\n ) : undefined\n }\n barRef={split.barRef}\n testIdPrefix={testIdPrefix}\n rowActions={props.rowActions}\n bulkActions={props.bulkActions}\n selectionExtra={resolveSelectionExtra(props)}\n allOnPageSelected={allOnPageSelected(c, props.getRowId)}\n toolbarRightSlot={props.toolbarRightSlot}\n compactControls={showInline && split.compactControls}\n counterHidden={showInline && split.counterHidden}\n showInline={showInline}\n sticky={props.stickyToolbar === true}\n />\n <ScopeTabsSlot\n scopes={scopes} scopeFieldId={props.scopeFieldId} board={props.board}\n value={c.scope} onChange={c.setScope} counts={c.scopeCounts}\n testIdPrefix={testIdPrefix}\n />\n <TableFilter.Layout>\n <TableFilter.Main>\n <GridMain\n c={c}\n getRowId={props.getRowId}\n renderCard={props.renderCard}\n renderListRow={props.renderListRow}\n listGroup={props.listGroup}\n board={props.board}\n rowDetail={props.rowDetail} selectable={props.selectable !== false}\n dataTestId={dataTestId}\n testIdPrefix={testIdPrefix}\n emptyState={body}\n stickyHead={props.stickyToolbar === true}\n />\n <DataViewsPagination c={c} testIdPrefix={testIdPrefix} />\n </TableFilter.Main>\n {inlineFilters ? null : <GridFilterPanel {...filterProps} />}\n </TableFilter.Layout>\n {useModal && <FilterDialog open={c.filterOpen} onClose={() => c.setFilterOpen(false)} {...filterProps} />}\n </Stack>\n </TableFilter>\n );\n}\n\nexport function GridShell<T extends Record<string, unknown>>(props: GridShellProps<T>): React.JSX.Element {\n const {\n c,\n fields,\n rangeFields,\n testIdPrefix,\n renderCard,\n renderListRow,\n board,\n defaultLayout,\n ignoreStoredLayout,\n inlineFilters = false,\n alwaysShowSearch = false,\n } = props;\n const filters = useGridShellFilters({\n c,\n inlineFilters,\n fields,\n rangeFields,\n testIdPrefix,\n alwaysShowSearch,\n hasExport: props.exportConfig !== undefined,\n quickFilters: props.quickFilters ?? [],\n });\n return (\n <DataViewsLayoutProvider\n canUseCards={Boolean(renderCard)}\n canUseList={Boolean(renderListRow)}\n // The board reuses the entity's card, so it needs BOTH — a `board` with no\n // `renderCard` offers no board rather than throwing.\n canUseBoard={Boolean(board && renderCard)}\n defaultLayout={defaultLayout}\n ignoreStoredLayout={ignoreStoredLayout}\n viewLayout={c.state.layout}\n >\n <LayoutStateSync c={c} />\n <ShellStack props={props} filters={filters} />\n </DataViewsLayoutProvider>\n );\n}\n"],"mappings":"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","names":["default"]}
@@ -0,0 +1,59 @@
1
+ import {
2
+ isRangeSet
3
+ } from "./chunk-DNT5PZLF.js";
4
+
5
+ // src/components/data-display/DataViews/data-views-overflow-fields.ts
6
+ function toOverflowFields(fields, rangeFields, quickFilters = []) {
7
+ const chipFields = new Set(quickFilters.map((quick) => quick.fieldId));
8
+ return [
9
+ ...quickFilters.map((quick) => ({
10
+ id: `quick:${quick.id}`,
11
+ label: quick.label,
12
+ group: "quick",
13
+ quick
14
+ })),
15
+ ...fields.filter((pill) => !chipFields.has(pill.id)).map((pill) => ({ id: pill.id, label: pill.label, group: "pill", pill, pinned: pill.inMore === true })),
16
+ ...rangeFields.map((range) => ({
17
+ id: range.id,
18
+ label: range.label,
19
+ group: "range",
20
+ range,
21
+ pinned: range.inMore === true
22
+ }))
23
+ ];
24
+ }
25
+ function isQuickActive(quick, pills) {
26
+ const selected = pills[quick.fieldId] ?? [];
27
+ return selected.length === 1 && selected[0] === quick.value;
28
+ }
29
+ function anyApplied(all, pills, ranges) {
30
+ return all.some((field) => {
31
+ if (field.group === "range") return isRangeSet(ranges[field.id]);
32
+ const id = field.quick?.fieldId ?? field.id;
33
+ return (pills[id]?.length ?? 0) > 0;
34
+ });
35
+ }
36
+ function keepChipsInOrder(split, chips, cost) {
37
+ const firstOut = chips.findIndex((chip) => split.overflow.includes(chip));
38
+ if (firstOut < 0) return split;
39
+ const evicted = chips.slice(firstOut).filter((chip) => split.inline.includes(chip));
40
+ if (evicted.length === 0) return split;
41
+ return {
42
+ inline: split.inline.filter((field) => !evicted.includes(field)),
43
+ overflow: [...chips.slice(firstOut), ...split.overflow.filter((field) => !chips.includes(field))],
44
+ used: split.used - evicted.reduce((sum, chip) => sum + cost(chip), 0)
45
+ };
46
+ }
47
+ function toggleQuick(pills, quick) {
48
+ const pressed = isQuickActive(quick, pills);
49
+ return { ...pills, [quick.fieldId]: pressed ? [] : [quick.value] };
50
+ }
51
+
52
+ export {
53
+ toOverflowFields,
54
+ isQuickActive,
55
+ anyApplied,
56
+ keepChipsInOrder,
57
+ toggleQuick
58
+ };
59
+ //# sourceMappingURL=chunk-GCYGVWOI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-overflow-fields.ts"],"sourcesContent":["/**\n * WHICH CONTROLS THE BAR DECLARES — split from `data-views-overflow` at the\n * file-size gate. That module decides where each control goes; this one only\n * lists them, in the order the bar renders them.\n */\nimport type { OverflowField } from \"./data-views-overflow\";\nimport { isRangeSet } from \"./data-views-overflow-costs\";\nimport type { FilterFieldConfig, QuickFilterConfig, RangeFieldConfig, RangeValue } from \"./data-views-types\";\n\n/**\n * Every declared control in the order the bar renders them: quick chips first,\n * then pills, then ranges.\n *\n * A pill field a quick chip writes to is NOT a control of its own — the chips\n * stand in for it (see `QuickFilterConfig`) — so it is left out here, and only\n * here: it stays in `fields`, where the active count and saved views read it.\n */\nexport function toOverflowFields<T extends Record<string, unknown>>(\n fields: FilterFieldConfig<T>[],\n rangeFields: RangeFieldConfig<T>[],\n quickFilters: QuickFilterConfig[] = [],\n): OverflowField<T>[] {\n const chipFields = new Set(quickFilters.map((quick) => quick.fieldId));\n return [\n ...quickFilters.map((quick) => ({\n id: `quick:${quick.id}`,\n label: quick.label,\n group: \"quick\" as const,\n quick,\n })),\n ...fields\n .filter((pill) => !chipFields.has(pill.id))\n .map((pill) => ({ id: pill.id, label: pill.label, group: \"pill\" as const, pill, pinned: pill.inMore === true })),\n ...rangeFields.map((range) => ({\n id: range.id,\n label: range.label,\n group: \"range\" as const,\n range,\n pinned: range.inMore === true,\n })),\n ];\n}\n\n/**\n * Is this quick chip pressed — its one value the field's WHOLE selection?\n *\n * Exactly, not \"includes\": a field holding two values (from a saved view, the\n * URL or the side panel) is not what either chip applies, and reading both as\n * pressed made pressing one clear the other.\n */\nexport function isQuickActive(quick: QuickFilterConfig, pills: Record<string, string[]>): boolean {\n const selected = pills[quick.fieldId] ?? [];\n return selected.length === 1 && selected[0] === quick.value;\n}\n\n/**\n * Is any DECLARED filter applied — a pill value or a bounded range, wherever it\n * is drawn (on the bar, in \"Mais\", or as a chip)? Only declared ids count: the\n * bar draws \"Limpar\" on the active count, which ignores a stale key a saved view\n * still carries for a field since removed.\n */\nexport function anyApplied<T extends Record<string, unknown>>(\n all: OverflowField<T>[],\n pills: Record<string, string[]>,\n ranges: Record<string, RangeValue>,\n): boolean {\n return all.some((field) => {\n if (field.group === \"range\") return isRangeSet(ranges[field.id]);\n const id = field.quick?.fieldId ?? field.id;\n return (pills[id]?.length ?? 0) > 0;\n });\n}\n\n/**\n * Quick chips stay a PREFIX of their declared order on the bar.\n *\n * The keep-what-fits loop skips a control that does not fit and tries the next,\n * which for pills is right (any narrower one is worth the room) and for chips\n * is not: \"Zerado\" alone on the bar, with \"Estoque baixo\" in \"Mais\", reads as a\n * different bar from the one declared. So the first chip that went to \"Mais\"\n * takes every later chip with it. Their room is NOT re-spent here — `used`\n * drops, and the ladder's later passes can hand it to the furniture.\n */\nexport function keepChipsInOrder<T extends Record<string, unknown>>(\n split: { inline: OverflowField<T>[]; overflow: OverflowField<T>[]; used: number },\n chips: OverflowField<T>[],\n cost: (field: OverflowField<T>) => number,\n): { inline: OverflowField<T>[]; overflow: OverflowField<T>[]; used: number } {\n const firstOut = chips.findIndex((chip) => split.overflow.includes(chip));\n if (firstOut < 0) return split;\n const evicted = chips.slice(firstOut).filter((chip) => split.inline.includes(chip));\n if (evicted.length === 0) return split;\n return {\n inline: split.inline.filter((field) => !evicted.includes(field)),\n overflow: [...chips.slice(firstOut), ...split.overflow.filter((field) => !chips.includes(field))],\n used: split.used - evicted.reduce((sum, chip) => sum + cost(chip), 0),\n };\n}\n\n\n\n/**\n * A quick chip's press, as a pill write. Exclusive within the field: the chip's\n * value REPLACES the selection, and pressing the pressed chip empties it.\n */\nexport function toggleQuick(pills: Record<string, string[]>, quick: QuickFilterConfig): Record<string, string[]> {\n const pressed = isQuickActive(quick, pills);\n return { ...pills, [quick.fieldId]: pressed ? [] : [quick.value] };\n}\n\n"],"mappings":";;;;;AAiBO,SAAS,iBACd,QACA,aACA,eAAoC,CAAC,GACjB;AACpB,QAAM,aAAa,IAAI,IAAI,aAAa,IAAI,CAAC,UAAU,MAAM,OAAO,CAAC;AACrE,SAAO;AAAA,IACL,GAAG,aAAa,IAAI,CAAC,WAAW;AAAA,MAC9B,IAAI,SAAS,MAAM,EAAE;AAAA,MACrB,OAAO,MAAM;AAAA,MACb,OAAO;AAAA,MACP;AAAA,IACF,EAAE;AAAA,IACF,GAAG,OACA,OAAO,CAAC,SAAS,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,EACzC,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,OAAO,OAAO,QAAiB,MAAM,QAAQ,KAAK,WAAW,KAAK,EAAE;AAAA,IACjH,GAAG,YAAY,IAAI,CAAC,WAAW;AAAA,MAC7B,IAAI,MAAM;AAAA,MACV,OAAO,MAAM;AAAA,MACb,OAAO;AAAA,MACP;AAAA,MACA,QAAQ,MAAM,WAAW;AAAA,IAC3B,EAAE;AAAA,EACJ;AACF;AASO,SAAS,cAAc,OAA0B,OAA0C;AAChG,QAAM,WAAW,MAAM,MAAM,OAAO,KAAK,CAAC;AAC1C,SAAO,SAAS,WAAW,KAAK,SAAS,CAAC,MAAM,MAAM;AACxD;AAQO,SAAS,WACd,KACA,OACA,QACS;AACT,SAAO,IAAI,KAAK,CAAC,UAAU;AACzB,QAAI,MAAM,UAAU,QAAS,QAAO,WAAW,OAAO,MAAM,EAAE,CAAC;AAC/D,UAAM,KAAK,MAAM,OAAO,WAAW,MAAM;AACzC,YAAQ,MAAM,EAAE,GAAG,UAAU,KAAK;AAAA,EACpC,CAAC;AACH;AAYO,SAAS,iBACd,OACA,OACA,MAC4E;AAC5E,QAAM,WAAW,MAAM,UAAU,CAAC,SAAS,MAAM,SAAS,SAAS,IAAI,CAAC;AACxE,MAAI,WAAW,EAAG,QAAO;AACzB,QAAM,UAAU,MAAM,MAAM,QAAQ,EAAE,OAAO,CAAC,SAAS,MAAM,OAAO,SAAS,IAAI,CAAC;AAClF,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SAAO;AAAA,IACL,QAAQ,MAAM,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,SAAS,KAAK,CAAC;AAAA,IAC/D,UAAU,CAAC,GAAG,MAAM,MAAM,QAAQ,GAAG,GAAG,MAAM,SAAS,OAAO,CAAC,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,CAAC;AAAA,IAChG,MAAM,MAAM,OAAO,QAAQ,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,IAAI,GAAG,CAAC;AAAA,EACtE;AACF;AAQO,SAAS,YAAY,OAAiC,OAAoD;AAC/G,QAAM,UAAU,cAAc,OAAO,KAAK;AAC1C,SAAO,EAAE,GAAG,OAAO,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;AACnE;","names":[]}
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  renderChartByType
3
- } from "./chunk-6ATXOJVQ.js";
3
+ } from "./chunk-QADTI63U.js";
4
+ import {
5
+ ChartContainer
6
+ } from "./chunk-RIRTW5EU.js";
4
7
  import {
5
8
  getSizeStyles,
6
9
  getVariantStyles,
7
10
  plotHeightPx
8
11
  } from "./chunk-TCWISGSS.js";
9
- import {
10
- ChartContainer
11
- } from "./chunk-RIRTW5EU.js";
12
12
  import {
13
13
  muiColor
14
14
  } from "./chunk-7ZPUN7TV.js";
@@ -111,4 +111,4 @@ var Chart = (props) => {
111
111
  export {
112
112
  Chart
113
113
  };
114
- //# sourceMappingURL=chunk-AMLHEKSV.js.map
114
+ //# sourceMappingURL=chunk-HI7JPDD6.js.map
@@ -53,4 +53,4 @@ export {
53
53
  DATA_VIEWS_LAYOUTS,
54
54
  toSavedViewSummary
55
55
  };
56
- //# sourceMappingURL=chunk-O2P2KTKN.js.map
56
+ //# sourceMappingURL=chunk-HLYYB4O5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-types.ts"],"sourcesContent":["import type { GridColumn, GridSort } from \"../DataGrid\";\nimport type { DropdownMenuItem } from \"../../navigation/DropdownMenu\";\n// A re-export does not bring the name into local scope, and the state/query\n// types below are written in terms of it.\nimport type { RangeValue } from \"./data-views-range-types\";\n\n/**\n * Shared types for the reusable admin \"DataViews\" table (FUT-88): a filter bar\n * (search-across-all + typed multi-select pills + column visibility) whose full\n * state — filters + sort + visible columns — a saved view (FUT-89) can capture\n * and restore. Each table declares its own columns + filter fields.\n */\n\n/**\n * A single, reusable row action. ONE definition drives BOTH the per-row \"⋮\"\n * kebab menu and the bulk-actions menu (tabwoah model): `onSelect` receives the\n * affected rows — `[row]` from a kebab, the whole selection from the bulk menu.\n * Single-item-only actions (e.g. \"Editar\") set `bulk: false` so they never\n * appear in the bulk menu.\n */\nexport interface RowAction<T extends Record<string, unknown>> {\n /** Stable id (also the `data-testid` suffix). */\n id: string;\n /** Menu label. In the kebab, `rowLabel` overrides it per row when provided. */\n label: string;\n /** Menu-item colour (e.g. `\"error\"` for destructive). */\n color?: DropdownMenuItem[\"color\"];\n /**\n * Runs on the affected rows: `[row]` from the kebab, all selected from bulk.\n * May be async — the bulk menu awaits it and only clears the selection once it\n * settles (keeping the selection on failure so the user can retry).\n */\n onSelect: (rows: T[]) => void | Promise<void>;\n /** Include in the bulk menu (2+ selected). Defaults to `true`. */\n bulk?: boolean;\n /** Include in the per-row kebab. Defaults to `true`. */\n row?: boolean;\n /** Per-row kebab label (e.g. `row.active ? \"Inativar\" : \"Ativar\"`). */\n rowLabel?: (row: T) => string;\n /**\n * Per-row applicability (e.g. state-machine guards). `false` hides the\n * kebab item for that row; in bulk the action runs only on the passing\n * rows and is dropped when none pass. Defaults to applicable.\n */\n isVisible?: (row: T) => boolean;\n}\n\n/** Selection state handed to a card renderer so it can drive its own checkbox. */\nexport interface DataViewCardSelection {\n selected: boolean;\n /** Absent when the grid is `selectable={false}`: pass it on as-is, and no checkbox is drawn. */\n onToggleSelect?: () => void;\n /**\n * Card SIZE multiplier from the toolbar zoom slider. The grid sizes the card's\n * width to `base × scale`; a card passes this to {@link BaseCard} `scale` so its\n * padding + typography grow by the same factor — the whole card scales together\n * (scale 2 → ~2× size). The proportion (aspect ratio) stays constant.\n */\n scale: number;\n}\n\n/**\n * The fixed proportions a {@link BaseCard} tile can take. The tile keeps this\n * ratio and grows in BOTH width and height as the zoom slider widens its grid\n * track, so a grid of cards stays visually uniform.\n */\nexport type CardAspectRatio = \"1:1\" | \"4:3\" | \"16:9\" | \"9:16\" | \"3:4\" | \"3:1\";\n\n/** Numeric width/height factor for each {@link CardAspectRatio} (CSS `aspect-ratio`). */\nexport const CARD_ASPECT_RATIOS: Record<CardAspectRatio, number> = {\n \"1:1\": 1,\n \"4:3\": 4 / 3,\n \"16:9\": 16 / 9,\n \"9:16\": 9 / 16,\n \"3:4\": 3 / 4,\n /**\n * The BANNER tile: too short for media, sized for two lines of text.\n *\n * Every other ratio here is picture-shaped, because they were added for cards\n * built around a thumbnail. A card whose subject is a NAME and a NUMBER — a\n * cart, an order, anything triaged rather than browsed — spends most of a 4:3\n * tile on an icon that repeats down the whole grid and says nothing.\n */\n \"3:1\": 3,\n};\n\n/** One selectable value inside a filter pill. */\nexport interface FilterOption {\n value: string;\n label: string;\n /**\n * Parent option's `value`, for a hierarchical field (`control: \"category\"`).\n * Ignored by the flat controls, so one option list serves both.\n */\n parentId?: string | null;\n}\n\n/** A typed, multi-select filter pill's configuration for a table. */\nexport interface FilterFieldConfig<T extends Record<string, unknown>> {\n /** Stable id; also the default row key when no `accessor` is given. */\n id: string;\n label: string;\n options: FilterOption[];\n /**\n * How the field renders in the filter panel. `checkboxes` (default) is best for\n * a few fixed options; `multiselect` is a compact dropdown for long option\n * lists; `category` is the hierarchical picker, for an option set that nests\n * via {@link FilterOption.parentId} — it renders parents as headings and\n * their children as the selectable rows, rather than flattening the tree into\n * one indistinguishable list.\n */\n control?: \"checkboxes\" | \"multiselect\" | \"category\";\n /**\n * Lets a `control: \"category\"` pill select a PARENT category, not just its\n * children. Off by default, which keeps the leaf-only reading: the parent is\n * a heading and its subcategories are the rows you tick.\n *\n * Turn it on where \"the whole category\" is a filter a user would reach for —\n * selecting a parent then selects every subcategory under it, and the chip\n * tray collapses that back to one chip bearing the category's name.\n *\n * A category with NO children is selectable either way: it is itself the\n * leaf, so the flag has nothing to gate there.\n */\n allowParentSelection?: boolean;\n /**\n * Forces this filter to render as a searchable multi-select dropdown with the\n * search box always shown, regardless of how many options are currently\n * loaded. Use it when the option set can grow unbounded (e.g. a filter backed\n * by a relation such as Roles or Categories). Omit it for a closed value set\n * (an enum), which keeps the plain checkbox / \"search only when long\"\n * behavior.\n */\n searchEnabled?: boolean;\n /**\n * Reads the row's value(s) for this field. A row matches the pill when any of\n * its values is selected. Defaults to `String(row[id])`.\n */\n accessor?: (row: T) => string | string[];\n /** Never on the bar, always behind \"Mais\" (beside quick chips); still counted, saved, cleared. */\n inMore?: boolean;\n}\n\n/**\n * The range and quick-chip types live in their own modules (this file outgrew\n * the size gate); re-exported so `data-views-types` stays the one import.\n */\nexport type { QuickFilterConfig } from \"./data-views-quick-types\";\nexport type { DayRangeFieldConfig, NumberRangeFieldConfig, RangeFieldConfig } from \"./data-views-range-types\";\nexport type { RangeFieldKind, RangePreset, RangeValue } from \"./data-views-range-types\";\n\n/** A grid column that can join the search scan and the column-visibility menu. */\nexport interface DataViewColumn<T extends Record<string, unknown>> extends GridColumn<T> {\n /** Included in \"search across all columns\" (needs a resolvable value). */\n searchable?: boolean;\n /** Toggleable in the column-visibility menu. Defaults to true; set false for\n * structural columns (image thumbnail, actions kebab) that must always show. */\n hideable?: boolean;\n}\n\n/**\n * The DataViews layout (view type): the dense \"Tabela\" grid, the \"Grade\" of\n * cards, the \"Lista\" of full-width rows, or the \"Quadro\" board of state columns.\n * Lives with the state types rather than with the toggle because a saved view\n * CAPTURES it — see {@link DataViewState.layout}.\n */\nexport type DataViewsLayout = \"cards\" | \"list\" | \"board\" | \"table\";\n\n/** The full, serializable state a view captures. */\n/**\n * A view-state patch: the fields to merge, or an updater given the CURRENT\n * state. Use the updater whenever the patch derives from state it also changes\n * — a render-scoped snapshot would let two calls in one tick read the same\n * `prev` and the second overwrite the first, which is exactly what a control\n * emitting one call per changed value does.\n */\nexport type DataViewStatePatch =\n | Partial<DataViewState>\n | ((prev: DataViewState) => Partial<DataViewState>);\n\nexport interface DataViewState {\n /** Free text matched across every `searchable` column. */\n search: string;\n /** fieldId → selected option values (empty/absent = no constraint). */\n pills: Record<string, string[]>;\n /** fieldId → selected numeric range (min/max). Absent/empty = no constraint. */\n ranges?: Record<string, RangeValue>;\n sortBy: GridSort[];\n /** Column ids kept visible; a hideable column not listed here is hidden. */\n visibleColumns: string[];\n /**\n * Column ids in READING ORDER. Absent ⇒ the order the table declared them in.\n *\n * Order is view state for the same reason visibility is: reordering columns is\n * an operator deciding what to read FIRST, and a saved view that restored the\n * columns but not their order would restore half a decision. Ids the table no\n * longer declares are ignored at render, and ids missing from a stale list\n * fall in after it — so a column added since the view was saved appears rather\n * than disappearing.\n */\n order?: string[];\n /**\n * The active SCOPE id — the page-level partition the scope tabs select (see\n * `ScopeConfig`). Optional, so a table that declares no scopes is untouched\n * and no view persisted before scopes existed breaks.\n *\n * Stored raw and RESOLVED at read time: the declared scopes change underneath\n * a saved view, and a view naming a scope that has since been removed must\n * fall back at render rather than break.\n */\n scope?: string;\n /**\n * The layout the view was saved in. Optional — absent means \"whatever the user\n * is currently using\", which is the pre-existing behaviour.\n *\n * A LAYOUT FALLBACK IS NOT A LAYOUT CHANGE: a table rendered as stacked rows\n * on a phone still has `\"table\"` stored here, so the view round-trips the\n * stored layout regardless of the device that opened it.\n */\n layout?: DataViewsLayout;\n}\n\n/** A pristine view state showing every given column and no filters/sort. */\nexport function emptyViewState(visibleColumns: string[]): DataViewState {\n return { search: \"\", pills: {}, ranges: {}, sortBy: [], visibleColumns };\n}\n\n/**\n * The URL-driven slice of {@link DataViewState} — the controls a server-mode host\n * mirrors from the address bar (search / pills / ranges / sort), WITHOUT\n * `visibleColumns`. Supplying it re-applies those controls when its reference\n * changes (e.g. browser back/forward or a deep-link on the same route), merging\n * over the current state so a user's show/hide column choices are preserved —\n * unlike `appliedState`, which fully replaces the state to apply a saved view.\n */\nexport type DataViewSyncState = Pick<\n DataViewState,\n \"search\" | \"pills\" | \"ranges\" | \"sortBy\" | \"scope\"\n>;\n\n/**\n * The query a SERVER-mode table emits whenever its filter/sort/page changes\n * (FUT-180). The host translates this into a backend request (see\n * `@12-apps/shared-helpers/search`) — in server mode the grid never filters,\n * sorts, or paginates in the browser; it renders exactly the page the server\n * returned. `page` is 1-based to match the backend contract.\n */\nexport interface DataViewQuery {\n search: string;\n pills: Record<string, string[]>;\n ranges: Record<string, RangeValue>;\n sortBy: GridSort[];\n /**\n * The RESOLVED active scope (see `resolveScope`), when the table declares\n * scopes. The KEY IS ABSENT for a table that declares none — not present-and-\n * undefined — so a host that never opted in sees a byte-identical query.\n *\n * It carries the resolved id, never the stored one: a deep link or a saved\n * view naming a scope the table no longer declares must not put that id on the\n * wire, where the backend would reject it and replace the page with an error.\n */\n scope?: string;\n page: number;\n pageSize: number;\n}\n\n/**\n * Server-mode wiring for a DataViews table. Its PRESENCE flips the table from\n * in-browser filtering/sorting/pagination to backend-driven: the rows handed in\n * are already the current page, `totalCount` is the unpaginated total, and\n * `onQueryChange` fires (search debounced by the host) whenever the user changes\n * a filter, the sort, or the page. This is the ONLY way an admin list should run\n * (see the app-side `DataViewsTable` wrapper, which requires it).\n */\nexport interface DataViewServer {\n /** Total matched rows across all pages (drives the counter + page count). */\n totalCount: number;\n /** Current 1-based page. */\n page: number;\n /** Rows per page. */\n pageSize: number;\n /** Fired when the effective query changes; the host re-fetches the page. */\n onQueryChange: (query: DataViewQuery) => void;\n /**\n * Per-scope totals for the scope tabs: `scopeId → count`. THE ONLY PIECE OF\n * THIS CONTRACT THAT CANNOT BE DONE CLIENT-SIDE — a count computed from the\n * loaded page is wrong the moment there is a second page, which is the\n * concrete bug scopes exist to fix.\n *\n * Compute it over search + pills + ranges while IGNORING the active scope.\n * Computed WITH the scope applied, every inactive tab reads zero, which is\n * worse than no counts at all.\n *\n * Omit it and the tabs render with no numbers. Nothing is ever invented from\n * the loaded rows to fill the gap.\n */\n scopeCounts?: Record<string, number>;\n}\n\n/**\n * Coerce an opaque persisted state (a saved view's JSON) into a valid\n * DataViewState, filling any missing part with a sane default. Guards against\n * legacy/older shapes so applying a saved view never renders an empty grid.\n */\nexport function coerceViewState(raw: unknown, allColumnIds: string[]): DataViewState {\n const value = (raw ?? {}) as Partial<DataViewState>;\n return {\n search: typeof value.search === \"string\" ? value.search : \"\",\n pills: asRecord<string[]>(value.pills),\n ranges: asRecord<RangeValue>(value.ranges),\n sortBy: Array.isArray(value.sortBy) ? value.sortBy : [],\n visibleColumns: Array.isArray(value.visibleColumns) ? value.visibleColumns : allColumnIds,\n order: Array.isArray(value.order) ? value.order : undefined,\n // Carried through UNVALIDATED against the declared scopes on purpose: a view\n // written before scopes existed has none (⇒ undefined ⇒ the first declared\n // scope at render), and one naming a since-removed scope keeps its stored id\n // here and falls back at READ time. Resolving here would rewrite the view.\n scope: typeof value.scope === \"string\" ? value.scope : undefined,\n layout: isLayout(value.layout) ? value.layout : undefined,\n };\n}\n\n/** Every layout this build knows how to render — the guard's single source. */\nexport const DATA_VIEWS_LAYOUTS: readonly DataViewsLayout[] = [\"cards\", \"list\", \"board\", \"table\"];\n\n/** Is this a layout this build knows how to render? Guards persisted JSON. */\nfunction isLayout(value: unknown): value is DataViewsLayout {\n return DATA_VIEWS_LAYOUTS.includes(value as DataViewsLayout);\n}\n\n/** A persisted map, or an empty one — persisted JSON can hold anything. */\nfunction asRecord<V>(value: unknown): Record<string, V> {\n return value !== null && typeof value === \"object\" ? (value as Record<string, V>) : {};\n}\n\n/** A saved view as consumed by the DataViews UI (FUT-89), with ownership flag. */\nexport interface SavedViewSummary {\n id: string;\n name: string;\n description: string | null;\n state: DataViewState;\n shared: boolean;\n pinned: boolean;\n isDefault: boolean;\n /** True when the current user owns the view (may edit/delete/pin/share it). */\n isOwner: boolean;\n}\n\n/** A saved-view repository record (opaque `state`), as returned to server pages. */\ninterface SavedViewRecordLike {\n id: string;\n name: string;\n description: string | null;\n state: unknown;\n shared: boolean;\n pinned: boolean;\n isDefault: boolean;\n isOwner: boolean;\n}\n\n/** Map a repository record to the client summary (opaque state → DataViewState). */\nexport function toSavedViewSummary(record: SavedViewRecordLike): SavedViewSummary {\n return { ...record, state: (record.state ?? {}) as DataViewState };\n}\n\n/**\n * Dependency-injection contracts for the framework-agnostic DataViewsTableBase:\n * the host app supplies saved-view persistence + router side-effects so the ui\n * component imports neither a backend (server actions) nor a framework router.\n */\n\n/** A saved view's editable fields, as the host persists them. */\nexport interface DataViewSaveInput {\n name: string;\n description: string;\n state: DataViewState;\n shared: boolean;\n pinned: boolean;\n isDefault: boolean;\n}\n\n/** Result of a persistence call — mirrors the app's `Result` without importing it. */\nexport type DataViewMutationResult = { ok: true } | { ok: false; error: string };\n\n/** Injected saved-view persistence (create/update/delete), wired by the host. */\nexport interface DataViewPersistence {\n create: (input: DataViewSaveInput) => Promise<DataViewMutationResult>;\n update: (id: string, input: DataViewSaveInput) => Promise<DataViewMutationResult>;\n remove: (id: string) => Promise<DataViewMutationResult>;\n}\n\n/** Injected router side-effects: sync the `?view=` param and re-fetch on change. */\nexport interface DataViewRouter {\n syncViewParam: (viewId: string | null) => void;\n refresh: () => void;\n}\n"],"mappings":";AAqEO,IAAM,qBAAsD;AAAA,EACjE,OAAO;AAAA,EACP,OAAO,IAAI;AAAA,EACX,QAAQ,KAAK;AAAA,EACb,QAAQ,IAAI;AAAA,EACZ,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,OAAO;AACT;AA2IO,SAAS,eAAe,gBAAyC;AACtE,SAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,eAAe;AACzE;AA+EO,SAAS,gBAAgB,KAAc,cAAuC;AACnF,QAAM,QAAS,OAAO,CAAC;AACvB,SAAO;AAAA,IACL,QAAQ,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AAAA,IAC1D,OAAO,SAAmB,MAAM,KAAK;AAAA,IACrC,QAAQ,SAAqB,MAAM,MAAM;AAAA,IACzC,QAAQ,MAAM,QAAQ,MAAM,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IACtD,gBAAgB,MAAM,QAAQ,MAAM,cAAc,IAAI,MAAM,iBAAiB;AAAA,IAC7E,OAAO,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlD,OAAO,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,IACvD,QAAQ,SAAS,MAAM,MAAM,IAAI,MAAM,SAAS;AAAA,EAClD;AACF;AAGO,IAAM,qBAAiD,CAAC,SAAS,QAAQ,SAAS,OAAO;AAGhG,SAAS,SAAS,OAA0C;AAC1D,SAAO,mBAAmB,SAAS,KAAwB;AAC7D;AAGA,SAAS,SAAY,OAAmC;AACtD,SAAO,UAAU,QAAQ,OAAO,UAAU,WAAY,QAA8B,CAAC;AACvF;AA4BO,SAAS,mBAAmB,QAA+C;AAChF,SAAO,EAAE,GAAG,QAAQ,OAAQ,OAAO,SAAS,CAAC,EAAoB;AACnE;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SettingSwitchBlock,
3
3
  useSettingSwitchIds
4
- } from "./chunk-7JS2SPRW.js";
4
+ } from "./chunk-LKRXLWCC.js";
5
5
  import {
6
6
  SettingGroupContext
7
7
  } from "./chunk-XJQNSMGA.js";
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-SALQ65SM.js";
11
11
  import {
12
12
  partTestId
13
- } from "./chunk-OJFE5PK6.js";
13
+ } from "./chunk-ZZO5MRMV.js";
14
14
  import {
15
15
  dependentsStyles,
16
16
  hintStyles,
@@ -84,4 +84,4 @@ SettingGroup.displayName = "SettingGroup";
84
84
  export {
85
85
  SettingGroup
86
86
  };
87
- //# sourceMappingURL=chunk-SAJDNO43.js.map
87
+ //# sourceMappingURL=chunk-IGMD6S76.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SettingSwitchBlock,
3
3
  useSettingSwitchIds
4
- } from "./chunk-7JS2SPRW.js";
4
+ } from "./chunk-LKRXLWCC.js";
5
5
  import {
6
6
  useSettingGroup
7
7
  } from "./chunk-XJQNSMGA.js";
@@ -44,4 +44,4 @@ SettingToggle.displayName = "SettingToggle";
44
44
  export {
45
45
  SettingToggle
46
46
  };
47
- //# sourceMappingURL=chunk-EZFQO77P.js.map
47
+ //# sourceMappingURL=chunk-IPYV7BLH.js.map
@@ -1,17 +1,17 @@
1
+ import {
2
+ AVATAR_DEFAULTS,
3
+ contentTypeOf,
4
+ pickAvatarContent
5
+ } from "./chunk-3ZVUNSFF.js";
1
6
  import {
2
7
  AvatarView
3
- } from "./chunk-7XSCEHGA.js";
8
+ } from "./chunk-EOQ6EKTS.js";
4
9
  import {
5
10
  BORDER_WIDTH,
6
11
  GROUP_HOVER,
7
12
  GROUP_MAX,
8
13
  GROUP_OVERLAP
9
14
  } from "./chunk-6ZZGK5DT.js";
10
- import {
11
- AVATAR_DEFAULTS,
12
- contentTypeOf,
13
- pickAvatarContent
14
- } from "./chunk-3ZVUNSFF.js";
15
15
  import {
16
16
  rem
17
17
  } from "./chunk-YKCAJ2TN.js";
@@ -175,4 +175,4 @@ export {
175
175
  Avatar,
176
176
  AvatarGroup
177
177
  };
178
- //# sourceMappingURL=chunk-KARMRTTM.js.map
178
+ //# sourceMappingURL=chunk-J2RUDZVJ.js.map
@@ -1,11 +1,11 @@
1
- import {
2
- chartAxisValueFormatter,
3
- chartValueFormatter
4
- } from "./chunk-6GPNZSAE.js";
5
1
  import {
6
2
  getChartSpecRenderer,
7
3
  getRegisteredChartSpecTypes
8
4
  } from "./chunk-WKUA6P3W.js";
5
+ import {
6
+ chartAxisValueFormatter,
7
+ chartValueFormatter
8
+ } from "./chunk-6GPNZSAE.js";
9
9
 
10
10
  // src/components/data-display/Chart/chart-spec.ts
11
11
  var CHART_SEMANTIC_COLORS = [
@@ -151,4 +151,4 @@ export {
151
151
  parseChartSpec,
152
152
  specToChartProps
153
153
  };
154
- //# sourceMappingURL=chunk-HQCZT6TO.js.map
154
+ //# sourceMappingURL=chunk-JVOEVTCZ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-PL2AB5HJ.js";
4
4
  import {
5
5
  useDataViewsLayout
6
- } from "./chunk-JYMXYSDP.js";
6
+ } from "./chunk-5CAWRMDX.js";
7
7
 
8
8
  // src/components/data-display/DataViews/data-views-scope-tabs.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -34,4 +34,4 @@ function ScopeTabsSlot({
34
34
  export {
35
35
  ScopeTabsSlot
36
36
  };
37
- //# sourceMappingURL=chunk-VJB63DUM.js.map
37
+ //# sourceMappingURL=chunk-K3PMMW23.js.map
@@ -2,11 +2,11 @@ import {
2
2
  ModalPanelContents,
3
3
  modalAriaIds,
4
4
  resolveModalContent
5
- } from "./chunk-6A6GZRXD.js";
5
+ } from "./chunk-3VXS7O3X.js";
6
6
  import {
7
7
  STYLE_ONLY_PROPS,
8
8
  dialogRootStyles
9
- } from "./chunk-3PGY4UL4.js";
9
+ } from "./chunk-YKQA4NPM.js";
10
10
  import {
11
11
  usePanelChrome
12
12
  } from "./chunk-TSMF7K37.js";
@@ -78,6 +78,7 @@ var StackedModalPanel = (props) => {
78
78
  fullScreen,
79
79
  maxWidth,
80
80
  size,
81
+ panelWidth,
81
82
  disableBackdrop,
82
83
  disableFocusTrap,
83
84
  keepMounted,
@@ -128,6 +129,7 @@ var StackedModalPanel = (props) => {
128
129
  rtl,
129
130
  customMaxWidth: maxWidth,
130
131
  panelSize: size,
132
+ panelWidth,
131
133
  TransitionComponent: SlideTransition,
132
134
  maxWidth,
133
135
  disableEscapeKeyDown: !closeOnEsc,
@@ -172,4 +174,4 @@ var StackedModal = (props) => {
172
174
  export {
173
175
  StackedModal
174
176
  };
175
- //# sourceMappingURL=chunk-TNVO3EVF.js.map
177
+ //# sourceMappingURL=chunk-KT3TF2LT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.tsx"],"sourcesContent":["import Dialog from '@mui/material/Dialog/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport type { TransitionProps } from '@mui/material/transitions/index.js';\nimport type { FC } from 'react';\nimport React, { forwardRef, useEffect, useId } from 'react';\nimport { usePanelChrome } from './StackedModal.hooks';\nimport { modalAriaIds, ModalPanelContents, resolveModalContent } from './StackedModal.parts';\nimport type { PanelStyleProps } from './StackedModal.styles';\nimport { dialogRootStyles, STYLE_ONLY_PROPS } from './StackedModal.styles';\nimport type { StackedModalProps } from './StackedModal.types';\n\nconst StyledDialog = styled(Dialog, {\n shouldForwardProp: (prop) => !STYLE_ONLY_PROPS.includes(prop as string),\n})<PanelStyleProps>(({ theme, ...props }) => dialogRootStyles(theme, props));\n\n/** Panels slide in from the right on every device. */\nconst SlideTransition = forwardRef<HTMLDivElement, TransitionProps>(\n function SlideTransition(props, ref) {\n return (\n <Slide direction=\"left\" ref={ref} {...props}>\n {props.children as React.ReactElement}\n </Slide>\n );\n },\n);\n\nconst DEFAULTS: Partial<StackedModalProps> = {\n open: false,\n glass: false,\n navigationTitle: '',\n closeOnClickOutside: true,\n closeOnEsc: true,\n loading: false,\n loadingText: 'Loading...',\n maxWidth: false,\n disableBackdrop: false,\n disableFocusTrap: false,\n keepMounted: false,\n rtl: false,\n};\n\n/**\n * Fills in the defaults for props the caller left `undefined`. A table plus one\n * loop, rather than a default per destructured prop — each of those is a branch,\n * and fifteen of them put the component over the complexity bar on their own.\n */\nconst withDefaults = (props: StackedModalProps): StackedModalProps => {\n const resolved = { ...props };\n for (const [key, value] of Object.entries(DEFAULTS)) {\n const prop = key as keyof StackedModalProps;\n if (resolved[prop] === undefined) {\n Object.assign(resolved, { [prop]: value });\n }\n }\n return resolved;\n};\n\n/** The modal's props once defaults are applied and its stack identity is settled. */\ntype ResolvedProps = StackedModalProps & { modalId: string };\n\n/**\n * `hideHeader` removes the bar that names the dialog; without an\n * `aria-labelledby` of the caller's own, the dialog has no accessible name.\n */\nconst useUnnamedDialogWarning = (unnamed: boolean): void => {\n useEffect(() => {\n const development = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n if (unnamed && development) {\n // eslint-disable-next-line no-console -- a config warning has no other channel.\n console.warn(\n 'StackedModal: `hideHeader` without `aria-labelledby` leaves the dialog unnamed. ' +\n \"Point `aria-labelledby` at your content header's title.\",\n );\n }\n }, [unnamed]);\n};\n\nconst StackedModalPanel: FC<ResolvedProps> = (props) => {\n const {\n open, onClose, glass, navigationTitle, backLabel, hideClose, hideHeader, children, actions, modalId,\n closeOnClickOutside, closeOnEsc, loading, loadingText, fullScreen, maxWidth, size, panelWidth, disableBackdrop,\n disableFocusTrap, keepMounted, rtl, dataTestId,\n 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, ...otherProps\n } = props;\n\n const {\n dialogRef, modalRole, isAnimating, showSkeleton, zIndex, isMobile, canGoBack, isRoot,\n handleBack, handleClose,\n } = usePanelChrome({\n open, modalId, loading, closeOnEsc, closeOnClickOutside, disableFocusTrap, onClose,\n });\n\n // Don't render if in background (performance optimization)\n if (modalRole === 'background' && !keepMounted) return null;\n\n const { content, modalActions, headerActions, hasMobileActions } = resolveModalContent(\n children,\n actions,\n isMobile,\n );\n const { titleId, descId } = modalAriaIds(modalId, ariaLabelledBy, ariaDescribedBy);\n useUnnamedDialogWarning(Boolean(hideHeader) && !ariaLabelledBy);\n\n return (\n <StyledDialog\n ref={dialogRef}\n open={Boolean(open)}\n onClose={handleClose}\n fullScreen={fullScreen ?? isMobile}\n modalRole={modalRole}\n isAnimating={isAnimating}\n glass={glass}\n rtl={rtl}\n customMaxWidth={maxWidth}\n panelSize={size}\n panelWidth={panelWidth}\n TransitionComponent={SlideTransition}\n maxWidth={maxWidth}\n disableEscapeKeyDown={!closeOnEsc}\n hideBackdrop={disableBackdrop}\n keepMounted={keepMounted}\n aria-labelledby={titleId}\n aria-describedby={descId}\n data-testid={dataTestId}\n sx={{ zIndex }}\n {...otherProps}\n >\n <ModalPanelContents\n backLabel={backLabel}\n showSkeleton={showSkeleton}\n loadingText={loadingText}\n titleId={titleId}\n descId={descId}\n navigationTitle={navigationTitle}\n hideClose={hideClose}\n hideHeader={Boolean(hideHeader) && isRoot}\n canGoBack={canGoBack}\n onBack={handleBack}\n onClose={onClose}\n headerActions={headerActions}\n content={content}\n modalActions={modalActions}\n hasMobileActions={hasMobileActions}\n rtl={rtl}\n dataTestId={dataTestId}\n />\n </StyledDialog>\n );\n};\n\nexport const StackedModal: FC<StackedModalProps> = (props) => {\n // A modal with no caller-supplied id still needs a STABLE one — it keys this\n // panel's entry in the stack, so a value that changed per render (as a\n // `Math.random()` default does) would re-register it on every pass.\n const fallbackId = useId();\n const resolved = withDefaults(props);\n return <StackedModalPanel {...resolved} modalId={resolved.modalId ?? fallbackId} />;\n};\n\n// Re-exported so `./StackedModal` stays the single public entry point for the\n// component and its stack primitives, as the barrel and existing imports expect.\nexport {\n ModalStackProvider,\n ModalStackProvider as StackedModalProvider,\n useModalStack,\n useModalStack as useStackedModal,\n} from './modal-stack';\nexport { StackedModalActions, StackedModalContent } from './StackedModal.parts';\n"],"mappings":"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","names":["SlideTransition"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-ZEVFMQAQ.js";
4
4
  import {
5
5
  DataViewsGrid
6
- } from "./chunk-M6V7Y7CP.js";
6
+ } from "./chunk-6CZC5S6O.js";
7
7
  import {
8
8
  viewStateKey
9
9
  } from "./chunk-ZOLAYP2D.js";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-YNIOCELQ.js";
18
18
  import {
19
19
  useSavedViewsController
20
- } from "./chunk-BI7YMVKZ.js";
20
+ } from "./chunk-B2JSUFDX.js";
21
21
 
22
22
  // src/components/data-display/DataViews/DataViewsTableBase.tsx
23
23
  import { useEffect, useRef, useState } from "react";
@@ -166,4 +166,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
166
166
  export {
167
167
  DataViewsTableBase
168
168
  };
169
- //# sourceMappingURL=chunk-6S3S2K7O.js.map
169
+ //# sourceMappingURL=chunk-L7HKMTKR.js.map