@elabs-ai/components-ui 5.1.0 → 5.3.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 (237) hide show
  1. package/dist/{chunk-KBWHHAI3.js → chunk-2ZWUTZHE.js} +2 -2
  2. package/dist/{chunk-SSQG36MH.js → chunk-34CYSZ2F.js} +2 -2
  3. package/dist/chunk-34CYSZ2F.js.map +1 -0
  4. package/dist/{chunk-AXHMQOIZ.js → chunk-3GJLYUZ6.js} +3 -3
  5. package/dist/{chunk-CEDK5GM2.js → chunk-5AJQUJ5C.js} +2 -2
  6. package/dist/{chunk-MDQYRES4.js → chunk-5KNLME6F.js} +11 -5
  7. package/dist/chunk-5KNLME6F.js.map +1 -0
  8. package/dist/{chunk-ERTYAID6.js → chunk-5QQFXDUY.js} +5 -3
  9. package/dist/{chunk-ERTYAID6.js.map → chunk-5QQFXDUY.js.map} +1 -1
  10. package/dist/{chunk-E3GNYOLS.js → chunk-64BKIIJC.js} +2 -2
  11. package/dist/{chunk-RHVYRQN4.js → chunk-7ZJLR6RP.js} +2 -2
  12. package/dist/{chunk-HWVU636Q.js → chunk-A3JF66ZC.js} +3 -3
  13. package/dist/{chunk-NZUKZRT7.js → chunk-A3TT32GE.js} +2 -2
  14. package/dist/{chunk-C2ICCCP5.js → chunk-A4ZSNEZD.js} +2 -2
  15. package/dist/{chunk-JTY3REOB.js → chunk-BGXBANS2.js} +3 -3
  16. package/dist/{chunk-MY5H6D5Y.js → chunk-C4FNDXBM.js} +2 -2
  17. package/dist/{chunk-QF6UWWDY.js → chunk-C4FZWPI4.js} +1 -1
  18. package/dist/{chunk-QF6UWWDY.js.map → chunk-C4FZWPI4.js.map} +1 -1
  19. package/dist/{chunk-QLM3KTAQ.js → chunk-C6I5I5LA.js} +3 -3
  20. package/dist/{chunk-IE5GWE72.js → chunk-CF7YSCCA.js} +3 -3
  21. package/dist/chunk-CF7YSCCA.js.map +1 -0
  22. package/dist/{chunk-RYPK72YP.js → chunk-CGY25FAG.js} +2 -2
  23. package/dist/{chunk-HDS64Z5L.js → chunk-DIL73NE3.js} +2 -2
  24. package/dist/{chunk-VC4GKLZL.js → chunk-EHN5ZAHP.js} +2 -2
  25. package/dist/{chunk-HXQ4MDCH.js → chunk-F6FF4EJN.js} +2 -2
  26. package/dist/{chunk-V5QCJHDA.js → chunk-FC2LHNJG.js} +3 -3
  27. package/dist/{chunk-ZRMF4YAS.js → chunk-FCVHZDP7.js} +3 -3
  28. package/dist/{chunk-BYFRDLDL.js → chunk-FKDI2T7X.js} +2 -2
  29. package/dist/{chunk-GWHO5ACE.js → chunk-FNRVVVXX.js} +2 -2
  30. package/dist/{chunk-Y33ZFTMR.js → chunk-FWAFP76U.js} +2 -2
  31. package/dist/{chunk-ZALGMUSW.js → chunk-HUXLE3K3.js} +2 -2
  32. package/dist/{chunk-NRPZ3BH4.js → chunk-I3LBIBVN.js} +2 -2
  33. package/dist/{chunk-GTDCC4YX.js → chunk-IV6OYZTL.js} +2 -2
  34. package/dist/{chunk-4DWIMWR5.js → chunk-JQIXRCLG.js} +2 -2
  35. package/dist/{chunk-M5WPZXBA.js → chunk-JU4KW7JN.js} +3 -3
  36. package/dist/{chunk-PSXUEWUS.js → chunk-LVY7B5PD.js} +2 -2
  37. package/dist/{chunk-FLCQKC64.js → chunk-MIWFBH5S.js} +3 -3
  38. package/dist/{chunk-6TJVJPNU.js → chunk-O6AIFSTX.js} +46 -1
  39. package/dist/chunk-O6AIFSTX.js.map +1 -0
  40. package/dist/{chunk-EJQYE4MY.js → chunk-OFFWEDKY.js} +2 -2
  41. package/dist/{chunk-W7OIVERI.js → chunk-ONXBRQJT.js} +2 -2
  42. package/dist/{chunk-ENL3CCZB.js → chunk-PCNQ6NP2.js} +5 -5
  43. package/dist/{chunk-BRL2HMZJ.js → chunk-PFGQDW3H.js} +2 -2
  44. package/dist/{chunk-GMXSCEYN.js → chunk-R6CITZBB.js} +2 -2
  45. package/dist/{chunk-CY5ISPFB.js → chunk-RHZSAWAU.js} +2 -2
  46. package/dist/{chunk-FXC64HLD.js → chunk-S7YR3FYZ.js} +2 -2
  47. package/dist/{chunk-W35X6J5P.js → chunk-SD5MGHIJ.js} +3 -3
  48. package/dist/{chunk-2DFB4YTK.js → chunk-SJHDX73F.js} +2 -2
  49. package/dist/{chunk-MRBDJASL.js → chunk-SQLEVIAD.js} +3 -3
  50. package/dist/{chunk-3EDNWHWD.js → chunk-SR3SC2Q3.js} +2 -2
  51. package/dist/{chunk-HANBQNW3.js → chunk-U7ADXWTI.js} +26 -14
  52. package/dist/chunk-U7ADXWTI.js.map +1 -0
  53. package/dist/{chunk-CEHCVDYR.js → chunk-U7CSWQAE.js} +3 -3
  54. package/dist/{chunk-SWQCCR6Q.js → chunk-U7FC5J6J.js} +3 -3
  55. package/dist/{chunk-4VCU3GFI.js → chunk-UVVVKPSH.js} +2 -2
  56. package/dist/{chunk-BDOG4YSM.js → chunk-VAWYYETZ.js} +8 -8
  57. package/dist/{chunk-ALNJV4XB.js → chunk-WDZ47ZTX.js} +2 -2
  58. package/dist/{chunk-HHZJALGA.js → chunk-WL2EZDSD.js} +3 -3
  59. package/dist/{chunk-UQPW7INX.js → chunk-XE6GYGWS.js} +2 -2
  60. package/dist/{chunk-OGTILHKP.js → chunk-Y3CKZ7SH.js} +3 -3
  61. package/dist/{chunk-RIYDAMSQ.js → chunk-YA2CG4YL.js} +2 -2
  62. package/dist/{chunk-4DZGAY6R.js → chunk-ZESSUMCO.js} +2 -2
  63. package/dist/{chunk-L6A3RXCU.js → chunk-ZGNWDYSC.js} +3 -3
  64. package/dist/components/advanced-group/advanced-group.js +3 -3
  65. package/dist/components/advanced-group/index.js +3 -3
  66. package/dist/components/app-sidebar/app-sidebar.js +5 -5
  67. package/dist/components/app-sidebar/index.js +5 -5
  68. package/dist/components/attribution-panel/attribution-panel.js +4 -4
  69. package/dist/components/attribution-panel/attributions.generated.js +1 -1
  70. package/dist/components/attribution-panel/index.js +4 -4
  71. package/dist/components/bounded-number/bounded-number.js +4 -4
  72. package/dist/components/bounded-number/index.js +4 -4
  73. package/dist/components/breadcrumb/breadcrumb.js +3 -3
  74. package/dist/components/breadcrumb/index.js +3 -3
  75. package/dist/components/carousel/carousel.js +3 -3
  76. package/dist/components/carousel/index.js +3 -3
  77. package/dist/components/change-review/change-review.js +4 -4
  78. package/dist/components/change-review/index.js +4 -4
  79. package/dist/components/color-picker/color-picker.js +3 -3
  80. package/dist/components/color-picker/index.js +3 -3
  81. package/dist/components/combobox/combobox.js +5 -5
  82. package/dist/components/combobox/index.js +5 -5
  83. package/dist/components/command/command.js +4 -4
  84. package/dist/components/command/index.js +4 -4
  85. package/dist/components/confirm-dialog/confirm-dialog.js +4 -4
  86. package/dist/components/confirm-dialog/index.js +4 -4
  87. package/dist/components/context-rail/context-rail.js +6 -6
  88. package/dist/components/context-rail/index.js +6 -6
  89. package/dist/components/copyable-value/copyable-value.js +3 -3
  90. package/dist/components/copyable-value/index.js +3 -3
  91. package/dist/components/date-picker/date-picker.js +3 -3
  92. package/dist/components/date-picker/index.js +3 -3
  93. package/dist/components/date-range-picker/date-range-picker.js +3 -3
  94. package/dist/components/date-range-picker/index.js +3 -3
  95. package/dist/components/dialog/dialog.js +3 -3
  96. package/dist/components/dialog/index.js +3 -3
  97. package/dist/components/empty-state/empty-state.js +4 -4
  98. package/dist/components/empty-state/index.js +4 -4
  99. package/dist/components/error-state/error-state.js +4 -4
  100. package/dist/components/error-state/index.js +4 -4
  101. package/dist/components/expand-dialog/expand-dialog.js +4 -4
  102. package/dist/components/expand-dialog/index.js +4 -4
  103. package/dist/components/file-upload/file-upload.js +3 -3
  104. package/dist/components/file-upload/index.js +3 -3
  105. package/dist/components/key-value-editor/index.js +3 -3
  106. package/dist/components/key-value-editor/key-value-editor.js +3 -3
  107. package/dist/components/keyboard-shortcuts/index.js +4 -4
  108. package/dist/components/keyboard-shortcuts/keyboard-shortcuts.js +4 -4
  109. package/dist/components/list-editor/index.js +3 -3
  110. package/dist/components/list-editor/list-editor.js +3 -3
  111. package/dist/components/loading-state/index.js +4 -4
  112. package/dist/components/loading-state/loading-state.js +4 -4
  113. package/dist/components/locale-provider/index.js +2 -2
  114. package/dist/components/locale-provider/locale-provider.js +2 -2
  115. package/dist/components/locale-provider/messages.js +1 -1
  116. package/dist/components/mention-input/index.js +3 -3
  117. package/dist/components/mention-input/mention-input.js +3 -3
  118. package/dist/components/metric-card/index.js +4 -4
  119. package/dist/components/metric-card/metric-card.js +4 -4
  120. package/dist/components/model-picker/index.js +5 -5
  121. package/dist/components/model-picker/model-picker.js +5 -5
  122. package/dist/components/nav-main/index.js +5 -5
  123. package/dist/components/nav-main/nav-main.js +5 -5
  124. package/dist/components/nav-notifications/index.js +3 -3
  125. package/dist/components/nav-notifications/nav-notifications.js +3 -3
  126. package/dist/components/nav-user/index.js +5 -5
  127. package/dist/components/nav-user/nav-user.js +5 -5
  128. package/dist/components/number-input/index.js +3 -3
  129. package/dist/components/number-input/number-input.js +3 -3
  130. package/dist/components/pagination/index.js +3 -3
  131. package/dist/components/pagination/pagination.js +3 -3
  132. package/dist/components/revision-timeline/index.js +3 -3
  133. package/dist/components/revision-timeline/revision-timeline.js +3 -3
  134. package/dist/components/schema-form/index.js +9 -9
  135. package/dist/components/schema-form/schema-form.js +9 -9
  136. package/dist/components/sheet/index.js +3 -3
  137. package/dist/components/sheet/sheet.js +3 -3
  138. package/dist/components/side-dock/index.js +4 -4
  139. package/dist/components/side-dock/side-dock.js +4 -4
  140. package/dist/components/sidebar/index.js +4 -4
  141. package/dist/components/sidebar/sidebar.js +4 -4
  142. package/dist/components/slider-number/index.js +4 -4
  143. package/dist/components/slider-number/slider-number.js +4 -4
  144. package/dist/components/spec-playground/index.js +2 -2
  145. package/dist/components/spec-playground/locate-json-path.js +1 -1
  146. package/dist/components/spec-playground/spec-playground.js +2 -2
  147. package/dist/components/spinner/index.js +3 -3
  148. package/dist/components/spinner/spinner.js +3 -3
  149. package/dist/components/state-panel/index.js +3 -3
  150. package/dist/components/state-panel/state-panel.js +3 -3
  151. package/dist/components/table/index.js +3 -3
  152. package/dist/components/table/table.js +3 -3
  153. package/dist/components/team-switcher/index.js +5 -5
  154. package/dist/components/team-switcher/team-switcher.js +5 -5
  155. package/dist/components/theme-switcher/index.js +3 -3
  156. package/dist/components/theme-switcher/theme-switcher.js +3 -3
  157. package/dist/components/toolbar/index.js +1 -1
  158. package/dist/components/toolbar/toolbar.js +1 -1
  159. package/dist/components/transfer/index.js +3 -3
  160. package/dist/components/transfer/transfer.js +3 -3
  161. package/dist/components/tree/index.js +4 -4
  162. package/dist/components/tree/tree.js +4 -4
  163. package/dist/components/tree-select/index.js +5 -5
  164. package/dist/components/tree-select/tree-select.js +5 -5
  165. package/dist/components/view-toolbar/index.js +3 -3
  166. package/dist/components/view-toolbar/view-toolbar.js +3 -3
  167. package/dist/components/virtual-select/index.js +3 -3
  168. package/dist/components/virtual-select/virtual-select.js +3 -3
  169. package/dist/components/workspace-picker/index.js +6 -6
  170. package/dist/components/workspace-picker/workspace-picker.js +6 -6
  171. package/dist/index.d.ts +18 -3
  172. package/dist/index.js +60 -57
  173. package/dist/lib/streamdown-translations.js +3 -3
  174. package/package.json +3 -3
  175. package/src/components/attribution-panel/attributions.generated.ts +26 -14
  176. package/src/components/locale-provider/messages.ts +47 -0
  177. package/src/components/metric-card/metric-card.tsx +1 -1
  178. package/src/components/spec-playground/locate-json-path.ts +1 -1
  179. package/src/components/spec-playground/spec-playground.tsx +1 -1
  180. package/src/components/toolbar/toolbar.tsx +4 -2
  181. package/src/components/tree/tree.stories.tsx +28 -0
  182. package/src/components/tree/tree.tsx +17 -2
  183. package/src/index.ts +3 -0
  184. package/dist/chunk-6TJVJPNU.js.map +0 -1
  185. package/dist/chunk-HANBQNW3.js.map +0 -1
  186. package/dist/chunk-IE5GWE72.js.map +0 -1
  187. package/dist/chunk-MDQYRES4.js.map +0 -1
  188. package/dist/chunk-SSQG36MH.js.map +0 -1
  189. /package/dist/{chunk-KBWHHAI3.js.map → chunk-2ZWUTZHE.js.map} +0 -0
  190. /package/dist/{chunk-AXHMQOIZ.js.map → chunk-3GJLYUZ6.js.map} +0 -0
  191. /package/dist/{chunk-CEDK5GM2.js.map → chunk-5AJQUJ5C.js.map} +0 -0
  192. /package/dist/{chunk-E3GNYOLS.js.map → chunk-64BKIIJC.js.map} +0 -0
  193. /package/dist/{chunk-RHVYRQN4.js.map → chunk-7ZJLR6RP.js.map} +0 -0
  194. /package/dist/{chunk-HWVU636Q.js.map → chunk-A3JF66ZC.js.map} +0 -0
  195. /package/dist/{chunk-NZUKZRT7.js.map → chunk-A3TT32GE.js.map} +0 -0
  196. /package/dist/{chunk-C2ICCCP5.js.map → chunk-A4ZSNEZD.js.map} +0 -0
  197. /package/dist/{chunk-JTY3REOB.js.map → chunk-BGXBANS2.js.map} +0 -0
  198. /package/dist/{chunk-MY5H6D5Y.js.map → chunk-C4FNDXBM.js.map} +0 -0
  199. /package/dist/{chunk-QLM3KTAQ.js.map → chunk-C6I5I5LA.js.map} +0 -0
  200. /package/dist/{chunk-RYPK72YP.js.map → chunk-CGY25FAG.js.map} +0 -0
  201. /package/dist/{chunk-HDS64Z5L.js.map → chunk-DIL73NE3.js.map} +0 -0
  202. /package/dist/{chunk-VC4GKLZL.js.map → chunk-EHN5ZAHP.js.map} +0 -0
  203. /package/dist/{chunk-HXQ4MDCH.js.map → chunk-F6FF4EJN.js.map} +0 -0
  204. /package/dist/{chunk-V5QCJHDA.js.map → chunk-FC2LHNJG.js.map} +0 -0
  205. /package/dist/{chunk-ZRMF4YAS.js.map → chunk-FCVHZDP7.js.map} +0 -0
  206. /package/dist/{chunk-BYFRDLDL.js.map → chunk-FKDI2T7X.js.map} +0 -0
  207. /package/dist/{chunk-GWHO5ACE.js.map → chunk-FNRVVVXX.js.map} +0 -0
  208. /package/dist/{chunk-Y33ZFTMR.js.map → chunk-FWAFP76U.js.map} +0 -0
  209. /package/dist/{chunk-ZALGMUSW.js.map → chunk-HUXLE3K3.js.map} +0 -0
  210. /package/dist/{chunk-NRPZ3BH4.js.map → chunk-I3LBIBVN.js.map} +0 -0
  211. /package/dist/{chunk-GTDCC4YX.js.map → chunk-IV6OYZTL.js.map} +0 -0
  212. /package/dist/{chunk-4DWIMWR5.js.map → chunk-JQIXRCLG.js.map} +0 -0
  213. /package/dist/{chunk-M5WPZXBA.js.map → chunk-JU4KW7JN.js.map} +0 -0
  214. /package/dist/{chunk-PSXUEWUS.js.map → chunk-LVY7B5PD.js.map} +0 -0
  215. /package/dist/{chunk-FLCQKC64.js.map → chunk-MIWFBH5S.js.map} +0 -0
  216. /package/dist/{chunk-EJQYE4MY.js.map → chunk-OFFWEDKY.js.map} +0 -0
  217. /package/dist/{chunk-W7OIVERI.js.map → chunk-ONXBRQJT.js.map} +0 -0
  218. /package/dist/{chunk-ENL3CCZB.js.map → chunk-PCNQ6NP2.js.map} +0 -0
  219. /package/dist/{chunk-BRL2HMZJ.js.map → chunk-PFGQDW3H.js.map} +0 -0
  220. /package/dist/{chunk-GMXSCEYN.js.map → chunk-R6CITZBB.js.map} +0 -0
  221. /package/dist/{chunk-CY5ISPFB.js.map → chunk-RHZSAWAU.js.map} +0 -0
  222. /package/dist/{chunk-FXC64HLD.js.map → chunk-S7YR3FYZ.js.map} +0 -0
  223. /package/dist/{chunk-W35X6J5P.js.map → chunk-SD5MGHIJ.js.map} +0 -0
  224. /package/dist/{chunk-2DFB4YTK.js.map → chunk-SJHDX73F.js.map} +0 -0
  225. /package/dist/{chunk-MRBDJASL.js.map → chunk-SQLEVIAD.js.map} +0 -0
  226. /package/dist/{chunk-3EDNWHWD.js.map → chunk-SR3SC2Q3.js.map} +0 -0
  227. /package/dist/{chunk-CEHCVDYR.js.map → chunk-U7CSWQAE.js.map} +0 -0
  228. /package/dist/{chunk-SWQCCR6Q.js.map → chunk-U7FC5J6J.js.map} +0 -0
  229. /package/dist/{chunk-4VCU3GFI.js.map → chunk-UVVVKPSH.js.map} +0 -0
  230. /package/dist/{chunk-BDOG4YSM.js.map → chunk-VAWYYETZ.js.map} +0 -0
  231. /package/dist/{chunk-ALNJV4XB.js.map → chunk-WDZ47ZTX.js.map} +0 -0
  232. /package/dist/{chunk-HHZJALGA.js.map → chunk-WL2EZDSD.js.map} +0 -0
  233. /package/dist/{chunk-UQPW7INX.js.map → chunk-XE6GYGWS.js.map} +0 -0
  234. /package/dist/{chunk-OGTILHKP.js.map → chunk-Y3CKZ7SH.js.map} +0 -0
  235. /package/dist/{chunk-RIYDAMSQ.js.map → chunk-YA2CG4YL.js.map} +0 -0
  236. /package/dist/{chunk-4DZGAY6R.js.map → chunk-ZESSUMCO.js.map} +0 -0
  237. /package/dist/{chunk-L6A3RXCU.js.map → chunk-ZGNWDYSC.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-LDOCY4SU.js";
5
5
  import {
6
6
  CopyableValue
7
- } from "./chunk-CEDK5GM2.js";
7
+ } from "./chunk-5AJQUJ5C.js";
8
8
  import {
9
9
  Card,
10
10
  CardContent
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-UPGIQXUY.js";
15
15
  import {
16
16
  useLocale
17
- } from "./chunk-EJQYE4MY.js";
17
+ } from "./chunk-OFFWEDKY.js";
18
18
  import {
19
19
  cn
20
20
  } from "./chunk-FXWWDMMP.js";
@@ -174,4 +174,4 @@ var MetricCard = forwardRef(function MetricCard2({
174
174
  export {
175
175
  MetricCard
176
176
  };
177
- //# sourceMappingURL=chunk-IE5GWE72.js.map
177
+ //# sourceMappingURL=chunk-CF7YSCCA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/metric-card/metric-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Card, CardContent } from \"../card\";\nimport { CopyableValue } from \"../copyable-value\";\nimport { Skeleton } from \"../skeleton\";\nimport { useLocale } from \"../locale-provider\";\nimport { cn } from \"../../lib/cn\";\nimport {\n type NumberFormat,\n type ResolvedNumberFormat,\n resolveNumberFormat,\n} from \"../../lib/compact-number\";\n\n/**\n * Applies a {@link ResolvedNumberFormat}'s `prefix`/`suffix`/`parens` on top\n * of the plain `Intl` string `formatNumber` produces — the two things Intl\n * itself cannot render (RM-109). Twin of `formatResolvedChartValue`\n * (`packages/charts/src/charts/chart-formatters.ts`).\n */\nfunction formatResolvedNumber(\n resolved: ResolvedNumberFormat,\n formatNumber: (n: number, opts?: Intl.NumberFormatOptions) => string,\n value: number,\n): string {\n const numeric = formatNumber(resolved.parens ? Math.abs(value) : value, resolved.options);\n const signed = resolved.parens && value < 0 ? `(${numeric})` : numeric;\n return `${resolved.prefix}${signed}${resolved.suffix}`;\n}\n\n/*\n * ADR 0012: this is the ONE KPI tile — `@elabs-ai/components-charts` re-exports it.\n * RM-072 adds `size` (sm | md | lg) for dashboard tiles and a `sparkline`\n * slot under the value. `ui` never imports `charts`: the host passes the\n * `<Sparkline …/>` element in.\n */\n\n/*\n * `emphasis` — size/weight/space ONLY, no new hue (research 11 §B.5 KPI-1/5):\n * `headline` is the answer-leading rung (`text-kpi`, ~32px); `default` stays\n * calm on the intermediate 1.5rem reading rung (the pre-#188 step between\n * `title` and `kpi` — no app role exists there, same precedent as the prose\n * h1/h3 rungs; baselined in the text-scale ratchet).\n */\nconst metricValueVariants = cva(\"tabular-nums text-foreground\", {\n variants: {\n emphasis: {\n default: \"text-2xl font-semibold tracking-tight\",\n headline: \"text-kpi\",\n },\n /* `md` adds nothing (today's rungs); `sm`/`lg` override the size via `cn()`. */\n size: {\n sm: \"text-title\",\n md: \"\",\n lg: \"text-kpi\",\n },\n },\n defaultVariants: { emphasis: \"default\", size: \"md\" },\n});\n\nconst metricContentVariants = cva(\"space-y-2\", {\n variants: {\n emphasis: {\n default: \"p-5\",\n headline: \"p-6\",\n },\n size: {\n sm: \"space-y-1 p-3\",\n md: \"\",\n lg: \"p-6\",\n },\n },\n defaultVariants: { emphasis: \"default\", size: \"md\" },\n});\n\nconst metricSparklineVariants = cva(\"\", {\n variants: {\n size: {\n /* never rendered — `sm` drops the slot; kept so the axis is total */\n sm: \"\",\n md: \"pt-1\",\n lg: \"min-h-12 pt-2\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n\nexport type MetricCardEmphasis = NonNullable<VariantProps<typeof metricValueVariants>[\"emphasis\"]>;\n\n/**\n * Tile tier (RM-072). `sm`: label + value only (no icon, delta, description,\n * sparkline, visual or evidence); `md`: the default tile; `lg`: the kpi value\n * rung with more room for the `sparkline` slot.\n */\nexport type MetricCardSize = NonNullable<VariantProps<typeof metricValueVariants>[\"size\"]>;\n\n/**\n * How a NUMERIC `value` is rendered. A function takes over completely.\n *\n * `\"compact\"` is the default because a KPI tile is a small box and\n * `50012102.632741` does not fit in one — the exact figure stays one click\n * away via `CopyableValue`. Anything that is not a `number` (a string, an\n * element) is passed through untouched, so every existing call site is\n * unaffected.\n *\n * Also accepts the object form (RM-109, `NumberFormatSpec` —\n * `{ decimals, abbreviate, sign, prefix, suffix, … }`,\n * `packages/ui/src/lib/compact-number.ts`) for a tile that needs e.g.\n * `{ decimals: 1, suffix: \"%\" }` without hand-formatting the string itself.\n * The two preset-string cases render byte-for-byte as before this type\n * widened — only a spec OBJECT argument reaches the new code path.\n */\nexport type MetricCardValueFormat = NumberFormat | ((value: number) => ReactNode);\n\nexport interface MetricCardProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof metricValueVariants> {\n label: ReactNode;\n value: ReactNode;\n /**\n * How to render a NUMERIC `value`. Default: `\"compact\"`. Ignored for every\n * other `ReactNode` — a string you already formatted is rendered verbatim.\n */\n valueFormat?: MetricCardValueFormat;\n /** ISO 4217 code for `valueFormat: \"currency\"`. Default: `\"USD\"`. */\n currency?: string;\n /**\n * Offer the exact figure on click when a numeric `value` was shortened.\n * Default: `true`. Turning it off leaves a compacted number with no way back\n * to its digits, so only do that when the tile is decorative.\n */\n copyExactValue?: boolean;\n /** Secondary line under the value — sublabel / context. */\n description?: ReactNode;\n /** Signed change, e.g. \"+12.4%\". Direction colors it. */\n delta?: string;\n deltaDirection?: \"up\" | \"down\" | \"neutral\";\n /** Whether \"up\" is good (green) — flip for metrics where down is good. */\n positiveIsGood?: boolean;\n icon?: ReactNode;\n /** Optional inline visual shown under the value/description. */\n visual?: ReactNode;\n /**\n * Trend slot rendered directly under the value (RM-072) — pass a\n * `<Sparkline …/>` from `@elabs-ai/components-charts`. Hidden at `size=\"sm\"`.\n */\n sparkline?: ReactNode;\n /**\n * Optional grounding footer (research 11 §B.5 KPI-3) — connects a cited\n * figure to its source (e.g. an `EvidenceChip` from `@elabs-ai/components-ai`). Rendered\n * subdued (`text-meta text-muted-foreground`) under the tile body.\n */\n evidence?: ReactNode;\n /**\n * Loading vs ready — renders a layout-shaped skeleton (matching the real\n * box height) instead of the value/label/delta text. Default: `false`.\n */\n loading?: boolean;\n /**\n * Whether this tile announces its own `loading` state via a live region.\n * Set to `false` when several tiles are composed inside a container that\n * already announces once for the whole region (e.g. a loading\n * `MetricGrid`) — see loading-states.md §a11y (\"one live region per\n * region, not per box\"). Default: `true`.\n */\n announceLoading?: boolean;\n}\n\n/** Compact KPI tile for dashboards. */\nexport const MetricCard = forwardRef<HTMLDivElement, MetricCardProps>(function MetricCard(\n {\n label,\n value,\n valueFormat = \"compact\",\n currency,\n copyExactValue = true,\n description,\n delta,\n deltaDirection = \"neutral\",\n positiveIsGood = true,\n icon,\n visual,\n sparkline,\n evidence,\n emphasis,\n size,\n loading = false,\n announceLoading = true,\n className,\n ...props\n },\n ref,\n) {\n const { t, formatNumber } = useLocale();\n\n // Formatting applies to NUMBERS only. Every shipped call site passes a string\n // it formatted itself, so this branch is inert for them — that is what makes\n // a new default safe.\n const isNumeric = typeof value === \"number\";\n const formattedValue: ReactNode = !isNumeric\n ? value\n : typeof valueFormat === \"function\"\n ? valueFormat(value)\n : formatResolvedNumber(\n resolveNumberFormat(valueFormat, value, currency),\n formatNumber,\n value,\n );\n // Only offer the exact figure when the display actually differs from it —\n // a button around a value that was never shortened is noise.\n const showsExact = isNumeric && String(formattedValue) === String(value);\n const canCopyExact =\n isNumeric && copyExactValue && typeof valueFormat !== \"function\" && !showsExact;\n\n const good =\n deltaDirection === \"up\" ? positiveIsGood : deltaDirection === \"down\" ? !positiveIsGood : null;\n const deltaColor =\n good === null ? \"text-muted-foreground\" : good ? \"text-success-text\" : \"text-destructive-text\";\n // Stable, theme-agnostic polarity hook. High decoration reveals a non-color\n // polarity glyph from this attribute (decoration.css); chromatic themes ignore it\n // and use color. Issue #162.\n const polarity = good === null ? \"neutral\" : good ? \"good\" : \"bad\";\n const arrow = deltaDirection === \"up\" ? \"↑\" : deltaDirection === \"down\" ? \"↓\" : \"\";\n // Direction is conveyed visually by the arrow glyph + color; give AT a single\n // unambiguous name (\"up 12.4%, favorable\") since neither the glyph nor color is a\n // reliable signal (high decoration / high-contrast collapse the hue) — and good/bad\n // polarity is otherwise invisible to AT. See accessibility.md, #162.\n const directionLabel = deltaDirection === \"up\" ? \"up\" : deltaDirection === \"down\" ? \"down\" : \"\";\n const polarityLabel = good === null ? \"\" : good ? \", favorable\" : \", unfavorable\";\n // `sm` is label + value only: every secondary row is dropped (RM-072).\n const compact = size === \"sm\";\n const valueClassName = cn(metricValueVariants({ emphasis, size }));\n\n return (\n <Card ref={ref} className={cn(\"overflow-hidden\", className)} {...props}>\n <CardContent\n className={cn(metricContentVariants({ emphasis, size }))}\n {...(loading && announceLoading ? { role: \"status\", \"aria-live\": \"polite\" as const } : {})}\n >\n {loading && announceLoading ? (\n <span className=\"sr-only\">{t(\"ui.metricCard.loading\")}</span>\n ) : null}\n <div className=\"flex items-center justify-between\">\n {loading ? (\n <Skeleton className=\"h-4 w-24\" />\n ) : (\n /* `min-w-0` + `truncate`, not just the text utility: a flex child's\n default `min-width: auto` refuses to shrink below its content, so\n without it the label OVERFLOWS the row and `Card`'s own\n `overflow-hidden` hard-clips it — characters lost mid-word, no\n ellipsis, no title. Measured on a 230px pane: \"Awaiting approval\"\n rendered as \"Awaiting approva\". See interaction-guidelines.md\n § Content handling (\"flex children need `min-w-0`\"). `title` only\n when the label is a string — there is nothing to put in the\n attribute otherwise, and the ellipsis needs a way back to the\n full words. */\n <span\n className=\"min-w-0 truncate text-body font-medium text-muted-foreground\"\n title={typeof label === \"string\" ? label : undefined}\n >\n {label}\n </span>\n )}\n {/* `shrink-0`: the icon is a fixed 16px mark, so the LABEL is what\n gives way when the row runs out of width. */}\n {icon && !compact ? (\n <span className=\"shrink-0 text-muted-foreground [&_svg]:size-4\">{icon}</span>\n ) : null}\n </div>\n <div className=\"flex items-baseline gap-2\">\n {loading ? (\n <Skeleton className={emphasis === \"headline\" ? \"h-9 w-28\" : \"h-8 w-24\"} />\n ) : canCopyExact ? (\n <CopyableValue\n className={valueClassName}\n // Two tiles in one grid can compact to the same display (\"$1.2M\"),\n // and the visible label is a sibling node the button's name does\n // not include — so without this a screen-reader user tabbing the\n // grid hears the identical name twice. A non-string label has no\n // text to borrow; the default hint stands.\n hint={\n typeof label === \"string\" ? `${label}, ${t(\"ui.copyableValue.hint\")}` : undefined\n }\n value={String(value)}\n >\n {formattedValue}\n </CopyableValue>\n ) : (\n <span className={valueClassName}>{formattedValue}</span>\n )}\n {delta && !compact ? (\n loading ? (\n <Skeleton className=\"h-4 w-14\" />\n ) : (\n <span\n data-polarity={polarity}\n className={cn(\"text-meta tabular-nums\", deltaColor)}\n aria-label={\n directionLabel ? `${directionLabel} ${delta}${polarityLabel}` : undefined\n }\n >\n {arrow ? <span aria-hidden=\"true\">{arrow} </span> : null}\n {delta}\n </span>\n )\n ) : null}\n </div>\n {sparkline && !compact ? (\n <div className={metricSparklineVariants({ size })}>\n {loading ? <Skeleton className=\"h-8 w-full\" /> : sparkline}\n </div>\n ) : null}\n {description && !compact ? (\n loading ? (\n <Skeleton className=\"h-3 w-32\" />\n ) : (\n <p className=\"text-meta font-normal text-muted-foreground\">{description}</p>\n )\n ) : null}\n {visual && !compact ? (\n <div className=\"pt-1\">{loading ? <Skeleton className=\"h-8 w-full\" /> : visual}</div>\n ) : null}\n {evidence && !compact ? (\n <div className=\"pt-1 text-meta font-normal text-muted-foreground\">\n {loading ? <Skeleton className=\"h-3 w-24\" /> : evidence}\n </div>\n ) : null}\n </CardContent>\n </Card>\n );\n});\n"],"mappings":"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","names":["MetricCard"]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-HND6FAMX.js";
5
5
  import {
6
6
  useLocale
7
- } from "./chunk-EJQYE4MY.js";
7
+ } from "./chunk-OFFWEDKY.js";
8
8
  import {
9
9
  Button
10
10
  } from "./chunk-C5QBV5RE.js";
@@ -392,4 +392,4 @@ export {
392
392
  FileUploadList,
393
393
  FileUploadItem
394
394
  };
395
- //# sourceMappingURL=chunk-RYPK72YP.js.map
395
+ //# sourceMappingURL=chunk-CGY25FAG.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useLocale
4
- } from "./chunk-EJQYE4MY.js";
4
+ } from "./chunk-OFFWEDKY.js";
5
5
 
6
6
  // src/lib/streamdown-translations.ts
7
7
  import { useMemo } from "react";
@@ -51,4 +51,4 @@ export {
51
51
  STREAMDOWN_TRANSLATION_KEYS,
52
52
  useStreamdownTranslations
53
53
  };
54
- //# sourceMappingURL=chunk-HDS64Z5L.js.map
54
+ //# sourceMappingURL=chunk-DIL73NE3.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useLocale
4
- } from "./chunk-EJQYE4MY.js";
4
+ } from "./chunk-OFFWEDKY.js";
5
5
  import {
6
6
  cn
7
7
  } from "./chunk-FXWWDMMP.js";
@@ -108,4 +108,4 @@ export {
108
108
  BreadcrumbEllipsis,
109
109
  BreadcrumbItems
110
110
  };
111
- //# sourceMappingURL=chunk-VC4GKLZL.js.map
111
+ //# sourceMappingURL=chunk-EHN5ZAHP.js.map
@@ -15,7 +15,7 @@ import {
15
15
  } from "./chunk-HNLYRHAU.js";
16
16
  import {
17
17
  useLocale
18
- } from "./chunk-EJQYE4MY.js";
18
+ } from "./chunk-OFFWEDKY.js";
19
19
  import {
20
20
  Button
21
21
  } from "./chunk-C5QBV5RE.js";
@@ -293,4 +293,4 @@ var VirtualSelect = forwardRef(
293
293
  export {
294
294
  VirtualSelect
295
295
  };
296
- //# sourceMappingURL=chunk-HXQ4MDCH.js.map
296
+ //# sourceMappingURL=chunk-F6FF4EJN.js.map
@@ -11,7 +11,7 @@ import {
11
11
  CommandInput,
12
12
  CommandItem,
13
13
  CommandList
14
- } from "./chunk-CY5ISPFB.js";
14
+ } from "./chunk-RHZSAWAU.js";
15
15
  import {
16
16
  Popover,
17
17
  PopoverContent,
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-UPGIQXUY.js";
23
23
  import {
24
24
  useLocale
25
- } from "./chunk-EJQYE4MY.js";
25
+ } from "./chunk-OFFWEDKY.js";
26
26
  import {
27
27
  Button
28
28
  } from "./chunk-C5QBV5RE.js";
@@ -170,4 +170,4 @@ var ModelPicker = forwardRef(function ModelPicker2({
170
170
  export {
171
171
  ModelPicker
172
172
  };
173
- //# sourceMappingURL=chunk-V5QCJHDA.js.map
173
+ //# sourceMappingURL=chunk-FC2LHNJG.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-5C5W52O2.js";
5
5
  import {
6
6
  StatePanel
7
- } from "./chunk-Y33ZFTMR.js";
7
+ } from "./chunk-FWAFP76U.js";
8
8
  import {
9
9
  Input
10
10
  } from "./chunk-I3U52BDH.js";
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-HNLYRHAU.js";
19
19
  import {
20
20
  useLocale
21
- } from "./chunk-EJQYE4MY.js";
21
+ } from "./chunk-OFFWEDKY.js";
22
22
  import {
23
23
  cn
24
24
  } from "./chunk-FXWWDMMP.js";
@@ -155,4 +155,4 @@ function ShortcutGroupItem({ group, items, forceOpen }) {
155
155
  export {
156
156
  KeyboardShortcuts
157
157
  };
158
- //# sourceMappingURL=chunk-ZRMF4YAS.js.map
158
+ //# sourceMappingURL=chunk-FCVHZDP7.js.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-5MXQ5CP7.js";
6
6
  import {
7
7
  useLocale
8
- } from "./chunk-EJQYE4MY.js";
8
+ } from "./chunk-OFFWEDKY.js";
9
9
  import {
10
10
  cn
11
11
  } from "./chunk-FXWWDMMP.js";
@@ -243,4 +243,4 @@ export {
243
243
  DialogBody,
244
244
  DialogSection
245
245
  };
246
- //# sourceMappingURL=chunk-BYFRDLDL.js.map
246
+ //# sourceMappingURL=chunk-FKDI2T7X.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useLocale
4
- } from "./chunk-EJQYE4MY.js";
4
+ } from "./chunk-OFFWEDKY.js";
5
5
  import {
6
6
  cn
7
7
  } from "./chunk-FXWWDMMP.js";
@@ -634,4 +634,4 @@ export {
634
634
  laneColor,
635
635
  RevisionTimeline
636
636
  };
637
- //# sourceMappingURL=chunk-GWHO5ACE.js.map
637
+ //# sourceMappingURL=chunk-FNRVVVXX.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-CEQ3YKHR.js";
5
5
  import {
6
6
  useLocale
7
- } from "./chunk-EJQYE4MY.js";
7
+ } from "./chunk-OFFWEDKY.js";
8
8
  import {
9
9
  cn
10
10
  } from "./chunk-FXWWDMMP.js";
@@ -160,4 +160,4 @@ export {
160
160
  statePanelVariants,
161
161
  StatePanel
162
162
  };
163
- //# sourceMappingURL=chunk-Y33ZFTMR.js.map
163
+ //# sourceMappingURL=chunk-FWAFP76U.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  useLocale
4
- } from "./chunk-EJQYE4MY.js";
4
+ } from "./chunk-OFFWEDKY.js";
5
5
  import {
6
6
  Button
7
7
  } from "./chunk-C5QBV5RE.js";
@@ -233,4 +233,4 @@ export {
233
233
  CarouselPrevious,
234
234
  CarouselNext
235
235
  };
236
- //# sourceMappingURL=chunk-ZALGMUSW.js.map
236
+ //# sourceMappingURL=chunk-HUXLE3K3.js.map
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-PGKQZBLZ.js";
14
14
  import {
15
15
  useLocale
16
- } from "./chunk-EJQYE4MY.js";
16
+ } from "./chunk-OFFWEDKY.js";
17
17
  import {
18
18
  Button
19
19
  } from "./chunk-C5QBV5RE.js";
@@ -82,4 +82,4 @@ function NavNotifications({
82
82
  export {
83
83
  NavNotifications
84
84
  };
85
- //# sourceMappingURL=chunk-NRPZ3BH4.js.map
85
+ //# sourceMappingURL=chunk-I3LBIBVN.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-55BM2IU2.js";
7
7
  import {
8
8
  useLocale
9
- } from "./chunk-EJQYE4MY.js";
9
+ } from "./chunk-OFFWEDKY.js";
10
10
 
11
11
  // src/components/number-input/number-input.tsx
12
12
  import { forwardRef, useCallback, useRef, useState } from "react";
@@ -194,4 +194,4 @@ var NumberInput = forwardRef(function NumberInput2({
194
194
  export {
195
195
  NumberInput
196
196
  };
197
- //# sourceMappingURL=chunk-GTDCC4YX.js.map
197
+ //# sourceMappingURL=chunk-IV6OYZTL.js.map
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-FZEG2R3E.js";
23
23
  import {
24
24
  useLocale
25
- } from "./chunk-EJQYE4MY.js";
25
+ } from "./chunk-OFFWEDKY.js";
26
26
  import {
27
27
  cn
28
28
  } from "./chunk-FXWWDMMP.js";
@@ -723,4 +723,4 @@ export {
723
723
  MentionInputItem,
724
724
  MentionInputEmpty
725
725
  };
726
- //# sourceMappingURL=chunk-4DWIMWR5.js.map
726
+ //# sourceMappingURL=chunk-JQIXRCLG.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  Tree
4
- } from "./chunk-MDQYRES4.js";
4
+ } from "./chunk-5KNLME6F.js";
5
5
  import {
6
6
  Popover,
7
7
  PopoverContent,
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-HNLYRHAU.js";
13
13
  import {
14
14
  useLocale
15
- } from "./chunk-EJQYE4MY.js";
15
+ } from "./chunk-OFFWEDKY.js";
16
16
  import {
17
17
  Button
18
18
  } from "./chunk-C5QBV5RE.js";
@@ -115,4 +115,4 @@ var TreeSelect = forwardRef(function TreeSelect2({ nodes, value, defaultValue, o
115
115
  export {
116
116
  TreeSelect
117
117
  };
118
- //# sourceMappingURL=chunk-M5WPZXBA.js.map
118
+ //# sourceMappingURL=chunk-JU4KW7JN.js.map
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-HNLYRHAU.js";
10
10
  import {
11
11
  useLocale
12
- } from "./chunk-EJQYE4MY.js";
12
+ } from "./chunk-OFFWEDKY.js";
13
13
  import {
14
14
  cn
15
15
  } from "./chunk-FXWWDMMP.js";
@@ -84,4 +84,4 @@ function AdvancedGroup({
84
84
  export {
85
85
  AdvancedGroup
86
86
  };
87
- //# sourceMappingURL=chunk-PSXUEWUS.js.map
87
+ //# sourceMappingURL=chunk-LVY7B5PD.js.map
@@ -18,10 +18,10 @@ import {
18
18
  SidebarMenuButton,
19
19
  SidebarMenuItem,
20
20
  useSidebar
21
- } from "./chunk-HWVU636Q.js";
21
+ } from "./chunk-A3JF66ZC.js";
22
22
  import {
23
23
  useLocale
24
- } from "./chunk-EJQYE4MY.js";
24
+ } from "./chunk-OFFWEDKY.js";
25
25
 
26
26
  // src/components/nav-user/nav-user.tsx
27
27
  import { ChevronsUpDown, LogOut, Settings } from "lucide-react";
@@ -94,4 +94,4 @@ function NavUser({ user, onSettings, settingsHref, onSignOut, children }) {
94
94
  export {
95
95
  NavUser
96
96
  };
97
- //# sourceMappingURL=chunk-FLCQKC64.js.map
97
+ //# sourceMappingURL=chunk-MIWFBH5S.js.map
@@ -385,6 +385,13 @@ var DEFAULT_MESSAGES = {
385
385
  "charts.gantt.unitMinute": "Minute",
386
386
  "charts.gantt.unitSecond": "Second",
387
387
  "charts.gantt.unitMillisecond": "Millisecond",
388
+ // Gantt zoom controls (the scale buttons are presets; these move the density freely).
389
+ "charts.gantt.zoom": "Zoom",
390
+ "charts.gantt.zoomIn": "Zoom in",
391
+ "charts.gantt.zoomOut": "Zoom out",
392
+ "charts.gantt.zoomToFit": "Fit to width",
393
+ "charts.gantt.scrollToToday": "Today",
394
+ "charts.gantt.scrollToTask": "Scroll to {name}",
388
395
  // BulletChart (Few's bullet graph, RM-061). The SVG is aria-hidden, so this
389
396
  // sentence — built from these fragments — is the ONLY thing AT reads: it
390
397
  // states the value, its relationship to the target, and which qualitative
@@ -428,6 +435,44 @@ var DEFAULT_MESSAGES = {
428
435
  "charts.dashboard.edit.clampedEdge": "At the {edge} edge. ({x},{y}) {w} \xD7 {h}",
429
436
  "charts.dashboard.edit.moveCancelled": "Move cancelled. Restored to column {x}, row {y}",
430
437
  "charts.dashboard.edit.resizeCancelled": "Resize cancelled. Restored to column {x}, row {y}, size {w} by {h}",
438
+ // dashboard pack rebuild: locked tiles, the empty sheet, the edit-mode tile chrome.
439
+ "charts.dashboard.edit.locked": "{title} is locked",
440
+ "charts.dashboard.edit.lock": "Lock position and size",
441
+ "charts.dashboard.edit.unlock": "Unlock",
442
+ "charts.dashboard.edit.emptyTitle": "This sheet is empty",
443
+ "charts.dashboard.edit.emptyDescription": "Drag a tile from the asset panel onto the sheet, or press Add in the toolbar.",
444
+ "charts.dashboard.edit.emptyViewTitle": "Nothing to show yet",
445
+ "charts.dashboard.edit.emptyViewDescription": "Switch to Edit to add the first tile.",
446
+ "charts.dashboard.edit.tileDuplicate": "Duplicate {title}",
447
+ "charts.dashboard.edit.tileDelete": "Delete {title}",
448
+ "charts.dashboard.edit.tileProperties": "Properties of {title}",
449
+ "charts.dashboard.edit.tileMore": "More actions for {title}",
450
+ "charts.dashboard.toolbar.assets": "Assets",
451
+ "charts.dashboard.toolbar.properties": "Properties",
452
+ "charts.dashboard.toolbar.layout": "Layout",
453
+ "charts.dashboard.toolbar.showGrid": "Show grid",
454
+ "charts.dashboard.toolbar.tidyUp": "Tidy up",
455
+ "charts.dashboard.toolbar.tidyUpDescription": "Reflow every tile into a clean reading order",
456
+ "charts.dashboard.toolbar.selectAll": "Select all",
457
+ "charts.dashboard.toolbar.deleteSelection": "Delete selection",
458
+ "charts.dashboard.toolbar.duplicateSelection": "Duplicate selection",
459
+ "charts.dashboard.toolbar.editSheet": "Edit sheet",
460
+ "charts.dashboard.toolbar.done": "Done",
461
+ "charts.dashboard.toolbar.more": "More",
462
+ "charts.dashboard.toolbar.saved": "All changes saved",
463
+ "charts.dashboard.toolbar.layoutFor": "Layout for",
464
+ "charts.dashboard.toolbar.layoutBase": "Desktop",
465
+ "charts.dashboard.toolbar.layoutMd": "Tablet",
466
+ "charts.dashboard.toolbar.layoutSm": "Phone",
467
+ "charts.dashboard.toolbar.gridDensityNow": "{columns} \xD7 {rows} cells",
468
+ "charts.dashboard.toolbar.gridDensityFlow": "{columns} columns \xB7 {rowHeight} px rows",
469
+ "charts.dashboard.properties.layout": "Layout",
470
+ "charts.dashboard.properties.column": "Column",
471
+ "charts.dashboard.properties.row": "Row",
472
+ "charts.dashboard.properties.width": "Width",
473
+ "charts.dashboard.properties.height": "Height",
474
+ "charts.dashboard.properties.lockedDescription": "A locked tile keeps its cells when others move.",
475
+ "charts.dashboard.properties.noRoom": "No room for that size here",
431
476
  // dashboard toolbar — RM-079: mode switch, undo/redo, grid settings, save/discard, shortcuts.
432
477
  "charts.dashboard.toolbar.ariaLabel": "Dashboard toolbar",
433
478
  "charts.dashboard.toolbar.viewMode": "View",
@@ -1318,4 +1363,4 @@ var DEFAULT_MESSAGES = {
1318
1363
  export {
1319
1364
  DEFAULT_MESSAGES
1320
1365
  };
1321
- //# sourceMappingURL=chunk-6TJVJPNU.js.map
1366
+ //# sourceMappingURL=chunk-O6AIFSTX.js.map