@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,117 @@
1
+ import type * as React from 'react'
2
+
3
+ import { Select } from './Select'
4
+ import styles from './Select.module.css'
5
+
6
+ import type { Story, Meta } from '@storybook/react'
7
+
8
+ export default {
9
+ title: 'Library/Molecules/Forms/Select',
10
+ component: Select,
11
+ } as Meta
12
+
13
+ const Template: Story<React.ComponentProps<typeof Select>> = args => (
14
+ <Select {...args} />
15
+ )
16
+ export const Basic = Template.bind({})
17
+ Basic.parameters = {
18
+ docs: {
19
+ description: {
20
+ component:
21
+ 'Thin wrapper around `react-select` to apply our Opentrons-specific styles. All props are passed directly to [`react-select`](https://react-select.com/props) except for `styles`, `components`, and `classNamePrefix`. The `className` prop appends to the `className` we pass `react-select`. Those props are not passed directly because they provide the base styling of the component',
22
+ },
23
+ },
24
+ }
25
+ Basic.args = {
26
+ options: [
27
+ { label: 'DNA', value: 'dna' },
28
+ { label: 'RNA', value: 'rna' },
29
+ { label: 'Protein', value: 'protein', isDisabled: true },
30
+ ],
31
+ }
32
+
33
+ export const GroupedOptions = Template.bind({})
34
+ GroupedOptions.parameters = {
35
+ docs: {
36
+ description: {
37
+ component: 'You can also pass grouped options:',
38
+ },
39
+ },
40
+ }
41
+ GroupedOptions.args = {
42
+ options: [
43
+ {
44
+ label: 'Nucleic Acids',
45
+ options: [
46
+ { label: 'DNA', value: 'dna' },
47
+ { label: 'RNA', value: 'rna' },
48
+ ],
49
+ },
50
+ {
51
+ label: 'Polypeptides',
52
+ options: [
53
+ { label: 'Dipeptide', value: 'dipeptide' },
54
+ { label: 'Tripeptide', value: 'Tripeptide' },
55
+ ],
56
+ },
57
+ ],
58
+ }
59
+
60
+ export const Controlled = Template.bind({})
61
+ Controlled.parameters = {
62
+ docs: {
63
+ description: {
64
+ component:
65
+ 'Passing `value` controls the input. **Note that `value` has the same format as an entry in `options`**',
66
+ },
67
+ },
68
+ }
69
+ Controlled.args = {
70
+ value: { label: 'DNA', value: 'dna' },
71
+ options: [
72
+ { label: 'DNA', value: 'dna' },
73
+ { label: 'RNA', value: 'rna' },
74
+ { label: 'Protein', value: 'protein' },
75
+ ],
76
+ }
77
+
78
+ export const FormattedOptionLabel = Template.bind({})
79
+ FormattedOptionLabel.parameters = {
80
+ docs: {
81
+ description: {
82
+ component:
83
+ 'You can control the renders of individual options with the `formatOptionLabel` prop:',
84
+ },
85
+ },
86
+ }
87
+ FormattedOptionLabel.args = {
88
+ options: [
89
+ { label: 'DNA', value: 'dna' },
90
+ { label: 'RNA', value: 'rna' },
91
+ { label: 'Protein', value: 'protein' },
92
+ ],
93
+ formatOptionLabel: (option, { context }) =>
94
+ context === 'menu' && option.value === 'rna' ? (
95
+ <span style={{ color: 'green' }}>{option.label}</span>
96
+ ) : (
97
+ option.label
98
+ ),
99
+ }
100
+
101
+ export const StyleOverride = Template.bind({})
102
+ StyleOverride.parameters = {
103
+ docs: {
104
+ description: {
105
+ component:
106
+ "To override any styling, we use [`react-select`'s BEM](https://react-select.com/styles#using-classnames) class names with our specific prefix, which is `ot_select`. See `SelectField` for a specific example, where the background color of the `Control` element is modified if the field has an error",
107
+ },
108
+ },
109
+ }
110
+ StyleOverride.args = {
111
+ className: styles.example_select_override,
112
+ options: [
113
+ { label: 'DNA', value: 'dna' },
114
+ { label: 'RNA', value: 'rna' },
115
+ { label: 'Protein', value: 'protein' },
116
+ ],
117
+ }
@@ -0,0 +1,132 @@
1
+ import ReactSelect, { components as reactSelectComponents } from 'react-select'
2
+
3
+ import cx from 'classnames'
4
+
5
+ import { Icon } from '../icons'
6
+ import styles from './Select.module.css'
7
+ import type {
8
+ DropdownIndicatorProps,
9
+ Props as ReactSelectProps,
10
+ MenuProps,
11
+ StylesConfig,
12
+ CSSObjectWithLabel,
13
+ } from 'react-select'
14
+ import type { POSITION_ABSOLUTE, POSITION_FIXED } from '../styles'
15
+
16
+ export { reactSelectComponents }
17
+
18
+ export const PLACEMENT_AUTO: 'auto' = 'auto'
19
+ export const PLACEMENT_BOTTOM: 'bottom' = 'bottom'
20
+ export const PLACEMENT_TOP: 'top' = 'top'
21
+
22
+ export const CONTEXT_MENU: 'menu' = 'menu'
23
+ export const CONTEXT_VALUE: 'value' = 'value'
24
+
25
+ export const SELECT_CX_PREFIX = 'ot_select'
26
+
27
+ export type ChangeAction =
28
+ | 'select-option'
29
+ | 'deselect-option'
30
+ | 'remove-value'
31
+ | 'pop-value'
32
+ | 'set-value'
33
+ | 'clear'
34
+ | 'create-option'
35
+
36
+ export interface SelectOption {
37
+ value: string
38
+ label?: string
39
+ isDisabled?: boolean
40
+ }
41
+
42
+ export interface SelectOptionGroup {
43
+ options: SelectOption[]
44
+ label?: string
45
+ }
46
+
47
+ // deprecated this type shouldn't be directly needed as the types for react-select
48
+ // combine options and groups for us now
49
+ export type SelectOptionOrGroup = SelectOption | SelectOptionGroup
50
+
51
+ export type SelectPlacement =
52
+ | typeof PLACEMENT_AUTO
53
+ | typeof PLACEMENT_BOTTOM
54
+ | typeof PLACEMENT_TOP
55
+
56
+ export type SelectPosition = typeof POSITION_ABSOLUTE | typeof POSITION_FIXED
57
+
58
+ export type SelectOptionContext = typeof CONTEXT_MENU | typeof CONTEXT_VALUE
59
+
60
+ export type SelectProps = ReactSelectProps<SelectOption>
61
+
62
+ const VOID_STYLE: unknown = undefined
63
+ const NO_STYLE_FN = (): CSSObjectWithLabel => VOID_STYLE as CSSObjectWithLabel
64
+
65
+ const CLEAR_STYLES: StylesConfig<SelectOption> = {
66
+ clearIndicator: NO_STYLE_FN,
67
+ container: NO_STYLE_FN,
68
+ control: NO_STYLE_FN,
69
+ dropdownIndicator: NO_STYLE_FN,
70
+ group: NO_STYLE_FN,
71
+ groupHeading: NO_STYLE_FN,
72
+ indicatorsContainer: NO_STYLE_FN,
73
+ indicatorSeparator: NO_STYLE_FN,
74
+ input: (styles: CSSObjectWithLabel) => ({
75
+ ...styles,
76
+ zIndex: 2,
77
+ position: 'absolute',
78
+ }),
79
+ loadingIndicator: NO_STYLE_FN,
80
+ loadingMessage: NO_STYLE_FN,
81
+ menu: NO_STYLE_FN,
82
+ menuList: NO_STYLE_FN,
83
+ multiValue: NO_STYLE_FN,
84
+ multiValueLabel: NO_STYLE_FN,
85
+ multiValueRemove: NO_STYLE_FN,
86
+ option: NO_STYLE_FN,
87
+ // the following should not be cleared to ensure proper positioning
88
+ // included as comments so we can see what we're not touching
89
+ // noOptionsMessage: NO_STYLE_FN,
90
+ // menuPortal: _ => _,
91
+ // placeholder: _ => _,
92
+ // singleValue: _ => _,
93
+ // valueContainer: _ => _,
94
+ }
95
+
96
+ export function Select(props: SelectProps): JSX.Element {
97
+ return (
98
+ <ReactSelect
99
+ {...props}
100
+ styles={CLEAR_STYLES}
101
+ classNamePrefix={SELECT_CX_PREFIX}
102
+ className={cx(styles.select, props.className)}
103
+ components={{ DropdownIndicator, Menu }}
104
+ />
105
+ )
106
+ }
107
+
108
+ function DropdownIndicator(
109
+ props: DropdownIndicatorProps<SelectOption>
110
+ ): JSX.Element {
111
+ return (
112
+ <reactSelectComponents.DropdownIndicator {...props}>
113
+ <div
114
+ className={cx(styles.dropdown_indicator, {
115
+ [styles.flipped]: props.selectProps.menuIsOpen,
116
+ })}
117
+ >
118
+ <Icon
119
+ name="menu-down-pd"
120
+ className={cx(styles.dropdown_indicator_icon)}
121
+ />
122
+ </div>
123
+ </reactSelectComponents.DropdownIndicator>
124
+ )
125
+ }
126
+
127
+ const Menu = (props: MenuProps<SelectOption>): JSX.Element => (
128
+ <reactSelectComponents.Menu {...props}>
129
+ <div className={styles.menu}>{props.children}</div>
130
+ <div className={styles.menu_control_bridge} />
131
+ </reactSelectComponents.Menu>
132
+ )
@@ -0,0 +1,94 @@
1
+ import type * as React from 'react'
2
+ import cx from 'classnames'
3
+ import find from 'lodash/find'
4
+
5
+ import { Select } from './Select'
6
+ import styles from './SelectField.module.css'
7
+
8
+ import type { SelectProps } from './Select'
9
+ import type { ActionMeta, MultiValue, SingleValue } from 'react-select'
10
+ import type { SelectOption } from '.'
11
+
12
+ export interface SelectFieldProps {
13
+ /** optional HTML id for container */
14
+ id?: SelectProps['id']
15
+ /** field name */
16
+ name: NonNullable<SelectProps['name']>
17
+ /** react-Select option, usually label, value */
18
+ options: NonNullable<SelectProps['options']>
19
+ /** currently selected value */
20
+ value?: string | null
21
+ /** disable the select */
22
+ disabled?: SelectProps['isDisabled']
23
+ /** optional placeholder */
24
+ placeholder?: SelectProps['placeholder']
25
+ /** menuPosition prop to send to react-select */
26
+ menuPosition?: SelectProps['menuPosition']
27
+ /** render function for the option label passed to react-select */
28
+ formatOptionLabel?: SelectProps['formatOptionLabel']
29
+ /** optional className */
30
+ className?: string
31
+ /** optional caption. hidden when `error` is given */
32
+ caption?: React.ReactNode
33
+ /** if included, use error style and display error instead of caption */
34
+ error?: string | null
35
+ /** change handler called with (name, value) */
36
+ onValueChange?: (
37
+ name: string,
38
+ value: string,
39
+ actionMeta: ActionMeta<SelectOption>
40
+ ) => void
41
+ /** blur handler called with (name) */
42
+ onLoseFocus?: (name: string) => void
43
+ }
44
+
45
+ export function SelectField(props: SelectFieldProps): JSX.Element {
46
+ const {
47
+ id,
48
+ name,
49
+ options,
50
+ disabled,
51
+ placeholder,
52
+ menuPosition,
53
+ formatOptionLabel,
54
+ className,
55
+ error,
56
+ onValueChange,
57
+ onLoseFocus,
58
+ } = props
59
+ // @ts-expect-error(mc, 2021-03-19): resolve this error
60
+ const allOptions = options.flatMap(og => og.options || [og])
61
+ const value = find(allOptions, opt => opt.value === props.value) || null
62
+ const caption = error || props.caption
63
+ // @ts-expect-error(sa, 2021-6-23): cast value to boolean
64
+ const captionCx = cx(styles.select_caption, { [styles.error]: error })
65
+ // @ts-expect-error(sa, 2021-6-23): cast value to boolean
66
+ const fieldCx = cx(styles.select_field, { [styles.error]: error }, className)
67
+
68
+ return (
69
+ <div>
70
+ <Select
71
+ className={fieldCx}
72
+ id={id}
73
+ name={name}
74
+ options={options}
75
+ value={value}
76
+ isDisabled={disabled}
77
+ placeholder={placeholder}
78
+ menuPosition={menuPosition}
79
+ formatOptionLabel={formatOptionLabel}
80
+ onChange={(
81
+ opt: SingleValue<SelectOption> | MultiValue<SelectOption>,
82
+ e: ActionMeta<SelectOption>
83
+ ) => {
84
+ const value = (opt as SelectOption).value
85
+ onValueChange?.(name, value, e)
86
+ }}
87
+ onBlur={() => {
88
+ if (onLoseFocus != null) onLoseFocus(name)
89
+ }}
90
+ />
91
+ {caption != null ? <p className={captionCx}>{caption}</p> : null}
92
+ </div>
93
+ )
94
+ }
@@ -0,0 +1,31 @@
1
+ import * as React from 'react'
2
+
3
+ import { ToggleField as ToggleFieldComponent } from './ToggleField'
4
+
5
+ import type { Story, Meta } from '@storybook/react'
6
+
7
+ const Template: Story<
8
+ React.ComponentProps<typeof ToggleFieldComponent>
9
+ > = args => {
10
+ const [isOn, setIsOn] = React.useState<boolean>(false)
11
+ return (
12
+ <ToggleFieldComponent
13
+ {...args}
14
+ onChange={e => {
15
+ setIsOn(!isOn)
16
+ args.onChange(e)
17
+ }}
18
+ value={isOn}
19
+ />
20
+ )
21
+ }
22
+
23
+ export const ToggleField = Template.bind({})
24
+ ToggleField.args = {
25
+ label: 'Toggle Me',
26
+ }
27
+
28
+ export default {
29
+ title: 'Library/Molecules/Forms/Toggle Field',
30
+ component: ToggleField,
31
+ } as Meta
@@ -0,0 +1,59 @@
1
+ import type * as React from 'react'
2
+ import cx from 'classnames'
3
+ import { Icon } from '../icons'
4
+
5
+ import styles from './forms.module.css'
6
+
7
+ export interface ToggleFieldProps {
8
+ /** change handler */
9
+ onChange: (event: React.ChangeEvent<HTMLInputElement>) => unknown
10
+ /** checkbox is checked if value is true */
11
+ value?: boolean
12
+ /** classes to apply */
13
+ className?: string
14
+ /** classes to apply to inner label text div */
15
+ labelTextClassName?: string | null | undefined
16
+ /** name of field in form */
17
+ name?: string
18
+ /** label text for toggled off */
19
+ offLabel?: string
20
+ /** label text for toggled on */
21
+ onLabel?: string
22
+ /** checkbox is disabled if value is true */
23
+ disabled?: boolean
24
+ /** html tabindex property */
25
+ tabIndex?: number
26
+ }
27
+
28
+ export function ToggleField(props: ToggleFieldProps): JSX.Element {
29
+ const outerClassName = cx(styles.form_field, props.className, {
30
+ [styles.toggle_disabled]: props.disabled,
31
+ })
32
+
33
+ const innerDivClassName = cx(styles.toggle_icon, {
34
+ [styles.toggle_disabled]: props.disabled,
35
+ })
36
+
37
+ return (
38
+ <label className={outerClassName}>
39
+ <div className={innerDivClassName}>
40
+ <Icon
41
+ name={props.value ? 'ot-toggle-field-on' : 'ot-toggle-field-off'}
42
+ width="100%"
43
+ />
44
+ </div>
45
+ <input
46
+ className={cx(styles.input_field, styles.accessibly_hidden)}
47
+ type="checkbox"
48
+ name={props.name}
49
+ checked={props.value || false}
50
+ disabled={props.disabled}
51
+ onChange={props.onChange}
52
+ tabIndex={props.tabIndex}
53
+ />
54
+ <div className={cx(props.labelTextClassName, styles.label_text)}>
55
+ {props.value ? props.onLabel : props.offLabel}
56
+ </div>
57
+ </label>
58
+ )
59
+ }
@@ -0,0 +1,8 @@
1
+ export * from './DeprecatedCheckboxField'
2
+ export * from './DropdownField'
3
+ export * from './FormGroup'
4
+ export * from './LegacyInputField'
5
+ export * from './RadioGroup'
6
+ export * from './Select'
7
+ export * from './SelectField'
8
+ export * from './ToggleField'
@@ -0,0 +1,94 @@
1
+ import type * as React from 'react'
2
+ import {
3
+ fixture96Plate,
4
+ fixtureTiprack1000ul,
5
+ FLEX_ROBOT_TYPE,
6
+ HEATERSHAKER_MODULE_V1,
7
+ MAGNETIC_BLOCK_V1,
8
+ TEMPERATURE_MODULE_V2,
9
+ THERMOCYCLER_MODULE_V2,
10
+ } from '@opentrons/shared-data'
11
+
12
+ import {
13
+ EXTENDED_DECK_CONFIG_FIXTURE,
14
+ STANDARD_SLOT_DECK_CONFIG_FIXTURE,
15
+ WASTE_CHUTE_DECK_CONFIG_FIXTURE,
16
+ } from './__fixtures__'
17
+ import { BaseDeck as BaseDeckComponent } from './BaseDeck'
18
+
19
+ import type { Meta, StoryObj } from '@storybook/react'
20
+ import type {
21
+ DeckConfiguration,
22
+ LabwareDefinition2,
23
+ } from '@opentrons/shared-data'
24
+
25
+ const meta: Meta<React.ComponentProps<typeof BaseDeckComponent>> = {
26
+ component: BaseDeckComponent,
27
+ title: 'Library/Molecules/Simulation/BaseDeck',
28
+ argTypes: {
29
+ deckConfig: {
30
+ options: ['single slot deck', 'staging area deck', 'waste chute deck'],
31
+ control: { type: 'radio' },
32
+ },
33
+ },
34
+ } as Meta
35
+
36
+ export default meta
37
+ type Story = StoryObj<React.ComponentProps<typeof BaseDeckComponent>>
38
+
39
+ const getDeckConfig = (args: any): DeckConfiguration => {
40
+ switch (args.deckConfig) {
41
+ case 'staging area deck':
42
+ return EXTENDED_DECK_CONFIG_FIXTURE
43
+ case 'waste chute deck':
44
+ return WASTE_CHUTE_DECK_CONFIG_FIXTURE
45
+ default:
46
+ return STANDARD_SLOT_DECK_CONFIG_FIXTURE
47
+ }
48
+ }
49
+
50
+ export const BaseDeck: Story = {
51
+ args: {
52
+ robotType: FLEX_ROBOT_TYPE,
53
+ deckConfig: EXTENDED_DECK_CONFIG_FIXTURE,
54
+ labwareOnDeck: [
55
+ {
56
+ labwareLocation: { slotName: 'C2' },
57
+ definition: fixture96Plate as LabwareDefinition2,
58
+ },
59
+ {
60
+ labwareLocation: { slotName: 'C3' },
61
+ definition: fixtureTiprack1000ul as LabwareDefinition2,
62
+ },
63
+ ],
64
+ modulesOnDeck: [
65
+ {
66
+ moduleLocation: { slotName: 'B1' },
67
+ moduleModel: THERMOCYCLER_MODULE_V2,
68
+ nestedLabwareDef: fixture96Plate as LabwareDefinition2,
69
+ innerProps: { lidMotorState: 'open' },
70
+ },
71
+ {
72
+ moduleLocation: { slotName: 'D1' },
73
+ moduleModel: TEMPERATURE_MODULE_V2,
74
+ nestedLabwareDef: fixture96Plate as LabwareDefinition2,
75
+ },
76
+ {
77
+ moduleLocation: { slotName: 'B3' },
78
+ moduleModel: HEATERSHAKER_MODULE_V1,
79
+ nestedLabwareDef: fixture96Plate as LabwareDefinition2,
80
+ },
81
+ {
82
+ moduleLocation: { slotName: 'D2' },
83
+ moduleModel: MAGNETIC_BLOCK_V1,
84
+ nestedLabwareDef: fixture96Plate as LabwareDefinition2,
85
+ },
86
+ ],
87
+ darkFill: 'rebeccapurple',
88
+ lightFill: 'lavender',
89
+ },
90
+ render: args => {
91
+ const deckConfig = getDeckConfig(args)
92
+ return <BaseDeckComponent {...args} deckConfig={deckConfig} />
93
+ },
94
+ }