@lucasvu/scope-ui 0.0.8 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_SETUP.md +313 -43
- package/README.md +89 -14
- package/bin/copy-theme-assets.mjs +29 -0
- package/bin/scope-ui-init.mjs +275 -24
- package/dist/chunk-CL3F2TWE.js +1039 -0
- package/dist/core/index.cjs +1052 -0
- package/dist/core/index.d.cts +963 -0
- package/dist/core/index.d.ts +963 -0
- package/dist/core/index.js +1 -0
- package/dist/index.cjs +247 -15
- package/dist/index.d.cts +2 -771
- package/dist/index.d.ts +2 -771
- package/dist/index.js +4 -817
- package/dist/themes/theme-default.css +343 -0
- package/dist/themes/theme-ui-citrus-ink.css +364 -0
- package/dist/themes/theme-ui-custom-crisp.css +969 -0
- package/dist/themes/theme-ui-facebook-blue.css +381 -0
- package/dist/themes/theme-ui-neo-slate.css +962 -0
- package/dist/themes/theme-ui-new-main-fe-sunset.css +1316 -0
- package/dist/themes/theme-ui-new-main-fe.css +343 -0
- package/dist/themes/theme-ui-pure-white.css +377 -0
- package/dist/themes/theme-ui-siraya-vii-light.css +603 -0
- package/dist/themes/theme-ui-solstice-pop.css +1020 -0
- package/dist/themes/theme-ui-uat-aurora.css +962 -0
- package/package.json +20 -4
|
@@ -0,0 +1,963 @@
|
|
|
1
|
+
type UiAiComponentProp = {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
required?: boolean;
|
|
5
|
+
description: string;
|
|
6
|
+
};
|
|
7
|
+
type UiAiComponentDescriptor = {
|
|
8
|
+
name: string;
|
|
9
|
+
importName: string;
|
|
10
|
+
purpose: string;
|
|
11
|
+
useWhen: string[];
|
|
12
|
+
avoidWhen?: string[];
|
|
13
|
+
props: UiAiComponentProp[];
|
|
14
|
+
example: string;
|
|
15
|
+
related?: string[];
|
|
16
|
+
};
|
|
17
|
+
declare const uiAiManifest: {
|
|
18
|
+
readonly packageName: "@lucasvu/scope-ui";
|
|
19
|
+
readonly styleImport: "@lucasvu/scope-ui/styles.css";
|
|
20
|
+
readonly rules: readonly ["Import the stylesheet once at the app entry before rendering any component.", "If the project declares an approved theme preset in AGENTS.md or ui-theme.css, stay inside that preset and do not invent a second palette.", "Collect the shell + screen brief first: layout preset, workspace label, route url, sidebar items, active sidebar item, page title, tabs/actions, and the page-specific content schema.", "If the project ships a generated layout preset file, keep the shell aligned with it instead of inventing a new page frame.", "Prefer the canonical component for each intent instead of mixing legacy MainFe components.", "Use Input/Textarea/Select label props directly for simple fields; use Field only to wrap custom controls or grouped content.", "Use Select for small fixed option lists, SearchableSelect for larger local lists, Combobox for type-and-pick flows, and AsyncCombobox for remote search.", "Always provide a stable rowKey to DataTable and use sortMode=\"server\" when sorting happens on the backend.", "Prefer Card as the outer layout section and keep alerts, stats, and tables inside CardContent when building dashboards or forms.", "Do not import MainFe components unless the target explicitly asks for legacy main-fe styling."];
|
|
21
|
+
readonly components: ({
|
|
22
|
+
name: string;
|
|
23
|
+
importName: string;
|
|
24
|
+
purpose: string;
|
|
25
|
+
useWhen: string[];
|
|
26
|
+
avoidWhen: string[];
|
|
27
|
+
props: {
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
description: string;
|
|
31
|
+
}[];
|
|
32
|
+
example: string;
|
|
33
|
+
related: string[];
|
|
34
|
+
} | {
|
|
35
|
+
name: string;
|
|
36
|
+
importName: string;
|
|
37
|
+
purpose: string;
|
|
38
|
+
useWhen: string[];
|
|
39
|
+
props: ({
|
|
40
|
+
name: string;
|
|
41
|
+
type: string;
|
|
42
|
+
required: true;
|
|
43
|
+
description: string;
|
|
44
|
+
} | {
|
|
45
|
+
name: string;
|
|
46
|
+
type: string;
|
|
47
|
+
description: string;
|
|
48
|
+
required?: undefined;
|
|
49
|
+
})[];
|
|
50
|
+
example: string;
|
|
51
|
+
related: string[];
|
|
52
|
+
avoidWhen?: undefined;
|
|
53
|
+
})[];
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
type UiScreenKind = 'list' | 'form' | 'detail' | 'dashboard';
|
|
57
|
+
type UiScreenBriefField = {
|
|
58
|
+
id: string;
|
|
59
|
+
label: string;
|
|
60
|
+
description: string;
|
|
61
|
+
required: boolean;
|
|
62
|
+
appliesTo: UiScreenKind[] | ['all'];
|
|
63
|
+
example: string;
|
|
64
|
+
};
|
|
65
|
+
declare const uiScreenBriefFields: readonly [{
|
|
66
|
+
readonly id: "layoutPreset";
|
|
67
|
+
readonly label: "Layout preset";
|
|
68
|
+
readonly description: "Shared shell preset id that locks the sidebar/topbar/page-card structure.";
|
|
69
|
+
readonly required: false;
|
|
70
|
+
readonly appliesTo: ["all"];
|
|
71
|
+
readonly example: "workspace-admin-v1";
|
|
72
|
+
}, {
|
|
73
|
+
readonly id: "workspaceLabel";
|
|
74
|
+
readonly label: "Workspace label";
|
|
75
|
+
readonly description: "Short label shown in the sidebar or workspace topbar.";
|
|
76
|
+
readonly required: false;
|
|
77
|
+
readonly appliesTo: ["all"];
|
|
78
|
+
readonly example: "Workspace";
|
|
79
|
+
}, {
|
|
80
|
+
readonly id: "timezoneLabel";
|
|
81
|
+
readonly label: "Timezone/meta label";
|
|
82
|
+
readonly description: "Short meta label shown in the top-right shell area, such as a timezone or environment.";
|
|
83
|
+
readonly required: false;
|
|
84
|
+
readonly appliesTo: ["all"];
|
|
85
|
+
readonly example: "UTC+07:00";
|
|
86
|
+
}, {
|
|
87
|
+
readonly id: "pageKind";
|
|
88
|
+
readonly label: "Page kind";
|
|
89
|
+
readonly description: "Choose the base recipe for the screen.";
|
|
90
|
+
readonly required: true;
|
|
91
|
+
readonly appliesTo: ["all"];
|
|
92
|
+
readonly example: "list";
|
|
93
|
+
}, {
|
|
94
|
+
readonly id: "routeUrl";
|
|
95
|
+
readonly label: "Route URL";
|
|
96
|
+
readonly description: "Final route for the screen or feature entry.";
|
|
97
|
+
readonly required: true;
|
|
98
|
+
readonly appliesTo: ["all"];
|
|
99
|
+
readonly example: "/admin/users";
|
|
100
|
+
}, {
|
|
101
|
+
readonly id: "sidebarItems";
|
|
102
|
+
readonly label: "Sidebar items";
|
|
103
|
+
readonly description: "Sidebar entries with at least id, title, and href so the shell stays consistent.";
|
|
104
|
+
readonly required: true;
|
|
105
|
+
readonly appliesTo: ["all"];
|
|
106
|
+
readonly example: "[{ id: \"users\", title: \"Users\", href: \"/admin/users\" }]";
|
|
107
|
+
}, {
|
|
108
|
+
readonly id: "activeSidebarItemId";
|
|
109
|
+
readonly label: "Active sidebar item id";
|
|
110
|
+
readonly description: "The sidebar item that should appear active on this screen.";
|
|
111
|
+
readonly required: true;
|
|
112
|
+
readonly appliesTo: ["all"];
|
|
113
|
+
readonly example: "users";
|
|
114
|
+
}, {
|
|
115
|
+
readonly id: "breadcrumbs";
|
|
116
|
+
readonly label: "Breadcrumbs";
|
|
117
|
+
readonly description: "Ordered breadcrumb items for the page header.";
|
|
118
|
+
readonly required: false;
|
|
119
|
+
readonly appliesTo: ["all"];
|
|
120
|
+
readonly example: "[{ label: \"Admin\", href: \"/admin\" }, { label: \"Users\", current: true }]";
|
|
121
|
+
}, {
|
|
122
|
+
readonly id: "pageTitle";
|
|
123
|
+
readonly label: "Page title";
|
|
124
|
+
readonly description: "Main page heading shown in the content header.";
|
|
125
|
+
readonly required: true;
|
|
126
|
+
readonly appliesTo: ["all"];
|
|
127
|
+
readonly example: "Users";
|
|
128
|
+
}, {
|
|
129
|
+
readonly id: "pageSubtitle";
|
|
130
|
+
readonly label: "Page subtitle";
|
|
131
|
+
readonly description: "Short supporting text under the title.";
|
|
132
|
+
readonly required: false;
|
|
133
|
+
readonly appliesTo: ["all"];
|
|
134
|
+
readonly example: "Manage internal user accounts and permissions.";
|
|
135
|
+
}, {
|
|
136
|
+
readonly id: "pageTabs";
|
|
137
|
+
readonly label: "Page tabs";
|
|
138
|
+
readonly description: "Optional segmented tabs rendered under the intro card.";
|
|
139
|
+
readonly required: false;
|
|
140
|
+
readonly appliesTo: ["all"];
|
|
141
|
+
readonly example: "[{ value: \"overview\", label: \"Overview\" }, { value: \"coupons\", label: \"Coupons\" }]";
|
|
142
|
+
}, {
|
|
143
|
+
readonly id: "activePageTab";
|
|
144
|
+
readonly label: "Active page tab";
|
|
145
|
+
readonly description: "The selected segmented tab value when tabs are present.";
|
|
146
|
+
readonly required: false;
|
|
147
|
+
readonly appliesTo: ["all"];
|
|
148
|
+
readonly example: "coupons";
|
|
149
|
+
}, {
|
|
150
|
+
readonly id: "primaryAction";
|
|
151
|
+
readonly label: "Primary action";
|
|
152
|
+
readonly description: "The highest-emphasis action shown in the page header.";
|
|
153
|
+
readonly required: false;
|
|
154
|
+
readonly appliesTo: ["all"];
|
|
155
|
+
readonly example: "{ label: \"Create user\", href: \"/admin/users/create\" }";
|
|
156
|
+
}, {
|
|
157
|
+
readonly id: "secondaryActions";
|
|
158
|
+
readonly label: "Secondary actions";
|
|
159
|
+
readonly description: "Additional header actions such as export, refresh, or cancel.";
|
|
160
|
+
readonly required: false;
|
|
161
|
+
readonly appliesTo: ["all"];
|
|
162
|
+
readonly example: "[{ label: \"Export\" }, { label: \"Refresh\" }]";
|
|
163
|
+
}, {
|
|
164
|
+
readonly id: "summaryStats";
|
|
165
|
+
readonly label: "Summary stats";
|
|
166
|
+
readonly description: "Top-line numbers for dashboard or overview screens.";
|
|
167
|
+
readonly required: false;
|
|
168
|
+
readonly appliesTo: ["dashboard", "detail"];
|
|
169
|
+
readonly example: "[{ label: \"Active users\", value: \"1,204\", trend: \"up\", delta: \"+12%\" }]";
|
|
170
|
+
}, {
|
|
171
|
+
readonly id: "filters";
|
|
172
|
+
readonly label: "Filters";
|
|
173
|
+
readonly description: "Filter bar controls shown above list or dashboard content.";
|
|
174
|
+
readonly required: false;
|
|
175
|
+
readonly appliesTo: ["list", "dashboard"];
|
|
176
|
+
readonly example: "[{ type: \"search\", label: \"Search user\" }, { type: \"select\", label: \"Role\" }]";
|
|
177
|
+
}, {
|
|
178
|
+
readonly id: "searchPlaceholder";
|
|
179
|
+
readonly label: "Search placeholder";
|
|
180
|
+
readonly description: "Placeholder text for the main toolbar search input when the shell includes one.";
|
|
181
|
+
readonly required: false;
|
|
182
|
+
readonly appliesTo: ["list", "dashboard"];
|
|
183
|
+
readonly example: "Search by coupon code";
|
|
184
|
+
}, {
|
|
185
|
+
readonly id: "tableColumns";
|
|
186
|
+
readonly label: "Table columns";
|
|
187
|
+
readonly description: "Columns for a list table, including label and render intent.";
|
|
188
|
+
readonly required: false;
|
|
189
|
+
readonly appliesTo: ["list", "detail", "dashboard"];
|
|
190
|
+
readonly example: "[{ key: \"name\", title: \"Name\" }, { key: \"role\", title: \"Role\" }]";
|
|
191
|
+
}, {
|
|
192
|
+
readonly id: "rowActions";
|
|
193
|
+
readonly label: "Row actions";
|
|
194
|
+
readonly description: "Per-row actions for table screens.";
|
|
195
|
+
readonly required: false;
|
|
196
|
+
readonly appliesTo: ["list", "detail"];
|
|
197
|
+
readonly example: "[{ label: \"Edit\" }, { label: \"Reset password\" }]";
|
|
198
|
+
}, {
|
|
199
|
+
readonly id: "formSections";
|
|
200
|
+
readonly label: "Form sections";
|
|
201
|
+
readonly description: "Grouped form sections and the fields inside each section.";
|
|
202
|
+
readonly required: false;
|
|
203
|
+
readonly appliesTo: ["form"];
|
|
204
|
+
readonly example: "[{ title: \"Basic info\", fields: [\"name\", \"email\", \"role\"] }]";
|
|
205
|
+
}, {
|
|
206
|
+
readonly id: "fields";
|
|
207
|
+
readonly label: "Fields";
|
|
208
|
+
readonly description: "Detailed field list with type, label, required state, and helper text.";
|
|
209
|
+
readonly required: false;
|
|
210
|
+
readonly appliesTo: ["form", "detail"];
|
|
211
|
+
readonly example: "[{ name: \"email\", type: \"input\", label: \"Email\", required: true }]";
|
|
212
|
+
}, {
|
|
213
|
+
readonly id: "detailSections";
|
|
214
|
+
readonly label: "Detail sections";
|
|
215
|
+
readonly description: "Cards or sections for detail pages such as profile, activity, permissions, or related records.";
|
|
216
|
+
readonly required: false;
|
|
217
|
+
readonly appliesTo: ["detail"];
|
|
218
|
+
readonly example: "[{ title: \"Profile\" }, { title: \"Recent activity\" }]";
|
|
219
|
+
}, {
|
|
220
|
+
readonly id: "emptyState";
|
|
221
|
+
readonly label: "Empty state";
|
|
222
|
+
readonly description: "Fallback title, description, and action when there is no data.";
|
|
223
|
+
readonly required: false;
|
|
224
|
+
readonly appliesTo: ["list", "dashboard", "detail"];
|
|
225
|
+
readonly example: "{ title: \"No users yet\", description: \"Create the first user to get started.\" }";
|
|
226
|
+
}, {
|
|
227
|
+
readonly id: "permissions";
|
|
228
|
+
readonly label: "Permissions";
|
|
229
|
+
readonly description: "Permission keys that affect sidebar visibility or action availability.";
|
|
230
|
+
readonly required: false;
|
|
231
|
+
readonly appliesTo: ["all"];
|
|
232
|
+
readonly example: "[\"user.read\", \"user.write\"]";
|
|
233
|
+
}];
|
|
234
|
+
declare const uiScreenBlueprint: {
|
|
235
|
+
readonly pageKinds: readonly [{
|
|
236
|
+
readonly id: "list";
|
|
237
|
+
readonly label: "List page";
|
|
238
|
+
readonly frame: readonly ["Sidebar shell", "Workspace topbar", "Page intro card with Breadcrumb and PageTitle", "Optional segmented tabs", "Toolbar card", "Optional stats", "DataTable card"];
|
|
239
|
+
}, {
|
|
240
|
+
readonly id: "form";
|
|
241
|
+
readonly label: "Form page";
|
|
242
|
+
readonly frame: readonly ["Sidebar shell", "Workspace topbar", "Page intro card with Breadcrumb and PageTitle", "Optional segmented tabs", "Header actions", "Sectioned form cards", "Bottom action row"];
|
|
243
|
+
}, {
|
|
244
|
+
readonly id: "detail";
|
|
245
|
+
readonly label: "Detail page";
|
|
246
|
+
readonly frame: readonly ["Sidebar shell", "Workspace topbar", "Page intro card with Breadcrumb and PageTitle", "Optional segmented tabs", "PageTitle with status/actions", "Summary stats or metadata card", "Detail cards and related tables"];
|
|
247
|
+
}, {
|
|
248
|
+
readonly id: "dashboard";
|
|
249
|
+
readonly label: "Dashboard page";
|
|
250
|
+
readonly frame: readonly ["Sidebar shell", "Workspace topbar", "Page intro card with Breadcrumb and PageTitle", "Optional segmented tabs", "Toolbar card with actions", "Stat cards row", "Main insight cards and tables"];
|
|
251
|
+
}];
|
|
252
|
+
readonly workflow: readonly ["Collect the shell + screen brief before coding. Do not invent layout presets, workspace labels, sidebar items, route urls, tabs, filters, fields, or table columns if the brief is missing.", "Use Sidebar plus the workspace topbar and intro card to lock the shell before building the page body.", "Choose only canonical root exports from @lucasvu/scope-ui.", "Use Card and ui-grid utilities to create the frame first, then place controls and data components inside.", "Keep all palette, radius, surface, and shadow decisions in the shared ui-theme.css preset file.", "End with a consistency check against the selected preset and the screen brief."];
|
|
253
|
+
readonly briefFields: readonly [{
|
|
254
|
+
readonly id: "layoutPreset";
|
|
255
|
+
readonly label: "Layout preset";
|
|
256
|
+
readonly description: "Shared shell preset id that locks the sidebar/topbar/page-card structure.";
|
|
257
|
+
readonly required: false;
|
|
258
|
+
readonly appliesTo: ["all"];
|
|
259
|
+
readonly example: "workspace-admin-v1";
|
|
260
|
+
}, {
|
|
261
|
+
readonly id: "workspaceLabel";
|
|
262
|
+
readonly label: "Workspace label";
|
|
263
|
+
readonly description: "Short label shown in the sidebar or workspace topbar.";
|
|
264
|
+
readonly required: false;
|
|
265
|
+
readonly appliesTo: ["all"];
|
|
266
|
+
readonly example: "Workspace";
|
|
267
|
+
}, {
|
|
268
|
+
readonly id: "timezoneLabel";
|
|
269
|
+
readonly label: "Timezone/meta label";
|
|
270
|
+
readonly description: "Short meta label shown in the top-right shell area, such as a timezone or environment.";
|
|
271
|
+
readonly required: false;
|
|
272
|
+
readonly appliesTo: ["all"];
|
|
273
|
+
readonly example: "UTC+07:00";
|
|
274
|
+
}, {
|
|
275
|
+
readonly id: "pageKind";
|
|
276
|
+
readonly label: "Page kind";
|
|
277
|
+
readonly description: "Choose the base recipe for the screen.";
|
|
278
|
+
readonly required: true;
|
|
279
|
+
readonly appliesTo: ["all"];
|
|
280
|
+
readonly example: "list";
|
|
281
|
+
}, {
|
|
282
|
+
readonly id: "routeUrl";
|
|
283
|
+
readonly label: "Route URL";
|
|
284
|
+
readonly description: "Final route for the screen or feature entry.";
|
|
285
|
+
readonly required: true;
|
|
286
|
+
readonly appliesTo: ["all"];
|
|
287
|
+
readonly example: "/admin/users";
|
|
288
|
+
}, {
|
|
289
|
+
readonly id: "sidebarItems";
|
|
290
|
+
readonly label: "Sidebar items";
|
|
291
|
+
readonly description: "Sidebar entries with at least id, title, and href so the shell stays consistent.";
|
|
292
|
+
readonly required: true;
|
|
293
|
+
readonly appliesTo: ["all"];
|
|
294
|
+
readonly example: "[{ id: \"users\", title: \"Users\", href: \"/admin/users\" }]";
|
|
295
|
+
}, {
|
|
296
|
+
readonly id: "activeSidebarItemId";
|
|
297
|
+
readonly label: "Active sidebar item id";
|
|
298
|
+
readonly description: "The sidebar item that should appear active on this screen.";
|
|
299
|
+
readonly required: true;
|
|
300
|
+
readonly appliesTo: ["all"];
|
|
301
|
+
readonly example: "users";
|
|
302
|
+
}, {
|
|
303
|
+
readonly id: "breadcrumbs";
|
|
304
|
+
readonly label: "Breadcrumbs";
|
|
305
|
+
readonly description: "Ordered breadcrumb items for the page header.";
|
|
306
|
+
readonly required: false;
|
|
307
|
+
readonly appliesTo: ["all"];
|
|
308
|
+
readonly example: "[{ label: \"Admin\", href: \"/admin\" }, { label: \"Users\", current: true }]";
|
|
309
|
+
}, {
|
|
310
|
+
readonly id: "pageTitle";
|
|
311
|
+
readonly label: "Page title";
|
|
312
|
+
readonly description: "Main page heading shown in the content header.";
|
|
313
|
+
readonly required: true;
|
|
314
|
+
readonly appliesTo: ["all"];
|
|
315
|
+
readonly example: "Users";
|
|
316
|
+
}, {
|
|
317
|
+
readonly id: "pageSubtitle";
|
|
318
|
+
readonly label: "Page subtitle";
|
|
319
|
+
readonly description: "Short supporting text under the title.";
|
|
320
|
+
readonly required: false;
|
|
321
|
+
readonly appliesTo: ["all"];
|
|
322
|
+
readonly example: "Manage internal user accounts and permissions.";
|
|
323
|
+
}, {
|
|
324
|
+
readonly id: "pageTabs";
|
|
325
|
+
readonly label: "Page tabs";
|
|
326
|
+
readonly description: "Optional segmented tabs rendered under the intro card.";
|
|
327
|
+
readonly required: false;
|
|
328
|
+
readonly appliesTo: ["all"];
|
|
329
|
+
readonly example: "[{ value: \"overview\", label: \"Overview\" }, { value: \"coupons\", label: \"Coupons\" }]";
|
|
330
|
+
}, {
|
|
331
|
+
readonly id: "activePageTab";
|
|
332
|
+
readonly label: "Active page tab";
|
|
333
|
+
readonly description: "The selected segmented tab value when tabs are present.";
|
|
334
|
+
readonly required: false;
|
|
335
|
+
readonly appliesTo: ["all"];
|
|
336
|
+
readonly example: "coupons";
|
|
337
|
+
}, {
|
|
338
|
+
readonly id: "primaryAction";
|
|
339
|
+
readonly label: "Primary action";
|
|
340
|
+
readonly description: "The highest-emphasis action shown in the page header.";
|
|
341
|
+
readonly required: false;
|
|
342
|
+
readonly appliesTo: ["all"];
|
|
343
|
+
readonly example: "{ label: \"Create user\", href: \"/admin/users/create\" }";
|
|
344
|
+
}, {
|
|
345
|
+
readonly id: "secondaryActions";
|
|
346
|
+
readonly label: "Secondary actions";
|
|
347
|
+
readonly description: "Additional header actions such as export, refresh, or cancel.";
|
|
348
|
+
readonly required: false;
|
|
349
|
+
readonly appliesTo: ["all"];
|
|
350
|
+
readonly example: "[{ label: \"Export\" }, { label: \"Refresh\" }]";
|
|
351
|
+
}, {
|
|
352
|
+
readonly id: "summaryStats";
|
|
353
|
+
readonly label: "Summary stats";
|
|
354
|
+
readonly description: "Top-line numbers for dashboard or overview screens.";
|
|
355
|
+
readonly required: false;
|
|
356
|
+
readonly appliesTo: ["dashboard", "detail"];
|
|
357
|
+
readonly example: "[{ label: \"Active users\", value: \"1,204\", trend: \"up\", delta: \"+12%\" }]";
|
|
358
|
+
}, {
|
|
359
|
+
readonly id: "filters";
|
|
360
|
+
readonly label: "Filters";
|
|
361
|
+
readonly description: "Filter bar controls shown above list or dashboard content.";
|
|
362
|
+
readonly required: false;
|
|
363
|
+
readonly appliesTo: ["list", "dashboard"];
|
|
364
|
+
readonly example: "[{ type: \"search\", label: \"Search user\" }, { type: \"select\", label: \"Role\" }]";
|
|
365
|
+
}, {
|
|
366
|
+
readonly id: "searchPlaceholder";
|
|
367
|
+
readonly label: "Search placeholder";
|
|
368
|
+
readonly description: "Placeholder text for the main toolbar search input when the shell includes one.";
|
|
369
|
+
readonly required: false;
|
|
370
|
+
readonly appliesTo: ["list", "dashboard"];
|
|
371
|
+
readonly example: "Search by coupon code";
|
|
372
|
+
}, {
|
|
373
|
+
readonly id: "tableColumns";
|
|
374
|
+
readonly label: "Table columns";
|
|
375
|
+
readonly description: "Columns for a list table, including label and render intent.";
|
|
376
|
+
readonly required: false;
|
|
377
|
+
readonly appliesTo: ["list", "detail", "dashboard"];
|
|
378
|
+
readonly example: "[{ key: \"name\", title: \"Name\" }, { key: \"role\", title: \"Role\" }]";
|
|
379
|
+
}, {
|
|
380
|
+
readonly id: "rowActions";
|
|
381
|
+
readonly label: "Row actions";
|
|
382
|
+
readonly description: "Per-row actions for table screens.";
|
|
383
|
+
readonly required: false;
|
|
384
|
+
readonly appliesTo: ["list", "detail"];
|
|
385
|
+
readonly example: "[{ label: \"Edit\" }, { label: \"Reset password\" }]";
|
|
386
|
+
}, {
|
|
387
|
+
readonly id: "formSections";
|
|
388
|
+
readonly label: "Form sections";
|
|
389
|
+
readonly description: "Grouped form sections and the fields inside each section.";
|
|
390
|
+
readonly required: false;
|
|
391
|
+
readonly appliesTo: ["form"];
|
|
392
|
+
readonly example: "[{ title: \"Basic info\", fields: [\"name\", \"email\", \"role\"] }]";
|
|
393
|
+
}, {
|
|
394
|
+
readonly id: "fields";
|
|
395
|
+
readonly label: "Fields";
|
|
396
|
+
readonly description: "Detailed field list with type, label, required state, and helper text.";
|
|
397
|
+
readonly required: false;
|
|
398
|
+
readonly appliesTo: ["form", "detail"];
|
|
399
|
+
readonly example: "[{ name: \"email\", type: \"input\", label: \"Email\", required: true }]";
|
|
400
|
+
}, {
|
|
401
|
+
readonly id: "detailSections";
|
|
402
|
+
readonly label: "Detail sections";
|
|
403
|
+
readonly description: "Cards or sections for detail pages such as profile, activity, permissions, or related records.";
|
|
404
|
+
readonly required: false;
|
|
405
|
+
readonly appliesTo: ["detail"];
|
|
406
|
+
readonly example: "[{ title: \"Profile\" }, { title: \"Recent activity\" }]";
|
|
407
|
+
}, {
|
|
408
|
+
readonly id: "emptyState";
|
|
409
|
+
readonly label: "Empty state";
|
|
410
|
+
readonly description: "Fallback title, description, and action when there is no data.";
|
|
411
|
+
readonly required: false;
|
|
412
|
+
readonly appliesTo: ["list", "dashboard", "detail"];
|
|
413
|
+
readonly example: "{ title: \"No users yet\", description: \"Create the first user to get started.\" }";
|
|
414
|
+
}, {
|
|
415
|
+
readonly id: "permissions";
|
|
416
|
+
readonly label: "Permissions";
|
|
417
|
+
readonly description: "Permission keys that affect sidebar visibility or action availability.";
|
|
418
|
+
readonly required: false;
|
|
419
|
+
readonly appliesTo: ["all"];
|
|
420
|
+
readonly example: "[\"user.read\", \"user.write\"]";
|
|
421
|
+
}];
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
type UiThemeToken = {
|
|
425
|
+
name: string;
|
|
426
|
+
description: string;
|
|
427
|
+
defaultLight: string;
|
|
428
|
+
defaultDark: string;
|
|
429
|
+
usedBy: string[];
|
|
430
|
+
};
|
|
431
|
+
type UiThemePreset = {
|
|
432
|
+
id: string;
|
|
433
|
+
label: string;
|
|
434
|
+
description: string;
|
|
435
|
+
recommendedFor: string[];
|
|
436
|
+
tokens: {
|
|
437
|
+
light: Record<string, string>;
|
|
438
|
+
dark: Record<string, string>;
|
|
439
|
+
};
|
|
440
|
+
};
|
|
441
|
+
declare const uiThemePresets: readonly [{
|
|
442
|
+
readonly id: "ocean";
|
|
443
|
+
readonly label: "Ocean Glass";
|
|
444
|
+
readonly description: "Blue-cyan preset with clean glass surfaces. Matches the current default visual language.";
|
|
445
|
+
readonly recommendedFor: ["Admin dashboards", "SaaS CRUD screens", "Projects that want the existing package look"];
|
|
446
|
+
readonly tokens: {
|
|
447
|
+
readonly light: {
|
|
448
|
+
readonly '--tw-background': "0 0% 100%";
|
|
449
|
+
readonly '--tw-foreground': "222.2 47.4% 11.2%";
|
|
450
|
+
readonly '--tw-primary': "221.2 83.2% 53.3%";
|
|
451
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
452
|
+
readonly '--tw-success': "142.1 76.2% 36.3%";
|
|
453
|
+
readonly '--tw-destructive': "0 84.2% 60.2%";
|
|
454
|
+
readonly '--tw-border': "214.3 31.8% 91.4%";
|
|
455
|
+
readonly '--radius': "0.75rem";
|
|
456
|
+
readonly '--surface': "rgba(255, 255, 255, 0.92)";
|
|
457
|
+
readonly '--surface-strong': "rgba(241, 245, 249, 0.96)";
|
|
458
|
+
readonly '--grey': "rgba(248, 250, 252, 0.96)";
|
|
459
|
+
readonly '--grey-strong': "rgba(241, 245, 249, 0.98)";
|
|
460
|
+
readonly '--shadow-sm': "0 10px 28px -18px rgba(15, 23, 42, 0.22)";
|
|
461
|
+
readonly '--shadow': "0 24px 60px -28px rgba(15, 23, 42, 0.3)";
|
|
462
|
+
readonly '--primary-grad-from': "199 89% 48%";
|
|
463
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
464
|
+
};
|
|
465
|
+
readonly dark: {
|
|
466
|
+
readonly '--tw-background': "222.2 84% 4.9%";
|
|
467
|
+
readonly '--tw-foreground': "210 40% 98%";
|
|
468
|
+
readonly '--tw-primary': "217.2 91.2% 59.8%";
|
|
469
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
470
|
+
readonly '--tw-success': "142.1 70.6% 45.3%";
|
|
471
|
+
readonly '--tw-destructive': "0 62.8% 30.6%";
|
|
472
|
+
readonly '--tw-border': "217.2 32.6% 17.5%";
|
|
473
|
+
readonly '--radius': "0.75rem";
|
|
474
|
+
readonly '--surface': "rgba(15, 23, 42, 0.78)";
|
|
475
|
+
readonly '--surface-strong': "rgba(30, 41, 59, 0.92)";
|
|
476
|
+
readonly '--grey': "rgba(30, 41, 59, 0.88)";
|
|
477
|
+
readonly '--grey-strong': "rgba(51, 65, 85, 0.92)";
|
|
478
|
+
readonly '--shadow-sm': "0 16px 32px -18px rgba(2, 6, 23, 0.48)";
|
|
479
|
+
readonly '--shadow': "0 28px 80px -32px rgba(2, 6, 23, 0.7)";
|
|
480
|
+
readonly '--primary-grad-from': "198.6 88.7% 48.4%";
|
|
481
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
482
|
+
};
|
|
483
|
+
};
|
|
484
|
+
}, {
|
|
485
|
+
readonly id: "sunset";
|
|
486
|
+
readonly label: "Sunset Ember";
|
|
487
|
+
readonly description: "Warm orange-coral preset with softer cream surfaces for branded landing or growth products.";
|
|
488
|
+
readonly recommendedFor: ["Growth products", "Commerce backoffices", "Projects that want a warmer visual tone"];
|
|
489
|
+
readonly tokens: {
|
|
490
|
+
readonly light: {
|
|
491
|
+
readonly '--tw-background': "30 100% 98%";
|
|
492
|
+
readonly '--tw-foreground': "20 24% 14%";
|
|
493
|
+
readonly '--tw-primary': "14 90% 56%";
|
|
494
|
+
readonly '--tw-accent': "29 100% 58%";
|
|
495
|
+
readonly '--tw-success': "145 63% 38%";
|
|
496
|
+
readonly '--tw-destructive': "0 78% 58%";
|
|
497
|
+
readonly '--tw-border': "24 45% 89%";
|
|
498
|
+
readonly '--radius': "0.85rem";
|
|
499
|
+
readonly '--surface': "rgba(255, 247, 240, 0.92)";
|
|
500
|
+
readonly '--surface-strong': "rgba(255, 237, 223, 0.96)";
|
|
501
|
+
readonly '--grey': "rgba(255, 243, 231, 0.96)";
|
|
502
|
+
readonly '--grey-strong': "rgba(255, 232, 214, 0.98)";
|
|
503
|
+
readonly '--shadow-sm': "0 12px 30px -18px rgba(194, 65, 12, 0.18)";
|
|
504
|
+
readonly '--shadow': "0 28px 64px -30px rgba(154, 52, 18, 0.24)";
|
|
505
|
+
readonly '--primary-grad-from': "29 100% 58%";
|
|
506
|
+
readonly '--primary-grad-to': "14 90% 56%";
|
|
507
|
+
};
|
|
508
|
+
readonly dark: {
|
|
509
|
+
readonly '--tw-background': "20 24% 8%";
|
|
510
|
+
readonly '--tw-foreground': "40 33% 96%";
|
|
511
|
+
readonly '--tw-primary': "18 100% 62%";
|
|
512
|
+
readonly '--tw-accent': "35 100% 58%";
|
|
513
|
+
readonly '--tw-success': "145 60% 47%";
|
|
514
|
+
readonly '--tw-destructive': "0 73% 52%";
|
|
515
|
+
readonly '--tw-border': "18 24% 22%";
|
|
516
|
+
readonly '--radius': "0.85rem";
|
|
517
|
+
readonly '--surface': "rgba(41, 24, 18, 0.84)";
|
|
518
|
+
readonly '--surface-strong': "rgba(59, 34, 24, 0.9)";
|
|
519
|
+
readonly '--grey': "rgba(70, 42, 29, 0.88)";
|
|
520
|
+
readonly '--grey-strong': "rgba(92, 54, 38, 0.9)";
|
|
521
|
+
readonly '--shadow-sm': "0 18px 36px -20px rgba(67, 20, 7, 0.48)";
|
|
522
|
+
readonly '--shadow': "0 30px 84px -34px rgba(67, 20, 7, 0.62)";
|
|
523
|
+
readonly '--primary-grad-from': "35 100% 58%";
|
|
524
|
+
readonly '--primary-grad-to': "18 100% 62%";
|
|
525
|
+
};
|
|
526
|
+
};
|
|
527
|
+
}, {
|
|
528
|
+
readonly id: "forest";
|
|
529
|
+
readonly label: "Forest Mist";
|
|
530
|
+
readonly description: "Emerald-teal preset with soft botanical surfaces for calmer productivity products.";
|
|
531
|
+
readonly recommendedFor: ["Operations tools", "Internal platforms", "Products that want a calmer green tone"];
|
|
532
|
+
readonly tokens: {
|
|
533
|
+
readonly light: {
|
|
534
|
+
readonly '--tw-background': "138 40% 98%";
|
|
535
|
+
readonly '--tw-foreground': "160 25% 14%";
|
|
536
|
+
readonly '--tw-primary': "158 64% 40%";
|
|
537
|
+
readonly '--tw-accent': "173 58% 44%";
|
|
538
|
+
readonly '--tw-success': "145 63% 36%";
|
|
539
|
+
readonly '--tw-destructive': "0 78% 58%";
|
|
540
|
+
readonly '--tw-border': "143 21% 88%";
|
|
541
|
+
readonly '--radius': "0.8rem";
|
|
542
|
+
readonly '--surface': "rgba(245, 252, 249, 0.92)";
|
|
543
|
+
readonly '--surface-strong': "rgba(232, 245, 239, 0.96)";
|
|
544
|
+
readonly '--grey': "rgba(240, 248, 244, 0.96)";
|
|
545
|
+
readonly '--grey-strong': "rgba(225, 240, 232, 0.98)";
|
|
546
|
+
readonly '--shadow-sm': "0 12px 28px -18px rgba(5, 86, 66, 0.18)";
|
|
547
|
+
readonly '--shadow': "0 26px 62px -30px rgba(6, 78, 59, 0.24)";
|
|
548
|
+
readonly '--primary-grad-from': "173 58% 44%";
|
|
549
|
+
readonly '--primary-grad-to': "158 64% 40%";
|
|
550
|
+
};
|
|
551
|
+
readonly dark: {
|
|
552
|
+
readonly '--tw-background': "164 35% 8%";
|
|
553
|
+
readonly '--tw-foreground': "144 35% 96%";
|
|
554
|
+
readonly '--tw-primary': "160 70% 46%";
|
|
555
|
+
readonly '--tw-accent': "174 72% 45%";
|
|
556
|
+
readonly '--tw-success': "145 68% 46%";
|
|
557
|
+
readonly '--tw-destructive': "0 70% 52%";
|
|
558
|
+
readonly '--tw-border': "160 20% 20%";
|
|
559
|
+
readonly '--radius': "0.8rem";
|
|
560
|
+
readonly '--surface': "rgba(16, 36, 31, 0.84)";
|
|
561
|
+
readonly '--surface-strong': "rgba(21, 51, 44, 0.9)";
|
|
562
|
+
readonly '--grey': "rgba(24, 61, 52, 0.88)";
|
|
563
|
+
readonly '--grey-strong': "rgba(31, 77, 65, 0.9)";
|
|
564
|
+
readonly '--shadow-sm': "0 18px 34px -20px rgba(1, 44, 34, 0.48)";
|
|
565
|
+
readonly '--shadow': "0 30px 82px -34px rgba(1, 44, 34, 0.6)";
|
|
566
|
+
readonly '--primary-grad-from': "174 72% 45%";
|
|
567
|
+
readonly '--primary-grad-to': "160 70% 46%";
|
|
568
|
+
};
|
|
569
|
+
};
|
|
570
|
+
}, {
|
|
571
|
+
readonly id: "graphite";
|
|
572
|
+
readonly label: "Graphite Pulse";
|
|
573
|
+
readonly description: "Neutral slate preset with restrained blue accents for products that need a steadier enterprise tone.";
|
|
574
|
+
readonly recommendedFor: ["Enterprise admin panels", "B2B internal tools", "Projects that want a more neutral interface"];
|
|
575
|
+
readonly tokens: {
|
|
576
|
+
readonly light: {
|
|
577
|
+
readonly '--tw-background': "220 18% 97%";
|
|
578
|
+
readonly '--tw-foreground': "222 24% 14%";
|
|
579
|
+
readonly '--tw-primary': "221 24% 32%";
|
|
580
|
+
readonly '--tw-accent': "198 83% 44%";
|
|
581
|
+
readonly '--tw-success': "160 56% 38%";
|
|
582
|
+
readonly '--tw-destructive': "0 72% 54%";
|
|
583
|
+
readonly '--tw-border': "218 17% 86%";
|
|
584
|
+
readonly '--radius': "0.7rem";
|
|
585
|
+
readonly '--surface': "rgba(248, 250, 252, 0.94)";
|
|
586
|
+
readonly '--surface-strong': "rgba(226, 232, 240, 0.96)";
|
|
587
|
+
readonly '--grey': "rgba(241, 245, 249, 0.98)";
|
|
588
|
+
readonly '--grey-strong': "rgba(226, 232, 240, 0.99)";
|
|
589
|
+
readonly '--shadow-sm': "0 12px 30px -20px rgba(15, 23, 42, 0.18)";
|
|
590
|
+
readonly '--shadow': "0 28px 66px -30px rgba(15, 23, 42, 0.24)";
|
|
591
|
+
readonly '--primary-grad-from': "198 83% 44%";
|
|
592
|
+
readonly '--primary-grad-to': "221 24% 32%";
|
|
593
|
+
};
|
|
594
|
+
readonly dark: {
|
|
595
|
+
readonly '--tw-background': "222 32% 8%";
|
|
596
|
+
readonly '--tw-foreground': "210 25% 96%";
|
|
597
|
+
readonly '--tw-primary': "210 24% 82%";
|
|
598
|
+
readonly '--tw-accent': "192 92% 52%";
|
|
599
|
+
readonly '--tw-success': "158 64% 45%";
|
|
600
|
+
readonly '--tw-destructive': "0 72% 56%";
|
|
601
|
+
readonly '--tw-border': "217 19% 24%";
|
|
602
|
+
readonly '--radius': "0.7rem";
|
|
603
|
+
readonly '--surface': "rgba(15, 23, 42, 0.82)";
|
|
604
|
+
readonly '--surface-strong': "rgba(30, 41, 59, 0.92)";
|
|
605
|
+
readonly '--grey': "rgba(30, 41, 59, 0.9)";
|
|
606
|
+
readonly '--grey-strong': "rgba(51, 65, 85, 0.92)";
|
|
607
|
+
readonly '--shadow-sm': "0 18px 38px -22px rgba(2, 6, 23, 0.48)";
|
|
608
|
+
readonly '--shadow': "0 32px 88px -34px rgba(2, 6, 23, 0.68)";
|
|
609
|
+
readonly '--primary-grad-from': "192 92% 52%";
|
|
610
|
+
readonly '--primary-grad-to': "210 24% 82%";
|
|
611
|
+
};
|
|
612
|
+
};
|
|
613
|
+
}];
|
|
614
|
+
declare const uiDefaultThemePreset: {
|
|
615
|
+
readonly id: "ocean";
|
|
616
|
+
readonly label: "Ocean Glass";
|
|
617
|
+
readonly description: "Blue-cyan preset with clean glass surfaces. Matches the current default visual language.";
|
|
618
|
+
readonly recommendedFor: ["Admin dashboards", "SaaS CRUD screens", "Projects that want the existing package look"];
|
|
619
|
+
readonly tokens: {
|
|
620
|
+
readonly light: {
|
|
621
|
+
readonly '--tw-background': "0 0% 100%";
|
|
622
|
+
readonly '--tw-foreground': "222.2 47.4% 11.2%";
|
|
623
|
+
readonly '--tw-primary': "221.2 83.2% 53.3%";
|
|
624
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
625
|
+
readonly '--tw-success': "142.1 76.2% 36.3%";
|
|
626
|
+
readonly '--tw-destructive': "0 84.2% 60.2%";
|
|
627
|
+
readonly '--tw-border': "214.3 31.8% 91.4%";
|
|
628
|
+
readonly '--radius': "0.75rem";
|
|
629
|
+
readonly '--surface': "rgba(255, 255, 255, 0.92)";
|
|
630
|
+
readonly '--surface-strong': "rgba(241, 245, 249, 0.96)";
|
|
631
|
+
readonly '--grey': "rgba(248, 250, 252, 0.96)";
|
|
632
|
+
readonly '--grey-strong': "rgba(241, 245, 249, 0.98)";
|
|
633
|
+
readonly '--shadow-sm': "0 10px 28px -18px rgba(15, 23, 42, 0.22)";
|
|
634
|
+
readonly '--shadow': "0 24px 60px -28px rgba(15, 23, 42, 0.3)";
|
|
635
|
+
readonly '--primary-grad-from': "199 89% 48%";
|
|
636
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
637
|
+
};
|
|
638
|
+
readonly dark: {
|
|
639
|
+
readonly '--tw-background': "222.2 84% 4.9%";
|
|
640
|
+
readonly '--tw-foreground': "210 40% 98%";
|
|
641
|
+
readonly '--tw-primary': "217.2 91.2% 59.8%";
|
|
642
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
643
|
+
readonly '--tw-success': "142.1 70.6% 45.3%";
|
|
644
|
+
readonly '--tw-destructive': "0 62.8% 30.6%";
|
|
645
|
+
readonly '--tw-border': "217.2 32.6% 17.5%";
|
|
646
|
+
readonly '--radius': "0.75rem";
|
|
647
|
+
readonly '--surface': "rgba(15, 23, 42, 0.78)";
|
|
648
|
+
readonly '--surface-strong': "rgba(30, 41, 59, 0.92)";
|
|
649
|
+
readonly '--grey': "rgba(30, 41, 59, 0.88)";
|
|
650
|
+
readonly '--grey-strong': "rgba(51, 65, 85, 0.92)";
|
|
651
|
+
readonly '--shadow-sm': "0 16px 32px -18px rgba(2, 6, 23, 0.48)";
|
|
652
|
+
readonly '--shadow': "0 28px 80px -32px rgba(2, 6, 23, 0.7)";
|
|
653
|
+
readonly '--primary-grad-from': "198.6 88.7% 48.4%";
|
|
654
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
655
|
+
};
|
|
656
|
+
};
|
|
657
|
+
};
|
|
658
|
+
declare const uiThemeContract: {
|
|
659
|
+
readonly packageName: "@lucasvu/scope-ui";
|
|
660
|
+
readonly importOrder: readonly ["import '@lucasvu/scope-ui/styles.css'", "import './styles/ui-theme.css'"];
|
|
661
|
+
readonly selectors: {
|
|
662
|
+
readonly light: readonly [":root", "[data-ui-theme='light']"];
|
|
663
|
+
readonly dark: readonly [".dark", "[data-ui-theme='dark']"];
|
|
664
|
+
};
|
|
665
|
+
readonly overrideFile: "src/styles/ui-theme.css";
|
|
666
|
+
readonly defaultPreset: "ocean";
|
|
667
|
+
readonly presets: readonly [{
|
|
668
|
+
readonly id: "ocean";
|
|
669
|
+
readonly label: "Ocean Glass";
|
|
670
|
+
readonly description: "Blue-cyan preset with clean glass surfaces. Matches the current default visual language.";
|
|
671
|
+
readonly recommendedFor: ["Admin dashboards", "SaaS CRUD screens", "Projects that want the existing package look"];
|
|
672
|
+
readonly tokens: {
|
|
673
|
+
readonly light: {
|
|
674
|
+
readonly '--tw-background': "0 0% 100%";
|
|
675
|
+
readonly '--tw-foreground': "222.2 47.4% 11.2%";
|
|
676
|
+
readonly '--tw-primary': "221.2 83.2% 53.3%";
|
|
677
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
678
|
+
readonly '--tw-success': "142.1 76.2% 36.3%";
|
|
679
|
+
readonly '--tw-destructive': "0 84.2% 60.2%";
|
|
680
|
+
readonly '--tw-border': "214.3 31.8% 91.4%";
|
|
681
|
+
readonly '--radius': "0.75rem";
|
|
682
|
+
readonly '--surface': "rgba(255, 255, 255, 0.92)";
|
|
683
|
+
readonly '--surface-strong': "rgba(241, 245, 249, 0.96)";
|
|
684
|
+
readonly '--grey': "rgba(248, 250, 252, 0.96)";
|
|
685
|
+
readonly '--grey-strong': "rgba(241, 245, 249, 0.98)";
|
|
686
|
+
readonly '--shadow-sm': "0 10px 28px -18px rgba(15, 23, 42, 0.22)";
|
|
687
|
+
readonly '--shadow': "0 24px 60px -28px rgba(15, 23, 42, 0.3)";
|
|
688
|
+
readonly '--primary-grad-from': "199 89% 48%";
|
|
689
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
690
|
+
};
|
|
691
|
+
readonly dark: {
|
|
692
|
+
readonly '--tw-background': "222.2 84% 4.9%";
|
|
693
|
+
readonly '--tw-foreground': "210 40% 98%";
|
|
694
|
+
readonly '--tw-primary': "217.2 91.2% 59.8%";
|
|
695
|
+
readonly '--tw-accent': "199 89% 48%";
|
|
696
|
+
readonly '--tw-success': "142.1 70.6% 45.3%";
|
|
697
|
+
readonly '--tw-destructive': "0 62.8% 30.6%";
|
|
698
|
+
readonly '--tw-border': "217.2 32.6% 17.5%";
|
|
699
|
+
readonly '--radius': "0.75rem";
|
|
700
|
+
readonly '--surface': "rgba(15, 23, 42, 0.78)";
|
|
701
|
+
readonly '--surface-strong': "rgba(30, 41, 59, 0.92)";
|
|
702
|
+
readonly '--grey': "rgba(30, 41, 59, 0.88)";
|
|
703
|
+
readonly '--grey-strong': "rgba(51, 65, 85, 0.92)";
|
|
704
|
+
readonly '--shadow-sm': "0 16px 32px -18px rgba(2, 6, 23, 0.48)";
|
|
705
|
+
readonly '--shadow': "0 28px 80px -32px rgba(2, 6, 23, 0.7)";
|
|
706
|
+
readonly '--primary-grad-from': "198.6 88.7% 48.4%";
|
|
707
|
+
readonly '--primary-grad-to': "221.2 83.2% 53.3%";
|
|
708
|
+
};
|
|
709
|
+
};
|
|
710
|
+
}, {
|
|
711
|
+
readonly id: "sunset";
|
|
712
|
+
readonly label: "Sunset Ember";
|
|
713
|
+
readonly description: "Warm orange-coral preset with softer cream surfaces for branded landing or growth products.";
|
|
714
|
+
readonly recommendedFor: ["Growth products", "Commerce backoffices", "Projects that want a warmer visual tone"];
|
|
715
|
+
readonly tokens: {
|
|
716
|
+
readonly light: {
|
|
717
|
+
readonly '--tw-background': "30 100% 98%";
|
|
718
|
+
readonly '--tw-foreground': "20 24% 14%";
|
|
719
|
+
readonly '--tw-primary': "14 90% 56%";
|
|
720
|
+
readonly '--tw-accent': "29 100% 58%";
|
|
721
|
+
readonly '--tw-success': "145 63% 38%";
|
|
722
|
+
readonly '--tw-destructive': "0 78% 58%";
|
|
723
|
+
readonly '--tw-border': "24 45% 89%";
|
|
724
|
+
readonly '--radius': "0.85rem";
|
|
725
|
+
readonly '--surface': "rgba(255, 247, 240, 0.92)";
|
|
726
|
+
readonly '--surface-strong': "rgba(255, 237, 223, 0.96)";
|
|
727
|
+
readonly '--grey': "rgba(255, 243, 231, 0.96)";
|
|
728
|
+
readonly '--grey-strong': "rgba(255, 232, 214, 0.98)";
|
|
729
|
+
readonly '--shadow-sm': "0 12px 30px -18px rgba(194, 65, 12, 0.18)";
|
|
730
|
+
readonly '--shadow': "0 28px 64px -30px rgba(154, 52, 18, 0.24)";
|
|
731
|
+
readonly '--primary-grad-from': "29 100% 58%";
|
|
732
|
+
readonly '--primary-grad-to': "14 90% 56%";
|
|
733
|
+
};
|
|
734
|
+
readonly dark: {
|
|
735
|
+
readonly '--tw-background': "20 24% 8%";
|
|
736
|
+
readonly '--tw-foreground': "40 33% 96%";
|
|
737
|
+
readonly '--tw-primary': "18 100% 62%";
|
|
738
|
+
readonly '--tw-accent': "35 100% 58%";
|
|
739
|
+
readonly '--tw-success': "145 60% 47%";
|
|
740
|
+
readonly '--tw-destructive': "0 73% 52%";
|
|
741
|
+
readonly '--tw-border': "18 24% 22%";
|
|
742
|
+
readonly '--radius': "0.85rem";
|
|
743
|
+
readonly '--surface': "rgba(41, 24, 18, 0.84)";
|
|
744
|
+
readonly '--surface-strong': "rgba(59, 34, 24, 0.9)";
|
|
745
|
+
readonly '--grey': "rgba(70, 42, 29, 0.88)";
|
|
746
|
+
readonly '--grey-strong': "rgba(92, 54, 38, 0.9)";
|
|
747
|
+
readonly '--shadow-sm': "0 18px 36px -20px rgba(67, 20, 7, 0.48)";
|
|
748
|
+
readonly '--shadow': "0 30px 84px -34px rgba(67, 20, 7, 0.62)";
|
|
749
|
+
readonly '--primary-grad-from': "35 100% 58%";
|
|
750
|
+
readonly '--primary-grad-to': "18 100% 62%";
|
|
751
|
+
};
|
|
752
|
+
};
|
|
753
|
+
}, {
|
|
754
|
+
readonly id: "forest";
|
|
755
|
+
readonly label: "Forest Mist";
|
|
756
|
+
readonly description: "Emerald-teal preset with soft botanical surfaces for calmer productivity products.";
|
|
757
|
+
readonly recommendedFor: ["Operations tools", "Internal platforms", "Products that want a calmer green tone"];
|
|
758
|
+
readonly tokens: {
|
|
759
|
+
readonly light: {
|
|
760
|
+
readonly '--tw-background': "138 40% 98%";
|
|
761
|
+
readonly '--tw-foreground': "160 25% 14%";
|
|
762
|
+
readonly '--tw-primary': "158 64% 40%";
|
|
763
|
+
readonly '--tw-accent': "173 58% 44%";
|
|
764
|
+
readonly '--tw-success': "145 63% 36%";
|
|
765
|
+
readonly '--tw-destructive': "0 78% 58%";
|
|
766
|
+
readonly '--tw-border': "143 21% 88%";
|
|
767
|
+
readonly '--radius': "0.8rem";
|
|
768
|
+
readonly '--surface': "rgba(245, 252, 249, 0.92)";
|
|
769
|
+
readonly '--surface-strong': "rgba(232, 245, 239, 0.96)";
|
|
770
|
+
readonly '--grey': "rgba(240, 248, 244, 0.96)";
|
|
771
|
+
readonly '--grey-strong': "rgba(225, 240, 232, 0.98)";
|
|
772
|
+
readonly '--shadow-sm': "0 12px 28px -18px rgba(5, 86, 66, 0.18)";
|
|
773
|
+
readonly '--shadow': "0 26px 62px -30px rgba(6, 78, 59, 0.24)";
|
|
774
|
+
readonly '--primary-grad-from': "173 58% 44%";
|
|
775
|
+
readonly '--primary-grad-to': "158 64% 40%";
|
|
776
|
+
};
|
|
777
|
+
readonly dark: {
|
|
778
|
+
readonly '--tw-background': "164 35% 8%";
|
|
779
|
+
readonly '--tw-foreground': "144 35% 96%";
|
|
780
|
+
readonly '--tw-primary': "160 70% 46%";
|
|
781
|
+
readonly '--tw-accent': "174 72% 45%";
|
|
782
|
+
readonly '--tw-success': "145 68% 46%";
|
|
783
|
+
readonly '--tw-destructive': "0 70% 52%";
|
|
784
|
+
readonly '--tw-border': "160 20% 20%";
|
|
785
|
+
readonly '--radius': "0.8rem";
|
|
786
|
+
readonly '--surface': "rgba(16, 36, 31, 0.84)";
|
|
787
|
+
readonly '--surface-strong': "rgba(21, 51, 44, 0.9)";
|
|
788
|
+
readonly '--grey': "rgba(24, 61, 52, 0.88)";
|
|
789
|
+
readonly '--grey-strong': "rgba(31, 77, 65, 0.9)";
|
|
790
|
+
readonly '--shadow-sm': "0 18px 34px -20px rgba(1, 44, 34, 0.48)";
|
|
791
|
+
readonly '--shadow': "0 30px 82px -34px rgba(1, 44, 34, 0.6)";
|
|
792
|
+
readonly '--primary-grad-from': "174 72% 45%";
|
|
793
|
+
readonly '--primary-grad-to': "160 70% 46%";
|
|
794
|
+
};
|
|
795
|
+
};
|
|
796
|
+
}, {
|
|
797
|
+
readonly id: "graphite";
|
|
798
|
+
readonly label: "Graphite Pulse";
|
|
799
|
+
readonly description: "Neutral slate preset with restrained blue accents for products that need a steadier enterprise tone.";
|
|
800
|
+
readonly recommendedFor: ["Enterprise admin panels", "B2B internal tools", "Projects that want a more neutral interface"];
|
|
801
|
+
readonly tokens: {
|
|
802
|
+
readonly light: {
|
|
803
|
+
readonly '--tw-background': "220 18% 97%";
|
|
804
|
+
readonly '--tw-foreground': "222 24% 14%";
|
|
805
|
+
readonly '--tw-primary': "221 24% 32%";
|
|
806
|
+
readonly '--tw-accent': "198 83% 44%";
|
|
807
|
+
readonly '--tw-success': "160 56% 38%";
|
|
808
|
+
readonly '--tw-destructive': "0 72% 54%";
|
|
809
|
+
readonly '--tw-border': "218 17% 86%";
|
|
810
|
+
readonly '--radius': "0.7rem";
|
|
811
|
+
readonly '--surface': "rgba(248, 250, 252, 0.94)";
|
|
812
|
+
readonly '--surface-strong': "rgba(226, 232, 240, 0.96)";
|
|
813
|
+
readonly '--grey': "rgba(241, 245, 249, 0.98)";
|
|
814
|
+
readonly '--grey-strong': "rgba(226, 232, 240, 0.99)";
|
|
815
|
+
readonly '--shadow-sm': "0 12px 30px -20px rgba(15, 23, 42, 0.18)";
|
|
816
|
+
readonly '--shadow': "0 28px 66px -30px rgba(15, 23, 42, 0.24)";
|
|
817
|
+
readonly '--primary-grad-from': "198 83% 44%";
|
|
818
|
+
readonly '--primary-grad-to': "221 24% 32%";
|
|
819
|
+
};
|
|
820
|
+
readonly dark: {
|
|
821
|
+
readonly '--tw-background': "222 32% 8%";
|
|
822
|
+
readonly '--tw-foreground': "210 25% 96%";
|
|
823
|
+
readonly '--tw-primary': "210 24% 82%";
|
|
824
|
+
readonly '--tw-accent': "192 92% 52%";
|
|
825
|
+
readonly '--tw-success': "158 64% 45%";
|
|
826
|
+
readonly '--tw-destructive': "0 72% 56%";
|
|
827
|
+
readonly '--tw-border': "217 19% 24%";
|
|
828
|
+
readonly '--radius': "0.7rem";
|
|
829
|
+
readonly '--surface': "rgba(15, 23, 42, 0.82)";
|
|
830
|
+
readonly '--surface-strong': "rgba(30, 41, 59, 0.92)";
|
|
831
|
+
readonly '--grey': "rgba(30, 41, 59, 0.9)";
|
|
832
|
+
readonly '--grey-strong': "rgba(51, 65, 85, 0.92)";
|
|
833
|
+
readonly '--shadow-sm': "0 18px 38px -22px rgba(2, 6, 23, 0.48)";
|
|
834
|
+
readonly '--shadow': "0 32px 88px -34px rgba(2, 6, 23, 0.68)";
|
|
835
|
+
readonly '--primary-grad-from': "192 92% 52%";
|
|
836
|
+
readonly '--primary-grad-to': "210 24% 82%";
|
|
837
|
+
};
|
|
838
|
+
};
|
|
839
|
+
}];
|
|
840
|
+
readonly rules: readonly ["Import the package stylesheet before your project theme override stylesheet.", "Choose one approved preset and keep the entire project on that preset instead of mixing palettes page by page.", "Override tokens in one shared theme file instead of scattering colors across components.", "Use :root for the default light theme and .dark or [data-ui-theme='dark'] for dark theme.", "Only override tokens declared here. Do not patch component internals unless you are extending the library.", "For AI-generated screens, choose one theme source of truth and keep component code token-driven."];
|
|
841
|
+
readonly tokens: {
|
|
842
|
+
name: string;
|
|
843
|
+
description: string;
|
|
844
|
+
defaultLight: string;
|
|
845
|
+
defaultDark: string;
|
|
846
|
+
usedBy: string[];
|
|
847
|
+
}[];
|
|
848
|
+
readonly exampleCss: string;
|
|
849
|
+
};
|
|
850
|
+
declare const uiProjectAiRules: readonly ["Use @lucasvu/scope-ui as the default UI library for React projects, or @lucasvu/scope-ui/core for framework-agnostic theme/runtime usage.", "Import @lucasvu/scope-ui/styles.css once at the app entry.", "Import the project override theme file after the package stylesheet or bundled theme layer.", "Stay inside the approved theme preset declared by the project and do not invent a second palette.", "Read uiAiManifest to choose the correct component by intent before coding.", "Read uiThemeContract and uiThemeLayerAssets before changing colors, shadows, radius, or theme behavior.", "Prefer root exports and avoid MainFe unless the task explicitly targets a legacy screen."];
|
|
851
|
+
|
|
852
|
+
type UiThemeLayerAsset = {
|
|
853
|
+
id: string;
|
|
854
|
+
label: string;
|
|
855
|
+
importPath: string;
|
|
856
|
+
activation: 'global' | 'data-client-theme';
|
|
857
|
+
clientThemeAttributeValue?: string;
|
|
858
|
+
description: string;
|
|
859
|
+
recommendedFor: string[];
|
|
860
|
+
};
|
|
861
|
+
declare const uiThemeLayerAssets: readonly [{
|
|
862
|
+
readonly id: "default";
|
|
863
|
+
readonly label: "Theme Default";
|
|
864
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-default.css";
|
|
865
|
+
readonly activation: "global";
|
|
866
|
+
readonly description: "Global default token layer close to the legacy shared theme baseline.";
|
|
867
|
+
readonly recommendedFor: ["Projects that want a direct global theme layer without extra setup", "Legacy migrations"];
|
|
868
|
+
}, {
|
|
869
|
+
readonly id: "new-main-fe";
|
|
870
|
+
readonly label: "New Main FE";
|
|
871
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-new-main-fe.css";
|
|
872
|
+
readonly activation: "global";
|
|
873
|
+
readonly description: "Global Argon-inspired shell layer that works immediately after import.";
|
|
874
|
+
readonly recommendedFor: ["Admin shells", "Projects that want the current shared main-fe tone"];
|
|
875
|
+
}, {
|
|
876
|
+
readonly id: "citrus-ink";
|
|
877
|
+
readonly label: "Citrus Ink";
|
|
878
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-citrus-ink.css";
|
|
879
|
+
readonly activation: "data-client-theme";
|
|
880
|
+
readonly clientThemeAttributeValue: "citrus-ink";
|
|
881
|
+
readonly description: "High-contrast graphite theme with mint and citrus accents.";
|
|
882
|
+
readonly recommendedFor: ["Brand-heavy dashboards"];
|
|
883
|
+
}, {
|
|
884
|
+
readonly id: "facebook-blue";
|
|
885
|
+
readonly label: "Facebook Blue";
|
|
886
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-facebook-blue.css";
|
|
887
|
+
readonly activation: "data-client-theme";
|
|
888
|
+
readonly clientThemeAttributeValue: "facebook-blue";
|
|
889
|
+
readonly description: "Blue-first neutral theme tuned around a familiar social palette.";
|
|
890
|
+
readonly recommendedFor: ["Blue-branded products"];
|
|
891
|
+
}, {
|
|
892
|
+
readonly id: "neo-slate";
|
|
893
|
+
readonly label: "Neo Slate";
|
|
894
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-neo-slate.css";
|
|
895
|
+
readonly activation: "data-client-theme";
|
|
896
|
+
readonly clientThemeAttributeValue: "neo-slate";
|
|
897
|
+
readonly description: "Modern slate-indigo workspace theme with richer shell tokens.";
|
|
898
|
+
readonly recommendedFor: ["Contemporary SaaS dashboards", "Modern admin shells"];
|
|
899
|
+
}, {
|
|
900
|
+
readonly id: "siraya-brand";
|
|
901
|
+
readonly label: "Siraya Brand Sunset";
|
|
902
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-new-main-fe-sunset.css";
|
|
903
|
+
readonly activation: "data-client-theme";
|
|
904
|
+
readonly clientThemeAttributeValue: "siraya-brand";
|
|
905
|
+
readonly description: "Warm branded shell with typography and page-slot overrides.";
|
|
906
|
+
readonly recommendedFor: ["Brand-led marketing or hybrid product shells"];
|
|
907
|
+
}, {
|
|
908
|
+
readonly id: "pure-white";
|
|
909
|
+
readonly label: "Pure White";
|
|
910
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-pure-white.css";
|
|
911
|
+
readonly activation: "data-client-theme";
|
|
912
|
+
readonly clientThemeAttributeValue: "pure-white";
|
|
913
|
+
readonly description: "Clean white workspace theme with cobalt accents.";
|
|
914
|
+
readonly recommendedFor: ["Minimalist backoffices"];
|
|
915
|
+
}, {
|
|
916
|
+
readonly id: "siraya-vii-light";
|
|
917
|
+
readonly label: "Siraya VII Light";
|
|
918
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-siraya-vii-light.css";
|
|
919
|
+
readonly activation: "data-client-theme";
|
|
920
|
+
readonly clientThemeAttributeValue: "siraya-vii-light";
|
|
921
|
+
readonly description: "Light brand system based on the Siraya VII palette.";
|
|
922
|
+
readonly recommendedFor: ["Brand refresh experiments"];
|
|
923
|
+
}, {
|
|
924
|
+
readonly id: "solstice-pop";
|
|
925
|
+
readonly label: "Solstice Pop";
|
|
926
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-solstice-pop.css";
|
|
927
|
+
readonly activation: "data-client-theme";
|
|
928
|
+
readonly clientThemeAttributeValue: "solstice-pop";
|
|
929
|
+
readonly description: "Editorial warm-stone theme with stronger typography direction.";
|
|
930
|
+
readonly recommendedFor: ["Content-heavy dashboards"];
|
|
931
|
+
}, {
|
|
932
|
+
readonly id: "uat-aurora";
|
|
933
|
+
readonly label: "UAT Aurora";
|
|
934
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-uat-aurora.css";
|
|
935
|
+
readonly activation: "data-client-theme";
|
|
936
|
+
readonly clientThemeAttributeValue: "uat-aurora";
|
|
937
|
+
readonly description: "Soft slate-blue experimental theme using the same token structure as sunset.";
|
|
938
|
+
readonly recommendedFor: ["UAT or staging environments", "Blue-toned shells"];
|
|
939
|
+
}, {
|
|
940
|
+
readonly id: "custom-crisp";
|
|
941
|
+
readonly label: "Custom Crisp";
|
|
942
|
+
readonly importPath: "@lucasvu/scope-ui/themes/theme-ui-custom-crisp.css";
|
|
943
|
+
readonly activation: "data-client-theme";
|
|
944
|
+
readonly clientThemeAttributeValue: "*";
|
|
945
|
+
readonly description: "Cross-theme typography and control crispness overrides for client-theme-driven shells.";
|
|
946
|
+
readonly recommendedFor: ["Attribute-scoped client themes that need sharper controls"];
|
|
947
|
+
}];
|
|
948
|
+
|
|
949
|
+
declare const ROOT_COLOR_MODE_ATTRIBUTE = "data-ui-color-mode";
|
|
950
|
+
declare const ROOT_CLIENT_THEME_ATTRIBUTE = "data-client-theme";
|
|
951
|
+
type ColorMode = 'light' | 'dark';
|
|
952
|
+
declare const isColorMode: (value: unknown) => value is ColorMode;
|
|
953
|
+
declare const getSystemColorMode: () => ColorMode;
|
|
954
|
+
declare const applyDocumentColorMode: (colorMode: ColorMode) => void;
|
|
955
|
+
declare const initializeDocumentColorMode: (colorMode?: ColorMode) => ColorMode;
|
|
956
|
+
declare const subscribeToSystemColorMode: (listener: (colorMode: ColorMode) => void) => () => void;
|
|
957
|
+
declare const syncDocumentColorModeToSystem: () => () => void;
|
|
958
|
+
declare const applyDocumentClientTheme: (themeId: string | null | undefined) => void;
|
|
959
|
+
|
|
960
|
+
type ClassValue = string | false | null | undefined;
|
|
961
|
+
declare function cn(...values: ClassValue[]): string;
|
|
962
|
+
|
|
963
|
+
export { type ColorMode, ROOT_CLIENT_THEME_ATTRIBUTE, ROOT_COLOR_MODE_ATTRIBUTE, type UiAiComponentDescriptor, type UiAiComponentProp, type UiScreenBriefField, type UiScreenKind, type UiThemeLayerAsset, type UiThemePreset, type UiThemeToken, applyDocumentClientTheme, applyDocumentColorMode, cn, getSystemColorMode, initializeDocumentColorMode, isColorMode, subscribeToSystemColorMode, syncDocumentColorModeToSystem, uiAiManifest, uiDefaultThemePreset, uiProjectAiRules, uiScreenBlueprint, uiScreenBriefFields, uiThemeContract, uiThemeLayerAssets, uiThemePresets };
|