@schandlergarcia/sf-web-components 1.7.0 → 1.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 (188) hide show
  1. package/dist/components/library/cards/ActionList.d.ts +10 -10
  2. package/dist/components/library/cards/ActionList.js +2 -3
  3. package/dist/components/library/cards/ActionList.js.map +1 -1
  4. package/dist/components/library/cards/ActivityCard.d.ts +18 -5
  5. package/dist/components/library/cards/ActivityCard.js +3 -4
  6. package/dist/components/library/cards/ActivityCard.js.map +1 -1
  7. package/dist/components/library/cards/BaseCard.d.ts +30 -24
  8. package/dist/components/library/cards/BaseCard.js +2 -3
  9. package/dist/components/library/cards/BaseCard.js.map +1 -1
  10. package/dist/components/library/cards/CalloutCard.d.ts +11 -9
  11. package/dist/components/library/cards/CalloutCard.js +2 -3
  12. package/dist/components/library/cards/CalloutCard.js.map +1 -1
  13. package/dist/components/library/cards/ChartCard.d.ts +29 -17
  14. package/dist/components/library/cards/ChartCard.js +13 -14
  15. package/dist/components/library/cards/ChartCard.js.map +1 -1
  16. package/dist/components/library/cards/FeedPanel.d.ts +12 -11
  17. package/dist/components/library/cards/FeedPanel.js +3 -4
  18. package/dist/components/library/cards/FeedPanel.js.map +1 -1
  19. package/dist/components/library/cards/ListCard.d.ts +33 -20
  20. package/dist/components/library/cards/ListCard.js +35 -35
  21. package/dist/components/library/cards/ListCard.js.map +1 -1
  22. package/dist/components/library/cards/MetricCard.d.ts +23 -17
  23. package/dist/components/library/cards/MetricCard.js +10 -11
  24. package/dist/components/library/cards/MetricCard.js.map +1 -1
  25. package/dist/components/library/cards/MetricsStrip.d.ts +11 -11
  26. package/dist/components/library/cards/MetricsStrip.js +1 -1
  27. package/dist/components/library/cards/MetricsStrip.js.map +1 -1
  28. package/dist/components/library/cards/SectionCard.d.ts +17 -12
  29. package/dist/components/library/cards/SectionCard.js +18 -19
  30. package/dist/components/library/cards/SectionCard.js.map +1 -1
  31. package/dist/components/library/cards/SemanticMetricCard.d.ts +15 -20
  32. package/dist/components/library/cards/SemanticMetricCardWithLoading.d.ts +8 -7
  33. package/dist/components/library/cards/SemanticTableCard.d.ts +13 -18
  34. package/dist/components/library/cards/SemanticTableCardWithLoading.d.ts +8 -7
  35. package/dist/components/library/cards/StatusCard.d.ts +29 -15
  36. package/dist/components/library/cards/StatusCard.js +16 -17
  37. package/dist/components/library/cards/StatusCard.js.map +1 -1
  38. package/dist/components/library/cards/TableCard.d.ts +40 -23
  39. package/dist/components/library/cards/TableCard.js +59 -59
  40. package/dist/components/library/cards/TableCard.js.map +1 -1
  41. package/dist/components/library/cards/WidgetCard.d.ts +19 -11
  42. package/dist/components/library/cards/WidgetCard.js.map +1 -1
  43. package/dist/components/library/charts/D3Chart.d.ts +23 -16
  44. package/dist/components/library/charts/D3Chart.js.map +1 -1
  45. package/dist/components/library/charts/D3ChartTemplates.d.ts +33 -3
  46. package/dist/components/library/charts/D3ChartTemplates.js +7 -7
  47. package/dist/components/library/charts/D3ChartTemplates.js.map +1 -1
  48. package/dist/components/library/charts/GeoMap.d.ts +81 -18
  49. package/dist/components/library/charts/GeoMap.js +28 -26
  50. package/dist/components/library/charts/GeoMap.js.map +1 -1
  51. package/dist/components/library/chat/ChatBar.d.ts +14 -11
  52. package/dist/components/library/chat/ChatBar.js +2 -3
  53. package/dist/components/library/chat/ChatBar.js.map +1 -1
  54. package/dist/components/library/chat/ChatInput.d.ts +9 -8
  55. package/dist/components/library/chat/ChatInput.js.map +1 -1
  56. package/dist/components/library/chat/ChatMessage.d.ts +17 -4
  57. package/dist/components/library/chat/ChatMessage.js.map +1 -1
  58. package/dist/components/library/chat/ChatMessageList.d.ts +11 -8
  59. package/dist/components/library/chat/ChatMessageList.js.map +1 -1
  60. package/dist/components/library/chat/ChatPanel.d.ts +16 -12
  61. package/dist/components/library/chat/ChatPanel.js +8 -9
  62. package/dist/components/library/chat/ChatPanel.js.map +1 -1
  63. package/dist/components/library/chat/ChatSuggestions.d.ts +5 -4
  64. package/dist/components/library/chat/ChatSuggestions.js +2 -3
  65. package/dist/components/library/chat/ChatSuggestions.js.map +1 -1
  66. package/dist/components/library/chat/ChatToolCall.d.ts +11 -3
  67. package/dist/components/library/chat/ChatToolCall.js.map +1 -1
  68. package/dist/components/library/chat/ChatTypingIndicator.d.ts +4 -3
  69. package/dist/components/library/chat/ChatTypingIndicator.js +2 -3
  70. package/dist/components/library/chat/ChatTypingIndicator.js.map +1 -1
  71. package/dist/components/library/chat/ChatWelcome.d.ts +9 -7
  72. package/dist/components/library/chat/ChatWelcome.js +6 -7
  73. package/dist/components/library/chat/ChatWelcome.js.map +1 -1
  74. package/dist/components/library/chat/index.d.ts +10 -0
  75. package/dist/components/library/chat/useChatState.d.ts +36 -11
  76. package/dist/components/library/chat/useChatState.js +63 -46
  77. package/dist/components/library/chat/useChatState.js.map +1 -1
  78. package/dist/components/library/data/DataModeProvider.d.ts +15 -11
  79. package/dist/components/library/data/DataModeProvider.js +1 -1
  80. package/dist/components/library/data/DataModeProvider.js.map +1 -1
  81. package/dist/components/library/data/DataModeToggle.d.ts +4 -3
  82. package/dist/components/library/data/DataModeToggle.js +4 -5
  83. package/dist/components/library/data/DataModeToggle.js.map +1 -1
  84. package/dist/components/library/data/chartDataProvider.d.ts +41 -3
  85. package/dist/components/library/data/filterUtils.d.ts +38 -9
  86. package/dist/components/library/data/filterUtils.js.map +1 -1
  87. package/dist/components/library/data/useDataSource.d.ts +6 -4
  88. package/dist/components/library/data/useDataSource.js.map +1 -1
  89. package/dist/components/library/data/usePageFilters.d.ts +31 -5
  90. package/dist/components/library/data/usePageFilters.js +6 -2
  91. package/dist/components/library/data/usePageFilters.js.map +1 -1
  92. package/dist/components/library/filters/FilterBar.d.ts +18 -8
  93. package/dist/components/library/filters/FilterBar.js +2 -3
  94. package/dist/components/library/filters/FilterBar.js.map +1 -1
  95. package/dist/components/library/filters/SearchFilter.d.ts +7 -6
  96. package/dist/components/library/filters/SearchFilter.js +2 -3
  97. package/dist/components/library/filters/SearchFilter.js.map +1 -1
  98. package/dist/components/library/filters/SelectFilter.d.ts +13 -7
  99. package/dist/components/library/filters/SelectFilter.js +2 -3
  100. package/dist/components/library/filters/SelectFilter.js.map +1 -1
  101. package/dist/components/library/filters/ToggleFilter.d.ts +7 -5
  102. package/dist/components/library/filters/ToggleFilter.js +2 -3
  103. package/dist/components/library/filters/ToggleFilter.js.map +1 -1
  104. package/dist/components/library/forms/FormField.d.ts +10 -8
  105. package/dist/components/library/forms/FormField.js +3 -4
  106. package/dist/components/library/forms/FormField.js.map +1 -1
  107. package/dist/components/library/forms/FormModal.d.ts +23 -14
  108. package/dist/components/library/forms/FormModal.js.map +1 -1
  109. package/dist/components/library/forms/FormRenderer.d.ts +29 -9
  110. package/dist/components/library/forms/FormRenderer.js +6 -7
  111. package/dist/components/library/forms/FormRenderer.js.map +1 -1
  112. package/dist/components/library/forms/FormSection.d.ts +10 -8
  113. package/dist/components/library/forms/FormSection.js +2 -3
  114. package/dist/components/library/forms/FormSection.js.map +1 -1
  115. package/dist/components/library/forms/index.d.ts +5 -0
  116. package/dist/components/library/forms/useFormState.d.ts +23 -15
  117. package/dist/components/library/forms/useFormState.js +53 -47
  118. package/dist/components/library/forms/useFormState.js.map +1 -1
  119. package/dist/components/library/index.d.ts +92 -73
  120. package/dist/components/library/index.js +25 -25
  121. package/dist/components/library/index.js.map +1 -1
  122. package/dist/components/library/layout/PageContainer.d.ts +6 -4
  123. package/dist/components/library/layout/PageContainer.js +4 -5
  124. package/dist/components/library/layout/PageContainer.js.map +1 -1
  125. package/dist/components/library/skeletons/CardSkeleton.d.ts +5 -4
  126. package/dist/components/library/skeletons/CardSkeleton.js +2 -3
  127. package/dist/components/library/skeletons/CardSkeleton.js.map +1 -1
  128. package/dist/components/library/theme/AppThemeProvider.d.ts +13 -50
  129. package/dist/components/library/theme/AppThemeProvider.js.map +1 -1
  130. package/dist/components/library/theme/tokens.d.ts +45 -44
  131. package/dist/components/library/theme/tokens.js.map +1 -1
  132. package/package.json +4 -1
  133. package/src/components/library/cards/{ActionList.jsx → ActionList.tsx} +13 -9
  134. package/src/components/library/cards/{ActivityCard.jsx → ActivityCard.tsx} +33 -4
  135. package/src/components/library/cards/{BaseCard.jsx → BaseCard.tsx} +33 -6
  136. package/src/components/library/cards/{CalloutCard.jsx → CalloutCard.tsx} +12 -10
  137. package/src/components/library/cards/{ChartCard.jsx → ChartCard.tsx} +32 -6
  138. package/src/components/library/cards/{FeedPanel.jsx → FeedPanel.tsx} +13 -2
  139. package/src/components/library/cards/{ListCard.jsx → ListCard.tsx} +43 -7
  140. package/src/components/library/cards/{MetricCard.jsx → MetricCard.tsx} +25 -6
  141. package/src/components/library/cards/{MetricsStrip.jsx → MetricsStrip.tsx} +22 -12
  142. package/src/components/library/cards/{SectionCard.jsx → SectionCard.tsx} +27 -8
  143. package/src/components/library/cards/{SemanticMetricCard.jsx → SemanticMetricCard.tsx} +18 -6
  144. package/src/components/library/cards/{SemanticMetricCardWithLoading.jsx → SemanticMetricCardWithLoading.tsx} +9 -3
  145. package/src/components/library/cards/{SemanticTableCard.jsx → SemanticTableCard.tsx} +16 -5
  146. package/src/components/library/cards/{SemanticTableCardWithLoading.jsx → SemanticTableCardWithLoading.tsx} +9 -5
  147. package/src/components/library/cards/{StatusCard.jsx → StatusCard.tsx} +61 -12
  148. package/src/components/library/cards/{TableCard.jsx → TableCard.tsx} +51 -12
  149. package/src/components/library/cards/{WidgetCard.jsx → WidgetCard.tsx} +28 -5
  150. package/src/components/library/charts/{D3Chart.jsx → D3Chart.tsx} +27 -7
  151. package/src/components/library/charts/{D3ChartTemplates.jsx → D3ChartTemplates.tsx} +60 -28
  152. package/src/components/library/charts/{GeoMap.jsx → GeoMap.tsx} +106 -17
  153. package/src/components/library/chat/{ChatBar.jsx → ChatBar.tsx} +19 -8
  154. package/src/components/library/chat/{ChatInput.jsx → ChatInput.tsx} +13 -11
  155. package/src/components/library/chat/{ChatMessage.jsx → ChatMessage.tsx} +22 -9
  156. package/src/components/library/chat/{ChatMessageList.jsx → ChatMessageList.tsx} +13 -11
  157. package/src/components/library/chat/{ChatPanel.jsx → ChatPanel.tsx} +16 -13
  158. package/src/components/library/chat/{ChatSuggestions.jsx → ChatSuggestions.tsx} +6 -5
  159. package/src/components/library/chat/{ChatToolCall.jsx → ChatToolCall.tsx} +14 -4
  160. package/src/components/library/chat/{ChatTypingIndicator.jsx → ChatTypingIndicator.tsx} +5 -2
  161. package/src/components/library/chat/{ChatWelcome.jsx → ChatWelcome.tsx} +9 -7
  162. package/src/components/library/chat/index.tsx +26 -0
  163. package/src/components/library/chat/useChatState.tsx +181 -0
  164. package/src/components/library/data/{DataModeProvider.jsx → DataModeProvider.tsx} +25 -8
  165. package/src/components/library/data/{DataModeToggle.jsx → DataModeToggle.tsx} +5 -2
  166. package/src/components/library/data/{chartDataProvider.jsx → chartDataProvider.tsx} +49 -5
  167. package/src/components/library/data/{filterUtils.jsx → filterUtils.tsx} +58 -12
  168. package/src/components/library/data/{useDataSource.jsx → useDataSource.tsx} +9 -2
  169. package/src/components/library/data/{usePageFilters.jsx → usePageFilters.tsx} +49 -9
  170. package/src/components/library/filters/{FilterBar.jsx → FilterBar.tsx} +21 -11
  171. package/src/components/library/filters/{SearchFilter.jsx → SearchFilter.tsx} +8 -2
  172. package/src/components/library/filters/{SelectFilter.jsx → SelectFilter.tsx} +15 -8
  173. package/src/components/library/filters/{ToggleFilter.jsx → ToggleFilter.tsx} +7 -6
  174. package/src/components/library/forms/{FormField.jsx → FormField.tsx} +91 -45
  175. package/src/components/library/forms/{FormModal.jsx → FormModal.tsx} +21 -20
  176. package/src/components/library/forms/{FormRenderer.jsx → FormRenderer.tsx} +32 -10
  177. package/src/components/library/forms/{FormSection.jsx → FormSection.tsx} +13 -7
  178. package/src/components/library/forms/index.tsx +11 -0
  179. package/src/components/library/forms/{useFormState.jsx → useFormState.tsx} +43 -23
  180. package/src/components/library/{index.jsx → index.ts} +14 -14
  181. package/src/components/library/layout/{PageContainer.jsx → PageContainer.tsx} +6 -3
  182. package/src/components/library/skeletons/{CardSkeleton.jsx → CardSkeleton.tsx} +5 -4
  183. package/src/components/library/theme/{AppThemeProvider.jsx → AppThemeProvider.tsx} +20 -7
  184. package/src/components/library/theme/{tokens.jsx → tokens.tsx} +37 -3
  185. package/src/components/library/chat/index.jsx +0 -10
  186. package/src/components/library/chat/useChatState.jsx +0 -130
  187. package/src/components/library/forms/index.jsx +0 -5
  188. /package/src/components/library/filters/{index.jsx → index.ts} +0 -0
@@ -1,11 +1,11 @@
1
- /**
2
- * Row of action buttons — typically used at the bottom of a dashboard section.
3
- *
4
- * @param {{ label: string, [key]: any }[] | string[]} actions
5
- * @param {string} title
6
- * @param {Function} onAction Called with the action object/string when clicked
7
- */
8
- export default function ActionList({ actions, title, onAction, className, }: {
1
+ export interface Action {
9
2
  label: string;
10
- [key]: any;
11
- }[] | string[]): import("react/jsx-runtime").JSX.Element;
3
+ [key: string]: unknown;
4
+ }
5
+ export interface ActionListProps {
6
+ actions?: (Action | string)[];
7
+ title?: string;
8
+ onAction?: (action: Action | string) => void;
9
+ className?: string;
10
+ }
11
+ export default function ActionList({ actions, title, onAction, className, }: ActionListProps): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,6 @@
1
1
  import { jsxs as i, jsx as r } from "react/jsx-runtime";
2
- import "react";
3
2
  import m from "../ui/UIButton.js";
4
- function x({
3
+ function p({
5
4
  actions: s = [],
6
5
  title: t,
7
6
  onAction: l,
@@ -22,6 +21,6 @@ function x({
22
21
  ] });
23
22
  }
24
23
  export {
25
- x as default
24
+ p as default
26
25
  };
27
26
  //# sourceMappingURL=ActionList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionList.js","sources":["../../../../src/components/library/cards/ActionList.jsx"],"sourcesContent":["import React from \"react\";\nimport UIButton from \"../ui/UIButton\";\n\n/**\n * Row of action buttons — typically used at the bottom of a dashboard section.\n *\n * @param {{ label: string, [key]: any }[] | string[]} actions\n * @param {string} title\n * @param {Function} onAction Called with the action object/string when clicked\n */\nexport default function ActionList({\n actions = [],\n title,\n onAction,\n className = \"\",\n}) {\n return (\n <div className={`rounded-2xl border border-slate-200 bg-white p-4 dark:border-slate-800 dark:bg-slate-900 ${className}`}>\n {title && (\n <div className=\"mb-3 text-sm font-medium text-slate-900 dark:text-slate-50\">\n {title}\n </div>\n )}\n <div className=\"flex flex-wrap gap-2\">\n {actions.map((action, i) => (\n <UIButton\n key={i}\n size=\"sm\"\n variant={i === 0 ? \"primary\" : \"outline\"}\n onClick={() => onAction?.(action)}\n >\n {typeof action === \"string\" ? action : action.label}\n </UIButton>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["ActionList","actions","title","onAction","className","jsxs","jsx","action","i","UIButton"],"mappings":";;;AAUA,SAAwBA,EAAW;AAAA,EACjC,SAAAC,IAAU,CAAA;AAAA,EACV,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAG;AACD,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAW,4FAA4FD,CAAS,IAClH,UAAA;AAAA,IAAAF,KACC,gBAAAI,EAAC,OAAA,EAAI,WAAU,8DACZ,UAAAJ,GACH;AAAA,IAEF,gBAAAI,EAAC,SAAI,WAAU,wBACZ,YAAQ,IAAI,CAACC,GAAQC,MACpB,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,SAASD,MAAM,IAAI,YAAY;AAAA,QAC/B,SAAS,MAAML,IAAWI,CAAM;AAAA,QAE/B,UAAA,OAAOA,KAAW,WAAWA,IAASA,EAAO;AAAA,MAAA;AAAA,MALzCC;AAAA,IAAA,CAOR,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"ActionList.js","sources":["../../../../src/components/library/cards/ActionList.tsx"],"sourcesContent":["import UIButton from \"../ui/UIButton\";\n\nexport interface Action {\n label: string;\n [key: string]: unknown;\n}\n\nexport interface ActionListProps {\n actions?: (Action | string)[];\n title?: string;\n onAction?: (action: Action | string) => void;\n className?: string;\n}\n\nexport default function ActionList({\n actions = [],\n title,\n onAction,\n className = \"\",\n}: ActionListProps) {\n return (\n <div className={`rounded-2xl border border-slate-200 bg-white p-4 dark:border-slate-800 dark:bg-slate-900 ${className}`}>\n {title && (\n <div className=\"mb-3 text-sm font-medium text-slate-900 dark:text-slate-50\">\n {title}\n </div>\n )}\n <div className=\"flex flex-wrap gap-2\">\n {actions.map((action, i) => (\n <UIButton\n key={i}\n size=\"sm\"\n variant={i === 0 ? \"primary\" : \"outline\"}\n onClick={() => onAction?.(action)}\n >\n {typeof action === \"string\" ? action : action.label}\n </UIButton>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["ActionList","actions","title","onAction","className","jsxs","jsx","action","i","UIButton"],"mappings":";;AAcA,SAAwBA,EAAW;AAAA,EACjC,SAAAC,IAAU,CAAA;AAAA,EACV,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAoB;AAClB,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAW,4FAA4FD,CAAS,IAClH,UAAA;AAAA,IAAAF,KACC,gBAAAI,EAAC,OAAA,EAAI,WAAU,8DACZ,UAAAJ,GACH;AAAA,IAEF,gBAAAI,EAAC,SAAI,WAAU,wBACZ,YAAQ,IAAI,CAACC,GAAQC,MACpB,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,SAASD,MAAM,IAAI,YAAY;AAAA,QAC/B,SAAS,MAAML,IAAWI,CAAM;AAAA,QAE/B,UAAA,OAAOA,KAAW,WAAWA,IAASA,EAAO;AAAA,MAAA;AAAA,MALzCC;AAAA,IAAA,CAOR,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,5 +1,18 @@
1
- export default function ActivityCard({ title, actions, className }: {
2
- title?: string | undefined;
3
- actions?: never[] | undefined;
4
- className?: string | undefined;
5
- }): import("react/jsx-runtime").JSX.Element | null;
1
+ type ActionStatus = "working" | "pending" | "complete" | "error";
2
+ export interface ActivityAction {
3
+ id: string;
4
+ status: ActionStatus;
5
+ title?: string;
6
+ action?: string;
7
+ subtitle?: string;
8
+ traveler?: string;
9
+ timestamp?: string;
10
+ startedAt?: string;
11
+ }
12
+ export interface ActivityCardProps {
13
+ title?: string;
14
+ actions?: ActivityAction[];
15
+ className?: string;
16
+ }
17
+ export default function ActivityCard({ title, actions, className }: ActivityCardProps): import("react/jsx-runtime").JSX.Element | null;
18
+ export {};
@@ -1,5 +1,4 @@
1
1
  import { jsxs as i, jsx as t } from "react/jsx-runtime";
2
- import "react";
3
2
  import { AnimatePresence as n, motion as o } from "framer-motion";
4
3
  import { ExclamationCircleIcon as c, CheckCircleIcon as d, ClockIcon as m, ArrowPathIcon as p } from "@heroicons/react/24/outline";
5
4
  import x from "../ui/Text.js";
@@ -28,13 +27,13 @@ function u({ action: e }) {
28
27
  }
29
28
  );
30
29
  }
31
- function b({ title: e = "Activity", actions: r = [], className: a = "" }) {
30
+ function g({ title: e = "Activity", actions: r = [], className: a = "" }) {
32
31
  return r.length === 0 ? null : /* @__PURE__ */ i("div", { className: a, children: [
33
- e && /* @__PURE__ */ t(x, { as: "div", size: "xs", weight: "semibold", muted: !0, className: "mb-2 uppercase tracking-wider", children: e }),
32
+ e && /* @__PURE__ */ t(x, { as: "div", size: "xs", weight: "medium", muted: !0, className: "mb-2 uppercase tracking-wider", children: e }),
34
33
  /* @__PURE__ */ t("div", { className: "space-y-2", children: /* @__PURE__ */ t(n, { children: r.map((s) => /* @__PURE__ */ t(u, { action: s }, s.id)) }) })
35
34
  ] });
36
35
  }
37
36
  export {
38
- b as default
37
+ g as default
39
38
  };
40
39
  //# sourceMappingURL=ActivityCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityCard.js","sources":["../../../../src/components/library/cards/ActivityCard.jsx"],"sourcesContent":["import React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { ArrowPathIcon, CheckCircleIcon, ExclamationCircleIcon, ClockIcon } from \"@heroicons/react/24/outline\";\nimport UIText from \"../ui/Text\";\n\nconst STATUS_ICON = {\n working: { Icon: ArrowPathIcon, color: \"text-indigo-500\", spin: true },\n pending: { Icon: ClockIcon, color: \"text-slate-400\", spin: false },\n complete: { Icon: CheckCircleIcon, color: \"text-emerald-500\", spin: false },\n error: { Icon: ExclamationCircleIcon, color: \"text-red-500\", spin: false },\n};\n\nfunction ActionItem({ action }) {\n const s = STATUS_ICON[action.status] ?? STATUS_ICON.pending;\n return (\n <motion.div\n initial={{ y: 12, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -12, opacity: 0 }}\n className=\"rounded-lg border border-slate-100 bg-slate-50 p-3 dark:border-slate-800 dark:bg-slate-950/40\"\n >\n <div className=\"flex items-start gap-2\">\n <s.Icon className={`mt-0.5 h-4 w-4 shrink-0 ${s.color} ${s.spin ? \"animate-spin\" : \"\"}`} />\n <div className=\"min-w-0\">\n <div className=\"text-xs font-medium text-slate-700 dark:text-slate-200\">{action.title ?? action.action}</div>\n {(action.subtitle ?? action.traveler ?? action.timestamp ?? action.startedAt) && (\n <div className=\"mt-0.5 text-[10px] text-slate-400\">\n {[action.subtitle, action.traveler, action.timestamp ?? action.startedAt].filter(Boolean).join(\" · \")}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n}\n\nexport default function ActivityCard({ title = \"Activity\", actions = [], className = \"\" }) {\n if (actions.length === 0) return null;\n\n return (\n <div className={className}>\n {title && (\n <UIText as=\"div\" size=\"xs\" weight=\"semibold\" muted className=\"mb-2 uppercase tracking-wider\">\n {title}\n </UIText>\n )}\n <div className=\"space-y-2\">\n <AnimatePresence>\n {actions.map(a => (\n <ActionItem key={a.id} action={a} />\n ))}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n"],"names":["STATUS_ICON","ArrowPathIcon","ClockIcon","CheckCircleIcon","ExclamationCircleIcon","ActionItem","action","s","jsx","motion","jsxs","ActivityCard","title","actions","className","UIText","AnimatePresence","a"],"mappings":";;;;;AAKA,MAAMA,IAAc;AAAA,EAClB,SAAU,EAAE,MAAMC,GAAsB,OAAO,mBAAoB,MAAM,GAAA;AAAA,EACzE,SAAU,EAAE,MAAMC,GAAsB,OAAO,kBAAoB,MAAM,GAAA;AAAA,EACzE,UAAU,EAAE,MAAMC,GAAsB,OAAO,oBAAoB,MAAM,GAAA;AAAA,EACzE,OAAU,EAAE,MAAMC,GAAuB,OAAO,gBAAoB,MAAM,GAAA;AAC5E;AAEA,SAASC,EAAW,EAAE,QAAAC,KAAU;AAC9B,QAAMC,IAAIP,EAAYM,EAAO,MAAM,KAAKN,EAAY;AACpD,SACE,gBAAAQ;AAAA,IAACC,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,GAAG,IAAI,SAAS,EAAA;AAAA,MAC3B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,MAC1B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAA;AAAA,MACzB,WAAU;AAAA,MAEV,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,QAAA,gBAAAF,EAACD,EAAE,MAAF,EAAO,WAAW,2BAA2BA,EAAE,KAAK,IAAIA,EAAE,OAAO,iBAAiB,EAAE,GAAA,CAAI;AAAA,QACzF,gBAAAG,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,UAAA,gBAAAF,EAAC,SAAI,WAAU,0DAA0D,UAAAF,EAAO,SAASA,EAAO,QAAO;AAAA,WACrGA,EAAO,YAAYA,EAAO,YAAYA,EAAO,aAAaA,EAAO,cACjE,gBAAAE,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA,CAACF,EAAO,UAAUA,EAAO,UAAUA,EAAO,aAAaA,EAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,EAAA,CACtG;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAAwBK,EAAa,EAAE,OAAAC,IAAQ,YAAY,SAAAC,IAAU,IAAI,WAAAC,IAAY,MAAM;AACzF,SAAID,EAAQ,WAAW,IAAU,OAG/B,gBAAAH,EAAC,SAAI,WAAAI,GACF,UAAA;AAAA,IAAAF,KACC,gBAAAJ,EAACO,GAAA,EAAO,IAAG,OAAM,MAAK,MAAK,QAAO,YAAW,OAAK,IAAC,WAAU,iCAC1D,UAAAH,GACH;AAAA,sBAED,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAJ,EAACQ,KACE,UAAAH,EAAQ,IAAI,CAAAI,MACX,gBAAAT,EAACH,KAAsB,QAAQY,EAAA,GAAdA,EAAE,EAAe,CACnC,GACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"ActivityCard.js","sources":["../../../../src/components/library/cards/ActivityCard.tsx"],"sourcesContent":["import React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { ArrowPathIcon, CheckCircleIcon, ExclamationCircleIcon, ClockIcon } from \"@heroicons/react/24/outline\";\nimport UIText from \"../ui/Text\";\n\ntype ActionStatus = \"working\" | \"pending\" | \"complete\" | \"error\";\n\ninterface StatusIconConfig {\n Icon: React.ComponentType<{ className?: string }>;\n color: string;\n spin: boolean;\n}\n\nconst STATUS_ICON: Record<ActionStatus, StatusIconConfig> = {\n working: { Icon: ArrowPathIcon, color: \"text-indigo-500\", spin: true },\n pending: { Icon: ClockIcon, color: \"text-slate-400\", spin: false },\n complete: { Icon: CheckCircleIcon, color: \"text-emerald-500\", spin: false },\n error: { Icon: ExclamationCircleIcon, color: \"text-red-500\", spin: false },\n};\n\nexport interface ActivityAction {\n id: string;\n status: ActionStatus;\n title?: string;\n action?: string;\n subtitle?: string;\n traveler?: string;\n timestamp?: string;\n startedAt?: string;\n}\n\ninterface ActionItemProps {\n action: ActivityAction;\n}\n\nfunction ActionItem({ action }: ActionItemProps) {\n const s = STATUS_ICON[action.status] ?? STATUS_ICON.pending;\n return (\n <motion.div\n initial={{ y: 12, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n exit={{ y: -12, opacity: 0 }}\n className=\"rounded-lg border border-slate-100 bg-slate-50 p-3 dark:border-slate-800 dark:bg-slate-950/40\"\n >\n <div className=\"flex items-start gap-2\">\n <s.Icon className={`mt-0.5 h-4 w-4 shrink-0 ${s.color} ${s.spin ? \"animate-spin\" : \"\"}`} />\n <div className=\"min-w-0\">\n <div className=\"text-xs font-medium text-slate-700 dark:text-slate-200\">{action.title ?? action.action}</div>\n {(action.subtitle ?? action.traveler ?? action.timestamp ?? action.startedAt) && (\n <div className=\"mt-0.5 text-[10px] text-slate-400\">\n {[action.subtitle, action.traveler, action.timestamp ?? action.startedAt].filter(Boolean).join(\" · \")}\n </div>\n )}\n </div>\n </div>\n </motion.div>\n );\n}\n\nexport interface ActivityCardProps {\n title?: string;\n actions?: ActivityAction[];\n className?: string;\n}\n\nexport default function ActivityCard({ title = \"Activity\", actions = [], className = \"\" }: ActivityCardProps) {\n if (actions.length === 0) return null;\n\n return (\n <div className={className}>\n {title && (\n <UIText as=\"div\" size=\"xs\" weight=\"medium\" muted className=\"mb-2 uppercase tracking-wider\">\n {title}\n </UIText>\n )}\n <div className=\"space-y-2\">\n <AnimatePresence>\n {actions.map(a => (\n <ActionItem key={a.id} action={a} />\n ))}\n </AnimatePresence>\n </div>\n </div>\n );\n}\n"],"names":["STATUS_ICON","ArrowPathIcon","ClockIcon","CheckCircleIcon","ExclamationCircleIcon","ActionItem","action","s","jsx","motion","jsxs","ActivityCard","title","actions","className","UIText","AnimatePresence","a"],"mappings":";;;;AAaA,MAAMA,IAAsD;AAAA,EAC1D,SAAU,EAAE,MAAMC,GAAsB,OAAO,mBAAoB,MAAM,GAAA;AAAA,EACzE,SAAU,EAAE,MAAMC,GAAsB,OAAO,kBAAoB,MAAM,GAAA;AAAA,EACzE,UAAU,EAAE,MAAMC,GAAsB,OAAO,oBAAoB,MAAM,GAAA;AAAA,EACzE,OAAU,EAAE,MAAMC,GAAuB,OAAO,gBAAoB,MAAM,GAAA;AAC5E;AAiBA,SAASC,EAAW,EAAE,QAAAC,KAA2B;AAC/C,QAAMC,IAAIP,EAAYM,EAAO,MAAM,KAAKN,EAAY;AACpD,SACE,gBAAAQ;AAAA,IAACC,EAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,GAAG,IAAI,SAAS,EAAA;AAAA,MAC3B,SAAS,EAAE,GAAG,GAAG,SAAS,EAAA;AAAA,MAC1B,MAAM,EAAE,GAAG,KAAK,SAAS,EAAA;AAAA,MACzB,WAAU;AAAA,MAEV,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,QAAA,gBAAAF,EAACD,EAAE,MAAF,EAAO,WAAW,2BAA2BA,EAAE,KAAK,IAAIA,EAAE,OAAO,iBAAiB,EAAE,GAAA,CAAI;AAAA,QACzF,gBAAAG,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,UAAA,gBAAAF,EAAC,SAAI,WAAU,0DAA0D,UAAAF,EAAO,SAASA,EAAO,QAAO;AAAA,WACrGA,EAAO,YAAYA,EAAO,YAAYA,EAAO,aAAaA,EAAO,cACjE,gBAAAE,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA,CAACF,EAAO,UAAUA,EAAO,UAAUA,EAAO,aAAaA,EAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,EAAA,CACtG;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAQA,SAAwBK,EAAa,EAAE,OAAAC,IAAQ,YAAY,SAAAC,IAAU,IAAI,WAAAC,IAAY,MAAyB;AAC5G,SAAID,EAAQ,WAAW,IAAU,OAG/B,gBAAAH,EAAC,SAAI,WAAAI,GACF,UAAA;AAAA,IAAAF,KACC,gBAAAJ,EAACO,GAAA,EAAO,IAAG,OAAM,MAAK,MAAK,QAAO,UAAS,OAAK,IAAC,WAAU,iCACxD,UAAAH,GACH;AAAA,sBAED,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAJ,EAACQ,KACE,UAAAH,EAAQ,IAAI,CAAAI,MACX,gBAAAT,EAACH,KAAsB,QAAQY,EAAA,GAAdA,EAAE,EAAe,CACnC,GACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,24 +1,30 @@
1
- export default function BaseCard({ header, body, footer, children, variant, size, padding, shadow, radius, border, isHoverable, isPressable, isLoading, isDisabled, isSelected, className, headerClassName, bodyClassName, footerClassName, onPress, onHover, ...rest }: {
2
- [x: string]: any;
3
- header: any;
4
- body: any;
5
- footer: any;
6
- children: any;
7
- variant?: string | undefined;
8
- size?: string | undefined;
9
- padding?: string | undefined;
10
- shadow?: boolean | undefined;
11
- radius?: string | undefined;
12
- border?: boolean | undefined;
13
- isHoverable?: boolean | undefined;
14
- isPressable?: boolean | undefined;
15
- isLoading?: boolean | undefined;
16
- isDisabled?: boolean | undefined;
17
- isSelected?: boolean | undefined;
18
- className?: string | undefined;
19
- headerClassName?: string | undefined;
20
- bodyClassName?: string | undefined;
21
- footerClassName?: string | undefined;
22
- onPress: any;
23
- onHover: any;
24
- }): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ type Variant = "default" | "metric" | "chart" | "table" | "widget" | "status";
3
+ type Size = "xs" | "sm" | "md" | "lg" | "xl" | "full";
4
+ type Padding = "none" | "xs" | "sm" | "default" | "lg" | "xl";
5
+ type Radius = "none" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
6
+ export interface BaseCardProps extends Omit<React.HTMLAttributes<HTMLDivElement | HTMLButtonElement>, "onPress"> {
7
+ header?: React.ReactNode;
8
+ body?: React.ReactNode;
9
+ footer?: React.ReactNode;
10
+ children?: React.ReactNode;
11
+ variant?: Variant;
12
+ size?: Size;
13
+ padding?: Padding;
14
+ shadow?: boolean;
15
+ radius?: Radius;
16
+ border?: boolean;
17
+ isHoverable?: boolean;
18
+ isPressable?: boolean;
19
+ isLoading?: boolean;
20
+ isDisabled?: boolean;
21
+ isSelected?: boolean;
22
+ className?: string;
23
+ headerClassName?: string;
24
+ bodyClassName?: string;
25
+ footerClassName?: string;
26
+ onPress?: () => void;
27
+ onHover?: () => void;
28
+ }
29
+ export default function BaseCard({ header, body, footer, children, variant, size, padding, shadow, radius, border, isHoverable, isPressable, isLoading, isDisabled, isSelected, className, headerClassName, bodyClassName, footerClassName, onPress, onHover, ...rest }: BaseCardProps): import("react/jsx-runtime").JSX.Element;
30
+ export {};
@@ -1,5 +1,4 @@
1
1
  import { jsx as a, jsxs as e, Fragment as z } from "react/jsx-runtime";
2
- import "react";
3
2
  const c = {
4
3
  default: "",
5
4
  metric: "",
@@ -22,7 +21,7 @@ const c = {
22
21
  lg: "p-6",
23
22
  xl: "p-8"
24
23
  };
25
- function M({
24
+ function G({
26
25
  header: t,
27
26
  body: n,
28
27
  footer: d,
@@ -84,6 +83,6 @@ function M({
84
83
  );
85
84
  }
86
85
  export {
87
- M as default
86
+ G as default
88
87
  };
89
88
  //# sourceMappingURL=BaseCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCard.js","sources":["../../../../src/components/library/cards/BaseCard.jsx"],"sourcesContent":["import React from \"react\";\n\nconst VARIANT_CLASSES = {\n default: \"\",\n metric: \"\",\n chart: \"\",\n table: \"\",\n widget: \"\",\n status: \"\"\n};\n\nconst SIZE_CLASSES = {\n xs: \"\",\n sm: \"min-h-[80px]\",\n md: \"min-h-[120px]\",\n lg: \"min-h-[160px]\",\n xl: \"min-h-[220px]\",\n full: \"\"\n};\n\nconst PADDING_CLASSES = {\n none: \"p-0\",\n xs: \"p-2\",\n sm: \"p-3\",\n default: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\"\n};\n\nexport default function BaseCard({\n header,\n body,\n footer,\n children,\n variant = \"default\",\n size = \"md\",\n padding = \"default\",\n shadow = true,\n radius = \"2xl\",\n border = true,\n isHoverable = false,\n isPressable = false,\n isLoading = false,\n isDisabled = false,\n isSelected = false,\n className = \"\",\n headerClassName = \"\",\n bodyClassName = \"\",\n footerClassName = \"\",\n onPress,\n onHover,\n ...rest\n}) {\n const Comp = isPressable ? \"button\" : \"div\";\n\n const radiusClass = radius ? `rounded-${radius}` : \"rounded-2xl\";\n const paddingClass = PADDING_CLASSES[padding] ?? PADDING_CLASSES.default;\n const sizeClass = SIZE_CLASSES[size] ?? SIZE_CLASSES.md;\n const variantClass = VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.default;\n\n const interactive = isHoverable || isPressable;\n const disabled = isDisabled || (isPressable && !onPress);\n\n return (\n <Comp\n type={isPressable ? \"button\" : undefined}\n onClick={isPressable ? onPress : undefined}\n onMouseEnter={onHover}\n disabled={isPressable ? disabled : undefined}\n className={[\n \"w-full text-left\",\n radiusClass,\n border ? \"border border-slate-200 dark:border-slate-800\" : \"border border-transparent\",\n \"bg-white dark:bg-slate-900\",\n shadow ? \"shadow-sm\" : \"\",\n sizeClass,\n variantClass,\n interactive ? \"transition hover:-translate-y-[1px] hover:shadow-md\" : \"\",\n isSelected ? \"ring-2 ring-brand-500\" : \"\",\n disabled ? \"opacity-60\" : \"\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <div className={paddingClass}>\n {header != null ? <div className={headerClassName}>{header}</div> : null}\n\n {isLoading ? (\n <div className={[\"mt-3 space-y-3\", bodyClassName].filter(Boolean).join(\" \")}>\n <div className=\"h-4 w-1/3 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n <div className=\"h-4 w-2/3 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n <div className=\"h-4 w-1/2 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n </div>\n ) : (\n <>\n {body != null ? <div className={bodyClassName}>{body}</div> : null}\n {children}\n </>\n )}\n\n {footer != null ? <div className={footerClassName}>{footer}</div> : null}\n </div>\n </Comp>\n );\n}\n\n\n"],"names":["VARIANT_CLASSES","SIZE_CLASSES","PADDING_CLASSES","BaseCard","header","body","footer","children","variant","size","padding","shadow","radius","border","isHoverable","isPressable","isLoading","isDisabled","isSelected","className","headerClassName","bodyClassName","footerClassName","onPress","onHover","rest","Comp","radiusClass","paddingClass","sizeClass","variantClass","interactive","disabled","jsx","jsxs","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"BaseCard.js","sources":["../../../../src/components/library/cards/BaseCard.tsx"],"sourcesContent":["import React from \"react\";\n\ntype Variant = \"default\" | \"metric\" | \"chart\" | \"table\" | \"widget\" | \"status\";\ntype Size = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\ntype Padding = \"none\" | \"xs\" | \"sm\" | \"default\" | \"lg\" | \"xl\";\ntype Radius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n\nconst VARIANT_CLASSES: Record<Variant, string> = {\n default: \"\",\n metric: \"\",\n chart: \"\",\n table: \"\",\n widget: \"\",\n status: \"\"\n};\n\nconst SIZE_CLASSES: Record<Size, string> = {\n xs: \"\",\n sm: \"min-h-[80px]\",\n md: \"min-h-[120px]\",\n lg: \"min-h-[160px]\",\n xl: \"min-h-[220px]\",\n full: \"\"\n};\n\nconst PADDING_CLASSES: Record<Padding, string> = {\n none: \"p-0\",\n xs: \"p-2\",\n sm: \"p-3\",\n default: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\"\n};\n\nexport interface BaseCardProps extends Omit<React.HTMLAttributes<HTMLDivElement | HTMLButtonElement>, \"onPress\"> {\n header?: React.ReactNode;\n body?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n variant?: Variant;\n size?: Size;\n padding?: Padding;\n shadow?: boolean;\n radius?: Radius;\n border?: boolean;\n isHoverable?: boolean;\n isPressable?: boolean;\n isLoading?: boolean;\n isDisabled?: boolean;\n isSelected?: boolean;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n footerClassName?: string;\n onPress?: () => void;\n onHover?: () => void;\n}\n\nexport default function BaseCard({\n header,\n body,\n footer,\n children,\n variant = \"default\",\n size = \"md\",\n padding = \"default\",\n shadow = true,\n radius = \"2xl\",\n border = true,\n isHoverable = false,\n isPressable = false,\n isLoading = false,\n isDisabled = false,\n isSelected = false,\n className = \"\",\n headerClassName = \"\",\n bodyClassName = \"\",\n footerClassName = \"\",\n onPress,\n onHover,\n ...rest\n}: BaseCardProps) {\n const Comp = isPressable ? \"button\" : \"div\";\n\n const radiusClass = radius ? `rounded-${radius}` : \"rounded-2xl\";\n const paddingClass = PADDING_CLASSES[padding] ?? PADDING_CLASSES.default;\n const sizeClass = SIZE_CLASSES[size] ?? SIZE_CLASSES.md;\n const variantClass = VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.default;\n\n const interactive = isHoverable || isPressable;\n const disabled = isDisabled || (isPressable && !onPress);\n\n return (\n <Comp\n type={isPressable ? \"button\" : undefined}\n onClick={isPressable ? onPress : undefined}\n onMouseEnter={onHover}\n disabled={isPressable ? disabled : undefined}\n className={[\n \"w-full text-left\",\n radiusClass,\n border ? \"border border-slate-200 dark:border-slate-800\" : \"border border-transparent\",\n \"bg-white dark:bg-slate-900\",\n shadow ? \"shadow-sm\" : \"\",\n sizeClass,\n variantClass,\n interactive ? \"transition hover:-translate-y-[1px] hover:shadow-md\" : \"\",\n isSelected ? \"ring-2 ring-brand-500\" : \"\",\n disabled ? \"opacity-60\" : \"\",\n className\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n >\n <div className={paddingClass}>\n {header != null ? <div className={headerClassName}>{header}</div> : null}\n\n {isLoading ? (\n <div className={[\"mt-3 space-y-3\", bodyClassName].filter(Boolean).join(\" \")}>\n <div className=\"h-4 w-1/3 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n <div className=\"h-4 w-2/3 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n <div className=\"h-4 w-1/2 animate-pulse rounded bg-slate-200 dark:bg-slate-800\" />\n </div>\n ) : (\n <>\n {body != null ? <div className={bodyClassName}>{body}</div> : null}\n {children}\n </>\n )}\n\n {footer != null ? <div className={footerClassName}>{footer}</div> : null}\n </div>\n </Comp>\n );\n}\n"],"names":["VARIANT_CLASSES","SIZE_CLASSES","PADDING_CLASSES","BaseCard","header","body","footer","children","variant","size","padding","shadow","radius","border","isHoverable","isPressable","isLoading","isDisabled","isSelected","className","headerClassName","bodyClassName","footerClassName","onPress","onHover","rest","Comp","radiusClass","paddingClass","sizeClass","variantClass","interactive","disabled","jsx","jsxs","Fragment"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- /**
2
- * Highlighted callout box for important inline messages.
3
- *
4
- * @param {string} title
5
- * @param {string|ReactNode} message
6
- * @param {"neutral"|"success"|"warning"|"danger"|"info"} tone
7
- * @param {ReactNode} icon Optional leading icon
8
- */
9
- export default function CalloutCard({ title, message, tone, icon, className, }: string): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ type Tone = "neutral" | "success" | "warning" | "danger" | "info";
3
+ export interface CalloutCardProps {
4
+ title?: string;
5
+ message: string | React.ReactNode;
6
+ tone?: Tone;
7
+ icon?: React.ReactNode;
8
+ className?: string;
9
+ }
10
+ export default function CalloutCard({ title, message, tone, icon, className, }: CalloutCardProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -1,5 +1,4 @@
1
1
  import { jsx as e, jsxs as d } from "react/jsx-runtime";
2
- import "react";
3
2
  const t = {
4
3
  neutral: "border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-950/30 dark:text-slate-200",
5
4
  success: "border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:text-emerald-200",
@@ -7,7 +6,7 @@ const t = {
7
6
  danger: "border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900/40 dark:bg-rose-950/20 dark:text-rose-200",
8
7
  info: "border-blue-200 bg-blue-50 text-blue-800 dark:border-blue-900/40 dark:bg-blue-950/20 dark:text-blue-200"
9
8
  };
10
- function n({
9
+ function m({
11
10
  title: r,
12
11
  message: l,
13
12
  tone: b = "neutral",
@@ -23,6 +22,6 @@ function n({
23
22
  ] }) });
24
23
  }
25
24
  export {
26
- n as default
25
+ m as default
27
26
  };
28
27
  //# sourceMappingURL=CalloutCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalloutCard.js","sources":["../../../../src/components/library/cards/CalloutCard.jsx"],"sourcesContent":["import React from \"react\";\n\nconst TONE_CLASSES = {\n neutral: \"border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-950/30 dark:text-slate-200\",\n success: \"border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:text-emerald-200\",\n warning: \"border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900/40 dark:bg-amber-950/20 dark:text-amber-200\",\n danger: \"border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900/40 dark:bg-rose-950/20 dark:text-rose-200\",\n info: \"border-blue-200 bg-blue-50 text-blue-800 dark:border-blue-900/40 dark:bg-blue-950/20 dark:text-blue-200\",\n};\n\n/**\n * Highlighted callout box for important inline messages.\n *\n * @param {string} title\n * @param {string|ReactNode} message\n * @param {\"neutral\"|\"success\"|\"warning\"|\"danger\"|\"info\"} tone\n * @param {ReactNode} icon Optional leading icon\n */\nexport default function CalloutCard({\n title,\n message,\n tone = \"neutral\",\n icon,\n className = \"\",\n}) {\n return (\n <div className={`rounded-xl border p-4 ${TONE_CLASSES[tone] ?? TONE_CLASSES.neutral} ${className}`}>\n <div className=\"flex gap-3\">\n {icon && <div className=\"mt-0.5 shrink-0\">{icon}</div>}\n <div>\n {title && <div className=\"mb-1 text-sm font-semibold\">{title}</div>}\n <div className=\"text-sm\">{message}</div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["TONE_CLASSES","CalloutCard","title","message","tone","icon","className","jsx","jsxs"],"mappings":";;AAEA,MAAMA,IAAe;AAAA,EACnB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAUA,SAAwBC,EAAY;AAAA,EAClC,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAG;AACD,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAW,yBAAyBP,EAAaI,CAAI,KAAKJ,EAAa,OAAO,IAAIM,CAAS,IAC9F,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,IAAAH,KAAQ,gBAAAE,EAAC,OAAA,EAAI,WAAU,mBAAmB,UAAAF,GAAK;AAAA,sBAC/C,OAAA,EACE,UAAA;AAAA,MAAAH,KAAS,gBAAAK,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAL,GAAM;AAAA,MAC7D,gBAAAK,EAAC,OAAA,EAAI,WAAU,WAAW,UAAAJ,EAAA,CAAQ;AAAA,IAAA,EAAA,CACpC;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"CalloutCard.js","sources":["../../../../src/components/library/cards/CalloutCard.tsx"],"sourcesContent":["import React from \"react\";\n\ntype Tone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nconst TONE_CLASSES: Record<Tone, string> = {\n neutral: \"border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-950/30 dark:text-slate-200\",\n success: \"border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900/40 dark:bg-emerald-950/20 dark:text-emerald-200\",\n warning: \"border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900/40 dark:bg-amber-950/20 dark:text-amber-200\",\n danger: \"border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900/40 dark:bg-rose-950/20 dark:text-rose-200\",\n info: \"border-blue-200 bg-blue-50 text-blue-800 dark:border-blue-900/40 dark:bg-blue-950/20 dark:text-blue-200\",\n};\n\nexport interface CalloutCardProps {\n title?: string;\n message: string | React.ReactNode;\n tone?: Tone;\n icon?: React.ReactNode;\n className?: string;\n}\n\nexport default function CalloutCard({\n title,\n message,\n tone = \"neutral\",\n icon,\n className = \"\",\n}: CalloutCardProps) {\n return (\n <div className={`rounded-xl border p-4 ${TONE_CLASSES[tone] ?? TONE_CLASSES.neutral} ${className}`}>\n <div className=\"flex gap-3\">\n {icon && <div className=\"mt-0.5 shrink-0\">{icon}</div>}\n <div>\n {title && <div className=\"mb-1 text-sm font-semibold\">{title}</div>}\n <div className=\"text-sm\">{message}</div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["TONE_CLASSES","CalloutCard","title","message","tone","icon","className","jsx","jsxs"],"mappings":";AAIA,MAAMA,IAAqC;AAAA,EACzC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR;AAUA,SAAwBC,EAAY;AAAA,EAClC,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAqB;AACnB,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAW,yBAAyBP,EAAaI,CAAI,KAAKJ,EAAa,OAAO,IAAIM,CAAS,IAC9F,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,IAAAH,KAAQ,gBAAAE,EAAC,OAAA,EAAI,WAAU,mBAAmB,UAAAF,GAAK;AAAA,sBAC/C,OAAA,EACE,UAAA;AAAA,MAAAH,KAAS,gBAAAK,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAL,GAAM;AAAA,MAC7D,gBAAAK,EAAC,OAAA,EAAI,WAAU,WAAW,UAAAJ,EAAA,CAAQ;AAAA,IAAA,EAAA,CACpC;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -1,17 +1,29 @@
1
- export default function ChartCard({ chart, chartType, title, subtitle, filters, timeRange, actions, legend, height, showGrid, showAxes, data, loading, error, ...cardProps }: {
2
- [x: string]: any;
3
- chart: any;
4
- chartType: any;
5
- title: any;
6
- subtitle: any;
7
- filters: any;
8
- timeRange: any;
9
- actions: any;
10
- legend: any;
11
- height?: number | undefined;
12
- showGrid: any;
13
- showAxes: any;
14
- data: any;
15
- loading?: boolean | undefined;
16
- error: any;
17
- }): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ import { BaseCardProps } from "./BaseCard";
3
+ interface TimeRangeOption {
4
+ value: string;
5
+ label: string;
6
+ }
7
+ export interface TimeRange {
8
+ current: string;
9
+ options?: (TimeRangeOption | string)[];
10
+ onChange?: (value: string) => void;
11
+ }
12
+ export interface ChartCardProps extends Omit<BaseCardProps, "variant" | "header" | "body"> {
13
+ chart: React.ReactNode;
14
+ chartType?: string;
15
+ title?: string;
16
+ subtitle?: string;
17
+ filters?: React.ReactNode;
18
+ timeRange?: TimeRange;
19
+ actions?: React.ReactNode;
20
+ legend?: React.ReactNode;
21
+ height?: number;
22
+ showGrid?: boolean;
23
+ showAxes?: boolean;
24
+ data?: unknown[];
25
+ loading?: boolean;
26
+ error?: string | Error;
27
+ }
28
+ export default function ChartCard({ chart, chartType, title, subtitle, filters, timeRange, actions, legend, height, showGrid, showAxes, data, loading, error, ...cardProps }: ChartCardProps): import("react/jsx-runtime").JSX.Element;
29
+ export {};
@@ -1,16 +1,15 @@
1
1
  import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
- import "react";
3
- import f from "./BaseCard.js";
2
+ import v from "./BaseCard.js";
4
3
  import g from "../ui/Text.js";
5
4
  import k from "../ui/Chip.js";
6
- function I({
5
+ function z({
7
6
  chart: b,
8
7
  chartType: s,
9
8
  title: t,
10
9
  subtitle: i,
11
- filters: d,
10
+ filters: n,
12
11
  timeRange: r,
13
- actions: n,
12
+ actions: d,
14
13
  legend: m,
15
14
  height: N = 280,
16
15
  showGrid: c,
@@ -20,13 +19,13 @@ function I({
20
19
  error: u,
21
20
  ...x
22
21
  }) {
23
- const v = /* @__PURE__ */ a("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
22
+ const f = /* @__PURE__ */ a("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
24
23
  /* @__PURE__ */ a("div", { className: "min-w-0", children: [
25
24
  t ? /* @__PURE__ */ e(g, { as: "div", size: "sm", weight: "medium", children: t }) : null,
26
25
  i ? /* @__PURE__ */ e(g, { as: "div", size: "xs", muted: !0, className: "mt-1", children: i }) : null
27
26
  ] }),
28
27
  /* @__PURE__ */ a("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
29
- d ? /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: d }) : null,
28
+ n ? /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: n }) : null,
30
29
  r ? /* @__PURE__ */ e(
31
30
  "select",
32
31
  {
@@ -34,26 +33,26 @@ function I({
34
33
  value: r.current,
35
34
  onChange: (l) => r.onChange?.(l.target.value),
36
35
  "aria-label": "Time range",
37
- children: r.options?.map((l) => /* @__PURE__ */ e("option", { value: l.value ?? l, children: l.label ?? l }, l.value ?? l))
36
+ children: r.options?.map((l) => /* @__PURE__ */ e("option", { value: typeof l == "string" ? l : l.value, children: typeof l == "string" ? l : l.label }, typeof l == "string" ? l : l.value))
38
37
  }
39
38
  ) : null,
40
- n ? /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: n }) : null
39
+ d ? /* @__PURE__ */ e("div", { className: "flex items-center gap-2", children: d }) : null
41
40
  ] })
42
41
  ] });
43
42
  return u ? /* @__PURE__ */ e(
44
- f,
43
+ v,
45
44
  {
46
45
  variant: "chart",
47
- header: v,
46
+ header: f,
48
47
  body: /* @__PURE__ */ e("div", { className: "mt-4 rounded-xl border border-rose-200 bg-rose-50 p-4 text-sm text-rose-900 dark:border-rose-900/40 dark:bg-rose-950/30 dark:text-rose-100", children: String(u) }),
49
48
  ...x
50
49
  }
51
50
  ) : /* @__PURE__ */ e(
52
- f,
51
+ v,
53
52
  {
54
53
  variant: "chart",
55
54
  header: /* @__PURE__ */ a("div", { className: "flex items-center justify-between gap-3", children: [
56
- /* @__PURE__ */ e("div", { className: "min-w-0", children: v }),
55
+ /* @__PURE__ */ e("div", { className: "min-w-0", children: f }),
57
56
  s ? /* @__PURE__ */ e(k, { children: s }) : null
58
57
  ] }),
59
58
  body: /* @__PURE__ */ a("div", { className: "mt-4", children: [
@@ -74,6 +73,6 @@ function I({
74
73
  );
75
74
  }
76
75
  export {
77
- I as default
76
+ z as default
78
77
  };
79
78
  //# sourceMappingURL=ChartCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartCard.js","sources":["../../../../src/components/library/cards/ChartCard.jsx"],"sourcesContent":["import React from \"react\";\nimport BaseCard from \"./BaseCard\";\nimport UIText from \"../ui/Text\";\nimport UIChip from \"../ui/Chip\";\n\nexport default function ChartCard({\n chart,\n chartType,\n title,\n subtitle,\n filters,\n timeRange,\n actions,\n legend,\n height = 280,\n showGrid,\n showAxes,\n data,\n loading = false,\n error,\n ...cardProps\n}) {\n const header = (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n {title ? (\n <UIText as=\"div\" size=\"sm\" weight=\"medium\">\n {title}\n </UIText>\n ) : null}\n {subtitle ? (\n <UIText as=\"div\" size=\"xs\" muted className=\"mt-1\">\n {subtitle}\n </UIText>\n ) : null}\n </div>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n {filters ? <div className=\"flex items-center gap-2\">{filters}</div> : null}\n {timeRange ? (\n <select\n className=\"h-9 rounded-lg border border-slate-200 bg-white px-3 text-sm text-slate-900 shadow-sm dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50\"\n value={timeRange.current}\n onChange={(e) => timeRange.onChange?.(e.target.value)}\n aria-label=\"Time range\"\n >\n {timeRange.options?.map((opt) => (\n <option key={opt.value ?? opt} value={opt.value ?? opt}>\n {opt.label ?? opt}\n </option>\n ))}\n </select>\n ) : null}\n {actions ? <div className=\"flex items-center gap-2\">{actions}</div> : null}\n </div>\n </div>\n );\n\n if (error) {\n return (\n <BaseCard\n variant=\"chart\"\n header={header}\n body={\n <div className=\"mt-4 rounded-xl border border-rose-200 bg-rose-50 p-4 text-sm text-rose-900 dark:border-rose-900/40 dark:bg-rose-950/30 dark:text-rose-100\">\n {String(error)}\n </div>\n }\n {...cardProps}\n />\n );\n }\n\n const hint = chartType ? <UIChip>{chartType}</UIChip> : null;\n\n return (\n <BaseCard\n variant=\"chart\"\n header={\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">{header}</div>\n {hint}\n </div>\n }\n body={\n <div className=\"mt-4\">\n <div className=\"w-full\" style={{ height }}>\n {chart}\n </div>\n {legend ? <div className=\"mt-3\">{legend}</div> : null}\n {(showGrid != null || showAxes != null) && data ? (\n <div className=\"mt-2 text-xs text-slate-500 dark:text-slate-400\">\n grid: {String(!!showGrid)} · axes: {String(!!showAxes)} · points: {data.length}\n </div>\n ) : null}\n {loading ? (\n <div className=\"mt-3 text-xs text-slate-500 dark:text-slate-400\">Loading…</div>\n ) : null}\n </div>\n }\n {...cardProps}\n />\n );\n}\n\n\n"],"names":["ChartCard","chart","chartType","title","subtitle","filters","timeRange","actions","legend","height","showGrid","showAxes","data","loading","error","cardProps","header","jsxs","jsx","UIText","e","opt","BaseCard","UIChip"],"mappings":"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"}
1
+ {"version":3,"file":"ChartCard.js","sources":["../../../../src/components/library/cards/ChartCard.tsx"],"sourcesContent":["import React from \"react\";\nimport BaseCard, { BaseCardProps } from \"./BaseCard\";\nimport UIText from \"../ui/Text\";\nimport UIChip from \"../ui/Chip\";\n\ninterface TimeRangeOption {\n value: string;\n label: string;\n}\n\nexport interface TimeRange {\n current: string;\n options?: (TimeRangeOption | string)[];\n onChange?: (value: string) => void;\n}\n\nexport interface ChartCardProps extends Omit<BaseCardProps, \"variant\" | \"header\" | \"body\"> {\n chart: React.ReactNode;\n chartType?: string;\n title?: string;\n subtitle?: string;\n filters?: React.ReactNode;\n timeRange?: TimeRange;\n actions?: React.ReactNode;\n legend?: React.ReactNode;\n height?: number;\n showGrid?: boolean;\n showAxes?: boolean;\n data?: unknown[];\n loading?: boolean;\n error?: string | Error;\n}\n\nexport default function ChartCard({\n chart,\n chartType,\n title,\n subtitle,\n filters,\n timeRange,\n actions,\n legend,\n height = 280,\n showGrid,\n showAxes,\n data,\n loading = false,\n error,\n ...cardProps\n}: ChartCardProps) {\n const header = (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n {title ? (\n <UIText as=\"div\" size=\"sm\" weight=\"medium\">\n {title}\n </UIText>\n ) : null}\n {subtitle ? (\n <UIText as=\"div\" size=\"xs\" muted className=\"mt-1\">\n {subtitle}\n </UIText>\n ) : null}\n </div>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n {filters ? <div className=\"flex items-center gap-2\">{filters}</div> : null}\n {timeRange ? (\n <select\n className=\"h-9 rounded-lg border border-slate-200 bg-white px-3 text-sm text-slate-900 shadow-sm dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50\"\n value={timeRange.current}\n onChange={(e) => timeRange.onChange?.(e.target.value)}\n aria-label=\"Time range\"\n >\n {timeRange.options?.map((opt) => (\n <option key={typeof opt === \"string\" ? opt : opt.value} value={typeof opt === \"string\" ? opt : opt.value}>\n {typeof opt === \"string\" ? opt : opt.label}\n </option>\n ))}\n </select>\n ) : null}\n {actions ? <div className=\"flex items-center gap-2\">{actions}</div> : null}\n </div>\n </div>\n );\n\n if (error) {\n return (\n <BaseCard\n variant=\"chart\"\n header={header}\n body={\n <div className=\"mt-4 rounded-xl border border-rose-200 bg-rose-50 p-4 text-sm text-rose-900 dark:border-rose-900/40 dark:bg-rose-950/30 dark:text-rose-100\">\n {String(error)}\n </div>\n }\n {...cardProps}\n />\n );\n }\n\n const hint = chartType ? <UIChip>{chartType}</UIChip> : null;\n\n return (\n <BaseCard\n variant=\"chart\"\n header={\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">{header}</div>\n {hint}\n </div>\n }\n body={\n <div className=\"mt-4\">\n <div className=\"w-full\" style={{ height }}>\n {chart}\n </div>\n {legend ? <div className=\"mt-3\">{legend}</div> : null}\n {(showGrid != null || showAxes != null) && data ? (\n <div className=\"mt-2 text-xs text-slate-500 dark:text-slate-400\">\n grid: {String(!!showGrid)} · axes: {String(!!showAxes)} · points: {data.length}\n </div>\n ) : null}\n {loading ? (\n <div className=\"mt-3 text-xs text-slate-500 dark:text-slate-400\">Loading…</div>\n ) : null}\n </div>\n }\n {...cardProps}\n />\n );\n}\n"],"names":["ChartCard","chart","chartType","title","subtitle","filters","timeRange","actions","legend","height","showGrid","showAxes","data","loading","error","cardProps","header","jsxs","jsx","UIText","e","opt","BaseCard","UIChip"],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- export default function FeedPanel({ title, subtitle, actions, children, width, className, headerClassName, bodyClassName, ...rest }: {
2
- [x: string]: any;
3
- title: any;
4
- subtitle: any;
5
- actions: any;
6
- children: any;
7
- width: any;
8
- className?: string | undefined;
9
- headerClassName?: string | undefined;
10
- bodyClassName?: string | undefined;
11
- }): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ export interface FeedPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
3
+ title?: string;
4
+ subtitle?: string;
5
+ actions?: React.ReactNode;
6
+ children?: React.ReactNode;
7
+ width?: number | string;
8
+ className?: string;
9
+ headerClassName?: string;
10
+ bodyClassName?: string;
11
+ }
12
+ export default function FeedPanel({ title, subtitle, actions, children, width, className, headerClassName, bodyClassName, ...rest }: FeedPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,6 @@
1
1
  import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
- import "react";
3
2
  import i from "../ui/Text.js";
4
- function b({
3
+ function v({
5
4
  title: s,
6
5
  subtitle: d,
7
6
  actions: a,
@@ -22,7 +21,7 @@ function b({
22
21
  children: [
23
22
  (s || d || a) && /* @__PURE__ */ e("div", { className: `shrink-0 border-b border-slate-100 px-4 py-3 dark:border-slate-800 ${n}`, children: /* @__PURE__ */ l("div", { className: "flex items-start justify-between gap-3", children: [
24
23
  /* @__PURE__ */ l("div", { className: "min-w-0", children: [
25
- s && /* @__PURE__ */ e(i, { as: "div", size: "sm", weight: "semibold", children: s }),
24
+ s && /* @__PURE__ */ e(i, { as: "div", size: "sm", weight: "medium", children: s }),
26
25
  d && /* @__PURE__ */ e(i, { as: "div", size: "xs", muted: !0, className: "mt-0.5", children: d })
27
26
  ] }),
28
27
  a && /* @__PURE__ */ e("div", { className: "shrink-0", children: a })
@@ -33,6 +32,6 @@ function b({
33
32
  );
34
33
  }
35
34
  export {
36
- b as default
35
+ v as default
37
36
  };
38
37
  //# sourceMappingURL=FeedPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeedPanel.js","sources":["../../../../src/components/library/cards/FeedPanel.jsx"],"sourcesContent":["import React from \"react\";\nimport UIText from \"../ui/Text\";\n\nexport default function FeedPanel({\n title,\n subtitle,\n actions,\n children,\n width,\n className = \"\",\n headerClassName = \"\",\n bodyClassName = \"\",\n ...rest\n}) {\n const widthStyle = width ? (typeof width === \"number\" ? { width: `${width}px` } : { width }) : undefined;\n\n return (\n <div\n className={`flex shrink-0 flex-col overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-800 dark:bg-slate-900 ${className}`}\n style={widthStyle}\n {...rest}\n >\n {(title || subtitle || actions) && (\n <div className={`shrink-0 border-b border-slate-100 px-4 py-3 dark:border-slate-800 ${headerClassName}`}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {title && <UIText as=\"div\" size=\"sm\" weight=\"semibold\">{title}</UIText>}\n {subtitle && <UIText as=\"div\" size=\"xs\" muted className=\"mt-0.5\">{subtitle}</UIText>}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n </div>\n )}\n <div className={`flex-1 overflow-y-auto ${bodyClassName}`}>\n {children}\n </div>\n </div>\n );\n}\n"],"names":["FeedPanel","title","subtitle","actions","children","width","className","headerClassName","bodyClassName","rest","widthStyle","jsxs","jsx","UIText"],"mappings":";;;AAGA,SAAwBA,EAAU;AAAA,EAChC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,GAAGC;AACL,GAAG;AACD,QAAMC,IAAaL,IAAS,OAAOA,KAAU,WAAW,EAAE,OAAO,GAAGA,CAAK,KAAA,IAAS,EAAE,OAAAA,MAAW;AAE/F,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,wIAAwIL,CAAS;AAAA,MAC5J,OAAOI;AAAA,MACN,GAAGD;AAAA,MAEF,UAAA;AAAA,SAAAR,KAASC,KAAYC,MACrB,gBAAAS,EAAC,OAAA,EAAI,WAAW,sEAAsEL,CAAe,IACnG,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACZ,UAAA;AAAA,YAAAV,KAAS,gBAAAW,EAACC,KAAO,IAAG,OAAM,MAAK,MAAK,QAAO,YAAY,UAAAZ,EAAA,CAAM;AAAA,YAC7DC,KAAY,gBAAAU,EAACC,GAAA,EAAO,IAAG,OAAM,MAAK,MAAK,OAAK,IAAC,WAAU,UAAU,UAAAX,EAAA,CAAS;AAAA,UAAA,GAC7E;AAAA,UACCC,KAAW,gBAAAS,EAAC,OAAA,EAAI,WAAU,YAAY,UAAAT,EAAA,CAAQ;AAAA,QAAA,EAAA,CACjD,EAAA,CACF;AAAA,0BAED,OAAA,EAAI,WAAW,0BAA0BK,CAAa,IACpD,UAAAJ,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"FeedPanel.js","sources":["../../../../src/components/library/cards/FeedPanel.tsx"],"sourcesContent":["import React from \"react\";\nimport UIText from \"../ui/Text\";\n\nexport interface FeedPanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: string;\n subtitle?: string;\n actions?: React.ReactNode;\n children?: React.ReactNode;\n width?: number | string;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n}\n\nexport default function FeedPanel({\n title,\n subtitle,\n actions,\n children,\n width,\n className = \"\",\n headerClassName = \"\",\n bodyClassName = \"\",\n ...rest\n}: FeedPanelProps) {\n const widthStyle = width ? (typeof width === \"number\" ? { width: `${width}px` } : { width }) : undefined;\n\n return (\n <div\n className={`flex shrink-0 flex-col overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-800 dark:bg-slate-900 ${className}`}\n style={widthStyle}\n {...rest}\n >\n {(title || subtitle || actions) && (\n <div className={`shrink-0 border-b border-slate-100 px-4 py-3 dark:border-slate-800 ${headerClassName}`}>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {title && <UIText as=\"div\" size=\"sm\" weight=\"medium\">{title}</UIText>}\n {subtitle && <UIText as=\"div\" size=\"xs\" muted className=\"mt-0.5\">{subtitle}</UIText>}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n </div>\n )}\n <div className={`flex-1 overflow-y-auto ${bodyClassName}`}>\n {children}\n </div>\n </div>\n );\n}\n"],"names":["FeedPanel","title","subtitle","actions","children","width","className","headerClassName","bodyClassName","rest","widthStyle","jsxs","jsx","UIText"],"mappings":";;AAcA,SAAwBA,EAAU;AAAA,EAChC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,iBAAAC,IAAkB;AAAA,EAClB,eAAAC,IAAgB;AAAA,EAChB,GAAGC;AACL,GAAmB;AACjB,QAAMC,IAAaL,IAAS,OAAOA,KAAU,WAAW,EAAE,OAAO,GAAGA,CAAK,KAAA,IAAS,EAAE,OAAAA,MAAW;AAE/F,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,wIAAwIL,CAAS;AAAA,MAC5J,OAAOI;AAAA,MACN,GAAGD;AAAA,MAEF,UAAA;AAAA,SAAAR,KAASC,KAAYC,MACrB,gBAAAS,EAAC,OAAA,EAAI,WAAW,sEAAsEL,CAAe,IACnG,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACZ,UAAA;AAAA,YAAAV,KAAS,gBAAAW,EAACC,KAAO,IAAG,OAAM,MAAK,MAAK,QAAO,UAAU,UAAAZ,EAAA,CAAM;AAAA,YAC3DC,KAAY,gBAAAU,EAACC,GAAA,EAAO,IAAG,OAAM,MAAK,MAAK,OAAK,IAAC,WAAU,UAAU,UAAAX,EAAA,CAAS;AAAA,UAAA,GAC7E;AAAA,UACCC,KAAW,gBAAAS,EAAC,OAAA,EAAI,WAAU,YAAY,UAAAT,EAAA,CAAQ;AAAA,QAAA,EAAA,CACjD,EAAA,CACF;AAAA,0BAED,OAAA,EAAI,WAAW,0BAA0BK,CAAa,IACpD,UAAAJ,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,20 +1,33 @@
1
- export default function ListCard({ items, title, subtitle, showAvatars, showStatus, showActions, showTimestamp, dense, divided, actions, itemActions, onItemClick, loading, error, emptyMessage, emptyIcon, maxBodyHeight, ...cardProps }: {
2
- [x: string]: any;
3
- items?: never[] | undefined;
4
- title: any;
5
- subtitle: any;
6
- showAvatars?: boolean | undefined;
7
- showStatus?: boolean | undefined;
8
- showActions?: boolean | undefined;
9
- showTimestamp?: boolean | undefined;
10
- dense?: boolean | undefined;
11
- divided?: boolean | undefined;
12
- actions: any;
13
- itemActions: any;
14
- onItemClick: any;
15
- loading?: boolean | undefined;
16
- error: any;
17
- emptyMessage?: string | undefined;
18
- emptyIcon: any;
19
- maxBodyHeight: any;
20
- }): import("react/jsx-runtime").JSX.Element;
1
+ import React from "react";
2
+ import { BaseCardProps } from "./BaseCard";
3
+ export interface ListItem {
4
+ id?: string | number;
5
+ title?: string;
6
+ name?: string;
7
+ description?: string;
8
+ status?: string;
9
+ timestamp?: string | Date;
10
+ value?: string | number;
11
+ unit?: string;
12
+ avatar?: string | React.ReactNode;
13
+ }
14
+ export interface ListCardProps extends Omit<BaseCardProps, "variant" | "header" | "body"> {
15
+ items?: ListItem[];
16
+ title?: string;
17
+ subtitle?: string;
18
+ showAvatars?: boolean;
19
+ showStatus?: boolean;
20
+ showActions?: boolean;
21
+ showTimestamp?: boolean;
22
+ dense?: boolean;
23
+ divided?: boolean;
24
+ actions?: React.ReactNode;
25
+ itemActions?: (item: ListItem, index: number) => React.ReactNode;
26
+ onItemClick?: (item: ListItem, index: number) => void;
27
+ loading?: boolean;
28
+ error?: string | Error;
29
+ emptyMessage?: string;
30
+ emptyIcon?: React.ReactNode;
31
+ maxBodyHeight?: string | number;
32
+ }
33
+ export default function ListCard({ items, title, subtitle, showAvatars, showStatus, showActions, showTimestamp, dense, divided, actions, itemActions, onItemClick, loading, error, emptyMessage, emptyIcon, maxBodyHeight, ...cardProps }: ListCardProps): import("react/jsx-runtime").JSX.Element;