@deriv-web-design/ui 0.1.19 → 0.1.21

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": 56,
4
+ "componentCount": 63,
5
5
  "components": {
6
6
  "Accordion": {
7
7
  "name": "Accordion",
@@ -57,6 +57,111 @@
57
57
  }
58
58
  }
59
59
  },
60
+ "AffiliatesSlider": {
61
+ "name": "AffiliatesSlider",
62
+ "source": "templates/AffiliatesSlider/AffiliatesSlider.tsx",
63
+ "props": {
64
+ "currencySymbol": {
65
+ "type": "string",
66
+ "required": false,
67
+ "description": "Currency symbol prepended to the income figure.",
68
+ "default": "$"
69
+ },
70
+ "defaultValue": {
71
+ "type": "number",
72
+ "required": false,
73
+ "description": "Initial slider value when uncontrolled.",
74
+ "default": 10
75
+ },
76
+ "description": {
77
+ "type": "string",
78
+ "required": false,
79
+ "description": "Intro paragraph under the heading",
80
+ "default": "Explain how this specific feature helps your user."
81
+ },
82
+ "disclaimer": {
83
+ "type": "string",
84
+ "required": false,
85
+ "description": "Disclaimer copy below the slider.",
86
+ "default": "This calculator provides estimates only and may not reflect actual earnings."
87
+ },
88
+ "disclaimerIconAlt": {
89
+ "type": "string",
90
+ "required": false,
91
+ "description": "Alt text for the disclaimer icon. Empty = decorative",
92
+ "default": ""
93
+ },
94
+ "disclaimerIconSrc": {
95
+ "type": "string",
96
+ "required": false,
97
+ "description": "Info icon beside the disclaimer. A fixed hosted brand asset.",
98
+ "default": "https://cdn.prod.website-files.com/68da5c86c91c54f39c86c28a/68da5c86c91c54f39c86cdaf_icon.svg"
99
+ },
100
+ "incomeLabel": {
101
+ "type": "string",
102
+ "required": false,
103
+ "description": "Label shown under the income figure.",
104
+ "default": "your potential income per month"
105
+ },
106
+ "incomePerReferral": {
107
+ "type": "number",
108
+ "required": false,
109
+ "description": "Amount earned per referral — multiplied by the slider value for the income display.",
110
+ "default": 100
111
+ },
112
+ "max": {
113
+ "type": "number",
114
+ "required": false,
115
+ "description": "Maximum slider value.",
116
+ "default": 50
117
+ },
118
+ "min": {
119
+ "type": "number",
120
+ "required": false,
121
+ "description": "Minimum slider value.",
122
+ "default": 10
123
+ },
124
+ "onValueChange": {
125
+ "type": "((value: number) => void)",
126
+ "required": false,
127
+ "description": "Called when the slider value changes"
128
+ },
129
+ "referralsLabel": {
130
+ "type": "string",
131
+ "required": false,
132
+ "description": "Label shown under the referrals count.",
133
+ "default": "total referrals (Min deposit amount of $100 each)"
134
+ },
135
+ "sliderLabel": {
136
+ "type": "string",
137
+ "required": false,
138
+ "description": "Accessible label for the referrals slider",
139
+ "default": "Number of referrals"
140
+ },
141
+ "step": {
142
+ "type": "number",
143
+ "required": false,
144
+ "description": "Slider step.",
145
+ "default": 1
146
+ },
147
+ "tickValues": {
148
+ "type": "number[]",
149
+ "required": false,
150
+ "description": "Tick labels rendered under the track. Defaults to five evenly spaced values from `min` to `max`."
151
+ },
152
+ "title": {
153
+ "type": "string",
154
+ "required": false,
155
+ "description": "Section heading",
156
+ "default": "Section title goes here"
157
+ },
158
+ "value": {
159
+ "type": "number",
160
+ "required": false,
161
+ "description": "Controlled slider value"
162
+ }
163
+ }
164
+ },
60
165
  "ArticleHero": {
61
166
  "name": "ArticleHero",
62
167
  "source": "templates/ArticleHero/ArticleHero.tsx",
@@ -806,6 +911,35 @@
806
911
  }
807
912
  }
808
913
  },
914
+ "CountryLinkGrid": {
915
+ "name": "CountryLinkGrid",
916
+ "source": "templates/CountryLinkGrid/CountryLinkGrid.tsx",
917
+ "props": {
918
+ "description": {
919
+ "type": "string",
920
+ "required": false,
921
+ "description": "Intro paragraph rendered under the heading",
922
+ "default": "Explain how this specific feature helps your user."
923
+ },
924
+ "headingLevel": {
925
+ "type": "CountryLinkGridHeadingLevel",
926
+ "required": false,
927
+ "description": "Heading tag to render. This block usually sits under a page title and beside other regulatory sections, so a lower level is often correct.",
928
+ "default": "h2"
929
+ },
930
+ "items": {
931
+ "type": "CountryLinkGridItem[]",
932
+ "required": false,
933
+ "description": "Countries rendered in the grid. Each is a flag icon plus a country name linking to that country's document."
934
+ },
935
+ "title": {
936
+ "type": "string",
937
+ "required": false,
938
+ "description": "Section heading, e.g. the entity whose passporting list this is",
939
+ "default": "Section title goes here"
940
+ }
941
+ }
942
+ },
809
943
  "DayNightTransition": {
810
944
  "name": "DayNightTransition",
811
945
  "source": "templates/DayNightTransition/DayNightTransition.tsx",
@@ -887,6 +1021,63 @@
887
1021
  }
888
1022
  }
889
1023
  },
1024
+ "DocumentChips": {
1025
+ "name": "DocumentChips",
1026
+ "source": "templates/DocumentChips/DocumentChips.tsx",
1027
+ "props": {
1028
+ "allowMultipleOpen": {
1029
+ "type": "boolean",
1030
+ "required": false,
1031
+ "description": "Allow more than one group open at a time. Off by default, matching the reference block, which opens the first group and one group at a time.",
1032
+ "default": false
1033
+ },
1034
+ "description": {
1035
+ "type": "string",
1036
+ "required": false,
1037
+ "description": "Optional intro paragraph rendered under the heading"
1038
+ },
1039
+ "groups": {
1040
+ "type": "DocumentChipsGroup[]",
1041
+ "required": false,
1042
+ "description": "Expandable groups, each holding a set of document chips"
1043
+ },
1044
+ "headingLevel": {
1045
+ "type": "DocumentChipsHeadingLevel",
1046
+ "required": false,
1047
+ "description": "Heading tag to render. Demote when the page already owns the heading hierarchy above this section.",
1048
+ "default": "h2"
1049
+ },
1050
+ "iconAlt": {
1051
+ "type": "string",
1052
+ "required": false,
1053
+ "description": "Alt text for the file mark. Empty by default: the mark is decorative next to the document title it sits beside.",
1054
+ "default": ""
1055
+ },
1056
+ "iconSrc": {
1057
+ "type": "string",
1058
+ "required": false,
1059
+ "description": "Default file mark rendered at the start of every chip, as an `<img>`. This is a fixed brand asset, not a themeable icon — override it only to point at a different hosted mark.",
1060
+ "default": "https://media.ffycdn.net/eu/deriv/d/8d33a322464c4809a9d01119104caa0d"
1061
+ },
1062
+ "onLanguageSelect": {
1063
+ "type": "((document: DocumentChipsDocument, event: MouseEvent<HTMLAnchorElement, MouseEvent>) => void)",
1064
+ "required": false,
1065
+ "description": "Called when a chip's language link is activated. When supplied, the link's default navigation is prevented — wire this to `LanguageSelectModal`. When omitted the link navigates normally."
1066
+ },
1067
+ "title": {
1068
+ "type": "string",
1069
+ "required": false,
1070
+ "description": "Section heading rendered above the groups. Pass `\"\"` to drop it",
1071
+ "default": "Section title goes here"
1072
+ },
1073
+ "variant": {
1074
+ "type": "DocumentChipsVariant",
1075
+ "required": false,
1076
+ "description": "`accordion` — expandable groups (default). `flat` — a single chip list with no accordion chrome.",
1077
+ "default": "accordion"
1078
+ }
1079
+ }
1080
+ },
890
1081
  "DotLottieInView": {
891
1082
  "name": "DotLottieInView",
892
1083
  "source": "components/DotLottieInView/DotLottieInView.tsx",
@@ -1063,6 +1254,40 @@
1063
1254
  }
1064
1255
  }
1065
1256
  },
1257
+ "EntityInfoSection": {
1258
+ "name": "EntityInfoSection",
1259
+ "source": "templates/EntityInfoSection/EntityInfoSection.tsx",
1260
+ "props": {
1261
+ "bullets": {
1262
+ "type": "string[]",
1263
+ "required": false,
1264
+ "description": "Optional bulleted list rendered below the paragraph — used by entities that enumerate their regulated activities."
1265
+ },
1266
+ "description": {
1267
+ "type": "string",
1268
+ "required": false,
1269
+ "description": "Registration / licensing paragraph",
1270
+ "default": "Explain how this specific feature helps your user."
1271
+ },
1272
+ "headingLevel": {
1273
+ "type": "EntityInfoSectionHeadingLevel",
1274
+ "required": false,
1275
+ "description": "Heading tag to render. These blocks repeat down a page under a single page title, so a lower level is often correct.",
1276
+ "default": "h2"
1277
+ },
1278
+ "links": {
1279
+ "type": "EntityInfoSectionLink[]",
1280
+ "required": false,
1281
+ "description": "Coral arrow links rendered below the copy, e.g. \"View licence\". Laid out in a row that wraps, matching the reference section."
1282
+ },
1283
+ "name": {
1284
+ "type": "string",
1285
+ "required": false,
1286
+ "description": "Legal entity name, e.g. \"Deriv (FX) Ltd\"",
1287
+ "default": "Section title goes here"
1288
+ }
1289
+ }
1290
+ },
1066
1291
  "FaqAccordion": {
1067
1292
  "name": "FaqAccordion",
1068
1293
  "source": "templates/FaqAccordion/FaqAccordion.tsx",
@@ -1826,6 +2051,16 @@
1826
2051
  "required": true,
1827
2052
  "description": "Visible label on the link, e.g. \"Learn more\""
1828
2053
  },
2054
+ "mediaSizes": {
2055
+ "type": "string",
2056
+ "required": false,
2057
+ "description": "Browser layout contract for `mediaSrcSet`. Defaults to the column this template actually lays out (`(min-width: 992px) 50vw, 100vw`), so a consumer supplying only `mediaSrcSet` still gets a correct pick."
2058
+ },
2059
+ "mediaSrcSet": {
2060
+ "type": "string",
2061
+ "required": false,
2062
+ "description": "Responsive candidates for `mediaUrl`, as a standard `srcset` string. Render-time only — a CMS stores one master URL and the renderer derives these. Without them the same file is sent to every device: the desktop media column is ~560 CSS px (1120 at DPR 2, so a 1200w rendition), while a phone paints the same slot at ~382 CSS px and needs 800w. Measured on one asset: 64,736 B against 40,120 B for the width that actually paints. Ignored for `\"lottie\"` items — an animation is played, not resized."
2063
+ },
1829
2064
  "mediaType": {
1830
2065
  "type": "\"image\" | \"lottie\"",
1831
2066
  "required": false,
@@ -1836,6 +2071,16 @@
1836
2071
  "required": true,
1837
2072
  "description": "URL to the .lottie file or any image asset (png, jpg, svg, webp…)"
1838
2073
  },
2074
+ "posterSizes": {
2075
+ "type": "string",
2076
+ "required": false,
2077
+ "description": "Layout contract for `posterSrcSet`. Same default as `mediaSizes`."
2078
+ },
2079
+ "posterSrcSet": {
2080
+ "type": "string",
2081
+ "required": false,
2082
+ "description": "Responsive candidates for `posterUrl`. Same contract as `mediaSrcSet`."
2083
+ },
1839
2084
  "posterUrl": {
1840
2085
  "type": "string",
1841
2086
  "required": false,
@@ -2411,6 +2656,49 @@
2411
2656
  }
2412
2657
  }
2413
2658
  },
2659
+ "LanguageSelectModal": {
2660
+ "name": "LanguageSelectModal",
2661
+ "source": "templates/LanguageSelectModal/LanguageSelectModal.tsx",
2662
+ "props": {
2663
+ "closeLabel": {
2664
+ "type": "string",
2665
+ "required": false,
2666
+ "description": "Accessible label for the close button",
2667
+ "default": "Close"
2668
+ },
2669
+ "container": {
2670
+ "type": "HTMLElement | null",
2671
+ "required": false,
2672
+ "description": "Element the dialog is portalled into. Defaults to `document.body`. Pass a node when the app renders inside a shadow root or a modal host."
2673
+ },
2674
+ "headingLevel": {
2675
+ "type": "\"h2\" | \"h3\"",
2676
+ "required": false,
2677
+ "description": "Heading tag for the title. The dialog is a top-level surface, so `h2` is usually right regardless of the page's own hierarchy.",
2678
+ "default": "h2"
2679
+ },
2680
+ "onClose": {
2681
+ "type": "() => void",
2682
+ "required": true,
2683
+ "description": "Called when the user dismisses the dialog — close button, Escape key, or a click on the scrim. The consumer owns the open state."
2684
+ },
2685
+ "open": {
2686
+ "type": "boolean",
2687
+ "required": true,
2688
+ "description": "Whether the dialog is rendered. Nothing mounts while false"
2689
+ },
2690
+ "options": {
2691
+ "type": "LanguageSelectModalOption[]",
2692
+ "required": false
2693
+ },
2694
+ "title": {
2695
+ "type": "string",
2696
+ "required": false,
2697
+ "description": "Dialog title, rendered centred and used as the dialog's accessible name",
2698
+ "default": "Select your language"
2699
+ }
2700
+ }
2701
+ },
2414
2702
  "Link": {
2415
2703
  "name": "Link",
2416
2704
  "source": "components/Link/Link.tsx",
@@ -2451,6 +2739,50 @@
2451
2739
  }
2452
2740
  }
2453
2741
  },
2742
+ "LinkModal": {
2743
+ "name": "LinkModal",
2744
+ "source": "components/LinkModal/LinkModal.tsx",
2745
+ "props": {
2746
+ "children": {
2747
+ "type": "ReactNode",
2748
+ "required": false,
2749
+ "description": "Dialog body — any content the consumer supplies"
2750
+ },
2751
+ "closeLabel": {
2752
+ "type": "string",
2753
+ "required": false,
2754
+ "description": "Accessible label for the close button",
2755
+ "default": "Close"
2756
+ },
2757
+ "container": {
2758
+ "type": "HTMLElement | null",
2759
+ "required": false,
2760
+ "description": "Element the dialog is portalled into. Defaults to `document.body`. Pass a node when the app renders inside a shadow root or a modal host."
2761
+ },
2762
+ "headingLevel": {
2763
+ "type": "\"h2\" | \"h3\"",
2764
+ "required": false,
2765
+ "description": "Heading tag for the title. The dialog is a top-level surface, so `h2` is usually right regardless of the page's own hierarchy.",
2766
+ "default": "h2"
2767
+ },
2768
+ "onClose": {
2769
+ "type": "() => void",
2770
+ "required": true,
2771
+ "description": "Called when the user dismisses the dialog — close button, Escape key, or a click on the scrim. The consumer owns the open state."
2772
+ },
2773
+ "open": {
2774
+ "type": "boolean",
2775
+ "required": true,
2776
+ "description": "Whether the dialog is rendered. Nothing mounts while false"
2777
+ },
2778
+ "title": {
2779
+ "type": "string",
2780
+ "required": false,
2781
+ "description": "Dialog title, rendered centred and used as the dialog's accessible name",
2782
+ "default": "Dialog title"
2783
+ }
2784
+ }
2785
+ },
2454
2786
  "LogoMarquee": {
2455
2787
  "name": "LogoMarquee",
2456
2788
  "source": "templates/LogoMarquee/LogoMarquee.tsx",
@@ -2648,6 +2980,68 @@
2648
2980
  }
2649
2981
  }
2650
2982
  },
2983
+ "OptionsTypes": {
2984
+ "name": "OptionsTypes",
2985
+ "source": "templates/OptionsTypes/OptionsTypes.tsx",
2986
+ "props": {
2987
+ "activeId": {
2988
+ "type": "string",
2989
+ "required": false,
2990
+ "description": "Selected item for controlled tab usage."
2991
+ },
2992
+ "defaultActiveId": {
2993
+ "type": "string",
2994
+ "required": false,
2995
+ "description": "Initially selected item for uncontrolled tab usage."
2996
+ },
2997
+ "disclaimer": {
2998
+ "type": "string",
2999
+ "required": false,
3000
+ "description": "Optional small-print note below the block."
3001
+ },
3002
+ "heading": {
3003
+ "type": "string",
3004
+ "required": false,
3005
+ "description": "Section heading.",
3006
+ "default": "Section title goes here"
3007
+ },
3008
+ "headingLevel": {
3009
+ "type": "\"h2\" | \"h3\" | \"h4\"",
3010
+ "required": false,
3011
+ "description": "Heading element used for the section title.",
3012
+ "default": "h2"
3013
+ },
3014
+ "items": {
3015
+ "type": "OptionsTypesItem[]",
3016
+ "required": false,
3017
+ "description": "Ordered option-type content.",
3018
+ "defaultExpression": "OPTIONS_TYPES_PLACEHOLDER_ITEMS"
3019
+ },
3020
+ "marketsLabel": {
3021
+ "type": "string",
3022
+ "required": false,
3023
+ "description": "Label above the market list.",
3024
+ "default": "Markets available"
3025
+ },
3026
+ "onChange": {
3027
+ "type": "((id: string) => void)",
3028
+ "required": false,
3029
+ "description": "Optional selection callback."
3030
+ },
3031
+ "platformsLabel": {
3032
+ "type": "string",
3033
+ "required": false,
3034
+ "description": "Label above the platform list.",
3035
+ "default": "Trade on"
3036
+ },
3037
+ "variant": {
3038
+ "type": "OptionsTypesVariant",
3039
+ "required": false,
3040
+ "description": "`tabs` shows a selectable list of option types. `single` shows one option in a media/content split.",
3041
+ "default": "tabs"
3042
+ }
3043
+ }
3044
+ },
2651
3045
  "Pagination": {
2652
3046
  "name": "Pagination",
2653
3047
  "source": "components/Pagination/Pagination.tsx",
@@ -3101,6 +3495,11 @@
3101
3495
  "required": false,
3102
3496
  "description": "Optional CSS class name"
3103
3497
  },
3498
+ "idPrefix": {
3499
+ "type": "string",
3500
+ "required": false,
3501
+ "description": "Stable prefix used to connect tabs to their tab panels."
3502
+ },
3104
3503
  "items": {
3105
3504
  "type": "TabItem[]",
3106
3505
  "required": true,