@handled-ai/design-system 0.8.0 → 0.9.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 (336) hide show
  1. package/README.md +14 -4
  2. package/dist/charts/bar-chart-component.d.ts +24 -0
  3. package/dist/charts/bar-chart-component.js +123 -0
  4. package/dist/charts/bar-chart-component.js.map +1 -0
  5. package/dist/charts/chart-tooltip.d.ts +26 -0
  6. package/dist/charts/chart-tooltip.js +69 -0
  7. package/dist/charts/chart-tooltip.js.map +1 -0
  8. package/dist/charts/chart.d.ts +64 -0
  9. package/dist/charts/chart.js +285 -0
  10. package/dist/charts/chart.js.map +1 -0
  11. package/dist/charts/donut-chart.d.ts +21 -0
  12. package/dist/charts/donut-chart.js +96 -0
  13. package/dist/charts/donut-chart.js.map +1 -0
  14. package/dist/charts/index.d.ts +11 -0
  15. package/dist/charts/index.js +10 -0
  16. package/dist/charts/index.js.map +1 -0
  17. package/dist/charts/pipeline-overview.d.ts +76 -0
  18. package/dist/charts/pipeline-overview.js +372 -0
  19. package/dist/charts/pipeline-overview.js.map +1 -0
  20. package/dist/charts/sankey-chart.d.ts +52 -0
  21. package/dist/charts/sankey-chart.js +219 -0
  22. package/dist/charts/sankey-chart.js.map +1 -0
  23. package/dist/charts/top-line-metrics.d.ts +26 -0
  24. package/dist/charts/top-line-metrics.js +224 -0
  25. package/dist/charts/top-line-metrics.js.map +1 -0
  26. package/dist/charts/trend-area-chart.d.ts +21 -0
  27. package/dist/charts/trend-area-chart.js +150 -0
  28. package/dist/charts/trend-area-chart.js.map +1 -0
  29. package/dist/charts/volume-analysis-chart.d.ts +19 -0
  30. package/dist/charts/volume-analysis-chart.js +121 -0
  31. package/dist/charts/volume-analysis-chart.js.map +1 -0
  32. package/dist/components/activity-detail.d.ts +38 -0
  33. package/dist/components/activity-detail.js +163 -0
  34. package/dist/components/activity-detail.js.map +1 -0
  35. package/dist/components/activity-log.d.ts +21 -0
  36. package/dist/components/activity-log.js +61 -0
  37. package/dist/components/activity-log.js.map +1 -0
  38. package/dist/components/agent-popover.d.ts +71 -0
  39. package/dist/components/agent-popover.js +282 -0
  40. package/dist/components/agent-popover.js.map +1 -0
  41. package/dist/components/agent-widget.d.ts +24 -0
  42. package/dist/components/agent-widget.js +117 -0
  43. package/dist/components/agent-widget.js.map +1 -0
  44. package/dist/components/avatar.d.ts +13 -0
  45. package/dist/components/avatar.js +140 -0
  46. package/dist/components/avatar.js.map +1 -0
  47. package/dist/components/badge.d.ts +12 -0
  48. package/dist/components/badge.js +75 -0
  49. package/dist/components/badge.js.map +1 -0
  50. package/dist/components/button.d.ts +13 -0
  51. package/dist/components/button.js +83 -0
  52. package/dist/components/button.js.map +1 -0
  53. package/dist/components/card.d.ts +11 -0
  54. package/dist/components/card.js +119 -0
  55. package/dist/components/card.js.map +1 -0
  56. package/dist/components/contact-list.d.ts +34 -0
  57. package/dist/components/contact-list.js +84 -0
  58. package/dist/components/contact-list.js.map +1 -0
  59. package/dist/components/dashboard-cards.d.ts +10 -0
  60. package/dist/components/dashboard-cards.js +164 -0
  61. package/dist/components/dashboard-cards.js.map +1 -0
  62. package/dist/components/data-table-display.d.ts +19 -0
  63. package/dist/components/data-table-display.js +109 -0
  64. package/dist/components/data-table-display.js.map +1 -0
  65. package/dist/components/data-table-filter.d.ts +18 -0
  66. package/dist/components/data-table-filter.js +107 -0
  67. package/dist/components/data-table-filter.js.map +1 -0
  68. package/dist/components/data-table-quick-views.d.ts +13 -0
  69. package/dist/components/data-table-quick-views.js +90 -0
  70. package/dist/components/data-table-quick-views.js.map +1 -0
  71. package/dist/components/data-table-toolbar.d.ts +18 -0
  72. package/dist/components/data-table-toolbar.js +45 -0
  73. package/dist/components/data-table-toolbar.js.map +1 -0
  74. package/dist/components/data-table.d.ts +39 -0
  75. package/dist/components/data-table.js +821 -0
  76. package/dist/components/data-table.js.map +1 -0
  77. package/dist/components/detail-view.d.ts +44 -0
  78. package/dist/components/detail-view.js +165 -0
  79. package/dist/components/detail-view.js.map +1 -0
  80. package/dist/components/dialog.d.ts +19 -0
  81. package/dist/components/dialog.js +188 -0
  82. package/dist/components/dialog.js.map +1 -0
  83. package/dist/components/dropdown-menu.d.ts +27 -0
  84. package/dist/components/dropdown-menu.js +279 -0
  85. package/dist/components/dropdown-menu.js.map +1 -0
  86. package/dist/components/entity-panel.d.ts +69 -0
  87. package/dist/components/entity-panel.js +584 -0
  88. package/dist/components/entity-panel.js.map +1 -0
  89. package/dist/components/inbox-row.d.ts +27 -0
  90. package/dist/components/inbox-row.js +139 -0
  91. package/dist/components/inbox-row.js.map +1 -0
  92. package/dist/components/inbox-toolbar.d.ts +21 -0
  93. package/dist/components/inbox-toolbar.js +203 -0
  94. package/dist/components/inbox-toolbar.js.map +1 -0
  95. package/dist/components/input.d.ts +5 -0
  96. package/dist/components/input.js +50 -0
  97. package/dist/components/input.js.map +1 -0
  98. package/dist/components/insights-filter-bar.d.ts +21 -0
  99. package/dist/components/insights-filter-bar.js +99 -0
  100. package/dist/components/insights-filter-bar.js.map +1 -0
  101. package/dist/components/item-list-display.d.ts +22 -0
  102. package/dist/components/item-list-display.js +240 -0
  103. package/dist/components/item-list-display.js.map +1 -0
  104. package/dist/components/item-list-filter.d.ts +16 -0
  105. package/dist/components/item-list-filter.js +87 -0
  106. package/dist/components/item-list-filter.js.map +1 -0
  107. package/dist/components/item-list-toolbar.d.ts +25 -0
  108. package/dist/components/item-list-toolbar.js +79 -0
  109. package/dist/components/item-list-toolbar.js.map +1 -0
  110. package/dist/components/item-list.d.ts +20 -0
  111. package/dist/components/item-list.js +702 -0
  112. package/dist/components/item-list.js.map +1 -0
  113. package/dist/components/label.d.ts +6 -0
  114. package/dist/components/label.js +55 -0
  115. package/dist/components/label.js.map +1 -0
  116. package/dist/components/message.d.ts +23 -0
  117. package/dist/components/message.js +117 -0
  118. package/dist/components/message.js.map +1 -0
  119. package/dist/components/metric-card.d.ts +25 -0
  120. package/dist/components/metric-card.js +107 -0
  121. package/dist/components/metric-card.js.map +1 -0
  122. package/dist/components/performance-metrics-table.d.ts +38 -0
  123. package/dist/components/performance-metrics-table.js +342 -0
  124. package/dist/components/performance-metrics-table.js.map +1 -0
  125. package/dist/components/preview-list.d.ts +14 -0
  126. package/dist/components/preview-list.js +83 -0
  127. package/dist/components/preview-list.js.map +1 -0
  128. package/dist/components/progress.d.ts +6 -0
  129. package/dist/components/progress.js +69 -0
  130. package/dist/components/progress.js.map +1 -0
  131. package/dist/components/quick-action-chat-area.d.ts +24 -0
  132. package/dist/components/quick-action-chat-area.js +178 -0
  133. package/dist/components/quick-action-chat-area.js.map +1 -0
  134. package/dist/components/quick-action-modal.d.ts +30 -0
  135. package/dist/components/quick-action-modal.js +288 -0
  136. package/dist/components/quick-action-modal.js.map +1 -0
  137. package/dist/components/quick-action-sidebar-nav.d.ts +51 -0
  138. package/dist/components/quick-action-sidebar-nav.js +528 -0
  139. package/dist/components/quick-action-sidebar-nav.js.map +1 -0
  140. package/dist/components/recommended-actions-section.d.ts +23 -0
  141. package/dist/components/recommended-actions-section.js +215 -0
  142. package/dist/components/recommended-actions-section.js.map +1 -0
  143. package/dist/components/report-card.d.ts +26 -0
  144. package/dist/components/report-card.js +69 -0
  145. package/dist/components/report-card.js.map +1 -0
  146. package/dist/components/score-analysis-modal.d.ts +26 -0
  147. package/dist/components/score-analysis-modal.js +141 -0
  148. package/dist/components/score-analysis-modal.js.map +1 -0
  149. package/dist/components/score-breakdown.d.ts +17 -0
  150. package/dist/components/score-breakdown.js +162 -0
  151. package/dist/components/score-breakdown.js.map +1 -0
  152. package/dist/components/score-feedback.d.ts +40 -0
  153. package/dist/components/score-feedback.js +209 -0
  154. package/dist/components/score-feedback.js.map +1 -0
  155. package/dist/components/score-ring.d.ts +14 -0
  156. package/dist/components/score-ring.js +79 -0
  157. package/dist/components/score-ring.js.map +1 -0
  158. package/dist/components/scroll-area.d.ts +7 -0
  159. package/dist/components/scroll-area.js +101 -0
  160. package/dist/components/scroll-area.js.map +1 -0
  161. package/dist/components/select.d.ts +17 -0
  162. package/dist/components/select.js +228 -0
  163. package/dist/components/select.js.map +1 -0
  164. package/dist/components/separator.d.ts +6 -0
  165. package/dist/components/separator.js +61 -0
  166. package/dist/components/separator.js.map +1 -0
  167. package/dist/components/sheet.d.ts +16 -0
  168. package/dist/components/sheet.js +168 -0
  169. package/dist/components/sheet.js.map +1 -0
  170. package/dist/components/sidebar.d.ts +73 -0
  171. package/dist/components/sidebar.js +723 -0
  172. package/dist/components/sidebar.js.map +1 -0
  173. package/dist/components/signal-feedback-inline.d.ts +51 -0
  174. package/dist/components/signal-feedback-inline.js +548 -0
  175. package/dist/components/signal-feedback-inline.js.map +1 -0
  176. package/dist/components/simple-data-table.d.ts +15 -0
  177. package/dist/components/simple-data-table.js +91 -0
  178. package/dist/components/simple-data-table.js.map +1 -0
  179. package/dist/components/skeleton.d.ts +5 -0
  180. package/dist/components/skeleton.js +44 -0
  181. package/dist/components/skeleton.js.map +1 -0
  182. package/dist/components/status-badge.d.ts +10 -0
  183. package/dist/components/status-badge.js +82 -0
  184. package/dist/components/status-badge.js.map +1 -0
  185. package/dist/components/styled-bar-list.d.ts +20 -0
  186. package/dist/components/styled-bar-list.js +59 -0
  187. package/dist/components/styled-bar-list.js.map +1 -0
  188. package/dist/components/suggested-actions.d.ts +110 -0
  189. package/dist/components/suggested-actions.js +1538 -0
  190. package/dist/components/suggested-actions.js.map +1 -0
  191. package/dist/components/table.d.ts +12 -0
  192. package/dist/components/table.js +147 -0
  193. package/dist/components/table.js.map +1 -0
  194. package/dist/components/tabs.d.ts +14 -0
  195. package/dist/components/tabs.js +129 -0
  196. package/dist/components/tabs.js.map +1 -0
  197. package/dist/components/textarea.d.ts +5 -0
  198. package/dist/components/textarea.js +47 -0
  199. package/dist/components/textarea.js.map +1 -0
  200. package/dist/components/timeline-activity.d.ts +34 -0
  201. package/dist/components/timeline-activity.js +181 -0
  202. package/dist/components/timeline-activity.js.map +1 -0
  203. package/dist/components/tooltip.d.ts +9 -0
  204. package/dist/components/tooltip.js +93 -0
  205. package/dist/components/tooltip.js.map +1 -0
  206. package/dist/components/view-mode-toggle.d.ts +16 -0
  207. package/dist/components/view-mode-toggle.js +24 -0
  208. package/dist/components/view-mode-toggle.js.map +1 -0
  209. package/dist/hooks/use-mobile.d.ts +3 -0
  210. package/dist/hooks/use-mobile.js +21 -0
  211. package/dist/hooks/use-mobile.js.map +1 -0
  212. package/dist/index.d.ts +68 -1878
  213. package/dist/index.js +69 -10918
  214. package/dist/index.js.map +1 -1
  215. package/dist/lib/icons.d.ts +18 -0
  216. package/dist/lib/icons.js +21 -0
  217. package/dist/lib/icons.js.map +1 -0
  218. package/dist/lib/utils.d.ts +5 -0
  219. package/dist/lib/utils.js +9 -0
  220. package/dist/lib/utils.js.map +1 -0
  221. package/dist/prototype/index.d.ts +20 -0
  222. package/dist/prototype/index.js +8 -0
  223. package/dist/prototype/index.js.map +1 -0
  224. package/dist/prototype/prototype-accounts-view.d.ts +22 -0
  225. package/dist/prototype/prototype-accounts-view.js +70 -0
  226. package/dist/prototype/prototype-accounts-view.js.map +1 -0
  227. package/dist/prototype/prototype-admin-view.d.ts +21 -0
  228. package/dist/prototype/prototype-admin-view.js +53 -0
  229. package/dist/prototype/prototype-admin-view.js.map +1 -0
  230. package/dist/prototype/prototype-config.d.ts +226 -0
  231. package/dist/prototype/prototype-config.js +1 -0
  232. package/dist/prototype/prototype-config.js.map +1 -0
  233. package/dist/prototype/prototype-inbox-view.d.ts +48 -0
  234. package/dist/prototype/prototype-inbox-view.js +701 -0
  235. package/dist/prototype/prototype-inbox-view.js.map +1 -0
  236. package/dist/prototype/prototype-insights-view.d.ts +23 -0
  237. package/dist/prototype/prototype-insights-view.js +335 -0
  238. package/dist/prototype/prototype-insights-view.js.map +1 -0
  239. package/dist/prototype/prototype-shell.d.ts +40 -0
  240. package/dist/prototype/prototype-shell.js +190 -0
  241. package/dist/prototype/prototype-shell.js.map +1 -0
  242. package/dist/prototype/prototype-work-queue-view.d.ts +8 -0
  243. package/dist/prototype/prototype-work-queue-view.js +17 -0
  244. package/dist/prototype/prototype-work-queue-view.js.map +1 -0
  245. package/dist/three/agent-orb.d.ts +39 -0
  246. package/dist/three/agent-orb.js +500 -0
  247. package/dist/three/agent-orb.js.map +1 -0
  248. package/dist/three/index.d.ts +2 -0
  249. package/dist/three/index.js +2 -0
  250. package/dist/three/index.js.map +1 -0
  251. package/package.json +98 -17
  252. package/src/charts/bar-chart-component.tsx +150 -0
  253. package/src/charts/chart-tooltip.tsx +86 -0
  254. package/src/charts/chart.tsx +371 -0
  255. package/src/charts/donut-chart.tsx +112 -0
  256. package/src/charts/index.ts +13 -0
  257. package/src/charts/pipeline-overview.tsx +476 -0
  258. package/src/charts/sankey-chart.tsx +290 -0
  259. package/src/charts/top-line-metrics.tsx +261 -0
  260. package/src/charts/trend-area-chart.tsx +150 -0
  261. package/src/charts/volume-analysis-chart.tsx +124 -0
  262. package/src/components/activity-detail.tsx +233 -0
  263. package/src/components/activity-log.tsx +89 -0
  264. package/src/components/agent-popover.tsx +373 -0
  265. package/src/components/agent-widget.tsx +163 -0
  266. package/src/components/avatar.tsx +109 -0
  267. package/src/components/badge.tsx +48 -0
  268. package/src/components/button.tsx +59 -0
  269. package/src/components/card.tsx +92 -0
  270. package/src/components/contact-list.tsx +121 -0
  271. package/src/components/dashboard-cards.tsx +170 -0
  272. package/src/components/data-table-display.tsx +139 -0
  273. package/src/components/data-table-filter.tsx +138 -0
  274. package/src/components/data-table-quick-views.tsx +103 -0
  275. package/src/components/data-table-toolbar.tsx +56 -0
  276. package/src/components/data-table.tsx +915 -0
  277. package/src/components/detail-view.tsx +237 -0
  278. package/src/components/dialog.tsx +158 -0
  279. package/src/components/dropdown-menu.tsx +257 -0
  280. package/src/components/entity-panel.tsx +767 -0
  281. package/src/components/inbox-row.tsx +132 -0
  282. package/src/components/inbox-toolbar.tsx +213 -0
  283. package/src/components/input.tsx +21 -0
  284. package/src/components/insights-filter-bar.tsx +132 -0
  285. package/src/components/item-list-display.tsx +278 -0
  286. package/src/components/item-list-filter.tsx +118 -0
  287. package/src/components/item-list-toolbar.tsx +97 -0
  288. package/src/components/item-list.tsx +843 -0
  289. package/src/components/label.tsx +24 -0
  290. package/src/components/message.tsx +83 -0
  291. package/src/components/metric-card.tsx +178 -0
  292. package/src/components/performance-metrics-table.tsx +442 -0
  293. package/src/components/preview-list.tsx +62 -0
  294. package/src/components/progress.tsx +31 -0
  295. package/src/components/quick-action-chat-area.tsx +156 -0
  296. package/src/components/quick-action-modal.tsx +331 -0
  297. package/src/components/quick-action-sidebar-nav.tsx +592 -0
  298. package/src/components/recommended-actions-section.tsx +258 -0
  299. package/src/components/report-card.tsx +106 -0
  300. package/src/components/score-analysis-modal.tsx +172 -0
  301. package/src/components/score-breakdown.tsx +179 -0
  302. package/src/components/score-feedback.tsx +288 -0
  303. package/src/components/score-ring.tsx +87 -0
  304. package/src/components/scroll-area.tsx +58 -0
  305. package/src/components/select.tsx +190 -0
  306. package/src/components/separator.tsx +28 -0
  307. package/src/components/sheet.tsx +143 -0
  308. package/src/components/sidebar.tsx +726 -0
  309. package/src/components/signal-feedback-inline.tsx +591 -0
  310. package/src/components/simple-data-table.tsx +124 -0
  311. package/src/components/skeleton.tsx +15 -0
  312. package/src/components/status-badge.tsx +63 -0
  313. package/src/components/styled-bar-list.tsx +70 -0
  314. package/src/components/suggested-actions.tsx +1985 -0
  315. package/src/components/table.tsx +116 -0
  316. package/src/components/tabs.tsx +91 -0
  317. package/src/components/textarea.tsx +18 -0
  318. package/src/components/timeline-activity.tsx +234 -0
  319. package/src/components/tooltip.tsx +57 -0
  320. package/src/components/view-mode-toggle.tsx +39 -0
  321. package/src/hooks/use-mobile.ts +21 -0
  322. package/src/index.ts +77 -0
  323. package/src/lib/icons.ts +18 -0
  324. package/src/lib/utils.ts +6 -0
  325. package/src/prototype/index.ts +11 -0
  326. package/src/prototype/prototype-accounts-view.tsx +112 -0
  327. package/src/prototype/prototype-admin-view.tsx +67 -0
  328. package/src/prototype/prototype-config.ts +243 -0
  329. package/src/prototype/prototype-inbox-view.tsx +810 -0
  330. package/src/prototype/prototype-insights-view.tsx +379 -0
  331. package/src/prototype/prototype-shell.tsx +219 -0
  332. package/src/prototype/prototype-work-queue-view.tsx +30 -0
  333. package/src/styles/globals.css +299 -0
  334. package/src/three/agent-orb.tsx +557 -0
  335. package/src/three/index.ts +5 -0
  336. package/src/types/r3f.d.ts +8 -0
@@ -0,0 +1,91 @@
1
+ "use client"
2
+
3
+ "use client";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import * as React from "react";
6
+ import {
7
+ flexRender,
8
+ getCoreRowModel,
9
+ getSortedRowModel,
10
+ useReactTable
11
+ } from "@tanstack/react-table";
12
+ import { ArrowDown, ArrowUp, ArrowUpDown, SearchX } from "lucide-react";
13
+ import { cn } from "../lib/utils.js";
14
+ function SimpleDataTable({
15
+ columns,
16
+ data,
17
+ onRowClick,
18
+ emptyIcon,
19
+ emptyMessage = "No rows found",
20
+ emptyDescription = "Try adjusting your filters",
21
+ className
22
+ }) {
23
+ const [sorting, setSorting] = React.useState([]);
24
+ const table = useReactTable({
25
+ data,
26
+ columns,
27
+ state: { sorting },
28
+ onSortingChange: setSorting,
29
+ getCoreRowModel: getCoreRowModel(),
30
+ getSortedRowModel: getSortedRowModel()
31
+ });
32
+ return /* @__PURE__ */ jsx("div", { className: cn("w-full", className), children: /* @__PURE__ */ jsxs("table", { className: "w-full border-collapse text-sm", children: [
33
+ /* @__PURE__ */ jsx("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(
34
+ "tr",
35
+ {
36
+ className: "border-b border-border/50 hover:bg-transparent",
37
+ children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx(
38
+ "th",
39
+ {
40
+ className: "h-9 px-3 text-left align-middle text-xs font-medium text-muted-foreground whitespace-nowrap",
41
+ children: header.isPlaceholder ? null : header.column.getCanSort() ? /* @__PURE__ */ jsxs(
42
+ "button",
43
+ {
44
+ type: "button",
45
+ className: "inline-flex items-center gap-1 hover:text-foreground transition-colors",
46
+ onClick: header.column.getToggleSortingHandler(),
47
+ children: [
48
+ flexRender(header.column.columnDef.header, header.getContext()),
49
+ header.column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "w-3 h-3" }) : header.column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ArrowUpDown, { className: "w-3 h-3 opacity-0 group-hover:opacity-50" })
50
+ ]
51
+ }
52
+ ) : flexRender(header.column.columnDef.header, header.getContext())
53
+ },
54
+ header.id
55
+ ))
56
+ },
57
+ headerGroup.id
58
+ )) }),
59
+ /* @__PURE__ */ jsx("tbody", { children: table.getRowModel().rows.length > 0 ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx(
60
+ "tr",
61
+ {
62
+ onClick: () => onRowClick == null ? void 0 : onRowClick(row.original),
63
+ className: cn(
64
+ "group border-none transition-colors",
65
+ onRowClick && "cursor-pointer"
66
+ ),
67
+ children: row.getVisibleCells().map((cell, cellIdx) => /* @__PURE__ */ jsx(
68
+ "td",
69
+ {
70
+ className: cn(
71
+ "px-3 py-3 align-middle whitespace-nowrap group-hover:bg-muted/50",
72
+ cellIdx === 0 && "rounded-l-lg",
73
+ cellIdx === row.getVisibleCells().length - 1 && "rounded-r-lg"
74
+ ),
75
+ children: flexRender(cell.column.columnDef.cell, cell.getContext())
76
+ },
77
+ cell.id
78
+ ))
79
+ },
80
+ row.id
81
+ )) : /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: columns.length, className: "h-52 px-4 text-center", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-1 text-muted-foreground", children: [
82
+ emptyIcon != null ? emptyIcon : /* @__PURE__ */ jsx(SearchX, { className: "h-7 w-7 opacity-40" }),
83
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: emptyMessage }),
84
+ /* @__PURE__ */ jsx("p", { className: "text-xs", children: emptyDescription })
85
+ ] }) }) }) })
86
+ ] }) });
87
+ }
88
+ export {
89
+ SimpleDataTable
90
+ };
91
+ //# sourceMappingURL=simple-data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/simple-data-table.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type SortingState,\n} from \"@tanstack/react-table\"\nimport { ArrowDown, ArrowUp, ArrowUpDown, SearchX } from \"lucide-react\"\n\nimport { cn } from \"../lib/utils\"\n\nexport interface SimpleDataTableProps<TData> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnDef<TData, any>[]\n data: TData[]\n onRowClick?: (row: TData) => void\n emptyIcon?: React.ReactNode\n emptyMessage?: string\n emptyDescription?: string\n className?: string\n}\n\nexport function SimpleDataTable<TData>({\n columns,\n data,\n onRowClick,\n emptyIcon,\n emptyMessage = \"No rows found\",\n emptyDescription = \"Try adjusting your filters\",\n className,\n}: SimpleDataTableProps<TData>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting },\n onSortingChange: setSorting,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n return (\n <div className={cn(\"w-full\", className)}>\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr\n key={headerGroup.id}\n className=\"border-b border-border/50 hover:bg-transparent\"\n >\n {headerGroup.headers.map((header) => (\n <th\n key={header.id}\n className=\"h-9 px-3 text-left align-middle text-xs font-medium text-muted-foreground whitespace-nowrap\"\n >\n {header.isPlaceholder ? null : header.column.getCanSort() ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 hover:text-foreground transition-colors\"\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getIsSorted() === \"asc\" ? (\n <ArrowUp className=\"w-3 h-3\" />\n ) : header.column.getIsSorted() === \"desc\" ? (\n <ArrowDown className=\"w-3 h-3\" />\n ) : (\n <ArrowUpDown className=\"w-3 h-3 opacity-0 group-hover:opacity-50\" />\n )}\n </button>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {table.getRowModel().rows.length > 0 ? (\n table.getRowModel().rows.map((row) => (\n <tr\n key={row.id}\n onClick={() => onRowClick?.(row.original)}\n className={cn(\n \"group border-none transition-colors\",\n onRowClick && \"cursor-pointer\",\n )}\n >\n {row.getVisibleCells().map((cell, cellIdx) => (\n <td\n key={cell.id}\n className={cn(\n \"px-3 py-3 align-middle whitespace-nowrap group-hover:bg-muted/50\",\n cellIdx === 0 && \"rounded-l-lg\",\n cellIdx === row.getVisibleCells().length - 1 && \"rounded-r-lg\",\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))\n ) : (\n <tr>\n <td colSpan={columns.length} className=\"h-52 px-4 text-center\">\n <div className=\"flex flex-col items-center gap-1 text-muted-foreground\">\n {emptyIcon ?? <SearchX className=\"h-7 w-7 opacity-40\" />}\n <p className=\"text-sm font-medium\">{emptyMessage}</p>\n <p className=\"text-xs\">{emptyDescription}</p>\n </div>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n )\n}\n"],"mappings":";AA6DoB,SAOI,KAPJ;AA3DpB,YAAY,WAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,WAAW,SAAS,aAAa,eAAe;AAEzD,SAAS,UAAU;AAaZ,SAAS,gBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB;AACF,GAAgC;AAC9B,QAAM,CAAC,SAAS,UAAU,IAAI,MAAM,SAAuB,CAAC,CAAC;AAE7D,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,OAAO,EAAE,QAAQ;AAAA,IACjB,iBAAiB;AAAA,IACjB,iBAAiB,gBAAgB;AAAA,IACjC,mBAAmB,kBAAkB;AAAA,EACvC,CAAC;AAED,SACE,oBAAC,SAAI,WAAW,GAAG,UAAU,SAAS,GACpC,+BAAC,WAAM,WAAU,kCACf;AAAA,wBAAC,WACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,gBAC5B;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET,sBAAY,QAAQ,IAAI,CAAC,WACxB;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YAET,iBAAO,gBAAgB,OAAO,OAAO,OAAO,WAAW,IACtD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,OAAO,OAAO,wBAAwB;AAAA,gBAE9C;AAAA,6BAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC;AAAA,kBAC9D,OAAO,OAAO,YAAY,MAAM,QAC/B,oBAAC,WAAQ,WAAU,WAAU,IAC3B,OAAO,OAAO,YAAY,MAAM,SAClC,oBAAC,aAAU,WAAU,WAAU,IAE/B,oBAAC,eAAY,WAAU,4CAA2C;AAAA;AAAA;AAAA,YAEtE,IAEA,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC;AAAA;AAAA,UAnB3D,OAAO;AAAA,QAqBd,CACD;AAAA;AAAA,MA3BI,YAAY;AAAA,IA4BnB,CACD,GACH;AAAA,IACA,oBAAC,WACE,gBAAM,YAAY,EAAE,KAAK,SAAS,IACjC,MAAM,YAAY,EAAE,KAAK,IAAI,CAAC,QAC5B;AAAA,MAAC;AAAA;AAAA,QAEC,SAAS,MAAM,yCAAa,IAAI;AAAA,QAChC,WAAW;AAAA,UACT;AAAA,UACA,cAAc;AAAA,QAChB;AAAA,QAEC,cAAI,gBAAgB,EAAE,IAAI,CAAC,MAAM,YAChC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW;AAAA,cACT;AAAA,cACA,YAAY,KAAK;AAAA,cACjB,YAAY,IAAI,gBAAgB,EAAE,SAAS,KAAK;AAAA,YAClD;AAAA,YAEC,qBAAW,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,CAAC;AAAA;AAAA,UAPpD,KAAK;AAAA,QAQZ,CACD;AAAA;AAAA,MAlBI,IAAI;AAAA,IAmBX,CACD,IAED,oBAAC,QACC,8BAAC,QAAG,SAAS,QAAQ,QAAQ,WAAU,yBACrC,+BAAC,SAAI,WAAU,0DACZ;AAAA,sCAAa,oBAAC,WAAQ,WAAU,sBAAqB;AAAA,MACtD,oBAAC,OAAE,WAAU,uBAAuB,wBAAa;AAAA,MACjD,oBAAC,OAAE,WAAU,WAAW,4BAAiB;AAAA,OAC3C,GACF,GACF,GAEJ;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+
3
+ declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
4
+
5
+ export { Skeleton };
@@ -0,0 +1,44 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ import { jsx } from "react/jsx-runtime";
30
+ import { cn } from "../lib/utils.js";
31
+ function Skeleton(_a) {
32
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
33
+ return /* @__PURE__ */ jsx(
34
+ "div",
35
+ __spreadValues({
36
+ "data-slot": "skeleton",
37
+ className: cn("bg-accent animate-pulse rounded-md", className)
38
+ }, props)
39
+ );
40
+ }
41
+ export {
42
+ Skeleton
43
+ };
44
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMI;AAJJ,SAAS,UAAU;AAEnB,SAAS,SAAS,IAAsD;AAAtD,eAAE,YAJpB,IAIkB,IAAgB,kBAAhB,IAAgB,CAAd;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,OACzD;AAAA,EACN;AAEJ;","names":[]}
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+
3
+ type StatusType = "success" | "warning" | "error" | "neutral";
4
+ interface StatusBadgeProps extends React.HTMLAttributes<HTMLDivElement> {
5
+ status: string;
6
+ statusMap?: Record<string, StatusType>;
7
+ }
8
+ declare function StatusBadge({ status, statusMap, className, ...props }: StatusBadgeProps): React.JSX.Element;
9
+
10
+ export { StatusBadge, type StatusBadgeProps, type StatusType };
@@ -0,0 +1,82 @@
1
+ "use client"
2
+
3
+ "use client";
4
+ var __defProp = Object.defineProperty;
5
+ var __defProps = Object.defineProperties;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+ import { jsx } from "react/jsx-runtime";
36
+ import { cn } from "../lib/utils.js";
37
+ const DEFAULT_STATUS_MAP = {};
38
+ const STATUS_KEYWORDS = {
39
+ success: ["active", "hired", "completed", "success", "shortlist", "approved", "resolved", "done"],
40
+ warning: ["pending", "new", "scheduled", "screening", "draft", "paused", "in_progress", "review"],
41
+ error: ["rejected", "failed", "cancelled", "error", "no_answer", "dropped", "blocked"],
42
+ neutral: []
43
+ };
44
+ function inferStatusType(status, statusMap) {
45
+ const lower = status.toLowerCase();
46
+ if (statusMap[lower]) return statusMap[lower];
47
+ for (const [type, keywords] of Object.entries(STATUS_KEYWORDS)) {
48
+ if (keywords.some((kw) => lower.includes(kw))) return type;
49
+ }
50
+ return "neutral";
51
+ }
52
+ const STATUS_STYLES = {
53
+ success: "bg-green-100 text-green-950 dark:bg-green-950 dark:text-green-100",
54
+ warning: "bg-yellow-100 text-yellow-950 dark:bg-yellow-950 dark:text-yellow-100",
55
+ error: "bg-red-100 text-red-950 dark:bg-red-950 dark:text-red-100",
56
+ neutral: "bg-muted text-foreground"
57
+ };
58
+ function formatStatus(status) {
59
+ return status.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
60
+ }
61
+ function StatusBadge(_a) {
62
+ var _b = _a, { status, statusMap = DEFAULT_STATUS_MAP, className } = _b, props = __objRest(_b, ["status", "statusMap", "className"]);
63
+ const type = inferStatusType(status, statusMap);
64
+ return /* @__PURE__ */ jsx(
65
+ "div",
66
+ __spreadProps(__spreadValues({
67
+ "data-slot": "status-badge",
68
+ "data-status": type,
69
+ className: cn(
70
+ "inline-flex items-center justify-center rounded-full px-2.5 h-6 text-xs font-medium transition-colors",
71
+ STATUS_STYLES[type],
72
+ className
73
+ )
74
+ }, props), {
75
+ children: formatStatus(status)
76
+ })
77
+ );
78
+ }
79
+ export {
80
+ StatusBadge
81
+ };
82
+ //# sourceMappingURL=status-badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/status-badge.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nexport type StatusType = \"success\" | \"warning\" | \"error\" | \"neutral\"\n\nexport interface StatusBadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n status: string\n statusMap?: Record<string, StatusType>\n}\n\nconst DEFAULT_STATUS_MAP: Record<string, StatusType> = {}\n\nconst STATUS_KEYWORDS: Record<StatusType, string[]> = {\n success: [\"active\", \"hired\", \"completed\", \"success\", \"shortlist\", \"approved\", \"resolved\", \"done\"],\n warning: [\"pending\", \"new\", \"scheduled\", \"screening\", \"draft\", \"paused\", \"in_progress\", \"review\"],\n error: [\"rejected\", \"failed\", \"cancelled\", \"error\", \"no_answer\", \"dropped\", \"blocked\"],\n neutral: [],\n}\n\nfunction inferStatusType(status: string, statusMap: Record<string, StatusType>): StatusType {\n const lower = status.toLowerCase()\n if (statusMap[lower]) return statusMap[lower]\n\n for (const [type, keywords] of Object.entries(STATUS_KEYWORDS) as [StatusType, string[]][]) {\n if (keywords.some((kw) => lower.includes(kw))) return type\n }\n\n return \"neutral\"\n}\n\nconst STATUS_STYLES: Record<StatusType, string> = {\n success: \"bg-green-100 text-green-950 dark:bg-green-950 dark:text-green-100\",\n warning: \"bg-yellow-100 text-yellow-950 dark:bg-yellow-950 dark:text-yellow-100\",\n error: \"bg-red-100 text-red-950 dark:bg-red-950 dark:text-red-100\",\n neutral: \"bg-muted text-foreground\",\n}\n\nfunction formatStatus(status: string): string {\n return status\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \")\n}\n\nexport function StatusBadge({ status, statusMap = DEFAULT_STATUS_MAP, className, ...props }: StatusBadgeProps) {\n const type = inferStatusType(status, statusMap)\n return (\n <div\n data-slot=\"status-badge\"\n data-status={type}\n className={cn(\n \"inline-flex items-center justify-center rounded-full px-2.5 h-6 text-xs font-medium transition-colors\",\n STATUS_STYLES[type],\n className\n )}\n {...props}\n >\n {formatStatus(status)}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDI;AA9CJ,SAAS,UAAU;AASnB,MAAM,qBAAiD,CAAC;AAExD,MAAM,kBAAgD;AAAA,EACpD,SAAS,CAAC,UAAU,SAAS,aAAa,WAAW,aAAa,YAAY,YAAY,MAAM;AAAA,EAChG,SAAS,CAAC,WAAW,OAAO,aAAa,aAAa,SAAS,UAAU,eAAe,QAAQ;AAAA,EAChG,OAAO,CAAC,YAAY,UAAU,aAAa,SAAS,aAAa,WAAW,SAAS;AAAA,EACrF,SAAS,CAAC;AACZ;AAEA,SAAS,gBAAgB,QAAgB,WAAmD;AAC1F,QAAM,QAAQ,OAAO,YAAY;AACjC,MAAI,UAAU,KAAK,EAAG,QAAO,UAAU,KAAK;AAE5C,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,eAAe,GAA+B;AAC1F,QAAI,SAAS,KAAK,CAAC,OAAO,MAAM,SAAS,EAAE,CAAC,EAAG,QAAO;AAAA,EACxD;AAEA,SAAO;AACT;AAEA,MAAM,gBAA4C;AAAA,EAChD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX;AAEA,SAAS,aAAa,QAAwB;AAC5C,SAAO,OACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AACb;AAEO,SAAS,YAAY,IAAmF;AAAnF,eAAE,UAAQ,YAAY,oBAAoB,UA9CtE,IA8C4B,IAAwD,kBAAxD,IAAwD,CAAtD,UAAQ,aAAgC;AACpE,QAAM,OAAO,gBAAgB,QAAQ,SAAS;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA,cAAc,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,OACI,QARL;AAAA,MAUE,uBAAa,MAAM;AAAA;AAAA,EACtB;AAEJ;","names":[]}
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ interface StyledBarItem {
4
+ name: string;
5
+ value: number;
6
+ href?: string;
7
+ subtitle?: string;
8
+ }
9
+ interface StyledBarListProps {
10
+ data: StyledBarItem[];
11
+ valueFormatter?: (value: number) => string;
12
+ className?: string;
13
+ showAnimation?: boolean;
14
+ showSubtitle?: boolean;
15
+ barColor?: string;
16
+ barStyle?: React.CSSProperties;
17
+ }
18
+ declare function StyledBarList({ data, valueFormatter, className, showAnimation, showSubtitle, barColor, barStyle, }: StyledBarListProps): React.JSX.Element;
19
+
20
+ export { type StyledBarItem, StyledBarList, type StyledBarListProps };
@@ -0,0 +1,59 @@
1
+ "use client"
2
+
3
+ "use client";
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ import { jsx, jsxs } from "react/jsx-runtime";
21
+ import { cn } from "../lib/utils.js";
22
+ function StyledBarList({
23
+ data,
24
+ valueFormatter = (value) => value.toString(),
25
+ className,
26
+ showAnimation = true,
27
+ showSubtitle = false,
28
+ barColor = "bg-emerald-500/30",
29
+ barStyle
30
+ }) {
31
+ const maxValue = Math.max(...data.map((item) => item.value));
32
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-2", className), children: data.map((item, index) => {
33
+ const percentage = item.value / maxValue * 100;
34
+ return /* @__PURE__ */ jsxs("div", { className: showSubtitle ? "space-y-1" : "", children: [
35
+ /* @__PURE__ */ jsxs("div", { className: "relative h-9 overflow-hidden rounded-md", children: [
36
+ /* @__PURE__ */ jsx(
37
+ "div",
38
+ {
39
+ className: cn(
40
+ "absolute inset-y-0 left-0 rounded-md",
41
+ !barStyle && barColor,
42
+ showAnimation && "transition-all duration-300"
43
+ ),
44
+ style: __spreadValues({ width: `${percentage}%` }, barStyle || {})
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsxs("div", { className: "relative flex h-full items-center justify-between px-3", children: [
48
+ /* @__PURE__ */ jsx("span", { className: "truncate pr-2 text-sm font-medium text-foreground", children: item.name }),
49
+ /* @__PURE__ */ jsx("span", { className: "ml-auto shrink-0 text-sm font-semibold text-foreground", children: valueFormatter(item.value) })
50
+ ] })
51
+ ] }),
52
+ showSubtitle && item.subtitle ? /* @__PURE__ */ jsx("div", { className: "pl-3 text-xs text-muted-foreground", children: item.subtitle }) : null
53
+ ] }, index);
54
+ }) });
55
+ }
56
+ export {
57
+ StyledBarList
58
+ };
59
+ //# sourceMappingURL=styled-bar-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/styled-bar-list.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../lib/utils\"\n\nexport interface StyledBarItem {\n name: string\n value: number\n href?: string\n subtitle?: string\n}\n\nexport interface StyledBarListProps {\n data: StyledBarItem[]\n valueFormatter?: (value: number) => string\n className?: string\n showAnimation?: boolean\n showSubtitle?: boolean\n barColor?: string\n barStyle?: React.CSSProperties\n}\n\nexport function StyledBarList({\n data,\n valueFormatter = (value) => value.toString(),\n className,\n showAnimation = true,\n showSubtitle = false,\n barColor = \"bg-emerald-500/30\",\n barStyle,\n}: StyledBarListProps) {\n const maxValue = Math.max(...data.map((item) => item.value))\n\n return (\n <div className={cn(\"space-y-2\", className)}>\n {data.map((item, index) => {\n const percentage = (item.value / maxValue) * 100\n\n return (\n <div key={index} className={showSubtitle ? \"space-y-1\" : \"\"}>\n <div className=\"relative h-9 overflow-hidden rounded-md\">\n <div\n className={cn(\n \"absolute inset-y-0 left-0 rounded-md\",\n !barStyle && barColor,\n showAnimation && \"transition-all duration-300\",\n )}\n style={{ width: `${percentage}%`, ...(barStyle || {}) }}\n />\n <div className=\"relative flex h-full items-center justify-between px-3\">\n <span className=\"truncate pr-2 text-sm font-medium text-foreground\">\n {item.name}\n </span>\n <span className=\"ml-auto shrink-0 text-sm font-semibold text-foreground\">\n {valueFormatter(item.value)}\n </span>\n </div>\n </div>\n {showSubtitle && item.subtitle ? (\n <div className=\"pl-3 text-xs text-muted-foreground\">\n {item.subtitle}\n </div>\n ) : null}\n </div>\n )\n })}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA0Cc,cAQA,YARA;AAtCd,SAAS,UAAU;AAmBZ,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,iBAAiB,CAAC,UAAU,MAAM,SAAS;AAAA,EAC3C;AAAA,EACA,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AACF,GAAuB;AACrB,QAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAE3D,SACE,oBAAC,SAAI,WAAW,GAAG,aAAa,SAAS,GACtC,eAAK,IAAI,CAAC,MAAM,UAAU;AACzB,UAAM,aAAc,KAAK,QAAQ,WAAY;AAE7C,WACE,qBAAC,SAAgB,WAAW,eAAe,cAAc,IACvD;AAAA,2BAAC,SAAI,WAAU,2CACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,CAAC,YAAY;AAAA,cACb,iBAAiB;AAAA,YACnB;AAAA,YACA,OAAO,iBAAE,OAAO,GAAG,UAAU,OAAS,YAAY,CAAC;AAAA;AAAA,QACrD;AAAA,QACA,qBAAC,SAAI,WAAU,0DACb;AAAA,8BAAC,UAAK,WAAU,qDACb,eAAK,MACR;AAAA,UACA,oBAAC,UAAK,WAAU,0DACb,yBAAe,KAAK,KAAK,GAC5B;AAAA,WACF;AAAA,SACF;AAAA,MACC,gBAAgB,KAAK,WACpB,oBAAC,SAAI,WAAU,sCACZ,eAAK,UACR,IACE;AAAA,SAvBI,KAwBV;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -0,0 +1,110 @@
1
+ import * as React from 'react';
2
+
3
+ interface SuggestedActionsIconMap {
4
+ gmail?: string;
5
+ slack?: string;
6
+ zendesk?: string;
7
+ salesforce?: string;
8
+ }
9
+ interface SuggestedContact {
10
+ name: string;
11
+ role: string;
12
+ email?: string;
13
+ emails?: string[];
14
+ phone?: string;
15
+ phones?: string[];
16
+ confirmed: boolean;
17
+ salesforceUrl?: string;
18
+ lastActivity?: {
19
+ date: string;
20
+ type: string;
21
+ };
22
+ }
23
+ interface SuggestedActionThreadMessage {
24
+ id: string;
25
+ from: string;
26
+ initials: string;
27
+ time: string;
28
+ preview: string;
29
+ content: string;
30
+ }
31
+ interface SuggestedActionReplyTo {
32
+ from: string;
33
+ time: string;
34
+ content: string;
35
+ channel?: string;
36
+ }
37
+ interface SuggestedActionTicket {
38
+ system: string;
39
+ priority: string;
40
+ type: string;
41
+ subject: string;
42
+ description: string;
43
+ assignee?: string;
44
+ tags?: string[];
45
+ }
46
+ interface SuggestedActionFollowUp {
47
+ enabled: boolean;
48
+ days: number;
49
+ }
50
+ interface SuggestedActionEmailMeta {
51
+ from: string;
52
+ fromEmail: string;
53
+ to?: SuggestedContact;
54
+ cc?: SuggestedContact[];
55
+ bcc?: string;
56
+ subject?: string;
57
+ }
58
+ interface SuggestedActionCallMeta {
59
+ contact?: SuggestedContact;
60
+ talkTrack: string;
61
+ allowDispatchAgent?: boolean;
62
+ }
63
+ interface SuggestedActionManualMeta {
64
+ taskDescription: string;
65
+ }
66
+ interface SuggestedActionBrowserMeta {
67
+ url: string;
68
+ actionDescription: string;
69
+ }
70
+ interface SuggestedAction {
71
+ id: number | string;
72
+ type: "email" | "ticket" | "slack" | "call" | "manual" | "browser";
73
+ label: string;
74
+ status: "pending" | "sent" | "dismissed";
75
+ content?: string;
76
+ replyTo?: SuggestedActionReplyTo;
77
+ threadMessages?: SuggestedActionThreadMessage[];
78
+ ticket?: SuggestedActionTicket;
79
+ followUp?: SuggestedActionFollowUp;
80
+ emailMeta?: SuggestedActionEmailMeta;
81
+ callMeta?: SuggestedActionCallMeta;
82
+ manualMeta?: SuggestedActionManualMeta;
83
+ browserMeta?: SuggestedActionBrowserMeta;
84
+ }
85
+ interface SuggestedActionsProps {
86
+ actions: SuggestedAction[];
87
+ title?: string;
88
+ onDismiss?: (id: number | string) => void;
89
+ onSend?: (id: number | string) => void;
90
+ onSaveDraft?: (id: number | string) => void;
91
+ accountContacts?: SuggestedContact[];
92
+ signature?: string | React.ReactNode;
93
+ onDuplicate?: (id: number | string) => void;
94
+ onOpenAccountDetails?: () => void;
95
+ onOpenRecentActivity?: () => void;
96
+ onMarkComplete?: (id: number | string) => void;
97
+ onDispatchAgent?: (id: number | string, editedContent?: string, settings?: {
98
+ aiDisclosureEnabled?: boolean;
99
+ maxDurationMinutes?: string;
100
+ callRecordingEnabled?: boolean;
101
+ recordingNoticeEnabled?: boolean;
102
+ }) => void;
103
+ iconMap?: SuggestedActionsIconMap;
104
+ sendLabel?: string;
105
+ accountDetailsLabel?: string;
106
+ dismissLabel?: string;
107
+ }
108
+ declare function SuggestedActions({ actions, title, onDismiss, onSend, onSaveDraft, accountContacts, signature, onDuplicate, onOpenAccountDetails, onOpenRecentActivity, onMarkComplete, onDispatchAgent, iconMap, sendLabel, accountDetailsLabel, dismissLabel, }: SuggestedActionsProps): React.JSX.Element;
109
+
110
+ export { type SuggestedAction, type SuggestedActionBrowserMeta, type SuggestedActionCallMeta, type SuggestedActionEmailMeta, type SuggestedActionFollowUp, type SuggestedActionManualMeta, type SuggestedActionReplyTo, type SuggestedActionThreadMessage, type SuggestedActionTicket, SuggestedActions, type SuggestedActionsIconMap, type SuggestedActionsProps, type SuggestedContact };