@fluid-app/fluid-cli-portal 0.1.61 → 0.1.63
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/authoring/commands.md +242 -0
- package/dist/{backend-dev-plugin-20fLk-4t.mjs → backend-dev-plugin-z9IZCHaY.mjs} +2 -2
- package/dist/{backend-dev-plugin-20fLk-4t.mjs.map → backend-dev-plugin-z9IZCHaY.mjs.map} +1 -1
- package/dist/index.d.mts +571 -423
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +17 -15
- package/dist/index.mjs.map +1 -1
- package/dist/{portal-dev-plugin-5BbRo9QT.mjs → portal-dev-plugin-2jZODDsX.mjs} +2 -2
- package/dist/{portal-dev-plugin-5BbRo9QT.mjs.map → portal-dev-plugin-2jZODDsX.mjs.map} +1 -1
- package/dist/{portal-widget-dev-plugin-NBHcnvFJ.mjs → portal-widget-dev-plugin-Dyp2bVy7.mjs} +3 -3
- package/dist/{portal-widget-dev-plugin-NBHcnvFJ.mjs.map → portal-widget-dev-plugin-Dyp2bVy7.mjs.map} +1 -1
- package/dist/{pull-BlG6pMwC.mjs → pull-BWnby_pY.mjs} +6287 -2908
- package/dist/{pull-BlG6pMwC.mjs.map → pull-BWnby_pY.mjs.map} +1 -1
- package/dist/{src-2znVq55R.mjs → src-CQ24GVe6.mjs} +7 -1
- package/dist/src-CQ24GVe6.mjs.map +1 -0
- package/dist/vite-plugin.mjs +4 -4
- package/package.json +6 -5
- package/templates/base/.gitignore.template +3 -0
- package/templates/base/AGENTS.md +40 -41
- package/templates/base/skills/fluid-portal-authoring/SKILL.md +37 -428
- package/templates/base/skills/fluid-portal-authoring/references/portal-json.md +46 -0
- package/templates/base/skills/fluid-portal-authoring/references/widgets-and-runtime.md +57 -0
- package/templates/base/skills/fluid-portal-authoring/references/workflows.md +56 -0
- package/templates/starter/.env.example +9 -0
- package/templates/starter/README.md.template +99 -169
- package/dist/src-2znVq55R.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1284,761 +1284,909 @@ declare const versionCommand: Command;
|
|
|
1284
1284
|
declare const doctorCommand: Command;
|
|
1285
1285
|
//#endregion
|
|
1286
1286
|
//#region ../../portal/definition-schema/src/generated/types.d.ts
|
|
1287
|
+
/** JSON scalar value. */
|
|
1287
1288
|
type JsonPrimitive = string | number | boolean | null;
|
|
1289
|
+
/** Serializable value accepted by portal resources and widget props. */
|
|
1288
1290
|
type JsonValue = JsonPrimitive | JsonValue[] | JsonObject | PortalWidgetNode;
|
|
1291
|
+
/** Serializable object with arbitrary string keys. */
|
|
1289
1292
|
interface JsonObject {
|
|
1293
|
+
/** Serializable value stored at this key. */
|
|
1290
1294
|
readonly [key: string]: JsonValue;
|
|
1291
1295
|
}
|
|
1296
|
+
/** Semantic color token accepted by widget properties. */
|
|
1292
1297
|
type ColorOption = "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1298
|
+
/** Data-source configuration attached to a widget node. */
|
|
1293
1299
|
interface PortalDataSourceConfig {
|
|
1300
|
+
/** Ordered data-source definitions evaluated for the widget. */
|
|
1294
1301
|
readonly sources: JsonObject[];
|
|
1302
|
+
/** Loading presentation settings. */
|
|
1295
1303
|
readonly loading?: {
|
|
1296
1304
|
readonly showSkeleton?: boolean;
|
|
1297
1305
|
};
|
|
1306
|
+
/** Failure fallback and retry settings. */
|
|
1298
1307
|
readonly error?: {
|
|
1299
1308
|
readonly fallback?: JsonObject;
|
|
1300
1309
|
readonly retryCount?: number;
|
|
1301
1310
|
readonly retryDelay?: number;
|
|
1302
1311
|
};
|
|
1303
1312
|
}
|
|
1313
|
+
/** Fields shared by built-in and third-party widget nodes. */
|
|
1304
1314
|
interface PortalWidgetNodeBase {
|
|
1315
|
+
/** Stable node identifier within the screen. */
|
|
1305
1316
|
readonly id: string;
|
|
1317
|
+
/** Registered widget type. */
|
|
1306
1318
|
readonly type: string;
|
|
1319
|
+
/** Widget-owned serializable properties. */
|
|
1307
1320
|
readonly props: JsonObject;
|
|
1321
|
+
/** Optional configuration that populates widget props. */
|
|
1308
1322
|
readonly dataSource?: PortalDataSourceConfig;
|
|
1323
|
+
/** Zero-based parent layout column. */
|
|
1309
1324
|
readonly columnIndex?: number;
|
|
1310
1325
|
}
|
|
1326
|
+
/** Portal node for the AlertWidget built-in widget. */
|
|
1311
1327
|
interface AlertWidgetNode extends PortalWidgetNodeBase {
|
|
1328
|
+
/** Registered built-in widget type. */
|
|
1312
1329
|
readonly type: "AlertWidget";
|
|
1330
|
+
/** Properties accepted by this widget. */
|
|
1313
1331
|
readonly props: {
|
|
1314
|
-
titleEnabled?: boolean;
|
|
1315
|
-
title?: string;
|
|
1316
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1317
|
-
titleFontWeight?: "normal" | "medium" | "semibold" | "bold";
|
|
1318
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1319
|
-
titleAlignment?: "left" | "center" | "right";
|
|
1320
|
-
description?: string;
|
|
1321
|
-
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1322
|
-
descriptionFontWeight?: "normal" | "medium" | "semibold" | "bold";
|
|
1323
|
-
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1324
|
-
descriptionAlignment?: "left" | "center" | "right";
|
|
1332
|
+
/** Enable the title displayed above the text */titleEnabled?: boolean; /** The title */
|
|
1333
|
+
title?: string; /** Font size for the title */
|
|
1334
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Font weight for the title */
|
|
1335
|
+
titleFontWeight?: "normal" | "medium" | "semibold" | "bold"; /** The color of the title */
|
|
1336
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text alignment for the title */
|
|
1337
|
+
titleAlignment?: "left" | "center" | "right"; /** The text message */
|
|
1338
|
+
description?: string; /** Font size for the text */
|
|
1339
|
+
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Font weight for the text */
|
|
1340
|
+
descriptionFontWeight?: "normal" | "medium" | "semibold" | "bold"; /** The color of the text */
|
|
1341
|
+
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text alignment for the description */
|
|
1342
|
+
descriptionAlignment?: "left" | "center" | "right"; /** Background for the text container */
|
|
1325
1343
|
background?: string | {
|
|
1326
1344
|
type: "solid" | "image";
|
|
1327
1345
|
color?: ColorOption;
|
|
1328
1346
|
resource?: string | null | JsonObject;
|
|
1329
|
-
};
|
|
1330
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1331
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1332
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1347
|
+
}; /** The padding of the text container */
|
|
1348
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** The border radius of the text container */
|
|
1349
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** The border width of the text container */
|
|
1350
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** The border color of the text container */
|
|
1333
1351
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1334
1352
|
};
|
|
1335
1353
|
}
|
|
1354
|
+
/** Portal node for the BulletListWidget built-in widget. */
|
|
1336
1355
|
interface BulletListWidgetNode extends PortalWidgetNodeBase {
|
|
1356
|
+
/** Registered built-in widget type. */
|
|
1337
1357
|
readonly type: "BulletListWidget";
|
|
1358
|
+
/** Properties accepted by this widget. */
|
|
1338
1359
|
readonly props: {
|
|
1339
|
-
titleEnabled?: boolean;
|
|
1340
|
-
title?: string;
|
|
1341
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1342
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1343
|
-
listType?: "unordered" | "ordered";
|
|
1344
|
-
items?: string[];
|
|
1345
|
-
itemFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1346
|
-
itemColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1360
|
+
/** Enable the title displayed above the list */titleEnabled?: boolean; /** The title */
|
|
1361
|
+
title?: string; /** Font size for the title */
|
|
1362
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** The color of the title */
|
|
1363
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Ordered (numbered) or unordered (bullets) */
|
|
1364
|
+
listType?: "unordered" | "ordered"; /** Add or remove list items */
|
|
1365
|
+
items?: string[]; /** Font size for list items */
|
|
1366
|
+
itemFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** The color of list items */
|
|
1367
|
+
itemColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the list container */
|
|
1347
1368
|
background?: string | {
|
|
1348
1369
|
type: "solid" | "image";
|
|
1349
1370
|
color?: ColorOption;
|
|
1350
1371
|
resource?: string | null | JsonObject;
|
|
1351
|
-
};
|
|
1352
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1353
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1354
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1355
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1372
|
+
}; /** The padding of the list container */
|
|
1373
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** The border radius of the list container */
|
|
1374
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1375
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1376
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Gap between list items */
|
|
1356
1377
|
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1357
1378
|
};
|
|
1358
1379
|
}
|
|
1380
|
+
/** Portal node for the CalendarWidget built-in widget. */
|
|
1359
1381
|
interface CalendarWidgetNode extends PortalWidgetNodeBase {
|
|
1382
|
+
/** Registered built-in widget type. */
|
|
1360
1383
|
readonly type: "CalendarWidget";
|
|
1384
|
+
/** Properties accepted by this widget. */
|
|
1361
1385
|
readonly props: {
|
|
1362
|
-
titleEnabled?: boolean;
|
|
1363
|
-
titleText?: string;
|
|
1364
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1365
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1386
|
+
/** Enable the title displayed above the calendar */titleEnabled?: boolean; /** Title text displayed above the calendar */
|
|
1387
|
+
titleText?: string; /** Font size for the widget title */
|
|
1388
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1389
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the calendar container */
|
|
1366
1390
|
background?: string | {
|
|
1367
1391
|
type: "solid" | "image";
|
|
1368
1392
|
color?: ColorOption;
|
|
1369
1393
|
resource?: string | null | JsonObject;
|
|
1370
|
-
};
|
|
1371
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1372
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1373
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1374
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1375
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1376
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1377
|
-
showYearEyebrow?: boolean;
|
|
1378
|
-
showTodayButton?: boolean;
|
|
1379
|
-
showEventDensity?: boolean;
|
|
1394
|
+
}; /** Default text color for calendar content */
|
|
1395
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Drives today highlight, event dots, Today pill, and selected day */
|
|
1396
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Padding around the calendar container */
|
|
1397
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the calendar container */
|
|
1398
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the calendar container */
|
|
1399
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the calendar container */
|
|
1400
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Small uppercase year label above the month (e.g. '2026 / November'). */
|
|
1401
|
+
showYearEyebrow?: boolean; /** Show a 'Today' pill when viewing a different month. */
|
|
1402
|
+
showTodayButton?: boolean; /** Show 1–3 dots per day based on event count (off = single dot). */
|
|
1403
|
+
showEventDensity?: boolean; /** Subtly dim the Sun/Sat day-of-week headers for visual rhythm. */
|
|
1380
1404
|
weekendDim?: boolean;
|
|
1381
1405
|
};
|
|
1382
1406
|
}
|
|
1407
|
+
/** Portal node for the CardWidget built-in widget. */
|
|
1383
1408
|
interface CardWidgetNode extends PortalWidgetNodeBase {
|
|
1409
|
+
/** Registered built-in widget type. */
|
|
1384
1410
|
readonly type: "CardWidget";
|
|
1411
|
+
/** Properties accepted by this widget. */
|
|
1385
1412
|
readonly props: {
|
|
1386
|
-
headerEnabled?: boolean;
|
|
1387
|
-
title?: string;
|
|
1388
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1389
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1390
|
-
headerBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1391
|
-
footerEnabled?: boolean;
|
|
1392
|
-
footerContent?: string;
|
|
1393
|
-
footerColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1394
|
-
footerBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1413
|
+
/** Toggle header visibility */headerEnabled?: boolean; /** Card title text */
|
|
1414
|
+
title?: string; /** Font size for the title */
|
|
1415
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the title */
|
|
1416
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background color for the header */
|
|
1417
|
+
headerBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Toggle footer visibility */
|
|
1418
|
+
footerEnabled?: boolean; /** Footer content text */
|
|
1419
|
+
footerContent?: string; /** Color for the footer text */
|
|
1420
|
+
footerColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background color for the footer */
|
|
1421
|
+
footerBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the card */
|
|
1395
1422
|
background?: string | {
|
|
1396
1423
|
type: "solid" | "image";
|
|
1397
1424
|
color?: ColorOption;
|
|
1398
1425
|
resource?: string | null | JsonObject;
|
|
1399
|
-
};
|
|
1400
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1401
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1402
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1403
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1404
|
-
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1426
|
+
}; /** Card padding */
|
|
1427
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Card border radius */
|
|
1428
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Card border width */
|
|
1429
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Card border color */
|
|
1430
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Gap between child widgets */
|
|
1431
|
+
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl"; /** Child widget nodes rendered inside this container. */
|
|
1405
1432
|
children?: Array<PortalWidgetNode | null>;
|
|
1406
1433
|
};
|
|
1407
1434
|
}
|
|
1435
|
+
/** Portal node for the CarouselWidget built-in widget. */
|
|
1408
1436
|
interface CarouselWidgetNode extends PortalWidgetNodeBase {
|
|
1437
|
+
/** Registered built-in widget type. */
|
|
1409
1438
|
readonly type: "CarouselWidget";
|
|
1439
|
+
/** Properties accepted by this widget. */
|
|
1410
1440
|
readonly props: {
|
|
1411
|
-
editorialFrame?: boolean;
|
|
1412
|
-
frameColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1413
|
-
headerSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1414
|
-
headerColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1415
|
-
textSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1416
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1441
|
+
/** Premium dark canvas with layered shadow and gradient stack. Turn off for a classic transparent carousel. */editorialFrame?: boolean; /** Surface color of the carousel canvas. Drives the frame and gradient overlay. */
|
|
1442
|
+
frameColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Font size for the slide header */
|
|
1443
|
+
headerSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Headline color. Also drives eyebrow, controls and progress bar. */
|
|
1444
|
+
headerColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Font size for the slide text */
|
|
1445
|
+
textSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color variant for the slide text */
|
|
1446
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Alignment of the carousel content */
|
|
1417
1447
|
align?: {
|
|
1418
1448
|
vertical?: "top" | "center" | "bottom";
|
|
1419
1449
|
horizontal?: "left" | "center" | "right";
|
|
1420
|
-
};
|
|
1421
|
-
textWidth?: string;
|
|
1422
|
-
carouselHeight?: string;
|
|
1423
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1424
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1425
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1426
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1427
|
-
overlayEnabled?: boolean;
|
|
1428
|
-
overlayType?: "solid" | "gradient";
|
|
1429
|
-
overlayIntensity?: number;
|
|
1430
|
-
showButton?: boolean;
|
|
1431
|
-
buttonColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1432
|
-
buttonSize?: "sm" | "default" | "lg" | "xl";
|
|
1433
|
-
enableAutoScroll?: boolean;
|
|
1434
|
-
autoScrollInterval?: number;
|
|
1450
|
+
}; /** Maximum width for slide content */
|
|
1451
|
+
textWidth?: string; /** Height of the carousel */
|
|
1452
|
+
carouselHeight?: string; /** Rounded corners for the carousel */
|
|
1453
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the carousel container */
|
|
1454
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the carousel container */
|
|
1455
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Inner padding around slide content */
|
|
1456
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Add background overlay to slide content */
|
|
1457
|
+
overlayEnabled?: boolean; /** Overlay style (only applies when editorial frame is off) */
|
|
1458
|
+
overlayType?: "solid" | "gradient"; /** Opacity of the overlay (0-100) */
|
|
1459
|
+
overlayIntensity?: number; /** Global show/hide for all slide CTAs. Per-slide button content is set on each item under the Data tab (custom sources only). */
|
|
1460
|
+
showButton?: boolean; /** Color variant for the slide button */
|
|
1461
|
+
buttonColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of the slide button */
|
|
1462
|
+
buttonSize?: "sm" | "default" | "lg" | "xl"; /** Automatically advance to the next slide. Progress bar fills at this rate and pauses on hover. */
|
|
1463
|
+
enableAutoScroll?: boolean; /** Time between automatic slide transitions */
|
|
1464
|
+
autoScrollInterval?: number; /** Slides rendered by the carousel, usually supplied by a data source. */
|
|
1435
1465
|
slides?: JsonValue;
|
|
1436
1466
|
};
|
|
1437
1467
|
}
|
|
1468
|
+
/** Portal node for the CatchUpWidget built-in widget. */
|
|
1438
1469
|
interface CatchUpWidgetNode extends PortalWidgetNodeBase {
|
|
1470
|
+
/** Registered built-in widget type. */
|
|
1439
1471
|
readonly type: "CatchUpWidget";
|
|
1472
|
+
/** Properties accepted by this widget. */
|
|
1440
1473
|
readonly props: {
|
|
1441
|
-
titleEnabled?: boolean;
|
|
1442
|
-
titleText?: string;
|
|
1443
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1444
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1474
|
+
/** Enable the title displayed above the catch ups */titleEnabled?: boolean; /** Title text displayed above the catch ups */
|
|
1475
|
+
titleText?: string; /** Font size for the widget title */
|
|
1476
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1477
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the container */
|
|
1445
1478
|
background?: string | {
|
|
1446
1479
|
type: "solid" | "image";
|
|
1447
1480
|
color?: ColorOption;
|
|
1448
1481
|
resource?: string | null | JsonObject;
|
|
1449
|
-
};
|
|
1450
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1451
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1452
|
-
maxItems?: number;
|
|
1453
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1454
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1455
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1482
|
+
}; /** Default text color for catch up items */
|
|
1483
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Color used for count display and icons */
|
|
1484
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Maximum number of catch ups to display */
|
|
1485
|
+
maxItems?: number; /** Padding around the container */
|
|
1486
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the container */
|
|
1487
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1488
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1456
1489
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1457
1490
|
};
|
|
1458
1491
|
}
|
|
1492
|
+
/** Portal node for the ChartWidget built-in widget. */
|
|
1459
1493
|
interface ChartWidgetNode extends PortalWidgetNodeBase {
|
|
1494
|
+
/** Registered built-in widget type. */
|
|
1460
1495
|
readonly type: "ChartWidget";
|
|
1496
|
+
/** Properties accepted by this widget. */
|
|
1461
1497
|
readonly props: {
|
|
1462
|
-
titleEnabled?: boolean;
|
|
1463
|
-
title?: string;
|
|
1464
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1465
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1466
|
-
description?: string;
|
|
1467
|
-
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1468
|
-
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1469
|
-
chartType?: "bar" | "line" | "area" | "pie";
|
|
1470
|
-
showLegend?: boolean;
|
|
1471
|
-
showTooltip?: boolean;
|
|
1472
|
-
showGrid?: boolean;
|
|
1473
|
-
width?: string;
|
|
1474
|
-
height?: string;
|
|
1498
|
+
/** Enable the title displayed above the chart */titleEnabled?: boolean; /** The chart title */
|
|
1499
|
+
title?: string; /** Font size for the chart title */
|
|
1500
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the chart title */
|
|
1501
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** The chart description */
|
|
1502
|
+
description?: string; /** Font size for the chart description */
|
|
1503
|
+
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the chart description */
|
|
1504
|
+
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Type of chart to display */
|
|
1505
|
+
chartType?: "bar" | "line" | "area" | "pie"; /** Display chart legend */
|
|
1506
|
+
showLegend?: boolean; /** Display tooltip on hover */
|
|
1507
|
+
showTooltip?: boolean; /** Display background grid lines */
|
|
1508
|
+
showGrid?: boolean; /** Width of the chart container (CSS value, e.g., 100%, 600px) */
|
|
1509
|
+
width?: string; /** Height of the chart */
|
|
1510
|
+
height?: string; /** Background for the chart container */
|
|
1475
1511
|
background?: string | {
|
|
1476
1512
|
type: "solid" | "image";
|
|
1477
1513
|
color?: ColorOption;
|
|
1478
1514
|
resource?: string | null | JsonObject;
|
|
1479
|
-
};
|
|
1480
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1481
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1482
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1483
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1484
|
-
dataKey?: "value";
|
|
1485
|
-
xAxisKey?: "name";
|
|
1486
|
-
data?: JsonValue;
|
|
1515
|
+
}; /** Padding for the chart container */
|
|
1516
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the chart container */
|
|
1517
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1518
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1519
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Key in the data to use for chart values */
|
|
1520
|
+
dataKey?: "value"; /** Key in the data to use for X-axis labels */
|
|
1521
|
+
xAxisKey?: "name"; /** Records plotted by the chart, usually supplied by a data source. */
|
|
1522
|
+
data?: JsonValue; /** Series labels, colors, and value mappings for the chart data. */
|
|
1487
1523
|
chartConfig?: JsonValue;
|
|
1488
1524
|
};
|
|
1489
1525
|
}
|
|
1526
|
+
/** Portal node for the ContainerWidget built-in widget. */
|
|
1490
1527
|
interface ContainerWidgetNode extends PortalWidgetNodeBase {
|
|
1528
|
+
/** Registered built-in widget type. */
|
|
1491
1529
|
readonly type: "ContainerWidget";
|
|
1530
|
+
/** Properties accepted by this widget. */
|
|
1492
1531
|
readonly props: {
|
|
1493
|
-
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1494
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1532
|
+
/** Gap between widgets */gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl"; /** Padding for the container */
|
|
1533
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Background for the container */
|
|
1495
1534
|
background?: string | {
|
|
1496
1535
|
type: "solid" | "image";
|
|
1497
1536
|
color?: ColorOption;
|
|
1498
1537
|
resource?: string | null | JsonObject;
|
|
1499
|
-
};
|
|
1538
|
+
}; /** Child widget nodes rendered inside this container. */
|
|
1500
1539
|
children?: Array<PortalWidgetNode | null>;
|
|
1501
1540
|
};
|
|
1502
1541
|
}
|
|
1542
|
+
/** Portal node for the EmbedWidget built-in widget. */
|
|
1503
1543
|
interface EmbedWidgetNode extends PortalWidgetNodeBase {
|
|
1544
|
+
/** Registered built-in widget type. */
|
|
1504
1545
|
readonly type: "EmbedWidget";
|
|
1546
|
+
/** Properties accepted by this widget. */
|
|
1505
1547
|
readonly props: {
|
|
1506
|
-
url?: string;
|
|
1507
|
-
title?: string;
|
|
1508
|
-
displayMode?: "inline" | "cover";
|
|
1509
|
-
coverResource?: string | null | JsonObject;
|
|
1510
|
-
coverUseCustomUrl?: boolean;
|
|
1511
|
-
coverImageUrl?: string;
|
|
1512
|
-
coverHeight?: string;
|
|
1513
|
-
coverShowHeader?: boolean;
|
|
1514
|
-
coverHeaderIcon?: "GraduationCap" | "Video" | "BookOpen" | "Globe" | "User" | "Star" | "Heart" | "Trophy" | "Sparkles" | "Zap" | "Gift" | "ShoppingBag" | "Bell" | "Calendar" | "Bookmark";
|
|
1515
|
-
coverHeaderIconColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1516
|
-
coverTitle?: string;
|
|
1517
|
-
coverMeta?: string;
|
|
1518
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1519
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1520
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1521
|
-
fullScreen?: boolean;
|
|
1522
|
-
height?: string;
|
|
1523
|
-
allowFullscreen?: boolean;
|
|
1548
|
+
/** The URL of the external site to embed */url?: string; /** Describes the embed for screen readers and assistive tech. Not visible on the page. */
|
|
1549
|
+
title?: string; /** Inline: iframe renders directly. Cover: shows a card that opens the embed in a full-screen modal. */
|
|
1550
|
+
displayMode?: "inline" | "cover"; /** Select the image shown before the embed opens */
|
|
1551
|
+
coverResource?: string | null | JsonObject; /** Enter a custom image URL instead of selecting media */
|
|
1552
|
+
coverUseCustomUrl?: boolean; /** Direct URL to the cover image */
|
|
1553
|
+
coverImageUrl?: string; /** Height of the cover image area */
|
|
1554
|
+
coverHeight?: string; /** Show the header with icon, title, and action buttons */
|
|
1555
|
+
coverShowHeader?: boolean; /** Icon displayed in the colored badge on the left */
|
|
1556
|
+
coverHeaderIcon?: "GraduationCap" | "Video" | "BookOpen" | "Globe" | "User" | "Star" | "Heart" | "Trophy" | "Sparkles" | "Zap" | "Gift" | "ShoppingBag" | "Bell" | "Calendar" | "Bookmark"; /** Background color of the icon badge */
|
|
1557
|
+
coverHeaderIconColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Title shown in the card header and modal (falls back to the widget Title if empty). Available even when the card header is hidden so the modal still has a meaningful title. */
|
|
1558
|
+
coverTitle?: string; /** Small uppercase meta line below the title (e.g. 'APR 16 · COACHING THE HOSTESS') */
|
|
1559
|
+
coverMeta?: string; /** Border radius for the embed container */
|
|
1560
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1561
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1562
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Inline mode: fill the available space instead of a fixed height */
|
|
1563
|
+
fullScreen?: boolean; /** Height of the inline embed iframe */
|
|
1564
|
+
height?: string; /** Allow embedded video/content to use fullscreen mode and show the inline expand control when available */
|
|
1565
|
+
allowFullscreen?: boolean; /** When to load the embedded content (inline mode only) */
|
|
1524
1566
|
loading?: "lazy" | "eager";
|
|
1525
1567
|
};
|
|
1526
1568
|
}
|
|
1569
|
+
/** Portal node for the ImageWidget built-in widget. */
|
|
1527
1570
|
interface ImageWidgetNode extends PortalWidgetNodeBase {
|
|
1571
|
+
/** Registered built-in widget type. */
|
|
1528
1572
|
readonly type: "ImageWidget";
|
|
1573
|
+
/** Properties accepted by this widget. */
|
|
1529
1574
|
readonly props: {
|
|
1530
|
-
resource?: string | null | JsonObject;
|
|
1531
|
-
useCustomUrl?: boolean;
|
|
1532
|
-
src?: string;
|
|
1533
|
-
alt?: string;
|
|
1534
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1535
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1536
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1537
|
-
verticalSizing?: "auto" | "fixed";
|
|
1538
|
-
fixedHeight?: string;
|
|
1539
|
-
displayFit?: "cover" | "contain";
|
|
1540
|
-
focusPoint?: string;
|
|
1541
|
-
linkType?: "url" | "screen" | "share";
|
|
1542
|
-
href?: string;
|
|
1543
|
-
openInNewTab?: boolean;
|
|
1544
|
-
screenSlug?: string;
|
|
1545
|
-
shareSource?: "resource" | "url";
|
|
1546
|
-
shareResource?: string | null | JsonObject;
|
|
1575
|
+
/** Browse and select an image */resource?: string | null | JsonObject; /** Enter a custom image URL instead of selecting media */
|
|
1576
|
+
useCustomUrl?: boolean; /** The source URL of the image */
|
|
1577
|
+
src?: string; /** Alternative text for the image (for accessibility) */
|
|
1578
|
+
alt?: string; /** Border radius for the container */
|
|
1579
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1580
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1581
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** How the image height is determined */
|
|
1582
|
+
verticalSizing?: "auto" | "fixed"; /** Fixed height of the image container */
|
|
1583
|
+
fixedHeight?: string; /** How the image fills its container */
|
|
1584
|
+
displayFit?: "cover" | "contain"; /** The focal point of the image within its container */
|
|
1585
|
+
focusPoint?: string; /** Choose whether this link opens a URL, screen, or share action */
|
|
1586
|
+
linkType?: "url" | "screen" | "share"; /** The destination URL */
|
|
1587
|
+
href?: string; /** Whether to open the link in a new tab */
|
|
1588
|
+
openInNewTab?: boolean; /** Select a screen to navigate to */
|
|
1589
|
+
screenSlug?: string; /** Choose whether the share action uses a resource or URL */
|
|
1590
|
+
shareSource?: "resource" | "url"; /** Select content to share */
|
|
1591
|
+
shareResource?: string | null | JsonObject; /** The URL to share */
|
|
1547
1592
|
shareUrl?: string;
|
|
1548
1593
|
};
|
|
1549
1594
|
}
|
|
1595
|
+
/** Portal node for the LayoutWidget built-in widget. */
|
|
1550
1596
|
interface LayoutWidgetNode extends PortalWidgetNodeBase {
|
|
1597
|
+
/** Registered built-in widget type. */
|
|
1551
1598
|
readonly type: "LayoutWidget";
|
|
1599
|
+
/** Properties accepted by this widget. */
|
|
1552
1600
|
readonly props: {
|
|
1553
|
-
sectionLayout?: "single-column" | "2c-equal" | "2c-left-wider" | "2c-right-wider" | "2c-left-narrow" | "2c-right-narrow" | "3c-equal" | "3c-middle-wider";
|
|
1554
|
-
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1601
|
+
/** Column layout configuration */sectionLayout?: "single-column" | "2c-equal" | "2c-left-wider" | "2c-right-wider" | "2c-left-narrow" | "2c-right-narrow" | "3c-equal" | "3c-middle-wider"; /** Gap between columns and widgets */
|
|
1602
|
+
gapSize?: "none" | "xs" | "sm" | "md" | "lg" | "xl"; /** Background for the layout container */
|
|
1555
1603
|
background?: string | {
|
|
1556
1604
|
type: "solid" | "image";
|
|
1557
1605
|
color?: ColorOption;
|
|
1558
1606
|
resource?: string | null | JsonObject;
|
|
1559
|
-
};
|
|
1560
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1561
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1562
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1563
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1607
|
+
}; /** Padding for the layout container */
|
|
1608
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the layout container */
|
|
1609
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1610
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1611
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Child widget nodes rendered inside this container. */
|
|
1564
1612
|
children?: Array<PortalWidgetNode | null>;
|
|
1565
1613
|
};
|
|
1566
1614
|
}
|
|
1615
|
+
/** Portal node for the LinkWidget built-in widget. */
|
|
1567
1616
|
interface LinkWidgetNode extends PortalWidgetNodeBase {
|
|
1617
|
+
/** Registered built-in widget type. */
|
|
1568
1618
|
readonly type: "LinkWidget";
|
|
1619
|
+
/** Properties accepted by this widget. */
|
|
1569
1620
|
readonly props: {
|
|
1570
|
-
linkType?: "url" | "screen" | "share";
|
|
1571
|
-
text?: string;
|
|
1572
|
-
href?: string;
|
|
1573
|
-
openInNewTab?: boolean;
|
|
1574
|
-
screenSlug?: string;
|
|
1575
|
-
shareSource?: "resource" | "url";
|
|
1576
|
-
shareResource?: string | null | JsonObject;
|
|
1577
|
-
shareUrl?: string;
|
|
1578
|
-
variant?: "default" | "outline" | "secondary" | "ghost" | "destructive";
|
|
1579
|
-
size?: "sm" | "default" | "lg" | "xl";
|
|
1580
|
-
fontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1581
|
-
underline?: boolean;
|
|
1582
|
-
alignment?: "left" | "center" | "right";
|
|
1583
|
-
fullWidth?: boolean;
|
|
1584
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1585
|
-
borderRadiusTL?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1586
|
-
borderRadiusTR?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1587
|
-
borderRadiusBL?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1588
|
-
borderRadiusBR?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1589
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1621
|
+
/** Choose whether this button opens a URL, screen, or share action */linkType?: "url" | "screen" | "share"; /** The button label text */
|
|
1622
|
+
text?: string; /** The destination URL */
|
|
1623
|
+
href?: string; /** Whether to open the link in a new tab */
|
|
1624
|
+
openInNewTab?: boolean; /** Select a screen to navigate to */
|
|
1625
|
+
screenSlug?: string; /** Choose whether the share action uses a resource or URL */
|
|
1626
|
+
shareSource?: "resource" | "url"; /** Select content to share */
|
|
1627
|
+
shareResource?: string | null | JsonObject; /** The URL to share */
|
|
1628
|
+
shareUrl?: string; /** The visual style of the button */
|
|
1629
|
+
variant?: "default" | "outline" | "secondary" | "ghost" | "destructive"; /** The size of the button */
|
|
1630
|
+
size?: "sm" | "default" | "lg" | "xl"; /** The font size of the button text */
|
|
1631
|
+
fontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Underline the button text */
|
|
1632
|
+
underline?: boolean; /** Horizontal alignment of the button */
|
|
1633
|
+
alignment?: "left" | "center" | "right"; /** Makes the button stretch to full container width */
|
|
1634
|
+
fullWidth?: boolean; /** Outer container padding */
|
|
1635
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Corner radius of the link button (borderRadiusTL corner). */
|
|
1636
|
+
borderRadiusTL?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Corner radius of the link button (borderRadiusTR corner). */
|
|
1637
|
+
borderRadiusTR?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Corner radius of the link button (borderRadiusBL corner). */
|
|
1638
|
+
borderRadiusBL?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Corner radius of the link button (borderRadiusBR corner). */
|
|
1639
|
+
borderRadiusBR?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1640
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1590
1641
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1591
1642
|
};
|
|
1592
1643
|
}
|
|
1644
|
+
/** Portal node for the ListWidget built-in widget. */
|
|
1593
1645
|
interface ListWidgetNode extends PortalWidgetNodeBase {
|
|
1646
|
+
/** Registered built-in widget type. */
|
|
1594
1647
|
readonly type: "ListWidget";
|
|
1648
|
+
/** Properties accepted by this widget. */
|
|
1595
1649
|
readonly props: {
|
|
1596
|
-
titleEnabled?: boolean;
|
|
1597
|
-
title?: string;
|
|
1598
|
-
titleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1599
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1600
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1601
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1602
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1603
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1604
|
-
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1650
|
+
/** Enable the title displayed above the list */titleEnabled?: boolean; /** Header text for the list */
|
|
1651
|
+
title?: string; /** Size of the list title */
|
|
1652
|
+
titleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the list title */
|
|
1653
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Padding inside the container */
|
|
1654
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Rounded corners for the container and images */
|
|
1655
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1656
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1657
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Spacing between items */
|
|
1658
|
+
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl"; /** Background color or image for the widget */
|
|
1605
1659
|
background?: string | {
|
|
1606
1660
|
type: "solid" | "image";
|
|
1607
1661
|
color?: ColorOption;
|
|
1608
1662
|
resource?: string | null | JsonObject;
|
|
1609
|
-
};
|
|
1610
|
-
listType?: "unordered" | "ordered";
|
|
1611
|
-
maxItems?: number;
|
|
1612
|
-
imageAspectRatio?: "square" | "landscape" | "portrait";
|
|
1613
|
-
showBadge?: boolean;
|
|
1614
|
-
showMetaText?: boolean;
|
|
1615
|
-
columns?: number;
|
|
1616
|
-
scrollAxis?: "horizontal" | "vertical";
|
|
1617
|
-
numberColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1618
|
-
numberSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1619
|
-
itemTitleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1620
|
-
itemTitleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1621
|
-
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1622
|
-
descriptionSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1623
|
-
priceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1624
|
-
priceSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1625
|
-
originalPriceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1626
|
-
metaTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1627
|
-
metaTextSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1628
|
-
showFeaturedSection?: boolean;
|
|
1629
|
-
featuredAsset?: string | null | JsonObject;
|
|
1630
|
-
featuredTitle?: string;
|
|
1631
|
-
featuredSubtitle?: string;
|
|
1632
|
-
featuredButtonText?: string;
|
|
1633
|
-
featuredButtonUrl?: string;
|
|
1634
|
-
featuredSubtitleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1635
|
-
featuredSubtitleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1663
|
+
}; /** Type of list layout */
|
|
1664
|
+
listType?: "unordered" | "ordered"; /** Maximum number of items to display */
|
|
1665
|
+
maxItems?: number; /** Aspect ratio for item images (unordered list — ordered layouts use a fixed ratio per axis) */
|
|
1666
|
+
imageAspectRatio?: "square" | "landscape" | "portrait"; /** Display discount badge on images */
|
|
1667
|
+
showBadge?: boolean; /** Display QV and CV values */
|
|
1668
|
+
showMetaText?: boolean; /** Number of columns in the grid (unordered list only) */
|
|
1669
|
+
columns?: number; /** Direction for ordered list scrolling */
|
|
1670
|
+
scrollAxis?: "horizontal" | "vertical"; /** Color for ordered list numbers */
|
|
1671
|
+
numberColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of ordered list numbers (vertical scroll only — horizontal uses a fixed editorial size) */
|
|
1672
|
+
numberSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for item titles */
|
|
1673
|
+
itemTitleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of item titles */
|
|
1674
|
+
itemTitleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for descriptions */
|
|
1675
|
+
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of descriptions */
|
|
1676
|
+
descriptionSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for prices */
|
|
1677
|
+
priceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of prices */
|
|
1678
|
+
priceSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for crossed-out original prices */
|
|
1679
|
+
originalPriceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Color for QV/CV text */
|
|
1680
|
+
metaTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of QV/CV text */
|
|
1681
|
+
metaTextSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Display a featured content section */
|
|
1682
|
+
showFeaturedSection?: boolean; /** Select a single image or video resource for the featured section */
|
|
1683
|
+
featuredAsset?: string | null | JsonObject; /** Title for featured section */
|
|
1684
|
+
featuredTitle?: string; /** Subtitle for featured section */
|
|
1685
|
+
featuredSubtitle?: string; /** Text for featured section button */
|
|
1686
|
+
featuredButtonText?: string; /** URL for featured section button */
|
|
1687
|
+
featuredButtonUrl?: string; /** Color for featured subtitle */
|
|
1688
|
+
featuredSubtitleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Size of featured subtitle */
|
|
1689
|
+
featuredSubtitleSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Items rendered by the list, usually supplied by a data source. */
|
|
1636
1690
|
items?: JsonValue;
|
|
1637
1691
|
};
|
|
1638
1692
|
}
|
|
1693
|
+
/** Portal node for the MySiteWidget built-in widget. */
|
|
1639
1694
|
interface MySiteWidgetNode extends PortalWidgetNodeBase {
|
|
1695
|
+
/** Registered built-in widget type. */
|
|
1640
1696
|
readonly type: "MySiteWidget";
|
|
1697
|
+
/** Properties accepted by this widget. */
|
|
1641
1698
|
readonly props: {
|
|
1642
|
-
showPreview?: boolean;
|
|
1643
|
-
showAnalytics?: boolean;
|
|
1644
|
-
showLiveBadge?: boolean;
|
|
1645
|
-
showQR?: boolean;
|
|
1699
|
+
/** Show the live iframe preview of the storefront */showPreview?: boolean; /** Visitors and Leads grid in the footer */
|
|
1700
|
+
showAnalytics?: boolean; /** Small 'Live' chip in the preview corner */
|
|
1701
|
+
showLiveBadge?: boolean; /** Show a scannable QR code in the card footer */
|
|
1702
|
+
showQR?: boolean; /** Background for the widget container */
|
|
1646
1703
|
background?: string | {
|
|
1647
1704
|
type: "solid" | "image";
|
|
1648
1705
|
color?: ColorOption;
|
|
1649
1706
|
resource?: string | null | JsonObject;
|
|
1650
|
-
};
|
|
1651
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1652
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1707
|
+
}; /** Primary text, hairline, and neutral chip color */
|
|
1708
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Drives the Live dot, conversion ring, and Visit CTA */
|
|
1709
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Corner radius for the widget and inner chips */
|
|
1653
1710
|
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1654
1711
|
};
|
|
1655
1712
|
}
|
|
1713
|
+
/** Portal node for the NestedWidget built-in widget. */
|
|
1656
1714
|
interface NestedWidgetNode extends PortalWidgetNodeBase {
|
|
1715
|
+
/** Registered built-in widget type. */
|
|
1657
1716
|
readonly type: "NestedWidget";
|
|
1717
|
+
/** Properties accepted by this widget. */
|
|
1658
1718
|
readonly props: {
|
|
1659
|
-
resource?: string | null | JsonObject;
|
|
1660
|
-
titleEnabled?: boolean;
|
|
1661
|
-
titleText?: string;
|
|
1662
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1663
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1664
|
-
primaryMediaHeight?: string;
|
|
1719
|
+
/** Select the primary media displayed in the large panel */resource?: string | null | JsonObject; /** Enable the title displayed over the primary media */
|
|
1720
|
+
titleEnabled?: boolean; /** Main title displayed over the primary media */
|
|
1721
|
+
titleText?: string; /** Font size for the widget title */
|
|
1722
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1723
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Height of the primary media container */
|
|
1724
|
+
primaryMediaHeight?: string; /** Alignment of the content inside the primary media */
|
|
1665
1725
|
titleAlignment?: {
|
|
1666
1726
|
vertical?: "top" | "center" | "bottom";
|
|
1667
1727
|
horizontal?: "left" | "center" | "right";
|
|
1668
|
-
};
|
|
1669
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1670
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1671
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1672
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1673
|
-
overlayEnabled?: boolean;
|
|
1674
|
-
overlayType?: "solid" | "gradient";
|
|
1675
|
-
overlayIntensity?: number;
|
|
1676
|
-
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl";
|
|
1677
|
-
nestedTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1728
|
+
}; /** Padding used throughout the widget */
|
|
1729
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Rounded corners for the widget */
|
|
1730
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1731
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1732
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Add a dark overlay to the primary media for better text readability */
|
|
1733
|
+
overlayEnabled?: boolean; /** Type of overlay effect */
|
|
1734
|
+
overlayType?: "solid" | "gradient"; /** Opacity of the overlay (0-100) */
|
|
1735
|
+
overlayIntensity?: number; /** Gap between nested media items */
|
|
1736
|
+
gap?: "none" | "xs" | "sm" | "md" | "lg" | "xl"; /** Color for nested media labels */
|
|
1737
|
+
nestedTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background color for nested media container */
|
|
1678
1738
|
background?: string | {
|
|
1679
1739
|
type: "solid" | "image";
|
|
1680
1740
|
color?: ColorOption;
|
|
1681
1741
|
resource?: string | null | JsonObject;
|
|
1682
|
-
};
|
|
1742
|
+
}; /** Shareable records rendered in the nested content region. */
|
|
1683
1743
|
shareables?: JsonValue;
|
|
1684
1744
|
};
|
|
1685
1745
|
}
|
|
1746
|
+
/** Portal node for the PointsWidget built-in widget. */
|
|
1686
1747
|
interface PointsWidgetNode extends PortalWidgetNodeBase {
|
|
1748
|
+
/** Registered built-in widget type. */
|
|
1687
1749
|
readonly type: "PointsWidget";
|
|
1750
|
+
/** Properties accepted by this widget. */
|
|
1688
1751
|
readonly props: {
|
|
1689
|
-
titleEnabled?: boolean;
|
|
1690
|
-
title?: string;
|
|
1691
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1692
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1693
|
-
balanceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1694
|
-
historyEnabled?: boolean;
|
|
1695
|
-
historyTitle?: string;
|
|
1752
|
+
/** Toggle title visibility */titleEnabled?: boolean; /** Title text displayed above the balance. Leave blank to use the company's configured points label. */
|
|
1753
|
+
title?: string; /** Font size for the title */
|
|
1754
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the title */
|
|
1755
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Color for the points balance number */
|
|
1756
|
+
balanceColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Show a collapsible history dropdown below the balance */
|
|
1757
|
+
historyEnabled?: boolean; /** Title for the history dropdown */
|
|
1758
|
+
historyTitle?: string; /** Background for the widget */
|
|
1696
1759
|
background?: string | {
|
|
1697
1760
|
type: "solid" | "image";
|
|
1698
1761
|
color?: ColorOption;
|
|
1699
1762
|
resource?: string | null | JsonObject;
|
|
1700
|
-
};
|
|
1701
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1702
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1703
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1704
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1705
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1763
|
+
}; /** Default text color */
|
|
1764
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Color for positive points amounts */
|
|
1765
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Widget padding */
|
|
1766
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Widget border radius */
|
|
1767
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Widget border width */
|
|
1768
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Widget border color */
|
|
1706
1769
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1707
1770
|
};
|
|
1708
1771
|
}
|
|
1772
|
+
/** Portal node for the QuickLinksWidget built-in widget. */
|
|
1709
1773
|
interface QuickLinksWidgetNode extends PortalWidgetNodeBase {
|
|
1774
|
+
/** Registered built-in widget type. */
|
|
1710
1775
|
readonly type: "QuickLinksWidget";
|
|
1776
|
+
/** Properties accepted by this widget. */
|
|
1711
1777
|
readonly props: {
|
|
1712
|
-
titleEnabled?: boolean;
|
|
1713
|
-
title?: string;
|
|
1714
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1715
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1716
|
-
link1Label?: string;
|
|
1717
|
-
link1Url?: string;
|
|
1718
|
-
link1Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1719
|
-
link1Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1720
|
-
link2Enabled?: boolean;
|
|
1721
|
-
link2Label?: string;
|
|
1722
|
-
link2Url?: string;
|
|
1723
|
-
link2Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1724
|
-
link2Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1725
|
-
link3Enabled?: boolean;
|
|
1726
|
-
link3Label?: string;
|
|
1727
|
-
link3Url?: string;
|
|
1728
|
-
link3Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1729
|
-
link3Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1730
|
-
link4Enabled?: boolean;
|
|
1731
|
-
link4Label?: string;
|
|
1732
|
-
link4Url?: string;
|
|
1733
|
-
link4Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1734
|
-
link4Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1735
|
-
link5Enabled?: boolean;
|
|
1736
|
-
link5Label?: string;
|
|
1737
|
-
link5Url?: string;
|
|
1738
|
-
link5Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1739
|
-
link5Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1740
|
-
link6Enabled?: boolean;
|
|
1741
|
-
link6Label?: string;
|
|
1742
|
-
link6Url?: string;
|
|
1743
|
-
link6Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1744
|
-
link6Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1745
|
-
link7Enabled?: boolean;
|
|
1746
|
-
link7Label?: string;
|
|
1747
|
-
link7Url?: string;
|
|
1748
|
-
link7Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1749
|
-
link7Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1750
|
-
link8Enabled?: boolean;
|
|
1751
|
-
link8Label?: string;
|
|
1752
|
-
link8Url?: string;
|
|
1753
|
-
link8Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles";
|
|
1754
|
-
link8Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1755
|
-
layout?: "cards" | "list";
|
|
1756
|
-
iconRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1757
|
-
showChevron?: boolean;
|
|
1758
|
-
openInNewTab?: boolean;
|
|
1778
|
+
/** Small heading shown above the link list */titleEnabled?: boolean; /** Heading shown above the links */
|
|
1779
|
+
title?: string; /** Font size for the widget title */
|
|
1780
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1781
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text shown on the link */
|
|
1782
|
+
link1Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1783
|
+
link1Url?: string; /** Icon displayed in the colored badge */
|
|
1784
|
+
link1Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1785
|
+
link1Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 2 */
|
|
1786
|
+
link2Enabled?: boolean; /** Text shown on the link */
|
|
1787
|
+
link2Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1788
|
+
link2Url?: string; /** Icon displayed in the colored badge */
|
|
1789
|
+
link2Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1790
|
+
link2Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 3 */
|
|
1791
|
+
link3Enabled?: boolean; /** Text shown on the link */
|
|
1792
|
+
link3Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1793
|
+
link3Url?: string; /** Icon displayed in the colored badge */
|
|
1794
|
+
link3Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1795
|
+
link3Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 4 */
|
|
1796
|
+
link4Enabled?: boolean; /** Text shown on the link */
|
|
1797
|
+
link4Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1798
|
+
link4Url?: string; /** Icon displayed in the colored badge */
|
|
1799
|
+
link4Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1800
|
+
link4Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 5 */
|
|
1801
|
+
link5Enabled?: boolean; /** Text shown on the link */
|
|
1802
|
+
link5Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1803
|
+
link5Url?: string; /** Icon displayed in the colored badge */
|
|
1804
|
+
link5Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1805
|
+
link5Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 6 */
|
|
1806
|
+
link6Enabled?: boolean; /** Text shown on the link */
|
|
1807
|
+
link6Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1808
|
+
link6Url?: string; /** Icon displayed in the colored badge */
|
|
1809
|
+
link6Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1810
|
+
link6Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 7 */
|
|
1811
|
+
link7Enabled?: boolean; /** Text shown on the link */
|
|
1812
|
+
link7Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1813
|
+
link7Url?: string; /** Icon displayed in the colored badge */
|
|
1814
|
+
link7Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1815
|
+
link7Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display link slot 8 */
|
|
1816
|
+
link8Enabled?: boolean; /** Text shown on the link */
|
|
1817
|
+
link8Label?: string; /** Where the link points (use '#' for a placeholder). Click a chip below to insert a user variable (e.g. `{{username}}`, `{{replicated_url}}`, `{{external_id}}`); append `|| /fallback` to set a fallback path. */
|
|
1818
|
+
link8Url?: string; /** Icon displayed in the colored badge */
|
|
1819
|
+
link8Icon?: "Link" | "User" | "Share2" | "ShoppingBag" | "Video" | "Mail" | "MessageCircle" | "Globe" | "Calendar" | "Bell" | "Heart" | "Star" | "Zap" | "Gift" | "Phone" | "MapPin" | "Play" | "Package" | "ExternalLink" | "Bookmark" | "Trophy" | "Sparkles"; /** Color of the icon badge */
|
|
1820
|
+
link8Color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Cards: separated tiles. List: grouped rows with dividers. */
|
|
1821
|
+
layout?: "cards" | "list"; /** Corner radius for the colored icon badge */
|
|
1822
|
+
iconRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Right-aligned chevron indicating each row is a link */
|
|
1823
|
+
showChevron?: boolean; /** Open links in a new tab instead of the same window */
|
|
1824
|
+
openInNewTab?: boolean; /** Background for the widget container */
|
|
1759
1825
|
background?: string | {
|
|
1760
1826
|
type: "solid" | "image";
|
|
1761
1827
|
color?: ColorOption;
|
|
1762
1828
|
resource?: string | null | JsonObject;
|
|
1763
|
-
};
|
|
1764
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1765
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1766
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1767
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1829
|
+
}; /** Label + chevron color, and the base for row backgrounds (via opacity) */
|
|
1830
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Padding around the widget */
|
|
1831
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Widget border radius (also drives row corners in cards layout) */
|
|
1832
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Widget border width */
|
|
1833
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Widget border color */
|
|
1768
1834
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1769
1835
|
};
|
|
1770
1836
|
}
|
|
1837
|
+
/** Portal node for the QuickShareWidget built-in widget. */
|
|
1771
1838
|
interface QuickShareWidgetNode extends PortalWidgetNodeBase {
|
|
1839
|
+
/** Registered built-in widget type. */
|
|
1772
1840
|
readonly type: "QuickShareWidget";
|
|
1841
|
+
/** Properties accepted by this widget. */
|
|
1773
1842
|
readonly props: {
|
|
1774
|
-
shareableResource?: string | null | JsonObject;
|
|
1775
|
-
titleEnabled?: boolean;
|
|
1776
|
-
titleText?: string;
|
|
1777
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1778
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1779
|
-
showResourceType?: boolean;
|
|
1780
|
-
showShareActions?: boolean;
|
|
1781
|
-
showDomainPrefix?: boolean;
|
|
1782
|
-
showBuyButton?: boolean;
|
|
1783
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1784
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1785
|
-
overlayEnabled?: boolean;
|
|
1786
|
-
overlayType?: "gradient" | "solid";
|
|
1787
|
-
overlayIntensity?: number;
|
|
1788
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1789
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1790
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1843
|
+
/** Select the content to generate a share link for */shareableResource?: string | null | JsonObject; /** Display a title on the hero */
|
|
1844
|
+
titleEnabled?: boolean; /** Custom title text (defaults to the resource title if empty) */
|
|
1845
|
+
titleText?: string; /** Font size for the title */
|
|
1846
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the title */
|
|
1847
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display a small type eyebrow chip (Product · Page · Media…) */
|
|
1848
|
+
showResourceType?: boolean; /** Show Email, Text, and native Share buttons under the link chip */
|
|
1849
|
+
showShareActions?: boolean; /** Include the domain in the link chip (dimmed) with the path emphasized */
|
|
1850
|
+
showDomainPrefix?: boolean; /** Display the Buy button (only shown for Product resources) */
|
|
1851
|
+
showBuyButton?: boolean; /** Default text color for widget content (over the hero) */
|
|
1852
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Drives the price chip, primary button, and copy-success flash */
|
|
1853
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Add editorial gradient stack for legibility over the hero */
|
|
1854
|
+
overlayEnabled?: boolean; /** Gradient only (recommended) or gradient + solid wash (heavier) */
|
|
1855
|
+
overlayType?: "gradient" | "solid"; /** Opacity of the overlay (0-100) */
|
|
1856
|
+
overlayIntensity?: number; /** Padding around the widget content */
|
|
1857
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the widget container */
|
|
1858
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget container */
|
|
1859
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget container */
|
|
1791
1860
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1792
1861
|
};
|
|
1793
1862
|
}
|
|
1863
|
+
/** Portal node for the RecentActivityWidget built-in widget. */
|
|
1794
1864
|
interface RecentActivityWidgetNode extends PortalWidgetNodeBase {
|
|
1865
|
+
/** Registered built-in widget type. */
|
|
1795
1866
|
readonly type: "RecentActivityWidget";
|
|
1867
|
+
/** Properties accepted by this widget. */
|
|
1796
1868
|
readonly props: {
|
|
1797
|
-
titleEnabled?: boolean;
|
|
1798
|
-
titleText?: string;
|
|
1799
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1800
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1801
|
-
showEyebrow?: boolean;
|
|
1802
|
-
showCountChip?: boolean;
|
|
1803
|
-
maxItemsToShow?: number;
|
|
1804
|
-
showRelativeTime?: boolean;
|
|
1869
|
+
/** Display the title and eyebrow above the feed */titleEnabled?: boolean; /** Title text displayed above the activity feed */
|
|
1870
|
+
titleText?: string; /** Font size for the widget title */
|
|
1871
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1872
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Small uppercase label above the title */
|
|
1873
|
+
showEyebrow?: boolean; /** Accent pill next to the title showing how many updates */
|
|
1874
|
+
showCountChip?: boolean; /** Maximum number of activity items to display */
|
|
1875
|
+
maxItemsToShow?: number; /** Show 'now / 2m / 1h / 3d' instead of absolute times */
|
|
1876
|
+
showRelativeTime?: boolean; /** Background for the widget container */
|
|
1805
1877
|
background?: string | {
|
|
1806
1878
|
type: "solid" | "image";
|
|
1807
1879
|
color?: ColorOption;
|
|
1808
1880
|
resource?: string | null | JsonObject;
|
|
1809
|
-
};
|
|
1810
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1811
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1812
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1813
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1814
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1881
|
+
}; /** Default text color for activity content */
|
|
1882
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Drives the count chip, type badge, initials avatar, and empty-state icon */
|
|
1883
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Padding around the widget container */
|
|
1884
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the widget container */
|
|
1885
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget container */
|
|
1886
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget container */
|
|
1815
1887
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1816
1888
|
};
|
|
1817
1889
|
}
|
|
1890
|
+
/** Portal node for the SeparatorWidget built-in widget. */
|
|
1818
1891
|
interface SeparatorWidgetNode extends PortalWidgetNodeBase {
|
|
1892
|
+
/** Registered built-in widget type. */
|
|
1819
1893
|
readonly type: "SeparatorWidget";
|
|
1894
|
+
/** Properties accepted by this widget. */
|
|
1820
1895
|
readonly props: {
|
|
1821
|
-
orientation?: "horizontal" | "vertical";
|
|
1822
|
-
color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1823
|
-
thickness?: string;
|
|
1824
|
-
width?: string;
|
|
1825
|
-
marginTop?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1896
|
+
/** Direction of the separator line */orientation?: "horizontal" | "vertical"; /** Color of the separator line */
|
|
1897
|
+
color?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Thickness of the separator line */
|
|
1898
|
+
thickness?: string; /** Width of the separator */
|
|
1899
|
+
width?: string; /** Space above the separator */
|
|
1900
|
+
marginTop?: 0 | 2 | 4 | 6 | 8 | 10; /** Space below the separator */
|
|
1826
1901
|
marginBottom?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1827
1902
|
};
|
|
1828
1903
|
}
|
|
1904
|
+
/** Portal node for the ShopWidget built-in widget. */
|
|
1829
1905
|
interface ShopWidgetNode extends PortalWidgetNodeBase {
|
|
1906
|
+
/** Registered built-in widget type. */
|
|
1830
1907
|
readonly type: "ShopWidget";
|
|
1908
|
+
/** Properties accepted by this widget. */
|
|
1831
1909
|
readonly props: {
|
|
1832
|
-
titleEnabled?: boolean;
|
|
1833
|
-
title?: string;
|
|
1834
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1835
|
-
showSearch?: boolean;
|
|
1836
|
-
showSort?: boolean;
|
|
1837
|
-
columns?: 2 | 3 | 4 | 5 | 6;
|
|
1910
|
+
/** Enable the heading shown above the grid */titleEnabled?: boolean; /** Heading text shown above the grid */
|
|
1911
|
+
title?: string; /** Color of the heading text */
|
|
1912
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Display the search input above the grid */
|
|
1913
|
+
showSearch?: boolean; /** Display the sort menu above the grid */
|
|
1914
|
+
showSort?: boolean; /** Max columns at the largest breakpoint. Narrow widgets show 2 columns; wider containers scale up smoothly to the chosen maximum. */
|
|
1915
|
+
columns?: 2 | 3 | 4 | 5 | 6; /** Container background */
|
|
1838
1916
|
background?: string | {
|
|
1839
1917
|
type: "solid" | "image";
|
|
1840
1918
|
color?: ColorOption;
|
|
1841
1919
|
resource?: string | null | JsonObject;
|
|
1842
|
-
};
|
|
1843
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1844
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1845
|
-
cardBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1846
|
-
cardTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1847
|
-
useDataSource?: boolean;
|
|
1848
|
-
pageSize?: number;
|
|
1920
|
+
}; /** Inner spacing around the grid */
|
|
1921
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Container corner radius */
|
|
1922
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Override the card background color. Leave unset to use the theme's card color. */
|
|
1923
|
+
cardBackground?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Override title + price color inside each card. Leave unset to use the theme's foreground color. */
|
|
1924
|
+
cardTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Off shows all products from the catalog. On replaces the catalog with a data source — disables search and sort. */
|
|
1925
|
+
useDataSource?: boolean; /** Up to 10 acts as a hard cap. Above 10 the grid switches to infinite scroll (products load in batches of 10 as you scroll). */
|
|
1926
|
+
pageSize?: number; /** Products rendered in the shop grid, usually supplied by a data source. */
|
|
1849
1927
|
products?: JsonValue;
|
|
1850
1928
|
};
|
|
1851
1929
|
}
|
|
1930
|
+
/** Portal node for the SpacerWidget built-in widget. */
|
|
1852
1931
|
interface SpacerWidgetNode extends PortalWidgetNodeBase {
|
|
1932
|
+
/** Registered built-in widget type. */
|
|
1853
1933
|
readonly type: "SpacerWidget";
|
|
1934
|
+
/** Properties accepted by this widget. */
|
|
1854
1935
|
readonly props: {
|
|
1855
|
-
customHeight?: string;
|
|
1936
|
+
/** Height of the spacer */customHeight?: string;
|
|
1856
1937
|
};
|
|
1857
1938
|
}
|
|
1939
|
+
/** Portal node for the TableWidget built-in widget. */
|
|
1858
1940
|
interface TableWidgetNode extends PortalWidgetNodeBase {
|
|
1941
|
+
/** Registered built-in widget type. */
|
|
1859
1942
|
readonly type: "TableWidget";
|
|
1943
|
+
/** Properties accepted by this widget. */
|
|
1860
1944
|
readonly props: {
|
|
1861
|
-
titleEnabled?: boolean;
|
|
1862
|
-
titleText?: string;
|
|
1863
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1864
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1945
|
+
/** Enable the title displayed above the table */titleEnabled?: boolean; /** Title text displayed above the table */
|
|
1946
|
+
titleText?: string; /** Font size for the widget title */
|
|
1947
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
1948
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the table container */
|
|
1865
1949
|
background?: string | {
|
|
1866
1950
|
type: "solid" | "image";
|
|
1867
1951
|
color?: ColorOption;
|
|
1868
1952
|
resource?: string | null | JsonObject;
|
|
1869
|
-
};
|
|
1870
|
-
alternatingColorEnabled?: boolean;
|
|
1871
|
-
headerBackgroundColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1872
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1873
|
-
headerTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1874
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1875
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1876
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1877
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1878
|
-
filterEnabled?: boolean;
|
|
1879
|
-
sortingEnabled?: boolean;
|
|
1880
|
-
paginationEnabled?: boolean;
|
|
1881
|
-
maxRowsPerPage?: number;
|
|
1882
|
-
data?: JsonValue;
|
|
1953
|
+
}; /** Enable alternating colors for table rows */
|
|
1954
|
+
alternatingColorEnabled?: boolean; /** Background color for the table header */
|
|
1955
|
+
headerBackgroundColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Default text color for table content */
|
|
1956
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text color for the table header */
|
|
1957
|
+
headerTextColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Padding around the table container */
|
|
1958
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the table container */
|
|
1959
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
1960
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1961
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Show global search and column filters */
|
|
1962
|
+
filterEnabled?: boolean; /** Allow sorting by clicking column headers */
|
|
1963
|
+
sortingEnabled?: boolean; /** Split data into pages */
|
|
1964
|
+
paginationEnabled?: boolean; /** Maximum number of rows to display per page */
|
|
1965
|
+
maxRowsPerPage?: number; /** Rows rendered by the table, usually supplied by a data source. */
|
|
1966
|
+
data?: JsonValue; /** Column definitions used to label and read values from each row. */
|
|
1883
1967
|
columns?: JsonValue;
|
|
1884
1968
|
};
|
|
1885
1969
|
}
|
|
1970
|
+
/** Portal node for the TextWidget built-in widget. */
|
|
1886
1971
|
interface TextWidgetNode extends PortalWidgetNodeBase {
|
|
1972
|
+
/** Registered built-in widget type. */
|
|
1887
1973
|
readonly type: "TextWidget";
|
|
1974
|
+
/** Properties accepted by this widget. */
|
|
1888
1975
|
readonly props: {
|
|
1889
|
-
titleEnabled?: boolean;
|
|
1890
|
-
title?: string;
|
|
1891
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1892
|
-
titleFontWeight?: "normal" | "medium" | "semibold" | "bold";
|
|
1893
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1894
|
-
titleAlignment?: "left" | "center" | "right";
|
|
1895
|
-
description?: string;
|
|
1896
|
-
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1897
|
-
descriptionFontWeight?: "normal" | "medium" | "semibold" | "bold";
|
|
1898
|
-
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1899
|
-
descriptionAlignment?: "left" | "center" | "right";
|
|
1976
|
+
/** Enable the title displayed above the text */titleEnabled?: boolean; /** The title */
|
|
1977
|
+
title?: string; /** Font size for the title */
|
|
1978
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Font weight for the title */
|
|
1979
|
+
titleFontWeight?: "normal" | "medium" | "semibold" | "bold"; /** The color of the title */
|
|
1980
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text alignment for the title */
|
|
1981
|
+
titleAlignment?: "left" | "center" | "right"; /** The text message */
|
|
1982
|
+
description?: string; /** Font size for the text */
|
|
1983
|
+
descriptionFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Font weight for the text */
|
|
1984
|
+
descriptionFontWeight?: "normal" | "medium" | "semibold" | "bold"; /** The color of the text */
|
|
1985
|
+
descriptionColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Text alignment for the description */
|
|
1986
|
+
descriptionAlignment?: "left" | "center" | "right"; /** Background for the text container */
|
|
1900
1987
|
background?: string | {
|
|
1901
1988
|
type: "solid" | "image";
|
|
1902
1989
|
color?: ColorOption;
|
|
1903
1990
|
resource?: string | null | JsonObject;
|
|
1904
|
-
};
|
|
1905
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1906
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1907
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1991
|
+
}; /** The padding of the text container */
|
|
1992
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** The border radius of the text container */
|
|
1993
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** The border width of the text container */
|
|
1994
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** The border color of the text container */
|
|
1908
1995
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1909
1996
|
};
|
|
1910
1997
|
}
|
|
1998
|
+
/** Portal node for the ToDoWidget built-in widget. */
|
|
1911
1999
|
interface ToDoWidgetNode extends PortalWidgetNodeBase {
|
|
2000
|
+
/** Registered built-in widget type. */
|
|
1912
2001
|
readonly type: "ToDoWidget";
|
|
2002
|
+
/** Properties accepted by this widget. */
|
|
1913
2003
|
readonly props: {
|
|
1914
|
-
titleEnabled?: boolean;
|
|
1915
|
-
titleText?: string;
|
|
1916
|
-
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
1917
|
-
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
2004
|
+
/** Enable the title displayed above the todo list */titleEnabled?: boolean; /** Title text displayed above the todo list */
|
|
2005
|
+
titleText?: string; /** Font size for the widget title */
|
|
2006
|
+
titleFontSize?: "2xl" | "xl" | "lg" | "md" | "sm" | "xs"; /** Color for the widget title */
|
|
2007
|
+
titleColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Background for the widget container */
|
|
1918
2008
|
background?: string | {
|
|
1919
2009
|
type: "solid" | "image";
|
|
1920
2010
|
color?: ColorOption;
|
|
1921
2011
|
resource?: string | null | JsonObject;
|
|
1922
|
-
};
|
|
1923
|
-
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1924
|
-
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1925
|
-
maxItems?: number;
|
|
1926
|
-
padding?: 0 | 2 | 4 | 6 | 8 | 10;
|
|
1927
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1928
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
2012
|
+
}; /** Default text color for todo items */
|
|
2013
|
+
textColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Color used for count badge and icon */
|
|
2014
|
+
accentColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Maximum number of todo items to display */
|
|
2015
|
+
maxItems?: number; /** Padding around the widget container */
|
|
2016
|
+
padding?: 0 | 2 | 4 | 6 | 8 | 10; /** Border radius for the widget container */
|
|
2017
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
2018
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
1929
2019
|
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1930
2020
|
};
|
|
1931
2021
|
}
|
|
2022
|
+
/** Portal node for the VideoWidget built-in widget. */
|
|
1932
2023
|
interface VideoWidgetNode extends PortalWidgetNodeBase {
|
|
2024
|
+
/** Registered built-in widget type. */
|
|
1933
2025
|
readonly type: "VideoWidget";
|
|
2026
|
+
/** Properties accepted by this widget. */
|
|
1934
2027
|
readonly props: {
|
|
1935
|
-
resource?: string | null | JsonObject;
|
|
1936
|
-
useCustomUrl?: boolean;
|
|
1937
|
-
src?: string;
|
|
1938
|
-
poster?: string;
|
|
1939
|
-
displayMode?: "inline" | "card";
|
|
1940
|
-
title?: string;
|
|
1941
|
-
tagline?: string;
|
|
1942
|
-
eyebrow?: string;
|
|
1943
|
-
tag?: string;
|
|
1944
|
-
duration?: string;
|
|
1945
|
-
author?: string;
|
|
1946
|
-
date?: string;
|
|
1947
|
-
editorialFrame?: boolean;
|
|
1948
|
-
frameColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1949
|
-
showFullscreenPill?: boolean;
|
|
1950
|
-
primaryCtaText?: string;
|
|
1951
|
-
primaryCtaLink?: string;
|
|
1952
|
-
secondaryCtaText?: string;
|
|
1953
|
-
secondaryCtaLink?: string;
|
|
1954
|
-
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full";
|
|
1955
|
-
borderWidth?: "none" | "thin" | "medium" | "thick";
|
|
1956
|
-
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent";
|
|
1957
|
-
verticalSizing?: "auto" | "fixed";
|
|
1958
|
-
fixedHeight?: string;
|
|
1959
|
-
displayFit?: "cover" | "contain";
|
|
1960
|
-
focusPoint?: string;
|
|
1961
|
-
controls?: boolean;
|
|
1962
|
-
autoplay?: boolean;
|
|
1963
|
-
loop?: boolean;
|
|
2028
|
+
/** Browse and select a video */resource?: string | null | JsonObject; /** Enter a custom video URL instead of selecting media. */
|
|
2029
|
+
useCustomUrl?: boolean; /** Direct video URL for inline mode. Card mode supports YouTube, Vimeo, and direct video URLs. */
|
|
2030
|
+
src?: string; /** Thumbnail shown before play. Card mode can auto-derive YouTube thumbnails; add a poster for Vimeo URLs. */
|
|
2031
|
+
poster?: string; /** Inline: native player embedded in the page. Card: premium thumbnail that opens a modal. */
|
|
2032
|
+
displayMode?: "inline" | "card"; /** Headline on the card thumbnail (card mode only). */
|
|
2033
|
+
title?: string; /** Short body line under the title. */
|
|
2034
|
+
tagline?: string; /** Small label above the card (e.g. 'Training · Fluid Academy'). */
|
|
2035
|
+
eyebrow?: string; /** Optional pill label. */
|
|
2036
|
+
tag?: string; /** Runtime (e.g. '4:52' or '1:09:30'). Shown as a chip. */
|
|
2037
|
+
duration?: string; /** Meta line author. */
|
|
2038
|
+
author?: string; /** Meta line date (e.g. 'Apr 12'). */
|
|
2039
|
+
date?: string; /** Premium dark canvas with layered shadow and dual gradient overlays. */
|
|
2040
|
+
editorialFrame?: boolean; /** Surface color for the card and modal. */
|
|
2041
|
+
frameColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** Show the 'Full screen' hover hint on the card. */
|
|
2042
|
+
showFullscreenPill?: boolean; /** Primary button in the modal footer (optional). */
|
|
2043
|
+
primaryCtaText?: string; /** URL for the primary CTA. */
|
|
2044
|
+
primaryCtaLink?: string; /** Secondary (ghost) button in the modal footer (optional). */
|
|
2045
|
+
secondaryCtaText?: string; /** URL for the secondary CTA. */
|
|
2046
|
+
secondaryCtaLink?: string; /** Border radius for the video container */
|
|
2047
|
+
borderRadius?: "none" | "sm" | "md" | "lg" | "xl" | "full"; /** Border width for the widget */
|
|
2048
|
+
borderWidth?: "none" | "thin" | "medium" | "thick"; /** Border color for the widget */
|
|
2049
|
+
borderColor?: "background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "border" | "destructive" | "transparent"; /** How the video height is determined (inline mode only) */
|
|
2050
|
+
verticalSizing?: "auto" | "fixed"; /** Fixed height of the video container */
|
|
2051
|
+
fixedHeight?: string; /** How the video fills its container */
|
|
2052
|
+
displayFit?: "cover" | "contain"; /** The focal point of the video within its container */
|
|
2053
|
+
focusPoint?: string; /** Display video playback controls (inline mode only — card mode always shows controls in the modal). */
|
|
2054
|
+
controls?: boolean; /** Automatically start playing the video */
|
|
2055
|
+
autoplay?: boolean; /** Repeat the video when it ends */
|
|
2056
|
+
loop?: boolean; /** Start with audio muted */
|
|
1964
2057
|
muted?: boolean;
|
|
1965
2058
|
};
|
|
1966
2059
|
}
|
|
2060
|
+
/** Any registered built-in portal widget node. */
|
|
1967
2061
|
type PortalBuiltinWidgetNode = AlertWidgetNode | BulletListWidgetNode | CalendarWidgetNode | CardWidgetNode | CarouselWidgetNode | CatchUpWidgetNode | ChartWidgetNode | ContainerWidgetNode | EmbedWidgetNode | ImageWidgetNode | LayoutWidgetNode | LinkWidgetNode | ListWidgetNode | MySiteWidgetNode | NestedWidgetNode | PointsWidgetNode | QuickLinksWidgetNode | QuickShareWidgetNode | RecentActivityWidgetNode | SeparatorWidgetNode | ShopWidgetNode | SpacerWidgetNode | TableWidgetNode | TextWidgetNode | ToDoWidgetNode | VideoWidgetNode;
|
|
2062
|
+
/** Portal node supplied by a company or Droplet widget package. */
|
|
2063
|
+
/** Exact consent grant for third-party widget network access. */
|
|
1968
2064
|
interface PortalNetworkAccessGrant {
|
|
2065
|
+
/** Canonical package identifier approved for network access. */
|
|
1969
2066
|
readonly packageId: string;
|
|
2067
|
+
/** Exact package version approved for network access. */
|
|
1970
2068
|
readonly packageVersion: string;
|
|
2069
|
+
/** Exact network capability contract version approved. */
|
|
1971
2070
|
readonly capabilityVersion: string;
|
|
1972
2071
|
}
|
|
1973
2072
|
interface PortalThirdPartyWidgetNode extends PortalWidgetNodeBase {
|
|
2073
|
+
/** Namespaced owner, package key, and widget name. */
|
|
1974
2074
|
readonly type: `company.${string}.${string}` | `droplet.${string}.${string}`;
|
|
2075
|
+
/** Package-defined serializable widget properties. */
|
|
1975
2076
|
readonly props: JsonObject;
|
|
2077
|
+
/** Placement-specific consent grants for third-party capabilities. */
|
|
1976
2078
|
readonly capabilityGrants?: {
|
|
1977
2079
|
readonly networkAccess?: PortalNetworkAccessGrant;
|
|
1978
2080
|
};
|
|
1979
2081
|
}
|
|
2082
|
+
/** Any built-in or third-party portal widget node. */
|
|
1980
2083
|
type PortalWidgetNode = PortalBuiltinWidgetNode | PortalThirdPartyWidgetNode;
|
|
2084
|
+
/** Portal screen resource. */
|
|
1981
2085
|
interface PortalScreen {
|
|
2086
|
+
/** Versioned schema URL. */
|
|
1982
2087
|
readonly $schema?: string;
|
|
2088
|
+
/** Human-readable screen name. */
|
|
1983
2089
|
readonly name: string;
|
|
2090
|
+
/** Zero or one root widget nodes. */
|
|
1984
2091
|
readonly component_tree: PortalWidgetNode[];
|
|
1985
2092
|
}
|
|
2093
|
+
/** Base and foreground OKLCH colors for a semantic theme role. */
|
|
1986
2094
|
interface PortalThemeColor {
|
|
2095
|
+
/** Base OKLCH color. */
|
|
1987
2096
|
readonly base: {
|
|
1988
2097
|
readonly l: number;
|
|
1989
2098
|
readonly c: number;
|
|
1990
2099
|
readonly h: number;
|
|
1991
2100
|
};
|
|
2101
|
+
/** Foreground OKLCH color. */
|
|
1992
2102
|
readonly foreground: {
|
|
1993
2103
|
readonly l: number;
|
|
1994
2104
|
readonly c: number;
|
|
1995
2105
|
readonly h: number;
|
|
1996
2106
|
};
|
|
1997
2107
|
}
|
|
2108
|
+
/** Complete structured portal theme configuration. */
|
|
1998
2109
|
interface PortalThemeConfig {
|
|
2110
|
+
/** Stable theme configuration identifier. */
|
|
1999
2111
|
readonly id: string;
|
|
2112
|
+
/** Human-readable configuration name. */
|
|
2000
2113
|
readonly name: string;
|
|
2114
|
+
/** Required light-mode semantic colors. */
|
|
2001
2115
|
readonly light: Readonly<Record<"background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "destructive", PortalThemeColor>>;
|
|
2116
|
+
/** Optional dark-mode semantic color overrides. */
|
|
2002
2117
|
readonly dark: Readonly<Partial<Record<"background" | "foreground" | "primary" | "secondary" | "accent" | "muted" | "destructive", {
|
|
2003
2118
|
readonly base?: PortalThemeColor["base"];
|
|
2004
2119
|
readonly foreground?: PortalThemeColor["foreground"];
|
|
2005
2120
|
}>>>;
|
|
2121
|
+
/** Named font-size tokens. */
|
|
2006
2122
|
readonly fontSizes: Readonly<Record<"extraSmall" | "small" | "regular" | "large" | "extraLarge" | "giant", string>>;
|
|
2123
|
+
/** Heading and body font families. */
|
|
2007
2124
|
readonly fontFamilies: Readonly<Record<"header" | "body", string>>;
|
|
2125
|
+
/** Base spacing token. */
|
|
2008
2126
|
readonly spacing: string;
|
|
2127
|
+
/** Named border-radius tokens. */
|
|
2009
2128
|
readonly radii: Readonly<Record<"small" | "medium" | "large" | "extraLarge", string>>;
|
|
2129
|
+
/** Whether Fluid brand colors update semantic colors. */
|
|
2010
2130
|
readonly syncWithBrandColors?: boolean;
|
|
2011
2131
|
}
|
|
2132
|
+
/** Portal theme resource. */
|
|
2012
2133
|
interface PortalTheme {
|
|
2134
|
+
/** Versioned schema URL. */
|
|
2013
2135
|
readonly $schema?: string;
|
|
2136
|
+
/** Human-readable theme name. */
|
|
2014
2137
|
readonly name: string;
|
|
2138
|
+
/** Complete structured theme configuration. */
|
|
2015
2139
|
readonly config: PortalThemeConfig;
|
|
2140
|
+
/** Whether the theme is active. */
|
|
2016
2141
|
readonly active: boolean;
|
|
2017
2142
|
}
|
|
2143
|
+
/** Navigation entry that can contain nested entries. */
|
|
2018
2144
|
interface PortalNavigationItem {
|
|
2145
|
+
/** Remote item identifier, when assigned. */
|
|
2019
2146
|
readonly id?: number;
|
|
2147
|
+
/** Display icon identifier. */
|
|
2020
2148
|
readonly icon: string | null;
|
|
2149
|
+
/** Display label. */
|
|
2021
2150
|
readonly label: string | null;
|
|
2151
|
+
/** Referenced screen resource slug. */
|
|
2022
2152
|
readonly screen: string | null;
|
|
2153
|
+
/** Stable navigation item slug. */
|
|
2023
2154
|
readonly slug: string | null;
|
|
2155
|
+
/** Fluid navigation source classification. */
|
|
2024
2156
|
readonly source: string;
|
|
2157
|
+
/** Item ordering position. */
|
|
2025
2158
|
readonly position: number | null;
|
|
2159
|
+
/** Parent item identifier, or null at the root. */
|
|
2026
2160
|
readonly parent_id: number | null;
|
|
2161
|
+
/** Nested navigation entries. */
|
|
2027
2162
|
readonly children: PortalNavigationItem[];
|
|
2028
2163
|
}
|
|
2164
|
+
/** Web or mobile navigation resource. */
|
|
2029
2165
|
interface PortalNavigation {
|
|
2166
|
+
/** Versioned schema URL. */
|
|
2030
2167
|
readonly $schema?: string;
|
|
2168
|
+
/** Human-readable navigation name. */
|
|
2031
2169
|
readonly name: string;
|
|
2170
|
+
/** Platform that uses this navigation. */
|
|
2032
2171
|
readonly platform: "web" | "mobile";
|
|
2172
|
+
/** Ordered top-level navigation entries. */
|
|
2033
2173
|
readonly navigation_items: PortalNavigationItem[];
|
|
2034
2174
|
}
|
|
2175
|
+
/** Portal member profile resource. */
|
|
2035
2176
|
interface PortalProfile {
|
|
2177
|
+
/** Versioned schema URL. */
|
|
2036
2178
|
readonly $schema?: string;
|
|
2179
|
+
/** Human-readable profile name. */
|
|
2037
2180
|
readonly name: string;
|
|
2181
|
+
/** Whether this is the fallback profile. */
|
|
2038
2182
|
readonly default: boolean;
|
|
2183
|
+
/** Web navigation resource slug. */
|
|
2039
2184
|
readonly navigation: string | null;
|
|
2185
|
+
/** Mobile navigation resource slug. */
|
|
2040
2186
|
readonly mobile_navigation: string | null;
|
|
2187
|
+
/** Theme resource slugs available to this profile. */
|
|
2041
2188
|
readonly themes: string[];
|
|
2189
|
+
/** Member attributes used for profile matching. */
|
|
2042
2190
|
readonly permissions: {
|
|
2043
2191
|
readonly ranks: number[];
|
|
2044
2192
|
readonly roles: string[];
|