@schandlergarcia/sf-web-components 1.2.6 → 1.2.7

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 (165) hide show
  1. package/package.json +2 -1
  2. package/scripts/postinstall.mjs +69 -93
  3. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Account.cls +196 -0
  4. package/src/components/library/.sfdx/tools/sobjects/standardObjects/AccountHistory.cls +25 -0
  5. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Asset.cls +138 -0
  6. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Attachment.cls +35 -0
  7. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Case.cls +111 -0
  8. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Contact.cls +167 -0
  9. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Contract.cls +96 -0
  10. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Domain.cls +29 -0
  11. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Lead.cls +128 -0
  12. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Note.cls +32 -0
  13. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Opportunity.cls +113 -0
  14. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Order.cls +127 -0
  15. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Pricebook2.cls +47 -0
  16. package/src/components/library/.sfdx/tools/sobjects/standardObjects/PricebookEntry.cls +47 -0
  17. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Product2.cls +91 -0
  18. package/src/components/library/.sfdx/tools/sobjects/standardObjects/RecordType.cls +35 -0
  19. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Report.cls +47 -0
  20. package/src/components/library/.sfdx/tools/sobjects/standardObjects/Task.cls +79 -0
  21. package/src/components/library/.sfdx/tools/sobjects/standardObjects/User.cls +2318 -0
  22. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Account.json +2952 -0
  23. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/AccountHistory.json +875 -0
  24. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Asset.json +1699 -0
  25. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Attachment.json +362 -0
  26. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Case.json +1371 -0
  27. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Contact.json +2309 -0
  28. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Contract.json +1304 -0
  29. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Domain.json +293 -0
  30. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Lead.json +1977 -0
  31. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Note.json +303 -0
  32. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Opportunity.json +1470 -0
  33. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Order.json +1646 -0
  34. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Pricebook2.json +482 -0
  35. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/PricebookEntry.json +433 -0
  36. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Product2.json +1039 -0
  37. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/RecordType.json +2576 -0
  38. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Report.json +486 -0
  39. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/Task.json +4296 -0
  40. package/src/components/library/.sfdx/tools/soqlMetadata/standardObjects/User.json +30415 -0
  41. package/src/components/library/.sfdx/tools/soqlMetadata/typeNames.json +78 -0
  42. package/src/components/library/.sfdx/typings/lwc/sobjects/Account.d.ts +264 -0
  43. package/src/components/library/.sfdx/typings/lwc/sobjects/AccountHistory.d.ts +44 -0
  44. package/src/components/library/.sfdx/typings/lwc/sobjects/Asset.d.ts +240 -0
  45. package/src/components/library/.sfdx/typings/lwc/sobjects/Attachment.d.ts +76 -0
  46. package/src/components/library/.sfdx/typings/lwc/sobjects/Case.d.ts +172 -0
  47. package/src/components/library/.sfdx/typings/lwc/sobjects/Contact.d.ts +264 -0
  48. package/src/components/library/.sfdx/typings/lwc/sobjects/Contract.d.ts +188 -0
  49. package/src/components/library/.sfdx/typings/lwc/sobjects/Domain.d.ts +52 -0
  50. package/src/components/library/.sfdx/typings/lwc/sobjects/Lead.d.ts +252 -0
  51. package/src/components/library/.sfdx/typings/lwc/sobjects/Note.d.ts +64 -0
  52. package/src/components/library/.sfdx/typings/lwc/sobjects/Opportunity.d.ts +200 -0
  53. package/src/components/library/.sfdx/typings/lwc/sobjects/Order.d.ts +260 -0
  54. package/src/components/library/.sfdx/typings/lwc/sobjects/Pricebook2.d.ts +64 -0
  55. package/src/components/library/.sfdx/typings/lwc/sobjects/PricebookEntry.d.ts +76 -0
  56. package/src/components/library/.sfdx/typings/lwc/sobjects/Product2.d.ts +96 -0
  57. package/src/components/library/.sfdx/typings/lwc/sobjects/RecordType.d.ts +64 -0
  58. package/src/components/library/.sfdx/typings/lwc/sobjects/Report.d.ts +80 -0
  59. package/src/components/library/.sfdx/typings/lwc/sobjects/Task.d.ts +184 -0
  60. package/src/components/library/.sfdx/typings/lwc/sobjects/User.d.ts +752 -0
  61. package/src/components/library/cards/ActionList.jsx +38 -0
  62. package/src/components/library/cards/ActivityCard.jsx +56 -0
  63. package/src/components/library/cards/BaseCard.jsx +109 -0
  64. package/src/components/library/cards/CalloutCard.jsx +37 -0
  65. package/src/components/library/cards/ChartCard.jsx +105 -0
  66. package/src/components/library/cards/FeedPanel.jsx +39 -0
  67. package/src/components/library/cards/ListCard.jsx +193 -0
  68. package/src/components/library/cards/MetricCard.jsx +109 -0
  69. package/src/components/library/cards/MetricsStrip.jsx +78 -0
  70. package/src/components/library/cards/SectionCard.jsx +83 -0
  71. package/src/components/library/cards/SemanticMetricCard.jsx +52 -0
  72. package/src/components/library/cards/SemanticMetricCardWithLoading.jsx +23 -0
  73. package/src/components/library/cards/SemanticTableCard.jsx +48 -0
  74. package/src/components/library/cards/SemanticTableCardWithLoading.jsx +22 -0
  75. package/src/components/library/cards/StatusCard.jsx +220 -0
  76. package/src/components/library/cards/TableCard.jsx +337 -0
  77. package/src/components/library/cards/WidgetCard.jsx +90 -0
  78. package/src/components/library/charts/D3Chart.jsx +109 -0
  79. package/src/components/library/charts/D3ChartTemplates.jsx +126 -0
  80. package/src/components/library/charts/GeoMap.jsx +293 -0
  81. package/src/components/library/chat/ChatBar.jsx +256 -0
  82. package/src/components/library/chat/ChatInput.jsx +89 -0
  83. package/src/components/library/chat/ChatMessage.jsx +178 -0
  84. package/src/components/library/chat/ChatMessageList.jsx +73 -0
  85. package/src/components/library/chat/ChatPanel.jsx +97 -0
  86. package/src/components/library/chat/ChatSuggestions.jsx +28 -0
  87. package/src/components/library/chat/ChatToolCall.jsx +100 -0
  88. package/src/components/library/chat/ChatTypingIndicator.jsx +23 -0
  89. package/src/components/library/chat/ChatWelcome.jsx +43 -0
  90. package/src/components/library/chat/index.jsx +10 -0
  91. package/src/components/library/chat/useChatState.jsx +130 -0
  92. package/src/components/library/data/DataModeProvider.jsx +67 -0
  93. package/src/components/library/data/DataModeToggle.jsx +36 -0
  94. package/src/components/library/data/chartDataProvider.jsx +61 -0
  95. package/src/components/library/data/filterUtils.jsx +141 -0
  96. package/src/components/library/data/useDataSource.jsx +33 -0
  97. package/src/components/library/data/usePageFilters.jsx +99 -0
  98. package/src/components/library/filters/FilterBar.jsx +95 -0
  99. package/src/components/library/filters/SearchFilter.jsx +36 -0
  100. package/src/components/library/filters/SelectFilter.jsx +55 -0
  101. package/src/components/library/filters/ToggleFilter.jsx +52 -0
  102. package/src/components/library/filters/index.jsx +4 -0
  103. package/src/components/library/forms/FormField.jsx +291 -0
  104. package/src/components/library/forms/FormModal.jsx +201 -0
  105. package/src/components/library/forms/FormRenderer.jsx +46 -0
  106. package/src/components/library/forms/FormSection.jsx +69 -0
  107. package/src/components/library/forms/index.jsx +5 -0
  108. package/src/components/library/forms/useFormState.jsx +165 -0
  109. package/src/components/library/heroui/Accordion.jsx +26 -0
  110. package/src/components/library/heroui/Alert.jsx +8 -0
  111. package/src/components/library/heroui/Badge.jsx +8 -0
  112. package/src/components/library/heroui/Breadcrumbs.jsx +22 -0
  113. package/src/components/library/heroui/Button.jsx +58 -0
  114. package/src/components/library/heroui/Card.jsx +8 -0
  115. package/src/components/library/heroui/Collapsible.jsx +42 -0
  116. package/src/components/library/heroui/DatePicker.jsx +34 -0
  117. package/src/components/library/heroui/Dialog.jsx +37 -0
  118. package/src/components/library/heroui/Drawer.jsx +32 -0
  119. package/src/components/library/heroui/Dropdown.jsx +28 -0
  120. package/src/components/library/heroui/Field.jsx +51 -0
  121. package/src/components/library/heroui/Input.jsx +6 -0
  122. package/src/components/library/heroui/Kbd.jsx +8 -0
  123. package/src/components/library/heroui/Meter.jsx +8 -0
  124. package/src/components/library/heroui/Modal.jsx +32 -0
  125. package/src/components/library/heroui/Pagination.jsx +8 -0
  126. package/src/components/library/heroui/Popover.jsx +64 -0
  127. package/src/components/library/heroui/ProgressBar.jsx +8 -0
  128. package/src/components/library/heroui/ProgressCircle.jsx +8 -0
  129. package/src/components/library/heroui/ScrollShadow.jsx +8 -0
  130. package/src/components/library/heroui/Select.jsx +37 -0
  131. package/src/components/library/heroui/Separator.jsx +8 -0
  132. package/src/components/library/heroui/Skeleton.jsx +8 -0
  133. package/src/components/library/heroui/Tabs.jsx +26 -0
  134. package/src/components/library/heroui/Toast.jsx +25 -0
  135. package/src/components/library/heroui/Toggle.jsx +14 -0
  136. package/src/components/library/heroui/Tooltip.jsx +21 -0
  137. package/src/components/library/index.jsx +149 -0
  138. package/src/components/library/layout/PageContainer.jsx +11 -0
  139. package/src/components/library/skeletons/CardSkeleton.jsx +30 -0
  140. package/src/components/library/theme/AppThemeProvider.jsx +67 -0
  141. package/src/components/library/theme/tokens.jsx +72 -0
  142. package/src/components/library/ui/Alert.jsx +80 -0
  143. package/src/components/library/ui/Avatar.jsx +44 -0
  144. package/src/components/library/ui/BreadcrumbExtras.tsx +119 -0
  145. package/src/components/library/ui/Card.jsx +117 -0
  146. package/src/components/library/ui/Checkbox.jsx +17 -0
  147. package/src/components/library/ui/Chip.jsx +38 -0
  148. package/src/components/library/ui/Collapsible.tsx +31 -0
  149. package/src/components/library/ui/Container.jsx +56 -0
  150. package/src/components/library/ui/DatePicker.tsx +34 -0
  151. package/src/components/library/ui/Dialog.tsx +141 -0
  152. package/src/components/library/ui/EmptyState.jsx +46 -0
  153. package/src/components/library/ui/Field.tsx +82 -0
  154. package/src/components/library/ui/FieldGroup.jsx +17 -0
  155. package/src/components/library/ui/Label.jsx +22 -0
  156. package/src/components/library/ui/PaginationExtras.tsx +143 -0
  157. package/src/components/library/ui/Popover.tsx +39 -0
  158. package/src/components/library/ui/Select.tsx +113 -0
  159. package/src/components/library/ui/Spinner.jsx +64 -0
  160. package/src/components/library/ui/Text.jsx +46 -0
  161. package/src/components/library/ui/UIButton.jsx +61 -0
  162. package/src/components/library/ui/UIInput.jsx +21 -0
  163. package/src/components/workspace/ComponentRegistry.jsx +297 -0
  164. package/src/templates/pages/Home.tsx.template +5 -5
  165. package/src/templates/pages/NotFound.tsx.template +2 -2
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { ProgressCircle } from "@heroui/react";
3
+
4
+ export default function HeroUIProgressCircle({ children, ...props }) {
5
+ return <ProgressCircle {...props}>{children}</ProgressCircle>;
6
+ }
7
+
8
+ export { ProgressCircle };
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { ScrollShadow } from "@heroui/react";
3
+
4
+ export default function HeroUIScrollShadow({ children, ...props }) {
5
+ return <ScrollShadow {...props}>{children}</ScrollShadow>;
6
+ }
7
+
8
+ export { ScrollShadow };
@@ -0,0 +1,37 @@
1
+ import React from "react";
2
+ import { Select as HeroSelect } from "@heroui/react";
3
+
4
+ /**
5
+ * HeroUI v3 Select wrapper with shadcn compatibility.
6
+ *
7
+ * Translates shadcn API to HeroUI:
8
+ * - onValueChange -> onSelectionChange
9
+ * - value -> selectedKeys
10
+ */
11
+ export default function HeroUISelect({ value, onValueChange, children, ...props }) {
12
+ // Translate shadcn API to HeroUI API
13
+ const selectedKeys = value ? [value] : [];
14
+ const handleSelectionChange = (keys) => {
15
+ const selected = Array.from(keys)[0];
16
+ onValueChange?.(selected || "");
17
+ };
18
+
19
+ return (
20
+ <HeroSelect
21
+ selectedKeys={selectedKeys}
22
+ onSelectionChange={handleSelectionChange}
23
+ {...props}
24
+ >
25
+ {children}
26
+ </HeroSelect>
27
+ );
28
+ }
29
+
30
+ // For direct HeroUI usage
31
+ export const Select = HeroUISelect;
32
+
33
+ // Shadcn-compatible subcomponents that just pass through children
34
+ export const SelectTrigger = ({ children, size, ...props }) => <>{children}</>;
35
+ export const SelectValue = ({ placeholder, ...props }) => <span {...props}>{placeholder}</span>;
36
+ export const SelectContent = ({ children, ...props }) => <>{children}</>;
37
+ export const SelectItem = ({ value, children, ...props }) => <HeroSelect.Item key={value} {...props}>{children}</HeroSelect.Item>;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { Separator } from "@heroui/react";
3
+
4
+ export default function HeroUISeparator(props) {
5
+ return <Separator {...props} />;
6
+ }
7
+
8
+ export { Separator };
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { Skeleton } from "@heroui/react";
3
+
4
+ export default function HeroUISkeleton({ children, ...props }) {
5
+ return <Skeleton {...props}>{children}</Skeleton>;
6
+ }
7
+
8
+ export { Skeleton };
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { Tabs } from "@heroui/react";
3
+
4
+ /**
5
+ * HeroUI v3 Tabs — compound component.
6
+ *
7
+ * Sub-components via dot notation on the named `Tabs` export:
8
+ * Tabs.List, Tabs.ListContainer, Tabs.Tab, Tabs.Panel,
9
+ * Tabs.Separator, Tabs.Indicator
10
+ *
11
+ * @example
12
+ * import { Tabs } from "@/components/library";
13
+ * <Tabs>
14
+ * <Tabs.List aria-label="Options">
15
+ * <Tabs.Tab id="overview">Overview</Tabs.Tab>
16
+ * <Tabs.Tab id="analytics">Analytics</Tabs.Tab>
17
+ * </Tabs.List>
18
+ * <Tabs.Panel id="overview">…</Tabs.Panel>
19
+ * <Tabs.Panel id="analytics">…</Tabs.Panel>
20
+ * </Tabs>
21
+ */
22
+ export default function HeroUITabs({ variant = "primary", ...props }) {
23
+ return <Tabs variant={variant} {...props} />;
24
+ }
25
+
26
+ export { Tabs };
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import { Toast, toast } from "@heroui/react";
3
+
4
+ /**
5
+ * HeroUI v3 Toast — notification system.
6
+ *
7
+ * SETUP: Add <Toast.Provider /> to your app root (_app.js).
8
+ *
9
+ * Then call the `toast` function from anywhere:
10
+ * toast("Event created");
11
+ * toast.success("Saved!");
12
+ * toast.warning("Check settings");
13
+ * toast.danger("Something failed");
14
+ * toast.promise(asyncFn(), { loading: "…", success: "Done", error: "Failed" });
15
+ *
16
+ * Sub-components via dot notation on the named `Toast` export:
17
+ * Toast.Provider, Toast.Indicator, Toast.Content,
18
+ * Toast.Title, Toast.Description, Toast.ActionButton,
19
+ * Toast.CloseButton
20
+ */
21
+ export default function HeroUIToast(props) {
22
+ return <Toast {...props} />;
23
+ }
24
+
25
+ export { Toast, toast };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import { Switch } from "@heroui/react";
3
+ import { useThemeMode } from "../theme/AppThemeProvider";
4
+
5
+ export default function HeroUIToggle({ label = "Dark mode", ...props }) {
6
+ const { mode, toggle } = useThemeMode();
7
+ const isSelected = mode === "dark";
8
+
9
+ return (
10
+ <Switch isSelected={isSelected} onChange={toggle} {...props}>
11
+ <Switch.Content>{label}</Switch.Content>
12
+ </Switch>
13
+ );
14
+ }
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { Tooltip } from "@heroui/react";
3
+
4
+ /**
5
+ * HeroUI v3 Tooltip — compound component.
6
+ *
7
+ * Sub-components via dot notation on the named `Tooltip` export:
8
+ * Tooltip.Trigger, Tooltip.Content, Tooltip.Arrow
9
+ *
10
+ * @example
11
+ * import { Tooltip } from "@/components/library";
12
+ * <Tooltip>
13
+ * <Tooltip.Trigger><Button>Hover me</Button></Tooltip.Trigger>
14
+ * <Tooltip.Content>Helpful info</Tooltip.Content>
15
+ * </Tooltip>
16
+ */
17
+ export default function HeroUITooltip(props) {
18
+ return <Tooltip {...props} />;
19
+ }
20
+
21
+ export { Tooltip };
@@ -0,0 +1,149 @@
1
+ import React from 'react';
2
+
3
+ export { default as AppThemeProvider, useThemeMode } from "./theme/AppThemeProvider";
4
+
5
+ // UI primitives
6
+ export { default as UIButton } from "./ui/UIButton";
7
+ export { default as UIInput } from "./ui/UIInput";
8
+ export { default as UIText } from "./ui/Text";
9
+ export { default as UIContainer } from "./ui/Container";
10
+ export { default as UIChip } from "./ui/Chip";
11
+ export { default as Avatar } from "./ui/Avatar";
12
+ export { default as EmptyState } from "./ui/EmptyState";
13
+ export { default as Spinner } from "./ui/Spinner";
14
+ export { default as Label } from "./ui/Label";
15
+ export { default as Checkbox } from "./ui/Checkbox";
16
+ export { default as FieldGroup } from "./ui/FieldGroup";
17
+
18
+ // shadcn-compatible Card with subcomponents
19
+ export { default as UICard, Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "./ui/Card";
20
+
21
+ // shadcn-compatible Alert with subcomponents
22
+ export { default as Alert, AlertTitle, AlertDescription, AlertAction } from "./ui/Alert";
23
+
24
+ // shadcn-compatible components from heroui/ (HeroUI-based)
25
+ export { default as HeroUIDialog, Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } from "./heroui/Dialog";
26
+ export { default as HeroUIField, Field, FieldLabel, FieldDescription, FieldError } from "./heroui/Field";
27
+ export { default as HeroUICollapsible, Collapsible, CollapsibleTrigger, CollapsibleContent } from "./heroui/Collapsible";
28
+ export { default as HeroUIPopover, Popover, PopoverTrigger, PopoverContent } from "./heroui/Popover";
29
+ export { default as HeroUIDatePicker, DatePicker, DatePickerTrigger, DatePickerContent, DatePickerCalendar, DatePickerRangeTrigger } from "./heroui/DatePicker";
30
+
31
+ // Cards
32
+ export { default as BaseCard } from "./cards/BaseCard";
33
+ export { default as ChartCard } from "./cards/ChartCard";
34
+ export { default as ListCard } from "./cards/ListCard";
35
+ export { default as MetricCard } from "./cards/MetricCard";
36
+ export { default as SectionCard } from "./cards/SectionCard";
37
+ export { default as StatusCard } from "./cards/StatusCard";
38
+ export { default as TableCard } from "./cards/TableCard";
39
+ export { default as WidgetCard } from "./cards/WidgetCard";
40
+ export { default as FeedPanel } from "./cards/FeedPanel";
41
+ export { default as ActivityCard } from "./cards/ActivityCard";
42
+ export { default as MetricsStrip } from "./cards/MetricsStrip";
43
+ export { default as CalloutCard } from "./cards/CalloutCard";
44
+ export { default as ActionList } from "./cards/ActionList";
45
+
46
+ // Charts
47
+ export { default as D3Chart } from "./charts/D3Chart";
48
+ export { D3ChartTemplates } from "./charts/D3ChartTemplates";
49
+ export { default as GeoMap } from "./charts/GeoMap";
50
+
51
+ // Layout
52
+ export { default as PageContainer } from "./layout/PageContainer";
53
+
54
+ // Skeletons
55
+ export { default as CardSkeleton } from "./skeletons/CardSkeleton";
56
+
57
+ // Forms
58
+ export { FormModal, FormRenderer, FormSection, FormField, useFormState } from "./forms";
59
+
60
+ // Filters
61
+ export { FilterBar, SearchFilter, SelectFilter, ToggleFilter } from "./filters";
62
+
63
+ // Data mode
64
+ export { default as DataModeProvider, useDataMode } from "./data/DataModeProvider";
65
+ export { default as DataModeToggle } from "./data/DataModeToggle";
66
+ export { default as useDataSource } from "./data/useDataSource";
67
+
68
+ // Data utilities
69
+ export { default as usePageFilters } from "./data/usePageFilters";
70
+ export {
71
+ filterBySearch,
72
+ filterByValue,
73
+ filterByToggle,
74
+ filterByDateRange,
75
+ sortByKey,
76
+ applyFilters,
77
+ } from "./data/filterUtils";
78
+
79
+ // Chat / AI agent
80
+ export {
81
+ ChatPanel,
82
+ ChatBar,
83
+ ChatMessageList,
84
+ ChatMessage,
85
+ ChatInput,
86
+ ChatTypingIndicator,
87
+ ChatSuggestions,
88
+ ChatToolCall,
89
+ ChatWelcome,
90
+ useChatState,
91
+ } from "./chat";
92
+
93
+ // HeroUI wrappers — existing
94
+ export { default as HeroUIButton, Button } from "./heroui/Button";
95
+ export { default as HeroUIInput } from "./heroui/Input";
96
+ export { default as HeroUICard } from "./heroui/Card";
97
+ export { default as HeroUIToggle } from "./heroui/Toggle";
98
+
99
+ // HeroUI wrappers — navigation & layout
100
+ export { default as HeroUITabs } from "./heroui/Tabs";
101
+ export { default as HeroUIAccordion } from "./heroui/Accordion";
102
+ export { default as HeroUIBreadcrumbs, Breadcrumbs } from "./heroui/Breadcrumbs";
103
+ export { default as HeroUISeparator, Separator } from "./heroui/Separator";
104
+ export { default as HeroUIPagination, Pagination } from "./heroui/Pagination";
105
+
106
+ // Breadcrumb subcomponents for shadcn compatibility
107
+ export const Breadcrumb = ({ children, ...props }) => React.createElement('nav', { 'aria-label': 'breadcrumb', ...props }, children);
108
+ export const BreadcrumbList = ({ children, ...props }) => React.createElement('ol', { className: 'flex flex-wrap items-center gap-1.5 break-words text-sm text-slate-500 dark:text-slate-400', ...props }, children);
109
+ export const BreadcrumbItem = ({ children, ...props }) => React.createElement('li', { className: 'inline-flex items-center gap-1.5', ...props }, children);
110
+ export const BreadcrumbLink = ({ href, children, asChild, ...props }) => asChild ? React.createElement('span', props, children) : React.createElement('a', { href, className: 'transition-colors hover:text-slate-900 dark:hover:text-slate-50', ...props }, children);
111
+ export const BreadcrumbPage = ({ children, ...props }) => React.createElement('span', { role: 'link', 'aria-disabled': 'true', 'aria-current': 'page', className: 'font-normal text-slate-900 dark:text-slate-50', ...props }, children);
112
+ export const BreadcrumbSeparator = ({ children, ...props }) => React.createElement('li', { role: 'presentation', 'aria-hidden': 'true', ...props }, children ?? '/');
113
+ export const BreadcrumbEllipsis = (props) => React.createElement('span', { role: 'presentation', 'aria-hidden': 'true', ...props }, '...');
114
+
115
+ // Pagination subcomponents for shadcn compatibility
116
+ export const PaginationContent = ({ children, ...props }) => React.createElement('ul', { className: 'flex flex-row items-center gap-1', ...props }, children);
117
+ export const PaginationItem = ({ children, ...props }) => React.createElement('li', props, children);
118
+ export const PaginationLink = ({ href, isActive, children, ...props }) => React.createElement('a', { href, 'aria-current': isActive ? 'page' : undefined, className: `inline-flex items-center justify-center rounded-md text-sm font-medium h-9 min-w-9 px-4 py-2 ${isActive ? 'bg-slate-900 text-white dark:bg-slate-50 dark:text-slate-900' : 'hover:bg-slate-100 dark:hover:bg-slate-800'}`, ...props }, children);
119
+ export const PaginationPrevious = ({ href, ...props }) => React.createElement(PaginationLink, { href, ...props }, 'Previous');
120
+ export const PaginationNext = ({ href, ...props }) => React.createElement(PaginationLink, { href, ...props }, 'Next');
121
+ export const PaginationEllipsis = (props) => React.createElement('span', { 'aria-hidden': true, ...props }, '...');
122
+
123
+ // HeroUI wrappers — overlays
124
+ export { default as HeroUIDrawer } from "./heroui/Drawer";
125
+ export { default as HeroUIModal } from "./heroui/Modal";
126
+ export { default as HeroUIDropdown } from "./heroui/Dropdown";
127
+ export { default as HeroUITooltip } from "./heroui/Tooltip";
128
+ export { default as HeroUIToast } from "./heroui/Toast";
129
+
130
+ // HeroUI wrappers — feedback
131
+ export { default as HeroUIAlert } from "./heroui/Alert";
132
+ export { default as HeroUIBadge } from "./heroui/Badge";
133
+ export { default as HeroUIProgressBar } from "./heroui/ProgressBar";
134
+ export { default as HeroUIProgressCircle } from "./heroui/ProgressCircle";
135
+ export { default as HeroUIMeter } from "./heroui/Meter";
136
+ export { default as HeroUISkeleton, Skeleton } from "./heroui/Skeleton";
137
+
138
+ // HeroUI wrappers — pickers & forms
139
+ export { default as HeroUISelect, Select } from "./heroui/Select";
140
+
141
+ // Re-export Select subcomponents for shadcn compatibility
142
+ export const SelectTrigger = ({ children, size, ...props }) => React.createElement('button', props, children);
143
+ export const SelectValue = ({ placeholder, ...props }) => React.createElement('span', props, placeholder);
144
+ export const SelectContent = ({ children, ...props }) => React.createElement('div', props, children);
145
+ export const SelectItem = ({ children, ...props }) => React.createElement('div', props, children);
146
+
147
+ // HeroUI wrappers — utilities
148
+ export { default as HeroUIKbd, Kbd } from "./heroui/Kbd";
149
+ export { default as HeroUIScrollShadow, ScrollShadow } from "./heroui/ScrollShadow";
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+
3
+ export default function PageContainer({ className = "", children }) {
4
+ return (
5
+ <div className={["mx-auto w-full max-w-6xl px-4 sm:px-6", className].filter(Boolean).join(" ")}>
6
+ {children}
7
+ </div>
8
+ );
9
+ }
10
+
11
+
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+
3
+ export default function CardSkeleton({ lines = 3, className = "" }) {
4
+ return (
5
+ <div
6
+ className={[
7
+ "rounded-2xl border border-slate-200 bg-white p-5 shadow-sm dark:border-slate-800 dark:bg-slate-900",
8
+ className
9
+ ]
10
+ .filter(Boolean)
11
+ .join(" ")}
12
+ aria-busy="true"
13
+ aria-label="Loading"
14
+ >
15
+ <div className="space-y-3">
16
+ {Array.from({ length: lines }).map((_, i) => (
17
+ <div
18
+ key={i}
19
+ className={[
20
+ "h-4 animate-pulse rounded bg-slate-200 dark:bg-slate-800",
21
+ i === 0 ? "w-1/3" : i === 1 ? "w-2/3" : "w-1/2"
22
+ ].join(" ")}
23
+ />
24
+ ))}
25
+ </div>
26
+ </div>
27
+ );
28
+ }
29
+
30
+
@@ -0,0 +1,67 @@
1
+ import React from "react";
2
+ import { tokens, getTokenCSSProperties } from "./tokens";
3
+
4
+ const ThemeModeContext = React.createContext({
5
+ mode: "light",
6
+ theme: tokens,
7
+ toggle: () => {}
8
+ });
9
+
10
+ const STORAGE_KEY = "app-color-mode";
11
+
12
+ function applyHtmlDarkClass(mode) {
13
+ if (typeof document === "undefined") return;
14
+ const root = document.documentElement;
15
+ if (mode === "dark") root.classList.add("dark");
16
+ else root.classList.remove("dark");
17
+ }
18
+
19
+ function applyTokenCSSProperties() {
20
+ if (typeof document === "undefined") return;
21
+ const root = document.documentElement;
22
+ const props = getTokenCSSProperties();
23
+ for (const [key, value] of Object.entries(props)) {
24
+ root.style.setProperty(key, value);
25
+ }
26
+ }
27
+
28
+ export function useThemeMode() {
29
+ return React.useContext(ThemeModeContext);
30
+ }
31
+
32
+ export default function AppThemeProvider({ initialMode = "light", children }) {
33
+ const [mode, setMode] = React.useState(initialMode);
34
+
35
+ React.useEffect(() => {
36
+ applyTokenCSSProperties();
37
+ }, []);
38
+
39
+ React.useEffect(() => {
40
+ try {
41
+ const stored = window.localStorage.getItem(STORAGE_KEY);
42
+ if (stored === "light" || stored === "dark") setMode(stored);
43
+ } catch {
44
+ // ignore
45
+ }
46
+ }, []);
47
+
48
+ React.useEffect(() => {
49
+ applyHtmlDarkClass(mode);
50
+ try {
51
+ window.localStorage.setItem(STORAGE_KEY, mode);
52
+ } catch {
53
+ // ignore
54
+ }
55
+ }, [mode]);
56
+
57
+ const value = React.useMemo(
58
+ () => ({
59
+ mode,
60
+ theme: tokens,
61
+ toggle: () => setMode((m) => (m === "dark" ? "light" : "dark"))
62
+ }),
63
+ [mode]
64
+ );
65
+
66
+ return <ThemeModeContext.Provider value={value}>{children}</ThemeModeContext.Provider>;
67
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Design tokens — single source of truth for branding.
3
+ *
4
+ * To rebrand a command center:
5
+ * 1. Swap the `brand` palette (use any Tailwind-style color scale)
6
+ * 2. Swap the `accent` palette
7
+ * 3. Change `fonts.sans` in _app.js (next/font import)
8
+ *
9
+ * AppThemeProvider injects these as CSS custom properties on :root,
10
+ * and tailwind.config.js references them via var(--color-brand-*).
11
+ */
12
+
13
+ export const tokens = {
14
+ colors: {
15
+ brand: {
16
+ 50: "#EEF2FF",
17
+ 100: "#E0E7FF",
18
+ 200: "#C7D2FE",
19
+ 300: "#A5B4FC",
20
+ 400: "#818CF8",
21
+ 500: "#6366F1",
22
+ 600: "#4F46E5",
23
+ 700: "#4338CA",
24
+ 800: "#3730A3",
25
+ 900: "#312E81",
26
+ 950: "#1E1B4E",
27
+ },
28
+ accent: {
29
+ 50: "#ECFEFF",
30
+ 100: "#CFFAFE",
31
+ 200: "#A5F3FC",
32
+ 300: "#67E8F9",
33
+ 400: "#22D3EE",
34
+ 500: "#06B6D4",
35
+ 600: "#0891B2",
36
+ 700: "#0E7490",
37
+ 800: "#155E75",
38
+ 900: "#164E63",
39
+ 950: "#083344",
40
+ },
41
+ },
42
+
43
+ fonts: {
44
+ sans: "Inter",
45
+ mono: "JetBrains Mono",
46
+ },
47
+
48
+ radius: {
49
+ sm: "0.5rem",
50
+ md: "0.75rem",
51
+ lg: "1rem",
52
+ },
53
+
54
+ spacing: {
55
+ pageX: "1.25rem",
56
+ pageY: "1.25rem",
57
+ },
58
+ };
59
+
60
+ /**
61
+ * Generates CSS custom property assignments from the token palettes.
62
+ * Used by AppThemeProvider to inject on :root at runtime.
63
+ */
64
+ export function getTokenCSSProperties() {
65
+ const props = {};
66
+ for (const [palette, shades] of Object.entries(tokens.colors)) {
67
+ for (const [shade, value] of Object.entries(shades)) {
68
+ props[`--color-${palette}-${shade}`] = value;
69
+ }
70
+ }
71
+ return props;
72
+ }
@@ -0,0 +1,80 @@
1
+ import React from "react";
2
+
3
+ const VARIANT_CLASSES = {
4
+ default: "bg-slate-50 border-slate-200 text-slate-900 dark:bg-slate-900 dark:border-slate-800 dark:text-slate-50",
5
+ info: "bg-blue-50 border-blue-200 text-blue-900 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-50",
6
+ success: "bg-green-50 border-green-200 text-green-900 dark:bg-green-950 dark:border-green-800 dark:text-green-50",
7
+ warning: "bg-yellow-50 border-yellow-200 text-yellow-900 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-50",
8
+ error: "bg-red-50 border-red-200 text-red-900 dark:bg-red-950 dark:border-red-800 dark:text-red-50",
9
+ destructive: "bg-red-50 border-red-200 text-red-900 dark:bg-red-950 dark:border-red-800 dark:text-red-50"
10
+ };
11
+
12
+ export default function Alert({ variant = "default", className = "", children, ...rest }) {
13
+ const variantClasses = VARIANT_CLASSES[variant] || VARIANT_CLASSES.default;
14
+
15
+ return (
16
+ <div
17
+ role="alert"
18
+ className={[
19
+ "rounded-lg border p-4",
20
+ variantClasses,
21
+ className
22
+ ]
23
+ .filter(Boolean)
24
+ .join(" ")}
25
+ {...rest}
26
+ >
27
+ {children}
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export function AlertTitle({ className = "", children, ...rest }) {
33
+ return (
34
+ <h5
35
+ className={[
36
+ "mb-1 font-medium leading-none tracking-tight",
37
+ className
38
+ ]
39
+ .filter(Boolean)
40
+ .join(" ")}
41
+ {...rest}
42
+ >
43
+ {children}
44
+ </h5>
45
+ );
46
+ }
47
+
48
+ export function AlertDescription({ className = "", children, ...rest }) {
49
+ return (
50
+ <div
51
+ className={[
52
+ "text-sm opacity-90",
53
+ className
54
+ ]
55
+ .filter(Boolean)
56
+ .join(" ")}
57
+ {...rest}
58
+ >
59
+ {children}
60
+ </div>
61
+ );
62
+ }
63
+
64
+ export function AlertAction({ className = "", children, ...rest }) {
65
+ return (
66
+ <div
67
+ className={[
68
+ "mt-3",
69
+ className
70
+ ]
71
+ .filter(Boolean)
72
+ .join(" ")}
73
+ {...rest}
74
+ >
75
+ {children}
76
+ </div>
77
+ );
78
+ }
79
+
80
+ export { Alert };
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+
3
+ const SIZE_MAP = {
4
+ xs: "h-6 w-6 text-[9px]",
5
+ sm: "h-8 w-8 text-[10px]",
6
+ md: "h-9 w-9 text-xs",
7
+ lg: "h-11 w-11 text-sm",
8
+ };
9
+
10
+ const TONE_MAP = {
11
+ slate: "bg-slate-800 text-white",
12
+ brand: "bg-brand-500 text-white",
13
+ neutral: "bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-200",
14
+ };
15
+
16
+ export default function Avatar({ src, name, initials, icon, size = "sm", tone = "slate", className = "", ...rest }) {
17
+ const sizeClass = SIZE_MAP[size] ?? SIZE_MAP.sm;
18
+
19
+ if (src) {
20
+ return (
21
+ <img
22
+ src={src}
23
+ alt={name ?? ""}
24
+ className={`${sizeClass} shrink-0 rounded-full border border-slate-200 object-cover dark:border-slate-800 ${className}`}
25
+ {...rest}
26
+ />
27
+ );
28
+ }
29
+
30
+ if (React.isValidElement(icon)) {
31
+ return (
32
+ <div className={`${sizeClass} ${TONE_MAP[tone] ?? TONE_MAP.slate} flex shrink-0 items-center justify-center rounded-full ${className}`} {...rest}>
33
+ {icon}
34
+ </div>
35
+ );
36
+ }
37
+
38
+ const label = initials ?? (name ? name.split(" ").map(w => w[0]).join("").slice(0, 2).toUpperCase() : "?");
39
+ return (
40
+ <div className={`${sizeClass} ${TONE_MAP[tone] ?? TONE_MAP.slate} flex shrink-0 items-center justify-center rounded-full font-bold ${className}`} {...rest}>
41
+ {label}
42
+ </div>
43
+ );
44
+ }