@schandlergarcia/sf-web-components 2.3.17 → 2.5.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.
- package/.a4drules/skills/command-center-builder/SKILL.md +3 -2
- package/.a4drules/skills/component-library/SKILL.md +50 -4
- package/.a4drules/skills/component-library/card-components.md +88 -0
- package/.a4drules/skills/component-library/when-to-use.md +1 -0
- package/CHANGELOG.md +40 -0
- package/CLAUDE.md +12 -13
- package/README.md +0 -15
- package/dist/components/library/cards/KanbanBoard.js +313 -0
- package/dist/components/library/cards/KanbanBoard.js.map +1 -0
- package/dist/components/library/index.js +60 -57
- package/dist/components/library/index.js.map +1 -1
- package/dist/components/workspace/ComponentRegistry.js +5 -2
- package/dist/components/workspace/ComponentRegistry.js.map +1 -1
- package/dist/index.js +84 -82
- package/dist/index.js.map +1 -1
- package/dist/styles/global.css +44 -57
- package/package.json +7 -2
- package/scripts/apply-brand.mjs +47 -30
- package/scripts/postinstall.mjs +1 -11
- package/src/components/library/cards/KanbanBoard.jsx +507 -0
- package/src/components/library/index.jsx +1 -0
- package/src/styles/global.css +44 -57
- package/brands/engine/PARTNER_HUB_PRD.md +0 -584
- package/brands/engine/agentApiConfig.ts +0 -36
- package/brands/engine/app/api/graphql-operations-types.ts +0 -11260
- package/brands/engine/app/api/graphqlClient.ts +0 -25
- package/brands/engine/app/api/partnerQueries.ts +0 -212
- package/brands/engine/app/appLayout.tsx +0 -5
- package/brands/engine/app/components/AgentPanel.tsx +0 -541
- package/brands/engine/app/components/AgentforceConversationClient.tsx +0 -201
- package/brands/engine/app/components/Data360Widget.tsx +0 -301
- package/brands/engine/app/components/__inherit_AgentforceConversationClient.tsx +0 -3
- package/brands/engine/app/components/alerts/status-alert.tsx +0 -49
- package/brands/engine/app/components/layouts/card-layout.tsx +0 -29
- package/brands/engine/app/components/workspace/CommandCenter.tsx +0 -16
- package/brands/engine/app/config/agentApi.ts +0 -36
- package/brands/engine/app/data/partner-hub-sample-data.js +0 -297
- package/brands/engine/app/features/object-search/__examples__/api/accountSearchService.ts +0 -46
- package/brands/engine/app/features/object-search/__examples__/api/query/distinctAccountIndustries.graphql +0 -19
- package/brands/engine/app/features/object-search/__examples__/api/query/distinctAccountTypes.graphql +0 -19
- package/brands/engine/app/features/object-search/__examples__/api/query/getAccountDetail.graphql +0 -121
- package/brands/engine/app/features/object-search/__examples__/api/query/searchAccounts.graphql +0 -51
- package/brands/engine/app/features/object-search/__examples__/pages/AccountObjectDetailPage.tsx +0 -357
- package/brands/engine/app/features/object-search/__examples__/pages/AccountSearch.tsx +0 -312
- package/brands/engine/app/features/object-search/__examples__/pages/Home.tsx +0 -34
- package/brands/engine/app/features/object-search/api/objectSearchService.ts +0 -84
- package/brands/engine/app/features/object-search/components/ActiveFilters.tsx +0 -89
- package/brands/engine/app/features/object-search/components/FilterContext.tsx +0 -83
- package/brands/engine/app/features/object-search/components/ObjectBreadcrumb.tsx +0 -66
- package/brands/engine/app/features/object-search/components/PaginationControls.tsx +0 -109
- package/brands/engine/app/features/object-search/components/SearchBar.tsx +0 -41
- package/brands/engine/app/features/object-search/components/SortControl.tsx +0 -143
- package/brands/engine/app/features/object-search/components/filters/BooleanFilter.tsx +0 -78
- package/brands/engine/app/features/object-search/components/filters/DateFilter.tsx +0 -128
- package/brands/engine/app/features/object-search/components/filters/DateRangeFilter.tsx +0 -70
- package/brands/engine/app/features/object-search/components/filters/FilterFieldWrapper.tsx +0 -33
- package/brands/engine/app/features/object-search/components/filters/MultiSelectFilter.tsx +0 -97
- package/brands/engine/app/features/object-search/components/filters/NumericRangeFilter.tsx +0 -163
- package/brands/engine/app/features/object-search/components/filters/SearchFilter.tsx +0 -50
- package/brands/engine/app/features/object-search/components/filters/SelectFilter.tsx +0 -97
- package/brands/engine/app/features/object-search/components/filters/TextFilter.tsx +0 -91
- package/brands/engine/app/features/object-search/hooks/useAsyncData.ts +0 -54
- package/brands/engine/app/features/object-search/hooks/useCachedAsyncData.ts +0 -184
- package/brands/engine/app/features/object-search/hooks/useDebouncedCallback.ts +0 -34
- package/brands/engine/app/features/object-search/hooks/useObjectSearchParams.ts +0 -252
- package/brands/engine/app/features/object-search/utils/debounce.ts +0 -25
- package/brands/engine/app/features/object-search/utils/fieldUtils.ts +0 -29
- package/brands/engine/app/features/object-search/utils/filterUtils.ts +0 -404
- package/brands/engine/app/features/object-search/utils/sortUtils.ts +0 -38
- package/brands/engine/app/hooks/useEngineLiveData.ts +0 -49
- package/brands/engine/app/hooks/useEvaAgent.ts +0 -288
- package/brands/engine/app/hooks/usePartnerDashboardData.ts +0 -141
- package/brands/engine/app/navigationMenu.tsx +0 -80
- package/brands/engine/app/pages/AccountObjectDetailPage.tsx +0 -361
- package/brands/engine/app/pages/AccountSearch.tsx +0 -305
- package/brands/engine/app/pages/BlankDashboard.tsx +0 -15
- package/brands/engine/app/pages/DataTest.tsx +0 -78
- package/brands/engine/app/pages/Home.tsx +0 -5
- package/brands/engine/app/pages/NotFound.tsx +0 -19
- package/brands/engine/app/pages/PartnerHubDashboard.tsx +0 -2760
- package/brands/engine/app/pages/Search.tsx +0 -13
- package/brands/engine/app/router-utils.tsx +0 -35
- package/brands/engine/app/routes.tsx +0 -39
- package/brands/engine/app/styles/global.css +0 -269
- package/brands/engine/brand.css +0 -40
- package/brands/engine/engine-command-center-prd.md +0 -575
- package/brands/engine/engine-live-data.js +0 -135
- package/brands/engine/engine-sample-data.js +0 -378
- package/brands/engine/engine_logo.png +0 -0
- package/brands/engine/global.css +0 -269
- package/brands/engine/partner-hub-sample-data.js +0 -281
- package/brands/engine/schema.graphql +0 -292
- package/brands/engine/useEngineLiveData.ts +0 -49
- package/brands/engine/useEvaAgent.ts +0 -288
package/dist/index.js
CHANGED
|
@@ -59,35 +59,36 @@ import { default as oo } from "./components/library/heroui/Tabs.js";
|
|
|
59
59
|
import { default as to } from "./components/library/heroui/Toast.js";
|
|
60
60
|
import { default as fo } from "./components/library/heroui/Toggle.js";
|
|
61
61
|
import { default as po } from "./components/library/heroui/Tooltip.js";
|
|
62
|
-
import { default as mo } from "./components/library/
|
|
63
|
-
import { default as xo } from "./components/library/
|
|
64
|
-
import { default as go } from "./components/library/cards/
|
|
65
|
-
import { default as co } from "./components/library/cards/
|
|
66
|
-
import { default as Uo } from "./components/library/
|
|
67
|
-
import { default as Po } from "./components/library/
|
|
68
|
-
import { default as So } from "./components/library/
|
|
69
|
-
import { default as Bo } from "./components/library/
|
|
70
|
-
import { default as ho } from "./components/library/
|
|
71
|
-
import { default as Mo } from "./components/library/
|
|
72
|
-
import { default as Ao } from "./components/library/cards/
|
|
73
|
-
import { default as vo } from "./components/library/
|
|
74
|
-
import { default as wo } from "./components/library/
|
|
75
|
-
import {
|
|
76
|
-
import { default as qo } from "./components/library/ui/
|
|
77
|
-
import { default as Jo } from "./components/library/ui/
|
|
78
|
-
import { default as Xo } from "./components/library/ui/
|
|
79
|
-
import { default as Zo } from "./components/library/ui/
|
|
80
|
-
import { default as $o } from "./components/library/ui/
|
|
81
|
-
import { default as ra } from "./components/library/
|
|
82
|
-
import { default as aa } from "./components/library/
|
|
83
|
-
import { default as la } from "./components/library/
|
|
84
|
-
import { default as da } from "./components/library/
|
|
85
|
-
import { default as pa } from "./components/library/
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
62
|
+
import { default as mo } from "./components/library/cards/KanbanBoard.js";
|
|
63
|
+
import { default as xo } from "./components/library/ui/Label.js";
|
|
64
|
+
import { default as go } from "./components/library/cards/ListCard.js";
|
|
65
|
+
import { default as co } from "./components/library/cards/MetricCard.js";
|
|
66
|
+
import { default as Uo } from "./components/library/cards/MetricsStrip.js";
|
|
67
|
+
import { default as Po } from "./components/library/layout/PageContainer.js";
|
|
68
|
+
import { default as So } from "./components/library/filters/SearchFilter.js";
|
|
69
|
+
import { default as Bo } from "./components/library/cards/SectionCard.js";
|
|
70
|
+
import { default as ho } from "./components/library/filters/SelectFilter.js";
|
|
71
|
+
import { default as Mo } from "./components/library/ui/Spinner.js";
|
|
72
|
+
import { default as Ao } from "./components/library/cards/StatusCard.js";
|
|
73
|
+
import { default as vo } from "./components/library/cards/TableCard.js";
|
|
74
|
+
import { default as wo } from "./components/library/filters/ToggleFilter.js";
|
|
75
|
+
import { default as Ko } from "./components/library/ui/UIButton.js";
|
|
76
|
+
import { Card as Go, CardContent as Vo, CardDescription as Wo, CardFooter as No, CardHeader as Oo, CardTitle as jo, default as qo } from "./components/library/ui/Card.js";
|
|
77
|
+
import { default as Jo } from "./components/library/ui/Chip.js";
|
|
78
|
+
import { default as Xo } from "./components/library/ui/Container.js";
|
|
79
|
+
import { default as Zo } from "./components/library/ui/UIInput.js";
|
|
80
|
+
import { default as $o } from "./components/library/ui/Text.js";
|
|
81
|
+
import { default as ra } from "./components/library/ui/Toggle.js";
|
|
82
|
+
import { default as aa } from "./components/library/cards/WidgetCard.js";
|
|
83
|
+
import { default as la } from "./components/library/chat/useChatState.js";
|
|
84
|
+
import { default as da } from "./components/library/data/useDataSource.js";
|
|
85
|
+
import { default as pa } from "./components/library/forms/useFormState.js";
|
|
86
|
+
import { default as ma } from "./components/library/data/usePageFilters.js";
|
|
87
|
+
import { Accordion as xa, Badge as na, Breadcrumbs as ga, Drawer as Ca, Dropdown as ca, Kbd as Ia, Meter as Ua, Modal as Da, Pagination as Pa, ProgressBar as Ha, ProgressCircle as Sa, ScrollShadow as Ta, Separator as Ba, Skeleton as ba, Tabs as ha, Toast as Fa, Tooltip as Ma, toast as ka } from "@heroui/react";
|
|
88
|
+
import { D3ChartTemplates as ya } from "./components/library/charts/D3ChartTemplates.js";
|
|
89
|
+
import { applyFilters as La, filterByDateRange as wa, filterBySearch as Ea, filterByToggle as Ka, filterByValue as Ra, sortByKey as Ga } from "./components/library/data/filterUtils.js";
|
|
89
90
|
export {
|
|
90
|
-
|
|
91
|
+
xa as Accordion,
|
|
91
92
|
H as ActionList,
|
|
92
93
|
T as ActivityCard,
|
|
93
94
|
b as Alert,
|
|
@@ -96,7 +97,7 @@ export {
|
|
|
96
97
|
M as AlertTitle,
|
|
97
98
|
A as AppThemeProvider,
|
|
98
99
|
L as Avatar,
|
|
99
|
-
|
|
100
|
+
na as Badge,
|
|
100
101
|
E as BaseCard,
|
|
101
102
|
t as Breadcrumb,
|
|
102
103
|
l as BreadcrumbEllipsis,
|
|
@@ -105,16 +106,16 @@ export {
|
|
|
105
106
|
s as BreadcrumbList,
|
|
106
107
|
p as BreadcrumbPage,
|
|
107
108
|
u as BreadcrumbSeparator,
|
|
108
|
-
|
|
109
|
+
ga as Breadcrumbs,
|
|
109
110
|
Oe as Button,
|
|
110
111
|
R as CalloutCard,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
Go as Card,
|
|
113
|
+
Vo as CardContent,
|
|
114
|
+
Wo as CardDescription,
|
|
115
|
+
No as CardFooter,
|
|
116
|
+
Oo as CardHeader,
|
|
116
117
|
V as CardSkeleton,
|
|
117
|
-
|
|
118
|
+
jo as CardTitle,
|
|
118
119
|
N as ChartCard,
|
|
119
120
|
j as ChatBar,
|
|
120
121
|
z as ChatInput,
|
|
@@ -130,7 +131,7 @@ export {
|
|
|
130
131
|
Xe as CollapsibleContent,
|
|
131
132
|
Ye as CollapsibleTrigger,
|
|
132
133
|
ue as D3Chart,
|
|
133
|
-
|
|
134
|
+
ya as D3ChartTemplates,
|
|
134
135
|
ie as DataModeProvider,
|
|
135
136
|
ge as DataModeToggle,
|
|
136
137
|
$e as DatePicker,
|
|
@@ -148,8 +149,8 @@ export {
|
|
|
148
149
|
xr as DialogPortal,
|
|
149
150
|
nr as DialogTitle,
|
|
150
151
|
gr as DialogTrigger,
|
|
151
|
-
|
|
152
|
-
|
|
152
|
+
Ca as Drawer,
|
|
153
|
+
ca as Dropdown,
|
|
153
154
|
ce as EmptyState,
|
|
154
155
|
Ue as FeedPanel,
|
|
155
156
|
Hr as Field,
|
|
@@ -191,15 +192,16 @@ export {
|
|
|
191
192
|
to as HeroUIToast,
|
|
192
193
|
fo as HeroUIToggle,
|
|
193
194
|
po as HeroUITooltip,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
xo as
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
co as
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
195
|
+
mo as KanbanBoard,
|
|
196
|
+
Ia as Kbd,
|
|
197
|
+
xo as Label,
|
|
198
|
+
go as ListCard,
|
|
199
|
+
Ua as Meter,
|
|
200
|
+
co as MetricCard,
|
|
201
|
+
Uo as MetricsStrip,
|
|
202
|
+
Da as Modal,
|
|
203
|
+
Po as PageContainer,
|
|
204
|
+
Pa as Pagination,
|
|
203
205
|
m as PaginationContent,
|
|
204
206
|
i as PaginationEllipsis,
|
|
205
207
|
x as PaginationItem,
|
|
@@ -209,47 +211,47 @@ export {
|
|
|
209
211
|
Gr as Popover,
|
|
210
212
|
Vr as PopoverContent,
|
|
211
213
|
Wr as PopoverTrigger,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
Ha as ProgressBar,
|
|
215
|
+
Sa as ProgressCircle,
|
|
216
|
+
Ta as ScrollShadow,
|
|
217
|
+
So as SearchFilter,
|
|
218
|
+
Bo as SectionCard,
|
|
217
219
|
Yr as Select,
|
|
218
220
|
c as SelectContent,
|
|
219
|
-
|
|
221
|
+
ho as SelectFilter,
|
|
220
222
|
I as SelectItem,
|
|
221
223
|
U as SelectTrigger,
|
|
222
224
|
D as SelectValue,
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
225
|
+
Ba as Separator,
|
|
226
|
+
ba as Skeleton,
|
|
227
|
+
Mo as Spinner,
|
|
228
|
+
Ao as StatusCard,
|
|
229
|
+
vo as TableCard,
|
|
230
|
+
ha as Tabs,
|
|
231
|
+
Fa as Toast,
|
|
232
|
+
wo as ToggleFilter,
|
|
233
|
+
Ma as Tooltip,
|
|
234
|
+
Ko as UIButton,
|
|
235
|
+
qo as UICard,
|
|
236
|
+
Jo as UIChip,
|
|
237
|
+
Xo as UIContainer,
|
|
238
|
+
Zo as UIInput,
|
|
239
|
+
$o as UIText,
|
|
240
|
+
ra as UIToggle,
|
|
241
|
+
aa as WidgetCard,
|
|
242
|
+
La as applyFilters,
|
|
241
243
|
o as cn,
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
244
|
+
wa as filterByDateRange,
|
|
245
|
+
Ea as filterBySearch,
|
|
246
|
+
Ka as filterByToggle,
|
|
247
|
+
Ra as filterByValue,
|
|
248
|
+
Ga as sortByKey,
|
|
249
|
+
ka as toast,
|
|
250
|
+
la as useChatState,
|
|
249
251
|
xe as useDataMode,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
252
|
+
da as useDataSource,
|
|
253
|
+
pa as useFormState,
|
|
254
|
+
ma as usePageFilters,
|
|
253
255
|
y as useThemeMode
|
|
254
256
|
};
|
|
255
257
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/styles/global.css
CHANGED
|
@@ -58,31 +58,18 @@
|
|
|
58
58
|
--color-sidebar-border: var(--sidebar-border);
|
|
59
59
|
--color-sidebar-ring: var(--sidebar-ring);
|
|
60
60
|
|
|
61
|
-
/*
|
|
62
|
-
--color-
|
|
63
|
-
--color-
|
|
64
|
-
--color-
|
|
65
|
-
--color-
|
|
66
|
-
--color-
|
|
67
|
-
--color-
|
|
68
|
-
--color-
|
|
69
|
-
--color-
|
|
70
|
-
--color-
|
|
71
|
-
--color-
|
|
72
|
-
--color-
|
|
73
|
-
|
|
74
|
-
/* Engine Cyan brand ramp */
|
|
75
|
-
--color-brand-50: #F0FAFB;
|
|
76
|
-
--color-brand-100: #D9F2F5;
|
|
77
|
-
--color-brand-200: #B3E5EB;
|
|
78
|
-
--color-brand-300: #7DCBD9;
|
|
79
|
-
--color-brand-400: #5BB8CA;
|
|
80
|
-
--color-brand-500: #3AA0B5;
|
|
81
|
-
--color-brand-600: #2D849A;
|
|
82
|
-
--color-brand-700: #266B7E;
|
|
83
|
-
--color-brand-800: #235768;
|
|
84
|
-
--color-brand-900: #1F4858;
|
|
85
|
-
--color-brand-950: #112E3A;
|
|
61
|
+
/* Neutral brand ramp — override per-app to apply your brand colors */
|
|
62
|
+
--color-brand-50: #f8fafc;
|
|
63
|
+
--color-brand-100: #f1f5f9;
|
|
64
|
+
--color-brand-200: #e2e8f0;
|
|
65
|
+
--color-brand-300: #cbd5e1;
|
|
66
|
+
--color-brand-400: #94a3b8;
|
|
67
|
+
--color-brand-500: #64748b;
|
|
68
|
+
--color-brand-600: #475569;
|
|
69
|
+
--color-brand-700: #334155;
|
|
70
|
+
--color-brand-800: #1e293b;
|
|
71
|
+
--color-brand-900: #0f172a;
|
|
72
|
+
--color-brand-950: #020617;
|
|
86
73
|
|
|
87
74
|
--font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, sans-serif;
|
|
88
75
|
--font-mono: 'JetBrains Mono', ui-monospace, monospace;
|
|
@@ -92,22 +79,22 @@
|
|
|
92
79
|
}
|
|
93
80
|
|
|
94
81
|
:root {
|
|
95
|
-
--dash-text: #
|
|
96
|
-
--dash-muted: #
|
|
97
|
-
--dash-label: #
|
|
98
|
-
--dash-surface: #
|
|
99
|
-
--dash-border: #
|
|
100
|
-
--dash-accent: #
|
|
82
|
+
--dash-text: #0f172a;
|
|
83
|
+
--dash-muted: #475569;
|
|
84
|
+
--dash-label: #94a3b8;
|
|
85
|
+
--dash-surface: #ffffff;
|
|
86
|
+
--dash-border: #e2e8f0;
|
|
87
|
+
--dash-accent: #64748b;
|
|
101
88
|
--dash-success: #34d399;
|
|
102
89
|
--dash-info: #67e8f9;
|
|
103
|
-
--dash-warning: #
|
|
90
|
+
--dash-warning: #f59e0b;
|
|
104
91
|
--dash-danger: #dc2626;
|
|
105
|
-
--dash-dark: #
|
|
106
|
-
--dash-darker: #
|
|
107
|
-
--dash-chart-1: #
|
|
108
|
-
--dash-chart-2: #
|
|
109
|
-
--dash-chart-3: #
|
|
110
|
-
--dash-chart-4: #
|
|
92
|
+
--dash-dark: #0f172a;
|
|
93
|
+
--dash-darker: #020617;
|
|
94
|
+
--dash-chart-1: #64748b;
|
|
95
|
+
--dash-chart-2: #34d399;
|
|
96
|
+
--dash-chart-3: #67e8f9;
|
|
97
|
+
--dash-chart-4: #f59e0b;
|
|
111
98
|
--dash-metric-size: 2.5rem;
|
|
112
99
|
--dash-metric-sub: 2.25rem;
|
|
113
100
|
--color-dash-text: var(--dash-text);
|
|
@@ -206,37 +193,37 @@
|
|
|
206
193
|
|
|
207
194
|
/*
|
|
208
195
|
* Restore HeroUI theme variables inside the Command Center scope.
|
|
209
|
-
*
|
|
196
|
+
* Neutral defaults — override per-app to apply your brand colors.
|
|
210
197
|
*/
|
|
211
198
|
.heroui-scope {
|
|
212
|
-
--primary:
|
|
199
|
+
--primary: oklch(0.205 0 0);
|
|
213
200
|
--primary-foreground: oklch(0.9911 0 0);
|
|
214
|
-
--secondary:
|
|
215
|
-
--secondary-foreground:
|
|
216
|
-
--success: #
|
|
201
|
+
--secondary: oklch(0.55 0.02 240);
|
|
202
|
+
--secondary-foreground: oklch(0.9911 0 0);
|
|
203
|
+
--success: #16a34a;
|
|
217
204
|
--success-foreground: oklch(0.9911 0 0);
|
|
218
|
-
--warning: #
|
|
219
|
-
--warning-foreground:
|
|
220
|
-
--danger: #
|
|
205
|
+
--warning: #f59e0b;
|
|
206
|
+
--warning-foreground: oklch(0.205 0 0);
|
|
207
|
+
--danger: #dc2626;
|
|
221
208
|
--danger-foreground: oklch(0.9911 0 0);
|
|
222
209
|
|
|
223
210
|
--muted: oklch(0.5517 0.0138 285.94);
|
|
224
211
|
--accent: oklch(0.6204 0.195 253.83);
|
|
225
212
|
--accent-foreground: oklch(0.9911 0 0);
|
|
226
|
-
--background:
|
|
227
|
-
--foreground:
|
|
213
|
+
--background: oklch(0.985 0 0);
|
|
214
|
+
--foreground: oklch(0.145 0 0);
|
|
228
215
|
--default: oklch(94% 0.001 286.375);
|
|
229
|
-
--default-foreground:
|
|
230
|
-
--border:
|
|
216
|
+
--default-foreground: oklch(0.145 0 0);
|
|
217
|
+
--border: oklch(0.85 0.005 286);
|
|
231
218
|
--separator: oklch(92% 0.004 286.32);
|
|
232
219
|
--segment: oklch(100% 0 0);
|
|
233
|
-
--segment-foreground:
|
|
220
|
+
--segment-foreground: oklch(0.145 0 0);
|
|
234
221
|
--surface: oklch(100% 0 0);
|
|
235
|
-
--surface-foreground:
|
|
222
|
+
--surface-foreground: oklch(0.145 0 0);
|
|
236
223
|
--overlay: oklch(100% 0 0);
|
|
237
|
-
--overlay-foreground:
|
|
238
|
-
--focus:
|
|
239
|
-
--link:
|
|
224
|
+
--overlay-foreground: oklch(0.145 0 0);
|
|
225
|
+
--focus: oklch(0.6 0.18 250);
|
|
226
|
+
--link: oklch(0.205 0 0);
|
|
240
227
|
}
|
|
241
228
|
|
|
242
229
|
/* ChatBar expanded overlay — horizontal padding so it doesn't hit window edges */
|
|
@@ -261,9 +248,9 @@ body > .fixed.inset-x-0.rounded-2xl {
|
|
|
261
248
|
--overlay: oklch(0.2103 0.0059 285.89);
|
|
262
249
|
--overlay-foreground: oklch(0.9911 0 0);
|
|
263
250
|
--warning: oklch(0.8203 0.1388 76.34);
|
|
264
|
-
--warning-foreground:
|
|
251
|
+
--warning-foreground: oklch(0.145 0 0);
|
|
265
252
|
--danger: oklch(0.594 0.1967 24.63);
|
|
266
253
|
--danger-foreground: oklch(0.9911 0 0);
|
|
267
|
-
--focus:
|
|
254
|
+
--focus: oklch(0.6 0.18 250);
|
|
268
255
|
--link: oklch(0.9911 0 0);
|
|
269
256
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schandlergarcia/sf-web-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Reusable Salesforce web components library with Tailwind CSS v4 and shadcn/ui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -52,11 +52,13 @@
|
|
|
52
52
|
"reset:command-center": "bash scripts/reset-command-center.sh",
|
|
53
53
|
"validate:dashboard": "bash scripts/validate-dashboard.sh",
|
|
54
54
|
"graphql:schema": "node scripts/get-graphql-schema.mjs",
|
|
55
|
-
"brand:engine": "node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs engine",
|
|
56
55
|
"brand:reset": "node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs --reset",
|
|
57
56
|
"brand:list": "node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs --list"
|
|
58
57
|
},
|
|
59
58
|
"peerDependencies": {
|
|
59
|
+
"@dnd-kit/core": "^6.0.0",
|
|
60
|
+
"@dnd-kit/sortable": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
|
61
|
+
"@dnd-kit/utilities": "^3.0.0",
|
|
60
62
|
"@heroicons/react": "^2.0.0",
|
|
61
63
|
"@heroui/react": "^3.0.0",
|
|
62
64
|
"@heroui/styles": "^3.0.0",
|
|
@@ -85,6 +87,9 @@
|
|
|
85
87
|
"tailwind-merge": "^3.5.0"
|
|
86
88
|
},
|
|
87
89
|
"devDependencies": {
|
|
90
|
+
"@dnd-kit/core": "^6.3.1",
|
|
91
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
92
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
88
93
|
"@heroicons/react": "^2.2.0",
|
|
89
94
|
"@heroui/react": "^3.0.1",
|
|
90
95
|
"@heroui/styles": "^3.0.1",
|
package/scripts/apply-brand.mjs
CHANGED
|
@@ -4,14 +4,19 @@
|
|
|
4
4
|
* apply-brand.mjs — Apply a brand theme or install a full demo app.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* node scripts/apply-brand.mjs
|
|
8
|
-
* node scripts/apply-brand.mjs --demo
|
|
9
|
-
* node scripts/apply-brand.mjs --list
|
|
10
|
-
* node scripts/apply-brand.mjs --reset
|
|
7
|
+
* node scripts/apply-brand.mjs <brand> # Apply brand colors only
|
|
8
|
+
* node scripts/apply-brand.mjs --demo <brand> # Install full demo app for a brand
|
|
9
|
+
* node scripts/apply-brand.mjs --list # List available brands
|
|
10
|
+
* node scripts/apply-brand.mjs --reset # Remove brand, restore neutral theme
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Brands live in brands/<name>/ at the package root. Each brand may provide:
|
|
13
|
+
* - global.css (theme overrides applied to src/styles/global.css)
|
|
14
|
+
* - app/ (full demo app: pages, hooks, api, features, etc.)
|
|
15
|
+
* - schema.graphql (data schema)
|
|
16
|
+
* - *.png (brand logo assets)
|
|
17
|
+
* - *_PRD.md / *-prd.md (product requirements docs)
|
|
18
|
+
*
|
|
19
|
+
* No brands ship with the package by default. Add your own under brands/.
|
|
15
20
|
*/
|
|
16
21
|
|
|
17
22
|
import fs from 'fs';
|
|
@@ -184,17 +189,21 @@ if (isDemo) {
|
|
|
184
189
|
}
|
|
185
190
|
}
|
|
186
191
|
|
|
187
|
-
// Copy
|
|
188
|
-
const dataFiles =
|
|
192
|
+
// Copy any *.js / *.ts data files at the brand root into src/data/
|
|
193
|
+
const dataFiles = fs.readdirSync(brandDir).filter(f => {
|
|
194
|
+
if (!fs.statSync(path.join(brandDir, f)).isFile()) return false;
|
|
195
|
+
return f.endsWith('-sample-data.js')
|
|
196
|
+
|| f.endsWith('-live-data.js')
|
|
197
|
+
|| f.endsWith('-data.ts')
|
|
198
|
+
|| f.endsWith('-data.js');
|
|
199
|
+
});
|
|
189
200
|
for (const file of dataFiles) {
|
|
190
201
|
const src = path.join(brandDir, file);
|
|
191
202
|
const dst = path.join(cwd, 'src/data', file);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
installed++;
|
|
197
|
-
}
|
|
203
|
+
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
204
|
+
fs.copyFileSync(src, dst);
|
|
205
|
+
console.log(` ✓ Installed src/data/${file}`);
|
|
206
|
+
installed++;
|
|
198
207
|
}
|
|
199
208
|
|
|
200
209
|
// Copy PRDs to project root
|
|
@@ -213,13 +222,16 @@ if (isDemo) {
|
|
|
213
222
|
installed++;
|
|
214
223
|
}
|
|
215
224
|
|
|
216
|
-
// Copy logo
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
225
|
+
// Copy any logo/image assets at the brand root into src/assets/images/
|
|
226
|
+
const imageFiles = fs.readdirSync(brandDir).filter(f =>
|
|
227
|
+
/\.(png|jpe?g|svg|webp|gif)$/i.test(f)
|
|
228
|
+
);
|
|
229
|
+
for (const file of imageFiles) {
|
|
230
|
+
const src = path.join(brandDir, file);
|
|
231
|
+
const dst = path.join(cwd, 'src/assets/images', file);
|
|
232
|
+
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
233
|
+
fs.copyFileSync(src, dst);
|
|
234
|
+
console.log(` ✓ Installed src/assets/images/${file}`);
|
|
223
235
|
installed++;
|
|
224
236
|
}
|
|
225
237
|
|
|
@@ -259,14 +271,19 @@ if (fs.existsSync(brandCSS)) {
|
|
|
259
271
|
installed++;
|
|
260
272
|
}
|
|
261
273
|
|
|
262
|
-
// 2.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
274
|
+
// 2. Any logo/image assets → src/assets/images/
|
|
275
|
+
if (fs.existsSync(brandDir)) {
|
|
276
|
+
const imageFiles = fs.readdirSync(brandDir).filter(f =>
|
|
277
|
+
/\.(png|jpe?g|svg|webp|gif)$/i.test(f)
|
|
278
|
+
);
|
|
279
|
+
for (const file of imageFiles) {
|
|
280
|
+
const src = path.join(brandDir, file);
|
|
281
|
+
const dst = path.join(cwd, 'src/assets/images', file);
|
|
282
|
+
fs.mkdirSync(path.dirname(dst), { recursive: true });
|
|
283
|
+
fs.copyFileSync(src, dst);
|
|
284
|
+
console.log(` ✓ Installed src/assets/images/${file}`);
|
|
285
|
+
installed++;
|
|
286
|
+
}
|
|
270
287
|
}
|
|
271
288
|
|
|
272
289
|
// 3. Write .brand marker
|
package/scripts/postinstall.mjs
CHANGED
|
@@ -341,11 +341,7 @@ if (fs.existsSync(packageJsonPath)) {
|
|
|
341
341
|
scriptsAdded.push('sfwc:setup');
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
-
// Add brand scripts
|
|
345
|
-
if (!packageJson.scripts['brand:engine']) {
|
|
346
|
-
packageJson.scripts['brand:engine'] = 'node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs engine';
|
|
347
|
-
scriptsAdded.push('brand:engine');
|
|
348
|
-
}
|
|
344
|
+
// Add brand scripts (no brands ship by default — add your own under brands/)
|
|
349
345
|
if (!packageJson.scripts['brand:reset']) {
|
|
350
346
|
packageJson.scripts['brand:reset'] = 'node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs --reset';
|
|
351
347
|
scriptsAdded.push('brand:reset');
|
|
@@ -355,12 +351,6 @@ if (fs.existsSync(packageJsonPath)) {
|
|
|
355
351
|
scriptsAdded.push('brand:list');
|
|
356
352
|
}
|
|
357
353
|
|
|
358
|
-
// Add demo scripts
|
|
359
|
-
if (!packageJson.scripts['demo:engine']) {
|
|
360
|
-
packageJson.scripts['demo:engine'] = 'node node_modules/@schandlergarcia/sf-web-components/scripts/apply-brand.mjs --demo engine';
|
|
361
|
-
scriptsAdded.push('demo:engine');
|
|
362
|
-
}
|
|
363
|
-
|
|
364
354
|
if (scriptsAdded.length > 0) {
|
|
365
355
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
366
356
|
scriptsAdded.forEach(script => {
|