@opentrons/components 0.1.6-alpha.2 → 0.1.6-alpha.20

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 (373) hide show
  1. package/Makefile +5 -1
  2. package/package.json +6 -7
  3. package/src/__mocks__/file.js +10 -0
  4. package/src/alerts/AlertItem.stories.tsx +49 -0
  5. package/src/alerts/AlertItem.tsx +85 -0
  6. package/src/alerts/index.ts +3 -0
  7. package/src/atoms/Checkbox/Checkbox.stories.tsx +24 -0
  8. package/src/atoms/Checkbox/index.tsx +127 -0
  9. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +30 -0
  10. package/src/atoms/CheckboxField/index.tsx +171 -0
  11. package/src/atoms/Chip/Chip.stories.tsx +59 -0
  12. package/src/atoms/Chip/index.tsx +172 -0
  13. package/src/atoms/Divider/index.tsx +15 -0
  14. package/src/atoms/InputField/InputField.stories.tsx +77 -0
  15. package/src/atoms/InputField/index.tsx +383 -0
  16. package/src/atoms/ListButton/ListButton.stories.tsx +133 -0
  17. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordion.tsx +65 -0
  18. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.tsx +23 -0
  19. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +108 -0
  20. package/src/atoms/ListButton/ListButtonChildren/index.ts +3 -0
  21. package/src/atoms/ListButton/index.tsx +72 -0
  22. package/src/atoms/ListItem/ListItem.stories.tsx +96 -0
  23. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +78 -0
  24. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +42 -0
  25. package/src/atoms/ListItem/ListItemChildren/index.ts +2 -0
  26. package/src/atoms/ListItem/index.tsx +89 -0
  27. package/src/atoms/MenuList/MenuItem.stories.tsx +20 -0
  28. package/src/atoms/MenuList/MenuItem.tsx +55 -0
  29. package/src/atoms/MenuList/MenuList.stories.tsx +31 -0
  30. package/src/atoms/MenuList/OverflowBtn.stories.tsx +17 -0
  31. package/src/atoms/MenuList/OverflowBtn.tsx +76 -0
  32. package/src/atoms/MenuList/index.tsx +50 -0
  33. package/src/atoms/Snackbar/Snackbar.stories.tsx +67 -0
  34. package/src/atoms/Snackbar/index.tsx +91 -0
  35. package/src/atoms/StepMeter/index.tsx +53 -0
  36. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +106 -0
  37. package/src/atoms/StyledText/LegacyStyledText.tsx +95 -0
  38. package/src/atoms/StyledText/StyledText.stories.tsx +46 -0
  39. package/src/atoms/StyledText/StyledText.tsx +323 -0
  40. package/src/atoms/StyledText/index.ts +2 -0
  41. package/src/atoms/Tag/Tag.stories.tsx +48 -0
  42. package/src/atoms/Tag/index.tsx +116 -0
  43. package/src/atoms/Toast/ODDToast.stories.tsx +68 -0
  44. package/src/atoms/Toast/Toast.stories.tsx +55 -0
  45. package/src/atoms/Toast/index.tsx +439 -0
  46. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +39 -0
  47. package/src/atoms/ToggleGroup/index.tsx +91 -0
  48. package/src/atoms/Tooltip/Tooltip.stories.tsx +99 -0
  49. package/src/atoms/Tooltip/index.tsx +38 -0
  50. package/src/atoms/buttons/AlertPrimaryButton.tsx +26 -0
  51. package/src/atoms/buttons/AltPrimaryButton.tsx +31 -0
  52. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +36 -0
  53. package/src/atoms/buttons/EmptySelectorButton.tsx +83 -0
  54. package/src/atoms/buttons/LargeButton.stories.tsx +99 -0
  55. package/src/atoms/buttons/LargeButton.tsx +320 -0
  56. package/src/atoms/buttons/PrimaryButton.tsx +36 -0
  57. package/src/atoms/buttons/RadioButton.stories.tsx +35 -0
  58. package/src/atoms/buttons/RadioButton.tsx +217 -0
  59. package/src/atoms/buttons/SecondaryButton.tsx +62 -0
  60. package/src/atoms/buttons/buttons.stories.tsx +78 -0
  61. package/src/atoms/buttons/index.ts +6 -0
  62. package/src/atoms/index.ts +20 -0
  63. package/src/barrel.ts +10 -0
  64. package/src/buttons/Button.tsx +96 -0
  65. package/src/buttons/DeprecatedPrimaryButton.tsx +24 -0
  66. package/src/buttons/FlatButton.tsx +21 -0
  67. package/src/buttons/IconButton.tsx +37 -0
  68. package/src/buttons/OutlineButton.tsx +24 -0
  69. package/src/buttons/index.ts +7 -0
  70. package/src/controls/ControlInfo.tsx +13 -0
  71. package/src/controls/LabeledButton.tsx +28 -0
  72. package/src/controls/LabeledCheckbox.tsx +35 -0
  73. package/src/controls/LabeledControl.tsx +24 -0
  74. package/src/controls/LabeledRadioGroup.tsx +27 -0
  75. package/src/controls/LabeledSelect.tsx +34 -0
  76. package/src/controls/LabeledToggle.tsx +35 -0
  77. package/src/controls/StackedLabeledControl.tsx +28 -0
  78. package/src/controls/ToggleButton.tsx +25 -0
  79. package/src/controls/index.ts +10 -0
  80. package/src/forms/DeprecatedCheckboxField.stories.tsx +31 -0
  81. package/src/forms/DeprecatedCheckboxField.tsx +94 -0
  82. package/src/forms/DropdownField.stories.tsx +44 -0
  83. package/src/forms/DropdownField.tsx +106 -0
  84. package/src/forms/FormGroup.stories.tsx +31 -0
  85. package/src/forms/FormGroup.tsx +53 -0
  86. package/src/forms/InputField.stories.tsx +41 -0
  87. package/src/forms/LegacyInputField.tsx +123 -0
  88. package/src/forms/RadioGroup.stories.tsx +44 -0
  89. package/src/forms/RadioGroup.tsx +87 -0
  90. package/src/forms/Select.stories.tsx +117 -0
  91. package/src/forms/Select.tsx +132 -0
  92. package/src/forms/SelectField.tsx +94 -0
  93. package/src/forms/ToggleField.stories.tsx +31 -0
  94. package/src/forms/ToggleField.tsx +59 -0
  95. package/src/forms/index.ts +8 -0
  96. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +94 -0
  97. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +423 -0
  98. package/src/hardware-sim/BaseDeck/SingleSlotFixture.tsx +199 -0
  99. package/src/hardware-sim/BaseDeck/SlotBase.tsx +5 -0
  100. package/src/hardware-sim/BaseDeck/SlotClip.tsx +15 -0
  101. package/src/hardware-sim/BaseDeck/StagingAreaFixture.tsx +114 -0
  102. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +114 -0
  103. package/src/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.tsx +68 -0
  104. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +165 -0
  105. package/src/hardware-sim/BaseDeck/index.ts +5 -0
  106. package/src/hardware-sim/BaseDeck/something.test.tsx +7 -0
  107. package/src/hardware-sim/Deck/DeckFromLayers.tsx +58 -0
  108. package/src/hardware-sim/Deck/FlexTrash.tsx +128 -0
  109. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +97 -0
  110. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +251 -0
  111. package/src/hardware-sim/Deck/OT2Layers.tsx +153 -0
  112. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +46 -0
  113. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +42 -0
  114. package/src/hardware-sim/Deck/RobotCoordsText.tsx +32 -0
  115. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +90 -0
  116. package/src/hardware-sim/Deck/SlotLabels.tsx +111 -0
  117. package/src/hardware-sim/Deck/__mocks__/getDeckDefinitions.ts +29 -0
  118. package/src/hardware-sim/Deck/constants.ts +12 -0
  119. package/src/hardware-sim/Deck/index.tsx +8 -0
  120. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +91 -0
  121. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +110 -0
  122. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +131 -0
  123. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +102 -0
  124. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +130 -0
  125. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +89 -0
  126. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +54 -0
  127. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +103 -0
  128. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +89 -0
  129. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +99 -0
  130. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +96 -0
  131. package/src/hardware-sim/DeckConfigurator/constants.ts +81 -0
  132. package/src/hardware-sim/DeckConfigurator/index.tsx +285 -0
  133. package/src/hardware-sim/DeckSlotLocation/index.tsx +88 -0
  134. package/src/hardware-sim/Labware/Labware.tsx +173 -0
  135. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96DeepWellAdapter.tsx +23 -0
  136. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96FlatBottomAdapter.tsx +7 -0
  137. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAluminumFlatBottomPlate.tsx +13 -0
  138. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx +100 -0
  139. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsFlex96TiprackAdapter.tsx +13 -0
  140. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx +83 -0
  141. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsUniversalFlatAdapter.tsx +13 -0
  142. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +73 -0
  143. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +96 -0
  144. package/src/hardware-sim/Labware/LabwareRender.tsx +173 -0
  145. package/src/hardware-sim/Labware/LabwareStackRender.tsx +272 -0
  146. package/src/hardware-sim/Labware/index.ts +6 -0
  147. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +39 -0
  148. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +133 -0
  149. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +118 -0
  150. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +121 -0
  151. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +38 -0
  152. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +77 -0
  153. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +74 -0
  154. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +121 -0
  155. package/src/hardware-sim/Labware/labwareInternals/index.ts +8 -0
  156. package/src/hardware-sim/Labware/labwareInternals/types.ts +18 -0
  157. package/src/hardware-sim/Module/HeaterShaker.tsx +83 -0
  158. package/src/hardware-sim/Module/MagneticBlock.tsx +49 -0
  159. package/src/hardware-sim/Module/MagneticModule.tsx +51 -0
  160. package/src/hardware-sim/Module/Module.stories.tsx +90 -0
  161. package/src/hardware-sim/Module/ModuleTag.tsx +38 -0
  162. package/src/hardware-sim/Module/PlateReader.tsx +208 -0
  163. package/src/hardware-sim/Module/Temperature.tsx +54 -0
  164. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +248 -0
  165. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN2.tsx +286 -0
  166. package/src/hardware-sim/Module/Thermocycler/index.tsx +49 -0
  167. package/src/hardware-sim/Module/index.tsx +227 -0
  168. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +23 -0
  169. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +52 -0
  170. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +71 -0
  171. package/src/hardware-sim/Pipette/PipetteRender.tsx +92 -0
  172. package/src/hardware-sim/Pipette/constants.ts +10 -0
  173. package/src/hardware-sim/Pipette/index.ts +1 -0
  174. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +68 -0
  175. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +25 -0
  176. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +47145 -0
  177. package/src/hardware-sim/ProtocolDeck/index.tsx +174 -0
  178. package/src/hardware-sim/ProtocolDeck/types.ts +6 -0
  179. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +33 -0
  180. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +155 -0
  181. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +42 -0
  182. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +129 -0
  183. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +29 -0
  184. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +30 -0
  185. package/src/hardware-sim/ProtocolDeck/utils/index.ts +3 -0
  186. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +28 -0
  187. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +52 -0
  188. package/src/hardware-sim/RobotCoordinateSpace/index.ts +2 -0
  189. package/src/hardware-sim/index.ts +11 -0
  190. package/src/hardware-sim/utils.ts +18 -0
  191. package/src/helix-design-system/borders.ts +32 -0
  192. package/src/helix-design-system/colors.ts +100 -0
  193. package/src/helix-design-system/index.ts +4 -0
  194. package/src/helix-design-system/product/index.ts +1 -0
  195. package/src/helix-design-system/product/typography.ts +151 -0
  196. package/src/helix-design-system/style.ts +2 -0
  197. package/src/hooks/index.ts +15 -0
  198. package/src/hooks/useConditionalConfirm.ts +70 -0
  199. package/src/hooks/useDrag.ts +90 -0
  200. package/src/hooks/useIdle.ts +68 -0
  201. package/src/hooks/useInterval.ts +38 -0
  202. package/src/hooks/useLongPress.ts +83 -0
  203. package/src/hooks/useMenuHandleClickOutside.tsx +46 -0
  204. package/src/hooks/useMountEffect.ts +12 -0
  205. package/src/hooks/usePrevious.ts +19 -0
  206. package/src/hooks/useScrolling.ts +33 -0
  207. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +55 -0
  208. package/src/hooks/useSelectDeckLocation/index.tsx +331 -0
  209. package/src/hooks/useSwipe.ts +86 -0
  210. package/src/hooks/useTimeout.ts +33 -0
  211. package/src/hooks/useToggle.ts +27 -0
  212. package/src/icons/Icon.stories.tsx +37 -0
  213. package/src/icons/Icon.tsx +79 -0
  214. package/src/icons/IconList.stories.tsx +108 -0
  215. package/src/icons/ModuleIcon.tsx +48 -0
  216. package/src/icons/NotificationIcon.tsx +41 -0
  217. package/src/icons/icon-data.ts +821 -0
  218. package/src/icons/index.ts +6 -0
  219. package/src/images/index.ts +1 -0
  220. package/src/images/labware/index.ts +1 -0
  221. package/src/images/labware/measurement-guide/images/depth/depth-plate-flat@3x.png +0 -0
  222. package/src/images/labware/measurement-guide/images/depth/depth-plate-round@3x.png +0 -0
  223. package/src/images/labware/measurement-guide/images/depth/depth-plate-v@3x.png +0 -0
  224. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-flat@3x.png +0 -0
  225. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-round@3x.png +0 -0
  226. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-v@3x.png +0 -0
  227. package/src/images/labware/measurement-guide/images/depth/length-tip-rack@3x.png +0 -0
  228. package/src/images/labware/measurement-guide/images/dimensions/footprint@3x.png +0 -0
  229. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-plate@3x.png +0 -0
  230. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-tubes@3x.png +0 -0
  231. package/src/images/labware/measurement-guide/images/dimensions/height-plate-and-reservoir@3x.png +0 -0
  232. package/src/images/labware/measurement-guide/images/dimensions/height-tip-rack@3x.png +0 -0
  233. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack-irregular@3x.png +0 -0
  234. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack@3x.png +0 -0
  235. package/src/images/labware/measurement-guide/images/offset/offset-reservoir@3x.png +0 -0
  236. package/src/images/labware/measurement-guide/images/offset/offset-well-circular@3x.png +0 -0
  237. package/src/images/labware/measurement-guide/images/offset/offset-well-rectangular@3x.png +0 -0
  238. package/src/images/labware/measurement-guide/images/shape/shape-circular@3x.png +0 -0
  239. package/src/images/labware/measurement-guide/images/shape/shape-rectangular@3x.png +0 -0
  240. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir-multi-row@3x.png +0 -0
  241. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir@3x.png +0 -0
  242. package/src/images/labware/measurement-guide/images/spacing/spacing-well-circular@3x.png +0 -0
  243. package/src/images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png +0 -0
  244. package/src/images/labware/measurement-guide/index.ts +272 -0
  245. package/src/index.ts +2 -0
  246. package/src/instrument/InstrumentDiagram.stories.tsx +42 -0
  247. package/src/instrument/InstrumentDiagram.tsx +58 -0
  248. package/src/instrument/InstrumentGroup.stories.tsx +88 -0
  249. package/src/instrument/InstrumentGroup.tsx +35 -0
  250. package/src/instrument/InstrumentInfo.tsx +107 -0
  251. package/src/instrument/PipetteSelect.stories.tsx +40 -0
  252. package/src/instrument/PipetteSelect.tsx +170 -0
  253. package/src/instrument/eight-channel-flex.png +0 -0
  254. package/src/instrument/index.ts +4 -0
  255. package/src/instrument/multi-channel_GEN1_800px.png +0 -0
  256. package/src/instrument/multi-channel_GEN2_800px.png +0 -0
  257. package/src/instrument/ninety-six-channel-gen1.png +0 -0
  258. package/src/instrument/pipetteGEN2Multi.png +0 -0
  259. package/src/instrument/pipetteGEN2Single.png +0 -0
  260. package/src/instrument/pipetteMulti.png +0 -0
  261. package/src/instrument/pipetteSingle.png +0 -0
  262. package/src/instrument/single-channel-flex.png +0 -0
  263. package/src/instrument/single-channel_GEN2_800px.png +0 -0
  264. package/src/instrument/single_channel_GEN1_800px.png +0 -0
  265. package/src/interaction-enhancers/ClickOutside.ts +57 -0
  266. package/src/interaction-enhancers/HandleKeypress.tsx +69 -0
  267. package/src/interaction-enhancers/index.ts +4 -0
  268. package/src/interaction-enhancers/useHover.ts +84 -0
  269. package/src/interaction-enhancers/useOnClickOutside.ts +42 -0
  270. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +22 -0
  271. package/src/legacy-hardware-sim/ModuleItem.tsx +145 -0
  272. package/src/legacy-hardware-sim/index.ts +2 -0
  273. package/src/lists/SidePanelGroup.tsx +48 -0
  274. package/src/lists/TitledList.tsx +155 -0
  275. package/src/lists/index.ts +3 -0
  276. package/src/modals/AlertModal.tsx +89 -0
  277. package/src/modals/ContinueModal.tsx +32 -0
  278. package/src/modals/LegacyModal.tsx +59 -0
  279. package/src/modals/Modal.stories.tsx +52 -0
  280. package/src/modals/Modal.tsx +96 -0
  281. package/src/modals/ModalHeader.tsx +100 -0
  282. package/src/modals/ModalShell.tsx +155 -0
  283. package/src/modals/Overlay.tsx +38 -0
  284. package/src/modals/SpinnerModal.tsx +35 -0
  285. package/src/modals/SpinnerModalPage.tsx +30 -0
  286. package/src/modals/index.ts +10 -0
  287. package/src/molecules/Banner/Banner.stories.tsx +41 -0
  288. package/src/molecules/Banner/index.tsx +147 -0
  289. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +65 -0
  290. package/src/molecules/DeckInfoLabel/index.tsx +95 -0
  291. package/src/molecules/DeckLabel/DeckLabel.stories.tsx +31 -0
  292. package/src/molecules/DeckLabel/index.tsx +80 -0
  293. package/src/molecules/DropdownMenu/DropdownMenu.stories.tsx +30 -0
  294. package/src/molecules/DropdownMenu/index.tsx +343 -0
  295. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +50 -0
  296. package/src/molecules/InfoScreen/index.tsx +54 -0
  297. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +53 -0
  298. package/src/molecules/LiquidIcon/index.tsx +68 -0
  299. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +172 -0
  300. package/src/molecules/ParametersTable/index.tsx +198 -0
  301. package/src/molecules/Tabs/Tabs.stories.tsx +74 -0
  302. package/src/molecules/Tabs/index.tsx +94 -0
  303. package/src/molecules/index.ts +8 -0
  304. package/src/nav/SidePanel.stories.tsx +29 -0
  305. package/src/nav/SidePanel.tsx +21 -0
  306. package/src/nav/index.ts +2 -0
  307. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +46 -0
  308. package/src/organisms/DeckLabelSet/index.tsx +69 -0
  309. package/src/organisms/EndUserAgreementFooter/index.tsx +49 -0
  310. package/src/organisms/Toolbox/Toolbox.stories.tsx +23 -0
  311. package/src/organisms/Toolbox/index.tsx +160 -0
  312. package/src/organisms/index.ts +3 -0
  313. package/src/primitives/Box.stories.tsx +25 -0
  314. package/src/primitives/Box.tsx +17 -0
  315. package/src/primitives/Btn.stories.tsx +105 -0
  316. package/src/primitives/Btn.tsx +266 -0
  317. package/src/primitives/Flex.stories.tsx +50 -0
  318. package/src/primitives/Flex.tsx +17 -0
  319. package/src/primitives/ForeignObject.tsx +70 -0
  320. package/src/primitives/Link.stories.tsx +27 -0
  321. package/src/primitives/Link.tsx +32 -0
  322. package/src/primitives/README.md +188 -0
  323. package/src/primitives/Svg.stories.tsx +36 -0
  324. package/src/primitives/Svg.tsx +68 -0
  325. package/src/primitives/Text.stories.tsx +17 -0
  326. package/src/primitives/Text.tsx +18 -0
  327. package/src/primitives/index.ts +10 -0
  328. package/src/primitives/style-props.ts +197 -0
  329. package/src/primitives/types.ts +120 -0
  330. package/src/robot-types.ts +4 -0
  331. package/src/slotmap/OT2SlotMap.tsx +73 -0
  332. package/src/slotmap/index.ts +1 -0
  333. package/src/structure/Card.stories.tsx +28 -0
  334. package/src/structure/Card.tsx +64 -0
  335. package/src/structure/LabeledValue.stories.tsx +17 -0
  336. package/src/structure/LabeledValue.tsx +31 -0
  337. package/src/structure/Pill.tsx +43 -0
  338. package/src/structure/Splash.stories.tsx +24 -0
  339. package/src/structure/Splash.tsx +22 -0
  340. package/src/structure/TitleBar.stories.tsx +42 -0
  341. package/src/structure/TitleBar.tsx +81 -0
  342. package/src/structure/index.ts +7 -0
  343. package/src/styles/borders.ts +16 -0
  344. package/src/styles/colors.ts +58 -0
  345. package/src/styles/cursor.ts +12 -0
  346. package/src/styles/flexbox.ts +39 -0
  347. package/src/styles/index.ts +8 -0
  348. package/src/styles/layout.ts +31 -0
  349. package/src/styles/position.ts +5 -0
  350. package/src/styles/spacing.ts +11 -0
  351. package/src/styles/typography.ts +90 -0
  352. package/src/testing/utils/index.ts +2 -0
  353. package/src/testing/utils/matchers.ts +31 -0
  354. package/src/testing/utils/renderWithProviders.tsx +53 -0
  355. package/src/tooltips/DeprecatedTooltip.tsx +105 -0
  356. package/src/tooltips/HoverTooltip.tsx +83 -0
  357. package/src/tooltips/LegacyTooltip.stories.tsx +98 -0
  358. package/src/tooltips/LegacyTooltip.tsx +151 -0
  359. package/src/tooltips/constants.ts +28 -0
  360. package/src/tooltips/index.ts +10 -0
  361. package/src/tooltips/styles.ts +20 -0
  362. package/src/tooltips/types.ts +73 -0
  363. package/src/tooltips/useHoverTooltip.ts +47 -0
  364. package/src/tooltips/usePopper.ts +87 -0
  365. package/src/tooltips/useTooltip.ts +100 -0
  366. package/src/ui-style-constants/index.ts +4 -0
  367. package/src/ui-style-constants/responsiveness.ts +15 -0
  368. package/src/ui-style-constants/spacing.ts +18 -0
  369. package/src/ui-style-constants/typography.ts +258 -0
  370. package/src/ui-style-constants/viewport.ts +18 -0
  371. package/src/utils.ts +56 -0
  372. package/{vite.config.ts → vite.config.mts} +2 -0
  373. package/lib/index.mjs +0 -19869
@@ -0,0 +1,133 @@
1
+ import * as React from 'react'
2
+
3
+ import { ListButton as ListButtonComponent } from './index'
4
+ import {
5
+ ListButtonAccordion,
6
+ ListButtonAccordionContainer,
7
+ ListButtonRadioButton,
8
+ } from './ListButtonChildren/index'
9
+ import { StyledText } from '../..'
10
+ import type { Meta, StoryObj } from '@storybook/react'
11
+
12
+ const meta: Meta<typeof ListButtonComponent> = {
13
+ title: 'Library/Atoms/ListButton',
14
+ component: ListButtonComponent,
15
+ argTypes: {
16
+ type: {
17
+ control: {
18
+ type: 'select',
19
+ options: ['noActive', 'success', 'warning'],
20
+ },
21
+ },
22
+ },
23
+ }
24
+
25
+ export default meta
26
+
27
+ type Story = StoryObj<typeof ListButtonComponent>
28
+ type ListButtonComponentProps = React.ComponentProps<typeof ListButtonComponent>
29
+
30
+ const Template = (args: ListButtonComponentProps): JSX.Element => {
31
+ const [containerExpand, setContainerExpand] = React.useState<boolean>(false)
32
+ const [buttonValue, setButtonValue] = React.useState<string | null>(null)
33
+ const [nestedButtonValue, setNestedButtonValue] = React.useState<
34
+ string | null
35
+ >(null)
36
+
37
+ return (
38
+ <ListButtonComponent
39
+ {...args}
40
+ onClick={() => {
41
+ setContainerExpand(!containerExpand)
42
+ }}
43
+ >
44
+ <ListButtonAccordion
45
+ key="main"
46
+ mainHeadline="Main heading, click to expand accordion"
47
+ headline="accordion heading"
48
+ isExpanded={containerExpand}
49
+ >
50
+ <ListButtonAccordionContainer id="mainAccordionContainer">
51
+ <>
52
+ <ListButtonRadioButton
53
+ key="buttonNested"
54
+ isSelected={buttonValue === 'radio button nested'}
55
+ buttonValue="radio button nested"
56
+ buttonText="Radio button, click to expand nested accordion"
57
+ onChange={e => {
58
+ e.stopPropagation()
59
+ setButtonValue('radio button nested')
60
+ }}
61
+ />
62
+
63
+ {buttonValue === 'radio button nested' ? (
64
+ <ListButtonAccordionContainer id="nestedAccordionContainer">
65
+ <ListButtonAccordion
66
+ key="child"
67
+ isNested
68
+ headline="nested accordion heading"
69
+ isExpanded={buttonValue === 'radio button nested'}
70
+ >
71
+ <>
72
+ <ListButtonRadioButton
73
+ isSelected={nestedButtonValue === 'radio button1'}
74
+ buttonValue="radio button1"
75
+ buttonText="nested button"
76
+ onChange={() => {
77
+ setNestedButtonValue('radio button1')
78
+ }}
79
+ />
80
+ {nestedButtonValue === 'radio button1' ? (
81
+ <StyledText desktop="bodyDefaultRegular">
82
+ Nested button option
83
+ </StyledText>
84
+ ) : null}
85
+ </>
86
+ <ListButtonRadioButton
87
+ isSelected={nestedButtonValue === 'radio button2'}
88
+ buttonValue="radio button2"
89
+ buttonText="nested button 2"
90
+ onChange={() => {
91
+ setNestedButtonValue('radio button2')
92
+ }}
93
+ />
94
+ <ListButtonRadioButton
95
+ isSelected={nestedButtonValue === 'radio button3'}
96
+ buttonValue="radio button3"
97
+ buttonText="nested button 3"
98
+ onChange={() => {
99
+ setNestedButtonValue('radio button3')
100
+ }}
101
+ />
102
+ </ListButtonAccordion>
103
+ </ListButtonAccordionContainer>
104
+ ) : null}
105
+ </>
106
+ <>
107
+ <ListButtonRadioButton
108
+ key="buttonNonNested"
109
+ isSelected={buttonValue === 'radio button non nest'}
110
+ buttonValue="radio button non nest"
111
+ buttonText="Radio button without nested"
112
+ onChange={() => {
113
+ setButtonValue('radio button non nest')
114
+ }}
115
+ />
116
+
117
+ {buttonValue === 'radio button non nest' ? (
118
+ <StyledText desktop="bodyDefaultRegular">
119
+ Non nested button option
120
+ </StyledText>
121
+ ) : null}
122
+ </>
123
+ </ListButtonAccordionContainer>
124
+ </ListButtonAccordion>
125
+ </ListButtonComponent>
126
+ )
127
+ }
128
+ export const ListButton: Story = {
129
+ render: Template,
130
+ args: {
131
+ type: 'noActive',
132
+ },
133
+ }
@@ -0,0 +1,65 @@
1
+ import type * as React from 'react'
2
+ import { Flex } from '../../../primitives'
3
+ import { DIRECTION_COLUMN } from '../../../styles'
4
+ import { SPACING } from '../../../ui-style-constants'
5
+ import { StyledText } from '../../StyledText'
6
+
7
+ interface ListButtonAccordionProps {
8
+ children: React.ReactNode
9
+ // determines if the accordion is expanded or not
10
+ isExpanded?: boolean
11
+ // is it nested into another accordion?
12
+ isNested?: boolean
13
+ // optional main headline for the top level accordion
14
+ mainHeadline?: string
15
+ headline?: string
16
+ }
17
+
18
+ /*
19
+ To be used with ListButton, ListButtonAccordion and ListButtonRadioButton
20
+ This is the accordion component to use both as just an accordion or nested accordion
21
+ **/
22
+ export function ListButtonAccordion(
23
+ props: ListButtonAccordionProps
24
+ ): JSX.Element {
25
+ const {
26
+ headline,
27
+ children,
28
+ mainHeadline,
29
+ isExpanded = false,
30
+ isNested = false,
31
+ } = props
32
+
33
+ return (
34
+ <Flex flexDirection={DIRECTION_COLUMN} width="100%">
35
+ {mainHeadline != null ? (
36
+ <Flex
37
+ marginBottom={
38
+ isExpanded && headline != null ? SPACING.spacing40 : '0'
39
+ }
40
+ >
41
+ <StyledText desktopStyle="bodyDefaultSemiBold">
42
+ {mainHeadline}
43
+ </StyledText>
44
+ </Flex>
45
+ ) : null}
46
+ {isExpanded ? (
47
+ <Flex
48
+ marginTop={isNested ? SPACING.spacing4 : '0'}
49
+ flexDirection={DIRECTION_COLUMN}
50
+ gridGap={SPACING.spacing4}
51
+ marginLeft={isNested ? SPACING.spacing40 : '0'}
52
+ >
53
+ {headline != null ? (
54
+ <Flex marginBottom={SPACING.spacing4}>
55
+ <StyledText desktopStyle="bodyDefaultSemiBold">
56
+ {headline}
57
+ </StyledText>
58
+ </Flex>
59
+ ) : null}
60
+ <Flex flexDirection={DIRECTION_COLUMN}>{children}</Flex>
61
+ </Flex>
62
+ ) : null}
63
+ </Flex>
64
+ )
65
+ }
@@ -0,0 +1,23 @@
1
+ import type * as React from 'react'
2
+ import { Flex } from '../../../primitives'
3
+ import { DIRECTION_COLUMN } from '../../../styles'
4
+
5
+ interface ListButtonAccordionContainerProps {
6
+ children: React.ReactNode
7
+ id: string
8
+ }
9
+ /*
10
+ To be used with ListButtonAccordion to stop propagation since multiple
11
+ layers have a CTA
12
+ **/
13
+ export function ListButtonAccordionContainer(
14
+ props: ListButtonAccordionContainerProps
15
+ ): JSX.Element {
16
+ const { id, children } = props
17
+
18
+ return (
19
+ <Flex key={id} flexDirection={DIRECTION_COLUMN} width="100%">
20
+ {children}
21
+ </Flex>
22
+ )
23
+ }
@@ -0,0 +1,108 @@
1
+ import styled, { css } from 'styled-components'
2
+ import { SPACING } from '../../../ui-style-constants'
3
+ import { BORDERS, COLORS } from '../../../helix-design-system'
4
+ import { Flex } from '../../../primitives'
5
+ import { StyledText } from '../../StyledText'
6
+ import { CURSOR_POINTER } from '../../../styles'
7
+
8
+ import type { ChangeEventHandler, MouseEvent } from 'react'
9
+ import type { StyleProps } from '../../../primitives'
10
+
11
+ interface ListButtonRadioButtonProps extends StyleProps {
12
+ buttonText: string
13
+ buttonValue: string | number
14
+ onChange: ChangeEventHandler<HTMLInputElement>
15
+ setNoHover?: () => void
16
+ setHovered?: () => void
17
+ disabled?: boolean
18
+ isSelected?: boolean
19
+ id?: string
20
+ }
21
+
22
+ // used for helix and as a child button to ListButtonAccordion
23
+ export function ListButtonRadioButton(
24
+ props: ListButtonRadioButtonProps
25
+ ): JSX.Element {
26
+ const {
27
+ buttonText,
28
+ buttonValue,
29
+ isSelected = false,
30
+ onChange,
31
+ disabled = false,
32
+ setHovered,
33
+ setNoHover,
34
+ id = buttonText,
35
+ } = props
36
+
37
+ return (
38
+ <Flex
39
+ width="100%"
40
+ margin={SPACING.spacing4}
41
+ onClick={(e: MouseEvent) => {
42
+ e.stopPropagation()
43
+ }}
44
+ >
45
+ <SettingButton
46
+ checked={isSelected}
47
+ id={id}
48
+ disabled={disabled}
49
+ onChange={onChange}
50
+ type="radio"
51
+ value={buttonValue}
52
+ />
53
+ <SettingButtonLabel
54
+ role="label"
55
+ isSelected={isSelected}
56
+ disabled={disabled}
57
+ htmlFor={id}
58
+ onMouseEnter={setHovered}
59
+ onMouseLeave={setNoHover}
60
+ >
61
+ <StyledText desktopStyle="bodyDefaultRegular">{buttonText}</StyledText>
62
+ </SettingButtonLabel>
63
+ </Flex>
64
+ )
65
+ }
66
+
67
+ const SettingButton = styled.input`
68
+ display: none;
69
+ `
70
+
71
+ const AVAILABLE_BUTTON_STYLE = css`
72
+ background: ${COLORS.white};
73
+ color: ${COLORS.black90};
74
+
75
+ &:hover {
76
+ background-color: ${COLORS.grey10};
77
+ }
78
+ `
79
+
80
+ const SELECTED_BUTTON_STYLE = css`
81
+ background: ${COLORS.blue50};
82
+ color: ${COLORS.white};
83
+
84
+ &:active {
85
+ background-color: ${COLORS.blue60};
86
+ }
87
+ `
88
+
89
+ const DISABLED_STYLE = css`
90
+ color: ${COLORS.grey40};
91
+ background-color: ${COLORS.grey10};
92
+ `
93
+
94
+ interface ButtonLabelProps {
95
+ isSelected: boolean
96
+ disabled: boolean
97
+ }
98
+
99
+ const SettingButtonLabel = styled.label<ButtonLabelProps>`
100
+ border-radius: ${BORDERS.borderRadius8};
101
+ cursor: ${CURSOR_POINTER};
102
+ padding: 14px ${SPACING.spacing12};
103
+ width: 100%;
104
+
105
+ ${({ isSelected }) =>
106
+ isSelected ? SELECTED_BUTTON_STYLE : AVAILABLE_BUTTON_STYLE}
107
+ ${({ disabled }) => disabled && DISABLED_STYLE}
108
+ `
@@ -0,0 +1,3 @@
1
+ export * from './ListButtonAccordion'
2
+ export * from './ListButtonAccordionContainer'
3
+ export * from './ListButtonRadioButton'
@@ -0,0 +1,72 @@
1
+ import type * as React from 'react'
2
+ import { css } from 'styled-components'
3
+ import { Flex } from '../../primitives'
4
+ import { SPACING } from '../../ui-style-constants'
5
+ import { BORDERS, COLORS } from '../../helix-design-system'
6
+ import { CURSOR_POINTER } from '../../styles'
7
+ import type { StyleProps } from '../../primitives'
8
+
9
+ export * from './ListButtonChildren/index'
10
+
11
+ export type ListButtonType = 'noActive' | 'connected' | 'notConnected'
12
+
13
+ interface ListButtonProps extends StyleProps {
14
+ type: ListButtonType
15
+ children: React.ReactNode
16
+ disabled?: boolean
17
+ onClick?: () => void
18
+ }
19
+
20
+ const LISTBUTTON_PROPS_BY_TYPE: Record<
21
+ ListButtonType,
22
+ { backgroundColor: string; hoverBackgroundColor: string }
23
+ > = {
24
+ noActive: {
25
+ backgroundColor: COLORS.grey30,
26
+ hoverBackgroundColor: COLORS.grey35,
27
+ },
28
+ connected: {
29
+ backgroundColor: COLORS.green30,
30
+ hoverBackgroundColor: COLORS.green35,
31
+ },
32
+ notConnected: {
33
+ backgroundColor: COLORS.yellow30,
34
+ hoverBackgroundColor: COLORS.yellow35,
35
+ },
36
+ }
37
+
38
+ /*
39
+ ListButton is used in helix
40
+ TODO(ja, 8/12/24): shuld be used in ODD as well and need to add
41
+ odd stylings
42
+ **/
43
+ export function ListButton(props: ListButtonProps): JSX.Element {
44
+ const { type, children, disabled, onClick, ...styleProps } = props
45
+ const listButtonProps = LISTBUTTON_PROPS_BY_TYPE[type]
46
+
47
+ const LIST_BUTTON_STYLE = css`
48
+ cursor: ${CURSOR_POINTER};
49
+ background-color: ${disabled
50
+ ? COLORS.grey35
51
+ : listButtonProps.backgroundColor};
52
+ max-width: 26.875rem;
53
+ padding: ${styleProps.padding ??
54
+ `${SPACING.spacing20} ${SPACING.spacing24}`};
55
+ border-radius: ${BORDERS.borderRadius8};
56
+
57
+ &:hover {
58
+ background-color: ${listButtonProps.hoverBackgroundColor};
59
+ }
60
+ `
61
+
62
+ return (
63
+ <Flex
64
+ data-testid={`ListButton_${type}`}
65
+ onClick={onClick}
66
+ css={LIST_BUTTON_STYLE}
67
+ {...styleProps}
68
+ >
69
+ {children}
70
+ </Flex>
71
+ )
72
+ }
@@ -0,0 +1,96 @@
1
+ import { SPACING, VIEWPORT } from '../../ui-style-constants'
2
+ import { DIRECTION_COLUMN } from '../../styles'
3
+ import { Flex } from '../../primitives'
4
+ import { LegacyStyledText } from '../StyledText'
5
+ import { ListItemDescriptor } from './ListItemChildren/ListItemDescriptor'
6
+ import { ListItem as ListItemComponent, ListItemCustomize } from '.'
7
+ import exampleImage from '../../images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png'
8
+ import type { Meta, StoryObj } from '@storybook/react'
9
+ import type { DropdownMenuProps } from '../../molecules'
10
+
11
+ const meta: Meta<typeof ListItemComponent> = {
12
+ title: 'Library/Atoms/ListItem',
13
+ component: ListItemComponent,
14
+ argTypes: {
15
+ type: {
16
+ control: {
17
+ type: 'select',
18
+ options: ['error', 'noActive', 'success', 'warning'],
19
+ },
20
+ },
21
+ },
22
+ parameters: VIEWPORT.touchScreenViewport,
23
+ }
24
+
25
+ export default meta
26
+
27
+ type Story = StoryObj<typeof ListItemComponent>
28
+
29
+ export const ListItem: Story = {
30
+ args: {
31
+ type: 'noActive',
32
+ children: (
33
+ <Flex flexDirection={DIRECTION_COLUMN} gridGap={SPACING.spacing4}>
34
+ <LegacyStyledText as="p">
35
+ Slot Component: Replace me using the component panel.
36
+ </LegacyStyledText>
37
+ <LegacyStyledText as="p">
38
+ Slot Component: Replace me using the component panel.
39
+ </LegacyStyledText>
40
+ <LegacyStyledText as="p">
41
+ Slot Component: Replace me using the component panel.
42
+ </LegacyStyledText>
43
+ </Flex>
44
+ ),
45
+ },
46
+ }
47
+
48
+ export const ListItemDescriptorDefault: Story = {
49
+ args: {
50
+ type: 'noActive',
51
+ children: (
52
+ <ListItemDescriptor
53
+ type="large"
54
+ content={<div>mock content</div>}
55
+ description={<div>mock description</div>}
56
+ />
57
+ ),
58
+ },
59
+ }
60
+
61
+ export const ListItemDescriptorMini: Story = {
62
+ args: {
63
+ type: 'noActive',
64
+ children: (
65
+ <ListItemDescriptor
66
+ type="default"
67
+ content={<div>mock content</div>}
68
+ description={<div>mock description</div>}
69
+ />
70
+ ),
71
+ },
72
+ }
73
+ const dropdownProps: DropdownMenuProps = {
74
+ filterOptions: [
75
+ { name: '1', value: '1' },
76
+ { name: '2', value: '2' },
77
+ ],
78
+ onClick: () => {},
79
+ currentOption: { name: '1', value: '1' },
80
+ dropdownType: 'neutral',
81
+ }
82
+ export const ListItemCustomizeImage: Story = {
83
+ args: {
84
+ type: 'noActive',
85
+ children: (
86
+ <ListItemCustomize
87
+ header="Header"
88
+ leftHeaderItem={<img width="60px" height="60px" src={exampleImage} />}
89
+ linkText="Link text"
90
+ label="Label"
91
+ dropdown={dropdownProps}
92
+ onClick={() => {}}
93
+ />
94
+ ),
95
+ },
96
+ }
@@ -0,0 +1,78 @@
1
+ import { css } from 'styled-components'
2
+ import { ALIGN_CENTER, JUSTIFY_CENTER } from '../../../styles'
3
+ import { COLORS } from '../../../helix-design-system'
4
+ import { Flex, Link } from '../../../primitives'
5
+ import { SPACING, TYPOGRAPHY } from '../../../ui-style-constants'
6
+ import { StyledText } from '../../StyledText'
7
+ import { DropdownMenu } from '../../../molecules/DropdownMenu'
8
+ import { Tag } from '../../Tag/index'
9
+ import type { DropdownMenuProps } from '../../../molecules/DropdownMenu'
10
+ import type { TagProps } from '../../Tag/index'
11
+ interface ListItemCustomizeProps {
12
+ header: string
13
+ // this is either an image or an icon
14
+ leftHeaderItem?: JSX.Element
15
+ onClick?: () => void
16
+ linkText?: string
17
+ // these are the middle prop options
18
+ label?: string
19
+ dropdown?: DropdownMenuProps
20
+ tag?: TagProps
21
+ /** optional placement of the menu */
22
+ menuPlacement?: 'auto' | 'top' | 'bottom'
23
+ }
24
+
25
+ export function ListItemCustomize(props: ListItemCustomizeProps): JSX.Element {
26
+ const {
27
+ header,
28
+ leftHeaderItem,
29
+ onClick,
30
+ label,
31
+ linkText,
32
+ dropdown,
33
+ tag,
34
+ menuPlacement = 'auto',
35
+ } = props
36
+ return (
37
+ <Flex width="100%" alignItems={ALIGN_CENTER} padding={SPACING.spacing12}>
38
+ <Flex gridGap={SPACING.spacing16} width="50%" alignItems={ALIGN_CENTER}>
39
+ {leftHeaderItem != null ? (
40
+ <Flex size="3.75rem">{leftHeaderItem}</Flex>
41
+ ) : null}
42
+ <StyledText desktopStyle="bodyDefaultSemiBold">{header}</StyledText>
43
+ </Flex>
44
+ <Flex
45
+ width={onClick != null && linkText != null ? '40%' : '50%'}
46
+ gridGap={SPACING.spacing8}
47
+ alignItems={ALIGN_CENTER}
48
+ justifyContent={JUSTIFY_CENTER}
49
+ >
50
+ {label != null ? (
51
+ <StyledText desktopStyle="bodyDefaultRegular" color={COLORS.grey60}>
52
+ {label}
53
+ </StyledText>
54
+ ) : null}
55
+ {dropdown != null ? (
56
+ <DropdownMenu {...dropdown} menuPlacement={menuPlacement} />
57
+ ) : null}
58
+ {tag != null ? <Tag {...tag} /> : null}
59
+ </Flex>
60
+ {onClick != null && linkText != null ? (
61
+ <Link
62
+ role="button"
63
+ onClick={onClick}
64
+ css={css`
65
+ width: 10%;
66
+ text-decoration: ${TYPOGRAPHY.textDecorationUnderline};
67
+ color: ${COLORS.grey60};
68
+ &:hover {
69
+ color: ${COLORS.grey40};
70
+ }
71
+ `}
72
+ >
73
+ <StyledText desktopStyle="bodyDefaultRegular">{linkText}</StyledText>
74
+ </Link>
75
+ ) : null}
76
+ </Flex>
77
+ )
78
+ }
@@ -0,0 +1,42 @@
1
+ import { Flex } from '../../../primitives'
2
+ import {
3
+ ALIGN_FLEX_START,
4
+ DIRECTION_COLUMN,
5
+ DIRECTION_ROW,
6
+ JUSTIFY_FLEX_START,
7
+ JUSTIFY_SPACE_BETWEEN,
8
+ } from '../../../styles'
9
+ import { SPACING } from '../../../ui-style-constants'
10
+
11
+ interface ListItemDescriptorProps {
12
+ type: 'default' | 'large'
13
+ description: JSX.Element
14
+ content: JSX.Element
15
+ changeFlexDirection?: boolean
16
+ }
17
+
18
+ export const ListItemDescriptor = (
19
+ props: ListItemDescriptorProps
20
+ ): JSX.Element => {
21
+ const { description, content, type, changeFlexDirection = false } = props
22
+ let justifyContent = 'none'
23
+ if (type === 'default' && changeFlexDirection) {
24
+ justifyContent = JUSTIFY_FLEX_START
25
+ } else if (type === 'default') {
26
+ justifyContent = JUSTIFY_SPACE_BETWEEN
27
+ }
28
+
29
+ return (
30
+ <Flex
31
+ flexDirection={changeFlexDirection ? DIRECTION_COLUMN : DIRECTION_ROW}
32
+ gridGap={SPACING.spacing8}
33
+ width="100%"
34
+ alignItems={ALIGN_FLEX_START}
35
+ justifyContent={justifyContent}
36
+ padding={type === 'default' ? SPACING.spacing4 : SPACING.spacing12}
37
+ >
38
+ {description}
39
+ {content}
40
+ </Flex>
41
+ )
42
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ListItemCustomize'
2
+ export * from './ListItemDescriptor'