@deriv-web-design/ui 0.1.5 → 0.1.6

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "Generated by scripts/generate-component-manifest.ts from the TypeScript types. Do not edit by hand. Props inherited from React HTMLAttributes are intentionally omitted. `default` is the value declared in the component's own parameter destructuring; a prop whose effective default is applied further down the tree (e.g. cards[].showLink) has no `default` here — see block-registry.json `fields` for documented effective defaults.",
3
3
  "package": "@deriv-web-design/ui",
4
- "componentCount": 44,
4
+ "componentCount": 48,
5
5
  "components": {
6
6
  "Accordion": {
7
7
  "name": "Accordion",
@@ -1087,6 +1087,377 @@
1087
1087
  }
1088
1088
  }
1089
1089
  },
1090
+ "FeatureBlog": {
1091
+ "name": "FeatureBlog",
1092
+ "source": "templates/FeatureBlog/FeatureBlog.tsx",
1093
+ "props": {
1094
+ "className": {
1095
+ "type": "string",
1096
+ "required": false,
1097
+ "description": "Extra class name merged onto the root `<section>`."
1098
+ },
1099
+ "linkHref": {
1100
+ "type": "string",
1101
+ "required": false,
1102
+ "description": "Href for the \"See all\" link"
1103
+ },
1104
+ "linkText": {
1105
+ "type": "string",
1106
+ "required": false,
1107
+ "description": "Label for the \"See all\" link (default: \"See all press releases\")",
1108
+ "defaultExpression": "FEATURE_BLOG_TEXT_CONTENT.linkText"
1109
+ },
1110
+ "onLinkClick": {
1111
+ "type": "(() => void)",
1112
+ "required": false
1113
+ },
1114
+ "posts": {
1115
+ "type": "FeatureBlogPost[]",
1116
+ "required": true,
1117
+ "description": "Posts rendered as a responsive card grid.",
1118
+ "items": {
1119
+ "category": {
1120
+ "type": "string",
1121
+ "required": false,
1122
+ "description": "Category label, e.g. \"Company\""
1123
+ },
1124
+ "date": {
1125
+ "type": "string",
1126
+ "required": false,
1127
+ "description": "Publish date label, e.g. \"July 24, 2026\""
1128
+ },
1129
+ "href": {
1130
+ "type": "string",
1131
+ "required": false,
1132
+ "description": "Link target — wraps the card in an anchor when set"
1133
+ },
1134
+ "onClick": {
1135
+ "type": "(() => void)",
1136
+ "required": false,
1137
+ "description": "Click handler — used when `href` is not set"
1138
+ },
1139
+ "summary": {
1140
+ "type": "string",
1141
+ "required": true,
1142
+ "description": "Post summary / dek text"
1143
+ },
1144
+ "thumbnail": {
1145
+ "type": "string",
1146
+ "required": true,
1147
+ "description": "Card thumbnail image"
1148
+ },
1149
+ "thumbnailAlt": {
1150
+ "type": "string",
1151
+ "required": false
1152
+ },
1153
+ "title": {
1154
+ "type": "string",
1155
+ "required": true,
1156
+ "description": "Post headline"
1157
+ }
1158
+ }
1159
+ },
1160
+ "showLink": {
1161
+ "type": "boolean",
1162
+ "required": false,
1163
+ "description": "Show the \"See all\" link below the grid (default: true)",
1164
+ "default": true
1165
+ },
1166
+ "title": {
1167
+ "type": "string",
1168
+ "required": false,
1169
+ "description": "Section heading. Defaults to \"Deriv press releases\".",
1170
+ "defaultExpression": "FEATURE_BLOG_TEXT_CONTENT.title"
1171
+ }
1172
+ }
1173
+ },
1174
+ "FeatureBlogCategories": {
1175
+ "name": "FeatureBlogCategories",
1176
+ "source": "templates/FeatureBlogCategories/FeatureBlogCategories.tsx",
1177
+ "props": {
1178
+ "activeCategoryId": {
1179
+ "type": "string",
1180
+ "required": false,
1181
+ "description": "Controlled active category tab id"
1182
+ },
1183
+ "allCategoryId": {
1184
+ "type": "string",
1185
+ "required": false,
1186
+ "description": "Id used internally for the auto-prepended \"show everything\" tab (default: \"all\")",
1187
+ "defaultExpression": "FEATURE_BLOG_CATEGORIES_TEXT_CONTENT.allCategoryId"
1188
+ },
1189
+ "allCategoryLabel": {
1190
+ "type": "string",
1191
+ "required": false,
1192
+ "description": "Label for the auto-prepended \"show everything\" tab (default: \"View all\")",
1193
+ "defaultExpression": "FEATURE_BLOG_CATEGORIES_TEXT_CONTENT.allCategoryLabel"
1194
+ },
1195
+ "categories": {
1196
+ "type": "FeatureBlogCategoryTab[]",
1197
+ "required": true,
1198
+ "description": "Category tabs, CMS-managed. An \"all\" tab is always prepended automatically.",
1199
+ "items": {
1200
+ "id": {
1201
+ "type": "string",
1202
+ "required": true,
1203
+ "description": "Stable identifier — must match `FeatureBlogCategoryPost.category` for filtering to work. CMS-managed."
1204
+ },
1205
+ "label": {
1206
+ "type": "string",
1207
+ "required": true,
1208
+ "description": "Tab label shown in the pill row. CMS-managed."
1209
+ }
1210
+ }
1211
+ },
1212
+ "className": {
1213
+ "type": "string",
1214
+ "required": false,
1215
+ "description": "Extra class name merged onto the root `<section>`."
1216
+ },
1217
+ "defaultActiveCategoryId": {
1218
+ "type": "string",
1219
+ "required": false,
1220
+ "description": "Initial active tab id for uncontrolled usage (default: `allCategoryId`)"
1221
+ },
1222
+ "emptyStateText": {
1223
+ "type": "string",
1224
+ "required": false,
1225
+ "description": "Message shown when no posts match the active tab + search query",
1226
+ "defaultExpression": "FEATURE_BLOG_CATEGORIES_TEXT_CONTENT.emptyStateText"
1227
+ },
1228
+ "onCategoryChange": {
1229
+ "type": "((id: string) => void)",
1230
+ "required": false,
1231
+ "description": "Called whenever a different tab is selected"
1232
+ },
1233
+ "onSearchChange": {
1234
+ "type": "((value: string) => void)",
1235
+ "required": false,
1236
+ "description": "Called on every keystroke in the search field with the current value"
1237
+ },
1238
+ "posts": {
1239
+ "type": "FeatureBlogCategoryPost[]",
1240
+ "required": true,
1241
+ "description": "All posts — filtered client-side by the active tab and search query",
1242
+ "items": {
1243
+ "category": {
1244
+ "type": "string",
1245
+ "required": true,
1246
+ "description": "Category tab id this post belongs to (matches a `categories[].id`). Posts also always match the \"all\" tab."
1247
+ },
1248
+ "categoryLabel": {
1249
+ "type": "string",
1250
+ "required": false,
1251
+ "description": "Category chip label shown on the card. Defaults to the matching tab's `label` when omitted."
1252
+ },
1253
+ "date": {
1254
+ "type": "string",
1255
+ "required": false,
1256
+ "description": "Publish date label, e.g. \"July 24, 2026\""
1257
+ },
1258
+ "href": {
1259
+ "type": "string",
1260
+ "required": false,
1261
+ "description": "Destination URL. Absolute `http(s)://` URLs are treated as external and open in a new tab (`target=\"_blank\" rel=\"noopener noreferrer\"`); relative/internal paths (e.g. \"/newsroom/my-article\") navigate as a normal same-tab inner-page link."
1262
+ },
1263
+ "onClick": {
1264
+ "type": "(() => void)",
1265
+ "required": false,
1266
+ "description": "Click handler — used when `href` is not set (renders a `<button>`)"
1267
+ },
1268
+ "summary": {
1269
+ "type": "string",
1270
+ "required": true,
1271
+ "description": "Post summary / dek text"
1272
+ },
1273
+ "thumbnail": {
1274
+ "type": "string",
1275
+ "required": true,
1276
+ "description": "Card thumbnail image"
1277
+ },
1278
+ "thumbnailAlt": {
1279
+ "type": "string",
1280
+ "required": false
1281
+ },
1282
+ "title": {
1283
+ "type": "string",
1284
+ "required": true,
1285
+ "description": "Post headline"
1286
+ }
1287
+ }
1288
+ },
1289
+ "searchAriaLabel": {
1290
+ "type": "string",
1291
+ "required": false,
1292
+ "description": "Accessible label for the search field (defaults to `searchPlaceholder`)"
1293
+ },
1294
+ "searchPlaceholder": {
1295
+ "type": "string",
1296
+ "required": false,
1297
+ "description": "Placeholder text for the search field (default: \"Search\")",
1298
+ "defaultExpression": "FEATURE_BLOG_CATEGORIES_TEXT_CONTENT.searchPlaceholder"
1299
+ },
1300
+ "title": {
1301
+ "type": "string",
1302
+ "required": false,
1303
+ "description": "Section heading. Defaults to \"Deriv press releases\".",
1304
+ "defaultExpression": "FEATURE_BLOG_CATEGORIES_TEXT_CONTENT.title"
1305
+ }
1306
+ }
1307
+ },
1308
+ "FeatureBlogPage": {
1309
+ "name": "FeatureBlogPage",
1310
+ "source": "templates/FeatureBlogPage/FeatureBlogPage.tsx",
1311
+ "props": {
1312
+ "author": {
1313
+ "type": "FeatureBlogAuthor",
1314
+ "required": false,
1315
+ "description": "Article author, shown in the meta row next to the publish date"
1316
+ },
1317
+ "category": {
1318
+ "type": "string",
1319
+ "required": false,
1320
+ "description": "Small category label rendered above the title (e.g. \"Press releases\")"
1321
+ },
1322
+ "className": {
1323
+ "type": "string",
1324
+ "required": false,
1325
+ "description": "Additional CSS class on the outer `<section>`"
1326
+ },
1327
+ "content": {
1328
+ "type": "FeatureBlogContentBlock[]",
1329
+ "required": true,
1330
+ "description": "Main article body, rendered from plain data blocks (required, at least 1 item)",
1331
+ "items": {
1332
+ "caption": {
1333
+ "type": "string",
1334
+ "required": false,
1335
+ "description": "Optional caption rendered below an \"image\" block"
1336
+ },
1337
+ "cite": {
1338
+ "type": "string",
1339
+ "required": false,
1340
+ "description": "Citation / source line for \"quote\" blocks"
1341
+ },
1342
+ "id": {
1343
+ "type": "string",
1344
+ "required": false,
1345
+ "description": "Stable anchor id for a \"heading\" block; auto-generated (slugified) from `text` when omitted"
1346
+ },
1347
+ "image": {
1348
+ "type": "string",
1349
+ "required": false,
1350
+ "description": "Image source for \"image\" blocks"
1351
+ },
1352
+ "imageAlt": {
1353
+ "type": "string",
1354
+ "required": false
1355
+ },
1356
+ "items": {
1357
+ "type": "string[]",
1358
+ "required": false,
1359
+ "description": "List entries for \"list\" blocks"
1360
+ },
1361
+ "level": {
1362
+ "type": "2 | 3",
1363
+ "required": false,
1364
+ "description": "Heading level for \"heading\" blocks (default: 2). Only level-2 headings are collected into the table of contents — level-3 headings render inline as sub-sections but are not listed."
1365
+ },
1366
+ "ordered": {
1367
+ "type": "boolean",
1368
+ "required": false,
1369
+ "description": "Render a \"list\" block as `<ol>` instead of `<ul>` (default: false)"
1370
+ },
1371
+ "text": {
1372
+ "type": "string",
1373
+ "required": false,
1374
+ "description": "Text content for \"heading\" / \"paragraph\" / \"quote\" blocks"
1375
+ },
1376
+ "type": {
1377
+ "type": "FeatureBlogContentBlockType",
1378
+ "required": true,
1379
+ "description": "Block kind — \"heading\"/\"paragraph\"/\"quote\" use `text`, \"list\" uses `items`, \"image\" uses `image`"
1380
+ }
1381
+ }
1382
+ },
1383
+ "copiedLabel": {
1384
+ "type": "string",
1385
+ "required": false,
1386
+ "description": "Label shown briefly after \"copy link\" succeeds (default: \"Copied!\")",
1387
+ "default": "Copied!"
1388
+ },
1389
+ "heroImage": {
1390
+ "type": "string",
1391
+ "required": false,
1392
+ "description": "Hero image rendered below the title / meta row"
1393
+ },
1394
+ "heroImageAlt": {
1395
+ "type": "string",
1396
+ "required": false
1397
+ },
1398
+ "hideShare": {
1399
+ "type": "boolean",
1400
+ "required": false,
1401
+ "description": "Hide the share row entirely (default: false)",
1402
+ "default": false
1403
+ },
1404
+ "hideToc": {
1405
+ "type": "boolean",
1406
+ "required": false,
1407
+ "description": "Hide the table of contents entirely (default: false) — e.g. for very short articles with no level-2 headings",
1408
+ "default": false
1409
+ },
1410
+ "onShare": {
1411
+ "type": "((platform: FeatureBlogSharePlatform | \"copy\") => void)",
1412
+ "required": false,
1413
+ "description": "Fired whenever a share icon (including \"copy link\") is activated"
1414
+ },
1415
+ "publishDate": {
1416
+ "type": "string",
1417
+ "required": false,
1418
+ "description": "Publish date label shown in the meta row (e.g. \"July 24, 2026\")"
1419
+ },
1420
+ "sharePlatforms": {
1421
+ "type": "FeatureBlogSharePlatform[]",
1422
+ "required": false,
1423
+ "description": "Which social platforms to show, in order (default: all four)",
1424
+ "defaultExpression": "[\"facebook\", \"twitter\", \"telegram\", \"linkedin\"]"
1425
+ },
1426
+ "shareText": {
1427
+ "type": "string",
1428
+ "required": false,
1429
+ "description": "Text passed to platforms that accept share text (X/Twitter, Telegram); defaults to `title`"
1430
+ },
1431
+ "shareTitle": {
1432
+ "type": "string",
1433
+ "required": false,
1434
+ "description": "\"Share article\" label above the share icons (default: \"Share article\")",
1435
+ "default": "Share article"
1436
+ },
1437
+ "shareUrl": {
1438
+ "type": "string",
1439
+ "required": false,
1440
+ "description": "Canonical URL used to build every share link and for \"copy link\"; sharing is hidden when omitted"
1441
+ },
1442
+ "title": {
1443
+ "type": "string",
1444
+ "required": true,
1445
+ "description": "Article headline, rendered as the page's `<h1>` (required)"
1446
+ },
1447
+ "tocDefaultOpen": {
1448
+ "type": "boolean",
1449
+ "required": false,
1450
+ "description": "Whether the table of contents starts expanded (default: true)",
1451
+ "default": true
1452
+ },
1453
+ "tocTitle": {
1454
+ "type": "string",
1455
+ "required": false,
1456
+ "description": "Table of contents card heading (default: \"Contents\")",
1457
+ "default": "Contents"
1458
+ }
1459
+ }
1460
+ },
1090
1461
  "FeatureBullets": {
1091
1462
  "name": "FeatureBullets",
1092
1463
  "source": "templates/FeatureBullets/FeatureBullets.tsx",
@@ -1459,22 +1830,27 @@
1459
1830
  "leftVisual": {
1460
1831
  "type": "ReactNode",
1461
1832
  "required": false,
1462
- "description": "Left floating visual for the Visuals variant. Accepts a ReactNode or image URL string."
1833
+ "description": "Left floating visual for the \"visuals\" variant. Accepts a ReactNode or image URL string."
1463
1834
  },
1464
1835
  "primaryButton": {
1465
1836
  "type": "HeaderButtonProps",
1466
1837
  "required": false,
1467
- "description": "Primary CTA button (coral). Shown on both variants."
1838
+ "description": "Primary CTA button (coral). Shown on all variants."
1468
1839
  },
1469
1840
  "rightVisual": {
1470
1841
  "type": "ReactNode",
1471
1842
  "required": false,
1472
- "description": "Right floating visual for the Visuals variant. Accepts a ReactNode or image URL string."
1843
+ "description": "Right floating visual for the \"visuals\" variant. Accepts a ReactNode or image URL string."
1844
+ },
1845
+ "search": {
1846
+ "type": "HeaderSearchProps",
1847
+ "required": false,
1848
+ "description": "Search field configuration for the \"dark-search\" variant (e.g. Help Centre header). The field always renders for that variant; this prop only customises it."
1473
1849
  },
1474
1850
  "secondaryButton": {
1475
1851
  "type": "HeaderButtonProps",
1476
1852
  "required": false,
1477
- "description": "Secondary CTA button (white outline). Shown on both variants."
1853
+ "description": "Secondary CTA button (white outline). Shown on all variants."
1478
1854
  },
1479
1855
  "subtitle": {
1480
1856
  "type": "string",
@@ -1489,7 +1865,7 @@
1489
1865
  "variant": {
1490
1866
  "type": "HeaderVariant",
1491
1867
  "required": true,
1492
- "description": "Layout variant: - \"visuals\" — light grey bg + SVG grid, center-aligned text, floating visuals left & right, parallax scroll effect on visuals, min-height 540px - \"minimal\" — same as visuals but without the floating graphics"
1868
+ "description": "Layout variant: - \"visuals\" — light grey bg + SVG grid, center-aligned text, floating visuals left & right, parallax scroll effect on visuals, min-height 540px - \"minimal\" — same as visuals but without the floating graphics - \"dark\" — dark navy bg + SVG grid, center-aligned text, no floating visuals, min-height 420px on mobile/tablet, 460px on desktop (shorter than the light variants) - \"dark-search\" — same as \"dark\" plus a search field below the text, for pages such as the Help Centre index"
1493
1869
  }
1494
1870
  }
1495
1871
  },
@@ -2033,6 +2409,75 @@
2033
2409
  }
2034
2410
  }
2035
2411
  },
2412
+ "ParallaxBanner": {
2413
+ "name": "ParallaxBanner",
2414
+ "source": "templates/ParallaxBanner/ParallaxBanner.tsx",
2415
+ "props": {
2416
+ "cards": {
2417
+ "type": "ParallaxBannerCultureCard[]",
2418
+ "required": false,
2419
+ "description": "Four (or more) short value/culture cards rendered in a grid below the banner. Ignored when `variant` is `\"banner-only\"`. Defaults to `DEFAULT_CULTURE_CARDS`.",
2420
+ "defaultExpression": "DEFAULT_CULTURE_CARDS"
2421
+ },
2422
+ "className": {
2423
+ "type": "string",
2424
+ "required": false,
2425
+ "description": "Extra class name merged onto the root `<section>`"
2426
+ },
2427
+ "ctaHref": {
2428
+ "type": "string",
2429
+ "required": false,
2430
+ "description": "CTA link href"
2431
+ },
2432
+ "ctaLabel": {
2433
+ "type": "string",
2434
+ "required": false,
2435
+ "description": "CTA link label. Defaults to \"Culture at Deriv\".",
2436
+ "defaultExpression": "PARALLAX_BANNER_TEXT_CONTENT.ctaLabel"
2437
+ },
2438
+ "description": {
2439
+ "type": "string",
2440
+ "required": false,
2441
+ "description": "Supporting copy beneath the headline",
2442
+ "defaultExpression": "PARALLAX_BANNER_TEXT_CONTENT.description"
2443
+ },
2444
+ "enableParallax": {
2445
+ "type": "boolean",
2446
+ "required": false,
2447
+ "description": "Enables the subtle scroll-linked parallax on the banner photo. Automatically disabled when the user has `prefers-reduced-motion` set. Defaults to `true`.",
2448
+ "default": true
2449
+ },
2450
+ "imageAlt": {
2451
+ "type": "string",
2452
+ "required": false,
2453
+ "description": "Accessible alt text for the banner photo",
2454
+ "default": ""
2455
+ },
2456
+ "imageUrl": {
2457
+ "type": "string",
2458
+ "required": false,
2459
+ "description": "URL of the photo shown in the banner's image panel",
2460
+ "defaultExpression": "PLACEHOLDER_IMAGE"
2461
+ },
2462
+ "onCtaClick": {
2463
+ "type": "(() => void)",
2464
+ "required": false,
2465
+ "description": "Callback fired when the CTA link is clicked"
2466
+ },
2467
+ "title": {
2468
+ "type": "string",
2469
+ "required": false,
2470
+ "description": "Banner headline. Defaults to \"Our culture\".",
2471
+ "defaultExpression": "PARALLAX_BANNER_TEXT_CONTENT.title"
2472
+ },
2473
+ "variant": {
2474
+ "type": "\"default\" | \"banner-only\"",
2475
+ "required": false,
2476
+ "description": "Layout variant. - `\"default\"`: banner card plus a grid of culture/value cards beneath it. - `\"banner-only\"`: just the banner card — no cards grid.",
2477
+ "default": "default"
2478
+ }
2479
+ }
2480
+ },
2036
2481
  "Stats": {
2037
2482
  "name": "Stats",
2038
2483
  "source": "templates/Stats/StatsV2.tsx",
@@ -2371,7 +2816,7 @@
2371
2816
  "items": {
2372
2817
  "type": "TestimonialItem[]",
2373
2818
  "required": true,
2374
- "description": "Array of testimonial items to display in the carousel",
2819
+ "description": "Array of testimonial items to display",
2375
2820
  "items": {
2376
2821
  "authorLocation": {
2377
2822
  "type": "string",
@@ -2392,6 +2837,16 @@
2392
2837
  "type": "string",
2393
2838
  "required": true,
2394
2839
  "description": "The testimonial quote text"
2840
+ },
2841
+ "rating": {
2842
+ "type": "number",
2843
+ "required": false,
2844
+ "description": "`trustpilot` variant only — star rating out of 5 shown on the card. Supports halves (e.g. `4.5`). Defaults to `5`."
2845
+ },
2846
+ "reviewUrl": {
2847
+ "type": "string",
2848
+ "required": false,
2849
+ "description": "`trustpilot` variant only — link to the full review on Trustpilot. When omitted, the card links to `trustpilotUrl` instead."
2395
2850
  }
2396
2851
  }
2397
2852
  },
@@ -2399,6 +2854,21 @@
2399
2854
  "type": "string",
2400
2855
  "required": false,
2401
2856
  "description": "Section heading"
2857
+ },
2858
+ "trustpilotScore": {
2859
+ "type": "number",
2860
+ "required": false,
2861
+ "description": "`trustpilot` variant only — overall TrustScore shown in the footer badge (out of 5)."
2862
+ },
2863
+ "trustpilotUrl": {
2864
+ "type": "string",
2865
+ "required": false,
2866
+ "description": "`trustpilot` variant only — URL to the brand's Trustpilot profile page. Used by the footer rating badge link, and as the fallback link for any item without its own `reviewUrl`."
2867
+ },
2868
+ "variant": {
2869
+ "type": "\"default\" | \"trustpilot\"",
2870
+ "required": false,
2871
+ "description": "Visual style. - `default` (default): single-slide auto-advancing quote carousel with dot pagination. - `trustpilot`: horizontally-scrollable row of star-rated review cards, a \"Trustpilot\" rating badge, and prev/next controls — modeled after deriv.com's homepage \"What our customers say\" section."
2402
2872
  }
2403
2873
  }
2404
2874
  },