@12-apps/ui 6.57.0 → 6.59.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 (210) hide show
  1. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  2. package/dist/_internal/components/data-display/Badge/Badge.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 +4 -4
  5. package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
  6. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  7. package/dist/_internal/components/data-display/Chart/chart-format.js +5 -1
  8. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  9. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  10. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  11. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +18 -18
  12. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +20 -19
  13. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +5 -3
  14. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +45 -0
  15. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js.map +1 -0
  16. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  17. package/dist/_internal/components/data-display/DataViews/base-list-card.js +5 -4
  18. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +1 -1
  19. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +4 -4
  20. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +4 -4
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +17 -17
  22. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +6 -6
  23. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +4 -4
  24. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +5 -5
  25. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  26. package/dist/_internal/components/data-display/DataViews/data-views-selection-extra.js +3 -1
  27. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +1 -1
  29. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +2 -2
  30. package/dist/_internal/components/data-display/DataViews/data-views-url-echo.js +13 -0
  31. package/dist/_internal/components/data-display/DataViews/data-views-url-echo.js.map +1 -0
  32. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +1 -1
  33. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
  34. package/dist/_internal/components/data-display/index.js +16 -16
  35. package/dist/_internal/components/index.js +24 -24
  36. package/dist/_internal/components/layout/ContentToolbar/ContentToolbar.js +1 -1
  37. package/dist/_internal/components/layout/index.js +1 -1
  38. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
  39. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
  40. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  41. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
  42. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
  43. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
  44. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
  45. package/dist/_internal/components/navigation/index.js +9 -9
  46. package/dist/_internal/en-US.data-display.js +1 -1
  47. package/dist/_internal/pt-BR.data-display.js +1 -1
  48. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  49. package/dist/charts.js +8 -8
  50. package/dist/{chunk-RBHBJDOZ.js → chunk-3FMWQQW6.js} +5 -5
  51. package/dist/chunk-3FMWQQW6.js.map +1 -0
  52. package/dist/{chunk-MKAA3YIJ.js → chunk-3K7WN2PO.js} +3 -3
  53. package/dist/{chunk-GI24X7XA.js → chunk-4PPNCZWY.js} +3 -3
  54. package/dist/{chunk-573XC4HK.js → chunk-4QKS5Y35.js} +2 -2
  55. package/dist/{chunk-KX75HM5U.js → chunk-5YDS6HO3.js} +7 -2
  56. package/dist/{chunk-KX75HM5U.js.map → chunk-5YDS6HO3.js.map} +1 -1
  57. package/dist/{chunk-N4MR4EMC.js → chunk-6D2PFC5C.js} +2 -2
  58. package/dist/{chunk-QVWNK4JO.js → chunk-6GPNZSAE.js} +19 -2
  59. package/dist/chunk-6GPNZSAE.js.map +1 -0
  60. package/dist/{chunk-LJKWWXZD.js → chunk-6OSUK2C7.js} +28 -22
  61. package/dist/chunk-6OSUK2C7.js.map +1 -0
  62. package/dist/{chunk-ICSXPZXT.js → chunk-6QBT5TPS.js} +2 -2
  63. package/dist/{chunk-A6EUQDRK.js → chunk-ARJIKW56.js} +4 -2
  64. package/dist/chunk-ARJIKW56.js.map +1 -0
  65. package/dist/{chunk-53ACGKBW.js → chunk-EDBP62WG.js} +3 -3
  66. package/dist/{chunk-YXIVQFNW.js → chunk-EWIKSTJV.js} +4 -4
  67. package/dist/{chunk-LWZ2K225.js → chunk-FXZUVZON.js} +6 -6
  68. package/dist/chunk-G6EJLEVV.js +75 -0
  69. package/dist/chunk-G6EJLEVV.js.map +1 -0
  70. package/dist/{chunk-IK2ZVV3M.js → chunk-GK7JNSMK.js} +2 -2
  71. package/dist/{chunk-HFBQCJNP.js → chunk-HCYRCU4W.js} +2 -2
  72. package/dist/{chunk-BJMNAPKH.js → chunk-HH7PM5HT.js} +10 -22
  73. package/dist/chunk-HH7PM5HT.js.map +1 -0
  74. package/dist/{chunk-7AAJYWC3.js → chunk-HPO7PB4F.js} +2 -2
  75. package/dist/{chunk-WF3P7GE5.js → chunk-I3CQBEKS.js} +2 -2
  76. package/dist/{chunk-RREWYOKS.js → chunk-IL4FCC54.js} +2 -2
  77. package/dist/{chunk-7M3DRP7Q.js → chunk-ILNO4ZJ6.js} +3 -3
  78. package/dist/{chunk-R6SBP5M5.js → chunk-JVOEVTCZ.js} +4 -2
  79. package/dist/chunk-JVOEVTCZ.js.map +1 -0
  80. package/dist/{chunk-2CJZLL5Y.js → chunk-NHVL2QPG.js} +2 -1
  81. package/dist/{chunk-2CJZLL5Y.js.map → chunk-NHVL2QPG.js.map} +1 -1
  82. package/dist/{chunk-45PGSVOH.js → chunk-NTJUAPJM.js} +10 -8
  83. package/dist/chunk-NTJUAPJM.js.map +1 -0
  84. package/dist/{chunk-EUPUEMFX.js → chunk-PC4H5LVB.js} +7 -7
  85. package/dist/{chunk-KEKOPD43.js → chunk-PQ7RWH7L.js} +4 -2
  86. package/dist/chunk-PQ7RWH7L.js.map +1 -0
  87. package/dist/{chunk-HRMB72E4.js → chunk-QHP5PZNC.js} +2 -1
  88. package/dist/{chunk-HRMB72E4.js.map → chunk-QHP5PZNC.js.map} +1 -1
  89. package/dist/{chunk-GNBCSTXF.js → chunk-QKAYXAQE.js} +6 -6
  90. package/dist/{chunk-GNBCSTXF.js.map → chunk-QKAYXAQE.js.map} +1 -1
  91. package/dist/{chunk-TZFBJ47T.js → chunk-SFLNHCA2.js} +39 -15
  92. package/dist/chunk-SFLNHCA2.js.map +1 -0
  93. package/dist/{chunk-OBMPE6PW.js → chunk-SSDYEOU4.js} +5 -5
  94. package/dist/{chunk-I6ESCBY3.js → chunk-TF27Z27K.js} +2 -2
  95. package/dist/{chunk-JF5LQOGB.js → chunk-U47KRLEW.js} +57 -45
  96. package/dist/chunk-U47KRLEW.js.map +1 -0
  97. package/dist/chunk-V4V2N6YJ.js +55 -0
  98. package/dist/chunk-V4V2N6YJ.js.map +1 -0
  99. package/dist/{chunk-C67FDYG7.js → chunk-W7N4ORCV.js} +16 -6
  100. package/dist/chunk-W7N4ORCV.js.map +1 -0
  101. package/dist/{chunk-JL77BSOL.js → chunk-WBDQSBLV.js} +2 -2
  102. package/dist/{chunk-G76BNXWE.js → chunk-XW5SEW3H.js} +6 -6
  103. package/dist/{chunk-46ZATLQV.js → chunk-YIKFYWKD.js} +3 -3
  104. package/dist/{chunk-4JBS6NOT.js → chunk-ZWBGQYVO.js} +35 -6
  105. package/dist/chunk-ZWBGQYVO.js.map +1 -0
  106. package/dist/{chunk-VWW2EXH7.js → chunk-ZYJZHXFU.js} +4 -4
  107. package/dist/data-display/Avatar.js +2 -2
  108. package/dist/data-display/Badge.js +2 -2
  109. package/dist/data-display/CardKit.js +10 -10
  110. package/dist/data-display/Carousel.js +2 -2
  111. package/dist/data-display/Chart.js +8 -8
  112. package/dist/data-display/DataGrid.js +2 -2
  113. package/dist/data-display/DataViews.js +25 -23
  114. package/dist/en-US.js +1 -1
  115. package/dist/layout/ContentToolbar.js +1 -1
  116. package/dist/locales.js +2 -2
  117. package/dist/navigation/SectionNav.js +9 -9
  118. package/dist/pt-BR.js +1 -1
  119. package/dist/types/components/data-display/Chart/Chart.types.d.ts +5 -0
  120. package/dist/types/components/data-display/Chart/Chart.types.d.ts.map +1 -1
  121. package/dist/types/components/data-display/Chart/chart-context.d.ts.map +1 -1
  122. package/dist/types/components/data-display/Chart/chart-format.d.ts +14 -0
  123. package/dist/types/components/data-display/Chart/chart-format.d.ts.map +1 -1
  124. package/dist/types/components/data-display/Chart/chart-spec.d.ts.map +1 -1
  125. package/dist/types/components/data-display/DataViews/DataViewsTableBase.d.ts.map +1 -1
  126. package/dist/types/components/data-display/DataViews/base-list-card-geometry.d.ts +29 -1
  127. package/dist/types/components/data-display/DataViews/base-list-card-geometry.d.ts.map +1 -1
  128. package/dist/types/components/data-display/DataViews/base-list-card-layout.d.ts +46 -0
  129. package/dist/types/components/data-display/DataViews/base-list-card-layout.d.ts.map +1 -0
  130. package/dist/types/components/data-display/DataViews/base-list-card-slots.d.ts +5 -2
  131. package/dist/types/components/data-display/DataViews/base-list-card-slots.d.ts.map +1 -1
  132. package/dist/types/components/data-display/DataViews/base-list-card.d.ts +10 -1
  133. package/dist/types/components/data-display/DataViews/base-list-card.d.ts.map +1 -1
  134. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +7 -0
  135. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
  136. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
  137. package/dist/types/components/data-display/DataViews/data-views-selection-extra.d.ts +2 -0
  138. package/dist/types/components/data-display/DataViews/data-views-selection-extra.d.ts.map +1 -1
  139. package/dist/types/components/data-display/DataViews/data-views-shell-toolbar.d.ts +3 -1
  140. package/dist/types/components/data-display/DataViews/data-views-shell-toolbar.d.ts.map +1 -1
  141. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts +2 -0
  142. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts.map +1 -1
  143. package/dist/types/components/data-display/DataViews/data-views-url-echo.d.ts +47 -0
  144. package/dist/types/components/data-display/DataViews/data-views-url-echo.d.ts.map +1 -0
  145. package/dist/types/components/data-display/DataViews/list-card-rails.d.ts +17 -2
  146. package/dist/types/components/data-display/DataViews/list-card-rails.d.ts.map +1 -1
  147. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts +3 -2
  148. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
  149. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +14 -0
  150. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  151. package/dist/types/en-US.data-display.d.ts.map +1 -1
  152. package/dist/types/pt-BR.data-display.d.ts.map +1 -1
  153. package/dist/user-avatar.js +3 -3
  154. package/package.json +1 -1
  155. package/src/components/data-display/Chart/Chart.md +5 -1
  156. package/src/components/data-display/Chart/Chart.types.ts +5 -0
  157. package/src/components/data-display/Chart/chart-context.ts +21 -1
  158. package/src/components/data-display/Chart/chart-format.ts +31 -0
  159. package/src/components/data-display/Chart/chart-renderers.tsx +1 -1
  160. package/src/components/data-display/Chart/chart-spec.ts +2 -1
  161. package/src/components/data-display/DataViews/DataViewsTableBase.tsx +7 -36
  162. package/src/components/data-display/DataViews/base-list-card-geometry.tsx +114 -40
  163. package/src/components/data-display/DataViews/base-list-card-layout.tsx +104 -0
  164. package/src/components/data-display/DataViews/base-list-card-slots.tsx +47 -3
  165. package/src/components/data-display/DataViews/base-list-card.tsx +65 -68
  166. package/src/components/data-display/DataViews/data-views-copy.ts +7 -0
  167. package/src/components/data-display/DataViews/data-views-grid-parts.tsx +2 -1
  168. package/src/components/data-display/DataViews/data-views-selection-extra.ts +10 -1
  169. package/src/components/data-display/DataViews/data-views-shell-toolbar.tsx +4 -0
  170. package/src/components/data-display/DataViews/data-views-toolbar.tsx +4 -0
  171. package/src/components/data-display/DataViews/data-views-url-echo.ts +134 -0
  172. package/src/components/data-display/DataViews/list-card-rails.tsx +22 -6
  173. package/src/components/layout/ContentToolbar/ContentToolbar.md +5 -2
  174. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +51 -10
  175. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +14 -0
  176. package/src/en-US.data-display.ts +1 -0
  177. package/src/pt-BR.data-display.ts +1 -0
  178. package/dist/chunk-45PGSVOH.js.map +0 -1
  179. package/dist/chunk-4JBS6NOT.js.map +0 -1
  180. package/dist/chunk-A6EUQDRK.js.map +0 -1
  181. package/dist/chunk-BJMNAPKH.js.map +0 -1
  182. package/dist/chunk-C67FDYG7.js.map +0 -1
  183. package/dist/chunk-JF5LQOGB.js.map +0 -1
  184. package/dist/chunk-KEKOPD43.js.map +0 -1
  185. package/dist/chunk-LJKWWXZD.js.map +0 -1
  186. package/dist/chunk-QVWNK4JO.js.map +0 -1
  187. package/dist/chunk-R6SBP5M5.js.map +0 -1
  188. package/dist/chunk-RBHBJDOZ.js.map +0 -1
  189. package/dist/chunk-TZFBJ47T.js.map +0 -1
  190. /package/dist/{chunk-MKAA3YIJ.js.map → chunk-3K7WN2PO.js.map} +0 -0
  191. /package/dist/{chunk-GI24X7XA.js.map → chunk-4PPNCZWY.js.map} +0 -0
  192. /package/dist/{chunk-573XC4HK.js.map → chunk-4QKS5Y35.js.map} +0 -0
  193. /package/dist/{chunk-N4MR4EMC.js.map → chunk-6D2PFC5C.js.map} +0 -0
  194. /package/dist/{chunk-ICSXPZXT.js.map → chunk-6QBT5TPS.js.map} +0 -0
  195. /package/dist/{chunk-53ACGKBW.js.map → chunk-EDBP62WG.js.map} +0 -0
  196. /package/dist/{chunk-YXIVQFNW.js.map → chunk-EWIKSTJV.js.map} +0 -0
  197. /package/dist/{chunk-LWZ2K225.js.map → chunk-FXZUVZON.js.map} +0 -0
  198. /package/dist/{chunk-IK2ZVV3M.js.map → chunk-GK7JNSMK.js.map} +0 -0
  199. /package/dist/{chunk-HFBQCJNP.js.map → chunk-HCYRCU4W.js.map} +0 -0
  200. /package/dist/{chunk-7AAJYWC3.js.map → chunk-HPO7PB4F.js.map} +0 -0
  201. /package/dist/{chunk-WF3P7GE5.js.map → chunk-I3CQBEKS.js.map} +0 -0
  202. /package/dist/{chunk-RREWYOKS.js.map → chunk-IL4FCC54.js.map} +0 -0
  203. /package/dist/{chunk-7M3DRP7Q.js.map → chunk-ILNO4ZJ6.js.map} +0 -0
  204. /package/dist/{chunk-EUPUEMFX.js.map → chunk-PC4H5LVB.js.map} +0 -0
  205. /package/dist/{chunk-OBMPE6PW.js.map → chunk-SSDYEOU4.js.map} +0 -0
  206. /package/dist/{chunk-I6ESCBY3.js.map → chunk-TF27Z27K.js.map} +0 -0
  207. /package/dist/{chunk-JL77BSOL.js.map → chunk-WBDQSBLV.js.map} +0 -0
  208. /package/dist/{chunk-G76BNXWE.js.map → chunk-XW5SEW3H.js.map} +0 -0
  209. /package/dist/{chunk-46ZATLQV.js.map → chunk-YIKFYWKD.js.map} +0 -0
  210. /package/dist/{chunk-VWW2EXH7.js.map → chunk-ZYJZHXFU.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/base-list-card-geometry.tsx"],"sourcesContent":["\"use client\";\n\nimport { useTheme, type Theme } from \"@mui/material/styles/index.js\";\n\nimport {\n CARD_RADIUS,\n cardSurfaceStyles,\n isActionable,\n isSelectable,\n slotTestIds,\n} from \"./card-surface\";\nimport { useDragItem } from \"./data-views-drag\";\nimport { DENSITY_ROW_PADDING } from \"./data-views-layout-context\";\nimport { RAIL_COUNT, RAIL_GAP, railsTemplateFor, useListRails } from \"./list-card-rails\";\nimport { STACK_BREAK } from \"./base-list-card-slots\";\nimport type { BaseListCardProps } from \"./base-list-card\";\nimport { rem } from \"../../../tokens/relative\";\n\n/**\n * THE ROW'S GEOMETRY AND SURFACE, split from the component at the size gate.\n *\n * Everything here answers \"what shape is this row, and where do its slots land\"\n * — the rails, the density padding, the two-line collapse, the drag and\n * selection plumbing. None of it renders anything, which is why the two halves\n * can live apart without either becoming harder to follow.\n */\n/**\n * Whether a click was really a click, or the tail of a text selection.\n *\n * Without this, selecting an order id to copy it navigates away instead — the\n * single most annoying thing a clickable row does.\n */\nfunction isTextSelection(): boolean {\n return (globalThis.getSelection?.()?.toString().length ?? 0) > 0;\n}\n\n/** Keyboard equivalence for a card that acts but does not navigate. */\nfunction clickKeys(onClick: () => void) {\n return (event: React.KeyboardEvent): void => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n onClick();\n };\n}\n\n/**\n * Geometry: the rails, the density padding, the two-line collapse.\n *\n * SCALE IS `zoom`, NOT A SET OF MULTIPLIED FONT SIZES.\n *\n * It used to be the latter, on exactly three values — title, value, row padding\n * — so the slider left the subtitle, the meta labels, the rules, the checkbox,\n * the grip, the chip and the menu at their fixed sizes, and the row came apart\n * as you dragged it. Multiplying the rest is not a fix: the checkbox and the\n * chip are MUI internals sized in their own px, and no prop we pass reaches\n * them.\n *\n * `zoom` scales the used value of every length in the subtree — ours and theirs\n * — and unlike `transform: scale` it REFLOWS, so the row still occupies the\n * space it draws and the rails still resolve. Verified against the group: at\n * 1.4 all four rows keep identical rail edges, because subgrid tracks and the\n * zoom that reads them are the same for every row.\n */\n/** What {@link rowSx} needs to know about the row it lays out. */\ninterface RowSxOptions {\n inGroup: boolean;\n railCount: number;\n cellTemplate: string | null;\n gutters: { disclose: boolean; drag: boolean; select: boolean };\n metaColumns: number;\n pad: number;\n padY: number;\n scale: number;\n divider: boolean;\n interactive: boolean;\n draggable: boolean;\n /** What the two-line layout below `STACK_BREAK` has to place by name. */\n stack: StackPlacement;\n}\n\n/**\n * The slots the stacked row places that the named-slot rules cannot know about.\n *\n * For a CONFIGURED row, `firstCell` is the cell that takes the title's place and\n * `valueCell` the one that takes the value's (null for a named-slot row, or for\n * a one-cell row with no value to show). `expandable` decides whether the\n * disclosure button gets a place or, when it is only a reserved empty gutter,\n * none at all.\n */\nexport interface StackPlacement {\n firstCell: string | null;\n valueCell: string | null;\n expandable: boolean;\n}\n\n/** A `[data-slot=\"cell-<id>\"]` child selector, quoted so any id is safe. */\nconst cellSlot = (id: string): string => `& > [data-slot=${JSON.stringify(`cell-${id}`)}]`;\n\n/**\n * A configured row, stacked, keeps the SAME two facts a named-slot row keeps:\n * what the record is (the first cell, in the title's place on line 1) and the\n * figure it is about (the value cell, on line 2 from under the title to the\n * right edge, where an `end` cell sits flush right). Every other cell goes, as\n * `meta` goes — a row is a fixed-height scanning unit, and what does not fit\n * belongs in its expandable body.\n *\n * Left to auto-placement these cells had flowed into whatever track was free:\n * a name squeezed beside the glyph, an amount clipped to \"R$ …\".\n *\n * The hide-all rule comes first and the two named cells after it: the\n * selectors have equal specificity, so the later rule wins for those cells.\n */\nfunction stackedCells(stack: StackPlacement): Record<string, unknown> {\n if (stack.firstCell == null) return {};\n return {\n '& > [data-slot^=\"cell-\"]': { display: \"none\" },\n [cellSlot(stack.firstCell)]: { display: \"flex\", gridArea: \"1 / 3\" },\n ...(stack.valueCell == null ? {} : { [cellSlot(stack.valueCell)]: { display: \"flex\", gridArea: \"2 / 3 / 3 / 5\" } }),\n };\n}\n\n/**\n * TWO-LINE, below the point where the shared rails stop helping.\n *\n * The standard mobile transaction row: what the record IS on the first line,\n * what it COSTS under it at the right edge. Better than\n * truncating four columns into ellipses, and the reason each slot carries a\n * `data-slot` — the placement is explicit rather than whatever order the\n * children happen to be in.\n *\n * [ select ][ leading ][ title …………… ][ menu ]\n * [ (disclose) ] [ (cells) …………… ][ value ]\n *\n * The MENU stays in the top-right corner at every width. It is the row's\n * one fixed landmark — an overflow that moves to the second line on a phone\n * is an overflow nobody finds twice.\n */\nconst stackedRowSx = (inGroup: boolean, railCount: number, stack: StackPlacement): Record<string, unknown> => ({\n gridTemplateColumns: \"auto auto minmax(0, 1fr) max-content\",\n // The GROUP's track count, which a configured list sets from its cells\n // (`cellRailCount`) — not the named-slot RAIL_COUNT, which over-spans a\n // configured group and adds an implicit track at its end.\n ...(inGroup ? { gridColumn: `span ${railCount}` } : {}),\n rowGap: 0.75,\n columnGap: 1,\n '& > [data-slot=\"drag\"]': { display: \"none\" },\n // The disclosure button, when there is one, under the checkbox: the head of\n // the row, where it sits at every other width — never beside the menu, where\n // it read as an \"open\" arrow. A reserved empty gutter takes no place at all.\n '& > [data-slot=\"disclose\"]': stack.expandable ? { gridArea: \"2 / 1\", justifySelf: \"center\" } : { display: \"none\" },\n '& > [data-slot=\"select\"]': { gridArea: \"1 / 1\" },\n '& > [data-slot=\"leading\"]': { gridArea: \"1 / 2\" },\n '& > [data-slot=\"caption\"]': { gridArea: \"1 / 3\" },\n '& > [data-slot=\"actions\"]': { gridArea: \"1 / 4\", justifyContent: \"flex-end\" },\n '& > [data-slot=\"meta\"]': { display: \"none\" },\n // Second line, starting under the title rather than under the checkbox.\n '& > [data-slot=\"value\"]': { gridArea: \"2 / 4\", textAlign: \"right\" },\n ...stackedCells(stack),\n});\n\n/**\n * DIVIDER COMPOSES WITH THE VARIANT — it changes the row's SHAPE, not its\n * surface.\n *\n * It used to set `border: 0` and hard-code its own rule colour, which discarded\n * whatever the variant had drawn: `outline`, `text` and `ghost` all collapsed\n * to one identical flush row, and the variant control silently stopped meaning\n * anything the moment `divider` was on.\n *\n * Now only the GEOMETRY changes here — the box's sides go, one edge stays — and\n * no `borderColor` is written, so the colour set by `cardSurfaceStyles` survives.\n * A variant that draws no border of its own gets the neutral rule from\n * {@link rowStyles}.\n */\nexport const rowSx = (theme: Theme, opts: RowSxOptions): Record<string, unknown> => {\n const { inGroup, railCount, cellTemplate, gutters, metaColumns, pad, padY, scale, divider, interactive, draggable, stack } = opts;\n return {\n position: \"relative\",\n borderRadius: CARD_RADIUS,\n display: \"grid\",\n zoom: scale,\n // SUBGRID AND `container-type` CANNOT COEXIST on one element: containment\n // makes the box size independently of its parent, so the browser drops the\n // subgrid and every slot stacks into one column. (Observed exactly that —\n // computed `grid-template-columns: 1222px` on a card asking for subgrid.)\n //\n // So inside a group the GROUP is the query container and the row is the\n // subgrid. Standalone, the row is its own grid but NOT its own container:\n // a container query matches an ANCESTOR, never the element itself, so a\n // row that was its own container placed its children for two lines while\n // its own template stayed wide. A standalone card renders inside a wrapper\n // that is the container (`BaseListCard`).\n ...(inGroup\n ? { gridColumn: `span ${railCount}`, gridTemplateColumns: \"subgrid\" }\n : { gridTemplateColumns: cellTemplate ?? railsTemplateFor(gutters, metaColumns) }),\n alignItems: \"center\",\n // Wide enough that the meta cluster, the value and the status read as three\n // columns rather than one run of text — the complaint that started all this\n // was `MÉTODO PIX R$ 13,90` scanning as a single phrase.\n columnGap: RAIL_GAP,\n width: \"100%\",\n px: pad,\n py: padY,\n cursor: draggable ? \"grab\" : interactive ? \"pointer\" : undefined,\n ...(draggable ? { touchAction: \"none\", \"&:active\": { cursor: \"grabbing\" } } : {}),\n ...(interactive ? { \"&:hover\": { backgroundColor: \"action.hover\" } } : {}),\n // A real focus ring, which a clickable <div> never had.\n \"&:focus-visible\": {\n outline: `${rem(theme, 2)} solid`,\n outlineStyle: \"solid\",\n outlineColor: \"primary.main\",\n outlineOffset: rem(theme, 2),\n },\n // TWO-LINE below STACK_BREAK: see {@link stackedRowSx}.\n [`@container (max-width: ${rem(theme, STACK_BREAK)})`]: stackedRowSx(inGroup, railCount, stack),\n ...(divider\n ? { borderRadius: 0, borderWidth: 0, borderBottomWidth: 1, borderStyle: \"solid\" }\n : {}),\n };\n};\n\n/**\n * A selectable full-width row: a marker, a title over a subtitle, labelled\n * middle columns, a value, a status, actions and a menu.\n *\n * A SHELL, like {@link BaseCard}. Domain rows live in the app and compose it.\n */\n/**\n * The id this row drags under, or nothing.\n *\n * `undefined` is the inert answer: `useDragItem` treats a missing id as \"no\n * drag\", which is how the card's own veto (`draggable={false}`) and an\n * unactionable record both switch dragging off without the card knowing\n * anything about the container above it.\n */\nfunction dragIdFor(\n props: BaseListCardProps,\n actionable: boolean,\n): string | number | undefined {\n return props.draggable === false || !actionable ? undefined : props.dragId;\n}\n\n/**\n * What the meta cluster amounts to — asked once, used three times: to size the\n * rail, to close the cluster with a rule, and to decide whether the value has\n * anything to be divided FROM.\n */\nexport function metaShape(props: BaseListCardProps): { columns: number; present: boolean } {\n const columns = props.meta?.length ?? 0;\n return { columns, present: columns > 0 || props.metaSlot != null };\n}\n\n/**\n * Everything the row derives before it can render — extracted so the component\n * stays inside the size budget.\n */\nexport function useRowShell(props: BaseListCardProps) {\n const actionable = isActionable(props.state);\n const group = useListRails();\n const scale = props.scale ?? 1;\n return {\n group,\n actionable,\n scale,\n theme: useTheme(),\n selectable: isSelectable(props),\n slot: slotTestIds(props.testId),\n drag: useDragItem(dragIdFor(props, actionable)),\n // Standalone holds no gutter open: there is no list beside it to line up\n // with, so a reserved-but-empty rail is pure inset.\n reserve: group?.reserveGutters ?? false,\n // 1, not 1.5. The row's contents still have to line up with the toolbar\n // above them, but 12px of card padding stacked on the checkbox's own 9px\n // and an empty drag gutter's 24px read as a row indented for no reason.\n //\n // Not multiplied by `scale` — the row's `zoom` already scales it, and doing\n // both would square the factor on padding alone.\n pad: 1,\n padY: DENSITY_ROW_PADDING[group?.density ?? props.density ?? \"cozy\"],\n // A card that navigates does so with a real anchor, so it takes no click\n // handler of its own — the stretched link IS the target.\n acts: props.onClick != null && props.href == null && actionable,\n };\n}\n\n/** The click/keyboard props a row that acts (but does not navigate) needs. */\nexport function actionProps(onClick: (() => void) | undefined) {\n return {\n role: \"button\",\n tabIndex: 0,\n onClick: () => {\n if (isTextSelection()) return;\n onClick?.();\n },\n onKeyDown: clickKeys(() => onClick?.()),\n };\n}\n\n/** The surface and the geometry, merged — the row's whole `sx` in one place. */\n\n/**\n * The row's painted surface, plus the divider's colour fallback.\n *\n * A variant with no border of its own (`text`, `ghost`) would draw its rule in\n * the inherited colour — the TEXT colour, i.e. a black bar across the row. The\n * neutral divider token is supplied only in that case; a variant that has a\n * border keeps it, which is the whole point of composing the two.\n */\nfunction rowSurface(\n props: BaseListCardProps,\n shell: ReturnType<typeof useRowShell>,\n): Record<string, unknown> {\n const { theme, selectable, drag } = shell;\n const surface = cardSurfaceStyles(\n { ...props, selectable, shape: \"row\", state: drag.dragging ? \"disabled\" : props.state },\n theme,\n );\n if (props.divider !== true || surface.borderColor != null) return surface;\n return { ...surface, borderBottomColor: theme.palette.divider };\n}\n\n/**\n * Which head gutters this row renders: the ones it uses, or all three when its\n * group reserves them. The template is built from this; the three gutter slots\n * (`base-list-card-gutters.tsx`) apply the SAME conditions on their own — keep\n * the two in step, because a template that disagrees with the slots is exactly\n * how cells slid two tracks.\n */\nexport function rowGutters(\n props: BaseListCardProps,\n shell: ReturnType<typeof useRowShell>,\n): { disclose: boolean; drag: boolean; select: boolean } {\n const { selectable, drag, reserve } = shell;\n return {\n disclose: reserve || props.children != null,\n drag: reserve || drag.draggable,\n select: reserve || selectable,\n };\n}\n\nexport function rowStyles(\n props: BaseListCardProps,\n shell: ReturnType<typeof useRowShell>,\n cellTemplate: string | null,\n stack: StackPlacement,\n): Record<string, unknown> {\n const { theme, group, drag, pad, padY, scale, acts } = shell;\n return {\n ...rowSurface(props, shell),\n ...rowSx(theme, {\n inGroup: group !== null,\n railCount: group?.railCount ?? RAIL_COUNT,\n cellTemplate,\n gutters: rowGutters(props, shell),\n metaColumns: metaShape(props).columns,\n pad,\n padY,\n scale,\n divider: props.divider ?? false,\n interactive: acts || props.href != null,\n draggable: drag.draggable && drag.handleProps === undefined,\n stack,\n }),\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,55 @@
1
+ import {
2
+ rowGutters
3
+ } from "./chunk-U47KRLEW.js";
4
+ import {
5
+ cellRailsTemplate
6
+ } from "./chunk-QKAYXAQE.js";
7
+ import {
8
+ cellTracks,
9
+ useCellConfig
10
+ } from "./chunk-COYGTEN5.js";
11
+ import {
12
+ default as default2
13
+ } from "./chunk-6DPAWXZ3.js";
14
+
15
+ // src/components/data-display/DataViews/base-list-card-layout.tsx
16
+ import { Fragment, jsx } from "react/jsx-runtime";
17
+ function useResolvedCells(props, inGroup, gutters) {
18
+ const groupCells = useCellConfig();
19
+ const cells = groupCells ?? props.cells ?? null;
20
+ const configured = cells != null && cells.length > 0 && props.row != null;
21
+ const cellTemplate = configured && !inGroup ? cellRailsTemplate(cellTracks(cells), gutters) : null;
22
+ return { cells, configured, cellTemplate };
23
+ }
24
+ function rowOpens(props, shell, configured, expandable) {
25
+ if (expandable) return false;
26
+ return shell.acts || shell.actionable && props.href != null && props.title != null && !configured;
27
+ }
28
+ function valueCellId(cells) {
29
+ const first = cells[0];
30
+ const candidate = cells.find((cell) => cell.strong === true && cell !== first) ?? cells[cells.length - 1];
31
+ return candidate != null && candidate !== first ? candidate.id : null;
32
+ }
33
+ function useRowLayout(props, shell, expandable) {
34
+ const resolved = useResolvedCells(props, shell.group != null, rowGutters(props, shell));
35
+ const cells = resolved.configured ? resolved.cells : null;
36
+ return {
37
+ ...resolved,
38
+ opens: rowOpens(props, shell, resolved.configured, expandable),
39
+ stack: {
40
+ firstCell: cells?.[0]?.id ?? null,
41
+ valueCell: cells == null ? null : valueCellId(cells),
42
+ expandable
43
+ }
44
+ };
45
+ }
46
+ function StandaloneContainer({ inGroup, children }) {
47
+ if (inGroup) return /* @__PURE__ */ jsx(Fragment, { children });
48
+ return /* @__PURE__ */ jsx(default2, { sx: { containerType: "inline-size", width: "100%", minWidth: 0 }, children });
49
+ }
50
+
51
+ export {
52
+ useRowLayout,
53
+ StandaloneContainer
54
+ };
55
+ //# sourceMappingURL=chunk-V4V2N6YJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/base-list-card-layout.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode } from \"react\";\n\nimport { Box } from \"../../../mui/Box\";\nimport type { BaseListCardProps } from \"./base-list-card\";\nimport { rowGutters, type StackPlacement, type useRowShell } from \"./base-list-card-geometry\";\nimport { cellRailsTemplate } from \"./list-card-rails\";\nimport { cellTracks, useCellConfig, type ListCardCellConfig } from \"./list-card-cells\";\n\n/**\n * WHAT SHAPE A ROW TAKES, resolved once: its cells and their template, whether\n * it ends in the \"this opens\" chevron, and what its two-line form keeps.\n *\n * Split from the card at the file-size gate. Everything here decides; nothing\n * here renders but the standalone container.\n */\n\n/**\n * Which cell config applies, and whether this row resolves its own tracks.\n *\n * The list's config wins over the card's: one declaration of the list's shape is\n * the point, so a row inside a group cannot introduce a column of its own. And\n * the template is standalone-only — inside a group the GROUP owns it and the row\n * is subgrid over it, because a row resolving its own tracks is exactly what\n * stops a list from lining up.\n */\nfunction useResolvedCells(\n props: BaseListCardProps,\n inGroup: boolean,\n gutters: { disclose: boolean; drag: boolean; select: boolean },\n): {\n cells: readonly ListCardCellConfig<never>[] | null;\n configured: boolean;\n cellTemplate: string | null;\n} {\n const groupCells = useCellConfig();\n const cells = groupCells ?? props.cells ?? null;\n const configured = cells != null && cells.length > 0 && props.row != null;\n const cellTemplate = configured && !inGroup ? cellRailsTemplate(cellTracks(cells), gutters) : null;\n return { cells, configured, cellTemplate };\n}\n\n/**\n * Whether the row ends in the \"this opens\" chevron: it is live and leads\n * somewhere it can actually go — a click handler, or a link the row renders.\n * Only a named-slot row with a title renders an anchor for `href` (the caption\n * wraps the title), so an `href` alone does not count elsewhere: a chevron on\n * a row that cannot open is the promise the disclosure chevron's docblock\n * warns about. Not when the row expands either:\n * the disclosure chevron already speaks, and a second arrow meaning something\n * else beside it would contradict it.\n */\nfunction rowOpens(\n props: BaseListCardProps,\n shell: ReturnType<typeof useRowShell>,\n configured: boolean,\n expandable: boolean,\n): boolean {\n if (expandable) return false;\n // The named-slot caption renders its anchor only around a title.\n return shell.acts || (shell.actionable && props.href != null && props.title != null && !configured);\n}\n\n/**\n * The cell that takes the VALUE's place when the row stacks: the one the config\n * marks `strong` (\"the figure the row is really about\"), else the last — as\n * long as it is not the first cell, which already holds the title's place.\n */\nfunction valueCellId(cells: readonly ListCardCellConfig<never>[]): string | null {\n const first = cells[0];\n const candidate = cells.find((cell) => cell.strong === true && cell !== first) ?? cells[cells.length - 1];\n return candidate != null && candidate !== first ? candidate.id : null;\n}\n\n/** Everything the row's shape depends on, resolved once. */\nexport function useRowLayout(\n props: BaseListCardProps,\n shell: ReturnType<typeof useRowShell>,\n expandable: boolean,\n): ReturnType<typeof useResolvedCells> & { opens: boolean; stack: StackPlacement } {\n const resolved = useResolvedCells(props, shell.group != null, rowGutters(props, shell));\n const cells = resolved.configured ? resolved.cells : null;\n return {\n ...resolved,\n opens: rowOpens(props, shell, resolved.configured, expandable),\n stack: {\n firstCell: cells?.[0]?.id ?? null,\n valueCell: cells == null ? null : valueCellId(cells),\n expandable,\n },\n };\n}\n\n/**\n * A standalone row's QUERY CONTAINER. A container query matches an ancestor,\n * never the element itself, so the row cannot be the container its own\n * two-line template asks about. In a group the group is the container, and the\n * row must stay its direct child for subgrid, so no wrapper there.\n */\nexport function StandaloneContainer({ inGroup, children }: { inGroup: boolean; children: ReactNode }): React.JSX.Element {\n if (inGroup) return <>{children}</>;\n return <Box sx={{ containerType: \"inline-size\", width: \"100%\", minWidth: 0 }}>{children}</Box>;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqGsB;AA1EtB,SAAS,iBACP,OACA,SACA,SAKA;AACA,QAAM,aAAa,cAAc;AACjC,QAAM,QAAQ,cAAc,MAAM,SAAS;AAC3C,QAAM,aAAa,SAAS,QAAQ,MAAM,SAAS,KAAK,MAAM,OAAO;AACrE,QAAM,eAAe,cAAc,CAAC,UAAU,kBAAkB,WAAW,KAAK,GAAG,OAAO,IAAI;AAC9F,SAAO,EAAE,OAAO,YAAY,aAAa;AAC3C;AAYA,SAAS,SACP,OACA,OACA,YACA,YACS;AACT,MAAI,WAAY,QAAO;AAEvB,SAAO,MAAM,QAAS,MAAM,cAAc,MAAM,QAAQ,QAAQ,MAAM,SAAS,QAAQ,CAAC;AAC1F;AAOA,SAAS,YAAY,OAA4D;AAC/E,QAAM,QAAQ,MAAM,CAAC;AACrB,QAAM,YAAY,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,QAAQ,SAAS,KAAK,KAAK,MAAM,MAAM,SAAS,CAAC;AACxG,SAAO,aAAa,QAAQ,cAAc,QAAQ,UAAU,KAAK;AACnE;AAGO,SAAS,aACd,OACA,OACA,YACiF;AACjF,QAAM,WAAW,iBAAiB,OAAO,MAAM,SAAS,MAAM,WAAW,OAAO,KAAK,CAAC;AACtF,QAAM,QAAQ,SAAS,aAAa,SAAS,QAAQ;AACrD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,SAAS,OAAO,OAAO,SAAS,YAAY,UAAU;AAAA,IAC7D,OAAO;AAAA,MACL,WAAW,QAAQ,CAAC,GAAG,MAAM;AAAA,MAC7B,WAAW,SAAS,OAAO,OAAO,YAAY,KAAK;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACF;AAQO,SAAS,oBAAoB,EAAE,SAAS,SAAS,GAAiE;AACvH,MAAI,QAAS,QAAO,gCAAG,UAAS;AAChC,SAAO,oBAACA,UAAA,EAAI,IAAI,EAAE,eAAe,eAAe,OAAO,QAAQ,UAAU,EAAE,GAAI,UAAS;AAC1F;","names":["default"]}
@@ -1,18 +1,28 @@
1
+ import {
2
+ resolveAxisConfig,
3
+ resolveBarGeometry
4
+ } from "./chunk-SOHQPPYJ.js";
1
5
  import {
2
6
  getAxisStyles,
3
7
  getDefaultColors,
4
8
  getSizeStyles,
5
9
  resolveSeries
6
10
  } from "./chunk-FIMSPRKX.js";
7
- import {
8
- resolveAxisConfig,
9
- resolveBarGeometry
10
- } from "./chunk-SOHQPPYJ.js";
11
11
  import {
12
12
  remPx
13
13
  } from "./chunk-YKCAJ2TN.js";
14
14
 
15
15
  // src/components/data-display/Chart/chart-context.ts
16
+ var AUTO_WIDTH_VALUE_AXIS = /* @__PURE__ */ new Set([
17
+ "line",
18
+ "bar",
19
+ "area",
20
+ "composed"
21
+ ]);
22
+ function leftMarginDesignPx(props) {
23
+ const autoWidthAxis = AUTO_WIDTH_VALUE_AXIS.has(props.type ?? "line");
24
+ return autoWidthAxis && !props.yAxisLabel ? 0 : 20;
25
+ }
16
26
  function buildChartContext(props, theme) {
17
27
  const sizeStyles = getSizeStyles(theme, props.size, props.height);
18
28
  const chartColors = getDefaultColors(theme, props.variant ?? "default", props.colors);
@@ -45,7 +55,7 @@ function buildChartContext(props, theme) {
45
55
  margin: {
46
56
  top: remPx(theme, 20),
47
57
  right: remPx(theme, 30),
48
- left: remPx(theme, 20),
58
+ left: remPx(theme, leftMarginDesignPx(props)),
49
59
  bottom: remPx(theme, 20),
50
60
  ...marginPx(theme, props.margin)
51
61
  },
@@ -63,4 +73,4 @@ function marginPx(theme, margin) {
63
73
  export {
64
74
  buildChartContext
65
75
  };
66
- //# sourceMappingURL=chunk-C67FDYG7.js.map
76
+ //# sourceMappingURL=chunk-W7N4ORCV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/Chart/chart-context.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\nimport type { CSSProperties } from 'react';\n\nimport type { ChartDataPoint, ChartProps, ChartSeries } from './Chart.types';\nimport { resolveAxisConfig, resolveBarGeometry, type BarGeometry, type CartesianAxisConfig } from './chart-axis';\nimport {\n getAxisStyles,\n getDefaultColors,\n getSizeStyles,\n resolveSeries,\n type SizeStyles,\n} from './chart-internals';\nimport { remPx } from '../../../tokens/relative';\n\n/**\n * Everything the per-type renderers in `chart-renderers.tsx` read, resolved\n * once from props + theme. Kept out of that file so each renderer is a small\n * JSX function over already-decided values — palette, series, axis geometry,\n * bar geometry — rather than a place where those decisions get made again\n * slightly differently.\n */\nexport interface ChartRenderContext {\n props: ChartProps;\n theme: Theme;\n sizeStyles: SizeStyles;\n chartColors: string[];\n chartSeries: ChartSeries[];\n strokeType: 'monotone' | 'linear';\n axisStyle: CSSProperties;\n gridStroke: string;\n /** Multiplier on `gridStroke`'s alpha — see `getAxisStyles`. */\n gridOpacity: number;\n axisConfig: CartesianAxisConfig;\n barGeometry: BarGeometry;\n animationDuration: number;\n commonProps: {\n data: ChartDataPoint[];\n margin: { top?: number; right?: number; bottom?: number; left?: number };\n onClick: (payload: unknown) => void;\n };\n}\n\n/**\n * The chart types whose value axis sizes itself to its widest tick\n * (`width=\"auto\"`, `cartesianAxes`). Their left margin is only room for a\n * rotated axis TITLE; without one it was 20px of nothing beside the ticks,\n * taken out of the plot on a phone. Pie, radar and scatter keep it: a pie is\n * centred between both margins, and scatter's axis is still fixed-width.\n */\nconst AUTO_WIDTH_VALUE_AXIS: ReadonlySet<NonNullable<ChartProps['type']>> = new Set([\n 'line',\n 'bar',\n 'area',\n 'composed',\n]);\n\n/** The default left margin in design px — see {@link AUTO_WIDTH_VALUE_AXIS}. */\nfunction leftMarginDesignPx(props: ChartProps): number {\n const autoWidthAxis = AUTO_WIDTH_VALUE_AXIS.has(props.type ?? 'line');\n return autoWidthAxis && !props.yAxisLabel ? 0 : 20;\n}\n\nexport function buildChartContext(props: ChartProps, theme: Theme): ChartRenderContext {\n const sizeStyles = getSizeStyles(theme, props.size, props.height);\n const chartColors = getDefaultColors(theme, props.variant ?? 'default', props.colors);\n const { axisStyle, gridStroke, gridOpacity } = getAxisStyles(\n theme,\n props.variant ?? 'default',\n sizeStyles.fontSize,\n );\n const handleChartClick = (payload: unknown): void => {\n const chartData = payload as { activePayload?: Array<{ payload: ChartDataPoint }> };\n if (props.onClick && chartData?.activePayload?.[0]) {\n props.onClick(chartData.activePayload[0].payload);\n }\n };\n return {\n props,\n theme,\n sizeStyles,\n chartColors,\n chartSeries: resolveSeries(props.data, props.series, props.xAxisKey ?? 'name', chartColors),\n strokeType: (props.curved ?? true) ? 'monotone' : 'linear',\n axisStyle: { ...axisStyle, fontSize: sizeStyles.fontSize },\n gridStroke,\n gridOpacity,\n axisConfig: resolveAxisConfig(props, sizeStyles.tickMargin),\n barGeometry: resolveBarGeometry(props, theme),\n animationDuration: (props.animate ?? true) ? (props.animationDuration ?? 1500) : 0,\n commonProps: {\n data: props.data,\n margin: {\n top: remPx(theme, 20),\n right: remPx(theme, 30),\n left: remPx(theme, leftMarginDesignPx(props)),\n bottom: remPx(theme, 20),\n ...marginPx(theme, props.margin),\n },\n onClick: handleChartClick,\n },\n };\n}\n\n/** A caller's margin is in design px (the prop's contract); Recharts takes px numbers. */\nfunction marginPx(theme: Theme, margin: ChartProps['margin']): ChartProps['margin'] {\n if (!margin) return undefined;\n return Object.fromEntries(\n Object.entries(margin).map(([side, px]) => [side, typeof px === 'number' ? remPx(theme, px) : px]),\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiDA,IAAM,wBAAsE,oBAAI,IAAI;AAAA,EAClF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,SAAS,mBAAmB,OAA2B;AACrD,QAAM,gBAAgB,sBAAsB,IAAI,MAAM,QAAQ,MAAM;AACpE,SAAO,iBAAiB,CAAC,MAAM,aAAa,IAAI;AAClD;AAEO,SAAS,kBAAkB,OAAmB,OAAkC;AACrF,QAAM,aAAa,cAAc,OAAO,MAAM,MAAM,MAAM,MAAM;AAChE,QAAM,cAAc,iBAAiB,OAAO,MAAM,WAAW,WAAW,MAAM,MAAM;AACpF,QAAM,EAAE,WAAW,YAAY,YAAY,IAAI;AAAA,IAC7C;AAAA,IACA,MAAM,WAAW;AAAA,IACjB,WAAW;AAAA,EACb;AACA,QAAM,mBAAmB,CAAC,YAA2B;AACnD,UAAM,YAAY;AAClB,QAAI,MAAM,WAAW,WAAW,gBAAgB,CAAC,GAAG;AAClD,YAAM,QAAQ,UAAU,cAAc,CAAC,EAAE,OAAO;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,cAAc,MAAM,MAAM,MAAM,QAAQ,MAAM,YAAY,QAAQ,WAAW;AAAA,IAC1F,YAAa,MAAM,UAAU,OAAQ,aAAa;AAAA,IAClD,WAAW,EAAE,GAAG,WAAW,UAAU,WAAW,SAAS;AAAA,IACzD;AAAA,IACA;AAAA,IACA,YAAY,kBAAkB,OAAO,WAAW,UAAU;AAAA,IAC1D,aAAa,mBAAmB,OAAO,KAAK;AAAA,IAC5C,mBAAoB,MAAM,WAAW,OAAS,MAAM,qBAAqB,OAAQ;AAAA,IACjF,aAAa;AAAA,MACX,MAAM,MAAM;AAAA,MACZ,QAAQ;AAAA,QACN,KAAK,MAAM,OAAO,EAAE;AAAA,QACpB,OAAO,MAAM,OAAO,EAAE;AAAA,QACtB,MAAM,MAAM,OAAO,mBAAmB,KAAK,CAAC;AAAA,QAC5C,QAAQ,MAAM,OAAO,EAAE;AAAA,QACvB,GAAG,SAAS,OAAO,MAAM,MAAM;AAAA,MACjC;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAGA,SAAS,SAAS,OAAc,QAAoD;AAClF,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,OAAO,WAAW,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC;AAAA,EACnG;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  renderChartByType
3
- } from "./chunk-RBHBJDOZ.js";
3
+ } from "./chunk-3FMWQQW6.js";
4
4
  import {
5
5
  ChartContainer
6
6
  } from "./chunk-RIRTW5EU.js";
@@ -111,4 +111,4 @@ var Chart = (props) => {
111
111
  export {
112
112
  Chart
113
113
  };
114
- //# sourceMappingURL=chunk-JL77BSOL.js.map
114
+ //# sourceMappingURL=chunk-WBDQSBLV.js.map
@@ -1,8 +1,3 @@
1
- import {
2
- AVATAR_DEFAULTS,
3
- contentTypeOf,
4
- pickAvatarContent
5
- } from "./chunk-3ZVUNSFF.js";
6
1
  import {
7
2
  AvatarView
8
3
  } from "./chunk-GYDUXL3D.js";
@@ -12,6 +7,11 @@ import {
12
7
  GROUP_MAX,
13
8
  GROUP_OVERLAP
14
9
  } 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-G76BNXWE.js.map
178
+ //# sourceMappingURL=chunk-XW5SEW3H.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  SectionNavRail
3
- } from "./chunk-53ACGKBW.js";
3
+ } from "./chunk-EDBP62WG.js";
4
4
  import {
5
5
  SectionNavBar
6
- } from "./chunk-VWW2EXH7.js";
6
+ } from "./chunk-ZYJZHXFU.js";
7
7
 
8
8
  // src/components/navigation/SectionNav/SectionNav.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -52,4 +52,4 @@ function SectionNav({
52
52
  export {
53
53
  SectionNav
54
54
  };
55
- //# sourceMappingURL=chunk-46ZATLQV.js.map
55
+ //# sourceMappingURL=chunk-YIKFYWKD.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RAIL_GAP_PX
3
- } from "./chunk-GNBCSTXF.js";
3
+ } from "./chunk-QKAYXAQE.js";
4
4
  import {
5
5
  DescriptionItem
6
6
  } from "./chunk-UMICTXMP.js";
@@ -16,6 +16,7 @@ import {
16
16
  } from "./chunk-YKCAJ2TN.js";
17
17
 
18
18
  // src/components/data-display/DataViews/base-list-card-slots.tsx
19
+ import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight";
19
20
  import { Fragment } from "react";
20
21
  import { Fragment as Fragment2, jsx, jsxs } from "react/jsx-runtime";
21
22
  var META_BREAK = 520;
@@ -149,16 +150,29 @@ function ListCardActions({
149
150
  actions,
150
151
  alwaysVisible,
151
152
  menu,
153
+ opens = false,
152
154
  testId
153
155
  }) {
154
- if (actions == null && menu == null) return null;
156
+ if (actions == null && menu == null && !opens) return null;
155
157
  return (
156
- // z-index 1: above the stretched link, so these stay clickable.
158
+ // z-index 1: above the stretched link, so these stay clickable. The box
159
+ // itself lets clicks through (`pointer-events: none`, re-enabled on its
160
+ // children): only the controls inside it are meant to catch one, and the
161
+ // chevron, which re-disables it, must hand its click to the row or link
162
+ // underneath rather than swallow it.
157
163
  /* @__PURE__ */ jsxs(
158
164
  default2,
159
165
  {
160
166
  "data-slot": "actions",
161
- sx: { display: "flex", alignItems: "center", gap: 0.5, position: "relative", zIndex: 1 },
167
+ sx: {
168
+ display: "flex",
169
+ alignItems: "center",
170
+ gap: 0.5,
171
+ position: "relative",
172
+ zIndex: 1,
173
+ pointerEvents: "none",
174
+ "& > *": { pointerEvents: "auto" }
175
+ },
162
176
  children: [
163
177
  actions && /* @__PURE__ */ jsx(
164
178
  default2,
@@ -179,18 +193,32 @@ function ListCardActions({
179
193
  children: actions
180
194
  }
181
195
  ),
182
- menu && /* @__PURE__ */ jsx(default2, { "data-testid": testId("menu"), onClick: (event) => event.stopPropagation(), children: menu })
196
+ menu && /* @__PURE__ */ jsx(default2, { "data-testid": testId("menu"), onClick: (event) => event.stopPropagation(), children: menu }),
197
+ opens && /* @__PURE__ */ jsx(OpenChevron, { testId: testId("open") })
183
198
  ]
184
199
  }
185
200
  )
186
201
  );
187
202
  }
203
+ function OpenChevron({ testId }) {
204
+ return /* @__PURE__ */ jsx(
205
+ default2,
206
+ {
207
+ component: "span",
208
+ "aria-hidden": true,
209
+ "data-testid": testId,
210
+ sx: { display: "flex", alignItems: "center", color: "text.secondary", pointerEvents: "none !important" },
211
+ children: /* @__PURE__ */ jsx(KeyboardArrowRightIcon, { fontSize: "small" })
212
+ }
213
+ );
214
+ }
188
215
  function ListCardTail({
189
216
  value,
190
217
  separated,
191
218
  actions,
192
219
  actionsAlwaysVisible,
193
220
  menu,
221
+ opens,
194
222
  testId
195
223
  }) {
196
224
  return /* @__PURE__ */ jsxs(Fragment2, { children: [
@@ -212,6 +240,7 @@ function ListCardTail({
212
240
  actions,
213
241
  alwaysVisible: actionsAlwaysVisible,
214
242
  menu,
243
+ opens,
215
244
  testId
216
245
  }
217
246
  )
@@ -226,4 +255,4 @@ export {
226
255
  ListCardActions,
227
256
  ListCardTail
228
257
  };
229
- //# sourceMappingURL=chunk-4JBS6NOT.js.map
258
+ //# sourceMappingURL=chunk-ZWBGQYVO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/DataViews/base-list-card-slots.tsx"],"sourcesContent":["\"use client\";\n\nimport KeyboardArrowRightIcon from \"@mui/icons-material/KeyboardArrowRight\";\nimport { Fragment, type ReactNode } from \"react\";\n\nimport { DescriptionItem, type DescriptionItemProps } from \"../DescriptionItem\";\nimport { RAIL_GAP_PX } from \"./list-card-rails\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\nimport type { Theme } from \"@mui/material/styles/index.js\";\n\nimport { rem, sxRem } from \"../../../tokens/relative\";\n\n/**\n * WHAT SITS IN EACH RAIL.\n *\n * Split from `base-list-card` at the size gate: that module is the shell, the\n * rails and the states; this is the content of each column.\n */\n\n/** Below this the row drops its middle columns. */\nexport const META_BREAK = 520;\n/** …and below this it leaves the shared rails and goes two-line. */\nexport const STACK_BREAK = 360;\n\n/** Money and dates line up only if their digits are the same width. */\nconst TABULAR = { fontVariantNumeric: \"tabular-nums\" } as const;\n\nconst CLAMP = {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n} as const;\n\n/**\n * Title over subtitle — and, when the row navigates, the anchor that covers it.\n *\n * The link is a real `<a>` stretched by `::after` over the whole card rather\n * than a click handler on a `<div>`. That buys cmd-click, middle-click, \"copy\n * link address\", the status bar preview and correct tab order, and it stops the\n * buttons elsewhere in the row from being interactive elements nested inside a\n * clickable one.\n */\nexport function ListCardCaption({\n title,\n subtitle,\n href,\n target,\n testId,\n}: {\n title?: ReactNode;\n subtitle?: ReactNode;\n href?: string;\n target?: string;\n testId?: string;\n}): React.JSX.Element {\n return (\n <Box data-slot=\"caption\" sx={{ minWidth: 0 }}>\n {title != null && (\n <Text variant=\"heading\" size=\"sm\" weight=\"bold\" as=\"p\">\n <Box\n {...(href ? { component: \"a\", href, target } : { component: \"span\" })}\n data-testid={testId}\n sx={{\n display: \"block\",\n lineHeight: 1.2,\n fontSize: sxRem(14.4),\n color: \"inherit\",\n textDecoration: \"none\",\n ...CLAMP,\n ...(href\n ? {\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n inset: 0,\n // Under the checkbox, drag grip, actions and menu, which\n // all raise themselves to 1.\n zIndex: 0,\n },\n \"&:hover\": { textDecoration: \"underline\" },\n }\n : {}),\n }}\n >\n {title}\n </Box>\n </Text>\n )}\n {subtitle != null && (\n <Text variant=\"caption\" size=\"xs\" color=\"secondary\" as=\"p\">\n <Box component=\"span\" sx={{ display: \"block\", ...CLAMP }}>\n {subtitle}\n </Box>\n </Text>\n )}\n </Box>\n );\n}\n\n/** One rule between two columns. Shared, so every gap gets the same mark. */\nfunction MetaRule(): React.JSX.Element {\n return (\n <Box\n aria-hidden\n sx={{\n flex: \"0 0 auto\",\n color: \"text.disabled\",\n opacity: 0.5,\n userSelect: \"none\",\n fontSize: sxRem(14),\n // A cancelled row strikes the whole meta cluster, and a struck `|` is a\n // dagger. The rule is punctuation, not data — nothing to void.\n textDecoration: \"none\",\n }}\n >\n |\n </Box>\n );\n}\n\n/**\n * The middle columns: stacked label-over-value pairs, separated by a rule.\n *\n * Stacked rather than side by side because `DATA 05/08/2026` inline spends the\n * horizontal room the value rail needs, and the separator is what stops two\n * adjacent pairs reading as one four-word phrase.\n *\n * EVEN GAPS, NOT EVEN BOXES. The rail takes a share of the row's spare width\n * per pair (see `metaRail`), and the obvious way to spend it — give every pair\n * an equal-width box and centre its content — puts the separator on the BOX\n * boundary, which is only the visual midpoint when both pairs are the same\n * width. They never are: `05/08/2026, 13:45` reaches almost to the edge of its\n * box while `PIX` stops well short of its own, so the rule ends up crowded\n * against the date and adrift from the method.\n *\n * So the pairs are sized to their content and the SPARE space is what gets\n * divided evenly. `space-evenly` gives every gap — including the two either\n * side of each separator — the same width, which puts each rule exactly halfway\n * between the two labels it separates, whatever they happen to say.\n */\nexport function ListCardMeta({\n meta,\n metaSlot,\n trailingRule,\n}: {\n meta?: DescriptionItemProps[];\n metaSlot?: ReactNode;\n /** Close the run with a rule, dividing the last pair from the value. */\n trailingRule?: boolean;\n}): React.JSX.Element {\n const items = meta ?? [];\n return (\n <Box\n data-slot=\"meta\"\n sx={(theme) => ({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-evenly\",\n // A FLOOR, not the spacing itself: `space-evenly` supplies the rest, and\n // this is only what keeps a rail with no room to spare from running the\n // date straight into the rule.\n gap: 1,\n whiteSpace: \"nowrap\",\n ...TABULAR,\n // Rung 1 of the ladder.\n [`@container (max-width: ${rem(theme, META_BREAK)})`]: { display: \"none\" },\n })}\n >\n {items.map((item, index) => (\n <Fragment key={`${item.label}-${index}`}>\n {/* ITS OWN ITEM, not the first child of the pair that follows it.\n Nested inside, the rule travelled with that pair's centred content\n and came to rest nearer one label than the other — a separator\n visibly closer to MÉTODO than to DATA reads as belonging to it. */}\n {index > 0 && <MetaRule />}\n {/* Centred: a stacked pair sitting in its own column reads as one\n unit only when the label is over the value rather than flush left\n of a value shorter than it — `MÉTODO` above `PIX` was visibly\n unhinged from it. Overridable per item. */}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 0,\n // Sized to the pair, so the gaps either side of it are free space\n // that `space-evenly` can equalise.\n flex: \"0 0 auto\",\n }}\n >\n <DescriptionItem orientation=\"vertical\" align=\"center\" {...item} />\n </Box>\n </Fragment>\n ))}\n {metaSlot}\n {trailingRule && items.length > 0 && <MetaRule />}\n </Box>\n );\n}\n\n/**\n * The value sits flush against the meta rail, with no gap of its own.\n *\n * Its divider is now the LAST ITEM OF THE META CLUSTER, placed by the same\n * `space-evenly` that places the rules between the pairs — so it is equidistant\n * from `PIX` and from `R$ 13,90` for free, which a rule centred in the rail gap\n * could never be: the cluster's content stops well short of the rail's right\n * edge, leaving that rule 150px from the method and 12px from the money.\n *\n * Cancelling this one gap is what makes the two distances equal. Below\n * `META_BREAK` the cluster (and its rule) are gone, so the gap comes back —\n * otherwise the value would sit straight against the title.\n */\nconst valueFlush = (theme: Theme) => ({\n marginLeft: rem(theme, -RAIL_GAP_PX),\n [`@container (max-width: ${rem(theme, META_BREAK)})`]: { marginLeft: 0 },\n});\n\n/** The value, on its own rail, never truncated and never shunted by the chip. */\nfunction ListCardValue({ value }: { value: ReactNode }): React.JSX.Element {\n return (\n <Text variant=\"body\" size=\"sm\" weight=\"medium\" as=\"span\">\n <Box\n component=\"span\"\n sx={{ fontSize: sxRem(14), whiteSpace: \"nowrap\", ...TABULAR }}\n >\n {value}\n </Box>\n </Text>\n );\n}\n\n/**\n * The actions and the menu, at the end of the row.\n *\n * Actions are revealed on hover and `:focus-within` — always-visible buttons on\n * every row of fifty is a lot of chrome for something used on one of them.\n * `:focus-within` is what keeps them reachable by keyboard, and `visibility`\n * rather than `display` keeps their space reserved so nothing shifts.\n */\nexport function ListCardActions({\n actions,\n alwaysVisible,\n menu,\n opens = false,\n testId,\n}: {\n actions?: ReactNode;\n alwaysVisible?: boolean;\n menu?: ReactNode;\n /** End the row with the \"this opens\" chevron. */\n opens?: boolean;\n testId: (slot: string) => string | undefined;\n}): React.JSX.Element | null {\n if (actions == null && menu == null && !opens) return null;\n return (\n // z-index 1: above the stretched link, so these stay clickable. The box\n // itself lets clicks through (`pointer-events: none`, re-enabled on its\n // children): only the controls inside it are meant to catch one, and the\n // chevron, which re-disables it, must hand its click to the row or link\n // underneath rather than swallow it.\n <Box\n data-slot=\"actions\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n position: \"relative\",\n zIndex: 1,\n pointerEvents: \"none\",\n \"& > *\": { pointerEvents: \"auto\" },\n }}\n >\n {actions && (\n <Box\n data-testid={testId(\"actions\")}\n onClick={(event) => event.stopPropagation()}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n ...(alwaysVisible\n ? {}\n : {\n visibility: \"hidden\",\n \".MuiPaper-root:hover &, .MuiPaper-root:focus-within &\": {\n visibility: \"visible\",\n },\n }),\n }}\n >\n {actions}\n </Box>\n )}\n {menu && (\n <Box data-testid={testId(\"menu\")} onClick={(event) => event.stopPropagation()}>\n {menu}\n </Box>\n )}\n {opens && <OpenChevron testId={testId(\"open\")} />}\n </Box>\n );\n}\n\n/**\n * THE \"THIS OPENS\" CHEVRON, at the end of a row that leads somewhere.\n *\n * A row that navigates or opens a record looked exactly like a row that does\n * nothing until a pointer hovered it, and a phone has no hover. Always visible —\n * unlike `actions`, it is a statement about the row, not a control to reveal.\n *\n * Decorative to assistive tech (`aria-hidden`): the row itself is the button or\n * the link, and already says so. It takes no click of its own for the same\n * reason; the click falls through to the row.\n */\nfunction OpenChevron({ testId }: { testId?: string }): React.JSX.Element {\n return (\n <Box\n component=\"span\"\n aria-hidden\n data-testid={testId}\n sx={{ display: \"flex\", alignItems: \"center\", color: \"text.secondary\", pointerEvents: \"none !important\" }}\n >\n <KeyboardArrowRightIcon fontSize=\"small\" />\n </Box>\n );\n}\n\n/** Value and actions — separate rails, not one flex run. */\nexport function ListCardTail({\n value,\n separated,\n actions,\n actionsAlwaysVisible,\n menu,\n opens,\n testId,\n}: {\n value?: ReactNode;\n /** Whether a meta cluster precedes the value and wants dividing from it. */\n separated?: boolean;\n actions?: ReactNode;\n actionsAlwaysVisible?: boolean;\n menu?: ReactNode;\n opens?: boolean;\n testId: (slot: string) => string | undefined;\n}): React.JSX.Element {\n return (\n <>\n <Box\n data-slot=\"value\"\n sx={(theme) => ({\n textAlign: \"right\",\n ...(separated && value != null ? valueFlush(theme) : {}),\n })}\n data-testid={testId(\"value\")}\n >\n {value != null && <ListCardValue value={value} />}\n </Box>\n <ListCardActions\n actions={actions}\n alwaysVisible={actionsAlwaysVisible}\n menu={menu}\n opens={opens}\n testId={testId}\n />\n </>\n );\n}\n"],"mappings":"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","names":["Fragment","default"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  RaisedActionButton
3
- } from "./chunk-7AAJYWC3.js";
3
+ } from "./chunk-HPO7PB4F.js";
4
4
  import {
5
5
  SectionNavSheet
6
- } from "./chunk-WF3P7GE5.js";
6
+ } from "./chunk-I3CQBEKS.js";
7
7
  import {
8
8
  Box,
9
9
  CONTROL_RESET,
@@ -13,7 +13,7 @@ import {
13
13
  controlProps,
14
14
  destinationControl,
15
15
  focusRing
16
- } from "./chunk-IK2ZVV3M.js";
16
+ } from "./chunk-GK7JNSMK.js";
17
17
  import {
18
18
  barSlots,
19
19
  destinationState,
@@ -291,4 +291,4 @@ export {
291
291
  sectionNavBarInset,
292
292
  SectionNavBar
293
293
  };
294
- //# sourceMappingURL=chunk-VWW2EXH7.js.map
294
+ //# sourceMappingURL=chunk-ZYJZHXFU.js.map
@@ -2,10 +2,10 @@ import "../chunk-UDQSIRAP.js";
2
2
  import {
3
3
  Avatar,
4
4
  AvatarGroup
5
- } from "../chunk-G76BNXWE.js";
6
- import "../chunk-3ZVUNSFF.js";
5
+ } from "../chunk-XW5SEW3H.js";
7
6
  import "../chunk-GYDUXL3D.js";
8
7
  import "../chunk-6ZZGK5DT.js";
8
+ import "../chunk-3ZVUNSFF.js";
9
9
  import "../chunk-MTEQEPNY.js";
10
10
  import "../chunk-SSX5ITPM.js";
11
11
  import "../chunk-F5H2ZXST.js";
@@ -1,11 +1,11 @@
1
1
  import "../chunk-5AK2EZG5.js";
2
2
  import {
3
3
  Badge
4
- } from "../chunk-EUPUEMFX.js";
5
- import "../chunk-6C5D6O3D.js";
4
+ } from "../chunk-PC4H5LVB.js";
6
5
  import "../chunk-H6XOWGQV.js";
7
6
  import "../chunk-OEMZFRLF.js";
8
7
  import "../chunk-O23DG4VH.js";
8
+ import "../chunk-6C5D6O3D.js";
9
9
  import "../chunk-3UIDKLML.js";
10
10
  import "../chunk-PYC4CWCQ.js";
11
11
  import "../chunk-TYJR4GOF.js";
@@ -1,3 +1,13 @@
1
+ import {
2
+ rowActionsToMenuItems
3
+ } from "../chunk-ZBXG6RVJ.js";
4
+ import {
5
+ BodyHeading,
6
+ DetailColumns,
7
+ Fact,
8
+ Ledger,
9
+ TagList
10
+ } from "../chunk-JOKWTRWL.js";
1
11
  import {
2
12
  CardKebab
3
13
  } from "../chunk-XGIJGIN3.js";
@@ -11,16 +21,6 @@ import {
11
21
  CardActionsProvider,
12
22
  useCardActions
13
23
  } from "../chunk-UZANFXCK.js";
14
- import {
15
- rowActionsToMenuItems
16
- } from "../chunk-ZBXG6RVJ.js";
17
- import {
18
- BodyHeading,
19
- DetailColumns,
20
- Fact,
21
- Ledger,
22
- TagList
23
- } from "../chunk-JOKWTRWL.js";
24
24
  import "../chunk-WVML3ENZ.js";
25
25
  import "../chunk-2X2G75MV.js";
26
26
  import "../chunk-XCBQXSTR.js";
@@ -1,7 +1,8 @@
1
1
  import "../chunk-62FET2BM.js";
2
2
  import {
3
3
  Carousel
4
- } from "../chunk-OBMPE6PW.js";
4
+ } from "../chunk-SSDYEOU4.js";
5
+ import "../chunk-Z64TMGYT.js";
5
6
  import "../chunk-EMNDJ57M.js";
6
7
  import "../chunk-RUIV5TVA.js";
7
8
  import "../chunk-QCTG7LIX.js";
@@ -10,7 +11,6 @@ import {
10
11
  CarouselIndicators,
11
12
  CarouselThumbnails
12
13
  } from "../chunk-7GWRSYUS.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,22 +1,24 @@
1
1
  import "../chunk-5KLSLD72.js";
2
2
  import {
3
3
  SpecChart
4
- } from "../chunk-GI24X7XA.js";
4
+ } from "../chunk-4PPNCZWY.js";
5
5
  import {
6
6
  Chart
7
- } from "../chunk-JL77BSOL.js";
7
+ } from "../chunk-WBDQSBLV.js";
8
8
  import {
9
9
  CHART_SEMANTIC_COLORS,
10
10
  ChartSpecError,
11
11
  parseChartSpec,
12
12
  specToChartProps
13
- } from "../chunk-R6SBP5M5.js";
13
+ } from "../chunk-JVOEVTCZ.js";
14
14
  import {
15
15
  getChartSpecRenderer,
16
16
  getRegisteredChartSpecTypes,
17
17
  registerChartSpecRenderer
18
18
  } from "../chunk-WKUA6P3W.js";
19
- import "../chunk-RBHBJDOZ.js";
19
+ import "../chunk-3FMWQQW6.js";
20
+ import "../chunk-W7N4ORCV.js";
21
+ import "../chunk-SOHQPPYJ.js";
20
22
  import {
21
23
  ChartContainer,
22
24
  ChartLegend,
@@ -24,13 +26,11 @@ import {
24
26
  ChartTooltip,
25
27
  ChartTooltipContent
26
28
  } from "../chunk-RIRTW5EU.js";
29
+ import "../chunk-FIMSPRKX.js";
27
30
  import {
28
31
  chartValueFormatter,
29
32
  formatChartValue
30
- } from "../chunk-QVWNK4JO.js";
31
- import "../chunk-C67FDYG7.js";
32
- import "../chunk-FIMSPRKX.js";
33
- import "../chunk-SOHQPPYJ.js";
33
+ } from "../chunk-6GPNZSAE.js";
34
34
  import "../chunk-B7ZHEOQQ.js";
35
35
  import "../chunk-BRHRK7BK.js";
36
36
  import "../chunk-25MSGLNU.js";
@@ -1,11 +1,11 @@
1
1
  import "../chunk-L5CPOEDP.js";
2
2
  import {
3
3
  DataGrid
4
- } from "../chunk-LWZ2K225.js";
4
+ } from "../chunk-FXZUVZON.js";
5
+ import "../chunk-EARWC6PD.js";
5
6
  import "../chunk-LDROG4QI.js";
6
7
  import "../chunk-ZFXTRPQO.js";
7
8
  import "../chunk-ICDAYOJ6.js";
8
- import "../chunk-EARWC6PD.js";
9
9
  import "../chunk-G3E66C6J.js";
10
10
  import "../chunk-YKCAJ2TN.js";
11
11
  import "../chunk-PZ5AY32C.js";