@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,7 +1,3 @@
1
- import {
2
- containerStyles,
3
- frameBox
4
- } from "./chunk-Z64TMGYT.js";
5
1
  import {
6
2
  CarouselTrack
7
3
  } from "./chunk-6FDLBWTE.js";
@@ -11,6 +7,10 @@ import {
11
7
  import {
12
8
  CarouselChrome
13
9
  } from "./chunk-RUF7TOAZ.js";
10
+ import {
11
+ containerStyles,
12
+ frameBox
13
+ } from "./chunk-Z64TMGYT.js";
14
14
  import {
15
15
  withDefaults
16
16
  } from "./chunk-HPK33ACY.js";
@@ -151,4 +151,4 @@ var Carousel = (props) => {
151
151
  export {
152
152
  Carousel
153
153
  };
154
- //# sourceMappingURL=chunk-S4JXSC4D.js.map
154
+ //# sourceMappingURL=chunk-V6SRBQMN.js.map
@@ -10,22 +10,25 @@ import {
10
10
  import {
11
11
  toGridExpansion
12
12
  } from "./chunk-O5UGAL2V.js";
13
+ import {
14
+ useStickyTableHead
15
+ } from "./chunk-4IE66GY2.js";
13
16
  import {
14
17
  ListCardGroup
15
- } from "./chunk-7J5JR33K.js";
18
+ } from "./chunk-BBBHPK2Q.js";
16
19
  import {
17
20
  DENSITY_BOARD_SCALE,
18
21
  DENSITY_ROW_PADDING,
19
22
  cardScaleForZoom,
20
23
  cardTargetWidthFor,
21
24
  useDataViewsLayout
22
- } from "./chunk-JYMXYSDP.js";
25
+ } from "./chunk-5CAWRMDX.js";
23
26
  import {
24
27
  useDataViewsCopy
25
28
  } from "./chunk-KHG57NAE.js";
26
29
  import {
27
30
  DataGrid
28
- } from "./chunk-FXZUVZON.js";
31
+ } from "./chunk-LWZ2K225.js";
29
32
  import {
30
33
  default as default2
31
34
  } from "./chunk-6DPAWXZ3.js";
@@ -34,7 +37,7 @@ import {
34
37
  } from "./chunk-YKCAJ2TN.js";
35
38
 
36
39
  // src/components/data-display/DataViews/data-views-grid-bodies.tsx
37
- import React from "react";
40
+ import React, { useRef } from "react";
38
41
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
39
42
  function GridBody({
40
43
  rows,
@@ -49,12 +52,16 @@ function GridBody({
49
52
  rowPadding,
50
53
  rowDetail,
51
54
  dataTestId,
52
- emptyState
55
+ emptyState,
56
+ stickyHead = false
53
57
  }) {
54
58
  const copy = useDataViewsCopy();
59
+ const wrapperRef = useRef(null);
60
+ useStickyTableHead(wrapperRef, stickyHead);
55
61
  return /* @__PURE__ */ jsx(
56
62
  default2,
57
63
  {
64
+ ref: wrapperRef,
58
65
  sx: {
59
66
  width: "100%",
60
67
  overflowX: "auto",
@@ -234,7 +241,8 @@ function GridMain(props) {
234
241
  rowPadding: DENSITY_ROW_PADDING[layoutState.density],
235
242
  rowDetail: props.rowDetail,
236
243
  dataTestId,
237
- emptyState
244
+ emptyState,
245
+ stickyHead: props.stickyHead
238
246
  }
239
247
  );
240
248
  }
@@ -242,4 +250,4 @@ function GridMain(props) {
242
250
  export {
243
251
  GridMain
244
252
  };
245
- //# sourceMappingURL=chunk-JY5YINUH.js.map
253
+ //# sourceMappingURL=chunk-WQ32YFM5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-grid-bodies.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { DataGrid, type GridColumn, type GridSort } from \"../DataGrid\";\nimport { Box } from \"../../../mui/Box\";\n\nimport {\n cardTargetWidthFor,\n cardScaleForZoom,\n DENSITY_BOARD_SCALE,\n DENSITY_ROW_PADDING,\n useDataViewsLayout,\n type DataViewsDensity,\n} from \"./data-views-layout-context\";\nimport { DataViewsBoard, type BoardConfig } from \"./DataViewsBoard\";\nimport { CardBody } from \"./data-views-card-body\";\nimport { SelectAllStrip } from \"./data-views-select-all-strip\";\nimport { ListCardGroup, type ListGroupConfig } from \"./list-card-rails\";\nimport type { DataViewCardSelection } from \"./data-views-types\";\nimport { toGridExpansion, type DataViewRowDetail } from \"./data-views-row-detail\";\nimport type { DataViewsController } from \"./use-data-views-state\";\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { sxRem } from \"../../../tokens/relative\";\nimport { useStickyTableHead } from \"./data-views-sticky-head\";\n\n/* ── Body (grid) ─────────────────────────────────────────────────────────── */\n\ninterface GridBodyProps<T extends Record<string, unknown>> {\n rows: T[];\n columns: GridColumn<T>[];\n getRowId: (row: T) => string | number;\n selectedIds: Array<string | number>;\n onChangeSelected: (ids: Array<string | number>) => void;\n /** False ⇒ no checkbox column at all: no header select-all, no row box, no width. */\n selectable: boolean;\n sortBy: GridSort[];\n onChangeSortBy: (next: GridSort[]) => void;\n /** \"server\" defers ordering to the backend (rows render as-is); \"client\" sorts in-grid. */\n sortMode: \"client\" | \"server\";\n /** Vertical cell padding, from the density preference. */\n rowPadding: number;\n rowDetail?: DataViewRowDetail<T>;\n dataTestId?: string;\n emptyState?: React.ReactNode;\n /** The header row follows the page scroll under the sticky toolbar. */\n stickyHead?: boolean;\n}\n\n/** The dense DataGrid with multi-select (unless opted out), wrapped in the scrollable table region. */\nfunction GridBody<T extends Record<string, unknown>>({\n rows,\n columns,\n getRowId,\n selectedIds,\n onChangeSelected,\n selectable,\n sortBy,\n onChangeSortBy,\n sortMode,\n rowPadding,\n rowDetail,\n dataTestId,\n emptyState,\n stickyHead = false,\n}: GridBodyProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n const wrapperRef = useRef<HTMLDivElement>(null);\n useStickyTableHead(wrapperRef, stickyHead);\n return (\n <Box\n ref={wrapperRef}\n sx={{\n width: \"100%\",\n overflowX: \"auto\",\n mt: 1.5,\n // Tabwoah-style dense rows: MUI's default TableCell padding keeps rows\n // tall regardless of rowHeight, so the DENSITY preference is applied\n // here rather than through `rowHeight`, which it would fight.\n \"& .MuiTableCell-root\": { py: rowPadding, fontSize: sxRem(13) },\n \"& .MuiTableCell-head\": { py: 0.5, fontSize: sxRem(12) },\n }}\n >\n <DataGrid<T>\n rows={rows}\n columns={columns}\n getRowId={(row) => getRowId(row)}\n virtualizeRows={false}\n density=\"compact\"\n rowHeight={36}\n headerHeight={36}\n selection={selectable ? { mode: \"multi\", selectedRowIds: selectedIds, onChangeSelected } : { mode: \"none\" }}\n sorting={{ mode: sortMode, sortBy, onChangeSortBy }}\n expansion={toGridExpansion(rowDetail, copy)}\n data-testid={dataTestId}\n emptyState={emptyState}\n emptyText={copy.grid.emptyFilteredTitle}\n copy={copy.grid}\n />\n </Box>\n );\n}\n\n/* ── Body (list) ─────────────────────────────────────────────────────────── */\n\ninterface ListBodyProps<T extends Record<string, unknown>> {\n rows: T[];\n renderListRow: (row: T, selection: DataViewCardSelection) => React.ReactNode;\n getRowId: (row: T) => string | number;\n selectedIds: Set<string | number>;\n /** Absent on a grid that is not selectable: rows get no toggle, so no checkbox. */\n onToggleId?: (id: string | number) => void;\n /** Gap between rows, from the density preference. */\n rowGap: number;\n /** The list's shared column config. See {@link ListGroupConfig}. */\n group?: ListGroupConfig<T>;\n /** The density every row answers, handed to the group when there is one. */\n density: DataViewsDensity;\n dataTestId?: string;\n emptyState?: React.ReactNode;\n}\n\n/**\n * The \"Lista\" layout: one FULL-WIDTH row per record, rendered by the entity — a\n * marker, a title, a subtitle and a value on the right is the shape it was\n * designed for (FUT-733).\n *\n * It sits between the table and the cards rather than replacing either: the\n * table is for comparing many columns, the cards are for browsing, and the list\n * is for scanning a queue on a narrow screen. Selection is the SAME model as\n * both — each row receives its selection state, so it can drive its own\n * checkbox and the bulk menu behaves identically in every layout.\n *\n * `scale` is handed over as 1 rather than the zoom multiplier, and the zoom\n * slider is hidden in this layout: a full-width row has no card size to\n * multiply. See {@link DataViewsZoomSlider}.\n */\nfunction ListBody<T extends Record<string, unknown>>({\n rows,\n renderListRow,\n getRowId,\n selectedIds,\n onToggleId,\n rowGap,\n group,\n density,\n dataTestId,\n emptyState,\n}: ListBodyProps<T>): React.JSX.Element {\n if (rows.length === 0) {\n return <Box sx={{ mt: 1.5 }}>{emptyState}</Box>;\n }\n const testId = dataTestId ? `${dataTestId}-list` : \"data-views-list\";\n const selectionFor = (id: string | number): DataViewCardSelection => ({\n selected: selectedIds.has(id),\n onToggleSelect: onToggleId && (() => onToggleId(id)),\n scale: 1,\n });\n\n if (group) {\n return (\n <Box sx={{ mt: 1.5 }}>\n <ListCardGroup\n cells={group.cells}\n metaColumns={group.metaColumns}\n rails={group.rails}\n // A list nobody can select holds no checkbox gutter open: reserving\n // one is how a selectable and a read-only row line up, and here no\n // row is selectable. Gutters a row DOES use still get their track.\n reserveGutters={onToggleId ? group.reserveGutters : false}\n density={density}\n gap={rowGap}\n dataTestId={testId}\n >\n {rows.map((row) => {\n const id = getRowId(row);\n // A FRAGMENT, NOT A BOX. The row is subgrid over the group's tracks\n // (`gridColumn: span railCount`), which only resolves while the card\n // is a DIRECT child of the group's grid. One wrapper element and the\n // span is measured against a grid that isn't there, so every rail\n // collapses — the exact failure the group exists to prevent.\n return (\n <React.Fragment key={id}>\n {renderListRow(row, selectionFor(id))}\n </React.Fragment>\n );\n })}\n </ListCardGroup>\n </Box>\n );\n }\n\n return (\n <Box\n sx={{ mt: 1.5, display: \"flex\", flexDirection: \"column\", gap: rowGap }}\n data-testid={testId}\n >\n {rows.map((row) => {\n const id = getRowId(row);\n return <Box key={id}>{renderListRow(row, selectionFor(id))}</Box>;\n })}\n </Box>\n );\n}\n\n/* ── Body selector (board vs list vs cards vs table, from context) ───────── */\n\ninterface GridMainProps<T extends Record<string, unknown>> {\n c: DataViewsController<T>;\n getRowId: (row: T) => string | number;\n renderCard?: (row: T, selection: DataViewCardSelection) => React.ReactNode;\n /** Opt-in \"Lista\" layout — one full-width row per record. */\n renderListRow?: (row: T, selection: DataViewCardSelection) => React.ReactNode;\n /** The Lista's shared columns. Omitted, each row resolves its own tracks. */\n listGroup?: ListGroupConfig<T>;\n /** Opt-in \"Quadro\" (board) layout — needs `renderCard`, since it reuses the card. */\n board?: BoardConfig<T>;\n /** Opt-in expandable rows — the TABLE only; the headerless layouts ignore it. */\n rowDetail?: DataViewRowDetail<T>;\n /** False ⇒ no selection anywhere: no checkboxes, no select-all strip. */\n selectable: boolean;\n dataTestId?: string;\n emptyState?: React.ReactNode;\n testIdPrefix: string;\n /** The table's header row follows the page under a sticky toolbar. */\n stickyHead?: boolean;\n}\n\n/**\n * The headerless layouts, each preceded by its own select-all.\n *\n * The strip is rendered HERE rather than inside each body so all three agree on\n * where it sits and what it says — and so the table, which already has one in\n * its `<thead>`, never gets a second.\n */\nfunction Headerless<T extends Record<string, unknown>>({\n c,\n getRowId,\n selectable,\n testIdPrefix,\n children,\n}: {\n c: DataViewsController<T>;\n getRowId: (row: T) => string | number;\n selectable: boolean;\n testIdPrefix: string;\n children: React.ReactNode;\n}): React.JSX.Element {\n // Not selectable ⇒ no strip: a select-all over rows that cannot be selected.\n if (!selectable) return <>{children}</>;\n return (\n <>\n <SelectAllStrip\n rows={c.matched}\n getRowId={getRowId}\n selectedIds={c.selectedIds}\n onChange={(next) => c.setSelectedIds(next)}\n testIdPrefix={testIdPrefix}\n />\n {children}\n </>\n );\n}\n\n/**\n * The body for one of the three HEADERLESS layouts, or `null` for the table.\n *\n * Split out from {@link GridMain} so the select-all strip is wrapped around the\n * result exactly once instead of being repeated identically in every branch —\n * which is also what keeps either function inside the line budget.\n */\nfunction headerlessBody<T extends Record<string, unknown>>(\n { c, getRowId, renderCard, renderListRow, listGroup, board, selectable, dataTestId, emptyState }: GridMainProps<T>,\n { layout, zoom, density }: ReturnType<typeof useDataViewsLayout>,\n): React.ReactNode | null {\n // ONE switch for every headerless body: no toggle reaches a card or row, and\n // BaseCard / BaseListCard draw no checkbox for a record without one.\n const onToggleId = selectable ? c.toggleId : undefined;\n if (layout === \"list\" && renderListRow) {\n return (\n <ListBody\n rows={c.matched}\n renderListRow={renderListRow}\n getRowId={getRowId}\n selectedIds={c.selectedIds}\n onToggleId={onToggleId}\n rowGap={DENSITY_ROW_PADDING[density]}\n group={listGroup}\n density={density}\n dataTestId={dataTestId}\n emptyState={emptyState}\n />\n );\n }\n if (layout === \"board\" && board && renderCard) {\n return (\n <DataViewsBoard\n rows={c.matched}\n board={board}\n getRowId={getRowId}\n renderCard={renderCard}\n selectedIds={c.selectedIds}\n onToggleId={onToggleId}\n // DENSITY, not zoom: the board's own knob in the Exibição tab is how\n // wide its columns are, and it is the only sizing control the board\n // has since the zoom slider was removed.\n cardScale={DENSITY_BOARD_SCALE[density]}\n dataTestId={dataTestId}\n />\n );\n }\n if (layout === \"cards\" && renderCard) {\n return (\n <CardBody\n rows={c.matched}\n renderCard={renderCard}\n getRowId={getRowId}\n selectedIds={c.selectedIds}\n onToggleId={onToggleId}\n targetCardWidth={cardTargetWidthFor(zoom, density)}\n cardScale={cardScaleForZoom(zoom)}\n dataTestId={dataTestId}\n emptyState={emptyState}\n />\n );\n }\n return null;\n}\n\n/** Picks the body from the layout context: board, list, cards, or the dense grid. */\nexport function GridMain<T extends Record<string, unknown>>(props: GridMainProps<T>): React.JSX.Element {\n const { c, getRowId, selectable, dataTestId, emptyState, testIdPrefix } = props;\n const layoutState = useDataViewsLayout();\n const body = headerlessBody(props, layoutState);\n if (body) {\n return (\n <Headerless c={c} getRowId={getRowId} selectable={selectable} testIdPrefix={testIdPrefix}>\n {body}\n </Headerless>\n );\n }\n return (\n <GridBody\n rows={c.matched}\n columns={c.gridColumns}\n getRowId={getRowId}\n selectedIds={[...c.selectedIds]}\n onChangeSelected={(ids) => c.setSelectedIds(new Set(ids))}\n selectable={selectable}\n sortBy={c.state.sortBy}\n onChangeSortBy={(next: GridSort[]) => c.patch({ sortBy: next })}\n sortMode={c.serverMode ? \"server\" : \"client\"}\n rowPadding={DENSITY_ROW_PADDING[layoutState.density]}\n rowDetail={props.rowDetail}\n dataTestId={dataTestId}\n emptyState={emptyState}\n stickyHead={props.stickyHead}\n />\n );\n}\n\n"],"mappings":"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","names":["default"]}
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  MoreGroup,
3
+ MoreQuick,
3
4
  fieldClearing
4
- } from "./chunk-YLSSQJZM.js";
5
+ } from "./chunk-T7ZERP7A.js";
5
6
  import {
6
7
  useDataViewsCopy
7
8
  } from "./chunk-KHG57NAE.js";
@@ -128,6 +129,14 @@ function MoreFooter({
128
129
  }
129
130
  ) });
130
131
  }
132
+ function MoreFields({
133
+ fields,
134
+ ...rest
135
+ }) {
136
+ return /* @__PURE__ */ jsx(Fragment, { children: fields.map(
137
+ (field) => field.quick ? /* @__PURE__ */ jsx(MoreQuick, { quick: field.quick, ...rest }, field.id) : /* @__PURE__ */ jsx(MoreGroup, { field, ...rest }, field.id)
138
+ ) });
139
+ }
131
140
  function MoreFilters({
132
141
  fields,
133
142
  onOpenChange,
@@ -173,7 +182,7 @@ function MoreFilters({
173
182
  slotProps: { paper: { sx: { width: sxRem(300), maxWidth: (theme) => `calc(100vw - ${rem(theme, 32)})` } } },
174
183
  children: /* @__PURE__ */ jsxs(default2, { "data-testid": `${rest.testIdPrefix}-more-panel`, children: [
175
184
  /* @__PURE__ */ jsx(MoreHeading, {}),
176
- /* @__PURE__ */ jsx(default2, { sx: { maxHeight: sxRem(320), overflowY: "auto", overflowX: "hidden", p: 1.5, minWidth: 0 }, children: fields.map((field) => /* @__PURE__ */ jsx(MoreGroup, { field, ...rest }, field.id)) }),
185
+ /* @__PURE__ */ jsx(default2, { sx: { maxHeight: sxRem(320), overflowY: "auto", overflowX: "hidden", p: 1.5, minWidth: 0 }, children: /* @__PURE__ */ jsx(MoreFields, { fields, ...rest }) }),
177
186
  anyApplied && /* @__PURE__ */ jsx(MoreFooter, { onClearAll, testIdPrefix: rest.testIdPrefix })
178
187
  ] })
179
188
  }
@@ -184,4 +193,4 @@ function MoreFilters({
184
193
  export {
185
194
  MoreFilters
186
195
  };
187
- //# sourceMappingURL=chunk-ERA3AEWU.js.map
196
+ //# sourceMappingURL=chunk-WTGIW7LX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-more-filters.tsx"],"sourcesContent":["\"use client\";\n\nimport KeyboardArrowDownRoundedIcon from \"@mui/icons-material/KeyboardArrowDownRounded\";\n// A FUNNEL, not the tune sliders this used to share with \"Exibir\". The two\n// sit a few px apart on the same bar and do unrelated things — one narrows\n// WHICH rows you see, the other changes HOW they are shown — and with one\n// glyph between them the bar offered the operator no way to tell which was\n// which. On a phone, where both are icon-only, they were indistinguishable.\nimport FilterAltRoundedIcon from \"@mui/icons-material/FilterAltRounded\";\nimport Popover from \"@mui/material/Popover/index.js\";\nimport type { Theme } from \"@mui/material/styles/index.js\";\nimport { useState } from \"react\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Button } from \"../../form/Button\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport { fieldClearing, MoreGroup, MoreQuick, type MoreFieldProps } from \"./data-views-more-fields\";\nimport type { OverflowField } from \"./data-views-overflow\";\nimport { rem, sxRem } from \"../../../tokens/relative\";\n\n/**\n * \"MAIS\" — the filter overflow: its trigger, its panel and its footer. What\n * goes INSIDE it is `data-views-more-fields`.\n *\n * It holds the fields that had no room on the toolbar. An applied filter is\n * ranked ahead of an idle one for the visible slots but is NOT exempt (see\n * `useFilterOverflow`), so an applied filter can be in here — on a phone, most\n * of them are. That is why the trigger changes tone and counts the applied\n * ones: a filter you cannot see is a filter you forget you set, and the badge\n * is what stops that.\n */\n\ninterface MoreFiltersProps<T extends Record<string, unknown>> extends MoreFieldProps {\n fields: OverflowField<T>[];\n}\n\n/**\n * The trigger, badged with how many fields had no room on the bar — and told\n * apart when some of them are APPLIED.\n *\n * An applied filter can land in here now (it is ranked first, not exempt), so\n * this button is the only thing on screen still saying it exists. A neutral\n * badge reading \"3\" would make \"three filters you have not used\" and \"three\n * filters narrowing this list\" look identical, which is the whole failure the\n * old exemption was written to avoid. So an overflow holding applied filters\n * takes the applied tone and counts them in its own badge.\n */\nfunction MoreTrigger({\n count,\n appliedCount,\n compact,\n onOpen,\n testIdPrefix,\n}: {\n count: number;\n appliedCount: number;\n /** Icon only — the same rung that strips Exibir/Exportar. */\n compact: boolean;\n onOpen: (anchor: HTMLElement) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const applied = appliedCount > 0;\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n color=\"neutral\"\n onClick={(event) => onOpen(event.currentTarget as HTMLElement)}\n dataTestId={`${testIdPrefix}-more-filters`}\n aria-label={\n applied\n ? copy.filters.moreFiltersApplied(count, appliedCount)\n : copy.filters.moreFilters(count)\n }\n >\n <Box\n component=\"span\"\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 0.5,\n color: applied ? \"primary.main\" : undefined,\n }}\n >\n <FilterAltRoundedIcon fontSize=\"small\" />\n {!compact && (\n <Box component=\"span\" sx={{ display: { xs: \"none\", sm: \"inline\" } }}>\n {copy.filters.moreTriggerLabel}\n </Box>\n )}\n <Box\n component=\"span\"\n data-testid={`${testIdPrefix}-more-badge`}\n sx={{\n px: 0.75,\n borderRadius: 5,\n bgcolor: applied ? \"primary.main\" : \"action.selected\",\n color: applied ? \"primary.contrastText\" : undefined,\n fontSize: sxRem(11),\n fontWeight: applied ? 700 : undefined,\n }}\n >\n {applied ? appliedCount : count}\n </Box>\n {!compact && <KeyboardArrowDownRoundedIcon fontSize=\"small\" />}\n </Box>\n </Button>\n );\n}\n\n/** The panel's heading: what these are, and why they are in here. */\nfunction MoreHeading(): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n px: 1.5,\n py: 1,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ textTransform: \"uppercase\", letterSpacing: sxRem(0.5), color: \"text.disabled\" }}>\n {copy.filters.moreHeading}\n </Box>\n </Text>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ ml: \"auto\", color: \"text.disabled\" }}>\n {copy.filters.overflowNote}\n </Box>\n </Text>\n </Box>\n );\n}\n\n/**\n * The panel's own way back to the unfiltered list.\n *\n * The bar's \"Limpar\" is the primary one, but it is a control like any other\n * and the ladder can take its label — and on the narrowest rungs this panel is\n * where most of the fields ended up anyway. Clearing everything from inside it\n * saves closing it to reach a button three pixels wide.\n */\nfunction MoreFooter({\n onClearAll,\n testIdPrefix,\n}: {\n onClearAll: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box sx={{ px: 1.5, py: 1, borderTop: 1, borderColor: \"divider\" }}>\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClearAll}\n data-testid={`${testIdPrefix}-more-clear-all`}\n sx={{\n width: \"100%\",\n border: 0,\n p: 0,\n bgcolor: \"transparent\",\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: sxRem(13),\n textAlign: \"left\",\n color: \"primary.main\",\n \"&:hover\": { textDecoration: \"underline\" },\n }}\n >\n {copy.filters.clearAll}\n </Box>\n </Box>\n );\n}\n\n/** The panel's body: a shed quick chip as a toggle row, anything else as a labelled group. */\nfunction MoreFields<T extends Record<string, unknown>>({\n fields,\n ...rest\n}: MoreFiltersProps<T>): React.JSX.Element {\n return (\n <>\n {fields.map((field) =>\n field.quick ? (\n <MoreQuick key={field.id} quick={field.quick} {...rest} />\n ) : (\n <MoreGroup key={field.id} field={field} {...rest} />\n ),\n )}\n </>\n );\n}\n\n/** The overflow trigger + panel. Renders nothing when everything fits. */\nexport function MoreFilters<T extends Record<string, unknown>>({\n fields,\n onOpenChange,\n onClearAll,\n anyApplied,\n compact = false,\n ...rest\n}: MoreFiltersProps<T> & {\n /** Icon only — the same rung that strips Exibir/Exportar. */\n compact?: boolean;\n /** Clears every filter, not just the ones in here. */\n onClearAll: () => void;\n /** Whether anything is applied anywhere — the footer is pointless otherwise. */\n anyApplied: boolean;\n /**\n * So the shell can FREEZE the measured split while this panel is open.\n *\n * Applying a filter in here makes its field active, and an active field\n * takes an inline slot first — so the field being edited was promoted OUT of\n * this panel mid-keystroke, taking the focused input with it. Typing \"12\"\n * got as far as \"1\" and then had nowhere to go.\n */\n onOpenChange?: (open: boolean) => void;\n}): React.JSX.Element | null {\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n if (fields.length === 0) return null;\n return (\n <>\n <MoreTrigger\n count={fields.length}\n appliedCount={\n fields.filter(\n (field) =>\n fieldClearing({\n field,\n pills: rest.pills,\n ranges: rest.ranges,\n onTogglePill: rest.onTogglePill,\n onChangeRange: rest.onChangeRange,\n }).applied,\n ).length\n }\n compact={compact}\n onOpen={(element) => {\n setAnchor(element);\n onOpenChange?.(true);\n }}\n testIdPrefix={rest.testIdPrefix}\n />\n <Popover\n open={Boolean(anchor)}\n anchorEl={anchor}\n onClose={() => {\n setAnchor(null);\n onOpenChange?.(false);\n }}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"left\" }}\n slotProps={{ paper: { sx: { width: sxRem(300), maxWidth: (theme: Theme) => `calc(100vw - ${rem(theme, 32)})` } } }}\n >\n <Box data-testid={`${rest.testIdPrefix}-more-panel`}>\n <MoreHeading />\n {/* overflowX hidden, not auto: this panel is a fixed 300px and its\n contents are told to shrink into it. A horizontal scrollbar here\n means something refused to, which is a bug to fix rather than a\n scrollbar to live with. */}\n <Box sx={{ maxHeight: sxRem(320), overflowY: \"auto\", overflowX: \"hidden\", p: 1.5, minWidth: 0 }}>\n <MoreFields fields={fields} {...rest} />\n </Box>\n {anyApplied && (\n <MoreFooter onClearAll={onClearAll} testIdPrefix={rest.testIdPrefix} />\n )}\n </Box>\n </Popover>\n </>\n );\n}\n"],"mappings":"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","names":["default"]}
@@ -1,9 +1,12 @@
1
- import {
2
- DataViewsDisplayPanel
3
- } from "./chunk-K6KBASL2.js";
4
1
  import {
5
2
  DataViewsExportMenu
6
3
  } from "./chunk-TVXUOJAL.js";
4
+ import {
5
+ DataViewsDisplayPanel
6
+ } from "./chunk-72L5C74V.js";
7
+ import {
8
+ STICKY_BAR_ATTR
9
+ } from "./chunk-4IE66GY2.js";
7
10
  import {
8
11
  renderBulkActions
9
12
  } from "./chunk-XZE5FIRB.js";
@@ -96,7 +99,9 @@ function GridToolbar(props) {
96
99
  default2,
97
100
  {
98
101
  ref: props.barRef,
102
+ ...props.sticky ? { [STICKY_BAR_ATTR]: "" } : {},
99
103
  sx: {
104
+ ...props.sticky && { position: "sticky", top: 0, zIndex: 3, bgcolor: "background.default" },
100
105
  borderTop: 1,
101
106
  borderBottom: 1,
102
107
  borderColor: "divider",
@@ -138,4 +143,4 @@ function GridToolbar(props) {
138
143
  export {
139
144
  GridToolbar
140
145
  };
141
- //# sourceMappingURL=chunk-2VMIHFMX.js.map
146
+ //# sourceMappingURL=chunk-WVIJFS5Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-toolbar.tsx"],"sourcesContent":["\"use client\";\n\nimport Divider from \"@mui/material/Divider/index.js\";\n\nimport {\n ContentToolbar,\n FilterTrigger,\n type ColumnVisibilityOption,\n type SortFieldDefinition,\n} from \"../../layout/ContentToolbar\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { DataViewsDisplayPanel, type DisplayPanelView } from \"./data-views-display-panel\";\nimport { DataViewsExportMenu, type DataViewExport } from \"./data-views-export\";\nimport { renderBulkActions } from \"./data-views-grid-helpers\";\nimport type { RowAction } from \"./data-views-types\";\nimport type { DataViewsController } from \"./use-data-views-state\";\nimport { sxRem } from \"../../../tokens/relative\";\nimport { STICKY_BAR_ATTR } from \"./data-views-sticky-head\";\n\nexport interface GridToolbarProps<T extends Record<string, unknown>> {\n testIdPrefix: string;\n selectedRows: T[];\n selectAll: () => void;\n clearSelection: () => void;\n rowActions?: RowAction<T>[];\n bulkActions?: (selectedRows: T[], clearSelection: () => void) => React.ReactNode;\n /** A control between the count and the actions menu — see `selectionExtra`. */\n selectionExtra?: React.ReactNode;\n /** Every row on the page is ticked: the select-all box reads checked, else partial. */\n allOnPageSelected?: boolean;\n sortFields: SortFieldDefinition[];\n activeSortField: string;\n activeSortOrder: \"asc\" | \"desc\";\n onChangeSort: (field: string, order: \"asc\" | \"desc\") => void;\n matchedCount: number;\n totalCount: number;\n toolbarRightSlot?: React.ReactNode;\n columnOptions: ColumnVisibilityOption[];\n onToggleColumn: (id: string, visible: boolean) => void;\n filterOpen: boolean;\n setFilterOpen: (open: boolean) => void;\n activeFilterCount: number;\n /** Hide the \"Filtros\" slide-in trigger (compact layout shows filters inline). */\n showFilterTrigger?: boolean;\n /**\n * Search + filter controls, rendered ON the toolbar line rather than on a row\n * beneath it. Absent ⇒ the toolbar keeps its plain two-cluster shape.\n */\n filterControls?: React.ReactNode;\n /** Measures the toolbar ROW for the filter overflow — see `useFilterOverflow`. */\n barRef?: React.Ref<HTMLDivElement>;\n /** The controller, so \"Exibir\" can drive sort, columns, order and format. */\n c: DataViewsController<T>;\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, when the host has views. */\n displayView?: DisplayPanelView;\n /** Injected export. Absent ⇒ no Exportar control. */\n exportConfig?: DataViewExport;\n /**\n * Step 2 of the degradation ladder: Exibir/Exportar as icons only.\n * MEASURED upstream (see `useFilterOverflow`) rather than switched at a\n * breakpoint, so a two-filter page keeps its labels where a five-filter one\n * has already given them up.\n */\n compactControls?: boolean;\n /**\n * Step 5 of the ladder, and its floor: on a screen too narrow for even the\n * fully-collapsed row, the counter is dropped so the controls still fit one\n * line instead of spilling outside the toolbar.\n */\n counterHidden?: boolean;\n /**\n * Pin the band to the top of the page's scroll area (`stickyToolbar`). It\n * takes the page background so rows scrolling under it do not show through,\n * and sits above the table header that follows it (`useStickyTableHead`).\n */\n sticky?: boolean;\n}\n\n/** The right-aligned toolbar controls: Sort By, the counter, zoom/layout/columns, filters. */\nfunction ToolbarRightControls<T extends Record<string, unknown>>(props: GridToolbarProps<T>): React.JSX.Element {\n const { testIdPrefix, matchedCount, totalCount, filterOpen, setFilterOpen } = props;\n return (\n <>\n {/* MEASURED, never breakpointed: `RESERVED.counter` prices it into the\n ladder, so hiding it at `md` was the ladder and a breakpoint\n disagreeing about the same pixels — which broke the row at exactly\n 900px. It is dropped only as the ladder's last rung. */}\n {!props.counterHidden && (\n <>\n <Text variant=\"caption\" as=\"span\">\n <Box\n component=\"span\"\n data-testid={`${testIdPrefix}-counter`}\n sx={{ whiteSpace: \"nowrap\" }}\n >\n {matchedCount} de {totalCount}\n </Box>\n </Text>\n {/* Divides the READING of the list from the controls that change it —\n the counter states what is on screen, everything right of here\n acts on it. */}\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ height: sxRem(20), alignSelf: \"center\", mx: 0.5 }}\n />\n </>\n )}\n {props.toolbarRightSlot}\n {/* Sort + columns + format, in ONE control — see DataViewsDisplayPanel. */}\n <DataViewsDisplayPanel\n c={props.c}\n testIdPrefix={testIdPrefix}\n sortKinds={props.sortKinds}\n view={props.displayView}\n compact={props.compactControls}\n />\n {props.exportConfig && (\n <DataViewsExportMenu\n config={props.exportConfig}\n query={props.c.currentQuery}\n totalCount={props.totalCount}\n selectedIds={[...props.c.selectedIds]}\n columns={props.columnOptions.filter((col) => col.visible).map((col) => ({ id: col.id, label: col.label }))}\n testIdPrefix={testIdPrefix}\n compact={props.compactControls}\n />\n )}\n {props.showFilterTrigger !== false && (\n <FilterTrigger\n open={filterOpen}\n onOpenChange={setFilterOpen}\n activeCount={props.activeFilterCount}\n data-testid={`${testIdPrefix}-filters-toggle`}\n />\n )}\n </>\n );\n}\n\n/**\n * The bordered toolbar band: selection chrome + Sort By, the result counter, the\n * saved-views slot, and the filter funnel. The negative margin lets the top/bottom\n * separators reach the sidebar's vertical line and the window edge.\n */\nexport function GridToolbar<T extends Record<string, unknown>>(props: GridToolbarProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { testIdPrefix, selectedRows } = props;\n return (\n <Box\n ref={props.barRef}\n {...(props.sticky ? { [STICKY_BAR_ATTR]: \"\" } : {})}\n sx={{\n ...(props.sticky && { position: \"sticky\", top: 0, zIndex: 3, bgcolor: \"background.default\" }),\n borderTop: 1,\n borderBottom: 1,\n borderColor: \"divider\",\n py: 1.25,\n mx: { xs: -2, md: -3 },\n px: { xs: 2, md: 3 },\n }}\n >\n <ContentToolbar\n selectAllLabel={copy.selection.selectAll}\n selectAllText={copy.selection.selectAllOnPage}\n clearAllText={copy.filters.clearAll}\n hasSelection={selectedRows.length > 0}\n selectedCount={selectedRows.length}\n selectedCountLabel={copy.selection.selectedCount}\n selectAll={props.selectAll}\n clearSelection={props.clearSelection}\n selectAllTestId={`${testIdPrefix}-select-all`}\n clearAllTestId={`${testIdPrefix}-clear-all`}\n selectionExtra={props.selectionExtra}\n allSelected={props.allOnPageSelected}\n actions={renderBulkActions({\n rowActions: props.rowActions,\n bulkActions: props.bulkActions,\n selectedRows,\n clearSelection: props.clearSelection,\n testIdPrefix,\n })}\n leadingControls={props.filterControls}\n // Selection takes the whole line: no Select All while browsing, and no\n // search/filters/Exibir/Exportar once a row is ticked.\n exclusiveSelection\n rightControls={<ToolbarRightControls {...props} />}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["default"]}
@@ -76,8 +76,24 @@ function DataViewsEmpty({
76
76
  }
77
77
  );
78
78
  }
79
+ function ShellEmpty({
80
+ c,
81
+ emptyState,
82
+ testIdPrefix
83
+ }) {
84
+ return /* @__PURE__ */ jsx(
85
+ DataViewsEmpty,
86
+ {
87
+ filtered: c.activeFilterCount > 0 || c.state.search !== "",
88
+ onClearFilters: () => c.patch({ search: "", pills: {}, ranges: {} }),
89
+ emptyState,
90
+ testIdPrefix
91
+ }
92
+ );
93
+ }
79
94
 
80
95
  export {
81
- DataViewsEmpty
96
+ DataViewsEmpty,
97
+ ShellEmpty
82
98
  };
83
- //# sourceMappingURL=chunk-375HTCF2.js.map
99
+ //# sourceMappingURL=chunk-Y2CCXB7R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/data-views-empty.tsx"],"sourcesContent":["\"use client\";\n\nimport FilterAltOffRoundedIcon from \"@mui/icons-material/FilterAltOffRounded\";\nimport InboxRoundedIcon from \"@mui/icons-material/InboxRounded\";\n\nimport { Button } from \"../../form/Button\";\nimport { Box } from \"../../../mui/Box\";\nimport { sxRem } from \"../../../tokens/relative\";\nimport { Text } from \"../../typography/Text\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport type { DataViewsController } from \"./use-data-views-state\";\n\n/**\n * TWO EMPTY STATES, NOT ONE.\n *\n * \"Nenhum pagamento registrado\" under an active filter is a lie, and it is the\n * expensive kind: the operator reads it as \"this store has no payments\" and\n * goes looking for the bug somewhere else. The page's own empty copy answers\n * \"there is nothing here yet\"; it cannot answer \"nothing matches what you\n * typed\", because it does not know what was typed.\n *\n * So the grid renders the FILTERED variant itself — it is the only party that\n * knows a filter is applied — and defers to the host's `emptyState` only when\n * the list is genuinely empty. The filtered one carries the way out, which is\n * the whole point: the fix is one click, and it is right there.\n */\nexport function DataViewsEmpty({\n filtered,\n onClearFilters,\n emptyState,\n testIdPrefix,\n}: {\n /** Is anything narrowing the list right now (search, pills or ranges)? */\n filtered: boolean;\n onClearFilters: () => void;\n /** The page's own copy for a genuinely empty list. */\n emptyState?: React.ReactNode;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const Icon = filtered ? FilterAltOffRoundedIcon : InboxRoundedIcon;\n return (\n <Box\n data-testid={`${testIdPrefix}-empty${filtered ? \"-filtered\" : \"\"}`}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n textAlign: \"center\",\n py: 8,\n px: 2,\n }}\n >\n <Box\n sx={{\n display: \"inline-flex\",\n p: 2,\n mb: 1.5,\n borderRadius: \"50%\",\n bgcolor: \"action.hover\",\n color: \"text.disabled\",\n }}\n >\n <Icon />\n </Box>\n {filtered ? (\n <>\n <Text variant=\"body\" as=\"p\">\n <Box component=\"span\" sx={{ fontWeight: 600 }}>\n {copy.grid.emptyFilteredTitle}\n </Box>\n </Text>\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ display: \"block\", mt: 0.5, mb: 2, color: \"text.secondary\", maxWidth: sxRem(380) }}>\n {copy.grid.emptyFilteredHint}\n </Box>\n </Text>\n <Button\n variant=\"outline\"\n size=\"sm\"\n color=\"secondary\"\n onClick={onClearFilters}\n dataTestId={`${testIdPrefix}-empty-clear`}\n >\n {copy.grid.emptyFilteredAction}\n </Button>\n </>\n ) : (\n // The page's own words for \"nothing here yet\" — it knows what the\n // entity is and how one comes to exist; this component does not.\n emptyState\n )}\n </Box>\n );\n}\n\n/**\n * The grid renders the FILTERED empty state itself — it is the only party that\n * knows a filter is applied. See {@link DataViewsEmpty}.\n */\nexport function ShellEmpty<T extends Record<string, unknown>>({\n c,\n emptyState,\n testIdPrefix,\n}: {\n c: DataViewsController<T>;\n emptyState?: React.ReactNode;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <DataViewsEmpty\n filtered={c.activeFilterCount > 0 || c.state.search !== \"\"}\n onClearFilters={() => c.patch({ search: \"\", pills: {}, ranges: {} })}\n emptyState={emptyState}\n testIdPrefix={testIdPrefix}\n />\n );\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,OAAO,6BAA6B;AACpC,OAAO,sBAAsB;AA6DrB,SAGA,UAHA,KAGA,YAHA;AArCD,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOsB;AACpB,QAAM,OAAO,iBAAiB;AAC9B,QAAM,OAAO,WAAW,0BAA0B;AAClD,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,eAAa,GAAG,YAAY,SAAS,WAAW,cAAc,EAAE;AAAA,MAChE,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MAEA;AAAA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,cAAc;AAAA,cACd,SAAS;AAAA,cACT,OAAO;AAAA,YACT;AAAA,YAEA,8BAAC,QAAK;AAAA;AAAA,QACR;AAAA,QACC,WACC,iCACE;AAAA,8BAAC,QAAK,SAAQ,QAAO,IAAG,KACtB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,YAAY,IAAI,GACzC,eAAK,KAAK,oBACb,GACF;AAAA,UACA,oBAAC,QAAK,SAAQ,WAAU,IAAG,KACzB,8BAACA,UAAA,EAAI,WAAU,QAAO,IAAI,EAAE,SAAS,SAAS,IAAI,KAAK,IAAI,GAAG,OAAO,kBAAkB,UAAU,MAAM,GAAG,EAAE,GACzG,eAAK,KAAK,mBACb,GACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAM;AAAA,cACN,SAAS;AAAA,cACT,YAAY,GAAG,YAAY;AAAA,cAE1B,eAAK,KAAK;AAAA;AAAA,UACb;AAAA,WACF;AAAA;AAAA;AAAA,UAIA;AAAA;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAMO,SAAS,WAA8C;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF,GAIsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,EAAE,oBAAoB,KAAK,EAAE,MAAM,WAAW;AAAA,MACxD,gBAAgB,MAAM,EAAE,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,MACnE;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;","names":["default"]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-YLGY3D52.js";
9
9
  import {
10
10
  useDataViewsLayout
11
- } from "./chunk-JYMXYSDP.js";
11
+ } from "./chunk-5CAWRMDX.js";
12
12
  import {
13
13
  useDataViewsCopy
14
14
  } from "./chunk-KHG57NAE.js";
@@ -246,4 +246,4 @@ export {
246
246
  SortTab,
247
247
  DisplayTab
248
248
  };
249
- //# sourceMappingURL=chunk-33XGC4YU.js.map
249
+ //# sourceMappingURL=chunk-YEGZIYVM.js.map
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  // src/components/feedback/StackedModal/StackedModal.styles.ts
12
12
  import { alpha } from "@mui/material/styles/index.js";
13
- var STYLE_ONLY_PROPS = ["modalRole", "isAnimating", "glass", "rtl", "customMaxWidth", "panelSize"];
13
+ var STYLE_ONLY_PROPS = ["modalRole", "isAnimating", "glass", "rtl", "customMaxWidth", "panelSize", "panelWidth"];
14
14
  var MAX_WIDTH_PX = {
15
15
  xs: 444,
16
16
  sm: 600,
@@ -26,6 +26,11 @@ var ANIMATION_BY_ROLE = {
26
26
  secondary: "expandModal 300ms ease-in-out forwards",
27
27
  primary: "contractModal 300ms ease-in-out forwards"
28
28
  };
29
+ var EXACT_WIDTH_VAR = "--stacked-modal-width";
30
+ var EXACT_ANIMATION_BY_ROLE = {
31
+ secondary: "expandModalExact 300ms ease-in-out forwards",
32
+ primary: "contractModalExact 300ms ease-in-out forwards"
33
+ };
29
34
  var WIDE_ANIMATION_BY_ROLE = {
30
35
  secondary: "expandModalWide 300ms ease-in-out forwards",
31
36
  primary: "contractModalWide 300ms ease-in-out forwards"
@@ -46,6 +51,15 @@ var KEYFRAMES = {
46
51
  "@keyframes contractModalWide": {
47
52
  from: { width: "100vw", transform: "translateX(0)" },
48
53
  to: { width: "90vw", transform: "translateX(0)" }
54
+ },
55
+ // An exact-width panel settles at its own width, carried by the custom property.
56
+ "@keyframes expandModalExact": {
57
+ from: { width: `var(${EXACT_WIDTH_VAR})`, transform: "translateX(0)" },
58
+ to: { width: "100vw", transform: "translateX(0)" }
59
+ },
60
+ "@keyframes contractModalExact": {
61
+ from: { width: "100vw", transform: "translateX(0)" },
62
+ to: { width: `var(${EXACT_WIDTH_VAR})`, transform: "translateX(0)" }
49
63
  }
50
64
  };
51
65
  var cap = (customMaxWidth) => customMaxWidth ? MAX_WIDTH_PX[customMaxWidth] : null;
@@ -67,6 +81,17 @@ var widePrimaryPanelStyles = (theme, capPx) => ({
67
81
  [theme.breakpoints.up("xl")]: panelWidth(theme, "75vw", capPx),
68
82
  [theme.breakpoints.up(2200)]: panelWidth(theme, "60vw", capPx)
69
83
  });
84
+ var exactPrimaryPanelStyles = (theme, exact) => {
85
+ const width = `min(${exact.share}, ${rem(theme, exact.maxPx)})`;
86
+ const full = { [EXACT_WIDTH_VAR]: "100%", width: "100%", maxWidth: "100%" };
87
+ return {
88
+ [EXACT_WIDTH_VAR]: width,
89
+ width: `var(${EXACT_WIDTH_VAR})`,
90
+ maxWidth: `var(${EXACT_WIDTH_VAR})`,
91
+ [theme.breakpoints.down("sm")]: full,
92
+ ...exact.fullBelowPx ? { [theme.breakpoints.down(exact.fullBelowPx)]: full } : {}
93
+ };
94
+ };
70
95
  var secondaryPanelStyles = () => ({
71
96
  width: "100vw !important",
72
97
  maxWidth: "100vw !important",
@@ -77,8 +102,9 @@ var secondaryPanelStyles = () => ({
77
102
  opacity: 0.95,
78
103
  transform: "scale(1)"
79
104
  });
80
- var rolePanelStyles = (theme, role, capPx, size) => {
105
+ var rolePanelStyles = (theme, role, capPx, size, exact) => {
81
106
  if (role === "primary") {
107
+ if (exact) return exactPrimaryPanelStyles(theme, exact);
82
108
  return size === "wide" ? widePrimaryPanelStyles(theme, capPx) : primaryPanelStyles(theme, capPx);
83
109
  }
84
110
  if (role === "secondary") return secondaryPanelStyles();
@@ -91,8 +117,12 @@ var glassStyles = (theme, glass, role) => glass && role === "primary" ? {
91
117
  WebkitBackdropFilter: `blur(${rem(theme, 10)})`,
92
118
  border: `1px solid ${alpha(theme.palette.divider, 0.18)}`
93
119
  } : {};
94
- var animationStyles = (isAnimating, role, size) => {
95
- const byRole = size === "wide" ? WIDE_ANIMATION_BY_ROLE : ANIMATION_BY_ROLE;
120
+ var animationByRole = (size, exact) => {
121
+ if (exact) return EXACT_ANIMATION_BY_ROLE;
122
+ return size === "wide" ? WIDE_ANIMATION_BY_ROLE : ANIMATION_BY_ROLE;
123
+ };
124
+ var animationStyles = (isAnimating, role, size, exact) => {
125
+ const byRole = animationByRole(size, exact);
96
126
  return isAnimating ? { animation: (role && byRole[role]) ?? "none" } : {};
97
127
  };
98
128
  var panelBaseStyles = (theme) => ({
@@ -115,9 +145,9 @@ var panelStyles = (theme, props) => {
115
145
  const capPx = cap(props.customMaxWidth);
116
146
  return {
117
147
  ...panelBaseStyles(theme),
118
- ...rolePanelStyles(theme, props.modalRole, capPx, props.panelSize),
148
+ ...rolePanelStyles(theme, props.modalRole, capPx, props.panelSize, props.panelWidth),
119
149
  ...glassStyles(theme, props.glass, props.modalRole),
120
- ...animationStyles(props.isAnimating, props.modalRole, props.panelSize)
150
+ ...animationStyles(props.isAnimating, props.modalRole, props.panelSize, props.panelWidth)
121
151
  };
122
152
  };
123
153
  var dialogRootStyles = (theme, props) => ({
@@ -183,4 +213,4 @@ export {
183
213
  loadingOverlayStyles,
184
214
  modalContentStyles
185
215
  };
186
- //# sourceMappingURL=chunk-3PGY4UL4.js.map
216
+ //# sourceMappingURL=chunk-YKQA4NPM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport { scrim } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\nimport { dynamicViewportHeight } from '../../../utils/viewport';\nimport type { ModalPanelRole, PanelMaxWidth, PanelSize, PanelWidth } from './StackedModal.types';\n\n/** Props that drive the panel's look but must not reach the DOM. */\nexport interface PanelStyleProps {\n modalRole?: ModalPanelRole;\n isAnimating?: boolean;\n glass?: boolean;\n rtl?: boolean;\n customMaxWidth?: PanelMaxWidth;\n panelSize?: PanelSize;\n panelWidth?: PanelWidth;\n}\n\n/** Style-only props, filtered out before they can land on a DOM node. */\nexport const STYLE_ONLY_PROPS = ['modalRole', 'isAnimating', 'glass', 'rtl', 'customMaxWidth', 'panelSize', 'panelWidth'];\n\n/** MUI breakpoint names mapped to the pixel width they cap the panel at. */\nconst MAX_WIDTH_PX: Record<Exclude<PanelMaxWidth, false>, number> = {\n xs: 444,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n};\n\n/** The scrim's opacity behind each receding panel role. */\nconst BACKDROP_ALPHA_BY_ROLE: Partial<Record<ModalPanelRole, number>> = {\n secondary: 0.3,\n background: 0.1,\n};\n\nconst ANIMATION_BY_ROLE: Partial<Record<ModalPanelRole, string>> = {\n secondary: 'expandModal 300ms ease-in-out forwards',\n primary: 'contractModal 300ms ease-in-out forwards',\n};\n\n/** The custom property an exact-width panel's width and keyframes share. */\nconst EXACT_WIDTH_VAR = '--stacked-modal-width';\n\n/** An exact-width panel settles at its own width, so its keyframes read it too. */\nconst EXACT_ANIMATION_BY_ROLE: Partial<Record<ModalPanelRole, string>> = {\n secondary: 'expandModalExact 300ms ease-in-out forwards',\n primary: 'contractModalExact 300ms ease-in-out forwards',\n};\n\n/** A wide panel settles at 90vw, so its keyframes must end there too, or it snaps. */\nconst WIDE_ANIMATION_BY_ROLE: Partial<Record<ModalPanelRole, string>> = {\n secondary: 'expandModalWide 300ms ease-in-out forwards',\n primary: 'contractModalWide 300ms ease-in-out forwards',\n};\n\n// Animation endpoints use the common lg width (60vw); the role styles set the\n// exact per-breakpoint width once the animation settles.\nconst KEYFRAMES: CSSObject = {\n '@keyframes expandModal': {\n from: { width: '60vw', transform: 'translateX(0)' },\n to: { width: '100vw', transform: 'translateX(0)' },\n },\n '@keyframes contractModal': {\n from: { width: '100vw', transform: 'translateX(0)' },\n to: { width: '60vw', transform: 'translateX(0)' },\n },\n '@keyframes expandModalWide': {\n from: { width: '90vw', transform: 'translateX(0)' },\n to: { width: '100vw', transform: 'translateX(0)' },\n },\n '@keyframes contractModalWide': {\n from: { width: '100vw', transform: 'translateX(0)' },\n to: { width: '90vw', transform: 'translateX(0)' },\n },\n // An exact-width panel settles at its own width, carried by the custom property.\n '@keyframes expandModalExact': {\n from: { width: `var(${EXACT_WIDTH_VAR})`, transform: 'translateX(0)' },\n to: { width: '100vw', transform: 'translateX(0)' },\n },\n '@keyframes contractModalExact': {\n from: { width: '100vw', transform: 'translateX(0)' },\n to: { width: `var(${EXACT_WIDTH_VAR})`, transform: 'translateX(0)' },\n },\n};\n\nconst cap = (customMaxWidth?: PanelMaxWidth): number | null =>\n customMaxWidth ? MAX_WIDTH_PX[customMaxWidth] : null;\n\n/** One breakpoint's width: the viewport share, held under the optional px cap. */\nconst panelWidth = (theme: Theme, share: string, capPx: number | null): CSSObject =>\n capPx\n ? { width: `min(${share}, ${rem(theme, capPx)})`, maxWidth: rem(theme, capPx) }\n : { width: share, maxWidth: share };\n\nconst backdropStyles = (theme: Theme, modalRole?: ModalPanelRole): CSSObject => ({\n backgroundColor: scrim(theme, (modalRole && BACKDROP_ALPHA_BY_ROLE[modalRole]) ?? 0.5),\n backdropFilter: modalRole === 'primary' ? `blur(${rem(theme, 4)})` : 'none',\n});\n\n/**\n * The top panel is viewport-aware and narrows as the screen grows: full width on\n * mobile, 80vw on tablet/small desktop, 60vw on regular desktops (lg up —\n * including ~1080p/1440p/1080-wide), and 40vw only on ultra-wide screens\n * (≥2200px) so the receding panel stays visible on huge monitors. A `maxWidth`\n * prop, when given, caps it further.\n */\nconst primaryPanelStyles = (theme: Theme, capPx: number | null): CSSObject => ({\n [theme.breakpoints.down('sm')]: panelWidth(theme, '100%', capPx),\n [theme.breakpoints.between('sm', 'lg')]: panelWidth(theme, '80vw', capPx),\n [theme.breakpoints.up('lg')]: panelWidth(theme, '60vw', capPx),\n // A viewport width, in the theme's breakpoint unit like the three above.\n [theme.breakpoints.up(2200)]: panelWidth(theme, '40vw', capPx),\n});\n\n/**\n * `size=\"wide\"`: 90vw up to `xl`, 75vw above it, 60vw on ultra-wide screens.\n * At 1280 that is ~1150px instead of 768px — room for a form column beside a\n * fixed ~350px sidebar — while a sliver of the page behind stays visible.\n */\nconst widePrimaryPanelStyles = (theme: Theme, capPx: number | null): CSSObject => ({\n [theme.breakpoints.down('sm')]: panelWidth(theme, '100%', capPx),\n [theme.breakpoints.between('sm', 'xl')]: panelWidth(theme, '90vw', capPx),\n [theme.breakpoints.up('xl')]: panelWidth(theme, '75vw', capPx),\n [theme.breakpoints.up(2200)]: panelWidth(theme, '60vw', capPx),\n});\n\n/**\n * `panelWidth`: `min(share, maxPx)` from `sm` up, the whole screen under `sm`\n * and under `fullBelowPx`. Viewport media queries only — never the panel's size.\n */\nconst exactPrimaryPanelStyles = (theme: Theme, exact: PanelWidth): CSSObject => {\n const width = `min(${exact.share}, ${rem(theme, exact.maxPx)})`;\n const full = { [EXACT_WIDTH_VAR]: '100%', width: '100%', maxWidth: '100%' };\n return {\n [EXACT_WIDTH_VAR]: width,\n width: `var(${EXACT_WIDTH_VAR})`,\n maxWidth: `var(${EXACT_WIDTH_VAR})`,\n [theme.breakpoints.down('sm')]: full,\n ...(exact.fullBelowPx ? { [theme.breakpoints.down(exact.fullBelowPx)]: full } : {}),\n };\n};\n\n/** Panels below the top one expand to full width, producing the GTM stacking effect. */\nconst secondaryPanelStyles = (): CSSObject => ({\n width: '100vw !important',\n maxWidth: '100vw !important',\n right: '0 !important',\n top: '0 !important',\n ...dynamicViewportHeight('height', 'maxHeight'),\n borderRadius: '0 !important',\n opacity: 0.95,\n transform: 'scale(1)',\n});\n\nconst rolePanelStyles = (\n theme: Theme,\n role: ModalPanelRole | undefined,\n capPx: number | null,\n size?: PanelSize,\n exact?: PanelWidth,\n): CSSObject => {\n if (role === 'primary') {\n if (exact) return exactPrimaryPanelStyles(theme, exact);\n return size === 'wide' ? widePrimaryPanelStyles(theme, capPx) : primaryPanelStyles(theme, capPx);\n }\n if (role === 'secondary') return secondaryPanelStyles();\n // Background modals stay mounted but hidden, for performance.\n if (role === 'background') return { display: 'none' };\n return {};\n};\n\nconst glassStyles = (theme: Theme, glass?: boolean, role?: ModalPanelRole): CSSObject =>\n glass && role === 'primary'\n ? {\n backgroundColor: alpha(theme.palette.background.paper, 0.85),\n backdropFilter: `blur(${rem(theme, 10)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 10)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n }\n : {};\n\nconst animationByRole = (size?: PanelSize, exact?: PanelWidth): Partial<Record<ModalPanelRole, string>> => {\n if (exact) return EXACT_ANIMATION_BY_ROLE;\n return size === 'wide' ? WIDE_ANIMATION_BY_ROLE : ANIMATION_BY_ROLE;\n};\n\nconst animationStyles = (\n isAnimating?: boolean,\n role?: ModalPanelRole,\n size?: PanelSize,\n exact?: PanelWidth,\n): CSSObject => {\n const byRole = animationByRole(size, exact);\n return isAnimating ? { animation: (role && byRole[role]) ?? 'none' } : {};\n};\n\nconst panelBaseStyles = (theme: Theme): CSSObject => ({\n margin: 0,\n position: 'fixed',\n right: 0,\n top: 0,\n // Pinned to the DYNAMIC viewport: on iOS a `100vh` panel runs underneath the\n // browser toolbar, which parks the tail of the scroll area (the submit row)\n // out of reach. See `dynamicViewportHeight`.\n ...dynamicViewportHeight('height', 'maxHeight'),\n borderRadius: 0,\n willChange: 'transform, width, border-radius',\n transition: theme.transitions.create(\n ['width', 'max-width', 'border-radius', 'transform', 'opacity'],\n { duration: 300, easing: theme.transitions.easing.easeInOut },\n ),\n});\n\nconst panelStyles = (theme: Theme, props: PanelStyleProps): CSSObject => {\n const capPx = cap(props.customMaxWidth);\n return {\n ...panelBaseStyles(theme),\n ...rolePanelStyles(theme, props.modalRole, capPx, props.panelSize, props.panelWidth),\n ...glassStyles(theme, props.glass, props.modalRole),\n ...animationStyles(props.isAnimating, props.modalRole, props.panelSize, props.panelWidth),\n };\n};\n\n/** The full rule set for the sliding panel's Dialog root. */\nexport const dialogRootStyles = (theme: Theme, props: PanelStyleProps): CSSObject => ({\n direction: props.rtl ? 'rtl' : 'ltr',\n // The dialog's OWN backdrop only: a descendant selector also reached the\n // backdrop of any sheet or drawer rendered inside the panel, and blurred the\n // very panel that sheet sits on.\n '& > .MuiBackdrop-root': backdropStyles(theme, props.modalRole),\n '& .MuiDialog-container': { alignItems: 'flex-start', justifyContent: 'flex-end' },\n '& .MuiDialog-paper': panelStyles(theme, props),\n ...KEYFRAMES,\n});\n\nexport const titleStyles = (theme: Theme, rtl?: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 2.5),\n borderBottom: `1px solid ${theme.palette.divider}`,\n direction: rtl ? 'rtl' : 'ltr',\n});\n\nexport const titleLeftStyles = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n flex: 1,\n});\n\nexport const titleRightStyles = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n});\n\nexport const loadingOverlayStyles = (theme: Theme): CSSObject => ({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(theme.palette.background.paper, 0.8),\n zIndex: 9999,\n});\n\nexport const modalContentStyles = (theme: Theme): CSSObject => ({\n padding: theme.spacing(3),\n // MUI's DialogContent defaults to `overflow-y: auto`, but inside a panel it is\n // NOT the element that scrolls — ModalBody above it is, and this box always\n // ends up exactly as tall as its own content. A scroll container that never\n // scrolls is still the containing block for every `position: sticky`\n // descendant, so a sticky header anchored here gets zero travel and rides the\n // content out of view: sticky, and pinned to nothing. Handing the overflow\n // back to ModalBody makes the panel's own scroller the anchor.\n overflowY: 'visible',\n});\n"],"mappings":"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","names":[]}
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-SALQ65SM.js";
4
4
  import {
5
5
  useSummaryInfo
6
- } from "./chunk-AAXLQFC7.js";
6
+ } from "./chunk-3FIIMP7I.js";
7
7
  import {
8
8
  LearnMore,
9
9
  PendingSpinner,
10
10
  SaveError,
11
11
  SettingHeader,
12
12
  partTestId
13
- } from "./chunk-OJFE5PK6.js";
13
+ } from "./chunk-ZZO5MRMV.js";
14
14
  import {
15
15
  SETTING_CARD_OPEN_ATTR,
16
16
  actionsStyles,
@@ -170,4 +170,4 @@ SettingCard.displayName = "SettingCard";
170
170
  export {
171
171
  SettingCard
172
172
  };
173
- //# sourceMappingURL=chunk-XMVPNCYM.js.map
173
+ //# sourceMappingURL=chunk-YQGVO3ZU.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-JYWF76Z5.js";
13
13
  import {
14
14
  Chip
15
- } from "./chunk-EWTSQTVR.js";
15
+ } from "./chunk-NI67M453.js";
16
16
  import {
17
17
  Icon
18
18
  } from "./chunk-SEWUYHSG.js";
@@ -139,4 +139,4 @@ export {
139
139
  PendingSpinner,
140
140
  LearnMore
141
141
  };
142
- //# sourceMappingURL=chunk-OJFE5PK6.js.map
142
+ //# sourceMappingURL=chunk-ZZO5MRMV.js.map
@@ -2,11 +2,11 @@ import "../chunk-UDQSIRAP.js";
2
2
  import {
3
3
  Avatar,
4
4
  AvatarGroup
5
- } from "../chunk-KARMRTTM.js";
6
- import "../chunk-7XSCEHGA.js";
7
- import "../chunk-MTEQEPNY.js";
8
- import "../chunk-6ZZGK5DT.js";
5
+ } from "../chunk-J2RUDZVJ.js";
9
6
  import "../chunk-3ZVUNSFF.js";
7
+ import "../chunk-EOQ6EKTS.js";
8
+ import "../chunk-6ZZGK5DT.js";
9
+ import "../chunk-MTEQEPNY.js";
10
10
  import "../chunk-XJAD6E3V.js";
11
11
  import "../chunk-F5H2ZXST.js";
12
12
  import "../chunk-N3GAFIXG.js";
@@ -1,9 +1,16 @@
1
+ import {
2
+ CardKebab
3
+ } from "../chunk-P4LR2GLN.js";
1
4
  import {
2
5
  useRowConfirm
3
6
  } from "../chunk-6QOJEZDH.js";
4
7
  import {
5
8
  useRemoveConfirm
6
9
  } from "../chunk-62BY4ZUQ.js";
10
+ import {
11
+ CardActionsProvider,
12
+ useCardActions
13
+ } from "../chunk-N7KWWIF7.js";
7
14
  import {
8
15
  rowActionsToMenuItems
9
16
  } from "../chunk-ZBXG6RVJ.js";
@@ -14,13 +21,6 @@ import {
14
21
  Ledger,
15
22
  TagList
16
23
  } from "../chunk-JOKWTRWL.js";
17
- import {
18
- CardActionsProvider,
19
- useCardActions
20
- } from "../chunk-N7KWWIF7.js";
21
- import {
22
- CardKebab
23
- } from "../chunk-P4LR2GLN.js";
24
24
  import "../chunk-WVML3ENZ.js";
25
25
  import "../chunk-AY5GKCH7.js";
26
26
  import "../chunk-XCBQXSTR.js";
@@ -1,8 +1,7 @@
1
1
  import "../chunk-62FET2BM.js";
2
2
  import {
3
3
  Carousel
4
- } from "../chunk-S4JXSC4D.js";
5
- import "../chunk-Z64TMGYT.js";
4
+ } from "../chunk-V6SRBQMN.js";
6
5
  import "../chunk-6FDLBWTE.js";
7
6
  import "../chunk-RUIV5TVA.js";
8
7
  import "../chunk-RUF7TOAZ.js";
@@ -11,6 +10,7 @@ import {
11
10
  CarouselIndicators,
12
11
  CarouselThumbnails
13
12
  } from "../chunk-FRGNTTPA.js";
13
+ import "../chunk-Z64TMGYT.js";
14
14
  import "../chunk-HPK33ACY.js";
15
15
  import "../chunk-B7ZHEOQQ.js";
16
16
  import "../chunk-BRHRK7BK.js";
@@ -1,29 +1,22 @@
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";
7
+ } from "../chunk-HI7JPDD6.js";
8
8
  import {
9
9
  CHART_SEMANTIC_COLORS,
10
10
  ChartSpecError,
11
11
  parseChartSpec,
12
12
  specToChartProps
13
- } from "../chunk-HQCZT6TO.js";
14
- import {
15
- chartValueFormatter,
16
- formatChartValue
17
- } from "../chunk-6GPNZSAE.js";
13
+ } from "../chunk-JVOEVTCZ.js";
18
14
  import {
19
15
  getChartSpecRenderer,
20
16
  getRegisteredChartSpecTypes,
21
17
  registerChartSpecRenderer
22
18
  } from "../chunk-WKUA6P3W.js";
23
- import "../chunk-6ATXOJVQ.js";
24
- import "../chunk-TZC6KIK2.js";
25
- import "../chunk-TCWISGSS.js";
26
- import "../chunk-SOHQPPYJ.js";
19
+ import "../chunk-QADTI63U.js";
27
20
  import {
28
21
  ChartContainer,
29
22
  ChartLegend,
@@ -31,6 +24,13 @@ import {
31
24
  ChartTooltip,
32
25
  ChartTooltipContent
33
26
  } from "../chunk-RIRTW5EU.js";
27
+ import {
28
+ chartValueFormatter,
29
+ formatChartValue
30
+ } from "../chunk-6GPNZSAE.js";
31
+ import "../chunk-TZC6KIK2.js";
32
+ import "../chunk-TCWISGSS.js";
33
+ import "../chunk-SOHQPPYJ.js";
34
34
  import "../chunk-B7ZHEOQQ.js";
35
35
  import "../chunk-BRHRK7BK.js";
36
36
  import "../chunk-25MSGLNU.js";
@@ -1,9 +1,9 @@
1
1
  import "../chunk-2GTORM5E.js";
2
2
  import {
3
3
  Chip
4
- } from "../chunk-EWTSQTVR.js";
5
- import "../chunk-HYQJJLBC.js";
6
- import "../chunk-KU6VHNRV.js";
4
+ } from "../chunk-NI67M453.js";
5
+ import "../chunk-DHAXUVMR.js";
6
+ import "../chunk-E5I776YW.js";
7
7
  import "../chunk-BF4FYOAR.js";
8
8
  import "../chunk-XJAD6E3V.js";
9
9
  import "../chunk-F5H2ZXST.js";