@vamos-ui/react 0.0.0-stage → 0.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 (704) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -2
  3. package/dist/blocks/block-heading.d.ts +29 -0
  4. package/dist/blocks/block-heading.js +39 -0
  5. package/dist/blocks/block-image.d.ts +52 -0
  6. package/dist/blocks/block-image.js +48 -0
  7. package/dist/blocks/block-link.d.ts +30 -0
  8. package/dist/blocks/block-link.js +36 -0
  9. package/dist/blocks/create-blocks.d.ts +54 -0
  10. package/dist/blocks/create-blocks.js +52 -0
  11. package/dist/blocks/index.d.ts +55 -0
  12. package/dist/blocks/index.js +59 -0
  13. package/dist/blocks/json-ld.d.ts +18 -0
  14. package/dist/blocks/json-ld.js +44 -0
  15. package/dist/blocks/labels.d.ts +20 -0
  16. package/dist/blocks/labels.js +43 -0
  17. package/dist/blocks/rich-text.d.ts +36 -0
  18. package/dist/blocks/rich-text.js +106 -0
  19. package/dist/blocks/schema/define-block.d.ts +151 -0
  20. package/dist/blocks/schema/define-block.js +120 -0
  21. package/dist/blocks/schema/emphasis.d.ts +17 -0
  22. package/dist/blocks/schema/emphasis.js +69 -0
  23. package/dist/blocks/schema/fields.d.ts +497 -0
  24. package/dist/blocks/schema/fields.js +240 -0
  25. package/dist/blocks/schema/icons.d.ts +2 -0
  26. package/dist/blocks/schema/icons.js +26 -0
  27. package/dist/blocks/schema/index.d.ts +18 -0
  28. package/dist/blocks/schema/index.js +21 -0
  29. package/dist/blocks/schema/lint-types.d.ts +16 -0
  30. package/dist/blocks/schema/lint-types.js +2 -0
  31. package/dist/blocks/schema/lint.d.ts +32 -0
  32. package/dist/blocks/schema/lint.js +164 -0
  33. package/dist/blocks/schema/localize.d.ts +20 -0
  34. package/dist/blocks/schema/localize.js +29 -0
  35. package/dist/blocks/schema/localized.d.ts +25 -0
  36. package/dist/blocks/schema/localized.js +53 -0
  37. package/dist/blocks/schema/migrate.d.ts +24 -0
  38. package/dist/blocks/schema/migrate.js +75 -0
  39. package/dist/blocks/schema/nodes.d.ts +196 -0
  40. package/dist/blocks/schema/nodes.js +78 -0
  41. package/dist/blocks/schema/rich-doc-schema.d.ts +32 -0
  42. package/dist/blocks/schema/rich-doc-schema.js +66 -0
  43. package/dist/blocks/schema/rich-doc.d.ts +90 -0
  44. package/dist/blocks/schema/rich-doc.js +62 -0
  45. package/dist/blocks/schema/safety.d.ts +20 -0
  46. package/dist/blocks/schema/safety.js +49 -0
  47. package/dist/blocks/schema/types.d.ts +172 -0
  48. package/dist/blocks/schema/types.js +3 -0
  49. package/dist/blocks/schema/validate.d.ts +17 -0
  50. package/dist/blocks/schema/validate.js +32 -0
  51. package/dist/blocks/schema/walk.d.ts +22 -0
  52. package/dist/blocks/schema/walk.js +60 -0
  53. package/dist/blocks/section-header.d.ts +38 -0
  54. package/dist/blocks/section-header.js +22 -0
  55. package/dist/blocks/section.d.ts +59 -0
  56. package/dist/blocks/section.js +66 -0
  57. package/dist/blocks/site/_kit-1.d.ts +101 -0
  58. package/dist/blocks/site/_kit-1.js +137 -0
  59. package/dist/blocks/site/_site-icon-1.d.ts +6 -0
  60. package/dist/blocks/site/_site-icon-1.js +15 -0
  61. package/dist/blocks/site/announcement-bar.d.ts +42 -0
  62. package/dist/blocks/site/announcement-bar.js +38 -0
  63. package/dist/blocks/site/announcement-dismiss.d.ts +18 -0
  64. package/dist/blocks/site/announcement-dismiss.js +28 -0
  65. package/dist/blocks/site/article-layout.d.ts +65 -0
  66. package/dist/blocks/site/article-layout.js +88 -0
  67. package/dist/blocks/site/blog-list.d.ts +79 -0
  68. package/dist/blocks/site/blog-list.js +78 -0
  69. package/dist/blocks/site/comparison-table.d.ts +54 -0
  70. package/dist/blocks/site/comparison-table.js +38 -0
  71. package/dist/blocks/site/consent-banner.d.ts +52 -0
  72. package/dist/blocks/site/consent-banner.js +33 -0
  73. package/dist/blocks/site/contact-dock.d.ts +52 -0
  74. package/dist/blocks/site/contact-dock.js +55 -0
  75. package/dist/blocks/site/contact-form.d.ts +60 -0
  76. package/dist/blocks/site/contact-form.js +45 -0
  77. package/dist/blocks/site/cta-booking.d.ts +43 -0
  78. package/dist/blocks/site/cta-booking.js +69 -0
  79. package/dist/blocks/site/cta.d.ts +74 -0
  80. package/dist/blocks/site/cta.js +113 -0
  81. package/dist/blocks/site/embed-facade.d.ts +20 -0
  82. package/dist/blocks/site/embed-facade.js +21 -0
  83. package/dist/blocks/site/faq.d.ts +48 -0
  84. package/dist/blocks/site/faq.js +52 -0
  85. package/dist/blocks/site/feature-grid.d.ts +46 -0
  86. package/dist/blocks/site/feature-grid.js +50 -0
  87. package/dist/blocks/site/feature-tabs.d.ts +22 -0
  88. package/dist/blocks/site/feature-tabs.js +11 -0
  89. package/dist/blocks/site/footer.d.ts +68 -0
  90. package/dist/blocks/site/footer.js +61 -0
  91. package/dist/blocks/site/gallery-section.d.ts +42 -0
  92. package/dist/blocks/site/gallery-section.js +48 -0
  93. package/dist/blocks/site/hero-video.d.ts +15 -0
  94. package/dist/blocks/site/hero-video.js +31 -0
  95. package/dist/blocks/site/hero.d.ts +64 -0
  96. package/dist/blocks/site/hero.js +73 -0
  97. package/dist/blocks/site/logo-strip.d.ts +44 -0
  98. package/dist/blocks/site/logo-strip.js +27 -0
  99. package/dist/blocks/site/map-hours.d.ts +83 -0
  100. package/dist/blocks/site/map-hours.js +125 -0
  101. package/dist/blocks/site/media-text.d.ts +45 -0
  102. package/dist/blocks/site/media-text.js +56 -0
  103. package/dist/blocks/site/menu-list.d.ts +74 -0
  104. package/dist/blocks/site/menu-list.js +84 -0
  105. package/dist/blocks/site/navbar-submenu.d.ts +18 -0
  106. package/dist/blocks/site/navbar-submenu.js +51 -0
  107. package/dist/blocks/site/navbar.d.ts +67 -0
  108. package/dist/blocks/site/navbar.js +64 -0
  109. package/dist/blocks/site/not-found.d.ts +40 -0
  110. package/dist/blocks/site/not-found.js +38 -0
  111. package/dist/blocks/site/page-intro.d.ts +46 -0
  112. package/dist/blocks/site/page-intro.js +44 -0
  113. package/dist/blocks/site/pricing-table.d.ts +67 -0
  114. package/dist/blocks/site/pricing-table.js +83 -0
  115. package/dist/blocks/site/process.d.ts +36 -0
  116. package/dist/blocks/site/process.js +42 -0
  117. package/dist/blocks/site/registry-1.d.ts +720 -0
  118. package/dist/blocks/site/registry-1.js +783 -0
  119. package/dist/blocks/site/registry-2.d.ts +914 -0
  120. package/dist/blocks/site/registry-2.js +563 -0
  121. package/dist/blocks/site/rich-text-section.d.ts +34 -0
  122. package/dist/blocks/site/rich-text-section.js +32 -0
  123. package/dist/blocks/site/shared/brand-icons.d.ts +21 -0
  124. package/dist/blocks/site/shared/brand-icons.js +56 -0
  125. package/dist/blocks/site/shared/consent-gate.d.ts +41 -0
  126. package/dist/blocks/site/shared/consent-gate.js +43 -0
  127. package/dist/blocks/site/shared/consent-island.d.ts +38 -0
  128. package/dist/blocks/site/shared/consent-island.js +63 -0
  129. package/dist/blocks/site/shared/consent.d.ts +49 -0
  130. package/dist/blocks/site/shared/consent.js +130 -0
  131. package/dist/blocks/site/shared/contact-form-island.d.ts +41 -0
  132. package/dist/blocks/site/shared/contact-form-island.js +100 -0
  133. package/dist/blocks/site/shared/copy-link.d.ts +10 -0
  134. package/dist/blocks/site/shared/copy-link.js +25 -0
  135. package/dist/blocks/site/shared/dock-avoid.d.ts +15 -0
  136. package/dist/blocks/site/shared/dock-avoid.js +107 -0
  137. package/dist/blocks/site/shared/dock-hours.d.ts +13 -0
  138. package/dist/blocks/site/shared/dock-hours.js +25 -0
  139. package/dist/blocks/site/shared/gallery-lightbox.d.ts +12 -0
  140. package/dist/blocks/site/shared/gallery-lightbox.js +10 -0
  141. package/dist/blocks/site/shared/island-keys.d.ts +10 -0
  142. package/dist/blocks/site/shared/island-keys.js +44 -0
  143. package/dist/blocks/site/shared/kit-2.d.ts +55 -0
  144. package/dist/blocks/site/shared/kit-2.js +84 -0
  145. package/dist/blocks/site/shared/labels-2.d.ts +209 -0
  146. package/dist/blocks/site/shared/labels-2.js +427 -0
  147. package/dist/blocks/site/shared/open-now.d.ts +22 -0
  148. package/dist/blocks/site/shared/open-now.js +27 -0
  149. package/dist/blocks/site/shared/opening-hours.d.ts +117 -0
  150. package/dist/blocks/site/shared/opening-hours.js +245 -0
  151. package/dist/blocks/site/shared/site-accent.d.ts +48 -0
  152. package/dist/blocks/site/shared/site-accent.js +249 -0
  153. package/dist/blocks/site/shared/site-form.d.ts +79 -0
  154. package/dist/blocks/site/shared/site-form.js +111 -0
  155. package/dist/blocks/site/shared/site-routing.d.ts +54 -0
  156. package/dist/blocks/site/shared/site-routing.js +86 -0
  157. package/dist/blocks/site/shared/testimonials-carousel.d.ts +17 -0
  158. package/dist/blocks/site/shared/testimonials-carousel.js +64 -0
  159. package/dist/blocks/site/site-shell.d.ts +108 -0
  160. package/dist/blocks/site/site-shell.js +254 -0
  161. package/dist/blocks/site/stats-band.d.ts +42 -0
  162. package/dist/blocks/site/stats-band.js +45 -0
  163. package/dist/blocks/site/team.d.ts +44 -0
  164. package/dist/blocks/site/team.js +48 -0
  165. package/dist/blocks/site/testimonials.d.ts +68 -0
  166. package/dist/blocks/site/testimonials.js +66 -0
  167. package/dist/blocks/types.d.ts +63 -0
  168. package/dist/blocks/types.js +2 -0
  169. package/dist/business/approval-flow.d.ts +152 -0
  170. package/dist/business/approval-flow.js +221 -0
  171. package/dist/business/export-core.d.ts +55 -0
  172. package/dist/business/export-core.js +101 -0
  173. package/dist/business/export.d.ts +148 -0
  174. package/dist/business/export.js +264 -0
  175. package/dist/business/import-core.d.ts +104 -0
  176. package/dist/business/import-core.js +281 -0
  177. package/dist/business/import-wizard.d.ts +186 -0
  178. package/dist/business/import-wizard.js +401 -0
  179. package/dist/business/index.d.ts +12 -0
  180. package/dist/business/index.js +22 -0
  181. package/dist/business/line-items-core.d.ts +129 -0
  182. package/dist/business/line-items-core.js +183 -0
  183. package/dist/business/line-items.d.ts +119 -0
  184. package/dist/business/line-items.js +299 -0
  185. package/dist/business/multi-step-form.d.ts +131 -0
  186. package/dist/business/multi-step-form.js +337 -0
  187. package/dist/business/permission-core.d.ts +59 -0
  188. package/dist/business/permission-core.js +99 -0
  189. package/dist/business/permission-matrix.d.ts +158 -0
  190. package/dist/business/permission-matrix.js +341 -0
  191. package/dist/business/setup-checklist.d.ts +80 -0
  192. package/dist/business/setup-checklist.js +92 -0
  193. package/dist/business/signer-status.d.ts +53 -0
  194. package/dist/business/signer-status.js +76 -0
  195. package/dist/charts/area-chart.d.ts +35 -0
  196. package/dist/charts/area-chart.js +33 -0
  197. package/dist/charts/bar-chart.d.ts +27 -0
  198. package/dist/charts/bar-chart.js +46 -0
  199. package/dist/charts/bar-list.d.ts +47 -0
  200. package/dist/charts/bar-list.js +60 -0
  201. package/dist/charts/chart-shell.d.ts +173 -0
  202. package/dist/charts/chart-shell.js +205 -0
  203. package/dist/charts/chart.d.ts +73 -0
  204. package/dist/charts/chart.js +106 -0
  205. package/dist/charts/combo-chart.d.ts +29 -0
  206. package/dist/charts/combo-chart.js +47 -0
  207. package/dist/charts/donut-chart.d.ts +33 -0
  208. package/dist/charts/donut-chart.js +113 -0
  209. package/dist/charts/funnel.d.ts +51 -0
  210. package/dist/charts/funnel.js +69 -0
  211. package/dist/charts/gauge.d.ts +62 -0
  212. package/dist/charts/gauge.js +104 -0
  213. package/dist/charts/heatmap.d.ts +81 -0
  214. package/dist/charts/heatmap.js +338 -0
  215. package/dist/charts/index.d.ts +12 -0
  216. package/dist/charts/index.js +14 -0
  217. package/dist/charts/line-chart.d.ts +21 -0
  218. package/dist/charts/line-chart.js +36 -0
  219. package/dist/charts/test-utils.d.ts +2 -0
  220. package/dist/charts/test-utils.js +38 -0
  221. package/dist/charts/utils.d.ts +130 -0
  222. package/dist/charts/utils.js +262 -0
  223. package/dist/components/_qr-core.d.ts +26 -0
  224. package/dist/components/_qr-core.js +376 -0
  225. package/dist/components/accordion.d.ts +47 -0
  226. package/dist/components/accordion.js +70 -0
  227. package/dist/components/activity-timeline.d.ts +149 -0
  228. package/dist/components/activity-timeline.js +122 -0
  229. package/dist/components/address-field.d.ts +116 -0
  230. package/dist/components/address-field.js +219 -0
  231. package/dist/components/alert-dialog.d.ts +99 -0
  232. package/dist/components/alert-dialog.js +192 -0
  233. package/dist/components/alert.d.ts +42 -0
  234. package/dist/components/alert.js +82 -0
  235. package/dist/components/app-shell.d.ts +159 -0
  236. package/dist/components/app-shell.js +289 -0
  237. package/dist/components/attachment-list.d.ts +96 -0
  238. package/dist/components/attachment-list.js +196 -0
  239. package/dist/components/audit-log.d.ts +150 -0
  240. package/dist/components/audit-log.js +205 -0
  241. package/dist/components/avatar.d.ts +87 -0
  242. package/dist/components/avatar.js +126 -0
  243. package/dist/components/backup-codes.d.ts +42 -0
  244. package/dist/components/backup-codes.js +67 -0
  245. package/dist/components/badge.d.ts +41 -0
  246. package/dist/components/badge.js +68 -0
  247. package/dist/components/breadcrumb.d.ts +78 -0
  248. package/dist/components/breadcrumb.js +106 -0
  249. package/dist/components/button-group.d.ts +52 -0
  250. package/dist/components/button-group.js +77 -0
  251. package/dist/components/button.d.ts +58 -0
  252. package/dist/components/button.js +107 -0
  253. package/dist/components/calendar.d.ts +240 -0
  254. package/dist/components/calendar.js +483 -0
  255. package/dist/components/card.d.ts +66 -0
  256. package/dist/components/card.js +76 -0
  257. package/dist/components/carousel.d.ts +170 -0
  258. package/dist/components/carousel.js +348 -0
  259. package/dist/components/checkbox.d.ts +78 -0
  260. package/dist/components/checkbox.js +138 -0
  261. package/dist/components/color-picker.d.ts +112 -0
  262. package/dist/components/color-picker.js +235 -0
  263. package/dist/components/combobox.d.ts +136 -0
  264. package/dist/components/combobox.js +294 -0
  265. package/dist/components/command.d.ts +281 -0
  266. package/dist/components/command.js +498 -0
  267. package/dist/components/comment-thread.d.ts +252 -0
  268. package/dist/components/comment-thread.js +449 -0
  269. package/dist/components/context-menu.d.ts +77 -0
  270. package/dist/components/context-menu.js +82 -0
  271. package/dist/components/currency-input.d.ts +43 -0
  272. package/dist/components/currency-input.js +85 -0
  273. package/dist/components/date-picker.d.ts +141 -0
  274. package/dist/components/date-picker.js +241 -0
  275. package/dist/components/date-range-picker.d.ts +91 -0
  276. package/dist/components/date-range-picker.js +251 -0
  277. package/dist/components/description-list.d.ts +92 -0
  278. package/dist/components/description-list.js +42 -0
  279. package/dist/components/dialog.d.ts +139 -0
  280. package/dist/components/dialog.js +185 -0
  281. package/dist/components/dropdown-menu.d.ts +100 -0
  282. package/dist/components/dropdown-menu.js +102 -0
  283. package/dist/components/editor-layout.d.ts +166 -0
  284. package/dist/components/editor-layout.js +237 -0
  285. package/dist/components/empty-state.d.ts +49 -0
  286. package/dist/components/empty-state.js +68 -0
  287. package/dist/components/entity-card.d.ts +83 -0
  288. package/dist/components/entity-card.js +92 -0
  289. package/dist/components/file-upload.d.ts +256 -0
  290. package/dist/components/file-upload.js +490 -0
  291. package/dist/components/formatted-input.d.ts +177 -0
  292. package/dist/components/formatted-input.js +399 -0
  293. package/dist/components/hierarchy-chart.d.ts +190 -0
  294. package/dist/components/hierarchy-chart.js +890 -0
  295. package/dist/components/hover-card.d.ts +21 -0
  296. package/dist/components/hover-card.js +32 -0
  297. package/dist/components/iban-input.d.ts +38 -0
  298. package/dist/components/iban-input.js +112 -0
  299. package/dist/components/id-input.d.ts +65 -0
  300. package/dist/components/id-input.js +130 -0
  301. package/dist/components/image.d.ts +130 -0
  302. package/dist/components/image.js +168 -0
  303. package/dist/components/input-otp.d.ts +62 -0
  304. package/dist/components/input-otp.js +73 -0
  305. package/dist/components/input.d.ts +141 -0
  306. package/dist/components/input.js +187 -0
  307. package/dist/components/item.d.ts +96 -0
  308. package/dist/components/item.js +113 -0
  309. package/dist/components/kbd.d.ts +64 -0
  310. package/dist/components/kbd.js +119 -0
  311. package/dist/components/list-layout.d.ts +144 -0
  312. package/dist/components/list-layout.js +210 -0
  313. package/dist/components/native-select.d.ts +33 -0
  314. package/dist/components/native-select.js +48 -0
  315. package/dist/components/navigation-menu.d.ts +127 -0
  316. package/dist/components/navigation-menu.js +129 -0
  317. package/dist/components/notification-center.d.ts +164 -0
  318. package/dist/components/notification-center.js +399 -0
  319. package/dist/components/page-header.d.ts +60 -0
  320. package/dist/components/page-header.js +60 -0
  321. package/dist/components/pagination.d.ts +121 -0
  322. package/dist/components/pagination.js +174 -0
  323. package/dist/components/phone-input.d.ts +49 -0
  324. package/dist/components/phone-input.js +266 -0
  325. package/dist/components/pin-map.d.ts +58 -0
  326. package/dist/components/pin-map.js +167 -0
  327. package/dist/components/popover.d.ts +38 -0
  328. package/dist/components/popover.js +69 -0
  329. package/dist/components/progress.d.ts +79 -0
  330. package/dist/components/progress.js +97 -0
  331. package/dist/components/qr-code.d.ts +36 -0
  332. package/dist/components/qr-code.js +27 -0
  333. package/dist/components/radio-group.d.ts +43 -0
  334. package/dist/components/radio-group.js +81 -0
  335. package/dist/components/record-detail-layout.d.ts +167 -0
  336. package/dist/components/record-detail-layout.js +233 -0
  337. package/dist/components/record-picker.d.ts +199 -0
  338. package/dist/components/record-picker.js +650 -0
  339. package/dist/components/resizable.d.ts +50 -0
  340. package/dist/components/resizable.js +88 -0
  341. package/dist/components/scroll-area.d.ts +40 -0
  342. package/dist/components/scroll-area.js +56 -0
  343. package/dist/components/select.d.ts +126 -0
  344. package/dist/components/select.js +137 -0
  345. package/dist/components/separator.d.ts +31 -0
  346. package/dist/components/separator.js +41 -0
  347. package/dist/components/settings-layout.d.ts +134 -0
  348. package/dist/components/settings-layout.js +180 -0
  349. package/dist/components/sheet.d.ts +103 -0
  350. package/dist/components/sheet.js +165 -0
  351. package/dist/components/sidebar.d.ts +171 -0
  352. package/dist/components/sidebar.js +421 -0
  353. package/dist/components/signature-pad.d.ts +85 -0
  354. package/dist/components/signature-pad.js +283 -0
  355. package/dist/components/skeleton.d.ts +64 -0
  356. package/dist/components/skeleton.js +53 -0
  357. package/dist/components/sla-timer.d.ts +75 -0
  358. package/dist/components/sla-timer.js +142 -0
  359. package/dist/components/slider.d.ts +57 -0
  360. package/dist/components/slider.js +133 -0
  361. package/dist/components/slug-input.d.ts +69 -0
  362. package/dist/components/slug-input.js +201 -0
  363. package/dist/components/sparkline.d.ts +54 -0
  364. package/dist/components/sparkline.js +122 -0
  365. package/dist/components/spinner.d.ts +34 -0
  366. package/dist/components/spinner.js +34 -0
  367. package/dist/components/stat.d.ts +135 -0
  368. package/dist/components/stat.js +130 -0
  369. package/dist/components/status-picker.d.ts +107 -0
  370. package/dist/components/status-picker.js +175 -0
  371. package/dist/components/stepper.d.ts +86 -0
  372. package/dist/components/stepper.js +103 -0
  373. package/dist/components/switch.d.ts +34 -0
  374. package/dist/components/switch.js +70 -0
  375. package/dist/components/table.d.ts +101 -0
  376. package/dist/components/table.js +72 -0
  377. package/dist/components/tabs.d.ts +103 -0
  378. package/dist/components/tabs.js +173 -0
  379. package/dist/components/tag-input.d.ts +77 -0
  380. package/dist/components/tag-input.js +305 -0
  381. package/dist/components/task-list.d.ts +89 -0
  382. package/dist/components/task-list.js +238 -0
  383. package/dist/components/time-picker.d.ts +119 -0
  384. package/dist/components/time-picker.js +399 -0
  385. package/dist/components/toast.d.ts +87 -0
  386. package/dist/components/toast.js +142 -0
  387. package/dist/components/toggle.d.ts +77 -0
  388. package/dist/components/toggle.js +109 -0
  389. package/dist/components/tooltip.d.ts +69 -0
  390. package/dist/components/tooltip.js +105 -0
  391. package/dist/components/top-bar.d.ts +87 -0
  392. package/dist/components/top-bar.js +99 -0
  393. package/dist/components/tour.d.ts +60 -0
  394. package/dist/components/tour.js +139 -0
  395. package/dist/components/tree-select.d.ts +89 -0
  396. package/dist/components/tree-select.js +243 -0
  397. package/dist/components/tree-view.d.ts +109 -0
  398. package/dist/components/tree-view.js +170 -0
  399. package/dist/components/typography.d.ts +107 -0
  400. package/dist/components/typography.js +128 -0
  401. package/dist/components/user-picker.d.ts +89 -0
  402. package/dist/components/user-picker.js +162 -0
  403. package/dist/components/version-history.d.ts +191 -0
  404. package/dist/components/version-history.js +431 -0
  405. package/dist/data-table/csv.d.ts +27 -0
  406. package/dist/data-table/csv.js +68 -0
  407. package/dist/data-table/data-table.d.ts +423 -0
  408. package/dist/data-table/data-table.js +1259 -0
  409. package/dist/data-table/filter-bar.d.ts +146 -0
  410. package/dist/data-table/filter-bar.js +569 -0
  411. package/dist/data-table/filter-fns.d.ts +65 -0
  412. package/dist/data-table/filter-fns.js +382 -0
  413. package/dist/data-table/index.d.ts +8 -0
  414. package/dist/data-table/index.js +9 -0
  415. package/dist/data-table/saved-views.d.ts +100 -0
  416. package/dist/data-table/saved-views.js +251 -0
  417. package/dist/data-table/types.d.ts +168 -0
  418. package/dist/data-table/types.js +87 -0
  419. package/dist/data-table/url-state.d.ts +94 -0
  420. package/dist/data-table/url-state.js +303 -0
  421. package/dist/data-table/view-state.d.ts +16 -0
  422. package/dist/data-table/view-state.js +81 -0
  423. package/dist/editor/_test-setup.d.ts +1 -0
  424. package/dist/editor/_test-setup.js +33 -0
  425. package/dist/editor/block-editor.d.ts +137 -0
  426. package/dist/editor/block-editor.js +280 -0
  427. package/dist/editor/commands.d.ts +31 -0
  428. package/dist/editor/commands.js +150 -0
  429. package/dist/editor/context.d.ts +108 -0
  430. package/dist/editor/context.js +30 -0
  431. package/dist/editor/convert.d.ts +66 -0
  432. package/dist/editor/convert.js +567 -0
  433. package/dist/editor/drag-handle.d.ts +10 -0
  434. package/dist/editor/drag-handle.js +69 -0
  435. package/dist/editor/extensions.d.ts +34 -0
  436. package/dist/editor/extensions.js +239 -0
  437. package/dist/editor/index.d.ts +14 -0
  438. package/dist/editor/index.js +17 -0
  439. package/dist/editor/inserter.d.ts +12 -0
  440. package/dist/editor/inserter.js +88 -0
  441. package/dist/editor/inspector.d.ts +17 -0
  442. package/dist/editor/inspector.js +65 -0
  443. package/dist/editor/items.d.ts +62 -0
  444. package/dist/editor/items.js +195 -0
  445. package/dist/editor/labels.d.ts +119 -0
  446. package/dist/editor/labels.js +130 -0
  447. package/dist/editor/markdown.d.ts +14 -0
  448. package/dist/editor/markdown.js +209 -0
  449. package/dist/editor/menus.d.ts +20 -0
  450. package/dist/editor/menus.js +236 -0
  451. package/dist/editor/nodes.d.ts +14 -0
  452. package/dist/editor/nodes.js +201 -0
  453. package/dist/editor/outline.d.ts +11 -0
  454. package/dist/editor/outline.js +52 -0
  455. package/dist/editor/schema-form.d.ts +64 -0
  456. package/dist/editor/schema-form.js +290 -0
  457. package/dist/editor/slash-menu.d.ts +15 -0
  458. package/dist/editor/slash-menu.js +119 -0
  459. package/dist/fonts/catalog.d.ts +53 -0
  460. package/dist/fonts/catalog.js +121 -0
  461. package/dist/fonts/font-picker.d.ts +70 -0
  462. package/dist/fonts/font-picker.js +225 -0
  463. package/dist/fonts/index.d.ts +6 -0
  464. package/dist/fonts/index.js +7 -0
  465. package/dist/fonts/loader.d.ts +66 -0
  466. package/dist/fonts/loader.js +161 -0
  467. package/dist/fonts/pairing-picker.d.ts +31 -0
  468. package/dist/fonts/pairing-picker.js +81 -0
  469. package/dist/fonts/pairings.d.ts +84 -0
  470. package/dist/fonts/pairings.js +149 -0
  471. package/dist/fonts/provider.d.ts +34 -0
  472. package/dist/fonts/provider.js +51 -0
  473. package/dist/form/index.d.ts +1 -0
  474. package/dist/form/index.js +1 -0
  475. package/dist/format/core.d.ts +149 -0
  476. package/dist/format/core.js +357 -0
  477. package/dist/format/index.d.ts +4 -0
  478. package/dist/format/index.js +5 -0
  479. package/dist/format/use-format.d.ts +1 -0
  480. package/dist/format/use-format.js +3 -0
  481. package/dist/index.d.ts +91 -0
  482. package/dist/index.js +92 -0
  483. package/dist/lib/cn.d.ts +3 -0
  484. package/dist/lib/cn.js +16 -0
  485. package/dist/lib/color.d.ts +64 -0
  486. package/dist/lib/color.js +177 -0
  487. package/dist/lib/compose-refs.d.ts +24 -0
  488. package/dist/lib/compose-refs.js +45 -0
  489. package/dist/lib/data-islands.d.ts +194 -0
  490. package/dist/lib/data-islands.js +368 -0
  491. package/dist/lib/date.d.ts +129 -0
  492. package/dist/lib/date.js +386 -0
  493. package/dist/lib/field-context.d.ts +64 -0
  494. package/dist/lib/field-context.js +62 -0
  495. package/dist/lib/floating-arrow.d.ts +18 -0
  496. package/dist/lib/floating-arrow.js +15 -0
  497. package/dist/lib/islands.d.ts +38 -0
  498. package/dist/lib/islands.js +40 -0
  499. package/dist/lib/labels.d.ts +51 -0
  500. package/dist/lib/labels.js +56 -0
  501. package/dist/lib/layer.d.ts +36 -0
  502. package/dist/lib/layer.js +42 -0
  503. package/dist/lib/locale.d.ts +85 -0
  504. package/dist/lib/locale.js +105 -0
  505. package/dist/lib/menu.d.ts +58 -0
  506. package/dist/lib/menu.js +99 -0
  507. package/dist/lib/message-format.d.ts +20 -0
  508. package/dist/lib/message-format.js +116 -0
  509. package/dist/lib/nav.d.ts +132 -0
  510. package/dist/lib/nav.js +178 -0
  511. package/dist/lib/provider.d.ts +100 -0
  512. package/dist/lib/provider.js +105 -0
  513. package/dist/lib/public.d.ts +23 -0
  514. package/dist/lib/public.js +34 -0
  515. package/dist/lib/sr-name.d.ts +18 -0
  516. package/dist/lib/sr-name.js +17 -0
  517. package/dist/lib/text.d.ts +100 -0
  518. package/dist/lib/text.js +233 -0
  519. package/dist/lib/theme-scope.d.ts +58 -0
  520. package/dist/lib/theme-scope.js +59 -0
  521. package/dist/lib/use-async-list.d.ts +60 -0
  522. package/dist/lib/use-async-list.js +119 -0
  523. package/dist/lib/use-container-width.d.ts +19 -0
  524. package/dist/lib/use-container-width.js +39 -0
  525. package/dist/lib/use-controllable-state.d.ts +33 -0
  526. package/dist/lib/use-controllable-state.js +56 -0
  527. package/dist/lib/use-edge-fade.d.ts +13 -0
  528. package/dist/lib/use-edge-fade.js +43 -0
  529. package/dist/lib/use-formatted-input.d.ts +69 -0
  530. package/dist/lib/use-formatted-input.js +152 -0
  531. package/dist/lib/use-hotkeys.d.ts +80 -0
  532. package/dist/lib/use-hotkeys.js +221 -0
  533. package/dist/lib/use-hover-intent.d.ts +44 -0
  534. package/dist/lib/use-hover-intent.js +119 -0
  535. package/dist/lib/use-media-query.d.ts +21 -0
  536. package/dist/lib/use-media-query.js +28 -0
  537. package/dist/lib/use-reduced-motion.d.ts +8 -0
  538. package/dist/lib/use-reduced-motion.js +13 -0
  539. package/dist/lib/use-tree.d.ts +153 -0
  540. package/dist/lib/use-tree.js +534 -0
  541. package/dist/lib/value-format.d.ts +25 -0
  542. package/dist/lib/value-format.js +56 -0
  543. package/dist/lib/variants.d.ts +131 -0
  544. package/dist/lib/variants.js +109 -0
  545. package/dist/locale-data/core/date.d.ts +24 -0
  546. package/dist/locale-data/core/date.js +68 -0
  547. package/dist/locale-data/core/decimal.d.ts +19 -0
  548. package/dist/locale-data/core/decimal.js +79 -0
  549. package/dist/locale-data/core/holidays.d.ts +30 -0
  550. package/dist/locale-data/core/holidays.js +79 -0
  551. package/dist/locale-data/core/iban.d.ts +29 -0
  552. package/dist/locale-data/core/iban.js +74 -0
  553. package/dist/locale-data/core/index.d.ts +7 -0
  554. package/dist/locale-data/core/index.js +6 -0
  555. package/dist/locale-data/core/types.d.ts +173 -0
  556. package/dist/locale-data/core/types.js +6 -0
  557. package/dist/locale-data/core/week-info.d.ts +23 -0
  558. package/dist/locale-data/core/week-info.js +85 -0
  559. package/dist/locale-data/core/working-days.d.ts +27 -0
  560. package/dist/locale-data/core/working-days.js +133 -0
  561. package/dist/locale-data/index.d.ts +2 -0
  562. package/dist/locale-data/index.js +4 -0
  563. package/dist/locale-data/tr/address-tr.json +1 -0
  564. package/dist/locale-data/tr/address.d.ts +23 -0
  565. package/dist/locale-data/tr/address.js +52 -0
  566. package/dist/locale-data/tr/holidays.d.ts +31 -0
  567. package/dist/locale-data/tr/holidays.js +81 -0
  568. package/dist/locale-data/tr/iban.d.ts +21 -0
  569. package/dist/locale-data/tr/iban.js +45 -0
  570. package/dist/locale-data/tr/id.d.ts +36 -0
  571. package/dist/locale-data/tr/id.js +120 -0
  572. package/dist/locale-data/tr/index.d.ts +12 -0
  573. package/dist/locale-data/tr/index.js +33 -0
  574. package/dist/locale-data/tr/kdv.d.ts +91 -0
  575. package/dist/locale-data/tr/kdv.js +222 -0
  576. package/dist/locales/en.d.ts +2102 -0
  577. package/dist/locales/en.js +2088 -0
  578. package/dist/locales/tr.d.ts +2086 -0
  579. package/dist/locales/tr.js +2087 -0
  580. package/dist/media/focal-point.d.ts +42 -0
  581. package/dist/media/focal-point.js +96 -0
  582. package/dist/media/gallery-layout.d.ts +19 -0
  583. package/dist/media/gallery-layout.js +61 -0
  584. package/dist/media/gallery.d.ts +64 -0
  585. package/dist/media/gallery.js +140 -0
  586. package/dist/media/image-cropper.d.ts +86 -0
  587. package/dist/media/image-cropper.js +170 -0
  588. package/dist/media/image-field.d.ts +115 -0
  589. package/dist/media/image-field.js +212 -0
  590. package/dist/media/index.d.ts +19 -0
  591. package/dist/media/index.js +23 -0
  592. package/dist/media/lightbox.d.ts +82 -0
  593. package/dist/media/lightbox.js +171 -0
  594. package/dist/media/link-preview.d.ts +97 -0
  595. package/dist/media/link-preview.js +177 -0
  596. package/dist/media/media-library.d.ts +244 -0
  597. package/dist/media/media-library.js +776 -0
  598. package/dist/media/media-picker.d.ts +96 -0
  599. package/dist/media/media-picker.js +209 -0
  600. package/dist/media/media-provider.d.ts +23 -0
  601. package/dist/media/media-provider.js +44 -0
  602. package/dist/media/media-utils.d.ts +39 -0
  603. package/dist/media/media-utils.js +145 -0
  604. package/dist/media/memory-adapter.d.ts +22 -0
  605. package/dist/media/memory-adapter.js +162 -0
  606. package/dist/media/rest-adapter.d.ts +90 -0
  607. package/dist/media/rest-adapter.js +208 -0
  608. package/dist/media/serp.d.ts +62 -0
  609. package/dist/media/serp.js +108 -0
  610. package/dist/media/test-fixtures.d.ts +3 -0
  611. package/dist/media/test-fixtures.js +37 -0
  612. package/dist/media/types.d.ts +183 -0
  613. package/dist/media/types.js +3 -0
  614. package/dist/media/use-pan-zoom.d.ts +51 -0
  615. package/dist/media/use-pan-zoom.js +156 -0
  616. package/dist/media/use-upload-queue.d.ts +64 -0
  617. package/dist/media/use-upload-queue.js +115 -0
  618. package/dist/media/video-player.d.ts +135 -0
  619. package/dist/media/video-player.js +319 -0
  620. package/dist/motion/core.d.ts +32 -0
  621. package/dist/motion/core.js +77 -0
  622. package/dist/motion/count-up.d.ts +29 -0
  623. package/dist/motion/count-up.js +92 -0
  624. package/dist/motion/index.d.ts +11 -0
  625. package/dist/motion/index.js +13 -0
  626. package/dist/motion/motion-scope.d.ts +17 -0
  627. package/dist/motion/motion-scope.js +16 -0
  628. package/dist/motion/page-transition.d.ts +33 -0
  629. package/dist/motion/page-transition.js +61 -0
  630. package/dist/motion/parallax.d.ts +37 -0
  631. package/dist/motion/parallax.js +90 -0
  632. package/dist/motion/pointer.d.ts +38 -0
  633. package/dist/motion/pointer.js +117 -0
  634. package/dist/motion/reveal.d.ts +72 -0
  635. package/dist/motion/reveal.js +133 -0
  636. package/dist/motion/scroll-shrink.d.ts +18 -0
  637. package/dist/motion/scroll-shrink.js +47 -0
  638. package/dist/motion/skeleton-swap.d.ts +17 -0
  639. package/dist/motion/skeleton-swap.js +43 -0
  640. package/dist/motion/text-reveal.d.ts +30 -0
  641. package/dist/motion/text-reveal.js +29 -0
  642. package/dist/motion/ticker.d.ts +35 -0
  643. package/dist/motion/ticker.js +16 -0
  644. package/dist/next/index.d.ts +42 -0
  645. package/dist/next/index.js +36 -0
  646. package/dist/render/block-renderer.d.ts +56 -0
  647. package/dist/render/block-renderer.js +137 -0
  648. package/dist/render/index.d.ts +6 -0
  649. package/dist/render/index.js +7 -0
  650. package/dist/render/prepare.d.ts +61 -0
  651. package/dist/render/prepare.js +119 -0
  652. package/dist/scheduler/core/duration.d.ts +83 -0
  653. package/dist/scheduler/core/duration.js +174 -0
  654. package/dist/scheduler/core/gantt.d.ts +63 -0
  655. package/dist/scheduler/core/gantt.js +226 -0
  656. package/dist/scheduler/core/index.d.ts +6 -0
  657. package/dist/scheduler/core/index.js +7 -0
  658. package/dist/scheduler/core/layout.d.ts +97 -0
  659. package/dist/scheduler/core/layout.js +249 -0
  660. package/dist/scheduler/core/time-scale.d.ts +89 -0
  661. package/dist/scheduler/core/time-scale.js +173 -0
  662. package/dist/scheduler/gantt.d.ts +125 -0
  663. package/dist/scheduler/gantt.js +532 -0
  664. package/dist/scheduler/index.d.ts +6 -0
  665. package/dist/scheduler/index.js +7 -0
  666. package/dist/scheduler/resource-calendar.d.ts +218 -0
  667. package/dist/scheduler/resource-calendar.js +661 -0
  668. package/dist/scheduler/scheduler.d.ts +168 -0
  669. package/dist/scheduler/scheduler.js +768 -0
  670. package/dist/scheduler/shared.d.ts +63 -0
  671. package/dist/scheduler/shared.js +145 -0
  672. package/dist/scheduler/time-tracker.d.ts +138 -0
  673. package/dist/scheduler/time-tracker.js +403 -0
  674. package/dist/sortable/core.d.ts +67 -0
  675. package/dist/sortable/core.js +167 -0
  676. package/dist/sortable/index.d.ts +8 -0
  677. package/dist/sortable/index.js +10 -0
  678. package/dist/sortable/kanban-core.d.ts +70 -0
  679. package/dist/sortable/kanban-core.js +67 -0
  680. package/dist/sortable/kanban.d.ts +147 -0
  681. package/dist/sortable/kanban.js +472 -0
  682. package/dist/sortable/sortable-list.d.ts +71 -0
  683. package/dist/sortable/sortable-list.js +76 -0
  684. package/dist/sortable/sortable-tree.d.ts +105 -0
  685. package/dist/sortable/sortable-tree.js +462 -0
  686. package/dist/sortable/sortable.d.ts +188 -0
  687. package/dist/sortable/sortable.js +485 -0
  688. package/dist/sortable/use-pointer-drag.d.ts +75 -0
  689. package/dist/sortable/use-pointer-drag.js +173 -0
  690. package/dist/sortable/use-time-scale.d.ts +11 -0
  691. package/dist/sortable/use-time-scale.js +19 -0
  692. package/dist/styles/base.css +51 -0
  693. package/dist/styles/blocks.css +949 -0
  694. package/dist/styles/calendar.css +642 -0
  695. package/dist/styles/charts.css +264 -0
  696. package/dist/styles/data.css +474 -0
  697. package/dist/styles/editors.css +1022 -0
  698. package/dist/styles/forms.css +406 -0
  699. package/dist/styles/media.css +515 -0
  700. package/dist/styles/motion.css +389 -0
  701. package/dist/styles/navigation.css +293 -0
  702. package/dist/styles/overlays.css +244 -0
  703. package/dist/styles.css +743 -0
  704. package/package.json +160 -4
@@ -0,0 +1,173 @@
1
+ import * as React from "react";
2
+ import { type LabelFn } from "../lib/labels.js";
3
+ import type { Formatter } from "../format/core.js";
4
+ import { patternDash, type ChartConfig, type ChartHeight, type ChartState, type FormatSpec, type ResolvedSeries } from "./utils.js";
5
+ export declare const chartLabels: {
6
+ viewTable: string;
7
+ viewChart: string;
8
+ legend: string;
9
+ empty: string;
10
+ error: string;
11
+ retry: string;
12
+ loading: string;
13
+ refreshing: string;
14
+ total: string;
15
+ other: string;
16
+ otherCount: string;
17
+ share: string;
18
+ category: string;
19
+ value: string;
20
+ range: string;
21
+ seriesSummary: string;
22
+ };
23
+ export type ChartLabels = typeof chartLabels;
24
+ export type ChartSkeletonKind = "area" | "line" | "bar" | "bar-horizontal" | "donut" | "grid";
25
+ export interface ChartTableColumn {
26
+ key: string;
27
+ label: string;
28
+ format?: FormatSpec;
29
+ /** Row header column (first column). */
30
+ header?: boolean;
31
+ }
32
+ /** Overrides the generated data table (columns + rows). */
33
+ export interface ChartTableSpec {
34
+ columns: ChartTableColumn[];
35
+ rows: Record<string, unknown>[];
36
+ }
37
+ type Row = Record<string, unknown>;
38
+ export interface ChartContextValue {
39
+ config: ChartConfig;
40
+ series: ResolvedSeries[];
41
+ visibleSeries: ResolvedSeries[];
42
+ isHidden: (key: string) => boolean;
43
+ toggleSeries: (key: string) => void;
44
+ data: Row[];
45
+ x?: string;
46
+ xFormat?: FormatSpec;
47
+ yFormat?: FormatSpec;
48
+ /** Full value of a series ("$1,240.00"). */
49
+ formatSeries: (key: string, value: unknown) => string;
50
+ /** Compact value-axis tick ("$1.2K"). */
51
+ formatTick: (value: unknown, spec?: FormatSpec) => string;
52
+ /** x value; `long` for tooltip headers and tables ("Nov 1, 2026"). */
53
+ formatX: (value: unknown, long?: boolean) => string;
54
+ f: Formatter;
55
+ t: LabelFn<ChartLabels>;
56
+ /** `animate` resolved against `prefers-reduced-motion`. */
57
+ animate: boolean;
58
+ tooltipIndicator: "dot" | "line" | "dashed";
59
+ onPointClick?: (row: Row, seriesKey: string) => void;
60
+ height: number | undefined;
61
+ idPrefix: string;
62
+ }
63
+ /** Chart context: config, formatters and hidden series. Use inside `<Chart>`. */
64
+ export declare function useChart(): ChartContextValue;
65
+ /** Like `useChart`, but `null` outside a Chart. */
66
+ export declare const useOptionalChart: () => ChartContextValue | null;
67
+ export interface ChartProps<T extends object = Row> extends Omit<React.HTMLAttributes<HTMLElement>, "title" | "children" | "onClick"> {
68
+ data: T[];
69
+ config: ChartConfig;
70
+ /** Category / time key of a row. */
71
+ x?: keyof T & string;
72
+ /** Header of the x column in the data table. Default: the x key, capitalised. */
73
+ xLabel?: string;
74
+ xFormat?: FormatSpec;
75
+ /** Value axis format. Default: the first series' format, compact. */
76
+ yFormat?: FormatSpec;
77
+ /** Plot height: presets sm 160 / md 260 / lg 360 or pixels. Set this or `aspect` (no layout shift). `"auto"` sizes to the content (DOM charts such as Heatmap). */
78
+ height?: ChartHeight | "auto";
79
+ /** Width / height ratio instead of a fixed height. */
80
+ aspect?: number;
81
+ /** Loading / refreshing / empty / error. Default: empty when `data` is empty, else ready. */
82
+ state?: ChartState;
83
+ /** Accessible name and table caption (not shown — put a visible title in the Card header). */
84
+ title: string;
85
+ /** Text alternative. Default: generated from the data (range, low, high, average). */
86
+ summary?: string | ((data: T[]) => string);
87
+ /** Shows a "View as table" switch. The table is always in the page for screen readers. */
88
+ tableToggle?: boolean;
89
+ /** Default `"top"` with 2+ series, `"none"` with one. */
90
+ legend?: "top" | "bottom" | "none";
91
+ tooltipIndicator?: "dot" | "line" | "dashed";
92
+ /** Transitions on data change. Always off under reduced motion. Default `true`. */
93
+ animate?: boolean;
94
+ /** Drill-down. Also makes the rows of the visible data table activatable. */
95
+ onPointClick?: (row: T, seriesKey: string) => void;
96
+ /** Controlled hidden series. */
97
+ hiddenSeries?: string[];
98
+ defaultHiddenSeries?: string[];
99
+ onHiddenSeriesChange?: (keys: string[]) => void;
100
+ labels?: Partial<ChartLabels>;
101
+ /** Replace the generated data table. */
102
+ table?: ChartTableSpec;
103
+ /** Content beside (or under) the plot — e.g. the Donut legend list. */
104
+ aside?: React.ReactNode;
105
+ asidePosition?: "side" | "bottom";
106
+ /** Shape of the loading skeleton. Default `"area"`. */
107
+ skeleton?: ChartSkeletonKind;
108
+ /** Extra controls at the end of the toolbar (range picker…). */
109
+ toolbar?: React.ReactNode;
110
+ /** Plot content: a ready chart's Recharts tree, `<ChartFrame>` with raw Recharts, or any SVG. */
111
+ children?: React.ReactNode;
112
+ }
113
+ /**
114
+ * The shell every chart shares: series → token colours (`--series-<key>`), locale formatting,
115
+ * an interactive legend, loading / refreshing / empty / error states, a generated text summary and
116
+ * a data-table alternative.
117
+ *
118
+ * ```tsx
119
+ * <Chart title="Visits" data={rows} config={{ visits: { label: "Visits" } }} x="date" height="md">
120
+ * <ChartFrame><RAreaChart data={rows}>…</RAreaChart></ChartFrame>
121
+ * </Chart>
122
+ * ```
123
+ */
124
+ export declare function Chart<T extends object>(props: ChartProps<T>): React.JSX.Element;
125
+ export interface ChartLegendContentProps extends React.HTMLAttributes<HTMLDivElement> {
126
+ /** Keys to list. Default: every series of the config. */
127
+ keys?: string[];
128
+ /** Click toggles visibility. Default `true`. */
129
+ interactive?: boolean;
130
+ /** Swatch shape. Default: a line for line/area patterns, a dot otherwise. */
131
+ swatch?: "dot" | "line";
132
+ }
133
+ /** The legend: one toggle per series (`aria-pressed`). At least one series always stays visible. */
134
+ export declare function ChartLegendContent({ keys, interactive, swatch, className, ...props }: ChartLegendContentProps): React.JSX.Element;
135
+ /** Swatch used by tooltips and lists: `dot`, `line` or `dashed`. */
136
+ export declare function ChartIndicator({ color, variant, pattern }: {
137
+ color: string;
138
+ variant?: "dot" | "line" | "dashed";
139
+ pattern?: ResolvedSeries["pattern"];
140
+ }): React.JSX.Element;
141
+ /** Chart-shaped loading placeholder (wave, bars, ring or grid) — never a spinner. */
142
+ export declare function ChartSkeleton({ kind, label, className }: {
143
+ kind?: ChartSkeletonKind;
144
+ label?: string;
145
+ className?: string;
146
+ }): React.JSX.Element;
147
+ /** Thin indeterminate bar on top of a chart that is refetching (old data stays, dimmed). */
148
+ export declare function ChartRefreshBar({ label, className }: {
149
+ label?: string;
150
+ className?: string;
151
+ }): React.JSX.Element;
152
+ /** Empty state that keeps the chart height: a quiet message and an optional action. */
153
+ export declare function ChartEmpty({ message, action, className }: {
154
+ message?: React.ReactNode;
155
+ action?: React.ReactNode;
156
+ className?: string;
157
+ }): React.JSX.Element;
158
+ /** Error state: icon, message and a retry action. */
159
+ export declare function ChartError({ message, onRetry, retryLabel, className }: {
160
+ message?: React.ReactNode;
161
+ onRetry?: () => void;
162
+ retryLabel?: string;
163
+ className?: string;
164
+ }): React.JSX.Element;
165
+ export interface ChartDataTableProps extends React.HTMLAttributes<HTMLDivElement> {
166
+ caption: string;
167
+ spec: ChartTableSpec;
168
+ /** Makes each row header a button (drill-down without a pointer). */
169
+ onRowClick?: (row: Record<string, unknown>) => void;
170
+ }
171
+ /** The accessible alternative of a chart: same numbers, same formatters, as a real `<table>`. */
172
+ export declare function ChartDataTable({ caption, spec, onRowClick, className, ...props }: ChartDataTableProps): React.JSX.Element;
173
+ export { patternDash };
@@ -0,0 +1,205 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // The Chart shell — context, legend, states, data-table alternative. No Recharts import here,
4
+ // so SVG/DOM charts (Heatmap) can reuse it without loading the chart library.
5
+ import * as React from "react";
6
+ import { CircleAlert, Table2, ChartColumnBig } from "lucide-react";
7
+ import { cn } from "../lib/cn.js";
8
+ import { useFormat } from "../lib/locale.js";
9
+ import { useLabels } from "../lib/labels.js";
10
+ import { useControllableState } from "../lib/use-controllable-state.js";
11
+ import { useReducedMotion } from "../lib/use-reduced-motion.js";
12
+ import { Button } from "../components/button.js";
13
+ import { CHART_HEIGHTS, formatCategory, formatValue, patternDash, resolveChartColor, resolveSeries, seriesColor, seriesVarName, summarizeSeries, } from "./utils.js";
14
+ export const chartLabels = {
15
+ viewTable: "View as table",
16
+ viewChart: "View as chart",
17
+ legend: "Series",
18
+ empty: "No data for this range",
19
+ error: "This chart couldn't load.",
20
+ retry: "Try again",
21
+ loading: "Loading chart…",
22
+ refreshing: "Updating…",
23
+ total: "Total",
24
+ other: "Other",
25
+ otherCount: "Other ({count})",
26
+ share: "Share",
27
+ category: "Category",
28
+ value: "Value",
29
+ range: "{from} – {to}.",
30
+ seriesSummary: "{label}: low {min} ({minAt}), high {max} ({maxAt}), average {avg}.",
31
+ };
32
+ const ChartContext = React.createContext(null);
33
+ /** Chart context: config, formatters and hidden series. Use inside `<Chart>`. */
34
+ export function useChart() {
35
+ const ctx = React.useContext(ChartContext);
36
+ if (!ctx)
37
+ throw new Error("useChart must be used inside <Chart>.");
38
+ return ctx;
39
+ }
40
+ /** Like `useChart`, but `null` outside a Chart. */
41
+ export const useOptionalChart = () => React.useContext(ChartContext);
42
+ const capitalise = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
43
+ /**
44
+ * The shell every chart shares: series → token colours (`--series-<key>`), locale formatting,
45
+ * an interactive legend, loading / refreshing / empty / error states, a generated text summary and
46
+ * a data-table alternative.
47
+ *
48
+ * ```tsx
49
+ * <Chart title="Visits" data={rows} config={{ visits: { label: "Visits" } }} x="date" height="md">
50
+ * <ChartFrame><RAreaChart data={rows}>…</RAreaChart></ChartFrame>
51
+ * </Chart>
52
+ * ```
53
+ */
54
+ export function Chart(props) {
55
+ const { data: dataProp, config, x, xLabel, xFormat, yFormat, height, aspect, state: stateProp, title, summary, tableToggle, legend, tooltipIndicator = "dot", animate = true, onPointClick, hiddenSeries, defaultHiddenSeries, onHiddenSeriesChange, labels, table, aside, asidePosition = "side", skeleton = "area", toolbar, className, style, children, ...rest } = props;
56
+ const data = dataProp;
57
+ const f = useFormat();
58
+ const t = useLabels("chart", chartLabels, labels);
59
+ const reduced = useReducedMotion();
60
+ const rawId = React.useId();
61
+ const idPrefix = `vc${rawId.replace(/[^a-zA-Z0-9]/g, "")}`;
62
+ const series = React.useMemo(() => resolveSeries(config), [config]);
63
+ const [hidden, setHidden] = useControllableState({
64
+ value: hiddenSeries,
65
+ defaultValue: () => defaultHiddenSeries ?? series.filter((s) => s.hidden).map((s) => s.key),
66
+ onChange: onHiddenSeriesChange,
67
+ name: "Chart",
68
+ });
69
+ const hiddenSet = React.useMemo(() => new Set(hidden), [hidden]);
70
+ const visibleSeries = React.useMemo(() => series.filter((s) => !hiddenSet.has(s.key)), [series, hiddenSet]);
71
+ const toggleSeries = React.useCallback((key) => setHidden((prev) => {
72
+ if (prev.includes(key))
73
+ return prev.filter((k) => k !== key);
74
+ // at least one series stays visible
75
+ if (series.filter((s) => !prev.includes(s.key)).length <= 1)
76
+ return prev;
77
+ return [...prev, key];
78
+ }), [setHidden, series]);
79
+ const status = stateProp ?? (data.length === 0 ? { status: "empty" } : { status: "ready" });
80
+ const [showTable, setShowTable] = React.useState(false);
81
+ const seriesFormat = React.useCallback((key) => config[key]?.format, [config]);
82
+ const ctx = React.useMemo(() => ({
83
+ config,
84
+ series,
85
+ visibleSeries,
86
+ isHidden: (k) => hiddenSet.has(k),
87
+ toggleSeries,
88
+ data,
89
+ x,
90
+ xFormat,
91
+ yFormat: yFormat ?? series[0]?.format,
92
+ formatSeries: (key, v) => formatValue(f, seriesFormat(key), v),
93
+ formatTick: (v, spec) => formatValue(f, spec ?? yFormat ?? series[0]?.format, v, { compact: true }),
94
+ formatX: (v, long) => formatCategory(f, xFormat, v, long),
95
+ f,
96
+ t,
97
+ animate: animate && !reduced,
98
+ tooltipIndicator,
99
+ onPointClick: onPointClick,
100
+ height: height === "auto" ? undefined : typeof height === "string" ? CHART_HEIGHTS[height] : height,
101
+ idPrefix,
102
+ }), [config, series, visibleSeries, hiddenSet, toggleSeries, data, x, xFormat, yFormat, f, t, animate, reduced, tooltipIndicator, onPointClick, height, idPrefix, seriesFormat]);
103
+ const vars = React.useMemo(() => {
104
+ const out = {};
105
+ for (const s of series)
106
+ out[seriesVarName(s.key)] = resolveChartColor(s.color);
107
+ return out;
108
+ }, [series]);
109
+ const summaryText = React.useMemo(() => {
110
+ if (typeof summary === "function")
111
+ return summary(dataProp);
112
+ if (typeof summary === "string")
113
+ return summary;
114
+ return summarizeSeries({ f, rows: data, series: visibleSeries, x, xFormat, templates: { range: t.labels.range, series: t.labels.seriesSummary } });
115
+ }, [summary, dataProp, data, f, visibleSeries, x, xFormat, t]);
116
+ const tableSpec = React.useMemo(() => table ?? {
117
+ columns: [
118
+ ...(x ? [{ key: x, label: xLabel ?? capitalise(x), header: true, format: xFormat }] : []),
119
+ ...series.map((s) => ({ key: s.key, label: s.label, format: s.format })),
120
+ ],
121
+ rows: data,
122
+ }, [table, x, xLabel, xFormat, series, data]);
123
+ const legendPos = legend ?? (series.length > 1 ? "top" : "none");
124
+ const summaryId = `${idPrefix}-summary`;
125
+ const plotHeight = ctx.height;
126
+ const busy = status.status === "loading" || status.status === "refreshing";
127
+ const showToolbar = legendPos === "top" || tableToggle || toolbar;
128
+ let body;
129
+ if (status.status === "loading")
130
+ body = _jsx(ChartSkeleton, { kind: skeleton, label: t("loading") });
131
+ else if (status.status === "empty")
132
+ body = _jsx(ChartEmpty, { message: status.message ?? t("empty"), action: status.action });
133
+ else if (status.status === "error")
134
+ body = _jsx(ChartError, { message: status.message ?? t("error"), onRetry: status.onRetry, retryLabel: t("retry") });
135
+ else if (showTable)
136
+ body = _jsx(ChartDataTable, { caption: title, spec: tableSpec, onRowClick: onPointClick ? (row) => onPointClick(row, visibleSeries[0]?.key ?? "") : undefined, className: cn("overflow-auto", height === "auto" ? "max-h-96" : "h-full") });
137
+ else
138
+ body = (_jsxs(_Fragment, { children: [status.status === "refreshing" ? _jsx(ChartRefreshBar, { label: t("refreshing") }) : null, _jsx("div", { className: cn("size-full transition-opacity duration-200", status.status === "refreshing" && "opacity-60"), children: children })] }));
139
+ const plot = (_jsx("div", { "data-slot": "chart-body", "data-state": status.status, "aria-busy": busy || undefined, className: cn("vui-chart-body relative min-w-0", aside && asidePosition === "side" ? "flex-1" : "w-full"), style: height === "auto"
140
+ ? status.status === "ready" || status.status === "refreshing"
141
+ ? undefined
142
+ : { minHeight: CHART_HEIGHTS.sm }
143
+ : plotHeight !== undefined
144
+ ? { height: plotHeight }
145
+ : aspect
146
+ ? { aspectRatio: String(aspect) }
147
+ : { height: CHART_HEIGHTS.md }, children: body }));
148
+ return (_jsx(ChartContext.Provider, { value: ctx, children: _jsxs("figure", { "data-slot": "chart", "aria-label": title, "aria-describedby": summaryText ? summaryId : undefined, className: cn("vui-chart m-0 grid min-w-0 gap-3", className), style: { ...vars, ...style }, ...rest, children: [showToolbar ? (_jsxs("div", { "data-slot": "chart-toolbar", className: "flex min-h-7 flex-wrap items-center justify-between gap-x-4 gap-y-2", children: [legendPos === "top" ? _jsx(ChartLegendContent, {}) : _jsx("span", {}), tableToggle || toolbar ? (_jsxs("div", { className: "flex items-center gap-1.5", children: [toolbar, tableToggle ? (_jsxs(Button, { size: "xs", variant: "ghost", "aria-pressed": showTable, onClick: () => setShowTable((v) => !v), className: "text-fg-muted", children: [showTable ? _jsx(ChartColumnBig, { className: "size-3.5" }) : _jsx(Table2, { className: "size-3.5" }), showTable ? t("viewChart") : t("viewTable")] })) : null] })) : null] })) : null, aside ? (_jsx("div", { className: cn("@container"), children: _jsxs("div", { className: cn("flex flex-col gap-5", asidePosition === "side" && "@md:flex-row @md:items-center"), children: [plot, _jsx("div", { "data-slot": "chart-aside", className: cn("min-w-0", asidePosition === "side" && "@md:w-[min(46%,18rem)]"), children: aside })] }) })) : (plot), legendPos === "bottom" ? _jsx(ChartLegendContent, { className: "justify-center" }) : null, summaryText ? (_jsx("p", { id: summaryId, className: "sr-only", children: summaryText })) : null, !showTable && status.status !== "loading" && status.status !== "error" && tableSpec.rows.length ? _jsx(ChartDataTable, { caption: title, spec: tableSpec, className: "sr-only" }) : null] }) }));
149
+ }
150
+ /** The legend: one toggle per series (`aria-pressed`). At least one series always stays visible. */
151
+ export function ChartLegendContent({ keys, interactive = true, swatch, className, ...props }) {
152
+ const { series, isHidden, toggleSeries, visibleSeries, t } = useChart();
153
+ const items = keys ? series.filter((s) => keys.includes(s.key)) : series;
154
+ return (_jsx("div", { role: "group", "aria-label": t("legend"), "data-slot": "chart-legend", className: cn("flex flex-wrap items-center gap-x-1 gap-y-1", className), ...props, children: items.map((s) => {
155
+ const hidden = isHidden(s.key);
156
+ const locked = !hidden && visibleSeries.length <= 1;
157
+ const Icon = s.icon;
158
+ const content = (_jsxs(_Fragment, { children: [Icon ? _jsx(Icon, { className: "size-3.5" }) : _jsx(LegendSwatch, { color: seriesColor(s.key), pattern: s.pattern, shape: swatch ?? (s.pattern !== "solid" ? "line" : "dot") }), _jsx("span", { className: cn(hidden && "line-through decoration-fg-subtle"), children: s.label })] }));
159
+ if (!interactive)
160
+ return (_jsx("span", { className: "inline-flex items-center gap-1.5 px-1.5 text-[12.5px] text-fg-muted", children: content }, s.key));
161
+ return (_jsx("button", { type: "button", "aria-pressed": !hidden, "aria-disabled": locked || undefined, onClick: () => toggleSeries(s.key), className: cn("inline-flex h-7 items-center gap-1.5 rounded-ui-sm px-2 text-[12.5px] text-fg-muted transition-[color,background-color,opacity] focus-ring hover:bg-hover hover:text-fg", hidden && "opacity-55", locked && "cursor-default hover:bg-transparent"), children: content }, s.key));
162
+ }) }));
163
+ }
164
+ function LegendSwatch({ color, pattern, shape }) {
165
+ if (shape === "line")
166
+ return (_jsx("svg", { width: "14", height: "8", viewBox: "0 0 14 8", "aria-hidden": true, className: "shrink-0", children: _jsx("line", { x1: "1", y1: "4", x2: "13", y2: "4", stroke: color, strokeWidth: "2", strokeLinecap: "round", strokeDasharray: pattern === "dashed" ? "4 3" : pattern === "dotted" ? "0.5 3" : undefined }) }));
167
+ return _jsx("span", { "aria-hidden": true, className: "size-2 shrink-0 rounded-[3px]", style: { background: color } });
168
+ }
169
+ /** Swatch used by tooltips and lists: `dot`, `line` or `dashed`. */
170
+ export function ChartIndicator({ color, variant = "dot", pattern }) {
171
+ if (variant === "line" || variant === "dashed")
172
+ return (_jsx("svg", { width: "12", height: "10", viewBox: "0 0 12 10", "aria-hidden": true, className: "shrink-0", children: _jsx("line", { x1: "1", y1: "5", x2: "11", y2: "5", stroke: color, strokeWidth: "2.25", strokeLinecap: "round", strokeDasharray: variant === "dashed" || pattern === "dashed" ? "3 2.5" : pattern === "dotted" ? "0.5 3" : undefined }) }));
173
+ return _jsx("span", { "aria-hidden": true, className: "size-2 shrink-0 rounded-[3px]", style: { background: color } });
174
+ }
175
+ /* ------------------------------------------------------------------ */
176
+ /* States */
177
+ /* ------------------------------------------------------------------ */
178
+ const BAR_HEIGHTS = [42, 64, 50, 78, 58, 88, 70, 54, 82, 66, 92, 60];
179
+ /** Chart-shaped loading placeholder (wave, bars, ring or grid) — never a spinner. */
180
+ export function ChartSkeleton({ kind = "area", label, className }) {
181
+ return (_jsxs("div", { "data-slot": "chart-skeleton", "data-kind": kind, className: cn("vui-chart-skeleton absolute inset-0 flex", className), children: [label ? (_jsx("span", { role: "status", className: "sr-only", children: label })) : null, kind === "bar" ? (_jsx("div", { "aria-hidden": true, className: "flex size-full items-end gap-[3%] ps-10 pb-6", children: BAR_HEIGHTS.map((h, i) => (_jsx("div", { className: "ui-shimmer flex-1 rounded-t-[4px] bg-skeleton", style: { height: `${h}%` } }, i))) })) : kind === "bar-horizontal" ? (_jsx("div", { "aria-hidden": true, className: "flex size-full flex-col justify-around gap-2 py-2 ps-20", children: [92, 76, 64, 50, 38, 26].map((w, i) => (_jsx("div", { className: "ui-shimmer h-[9%] min-h-2 rounded-e-[4px] bg-skeleton", style: { width: `${w}%` } }, i))) })) : kind === "donut" ? (_jsx("div", { "aria-hidden": true, className: "grid size-full place-items-center", children: _jsx("div", { className: "vui-chart-skeleton-ring ui-shimmer aspect-square h-[82%] max-h-full rounded-full bg-skeleton" }) })) : kind === "grid" ? (_jsx("div", { "aria-hidden": true, className: "vui-chart-skeleton-grid ui-shimmer size-full rounded-ui-sm" })) : (_jsx("div", { "aria-hidden": true, className: "flex size-full flex-col ps-10 pb-6", children: _jsx("div", { className: cn("ui-shimmer mt-auto h-[78%] w-full bg-skeleton", kind === "line" ? "vui-chart-skeleton-line" : "vui-chart-skeleton-wave") }) }))] }));
182
+ }
183
+ /** Thin indeterminate bar on top of a chart that is refetching (old data stays, dimmed). */
184
+ export function ChartRefreshBar({ label, className }) {
185
+ return (_jsxs("div", { "data-slot": "chart-refresh", className: cn("absolute inset-x-0 top-0 z-10 h-0.5 overflow-hidden rounded-full bg-track", className), children: [label ? (_jsx("span", { role: "status", className: "sr-only", children: label })) : null, _jsx("div", { "aria-hidden": true, className: "vui-chart-refresh-bar h-full w-2/5 rounded-full bg-accent-ink" })] }));
186
+ }
187
+ /** Empty state that keeps the chart height: a quiet message and an optional action. */
188
+ export function ChartEmpty({ message, action, className }) {
189
+ return (_jsxs("div", { "data-slot": "chart-empty", className: cn("absolute inset-0 grid place-items-center", className), children: [_jsx("div", { "aria-hidden": true, className: "vui-chart-empty-grid absolute inset-0" }), _jsxs("div", { className: "relative flex flex-col items-center gap-2.5 px-6 text-center", children: [_jsx("p", { className: "text-[13px] text-fg-muted", children: message }), action] })] }));
190
+ }
191
+ /** Error state: icon, message and a retry action. */
192
+ export function ChartError({ message, onRetry, retryLabel = "Try again", className }) {
193
+ return (_jsx("div", { "data-slot": "chart-error", role: "alert", className: cn("absolute inset-0 grid place-items-center", className), children: _jsxs("div", { className: "flex flex-col items-center gap-2.5 px-6 text-center", children: [_jsx(CircleAlert, { "aria-hidden": true, className: "size-5 text-danger" }), _jsx("p", { className: "max-w-xs text-[13px] text-fg-muted", children: message }), onRetry ? (_jsx(Button, { size: "sm", onClick: onRetry, children: retryLabel })) : null] }) }));
194
+ }
195
+ /** The accessible alternative of a chart: same numbers, same formatters, as a real `<table>`. */
196
+ export function ChartDataTable({ caption, spec, onRowClick, className, ...props }) {
197
+ const f = useFormat();
198
+ return (_jsx("div", { "data-slot": "chart-table", className: cn("min-w-0", className), ...props, children: _jsxs("table", { className: "w-full border-collapse text-[13px]", children: [_jsx("caption", { className: "sr-only", children: caption }), _jsx("thead", { children: _jsx("tr", { children: spec.columns.map((c, i) => (_jsx("th", { scope: "col", className: cn("sticky top-0 z-[1] border-b border-line bg-[var(--chart-tooltip)] px-3 py-2 text-[12px] font-medium whitespace-nowrap text-fg-muted", i === 0 ? "text-start" : "text-end"), children: c.label }, c.key))) }) }), _jsx("tbody", { children: spec.rows.map((row, ri) => (_jsx("tr", { className: "border-b border-line last:border-b-0", children: spec.columns.map((c, ci) => {
199
+ const text = c.header ? formatCategory(f, c.format, row[c.key], true) : formatValue(f, c.format, row[c.key]);
200
+ if (ci === 0 || c.header)
201
+ return (_jsx("th", { scope: "row", className: "px-3 py-1.5 text-start font-normal whitespace-nowrap text-fg", children: onRowClick ? (_jsx("button", { type: "button", onClick: () => onRowClick(row), className: "rounded-ui-sm text-start text-accent-ink underline-offset-4 focus-ring hover:underline", children: text })) : (text) }, c.key));
202
+ return (_jsx("td", { className: "px-3 py-1.5 text-end font-mono text-[12.5px] whitespace-nowrap text-fg tabular", children: text }, c.key));
203
+ }) }, ri))) })] }) }));
204
+ }
205
+ export { patternDash };
@@ -0,0 +1,73 @@
1
+ import * as React from "react";
2
+ import { type CartesianGridProps, type ReferenceLineProps, type TooltipProps, type TooltipValueType as ValueType, type XAxisProps, type YAxisProps } from "recharts";
3
+ import type { NameType } from "recharts/types/component/DefaultTooltipContent";
4
+ import { type ChartColor, type FormatSpec } from "./utils.js";
5
+ export interface ChartFrameProps {
6
+ /** One Recharts chart element (`<RAreaChart data={…}>…</RAreaChart>`). */
7
+ children: React.ReactElement;
8
+ className?: string;
9
+ }
10
+ /**
11
+ * Sizes a Recharts chart to the Chart body (height from `height` / `aspect` on `<Chart>`), so the
12
+ * first paint never shifts layout. Use it for raw Recharts inside `<Chart>`.
13
+ */
14
+ export declare function ChartFrame({ children, className }: ChartFrameProps): React.JSX.Element;
15
+ interface TooltipEntry {
16
+ dataKey?: unknown;
17
+ name?: unknown;
18
+ value?: unknown;
19
+ type?: string;
20
+ payload?: unknown;
21
+ }
22
+ export interface ChartTooltipContentProps {
23
+ /** Injected by Recharts. */
24
+ active?: boolean;
25
+ /** Injected by Recharts. */
26
+ payload?: readonly TooltipEntry[];
27
+ /** Injected by Recharts. */
28
+ label?: unknown;
29
+ indicator?: "dot" | "line" | "dashed";
30
+ /** Adds a total row (stacked charts). */
31
+ showTotal?: boolean;
32
+ /** Percent-stacked charts: show each value's share next to it. */
33
+ showShare?: boolean;
34
+ hideLabel?: boolean;
35
+ /** Custom header text. */
36
+ labelFormatter?: (label: unknown, payload: readonly TooltipEntry[]) => React.ReactNode;
37
+ className?: string;
38
+ }
39
+ /**
40
+ * Tooltip body: opaque `--chart-tooltip` surface (no blur — it re-renders on every pointer move),
41
+ * formatted header, one row per visible series, optional total.
42
+ */
43
+ export declare function ChartTooltipContent({ active, payload, label, indicator, showTotal, showShare, hideLabel, labelFormatter, className }: ChartTooltipContentProps): React.JSX.Element | null;
44
+ export type ChartTooltipProps = Omit<TooltipProps<ValueType, NameType>, "content" | "labelFormatter"> & Pick<ChartTooltipContentProps, "indicator" | "showTotal" | "showShare" | "hideLabel" | "labelFormatter">;
45
+ /** Recharts Tooltip wired to `ChartTooltipContent` and the themed cursor. */
46
+ export declare function ChartTooltip({ indicator, showTotal, showShare, hideLabel, labelFormatter, cursor, ...props }: ChartTooltipProps): React.JSX.Element;
47
+ /** Horizontal grid lines in `--chart-grid`. */
48
+ export declare function ChartGrid(props: CartesianGridProps): React.JSX.Element;
49
+ /** Category / time axis: no lines, axis-coloured ticks, density-aware gaps, formatted with `xFormat`. */
50
+ export declare function ChartXAxis({ tickFormatter, ...props }: XAxisProps): React.JSX.Element;
51
+ /** Value axis with compact ticks ("$1.2M") and a width measured from the longest tick. */
52
+ export declare function ChartYAxis({ format, keys, stacked, tickFormatter, width: widthProp, ...props }: YAxisProps & {
53
+ format?: FormatSpec;
54
+ keys?: string[];
55
+ stacked?: boolean;
56
+ }): React.JSX.Element;
57
+ /** A labelled reference line (target, average). Colour is a token. */
58
+ export declare function ChartReferenceLine({ color, label, labelPosition, ...props }: Omit<ReferenceLineProps, "label"> & {
59
+ color?: ChartColor;
60
+ label?: string;
61
+ labelPosition?: "above" | "below";
62
+ }): React.JSX.Element;
63
+ /** Width for a value axis: estimated from every tick it could draw. */
64
+ export declare function useValueAxisWidth(keys: string[], o?: {
65
+ stacked?: boolean;
66
+ format?: FormatSpec;
67
+ percent?: boolean;
68
+ }): number;
69
+ /** Recharts `onClick` → `onPointClick(row, seriesKey)` from the active tooltip index. */
70
+ export declare function usePointClick(seriesKey?: string): ((state: {
71
+ activeTooltipIndex?: unknown;
72
+ } | null) => void) | undefined;
73
+ export {};
@@ -0,0 +1,106 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // Recharts parts of the Chart frame: responsive plot, themed tooltip, axes and grid.
4
+ import * as React from "react";
5
+ import { CartesianGrid, ReferenceLine, ResponsiveContainer, Tooltip, XAxis, YAxis, } from "recharts";
6
+ import { cn } from "../lib/cn.js";
7
+ import { ChartIndicator, useChart, useOptionalChart } from "./chart-shell.js";
8
+ import { estimateAxisWidth, extent, formatValue, niceCeil, niceStep, resolveChartColor, seriesColor } from "./utils.js";
9
+ /**
10
+ * Sizes a Recharts chart to the Chart body (height from `height` / `aspect` on `<Chart>`), so the
11
+ * first paint never shifts layout. Use it for raw Recharts inside `<Chart>`.
12
+ */
13
+ export function ChartFrame({ children, className }) {
14
+ return (_jsx("div", { "data-slot": "chart-frame", className: cn("size-full min-w-0", className), children: _jsx(ResponsiveContainer, { width: "100%", height: "100%", minWidth: 0, children: children }) }));
15
+ }
16
+ /**
17
+ * Tooltip body: opaque `--chart-tooltip` surface (no blur — it re-renders on every pointer move),
18
+ * formatted header, one row per visible series, optional total.
19
+ */
20
+ export function ChartTooltipContent({ active, payload, label, indicator, showTotal, showShare, hideLabel, labelFormatter, className }) {
21
+ const chart = useOptionalChart();
22
+ if (!active || !payload?.length || !chart)
23
+ return null;
24
+ const rows = payload.filter((p) => p.dataKey !== undefined && !chart.isHidden(String(p.dataKey)) && p.type !== "none");
25
+ if (!rows.length)
26
+ return null;
27
+ const ind = indicator ?? chart.tooltipIndicator;
28
+ const raw = (rows[0]?.payload ?? {});
29
+ const header = hideLabel ? null : labelFormatter ? labelFormatter(label, rows) : chart.formatX(chart.x ? raw[chart.x] : label, true);
30
+ const numeric = (k) => {
31
+ const v = Number(raw[k]);
32
+ return Number.isFinite(v) ? v : 0;
33
+ };
34
+ const total = rows.reduce((sum, p) => sum + numeric(String(p.dataKey)), 0);
35
+ return (_jsxs("div", { "data-slot": "chart-tooltip", className: cn("vui-chart-tooltip min-w-36 rounded-ui-sm px-2.5 py-2 text-[12px]", className), children: [header ? _jsx("div", { className: "mb-1.5 font-medium text-fg", children: header }) : null, _jsxs("div", { className: "grid gap-1", children: [rows.map((p) => {
36
+ const key = String(p.dataKey);
37
+ const s = chart.series.find((x) => x.key === key);
38
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ChartIndicator, { color: seriesColor(key), variant: ind, pattern: s?.pattern }), _jsx("span", { className: "me-auto text-fg-muted", children: s?.label ?? String(p.name ?? key) }), _jsx("span", { className: "font-mono text-fg tabular", children: chart.formatSeries(key, raw[key] ?? p.value) }), showShare && total ? _jsx("span", { className: "w-11 text-end font-mono text-fg-subtle tabular", children: chart.f.percent(numeric(key) / total) }) : null] }, key));
39
+ }), showTotal && rows.length > 1 ? (_jsxs("div", { className: "mt-0.5 flex items-center gap-2 border-t border-line pt-1.5", children: [_jsx("span", { className: "me-auto text-fg-muted", children: chart.t("total") }), _jsx("span", { className: "font-mono font-medium text-fg tabular", children: chart.formatSeries(String(rows[0]?.dataKey), total) })] })) : null] })] }));
40
+ }
41
+ /** Recharts Tooltip wired to `ChartTooltipContent` and the themed cursor. */
42
+ export function ChartTooltip({ indicator, showTotal, showShare, hideLabel, labelFormatter, cursor, ...props }) {
43
+ return (_jsx(Tooltip, { isAnimationActive: false, cursor: cursor ?? { stroke: "var(--chart-cursor)", strokeWidth: 1 }, content: _jsx(ChartTooltipContent, { indicator: indicator, showTotal: showTotal, showShare: showShare, hideLabel: hideLabel, labelFormatter: labelFormatter }), ...props }));
44
+ }
45
+ /* ------------------------------------------------------------------ */
46
+ /* Axes & grid */
47
+ /* ------------------------------------------------------------------ */
48
+ const TICK = { fill: "var(--chart-axis)" };
49
+ /** Horizontal grid lines in `--chart-grid`. */
50
+ export function ChartGrid(props) {
51
+ return _jsx(CartesianGrid, { stroke: "var(--chart-grid)", vertical: false, ...props });
52
+ }
53
+ /** Category / time axis: no lines, axis-coloured ticks, density-aware gaps, formatted with `xFormat`. */
54
+ export function ChartXAxis({ tickFormatter, ...props }) {
55
+ const chart = useChart();
56
+ return (_jsx(XAxis, { dataKey: chart.x, tickLine: false, axisLine: false, tick: TICK, tickMargin: 8, minTickGap: 18, interval: "preserveStartEnd", tickFormatter: tickFormatter ?? ((v) => chart.formatX(v)), ...props }));
57
+ }
58
+ /** Value axis with compact ticks ("$1.2M") and a width measured from the longest tick. */
59
+ export function ChartYAxis({ format, keys, stacked, tickFormatter, width: widthProp, ...props }) {
60
+ const chart = useChart();
61
+ const axisKeys = keys ?? chart.visibleSeries.map((s) => s.key);
62
+ const width = useValueAxisWidth(axisKeys, { stacked, format });
63
+ const compactFrom = axisCompactFrom(extent(chart.data, axisKeys, stacked));
64
+ const fallback = (v) => formatValue(chart.f, format ?? chart.yFormat, v, { compact: true, compactFrom });
65
+ return _jsx(YAxis, { niceTicks: "snap125", tickLine: false, axisLine: false, tick: TICK, tickMargin: 6, width: widthProp ?? width, tickFormatter: tickFormatter ?? fallback, ...props });
66
+ }
67
+ /** A labelled reference line (target, average). Colour is a token. */
68
+ export function ChartReferenceLine({ color = "fg-subtle", label, labelPosition = "below", ...props }) {
69
+ return (_jsx(ReferenceLine, { stroke: resolveChartColor(color), strokeDasharray: "4 4", strokeWidth: 1, ifOverflow: "extendDomain", label: label ? { value: label, position: labelPosition === "above" ? "insideBottomRight" : "insideTopRight", fill: resolveChartColor(color === "fg-subtle" ? "fg-muted" : color), fontSize: 11 } : undefined, ...props }));
70
+ }
71
+ /** Once the top tick reaches 10K, every tick ≥ 1000 is compact too ("5K" next to "10K", never "5,000"). */
72
+ function axisCompactFrom([lo, hi]) {
73
+ return Math.max(niceCeil(Math.abs(hi)), niceCeil(Math.abs(lo))) >= 10000 ? 1000 : 10000;
74
+ }
75
+ /** Width for a value axis: estimated from every tick it could draw. */
76
+ export function useValueAxisWidth(keys, o = {}) {
77
+ const chart = useChart();
78
+ return React.useMemo(() => {
79
+ if (o.percent)
80
+ return estimateAxisWidth([chart.f.percent(1)]);
81
+ const [min, max] = extent(chart.data, keys, o.stacked);
82
+ const compactFrom = axisCompactFrom([min, max]);
83
+ // Format every tick the axis could draw (snap125 may stop at 800K while niceCeil says 1M).
84
+ const lo = Math.min(0, min);
85
+ const hi = Math.max(0, max);
86
+ const step = niceStep((hi - lo) / 4) || 1;
87
+ const values = [niceCeil(Math.abs(hi)), lo < 0 ? -niceCeil(-lo) : 0];
88
+ for (let v = Math.floor(lo / step) * step, i = 0; v <= hi + step && i < 24; v += step, i++)
89
+ values.push(Number(v.toPrecision(12)));
90
+ return estimateAxisWidth(values.map((v) => formatValue(chart.f, o.format ?? chart.yFormat, v, { compact: true, compactFrom })));
91
+ }, [chart.data, chart.f, chart.yFormat, keys, o.stacked, o.format, o.percent]);
92
+ }
93
+ /** Recharts `onClick` → `onPointClick(row, seriesKey)` from the active tooltip index. */
94
+ export function usePointClick(seriesKey) {
95
+ const chart = useChart();
96
+ return React.useMemo(() => {
97
+ if (!chart.onPointClick)
98
+ return undefined;
99
+ return (state) => {
100
+ const i = Number(state?.activeTooltipIndex);
101
+ const row = Number.isInteger(i) ? chart.data[i] : undefined;
102
+ if (row)
103
+ chart.onPointClick?.(row, seriesKey ?? chart.visibleSeries[0]?.key ?? "");
104
+ };
105
+ }, [chart, seriesKey]);
106
+ }
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import { type ChartProps } from "./chart-shell.js";
3
+ import { type FormatSpec } from "./utils.js";
4
+ export interface ComboChartProps<T extends object> extends Omit<ChartProps<T>, "children"> {
5
+ /** Keys drawn as bars (default axis: start). */
6
+ bars: string[];
7
+ /** Keys drawn as lines (default axis: end). */
8
+ lines: string[];
9
+ /** Keys drawn as filled areas behind the bars. */
10
+ areas?: string[];
11
+ /** Format of the end axis. Default: the first end-axis series' format. */
12
+ endAxisFormat?: FormatSpec;
13
+ /** Show the end axis. Hidden: values still appear in the tooltip and table. Default `true`. */
14
+ endAxis?: boolean;
15
+ /** Stack the bars. */
16
+ stackBars?: boolean;
17
+ /** Axis titles (label + unit) — recommended, two value scales need naming. */
18
+ startAxisLabel?: string;
19
+ endAxisLabel?: string;
20
+ }
21
+ /**
22
+ * Volume and rate on two axes — bars on the start axis, a line on the end axis, zero lines aligned
23
+ * so neither scale exaggerates. Axis sides are logical and swap in RTL.
24
+ *
25
+ * ```tsx
26
+ * <ComboChart title="Quotes and win rate" data={rows} x="month" bars={["quotes"]} lines={["winRate"]} config={config} />
27
+ * ```
28
+ */
29
+ export declare function ComboChart<T extends object>({ bars, lines, areas, endAxisFormat, endAxis, stackBars, startAxisLabel, endAxisLabel, ...props }: ComboChartProps<T>): React.JSX.Element;