@kodffe/ui 0.0.0-stage → 0.10.1

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 (304) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +11 -0
  2. package/dist/accordion/accordion.d.ts +44 -0
  3. package/dist/accordion/accordion.js +84 -0
  4. package/dist/accordion/accordion.js.map +1 -0
  5. package/dist/alert/alert.d.ts +17 -0
  6. package/dist/alert/alert.js +59 -0
  7. package/dist/alert/alert.js.map +1 -0
  8. package/dist/app-shell/app-footer.d.ts +29 -0
  9. package/dist/app-shell/app-footer.js +39 -0
  10. package/dist/app-shell/app-footer.js.map +1 -0
  11. package/dist/app-shell/app-shell-context.d.ts +10 -0
  12. package/dist/app-shell/app-shell-context.js +12 -0
  13. package/dist/app-shell/app-shell-context.js.map +1 -0
  14. package/dist/app-shell/app-shell.d.ts +42 -0
  15. package/dist/app-shell/app-shell.js +191 -0
  16. package/dist/app-shell/app-shell.js.map +1 -0
  17. package/dist/app-shell/floating-actions.d.ts +19 -0
  18. package/dist/app-shell/floating-actions.js +59 -0
  19. package/dist/app-shell/floating-actions.js.map +1 -0
  20. package/dist/app-shell/workspace-switcher.d.ts +25 -0
  21. package/dist/app-shell/workspace-switcher.js +82 -0
  22. package/dist/app-shell/workspace-switcher.js.map +1 -0
  23. package/dist/badge/badge.d.ts +19 -0
  24. package/dist/badge/badge.js +59 -0
  25. package/dist/badge/badge.js.map +1 -0
  26. package/dist/banner/banner.d.ts +22 -0
  27. package/dist/banner/banner.js +80 -0
  28. package/dist/banner/banner.js.map +1 -0
  29. package/dist/breadcrumbs/breadcrumbs.d.ts +18 -0
  30. package/dist/breadcrumbs/breadcrumbs.js +45 -0
  31. package/dist/breadcrumbs/breadcrumbs.js.map +1 -0
  32. package/dist/button/button.d.ts +38 -0
  33. package/dist/button/button.js +83 -0
  34. package/dist/button/button.js.map +1 -0
  35. package/dist/card/card.d.ts +159 -0
  36. package/dist/card/card.js +390 -0
  37. package/dist/card/card.js.map +1 -0
  38. package/dist/card/insight-card.d.ts +19 -0
  39. package/dist/card/insight-card.js +51 -0
  40. package/dist/card/insight-card.js.map +1 -0
  41. package/dist/card/integration-card.d.ts +19 -0
  42. package/dist/card/integration-card.js +70 -0
  43. package/dist/card/integration-card.js.map +1 -0
  44. package/dist/charts/charts.d.ts +75 -0
  45. package/dist/charts/charts.js +453 -0
  46. package/dist/charts/charts.js.map +1 -0
  47. package/dist/choice/choice.d.ts +39 -0
  48. package/dist/choice/choice.js +143 -0
  49. package/dist/choice/choice.js.map +1 -0
  50. package/dist/combobox/combobox.d.ts +46 -0
  51. package/dist/combobox/combobox.js +196 -0
  52. package/dist/combobox/combobox.js.map +1 -0
  53. package/dist/command-palette/command-palette.d.ts +35 -0
  54. package/dist/command-palette/command-palette.js +164 -0
  55. package/dist/command-palette/command-palette.js.map +1 -0
  56. package/dist/confirm-dialog/confirm-dialog.d.ts +37 -0
  57. package/dist/confirm-dialog/confirm-dialog.js +106 -0
  58. package/dist/confirm-dialog/confirm-dialog.js.map +1 -0
  59. package/dist/content/assistant.d.ts +86 -0
  60. package/dist/content/assistant.js +213 -0
  61. package/dist/content/assistant.js.map +1 -0
  62. package/dist/content/content.d.ts +45 -0
  63. package/dist/content/content.js +136 -0
  64. package/dist/content/content.js.map +1 -0
  65. package/dist/data-display/avatar-sizes.d.ts +8 -0
  66. package/dist/data-display/avatar-sizes.js +12 -0
  67. package/dist/data-display/avatar-sizes.js.map +1 -0
  68. package/dist/data-display/avatar.d.ts +21 -0
  69. package/dist/data-display/avatar.js +53 -0
  70. package/dist/data-display/avatar.js.map +1 -0
  71. package/dist/data-display/chip.d.ts +20 -0
  72. package/dist/data-display/chip.js +64 -0
  73. package/dist/data-display/chip.js.map +1 -0
  74. package/dist/data-display/code-block.d.ts +14 -0
  75. package/dist/data-display/code-block.js +50 -0
  76. package/dist/data-display/code-block.js.map +1 -0
  77. package/dist/data-display/data-display.d.ts +73 -0
  78. package/dist/data-display/data-display.js +227 -0
  79. package/dist/data-display/data-display.js.map +1 -0
  80. package/dist/data-display/insights.d.ts +120 -0
  81. package/dist/data-display/insights.js +220 -0
  82. package/dist/data-display/insights.js.map +1 -0
  83. package/dist/data-table/cells.d.ts +86 -0
  84. package/dist/data-table/cells.js +163 -0
  85. package/dist/data-table/cells.js.map +1 -0
  86. package/dist/data-table/data-table.d.ts +112 -0
  87. package/dist/data-table/data-table.js +558 -0
  88. package/dist/data-table/data-table.js.map +1 -0
  89. package/dist/date-picker/date-picker.d.ts +61 -0
  90. package/dist/date-picker/date-picker.js +309 -0
  91. package/dist/date-picker/date-picker.js.map +1 -0
  92. package/dist/drawer/drawer.d.ts +32 -0
  93. package/dist/drawer/drawer.js +72 -0
  94. package/dist/drawer/drawer.js.map +1 -0
  95. package/dist/empty-state/empty-state.d.ts +25 -0
  96. package/dist/empty-state/empty-state.js +78 -0
  97. package/dist/empty-state/empty-state.js.map +1 -0
  98. package/dist/error-state/error-state.d.ts +19 -0
  99. package/dist/error-state/error-state.js +56 -0
  100. package/dist/error-state/error-state.js.map +1 -0
  101. package/dist/event-calendar/calendar-logic.test.d.ts +1 -0
  102. package/dist/event-calendar/dates.d.ts +35 -0
  103. package/dist/event-calendar/dates.js +55 -0
  104. package/dist/event-calendar/dates.js.map +1 -0
  105. package/dist/event-calendar/event-calendar.d.ts +125 -0
  106. package/dist/event-calendar/event-calendar.js +795 -0
  107. package/dist/event-calendar/event-calendar.js.map +1 -0
  108. package/dist/event-calendar/event-details.d.ts +50 -0
  109. package/dist/event-calendar/event-details.js +124 -0
  110. package/dist/event-calendar/event-details.js.map +1 -0
  111. package/dist/event-calendar/layout.d.ts +48 -0
  112. package/dist/event-calendar/layout.js +55 -0
  113. package/dist/event-calendar/layout.js.map +1 -0
  114. package/dist/file-upload/file-upload.d.ts +70 -0
  115. package/dist/file-upload/file-upload.js +307 -0
  116. package/dist/file-upload/file-upload.js.map +1 -0
  117. package/dist/filters/filters.d.ts +48 -0
  118. package/dist/filters/filters.js +103 -0
  119. package/dist/filters/filters.js.map +1 -0
  120. package/dist/form-field/form-field.d.ts +39 -0
  121. package/dist/form-field/form-field.js +88 -0
  122. package/dist/form-field/form-field.js.map +1 -0
  123. package/dist/hover-card/hover-card.d.ts +15 -0
  124. package/dist/hover-card/hover-card.js +27 -0
  125. package/dist/hover-card/hover-card.js.map +1 -0
  126. package/dist/hover-card/person-hover-card.d.ts +26 -0
  127. package/dist/hover-card/person-hover-card.js +85 -0
  128. package/dist/hover-card/person-hover-card.js.map +1 -0
  129. package/dist/icon/icon-tile.d.ts +20 -0
  130. package/dist/icon/icon-tile.js +55 -0
  131. package/dist/icon/icon-tile.js.map +1 -0
  132. package/dist/icon/icon.d.ts +14 -0
  133. package/dist/icon/icon.js +28 -0
  134. package/dist/icon/icon.js.map +1 -0
  135. package/dist/icon/icons.generated.d.ts +358 -0
  136. package/dist/icon/icons.generated.js +362 -0
  137. package/dist/icon/icons.generated.js.map +1 -0
  138. package/dist/index.d.ts +90 -0
  139. package/dist/index.js +88 -0
  140. package/dist/input/extra-inputs.d.ts +122 -0
  141. package/dist/input/extra-inputs.js +351 -0
  142. package/dist/input/extra-inputs.js.map +1 -0
  143. package/dist/input/field-styles.d.ts +5 -0
  144. package/dist/input/field-styles.js +14 -0
  145. package/dist/input/field-styles.js.map +1 -0
  146. package/dist/input/input.d.ts +50 -0
  147. package/dist/input/input.js +107 -0
  148. package/dist/input/input.js.map +1 -0
  149. package/dist/layout/layout.d.ts +41 -0
  150. package/dist/layout/layout.js +90 -0
  151. package/dist/layout/layout.js.map +1 -0
  152. package/dist/lib/control-styles.d.ts +9 -0
  153. package/dist/lib/control-styles.js +16 -0
  154. package/dist/lib/control-styles.js.map +1 -0
  155. package/dist/lib/cx.d.ts +2 -0
  156. package/dist/lib/cx.js +8 -0
  157. package/dist/lib/cx.js.map +1 -0
  158. package/dist/lib/glyphs.d.ts +13 -0
  159. package/dist/lib/glyphs.js +67 -0
  160. package/dist/lib/glyphs.js.map +1 -0
  161. package/dist/lib/segmented-styles.d.ts +8 -0
  162. package/dist/lib/segmented-styles.js +12 -0
  163. package/dist/lib/segmented-styles.js.map +1 -0
  164. package/dist/lib/select-on-arrow.d.ts +7 -0
  165. package/dist/lib/select-on-arrow.js +21 -0
  166. package/dist/lib/select-on-arrow.js.map +1 -0
  167. package/dist/lib/skip-link.d.ts +5 -0
  168. package/dist/lib/skip-link.js +13 -0
  169. package/dist/lib/skip-link.js.map +1 -0
  170. package/dist/lib/use-media-query.d.ts +4 -0
  171. package/dist/lib/use-media-query.js +15 -0
  172. package/dist/lib/use-media-query.js.map +1 -0
  173. package/dist/lists/lists.d.ts +76 -0
  174. package/dist/lists/lists.js +133 -0
  175. package/dist/lists/lists.js.map +1 -0
  176. package/dist/locale-switch/locale-switch.d.ts +29 -0
  177. package/dist/locale-switch/locale-switch.js +62 -0
  178. package/dist/locale-switch/locale-switch.js.map +1 -0
  179. package/dist/logo/logo.d.ts +31 -0
  180. package/dist/logo/logo.js +157 -0
  181. package/dist/logo/logo.js.map +1 -0
  182. package/dist/logo/product-logo.d.ts +19 -0
  183. package/dist/logo/product-logo.js +46 -0
  184. package/dist/logo/product-logo.js.map +1 -0
  185. package/dist/marketing/marketing.d.ts +176 -0
  186. package/dist/marketing/marketing.js +451 -0
  187. package/dist/marketing/marketing.js.map +1 -0
  188. package/dist/marketing/newsletter-form.d.ts +21 -0
  189. package/dist/marketing/newsletter-form.js +100 -0
  190. package/dist/marketing/newsletter-form.js.map +1 -0
  191. package/dist/mascot/mascot.d.ts +28 -0
  192. package/dist/mascot/mascot.js +28 -0
  193. package/dist/mascot/mascot.js.map +1 -0
  194. package/dist/mascot/mascots.generated.d.ts +284 -0
  195. package/dist/mascot/mascots.generated.js +287 -0
  196. package/dist/mascot/mascots.generated.js.map +1 -0
  197. package/dist/master-detail/master-detail.d.ts +30 -0
  198. package/dist/master-detail/master-detail.js +71 -0
  199. package/dist/master-detail/master-detail.js.map +1 -0
  200. package/dist/menu/account-menu.d.ts +44 -0
  201. package/dist/menu/account-menu.js +78 -0
  202. package/dist/menu/account-menu.js.map +1 -0
  203. package/dist/menu/context-menu.d.ts +31 -0
  204. package/dist/menu/context-menu.js +111 -0
  205. package/dist/menu/context-menu.js.map +1 -0
  206. package/dist/menu/dropdown-menu.d.ts +49 -0
  207. package/dist/menu/dropdown-menu.js +152 -0
  208. package/dist/menu/dropdown-menu.js.map +1 -0
  209. package/dist/menu/menu-styles.d.ts +8 -0
  210. package/dist/menu/menu-styles.js +6 -0
  211. package/dist/menu/menu-styles.js.map +1 -0
  212. package/dist/menu/menubar.d.ts +31 -0
  213. package/dist/menu/menubar.js +125 -0
  214. package/dist/menu/menubar.js.map +1 -0
  215. package/dist/modal/modal.d.ts +34 -0
  216. package/dist/modal/modal.js +58 -0
  217. package/dist/modal/modal.js.map +1 -0
  218. package/dist/notification-center/notification-center.d.ts +51 -0
  219. package/dist/notification-center/notification-center.js +244 -0
  220. package/dist/notification-center/notification-center.js.map +1 -0
  221. package/dist/otp-input/otp-input.d.ts +23 -0
  222. package/dist/otp-input/otp-input.js +61 -0
  223. package/dist/otp-input/otp-input.js.map +1 -0
  224. package/dist/overlay/overlay.d.ts +53 -0
  225. package/dist/overlay/overlay.js +103 -0
  226. package/dist/overlay/overlay.js.map +1 -0
  227. package/dist/page-header/page-header.d.ts +55 -0
  228. package/dist/page-header/page-header.js +114 -0
  229. package/dist/page-header/page-header.js.map +1 -0
  230. package/dist/page-header/record-headers.d.ts +51 -0
  231. package/dist/page-header/record-headers.js +134 -0
  232. package/dist/page-header/record-headers.js.map +1 -0
  233. package/dist/page-header/section-header.d.ts +21 -0
  234. package/dist/page-header/section-header.js +44 -0
  235. package/dist/page-header/section-header.js.map +1 -0
  236. package/dist/page-navigation/page-navigation.d.ts +59 -0
  237. package/dist/page-navigation/page-navigation.js +136 -0
  238. package/dist/page-navigation/page-navigation.js.map +1 -0
  239. package/dist/pagination/pagination.d.ts +28 -0
  240. package/dist/pagination/pagination.js +102 -0
  241. package/dist/pagination/pagination.js.map +1 -0
  242. package/dist/phone-input/phone-input.d.ts +34 -0
  243. package/dist/phone-input/phone-input.js +171 -0
  244. package/dist/phone-input/phone-input.js.map +1 -0
  245. package/dist/popover/popover.d.ts +23 -0
  246. package/dist/popover/popover.js +40 -0
  247. package/dist/popover/popover.js.map +1 -0
  248. package/dist/progress/progress.d.ts +21 -0
  249. package/dist/progress/progress.js +49 -0
  250. package/dist/progress/progress.js.map +1 -0
  251. package/dist/segmented-control/segmented-control.d.ts +32 -0
  252. package/dist/segmented-control/segmented-control.js +29 -0
  253. package/dist/segmented-control/segmented-control.js.map +1 -0
  254. package/dist/select/select.d.ts +48 -0
  255. package/dist/select/select.js +136 -0
  256. package/dist/select/select.js.map +1 -0
  257. package/dist/settings/permission-matrix.d.ts +29 -0
  258. package/dist/settings/permission-matrix.js +101 -0
  259. package/dist/settings/permission-matrix.js.map +1 -0
  260. package/dist/settings/settings-row.d.ts +32 -0
  261. package/dist/settings/settings-row.js +63 -0
  262. package/dist/settings/settings-row.js.map +1 -0
  263. package/dist/side-nav/side-nav.d.ts +36 -0
  264. package/dist/side-nav/side-nav.js +123 -0
  265. package/dist/side-nav/side-nav.js.map +1 -0
  266. package/dist/site-header/site-header.d.ts +32 -0
  267. package/dist/site-header/site-header.js +99 -0
  268. package/dist/site-header/site-header.js.map +1 -0
  269. package/dist/skeleton/skeleton.d.ts +16 -0
  270. package/dist/skeleton/skeleton.js +19 -0
  271. package/dist/skeleton/skeleton.js.map +1 -0
  272. package/dist/slider/slider.d.ts +15 -0
  273. package/dist/slider/slider.js +48 -0
  274. package/dist/slider/slider.js.map +1 -0
  275. package/dist/spinner/spinner.d.ts +15 -0
  276. package/dist/spinner/spinner.js +42 -0
  277. package/dist/spinner/spinner.js.map +1 -0
  278. package/dist/stepper/step-dots.d.ts +16 -0
  279. package/dist/stepper/step-dots.js +26 -0
  280. package/dist/stepper/step-dots.js.map +1 -0
  281. package/dist/stepper/stepper.d.ts +26 -0
  282. package/dist/stepper/stepper.js +113 -0
  283. package/dist/stepper/stepper.js.map +1 -0
  284. package/dist/tabs/tabs.d.ts +31 -0
  285. package/dist/tabs/tabs.js +66 -0
  286. package/dist/tabs/tabs.js.map +1 -0
  287. package/dist/templates/app-templates.d.ts +126 -0
  288. package/dist/templates/app-templates.js +153 -0
  289. package/dist/templates/app-templates.js.map +1 -0
  290. package/dist/templates/site-templates.d.ts +49 -0
  291. package/dist/templates/site-templates.js +110 -0
  292. package/dist/templates/site-templates.js.map +1 -0
  293. package/dist/toast/toast-store.d.ts +54 -0
  294. package/dist/toast/toast-store.js +49 -0
  295. package/dist/toast/toast-store.js.map +1 -0
  296. package/dist/toast/toaster.d.ts +15 -0
  297. package/dist/toast/toaster.js +124 -0
  298. package/dist/toast/toaster.js.map +1 -0
  299. package/dist/tooltip/tooltip.d.ts +29 -0
  300. package/dist/tooltip/tooltip.js +54 -0
  301. package/dist/tooltip/tooltip.js.map +1 -0
  302. package/package.json +88 -3
  303. package/styles.css +521 -0
  304. package/README.md +0 -3
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { cx as e } from "../lib/cx.js";
3
+ import { Glyph as t } from "../lib/glyphs.js";
4
+ import { Avatar as n } from "../data-display/avatar.js";
5
+ import { ChipList as r } from "../data-display/insights.js";
6
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
+ import "react";
8
+ //#region src/card/insight-card.tsx
9
+ function o({ name: o, handle: s, avatarSrc: c, summary: l, topics: u, action: d, headingLevel: f = 3, className: p }) {
10
+ let m = `h${f}`;
11
+ return /* @__PURE__ */ a("article", {
12
+ className: e("grid content-start gap-3 rounded-lg border border-border bg-surface p-card font-sans", p),
13
+ children: [
14
+ /* @__PURE__ */ a("div", {
15
+ className: "flex items-center gap-3",
16
+ children: [/* @__PURE__ */ i(n, {
17
+ name: o,
18
+ src: c,
19
+ size: "md",
20
+ decorative: !0
21
+ }), /* @__PURE__ */ a("div", {
22
+ className: "grid min-w-0",
23
+ children: [/* @__PURE__ */ i(m, {
24
+ className: "m-0 truncate text-[15px] font-semibold text-fg",
25
+ children: o
26
+ }), s && /* @__PURE__ */ i("span", {
27
+ className: "truncate text-xs text-fg-muted",
28
+ children: s
29
+ })]
30
+ })]
31
+ }),
32
+ /* @__PURE__ */ i("p", {
33
+ className: "m-0 line-clamp-3 text-sm text-fg-muted",
34
+ children: l
35
+ }),
36
+ u && u.length > 0 && /* @__PURE__ */ i(r, { items: u }),
37
+ d && /* @__PURE__ */ a("a", {
38
+ href: d.href,
39
+ className: "inline-flex w-fit items-center gap-1 rounded-xs text-sm font-semibold text-link no-underline hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus",
40
+ children: [d.label, /* @__PURE__ */ i(t, {
41
+ name: "chevron-right",
42
+ size: 14
43
+ })]
44
+ })
45
+ ]
46
+ });
47
+ }
48
+ //#endregion
49
+ export { o as InsightCard };
50
+
51
+ //# sourceMappingURL=insight-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-card.js","names":["InsightCard","H","headingLevel","cx","className","Avatar","avatarSrc","name","handle","summary","topics","ChipList","action","Glyph"],"sources":["../../src/card/insight-card.tsx"],"sourcesContent":["'use client';\nimport { type ReactNode } from 'react';\nimport { cx } from '../lib/cx';\nimport { Glyph } from '../lib/glyphs';\nimport { Avatar } from '../data-display/avatar';\nimport { ChipList, type ChipListItem } from '../data-display/insights';\n\n/* ---------------- InsightCard ---------------- */\n\nexport interface InsightCardProps {\n name: string;\n /** \"@ana\" or a role. */\n handle?: string;\n avatarSrc?: string;\n /** Clamped to three lines. */\n summary: ReactNode;\n topics?: ChipListItem[];\n action?: { label: string; href: string };\n headingLevel?: 2 | 3;\n className?: string;\n}\n\n/** A person's AI summary in a grid: avatar, name and handle, a clamped summary, topics and a link to the profile. */\nexport function InsightCard({\n name,\n handle,\n avatarSrc,\n summary,\n topics,\n action,\n headingLevel = 3,\n className,\n}: InsightCardProps) {\n const H = `h${headingLevel}` as const;\n return (\n <article\n className={cx('grid content-start gap-3 rounded-lg border border-border bg-surface p-card font-sans', className)}\n >\n <div className=\"flex items-center gap-3\">\n <Avatar name={name} src={avatarSrc} size=\"md\" decorative />\n <div className=\"grid min-w-0\">\n <H className=\"m-0 truncate text-[15px] font-semibold text-fg\">{name}</H>\n {handle && <span className=\"truncate text-xs text-fg-muted\">{handle}</span>}\n </div>\n </div>\n <p className=\"m-0 line-clamp-3 text-sm text-fg-muted\">{summary}</p>\n {topics && topics.length > 0 && <ChipList items={topics} />}\n {action && (\n <a\n href={action.href}\n className=\"inline-flex w-fit items-center gap-1 rounded-xs text-sm font-semibold text-link no-underline hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-focus\"\n >\n {action.label}\n <Glyph name=\"chevron-right\" size={14} />\n </a>\n )}\n </article>\n );\n}\n"],"mappings":";;;;;;;;AAuBA,SAAgBA,EAAY,EAC1B,SACA,WACA,cACA,YACA,WACA,WACA,kBAAe,GACf,gBACmB;CACnB,IAAMC,IAAI,IAAIC;CACd,OACE,kBAAC,WAAD;EACE,WAAWC,EAAG,wFAAwFC,CAAS;EADjH,UAAA;GAGE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAACC,GAAD;KAAc;KAAM,KAAKC;KAAW,MAAK;KAAK,YAAA;IAAY,CAAA,GAC1D,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAACL,GAAD;MAAG,WAAU;MAAkD,UAAAM;KAAQ,CAAA,GACtEC,KAAU,kBAAC,QAAD;MAAM,WAAU;MAAkC,UAAAA;KAAa,CAAA,CACvE;IACF,CAAA,CAAA;;GACL,kBAAC,KAAD;IAAG,WAAU;IAA0C,UAAAC;GAAW,CAAA;GACjEC,KAAUA,EAAO,SAAS,KAAK,kBAACC,GAAD,EAAU,OAAOD,EAAS,CAAA;GACzDE,KACC,kBAAC,KAAD;IACE,MAAMA,EAAO;IACb,WAAU;IAFZ,UAAA,CAIGA,EAAO,OACR,kBAACC,GAAD;KAAO,MAAK;KAAgB,MAAM;IAAK,CAAA,CACtC;;EAEE;;AAEb"}
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { IconName } from '../icon/icon';
3
+ export type IntegrationStatus = 'connected' | 'off' | 'not-connected';
4
+ export interface IntegrationCardProps {
5
+ name: string;
6
+ description?: ReactNode;
7
+ /** A brand icon (`b-slack`) or any logo element. */
8
+ logo: IconName | ReactNode;
9
+ status: IntegrationStatus;
10
+ /** Details when connected (account, last sync). */
11
+ children?: ReactNode;
12
+ /** Buttons: Connect, Sync now, Disconnect… */
13
+ actions?: ReactNode;
14
+ labels?: Partial<Record<IntegrationStatus, string>>;
15
+ headingLevel?: 2 | 3;
16
+ className?: string;
17
+ }
18
+ /** One connected app: logo, name, description, status, details and actions (Apps and integrations pages). */
19
+ export declare function IntegrationCard({ name, description, logo, status, children, actions, labels, headingLevel, className, }: IntegrationCardProps): import("react").JSX.Element;
@@ -0,0 +1,70 @@
1
+ "use client";
2
+ import { cx as e } from "../lib/cx.js";
3
+ import { Badge as t } from "../badge/badge.js";
4
+ import { IconTile as n } from "../icon/icon-tile.js";
5
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
+ import "react";
7
+ //#region src/card/integration-card.tsx
8
+ var a = {
9
+ connected: {
10
+ variant: "success",
11
+ label: "Connected"
12
+ },
13
+ off: {
14
+ variant: "warning",
15
+ label: "Turned off"
16
+ },
17
+ "not-connected": {
18
+ variant: "neutral",
19
+ label: "Not connected"
20
+ }
21
+ };
22
+ function o({ name: o, description: s, logo: c, status: l, children: u, actions: d, labels: f = {}, headingLevel: p = 3, className: m }) {
23
+ let h = `h${p}`, g = a[l];
24
+ return /* @__PURE__ */ i("article", {
25
+ className: e("grid content-start gap-4 rounded-lg border border-border bg-surface p-card font-sans", m),
26
+ children: [
27
+ /* @__PURE__ */ i("div", {
28
+ className: "flex items-start gap-3",
29
+ children: [typeof c == "string" ? /* @__PURE__ */ r(n, {
30
+ icon: c,
31
+ size: "lg",
32
+ tone: "outline"
33
+ }) : /* @__PURE__ */ r("span", {
34
+ "aria-hidden": "true",
35
+ className: "grid size-12 shrink-0 place-items-center rounded-md border border-border bg-bg",
36
+ children: c
37
+ }), /* @__PURE__ */ i("div", {
38
+ className: "grid min-w-0 flex-1 gap-1",
39
+ children: [/* @__PURE__ */ i("div", {
40
+ className: "flex flex-wrap items-center gap-2",
41
+ children: [/* @__PURE__ */ r(h, {
42
+ className: "m-0 text-base font-semibold text-fg",
43
+ children: o
44
+ }), /* @__PURE__ */ r(t, {
45
+ variant: g.variant,
46
+ appearance: "soft",
47
+ dot: l !== "not-connected",
48
+ children: f[l] ?? g.label
49
+ })]
50
+ }), s && /* @__PURE__ */ r("p", {
51
+ className: "m-0 text-sm text-pretty text-fg-muted",
52
+ children: s
53
+ })]
54
+ })]
55
+ }),
56
+ u && /* @__PURE__ */ r("div", {
57
+ className: "rounded-md bg-surface-muted p-3 text-sm text-fg-muted",
58
+ children: u
59
+ }),
60
+ d && /* @__PURE__ */ r("div", {
61
+ className: "flex flex-wrap gap-2",
62
+ children: d
63
+ })
64
+ ]
65
+ });
66
+ }
67
+ //#endregion
68
+ export { o as IntegrationCard };
69
+
70
+ //# sourceMappingURL=integration-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-card.js","names":["STATUS","IntegrationCard","H","headingLevel","s","status","cx","className","logo","IconTile","name","Badge","labels","description","children","actions"],"sources":["../../src/card/integration-card.tsx"],"sourcesContent":["'use client';\nimport { type ReactNode } from 'react';\nimport { cx } from '../lib/cx';\nimport { IconTile } from '../icon/icon-tile';\nimport type { IconName } from '../icon/icon';\nimport { Badge } from '../badge/badge';\n\n/* ---------------- IntegrationCard ---------------- */\n\nexport type IntegrationStatus = 'connected' | 'off' | 'not-connected';\n\nexport interface IntegrationCardProps {\n name: string;\n description?: ReactNode;\n /** A brand icon (`b-slack`) or any logo element. */\n logo: IconName | ReactNode;\n status: IntegrationStatus;\n /** Details when connected (account, last sync). */\n children?: ReactNode;\n /** Buttons: Connect, Sync now, Disconnect… */\n actions?: ReactNode;\n labels?: Partial<Record<IntegrationStatus, string>>;\n headingLevel?: 2 | 3;\n className?: string;\n}\n\nconst STATUS = {\n connected: { variant: 'success', label: 'Connected' },\n off: { variant: 'warning', label: 'Turned off' },\n 'not-connected': { variant: 'neutral', label: 'Not connected' },\n} as const;\n\n/** One connected app: logo, name, description, status, details and actions (Apps and integrations pages). */\nexport function IntegrationCard({\n name,\n description,\n logo,\n status,\n children,\n actions,\n labels = {},\n headingLevel = 3,\n className,\n}: IntegrationCardProps) {\n const H = `h${headingLevel}` as const;\n const s = STATUS[status];\n return (\n <article\n className={cx('grid content-start gap-4 rounded-lg border border-border bg-surface p-card font-sans', className)}\n >\n <div className=\"flex items-start gap-3\">\n {typeof logo === 'string' ? (\n <IconTile icon={logo as IconName} size=\"lg\" tone=\"outline\" />\n ) : (\n <span\n aria-hidden=\"true\"\n className=\"grid size-12 shrink-0 place-items-center rounded-md border border-border bg-bg\"\n >\n {logo}\n </span>\n )}\n <div className=\"grid min-w-0 flex-1 gap-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <H className=\"m-0 text-base font-semibold text-fg\">{name}</H>\n <Badge variant={s.variant} appearance=\"soft\" dot={status !== 'not-connected'}>\n {labels[status] ?? s.label}\n </Badge>\n </div>\n {description && <p className=\"m-0 text-sm text-pretty text-fg-muted\">{description}</p>}\n </div>\n </div>\n {children && <div className=\"rounded-md bg-surface-muted p-3 text-sm text-fg-muted\">{children}</div>}\n {actions && <div className=\"flex flex-wrap gap-2\">{actions}</div>}\n </article>\n );\n}\n"],"mappings":";;;;;;;AA0BA,IAAMA,IAAS;CACb,WAAW;EAAE,SAAS;EAAW,OAAO;CAAY;CACpD,KAAK;EAAE,SAAS;EAAW,OAAO;CAAa;CAC/C,iBAAiB;EAAE,SAAS;EAAW,OAAO;CAAgB;AAChE;AAGA,SAAgBC,EAAgB,EAC9B,SACA,gBACA,SACA,WACA,aACA,YACA,YAAS,CAAC,GACV,kBAAe,GACf,gBACuB;CACvB,IAAMC,IAAI,IAAIC,KACRC,IAAIJ,EAAOK;CACjB,OACE,kBAAC,WAAD;EACE,WAAWC,EAAG,wFAAwFC,CAAS;EADjH,UAAA;GAGE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,OAAOC,KAAS,WACf,kBAACC,GAAD;KAAU,MAAMD;KAAkB,MAAK;KAAK,MAAK;IAAW,CAAA,IAE5D,kBAAC,QAAD;KACE,eAAY;KACZ,WAAU;KAET,UAAAA;IACG,CAAA,GAER,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAACN,GAAD;OAAG,WAAU;OAAuC,UAAAQ;MAAQ,CAAA,GAC5D,kBAACC,GAAD;OAAO,SAASP,EAAE;OAAS,YAAW;OAAO,KAAKC,MAAW;OAC1D,UAAAO,EAAOP,MAAWD,EAAE;MAChB,CAAA,CACJ;KACJ,CAAA,GAAAS,KAAe,kBAAC,KAAD;MAAG,WAAU;MAAyC,UAAAA;KAAe,CAAA,CAClF;IACF,CAAA,CAAA;;GACJC,KAAY,kBAAC,OAAD;IAAK,WAAU;IAAyD;GAAc,CAAA;GAClGC,KAAW,kBAAC,OAAD;IAAK,WAAU;IAAwB,UAAAA;GAAa,CAAA;EACzD;;AAEb"}
@@ -0,0 +1,75 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const CHART_COLORS: string[];
3
+ export interface ChartSeries {
4
+ /** Key in each data row. */
5
+ key: string;
6
+ label: string;
7
+ /** CSS color; defaults to the next --kf-chart-* token. */
8
+ color?: string;
9
+ }
10
+ type Row = Record<string, string | number | null | undefined>;
11
+ interface BaseChartProps {
12
+ data: Row[];
13
+ /** Key of the category / x-axis value (e.g. "month"). */
14
+ index: string;
15
+ series: ChartSeries[];
16
+ /** Visible title; also names the chart for screen readers. */
17
+ title: ReactNode;
18
+ /** Plain-text title when `title` is not a string. */
19
+ ariaTitle?: string;
20
+ /** One-sentence takeaway ("Runs grew 38% in October"). */
21
+ description?: ReactNode;
22
+ height?: number;
23
+ /** Formats values on the axis, tooltip and data table (e.g. currency, %). */
24
+ valueFormatter?: (value: number) => string;
25
+ /** Formats the index on the axis and tooltip (e.g. dates). */
26
+ indexFormatter?: (value: string | number) => string;
27
+ showLegend?: boolean;
28
+ showGrid?: boolean;
29
+ /** Extra content in the header (e.g. a Tabs period switch). */
30
+ actions?: ReactNode;
31
+ /** A summary line under the chart ("Busiest day · Wednesday 381"). */
32
+ footer?: ReactNode;
33
+ className?: string;
34
+ }
35
+ export interface LineChartProps extends BaseChartProps {
36
+ /** Smooth curves (default) or straight segments. */
37
+ curve?: 'monotone' | 'linear';
38
+ }
39
+ /** Trends over time (runs per day, response time). */
40
+ export declare function LineChart({ data, index, series, height, valueFormatter, indexFormatter, showLegend, showGrid, curve, ...frame }: LineChartProps): import("react").JSX.Element;
41
+ export interface AreaChartProps extends BaseChartProps {
42
+ stacked?: boolean;
43
+ }
44
+ /** Volumes over time, optionally stacked (runs by workflow). */
45
+ export declare function AreaChart({ data, index, series, height, valueFormatter, indexFormatter, showLegend, showGrid, stacked, ...frame }: AreaChartProps): import("react").JSX.Element;
46
+ export interface BarChartProps extends BaseChartProps {
47
+ stacked?: boolean;
48
+ /** Horizontal bars for long category names (rankings). */
49
+ layout?: 'vertical-bars' | 'horizontal-bars';
50
+ /** A series plotted against a second axis on the right (tasks left, hours right). Vertical bars only. */
51
+ secondaryAxis?: string;
52
+ /** Formats the right axis (defaults to `valueFormatter`). */
53
+ secondaryValueFormatter?: (value: number) => string;
54
+ /** One category color per bar (a single series compared across categories). */
55
+ colorByCategory?: boolean;
56
+ }
57
+ export declare const CATEGORY_CHART_COLORS: string[];
58
+ /** Comparisons between categories (hours saved by workflow, runs per month). */
59
+ export declare function BarChart({ data, index, series, height, valueFormatter, indexFormatter, showLegend, showGrid, stacked, layout, secondaryAxis, secondaryValueFormatter, colorByCategory, ...frame }: BarChartProps): import("react").JSX.Element;
60
+ export interface DonutChartProps extends Omit<BaseChartProps, 'series' | 'index' | 'showGrid' | 'indexFormatter'> {
61
+ /** Key of the slice name. */
62
+ index: string;
63
+ /** Key of the slice value. */
64
+ valueKey: string;
65
+ /** Big number in the center (e.g. the total). */
66
+ centerLabel?: ReactNode;
67
+ /** Slice colors (default: the chart tokens). Pass `CATEGORY_CHART_COLORS` for more than five slices. */
68
+ colors?: string[];
69
+ /** Adds a percentage column to the legend. */
70
+ showPercent?: boolean;
71
+ centerSubLabel?: ReactNode;
72
+ }
73
+ /** Share of a whole with 2–5 slices (runs by status). For more categories use BarChart. */
74
+ export declare function DonutChart({ data, index, valueKey, height, valueFormatter, centerLabel, centerSubLabel, showLegend, colors, showPercent, ...frame }: DonutChartProps): import("react").JSX.Element;
75
+ export {};
@@ -0,0 +1,453 @@
1
+ "use client";
2
+ import { cx as e } from "../lib/cx.js";
3
+ import { useMediaQuery as t } from "../lib/use-media-query.js";
4
+ import { StatusLegend as n } from "../data-display/insights.js";
5
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
6
+ import { useId as o } from "react";
7
+ import { Area as s, AreaChart as c, Bar as l, BarChart as u, CartesianGrid as d, Cell as f, Line as p, LineChart as m, Pie as h, PieChart as g, ResponsiveContainer as _, Tooltip as v, XAxis as y, YAxis as b } from "recharts";
8
+ //#region src/charts/charts.tsx
9
+ var x = () => !t("(prefers-reduced-motion: reduce)", !1), S = [
10
+ "var(--kf-chart-1)",
11
+ "var(--kf-chart-2)",
12
+ "var(--kf-chart-3)",
13
+ "var(--kf-chart-4)",
14
+ "var(--kf-chart-5)"
15
+ ], C = (e, t) => e.color ?? S[t % S.length], w = (e, t) => typeof t == "number" ? e ? e(t) : t.toLocaleString() : String(t ?? "—"), T = {
16
+ stroke: "var(--kf-fg-muted)",
17
+ fontSize: 12,
18
+ tickLine: !1,
19
+ axisLine: !1
20
+ };
21
+ function E({ title: t, ariaTitle: r, description: s, actions: c, showLegend: l, series: u, className: d, children: f, table: p, footer: m }) {
22
+ let h = o();
23
+ return /* @__PURE__ */ a("figure", {
24
+ "aria-labelledby": `${h}-t`,
25
+ className: e("m-0 grid gap-4 rounded-lg border border-border bg-surface p-5 font-sans text-fg", d),
26
+ children: [
27
+ /* @__PURE__ */ a("figcaption", {
28
+ className: "flex flex-wrap items-start justify-between gap-3",
29
+ children: [/* @__PURE__ */ a("div", {
30
+ className: "grid gap-0.5",
31
+ children: [/* @__PURE__ */ i("span", {
32
+ id: `${h}-t`,
33
+ className: "font-display text-base font-bold",
34
+ children: t
35
+ }), s && /* @__PURE__ */ i("span", {
36
+ className: "text-sm text-fg-muted",
37
+ children: s
38
+ })]
39
+ }), c]
40
+ }),
41
+ l && u.length > 1 && /* @__PURE__ */ i("div", {
42
+ "aria-hidden": "true",
43
+ children: /* @__PURE__ */ i(n, { items: u.map((e, t) => ({
44
+ label: e.label,
45
+ color: C(e, t)
46
+ })) })
47
+ }),
48
+ /* @__PURE__ */ i("div", {
49
+ "aria-hidden": "true",
50
+ className: "min-w-0",
51
+ children: f
52
+ }),
53
+ m && /* @__PURE__ */ i("div", {
54
+ className: "border-t border-border pt-3 text-sm text-fg-muted",
55
+ children: m
56
+ }),
57
+ /* @__PURE__ */ a("div", {
58
+ className: "sr-only",
59
+ children: [r && /* @__PURE__ */ i("span", { children: r }), p]
60
+ })
61
+ ]
62
+ });
63
+ }
64
+ function D({ data: e, index: t, series: n, valueFormatter: r, indexFormatter: o, caption: s }) {
65
+ return /* @__PURE__ */ a("table", { children: [
66
+ /* @__PURE__ */ i("caption", { children: s }),
67
+ /* @__PURE__ */ i("thead", { children: /* @__PURE__ */ a("tr", { children: [/* @__PURE__ */ i("th", {
68
+ scope: "col",
69
+ children: t
70
+ }), n.map((e) => /* @__PURE__ */ i("th", {
71
+ scope: "col",
72
+ children: e.label
73
+ }, e.key))] }) }),
74
+ /* @__PURE__ */ i("tbody", { children: e.map((e, s) => /* @__PURE__ */ a("tr", { children: [/* @__PURE__ */ i("th", {
75
+ scope: "row",
76
+ children: o ? o(e[t]) : String(e[t])
77
+ }), n.map((t) => /* @__PURE__ */ i("td", { children: w(r, e[t.key]) }, t.key))] }, s)) })
78
+ ] });
79
+ }
80
+ function O({ active: e, payload: t, label: n, series: r, valueFormatter: o, indexFormatter: s }) {
81
+ return !e || !t?.length ? null : /* @__PURE__ */ a("div", {
82
+ className: "grid min-w-36 gap-1.5 rounded-md border border-border bg-surface px-3 py-2 font-sans text-sm text-fg shadow-overlay",
83
+ children: [n !== void 0 && /* @__PURE__ */ i("span", {
84
+ className: "font-semibold",
85
+ children: s ? s(n) : n
86
+ }), t.map((e) => {
87
+ let t = r.findIndex((t) => t.key === e.dataKey), n = r[t];
88
+ return /* @__PURE__ */ a("span", {
89
+ className: "flex items-center gap-2",
90
+ children: [
91
+ /* @__PURE__ */ i("span", {
92
+ className: "size-2.5 shrink-0 rounded-full",
93
+ style: { background: n ? C(n, t) : e.color }
94
+ }),
95
+ /* @__PURE__ */ i("span", {
96
+ className: "flex-1 text-fg-muted",
97
+ children: n?.label ?? e.dataKey
98
+ }),
99
+ /* @__PURE__ */ i("span", {
100
+ className: "font-semibold tabular-nums",
101
+ children: w(o, e.value)
102
+ })
103
+ ]
104
+ }, String(e.dataKey));
105
+ })]
106
+ });
107
+ }
108
+ function k(e, t) {
109
+ return t ?? (typeof e == "string" ? e : "Chart");
110
+ }
111
+ function A({ data: e, index: t, series: n, height: r = 260, valueFormatter: o, indexFormatter: s, showLegend: c = !0, showGrid: l = !0, curve: u = "monotone", ...f }) {
112
+ let h = x();
113
+ return /* @__PURE__ */ i(E, {
114
+ ...f,
115
+ series: n,
116
+ showLegend: c,
117
+ table: /* @__PURE__ */ i(D, {
118
+ caption: k(f.title, f.ariaTitle),
119
+ data: e,
120
+ index: t,
121
+ series: n,
122
+ valueFormatter: o,
123
+ indexFormatter: s
124
+ }),
125
+ children: /* @__PURE__ */ i(_, {
126
+ width: "100%",
127
+ height: r,
128
+ children: /* @__PURE__ */ a(m, {
129
+ accessibilityLayer: !1,
130
+ data: e,
131
+ margin: {
132
+ top: 8,
133
+ right: 8,
134
+ bottom: 0,
135
+ left: 0
136
+ },
137
+ children: [
138
+ l && /* @__PURE__ */ i(d, {
139
+ stroke: "var(--kf-border)",
140
+ vertical: !1
141
+ }),
142
+ /* @__PURE__ */ i(y, {
143
+ dataKey: t,
144
+ ...T,
145
+ tickFormatter: s,
146
+ minTickGap: 16
147
+ }),
148
+ /* @__PURE__ */ i(b, {
149
+ ...T,
150
+ width: 48,
151
+ tickFormatter: o
152
+ }),
153
+ /* @__PURE__ */ i(v, {
154
+ cursor: { stroke: "var(--kf-border)" },
155
+ content: /* @__PURE__ */ i(O, {
156
+ series: n,
157
+ valueFormatter: o,
158
+ indexFormatter: s
159
+ })
160
+ }),
161
+ n.map((e, t) => /* @__PURE__ */ i(p, {
162
+ isAnimationActive: h,
163
+ type: u,
164
+ dataKey: e.key,
165
+ name: e.label,
166
+ stroke: C(e, t),
167
+ strokeWidth: 2.5,
168
+ dot: !1,
169
+ activeDot: {
170
+ r: 5,
171
+ strokeWidth: 0
172
+ }
173
+ }, e.key))
174
+ ]
175
+ })
176
+ })
177
+ });
178
+ }
179
+ function j({ data: e, index: t, series: n, height: r = 260, valueFormatter: l, indexFormatter: u, showLegend: f = !0, showGrid: p = !0, stacked: m, ...h }) {
180
+ let g = x(), S = o().replace(/:/g, "");
181
+ return /* @__PURE__ */ i(E, {
182
+ ...h,
183
+ series: n,
184
+ showLegend: f,
185
+ table: /* @__PURE__ */ i(D, {
186
+ caption: k(h.title, h.ariaTitle),
187
+ data: e,
188
+ index: t,
189
+ series: n,
190
+ valueFormatter: l,
191
+ indexFormatter: u
192
+ }),
193
+ children: /* @__PURE__ */ i(_, {
194
+ width: "100%",
195
+ height: r,
196
+ children: /* @__PURE__ */ a(c, {
197
+ accessibilityLayer: !1,
198
+ data: e,
199
+ margin: {
200
+ top: 8,
201
+ right: 8,
202
+ bottom: 0,
203
+ left: 0
204
+ },
205
+ children: [
206
+ /* @__PURE__ */ i("defs", { children: n.map((e, t) => /* @__PURE__ */ a("linearGradient", {
207
+ id: `${S}-${t}`,
208
+ x1: "0",
209
+ x2: "0",
210
+ y1: "0",
211
+ y2: "1",
212
+ children: [/* @__PURE__ */ i("stop", {
213
+ offset: "0%",
214
+ stopColor: C(e, t),
215
+ stopOpacity: .35
216
+ }), /* @__PURE__ */ i("stop", {
217
+ offset: "100%",
218
+ stopColor: C(e, t),
219
+ stopOpacity: .02
220
+ })]
221
+ }, e.key)) }),
222
+ p && /* @__PURE__ */ i(d, {
223
+ stroke: "var(--kf-border)",
224
+ vertical: !1
225
+ }),
226
+ /* @__PURE__ */ i(y, {
227
+ dataKey: t,
228
+ ...T,
229
+ tickFormatter: u,
230
+ minTickGap: 16
231
+ }),
232
+ /* @__PURE__ */ i(b, {
233
+ ...T,
234
+ width: 48,
235
+ tickFormatter: l
236
+ }),
237
+ /* @__PURE__ */ i(v, {
238
+ cursor: { stroke: "var(--kf-border)" },
239
+ content: /* @__PURE__ */ i(O, {
240
+ series: n,
241
+ valueFormatter: l,
242
+ indexFormatter: u
243
+ })
244
+ }),
245
+ n.map((e, t) => /* @__PURE__ */ i(s, {
246
+ isAnimationActive: g,
247
+ type: "monotone",
248
+ dataKey: e.key,
249
+ name: e.label,
250
+ stackId: m ? "a" : void 0,
251
+ stroke: C(e, t),
252
+ strokeWidth: 2,
253
+ fill: `url(#${S}-${t})`
254
+ }, e.key))
255
+ ]
256
+ })
257
+ })
258
+ });
259
+ }
260
+ var M = Array.from({ length: 12 }, (e, t) => `var(--kf-category-${t + 1})`);
261
+ function N({ data: e, index: t, series: n, height: o = 260, valueFormatter: s, indexFormatter: c, showLegend: p = !0, showGrid: m = !0, stacked: h, layout: g = "vertical-bars", secondaryAxis: S, secondaryValueFormatter: w, colorByCategory: A, ...j }) {
262
+ let N = x(), P = g === "horizontal-bars", F = !P && !!S && n.some((e) => e.key === S);
263
+ return /* @__PURE__ */ i(E, {
264
+ ...j,
265
+ series: n,
266
+ showLegend: p,
267
+ table: /* @__PURE__ */ i(D, {
268
+ caption: k(j.title, j.ariaTitle),
269
+ data: e,
270
+ index: t,
271
+ series: n,
272
+ valueFormatter: s,
273
+ indexFormatter: c
274
+ }),
275
+ children: /* @__PURE__ */ i(_, {
276
+ width: "100%",
277
+ height: o,
278
+ children: /* @__PURE__ */ a(u, {
279
+ accessibilityLayer: !1,
280
+ data: e,
281
+ layout: P ? "vertical" : "horizontal",
282
+ margin: {
283
+ top: 8,
284
+ right: 8,
285
+ bottom: 0,
286
+ left: 0
287
+ },
288
+ barCategoryGap: "22%",
289
+ children: [
290
+ m && /* @__PURE__ */ i(d, {
291
+ stroke: "var(--kf-border)",
292
+ vertical: P,
293
+ horizontal: !P,
294
+ ...P ? {} : { yAxisId: "left" }
295
+ }),
296
+ P ? /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(y, {
297
+ type: "number",
298
+ ...T,
299
+ tickFormatter: s
300
+ }), /* @__PURE__ */ i(b, {
301
+ type: "category",
302
+ dataKey: t,
303
+ ...T,
304
+ width: 112,
305
+ tickFormatter: c
306
+ })] }) : /* @__PURE__ */ a(r, { children: [
307
+ /* @__PURE__ */ i(y, {
308
+ dataKey: t,
309
+ ...T,
310
+ tickFormatter: c,
311
+ minTickGap: 8
312
+ }),
313
+ /* @__PURE__ */ i(b, {
314
+ yAxisId: "left",
315
+ ...T,
316
+ width: 48,
317
+ tickFormatter: s
318
+ }),
319
+ F && /* @__PURE__ */ i(b, {
320
+ yAxisId: "right",
321
+ orientation: "right",
322
+ ...T,
323
+ width: 48,
324
+ tickFormatter: w ?? s
325
+ })
326
+ ] }),
327
+ /* @__PURE__ */ i(v, {
328
+ cursor: { fill: "var(--kf-surface-muted)" },
329
+ content: /* @__PURE__ */ i(O, {
330
+ series: n,
331
+ valueFormatter: s,
332
+ indexFormatter: c
333
+ })
334
+ }),
335
+ n.map((t, r) => /* @__PURE__ */ i(l, {
336
+ isAnimationActive: N,
337
+ dataKey: t.key,
338
+ name: t.label,
339
+ stackId: h ? "a" : void 0,
340
+ ...P ? {} : { yAxisId: F && t.key === S ? "right" : "left" },
341
+ fill: C(t, r),
342
+ radius: h && r < n.length - 1 ? 0 : P ? [
343
+ 0,
344
+ 6,
345
+ 6,
346
+ 0
347
+ ] : [
348
+ 6,
349
+ 6,
350
+ 0,
351
+ 0
352
+ ],
353
+ maxBarSize: 48,
354
+ children: A && e.map((e, t) => /* @__PURE__ */ i(f, { fill: M[t % M.length] }, t))
355
+ }, t.key))
356
+ ]
357
+ })
358
+ })
359
+ });
360
+ }
361
+ function P({ data: e, index: t, valueKey: n, height: r = 220, valueFormatter: o, centerLabel: s, centerSubLabel: c, showLegend: l = !0, colors: u = S, showPercent: d, ...p }) {
362
+ let m = x(), y = e.map((e) => ({
363
+ key: String(e[t]),
364
+ label: String(e[t])
365
+ })), b = e.reduce((e, t) => e + (Number(t[n]) || 0), 0);
366
+ return /* @__PURE__ */ i(E, {
367
+ ...p,
368
+ series: y,
369
+ showLegend: !1,
370
+ table: /* @__PURE__ */ a("table", { children: [/* @__PURE__ */ i("caption", { children: k(p.title, p.ariaTitle) }), /* @__PURE__ */ i("tbody", { children: e.map((e) => /* @__PURE__ */ a("tr", { children: [
371
+ /* @__PURE__ */ i("th", {
372
+ scope: "row",
373
+ children: String(e[t])
374
+ }),
375
+ /* @__PURE__ */ i("td", { children: w(o, e[n]) }),
376
+ /* @__PURE__ */ i("td", { children: b ? `${Math.round(Number(e[n]) / b * 100)}%` : "" })
377
+ ] }, String(e[t]))) })] }),
378
+ children: /* @__PURE__ */ a("div", {
379
+ className: "grid items-center gap-6 sm:grid-cols-[minmax(0,1fr)_auto]",
380
+ children: [/* @__PURE__ */ a("div", {
381
+ className: "relative",
382
+ children: [/* @__PURE__ */ i(_, {
383
+ width: "100%",
384
+ height: r,
385
+ children: /* @__PURE__ */ a(g, {
386
+ accessibilityLayer: !1,
387
+ children: [/* @__PURE__ */ i(v, { content: ({ active: e, payload: t }) => e && t?.length ? /* @__PURE__ */ a("div", {
388
+ className: "rounded-md border border-border bg-surface px-3 py-2 font-sans text-sm text-fg shadow-overlay",
389
+ children: [
390
+ /* @__PURE__ */ i("span", {
391
+ className: "font-semibold",
392
+ children: String(t[0].name)
393
+ }),
394
+ ":",
395
+ " ",
396
+ w(o, t[0].value)
397
+ ]
398
+ }) : null }), /* @__PURE__ */ i(h, {
399
+ isAnimationActive: m,
400
+ rootTabIndex: -1,
401
+ data: e,
402
+ dataKey: n,
403
+ nameKey: t,
404
+ innerRadius: "62%",
405
+ outerRadius: "90%",
406
+ paddingAngle: 2,
407
+ stroke: "var(--kf-surface)",
408
+ strokeWidth: 2,
409
+ children: e.map((e, t) => /* @__PURE__ */ i(f, { fill: u[t % u.length] }, t))
410
+ })]
411
+ })
412
+ }), s !== void 0 && /* @__PURE__ */ a("div", {
413
+ className: "pointer-events-none absolute inset-0 grid place-content-center text-center",
414
+ children: [/* @__PURE__ */ i("span", {
415
+ className: "font-display text-2xl font-extrabold tabular-nums",
416
+ children: s
417
+ }), c && /* @__PURE__ */ i("span", {
418
+ className: "text-xs text-fg-muted",
419
+ children: c
420
+ })]
421
+ })]
422
+ }), l && /* @__PURE__ */ i("ul", {
423
+ "aria-hidden": "true",
424
+ className: "m-0 grid list-none gap-2 p-0 text-sm",
425
+ children: e.map((e, r) => /* @__PURE__ */ a("li", {
426
+ className: "flex items-center gap-2",
427
+ children: [
428
+ /* @__PURE__ */ i("span", {
429
+ className: "size-2.5 rounded-full",
430
+ style: { background: u[r % u.length] }
431
+ }),
432
+ /* @__PURE__ */ i("span", {
433
+ className: "flex-1 text-fg-muted",
434
+ children: String(e[t])
435
+ }),
436
+ /* @__PURE__ */ i("span", {
437
+ className: "font-semibold tabular-nums",
438
+ children: w(o, e[n])
439
+ }),
440
+ d && /* @__PURE__ */ i("span", {
441
+ className: "w-10 text-right text-fg-muted tabular-nums",
442
+ children: b ? `${Math.round(Number(e[n]) / b * 100)}%` : ""
443
+ })
444
+ ]
445
+ }, String(e[t])))
446
+ })]
447
+ })
448
+ });
449
+ }
450
+ //#endregion
451
+ export { j as AreaChart, N as BarChart, M as CATEGORY_CHART_COLORS, S as CHART_COLORS, P as DonutChart, A as LineChart };
452
+
453
+ //# sourceMappingURL=charts.js.map