@deriv-com/dds-marketing 1.1.2 → 1.1.3

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.
Files changed (226) hide show
  1. package/.llm/components/accordion.md +4 -0
  2. package/.llm/components/accordionitem.md +4 -0
  3. package/.llm/components/aspectratio.md +4 -0
  4. package/.llm/components/awards.md +4 -0
  5. package/.llm/components/background.md +4 -0
  6. package/.llm/components/badge.md +7 -3
  7. package/.llm/components/bottomsheet.md +7 -3
  8. package/.llm/components/breadcrumb.md +4 -0
  9. package/.llm/components/breadcrumbitem.md +4 -0
  10. package/.llm/components/button.md +4 -0
  11. package/.llm/components/buttonicon.md +10 -6
  12. package/.llm/components/card.md +5 -1
  13. package/.llm/components/cardbody.md +5 -1
  14. package/.llm/components/cardbutton.md +4 -0
  15. package/.llm/components/checkbox.md +1 -1
  16. package/.llm/components/comparisoncards.md +4 -0
  17. package/.llm/components/comparisontable.md +4 -0
  18. package/.llm/components/ctabanner.md +4 -0
  19. package/.llm/components/ctabannerslider.md +4 -0
  20. package/.llm/components/datatable.md +4 -0
  21. package/.llm/components/divider.md +4 -0
  22. package/.llm/components/downloadbanner.md +4 -0
  23. package/.llm/components/dropdownmenu.md +9 -5
  24. package/.llm/components/estimator.md +336 -0
  25. package/.llm/components/faqaccordion.md +4 -0
  26. package/.llm/components/featurebullets.md +4 -0
  27. package/.llm/components/featurecards.md +5 -1
  28. package/.llm/components/featurecardscarousel.md +4 -0
  29. package/.llm/components/featurescroll.md +4 -0
  30. package/.llm/components/featuresplit.md +4 -0
  31. package/.llm/components/featurestack.md +4 -0
  32. package/.llm/components/filterchip.md +5 -1
  33. package/.llm/components/footer.md +4 -0
  34. package/.llm/components/footergroup.md +4 -0
  35. package/.llm/components/grid.md +4 -0
  36. package/.llm/components/icon.md +9 -5
  37. package/.llm/components/illustrationcard.md +4 -0
  38. package/.llm/components/illustrationscene.md +4 -0
  39. package/.llm/components/imagebanner.md +5 -1
  40. package/.llm/components/landinghero.md +4 -0
  41. package/.llm/components/link.md +5 -1
  42. package/.llm/components/logocolumns.md +4 -0
  43. package/.llm/components/logorows.md +4 -0
  44. package/.llm/components/menuitem.md +6 -2
  45. package/.llm/components/navbar.md +5 -1
  46. package/.llm/components/navbaritem.md +4 -0
  47. package/.llm/components/navbarmenu.md +4 -0
  48. package/.llm/components/navbarmenugroup.md +4 -0
  49. package/.llm/components/navbarpanel.md +4 -0
  50. package/.llm/components/navbarswitcher.md +10 -6
  51. package/.llm/components/navbarswitcheroption.md +4 -0
  52. package/.llm/components/option.md +5 -1
  53. package/.llm/components/pageheader.md +4 -0
  54. package/.llm/components/pagination.md +4 -0
  55. package/.llm/components/paginationdots.md +4 -0
  56. package/.llm/components/producthero.md +4 -0
  57. package/.llm/components/removablechip.md +5 -1
  58. package/.llm/components/resourcebanner.md +4 -0
  59. package/.llm/components/row.md +4 -0
  60. package/.llm/components/scenescroll.md +4 -0
  61. package/.llm/components/scroller.md +4 -0
  62. package/.llm/components/searchinput.md +4 -0
  63. package/.llm/components/segmentedcontrol.md +5 -1
  64. package/.llm/components/segmentedcontrolitem.md +6 -2
  65. package/.llm/components/select.md +4 -0
  66. package/.llm/components/selectchip.md +4 -0
  67. package/.llm/components/spinner.md +4 -0
  68. package/.llm/components/stack.md +4 -0
  69. package/.llm/components/stats.md +4 -0
  70. package/.llm/components/statusdot.md +4 -0
  71. package/.llm/components/steps.md +4 -0
  72. package/.llm/components/stickycards.md +4 -0
  73. package/.llm/components/subdomainnavbar.md +5 -1
  74. package/.llm/components/tab.md +6 -2
  75. package/.llm/components/table.md +4 -0
  76. package/.llm/components/tablebody.md +4 -0
  77. package/.llm/components/tablecell.md +4 -0
  78. package/.llm/components/tablehead.md +4 -0
  79. package/.llm/components/tableheadercell.md +4 -0
  80. package/.llm/components/tablerow.md +4 -0
  81. package/.llm/components/tablist.md +4 -0
  82. package/.llm/components/teamgrid.md +4 -0
  83. package/.llm/components/testimonialrow.md +4 -0
  84. package/.llm/components/testimonialslider.md +4 -0
  85. package/.llm/components/textarea.md +4 -0
  86. package/.llm/components/textinput.md +5 -1
  87. package/.llm/components/textscroll.md +4 -0
  88. package/.llm/components/tiers.md +4 -0
  89. package/.llm/components/typography.md +4 -0
  90. package/.llm/digest/accordion.md +1 -1
  91. package/.llm/digest/accordionitem.md +1 -1
  92. package/.llm/digest/aspectratio.md +1 -1
  93. package/.llm/digest/awards.md +1 -1
  94. package/.llm/digest/background.md +1 -1
  95. package/.llm/digest/badge.md +1 -1
  96. package/.llm/digest/bottomsheet.md +1 -1
  97. package/.llm/digest/breadcrumb.md +1 -1
  98. package/.llm/digest/breadcrumbitem.md +1 -1
  99. package/.llm/digest/button.md +1 -1
  100. package/.llm/digest/buttonicon.md +1 -1
  101. package/.llm/digest/card.md +1 -1
  102. package/.llm/digest/cardbody.md +1 -1
  103. package/.llm/digest/cardbutton.md +1 -1
  104. package/.llm/digest/checkbox.md +1 -1
  105. package/.llm/digest/comparisoncards.md +1 -1
  106. package/.llm/digest/comparisontable.md +1 -1
  107. package/.llm/digest/ctabanner.md +1 -1
  108. package/.llm/digest/ctabannerslider.md +1 -1
  109. package/.llm/digest/datatable.md +1 -1
  110. package/.llm/digest/divider.md +1 -1
  111. package/.llm/digest/downloadbanner.md +1 -1
  112. package/.llm/digest/dropdownmenu.md +1 -1
  113. package/.llm/digest/estimator.md +66 -0
  114. package/.llm/digest/faqaccordion.md +1 -1
  115. package/.llm/digest/featurebullets.md +1 -1
  116. package/.llm/digest/featurecards.md +1 -1
  117. package/.llm/digest/featurecardscarousel.md +1 -1
  118. package/.llm/digest/featurescroll.md +1 -1
  119. package/.llm/digest/featuresplit.md +1 -1
  120. package/.llm/digest/featurestack.md +1 -1
  121. package/.llm/digest/filterchip.md +1 -1
  122. package/.llm/digest/footer.md +1 -1
  123. package/.llm/digest/footergroup.md +1 -1
  124. package/.llm/digest/grid.md +1 -1
  125. package/.llm/digest/icon.md +1 -1
  126. package/.llm/digest/illustrationcard.md +1 -1
  127. package/.llm/digest/illustrationscene.md +1 -1
  128. package/.llm/digest/imagebanner.md +2 -2
  129. package/.llm/digest/landinghero.md +1 -1
  130. package/.llm/digest/link.md +1 -1
  131. package/.llm/digest/logocolumns.md +1 -1
  132. package/.llm/digest/logorows.md +1 -1
  133. package/.llm/digest/menuitem.md +1 -1
  134. package/.llm/digest/navbar.md +1 -1
  135. package/.llm/digest/navbaritem.md +1 -1
  136. package/.llm/digest/navbarmenu.md +1 -1
  137. package/.llm/digest/navbarmenugroup.md +1 -1
  138. package/.llm/digest/navbarpanel.md +1 -1
  139. package/.llm/digest/navbarswitcher.md +1 -1
  140. package/.llm/digest/navbarswitcheroption.md +1 -1
  141. package/.llm/digest/option.md +1 -1
  142. package/.llm/digest/pageheader.md +1 -1
  143. package/.llm/digest/pagination.md +1 -1
  144. package/.llm/digest/paginationdots.md +1 -1
  145. package/.llm/digest/producthero.md +1 -1
  146. package/.llm/digest/removablechip.md +1 -1
  147. package/.llm/digest/resourcebanner.md +1 -1
  148. package/.llm/digest/row.md +1 -1
  149. package/.llm/digest/scenescroll.md +1 -1
  150. package/.llm/digest/scroller.md +1 -1
  151. package/.llm/digest/searchinput.md +1 -1
  152. package/.llm/digest/segmentedcontrol.md +1 -1
  153. package/.llm/digest/segmentedcontrolitem.md +2 -2
  154. package/.llm/digest/select.md +1 -1
  155. package/.llm/digest/selectchip.md +1 -1
  156. package/.llm/digest/spinner.md +1 -1
  157. package/.llm/digest/stack.md +1 -1
  158. package/.llm/digest/stats.md +1 -1
  159. package/.llm/digest/statusdot.md +1 -1
  160. package/.llm/digest/steps.md +1 -1
  161. package/.llm/digest/stickycards.md +1 -1
  162. package/.llm/digest/subdomainnavbar.md +1 -1
  163. package/.llm/digest/tab.md +1 -1
  164. package/.llm/digest/table.md +1 -1
  165. package/.llm/digest/tablebody.md +1 -1
  166. package/.llm/digest/tablecell.md +1 -1
  167. package/.llm/digest/tablehead.md +1 -1
  168. package/.llm/digest/tableheadercell.md +1 -1
  169. package/.llm/digest/tablerow.md +1 -1
  170. package/.llm/digest/tablist.md +1 -1
  171. package/.llm/digest/teamgrid.md +1 -1
  172. package/.llm/digest/testimonialrow.md +1 -1
  173. package/.llm/digest/testimonialslider.md +1 -1
  174. package/.llm/digest/textarea.md +1 -1
  175. package/.llm/digest/textinput.md +1 -1
  176. package/.llm/digest/textscroll.md +1 -1
  177. package/.llm/digest/tiers.md +1 -1
  178. package/.llm/digest/typography.md +1 -1
  179. package/.llm/index.md +2 -1
  180. package/.llm/tokens.md +1 -0
  181. package/AGENTS.md +1 -0
  182. package/README.md +28 -3
  183. package/dist/components/blocks/comparison-cards/comparison-cards-impl.css +0 -12
  184. package/dist/components/blocks/estimator/Estimator.css +206 -0
  185. package/dist/components/blocks/estimator/Estimator.d.ts +27 -0
  186. package/dist/components/blocks/estimator/Estimator.js +61 -0
  187. package/dist/components/blocks/estimator/Estimator.types.d.ts +63 -0
  188. package/dist/components/blocks/estimator/Estimator.types.js +25 -0
  189. package/dist/components/blocks/estimator/estimator-impl.css +159 -0
  190. package/dist/components/blocks/image-banner/ImageBanner.d.ts +1 -0
  191. package/dist/components/blocks/image-banner/ImageBanner.js +2 -1
  192. package/dist/components/blocks/image-banner/ImageBanner.types.d.ts +1 -1
  193. package/dist/components/blocks/image-banner/image-banner-impl.css +7 -51
  194. package/dist/components/core/segmented-control-item/SegmentedControlItem.types.d.ts +1 -1
  195. package/dist/components/core/select/Select.css +2 -0
  196. package/dist/components/core/select/select-impl.css +58 -0
  197. package/dist/components/core/text-area/TextArea.css +2 -0
  198. package/dist/components/core/text-area/text-area-impl.css +54 -0
  199. package/dist/components/core/text-input/TextInput.css +2 -0
  200. package/dist/components/core/text-input/text-input-impl.css +63 -0
  201. package/dist/components/estimator-data.d.ts +29 -0
  202. package/dist/components/estimator-data.js +12 -0
  203. package/dist/components/index.d.ts +3 -0
  204. package/dist/components/index.js +2 -0
  205. package/dist/icons/accounts.d.ts +1 -0
  206. package/dist/icons/accounts.js +1 -0
  207. package/dist/icons/app-stores.d.ts +1 -0
  208. package/dist/icons/app-stores.js +1 -0
  209. package/dist/icons/currency.d.ts +1 -0
  210. package/dist/icons/currency.js +1 -0
  211. package/dist/icons/flag.d.ts +1 -0
  212. package/dist/icons/flag.js +1 -0
  213. package/dist/icons/illustrative.d.ts +1 -0
  214. package/dist/icons/illustrative.js +1 -0
  215. package/dist/icons/index.d.ts +1 -0
  216. package/dist/icons/index.js +4 -0
  217. package/dist/icons/markets.d.ts +1 -0
  218. package/dist/icons/markets.js +1 -0
  219. package/dist/icons/social.d.ts +1 -0
  220. package/dist/icons/social.js +1 -0
  221. package/dist/icons/system.d.ts +1 -0
  222. package/dist/icons/system.js +1 -0
  223. package/dist/icons/trade.d.ts +1 -0
  224. package/dist/icons/trade.js +1 -0
  225. package/dist/marketing.css +2 -0
  226. package/package.json +44 -2
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TableHeaderCell
4
4
 
5
+ The name of one table column.
6
+
7
+ ## Why it is built this way
8
+
5
9
  The name of a column, announced before every value under it. That is the whole of why it is a component rather than a styled cell: a screen reader reads the header before each cell in the column, which is how a reader knows what a number means without looking it up — and it only happens if the header is a header in the markup.
6
10
 
7
11
  Where the column can be sorted, the header holds the control that sorts it. A button rather than a click handler on the cell, because sorting is an action: it has to be reachable by keyboard, announced as pressable, and able to say which way the column is currently ordered.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TableRow
4
4
 
5
+ One row of a Table.
6
+
7
+ ## Why it is built this way
8
+
5
9
  One row of a table: the cells that answer the same questions in the same order as every other row. It owns the rule under it and whether it reads as picked, and nothing about what any cell holds.
6
10
 
7
11
  Being picked is drawn here rather than on the checkbox that sets it, because selection is a fact about the row: a reader scanning a table needs to see which rows are in the set without checking every box in the first column.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TabList
4
4
 
5
+ Switches between views of the same content.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A strip of comparable versions of one thing, one of them showing at a time. What it says is that these are the same offer seen differently — a billing period, a platform, a market class — rather than places the site has. Two at least: selected means selected against something, and a strip of one is a heading that highlights.
6
10
 
7
11
  It holds which tab is current and nothing else. The content each tab reveals belongs to the page, because a marketing page already has all of it written and the strip is only deciding which slice shows. That is why there is no panel here and no ARIA tab role: role="tab" is a promise about a tabpanel this component cannot see, and a promise it cannot keep is worse than the group it actually is.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TeamGrid
4
4
 
5
+ A grid of the people behind a company, with photo, name and role.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A section that sets out the people behind a company: a heading, and a grid of people under it — each a square photograph, their name, what they do and, where they have one, a link to a profile of theirs elsewhere. The first few show at once, and a button under the grid shows the rest and hides them again.
6
10
 
7
11
  One column on a phone, two from the fold and four at full width, so the first four people are one row on a desktop and the button under that row is what makes the list longer.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TestimonialRow
4
4
 
5
+ An overall rating over a scrollable row of customer reviews.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A section that lets a review service's numbers back the page: a heading with the overall rating under it — and a way to where the reviews were collected — over a row of rated reviews the reader moves along, each a short review under its star rating with the reviewer's name, and two arrows under the row that step it a card at a time. Several are in view at once and nothing moves on its own.
6
10
 
7
11
  The reference design's Testimonial in its review-row form. It names no review platform: the score, its wording and where it links are the page's, so the same section serves whichever service the reviews came from.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TestimonialSlider
4
4
 
5
+ Customer quotes shown one at a time, each with who said it.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A section that lets the people who use the product say what it did for them: a heading over one quote at a time, in a card, with the name of who said it. Two or more quotes rotate in place — one in view, the next fading in where it stood — and dots show where the reader is and move to any quote pressed.
6
10
 
7
11
  The reference design's Testimonial in its quote form. Its review-row form — rated reviews collected by a review service — is TestimonialRow.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TextArea
4
4
 
5
+ A field for a longer message, such as on a contact form.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A field for what a visitor wants to say in their own words — the message on a contact form, the 'tell us about your project' on an enquiry, the reason someone is applying to partner. One value still, like TextInput, but a value with no shape the page can guess at.
6
10
 
7
11
  That is the whole reason it is not TextInput with a taller box. A single line shows a reader a sliver of what they wrote and no way to read it back, and the one place they most want to check themselves is the paragraph they are about to send a stranger. So it grows as they type, up to a limit, and past that limit it scrolls rather than pushing the submit button off the screen.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TextInput
4
4
 
5
+ A single-line text field.
6
+
7
+ ## Why it is built this way
8
+
5
9
  One line of text a visitor types before they are a customer. A marketing page asks for very little and has no standing to ask for more: an email for a newsletter, a name and a message on a contact form, a work address to book a demo. Every one of those is a stranger deciding whether the thing on offer is worth handing something over for, and the field is where that decision gets made or lost.
6
10
 
7
11
  That is the whole difference from a field in an application, and it is why this is not Product's TextInput with fewer props. An app's field is filled by someone who has already signed up, inside a task they have committed to, and can afford to ask for an account number in a particular format. A landing page's field is filled by someone with no account, no stake, and a back button — so it asks for one thing, says what it will do with it, and is legible enough at a glance that nobody has to work out what goes in it.
@@ -438,7 +442,7 @@ Ornaments and furniture, none of which is the label. A glyph names nothing and a
438
442
 
439
443
  ```tsx
440
444
  import { TextInput } from '@deriv-com/dds-marketing'
441
- import { EnvelopeRegularIcon, LockRegularIcon } from '@deriv-com/quill-icons-web'
445
+ import { EnvelopeRegularIcon, LockRegularIcon } from '@deriv-com/dds-marketing/icons'
442
446
 
443
447
  // prefix — a head you should not have to type
444
448
  <TextInput label="Website" type="url" prefix="https://" placeholder="example.com" />
@@ -2,6 +2,10 @@
2
2
 
3
3
  # TextScroll
4
4
 
5
+ One large statement whose words brighten as the reader scrolls.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A full-width section holding one large statement — a mission, a brand message — whose words brighten one after another as the reader scrolls past, from dimmed to full strength, so the sentence is read at the pace the page is moved.
6
10
 
7
11
  The reference design's TextScroll. The reveal is scrubbed by the scroll itself rather than timed: each word runs down the section's own view timeline a step behind the one before it, forward as the reader scrolls down and back again as they scroll up, and stands still while the page does. The sentence is in the page's first HTML as one paragraph of real words and spaces, so a reader with no script, a browser with no scroll timeline and a reader who asked for less movement all get the whole statement at full strength from the start; the dim is only ever something the scroll applies.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # Tiers
4
4
 
5
+ A row of partnership tiers, each with what it offers and how to reach it.
6
+
7
+ ## Why it is built this way
8
+
5
9
  A partnership-tier section: a centred heading over an ordered row of tiers, each a medal, a name and the stage it stands for, a card stating what the tier gives, and the bar a partner clears to reach it — with an optional way on under the row.
6
10
 
7
11
  It shows how rewards grow with performance, Bronze to Platinum, and the order is the argument: each tier is a step up from the one before it. The tiers are a real ordered list, so the count and each tier's place reach a screen reader too. At full width they share one row and a rule runs through the medals, joining them into one track; below that they fall to two columns and then one, where each tier's words start at the edge.
@@ -2,6 +2,10 @@
2
2
 
3
3
  # Typography
4
4
 
5
+ Sets text in one of the type roles.
6
+
7
+ ## Why it is built this way
8
+
5
9
  Copy, set in one of the page's type roles. It is the component that finally separates what a line of text is in the document from how large it is drawn — `as` says the first and `variant` says the second, and neither implies the other.
6
10
 
7
11
  That separation is the whole reason it exists. Every heading role in this package carries the same sentence — a size, not an instruction — because a page that wants a hero-sized line reaches for h1 and gets an <h1>, and the second one on the page is a document with two top-level headings. Here the scale is a prop and the element is a different prop, so a section heading set at hero scale is `as="h2" variant="h1"` and says exactly that.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Accordion
4
4
 
5
- A stack of rows whose headings stay and whose detail is put away until the reader asks for it. …
5
+ A stack of headings whose detail expands when the reader asks for it
6
6
 
7
7
  `import { Accordion } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # AccordionItem
4
4
 
5
- One row of an Accordion: a heading that is always there, and the detail under it that is not. …
5
+ One row of an Accordion: a heading that stays, and detail that expands
6
6
 
7
7
  `import { AccordionItem } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # AspectRatio
4
4
 
5
- A box that holds one shape whatever is put in it, so a page reserves the room a picture will take before the picture arrives. …
5
+ Holds its content to a fixed shape and reserves the space before it loads
6
6
 
7
7
  `import { AspectRatio } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Awards
4
4
 
5
- A section of social proof that lists the industry awards a company has won, each a badge between two laurels: a laurel, the award's name and its issuer, and the same laurel mirrored. …
5
+ Lists the industry awards a company has won, each framed between two laurels
6
6
 
7
7
  `import { Awards } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Background
4
4
 
5
- A ground a section or a block sits on, painted with a pattern rather than a flat fill — a halftone, an aurora, a mesh, a rule grid or rings. …
5
+ A patterned ground for a section to sit on
6
6
 
7
7
  `import { Background } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Badge
4
4
 
5
- A short word marking something as new, chosen or reduced. …
5
+ A short label marking something as new, chosen or reduced
6
6
 
7
7
  `import { Badge } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # BottomSheet
4
4
 
5
- A panel that rises from the bottom edge to hold a single focused task on small screens. …
5
+ A panel that rises from the bottom edge for one focused task on small screens
6
6
 
7
7
  `import { BottomSheet } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Breadcrumb
4
4
 
5
- The trail of ancestors above the current page on a marketing site, showing the visitor where they are in the site hierarchy. …
5
+ Shows where the current page sits in the site, with links back up
6
6
 
7
7
  `import { Breadcrumb } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # BreadcrumbItem
4
4
 
5
- One level in a Breadcrumb on a marketing site. It renders either a link back to that level or, for the level the visitor is already on, plain text marked as the current page. …
5
+ One level in a Breadcrumb
6
6
 
7
7
  `import { BreadcrumbItem } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Button
4
4
 
5
- Drives a visitor toward a conversion goal — a signup page, a pricing page, a demo booking — or performs the one action a section asks for, such as sending a newsletter form or opening a video. …
5
+ Triggers the one action a section asks for, such as signing up
6
6
 
7
7
  `import { Button } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ButtonIcon
4
4
 
5
- One press carried by a glyph alone, in the space a label would need. …
5
+ Triggers an action with an icon alone
6
6
 
7
7
  `import { ButtonIcon } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Card
4
4
 
5
- A surface that holds content belonging together. …
5
+ A surface that groups related content
6
6
 
7
7
  `import { Card } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # CardBody
4
4
 
5
- Everything a card holds: the words inset from its edges and the picture that reaches them, in one region. The surface around it keeps a fill and a corner and nothing else. …
5
+ The content area of a Card, holding its text and picture
6
6
 
7
7
  `import { CardBody } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # CardButton
4
4
 
5
- A card that responds to a press. …
5
+ A card that acts on press
6
6
 
7
7
  `import { CardButton } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Checkbox
4
4
 
5
- Records a single on-or-off choice that is submitted with the form around it rather than applied the moment it is ticked
5
+ Records an on-or-off choice that is submitted with its form
6
6
 
7
7
  `import { Checkbox } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ComparisonCards
4
4
 
5
- A section that sets two to four options side by side under a heading, each a card of its own that repeats the same short rows — a label and this option's value — so a reader compares the options line by line: Spot against Futures, one account type against another. …
5
+ Sets two to four options side by side as cards, so readers compare them row by row
6
6
 
7
7
  `import { ComparisonCards } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ComparisonTable
4
4
 
5
- A comparison-table section for short, fixed column sets. It renders a rounded card with a light header row, horizontal dividers only, a bold first-column label, and two or three value columns. …
5
+ Compares a short, fixed set of options in a table
6
6
 
7
7
  `import { ComparisonTable } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # CtaBanner
4
4
 
5
- A full-bleed coral band carrying one short promotion and the action it asks for — the strip that breaks a long page with the one thing the page wants done, or closes it. …
5
+ A full-bleed band with one short promotion and the action it asks for
6
6
 
7
7
  `import { CtaBanner } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # CtaBannerSlider
4
4
 
5
- CtaBanner's layout with a slider in it: the same full-bleed coral band, rotating between two or three short promotions. …
5
+ A full-bleed promotional band that rotates between two or three offers
6
6
 
7
7
  `import { CtaBannerSlider } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DataTable
4
4
 
5
- A full-width data-table section for instrument and market-style listings. …
5
+ A full-width table for instrument and market listings
6
6
 
7
7
  `import { DataTable } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Divider
4
4
 
5
- A rule between things, and the quietest way to say that what is on one side of it belongs to a different group from what is on the other. …
5
+ A rule that separates one group of content from another
6
6
 
7
7
  `import { Divider } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DownloadBanner
4
4
 
5
- A section promoting the app's downloads: a card holding a heading and the stores' own badges, each a link to the product in that store. …
5
+ Promotes the app with a heading and links to each app store
6
6
 
7
7
  `import { DownloadBanner } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # DropdownMenu
4
4
 
5
- A button that opens a short set of destinations. Pressing one goes somewhere and the menu shuts — it holds no value and reports no answer, so there is nothing about it to find on reopening. …
5
+ A button that opens a short list of links
6
6
 
7
7
  `import { DropdownMenu } from '@deriv-com/dds-marketing'`
8
8
 
@@ -0,0 +1,66 @@
1
+ <!-- GENERATED from estimator.contract.json. Do not edit. -->
2
+
3
+ # Estimator
4
+
5
+ Sets the page's own fields beside the figures worked out from them: a trading calculator, a converter, an income estimate
6
+
7
+ `import { Estimator } from '@deriv-com/dds-marketing'`
8
+
9
+ ## Reach for it when
10
+
11
+ - A page lets a reader work something out before they act — a margin, a pip value, a swap charge, a conversion, an income estimate
12
+ - The figures change as the reader types or picks, and should be announced as they do
13
+ - The same tool appears on several pages in several forms — the margin, pip and swap calculators are one layout with different fields and figures
14
+
15
+ ## Something else, when
16
+
17
+ - The figures are fixed facts rather than the result of anything the reader enters → **Stats**
18
+ - Options are compared side by side rather than worked out from an input → **ComparisonCards**
19
+ - The tool is a form that sends something — a sign-up, a contact request → **FeatureSplit**
20
+
21
+ ## Never
22
+
23
+ - Fetching or calculating anything. The block has no data source and no formula: a page that wants live prices or a margin computes them and passes the figures in, so the block stays the same on every page and in every test
24
+ - A form that submits. Nothing here is sent anywhere; the way onward is a link or a button to the page that does the real thing
25
+ - A table of many figures. Past six or so results the panel stops being an answer and becomes a listing, which is what DataTable is for
26
+
27
+ ## Props
28
+
29
+ - **ground** `enum` · default "page" — Which of the page's three grounds this section paints. A marketing page is white, and a band that wants to be seen as a band takes one of the other two — so this is how a page builds its rhythm: white, white, grey, white, dark. …
30
+ - `page` — The default, and the page's own white. A section that has nothing to separate itself from what is above it — most of them — and the ground a reader is already on
31
+ - `subtle` — A quiet step off the page, for a band that wants to read as its own section without changing the page's voice. The one to reach for first when two sections need telling apart. …
32
+ - `strong` — `color.bg.brand-strong`, the dark band. It stops the page rather than dividing it, so it is for a section a reader should arrive at — and one per page is usually one more than enough
33
+ - never: Marking importance. Every section on a page painted dark is a page with no emphasis left, and a reader stops reading the grounds as meaning anything. Alternating for its own sake is the same mistake more slowly. And never the brand's own coral, `color.bg.brand`, which is not offered here. …
34
+ - **layout** `enum` · default "stacked" — How the heading and the tool share the section at full width. On a phone both are one column whichever is chosen: the heading, then the card, the inputs above the results
35
+ - `stacked` — The default. The heading centred above a wide card, the inputs beside the results — a calculator with several fields and several figures, where the two panels each need room
36
+ - `split` — The heading and a few lines beside the card, the inputs above the results inside it — a compact tool a page introduces in its own words, a converter or a single estimate
37
+ - never: Varying between two tools on one page. Pick the layout the tool's size calls for, and the page reads as one system
38
+ - **title** `string` · required — Always. What the tool works out, in a few words — 'Trading calculator', 'Buy crypto in seconds', 'Estimate your earnings'
39
+ - never: Instructions. How to use the tool is the fields' own labels, not the heading
40
+ - **description** `string` · optional — A line or two under the title saying what the figures are for or where they come from — 'Live prices, updated every few seconds'
41
+ - never: A disclaimer the results depend on. That is a result's `note`, read beside the figure it qualifies
42
+ - **inputsLabel** `string` · optional — A heading over the inputs panel, where the two panels need naming — 'Calculator' over the fields and 'Results' over the figures. Leave both out for a tool whose fields name themselves
43
+ - never: One panel only. Name both or neither
44
+ - **inputs** `node` · required — Always. The fields the reader fills in — Select, TextInput, SearchInput, SegmentedControl, a slider — in the order they are filled. The page owns their values and works the results out from them
45
+ - never: A submit button. The results update as the fields change; the way onward is `action`
46
+ - **inputActions** `node` · optional — A tool that works its figures out when asked rather than as the reader types — a calculation too slow or too costly to run on every keystroke, or one where half-filled fields would show figures that mislead. …
47
+ - never: A tool whose figures already follow the fields. A button that does what typing already did is a step the reader has to find and press for nothing
48
+ - **onCalculate** `callback` · optional — Whenever inputActions holds a Calculate button: Enter in any of the fields calls it, as the button's own press does — wire the button's onClick to the same function. …
49
+ - never: Sending anything. The form never leaves the page; a tool that submits to a server is a form section, not this
50
+ - **resultsLabel** `string` · optional — A heading over the results panel, with inputsLabel — 'Results', 'You receive'
51
+ - never: One panel only. Name both or neither
52
+ - **results** `data` · required — The figures the inputs produce, in reading order — a `label`, a `value` written exactly as it is to be read, and an optional `note`. Pass an empty list until the inputs are complete, and the panel shows `emptyMessage` instead. …
53
+ - never: A value the page has not worked out. Pass nothing rather than a placeholder figure: a wrong number on a trading page is worse than none
54
+ - **emptyMessage** `string` · optional — What the results panel says before there are figures to show — 'Choose an instrument to see the results'. Translate it with the page
55
+ - never: An error. A failed feed is the page's to say, in a result's note or its own message
56
+ - **action** `node` · optional — The one thing a reader does once they have their figures — 'Open an account', 'Trade now', 'Become a partner'. Under the results, where the reader's eye already is
57
+ - never: More than one action. One tool, one next step
58
+
59
+ ## Inside it
60
+
61
+ - 9 components are refused inside it; the list and the reasons are in the long document.
62
+ - Renders 19 parts: root, inner, header, title, description, tool, panels, inputs, inputs-label, results, results-label, list, result, result-label, result-value, result-note, empty, action, input-actions.
63
+
64
+ ---
65
+
66
+ The reasoning behind each of these, the parts this renders, its states and snippets that compile: `.llm/components/estimator.md`.
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FaqAccordion
4
4
 
5
- A section of questions and answers: a heading over an Accordion, one question open at a time. …
5
+ A section of questions and answers, one open at a time
6
6
 
7
7
  `import { FaqAccordion } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureBullets
4
4
 
5
- A section pairing a claim with a ruled list of what something includes, beside one picture. …
5
+ Pairs a claim and a list of what is included with one picture
6
6
 
7
7
  `import { FeatureBullets } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureCards
4
4
 
5
- A section that opens with a heading and sets a grid of cards under it — the shape a marketing page uses for “why choose us” and “what you get”. …
5
+ A heading over a grid of feature cards
6
6
 
7
7
  `import { FeatureCards } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureCardsCarousel
4
4
 
5
- A feature band that sets its cards in a row a reader moves along rather than a grid: a heading and a line over a row of the page's own cards, the next one's edge showing past the last in view, with dots saying where the reader is and two arrows stepping it a card at a time. …
5
+ A heading over a row of feature cards the reader scrolls through
6
6
 
7
7
  `import { FeatureCardsCarousel } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureScroll
4
4
 
5
- A section that gives a set of things one screen each, with the picture pinned beside the words while a reader is on them. …
5
+ Gives each feature a screen of its own, with its picture pinned beside the text
6
6
 
7
7
  `import { FeatureScroll } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureSplit
4
4
 
5
- A section putting one claim, a line explaining it and a way onward beside a single picture. …
5
+ One claim, a supporting line and a link, beside a single picture
6
6
 
7
7
  `import { FeatureSplit } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FeatureStack
4
4
 
5
- A section that leads with a statement and ends on a picture: a heading, a line under it where the heading needs one, a link on to more where the page has one, and a large illustration — a globe, a map, a product shot — standing on the band's foot. …
5
+ A heading and supporting line above a large illustration
6
6
 
7
7
  `import { FeatureStack } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FilterChip
4
4
 
5
- A token the reader turns on and off in place, standing for one narrowing of the set shown beside it. …
5
+ Turns one filter on or off, in place
6
6
 
7
7
  `import { FilterChip } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Footer
4
4
 
5
- The band that closes a marketing page, and the sections every one of them is made of: whose site this is, where else it goes, what the law obliges it to say, and the line that closes it. …
5
+ The band that closes every marketing page: brand, links, legal text
6
6
 
7
7
  `import { Footer } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # FooterGroup
4
4
 
5
- A named handful of destinations in the footer: a word over a short list. It is the footer's repeating unit and the only thing inside it that repeats — everything else in a footer appears once. …
5
+ A titled list of links in the footer
6
6
 
7
7
  `import { FooterGroup } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Grid
4
4
 
5
- A field of equal tracks, and one measure between them. …
5
+ Lays items out in equal columns with consistent spacing
6
6
 
7
7
  `import { Grid } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Icon
4
4
 
5
- Renders a Quill system glyph at a token size, taking its colour from the text around it. The glyph is imported from @deriv-com/quill-icons-web and passed as the only child. …
5
+ Renders a Quill glyph at a token size, in the colour of the text around it
6
6
 
7
7
  `import { Icon } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # IllustrationCard
4
4
 
5
- A pane of glass holding a piece of product information — a market's price, a balance, a status — in one of three shapes, used as a picture: laid over a photograph or a piece of art, or standing on its own as the image a section shows beside its words. …
5
+ A glass card showing product information, used as an illustration
6
6
 
7
7
  `import { IllustrationCard } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # IllustrationScene
4
4
 
5
- A photograph with an IllustrationCard laid over it — the product shown in the hands of the people who use it: a trade ticket over a trader on the move, a balance over someone at a desk. …
5
+ A photograph with an IllustrationCard laid over it
6
6
 
7
7
  `import { IllustrationScene } from '@deriv-com/dds-marketing'`
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # ImageBanner
4
4
 
5
- A dark card in the middle of a page, pairing a headline and a line under it with a photograph — beside it or behind it, with one action. …
5
+ A dark card pairing a headline and one action with a photograph
6
6
 
7
7
  `import { ImageBanner } from '@deriv-com/dds-marketing'`
8
8
 
@@ -51,7 +51,7 @@ A dark card in the middle of a page, pairing a headline and a line under it with
51
51
  - never: A second action. The card asks for one thing
52
52
  - **media** `node` · required — Always. The page's photograph, through AspectRatio or as an image — people or product. Split and cover crop it to fill the space they give it. Alt text is the page's to give, empty where the photograph is decoration
53
53
  - never: Artwork with words in it. The cover photograph sits under a scrim and the text, and the split crops to fill
54
- - **parallax** `boolean` · default true — The photograph drifts against the scroll as the card passes through the view, by motion.distance.drift over the whole pass, so it reads as further away than the card — the reference design's ParallaxBanner, which this replaces. …
54
+ - **parallax** `boolean` · default true — The photograph drifts against the scroll as the card passes through the view, the drift every block's picture shares — drawn at motion.scale.parallax and moved from motion.translate.parallax-from to motion.translate.parallax-to over the whole pass — so it reads as further away than the card — the reference design's ParallaxBanner, which this replaces. …
55
55
  - never: Holding still for a reader who asked for less motion — it already holds still for them, and in a browser that cannot drive it from the scroll
56
56
 
57
57
  ## Inside it
@@ -2,7 +2,7 @@
2
2
 
3
3
  # LandingHero
4
4
 
5
- The band that opens a main landing page: the one thing the page is about, said once, at the top, over a ground dark enough that nothing above it competes. One of three opening bands, and the widest. …
5
+ Opens a main landing page with its headline over a dark background
6
6
 
7
7
  `import { LandingHero } from '@deriv-com/dds-marketing'`
8
8