@opentrons/components 0.1.6-alpha.15 → 0.1.6-alpha.17

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 (491) hide show
  1. package/lib/atoms/Checkbox/index.d.ts +1 -0
  2. package/lib/atoms/InputField/index.d.ts +9 -9
  3. package/lib/atoms/ListItem/ListItemChildren/ListItemCustomize.d.ts +2 -2
  4. package/lib/atoms/ListItem/ListItemChildren/ListItemDescriptor.d.ts +1 -0
  5. package/lib/atoms/ListItem/index.d.ts +1 -1
  6. package/lib/atoms/Tag/index.d.ts +1 -0
  7. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +6 -6
  8. package/lib/hardware-sim/Deck/RobotCoordsText.d.ts +1 -0
  9. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +2 -2
  10. package/lib/hooks/useMenuHandleClickOutside.d.ts +3 -3
  11. package/lib/molecules/DropdownMenu/index.d.ts +2 -2
  12. package/lib/molecules/InfoScreen/index.d.ts +3 -1
  13. package/lib/organisms/Toolbox/index.d.ts +1 -1
  14. package/package.json +6 -6
  15. package/src/__mocks__/file.js +10 -0
  16. package/src/__tests__/utils.test.ts +27 -0
  17. package/src/alerts/AlertItem.stories.tsx +49 -0
  18. package/src/alerts/AlertItem.tsx +85 -0
  19. package/src/alerts/alerts.module.css +103 -0
  20. package/src/alerts/index.ts +3 -0
  21. package/src/atoms/Checkbox/Checkbox.stories.tsx +24 -0
  22. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +55 -0
  23. package/src/atoms/Checkbox/index.tsx +127 -0
  24. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +30 -0
  25. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +141 -0
  26. package/src/atoms/CheckboxField/index.tsx +171 -0
  27. package/src/atoms/Chip/Chip.stories.tsx +59 -0
  28. package/src/atoms/Chip/__tests__/Chip.test.tsx +429 -0
  29. package/src/atoms/Chip/index.tsx +172 -0
  30. package/src/atoms/Divider/index.tsx +15 -0
  31. package/src/atoms/InputField/InputField.stories.tsx +77 -0
  32. package/src/atoms/InputField/__tests__/InputField.test.tsx +63 -0
  33. package/src/atoms/InputField/index.tsx +383 -0
  34. package/src/atoms/ListButton/ListButton.stories.tsx +133 -0
  35. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordion.tsx +65 -0
  36. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.tsx +23 -0
  37. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +108 -0
  38. package/src/atoms/ListButton/ListButtonChildren/index.ts +3 -0
  39. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +46 -0
  40. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +35 -0
  41. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +27 -0
  42. package/src/atoms/ListButton/index.tsx +72 -0
  43. package/src/atoms/ListItem/ListItem.stories.tsx +96 -0
  44. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +78 -0
  45. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +42 -0
  46. package/src/atoms/ListItem/ListItemChildren/index.ts +2 -0
  47. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +61 -0
  48. package/src/atoms/ListItem/index.tsx +89 -0
  49. package/src/atoms/MenuList/MenuItem.stories.tsx +20 -0
  50. package/src/atoms/MenuList/MenuItem.tsx +55 -0
  51. package/src/atoms/MenuList/MenuList.stories.tsx +31 -0
  52. package/src/atoms/MenuList/OverflowBtn.stories.tsx +17 -0
  53. package/src/atoms/MenuList/OverflowBtn.tsx +76 -0
  54. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +50 -0
  55. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +36 -0
  56. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +33 -0
  57. package/src/atoms/MenuList/index.tsx +50 -0
  58. package/src/atoms/Snackbar/Snackbar.stories.tsx +67 -0
  59. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +73 -0
  60. package/src/atoms/Snackbar/index.tsx +91 -0
  61. package/src/atoms/StepMeter/index.tsx +53 -0
  62. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +106 -0
  63. package/src/atoms/StyledText/LegacyStyledText.tsx +95 -0
  64. package/src/atoms/StyledText/StyledText.stories.tsx +46 -0
  65. package/src/atoms/StyledText/StyledText.tsx +323 -0
  66. package/src/atoms/StyledText/index.ts +2 -0
  67. package/src/atoms/Tag/Tag.stories.tsx +48 -0
  68. package/src/atoms/Tag/__tests__/Tag.test.tsx +55 -0
  69. package/src/atoms/Tag/index.tsx +116 -0
  70. package/src/atoms/Toast/ODDToast.stories.tsx +68 -0
  71. package/src/atoms/Toast/Toast.stories.tsx +55 -0
  72. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +178 -0
  73. package/src/atoms/Toast/__tests__/Toast.test.tsx +174 -0
  74. package/src/atoms/Toast/index.tsx +439 -0
  75. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +39 -0
  76. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +28 -0
  77. package/src/atoms/ToggleGroup/index.tsx +91 -0
  78. package/src/atoms/Tooltip/Tooltip.stories.tsx +99 -0
  79. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +78 -0
  80. package/src/atoms/Tooltip/index.tsx +38 -0
  81. package/src/atoms/buttons/AlertPrimaryButton.tsx +26 -0
  82. package/src/atoms/buttons/AltPrimaryButton.tsx +31 -0
  83. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +36 -0
  84. package/src/atoms/buttons/EmptySelectorButton.tsx +83 -0
  85. package/src/atoms/buttons/LargeButton.stories.tsx +99 -0
  86. package/src/atoms/buttons/LargeButton.tsx +320 -0
  87. package/src/atoms/buttons/PrimaryButton.tsx +36 -0
  88. package/src/atoms/buttons/RadioButton.stories.tsx +35 -0
  89. package/src/atoms/buttons/RadioButton.tsx +217 -0
  90. package/src/atoms/buttons/SecondaryButton.tsx +62 -0
  91. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +47 -0
  92. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +57 -0
  93. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +42 -0
  94. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +91 -0
  95. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +64 -0
  96. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +98 -0
  97. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +54 -0
  98. package/src/atoms/buttons/buttons.stories.tsx +78 -0
  99. package/src/atoms/buttons/index.ts +6 -0
  100. package/src/atoms/index.ts +20 -0
  101. package/src/barrel.ts +10 -0
  102. package/src/buttons/Button.tsx +96 -0
  103. package/src/buttons/DeprecatedPrimaryButton.tsx +24 -0
  104. package/src/buttons/FlatButton.tsx +21 -0
  105. package/src/buttons/IconButton.tsx +37 -0
  106. package/src/buttons/OutlineButton.tsx +24 -0
  107. package/src/buttons/buttons.module.css +428 -0
  108. package/src/buttons/index.ts +7 -0
  109. package/src/controls/ControlInfo.tsx +13 -0
  110. package/src/controls/LabeledButton.tsx +28 -0
  111. package/src/controls/LabeledCheckbox.tsx +35 -0
  112. package/src/controls/LabeledControl.tsx +24 -0
  113. package/src/controls/LabeledRadioGroup.tsx +27 -0
  114. package/src/controls/LabeledSelect.tsx +34 -0
  115. package/src/controls/LabeledToggle.tsx +35 -0
  116. package/src/controls/StackedLabeledControl.tsx +28 -0
  117. package/src/controls/ToggleButton.tsx +25 -0
  118. package/src/controls/index.ts +10 -0
  119. package/src/controls/styles.module.css +103 -0
  120. package/src/forms/DeprecatedCheckboxField.stories.tsx +31 -0
  121. package/src/forms/DeprecatedCheckboxField.tsx +94 -0
  122. package/src/forms/DropdownField.stories.tsx +44 -0
  123. package/src/forms/DropdownField.tsx +106 -0
  124. package/src/forms/FormGroup.stories.tsx +31 -0
  125. package/src/forms/FormGroup.tsx +53 -0
  126. package/src/forms/InputField.stories.tsx +41 -0
  127. package/src/forms/LegacyInputField.tsx +123 -0
  128. package/src/forms/RadioGroup.stories.tsx +44 -0
  129. package/src/forms/RadioGroup.tsx +87 -0
  130. package/src/forms/Select.module.css +118 -0
  131. package/src/forms/Select.stories.tsx +117 -0
  132. package/src/forms/Select.tsx +132 -0
  133. package/src/forms/SelectField.module.css +16 -0
  134. package/src/forms/SelectField.tsx +94 -0
  135. package/src/forms/ToggleField.stories.tsx +31 -0
  136. package/src/forms/ToggleField.tsx +59 -0
  137. package/src/forms/__tests__/DeprecatedCheckboxField.test.tsx +5 -0
  138. package/src/forms/__tests__/DropdownField.test.tsx +5 -0
  139. package/src/forms/__tests__/InputField.test.tsx +5 -0
  140. package/src/forms/__tests__/Select.test.tsx +5 -0
  141. package/src/forms/__tests__/SelectField.test.tsx +5 -0
  142. package/src/forms/__tests__/ToggleField.test.tsx +5 -0
  143. package/src/forms/forms.module.css +239 -0
  144. package/src/forms/index.ts +8 -0
  145. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +94 -0
  146. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +423 -0
  147. package/src/hardware-sim/BaseDeck/SingleSlotFixture.tsx +199 -0
  148. package/src/hardware-sim/BaseDeck/SlotBase.tsx +5 -0
  149. package/src/hardware-sim/BaseDeck/SlotClip.tsx +15 -0
  150. package/src/hardware-sim/BaseDeck/StagingAreaFixture.tsx +114 -0
  151. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +114 -0
  152. package/src/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.tsx +68 -0
  153. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +165 -0
  154. package/src/hardware-sim/BaseDeck/index.ts +5 -0
  155. package/src/hardware-sim/Deck/DeckFromLayers.tsx +58 -0
  156. package/src/hardware-sim/Deck/FlexTrash.tsx +128 -0
  157. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +97 -0
  158. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +251 -0
  159. package/src/hardware-sim/Deck/OT2Layers.tsx +153 -0
  160. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +46 -0
  161. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +42 -0
  162. package/src/hardware-sim/Deck/RobotCoordsText.tsx +32 -0
  163. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +90 -0
  164. package/src/hardware-sim/Deck/SlotLabels.tsx +111 -0
  165. package/src/hardware-sim/Deck/__mocks__/getDeckDefinitions.ts +29 -0
  166. package/src/hardware-sim/Deck/constants.ts +12 -0
  167. package/src/hardware-sim/Deck/index.tsx +8 -0
  168. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +91 -0
  169. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +110 -0
  170. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +131 -0
  171. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +102 -0
  172. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +130 -0
  173. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +89 -0
  174. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +54 -0
  175. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +103 -0
  176. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +89 -0
  177. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +99 -0
  178. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +96 -0
  179. package/src/hardware-sim/DeckConfigurator/constants.ts +81 -0
  180. package/src/hardware-sim/DeckConfigurator/index.tsx +285 -0
  181. package/src/hardware-sim/DeckSlotLocation/index.tsx +88 -0
  182. package/src/hardware-sim/Labware/Labware.tsx +173 -0
  183. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96DeepWellAdapter.tsx +23 -0
  184. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96FlatBottomAdapter.tsx +7 -0
  185. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAluminumFlatBottomPlate.tsx +13 -0
  186. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx +100 -0
  187. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsFlex96TiprackAdapter.tsx +13 -0
  188. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx +83 -0
  189. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsUniversalFlatAdapter.tsx +13 -0
  190. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +73 -0
  191. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +96 -0
  192. package/src/hardware-sim/Labware/LabwareRender.tsx +173 -0
  193. package/src/hardware-sim/Labware/LabwareStackRender.tsx +272 -0
  194. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +43 -0
  195. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +54 -0
  196. package/src/hardware-sim/Labware/index.ts +6 -0
  197. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +39 -0
  198. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +133 -0
  199. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +118 -0
  200. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +121 -0
  201. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +38 -0
  202. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +77 -0
  203. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +74 -0
  204. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +121 -0
  205. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +66 -0
  206. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +31 -0
  207. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +91 -0
  208. package/src/hardware-sim/Labware/labwareInternals/index.ts +8 -0
  209. package/src/hardware-sim/Labware/labwareInternals/types.ts +18 -0
  210. package/src/hardware-sim/Module/HeaterShaker.tsx +83 -0
  211. package/src/hardware-sim/Module/MagneticBlock.tsx +49 -0
  212. package/src/hardware-sim/Module/MagneticModule.tsx +51 -0
  213. package/src/hardware-sim/Module/Module.stories.tsx +90 -0
  214. package/src/hardware-sim/Module/ModuleTag.tsx +38 -0
  215. package/src/hardware-sim/Module/PlateReader.tsx +208 -0
  216. package/src/hardware-sim/Module/Temperature.tsx +54 -0
  217. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +248 -0
  218. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN2.tsx +286 -0
  219. package/src/hardware-sim/Module/Thermocycler/index.tsx +49 -0
  220. package/src/hardware-sim/Module/index.tsx +227 -0
  221. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +23 -0
  222. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +52 -0
  223. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +71 -0
  224. package/src/hardware-sim/Pipette/PipetteRender.tsx +92 -0
  225. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +16 -0
  226. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +67 -0
  227. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +99 -0
  228. package/src/hardware-sim/Pipette/constants.ts +10 -0
  229. package/src/hardware-sim/Pipette/index.ts +1 -0
  230. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +68 -0
  231. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +25 -0
  232. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +47145 -0
  233. package/src/hardware-sim/ProtocolDeck/index.tsx +174 -0
  234. package/src/hardware-sim/ProtocolDeck/types.ts +6 -0
  235. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +158 -0
  236. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +33 -0
  237. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +155 -0
  238. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +42 -0
  239. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +129 -0
  240. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +29 -0
  241. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +30 -0
  242. package/src/hardware-sim/ProtocolDeck/utils/index.ts +3 -0
  243. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +28 -0
  244. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +52 -0
  245. package/src/hardware-sim/RobotCoordinateSpace/index.ts +2 -0
  246. package/src/hardware-sim/index.ts +11 -0
  247. package/src/hardware-sim/utils.ts +18 -0
  248. package/src/helix-design-system/borders.ts +32 -0
  249. package/src/helix-design-system/colors.ts +100 -0
  250. package/src/helix-design-system/index.ts +4 -0
  251. package/src/helix-design-system/product/index.ts +1 -0
  252. package/src/helix-design-system/product/typography.ts +151 -0
  253. package/src/helix-design-system/style.ts +2 -0
  254. package/src/hooks/__tests__/useConditionalConfirm.test.tsx +5 -0
  255. package/src/hooks/__tests__/useDrag.test.ts +46 -0
  256. package/src/hooks/__tests__/useIdle.test.ts +68 -0
  257. package/src/hooks/__tests__/useInterval.test.tsx +5 -0
  258. package/src/hooks/__tests__/useLongPress.test.ts +25 -0
  259. package/src/hooks/__tests__/useMountEffect.test.tsx +5 -0
  260. package/src/hooks/__tests__/usePrevious.test.tsx +5 -0
  261. package/src/hooks/__tests__/useScrolling.test.tsx +46 -0
  262. package/src/hooks/__tests__/useSwipe.test.tsx +26 -0
  263. package/src/hooks/__tests__/useTimeout.test.tsx +5 -0
  264. package/src/hooks/__tests__/useToggle.test.tsx +5 -0
  265. package/src/hooks/index.ts +15 -0
  266. package/src/hooks/useConditionalConfirm.ts +70 -0
  267. package/src/hooks/useDrag.ts +90 -0
  268. package/src/hooks/useIdle.ts +68 -0
  269. package/src/hooks/useInterval.ts +38 -0
  270. package/src/hooks/useLongPress.ts +83 -0
  271. package/src/hooks/useMenuHandleClickOutside.tsx +46 -0
  272. package/src/hooks/useMountEffect.ts +12 -0
  273. package/src/hooks/usePrevious.ts +19 -0
  274. package/src/hooks/useScrolling.ts +33 -0
  275. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +55 -0
  276. package/src/hooks/useSelectDeckLocation/index.tsx +331 -0
  277. package/src/hooks/useSwipe.ts +86 -0
  278. package/src/hooks/useTimeout.ts +33 -0
  279. package/src/hooks/useToggle.ts +27 -0
  280. package/src/icons/Icon.stories.tsx +37 -0
  281. package/src/icons/Icon.tsx +79 -0
  282. package/src/icons/IconList.stories.tsx +108 -0
  283. package/src/icons/ModuleIcon.tsx +48 -0
  284. package/src/icons/NotificationIcon.tsx +41 -0
  285. package/src/icons/icon-data.ts +821 -0
  286. package/src/icons/index.ts +6 -0
  287. package/src/images/index.ts +1 -0
  288. package/src/images/labware/index.ts +1 -0
  289. package/src/images/labware/measurement-guide/images/depth/depth-plate-flat@3x.png +0 -0
  290. package/src/images/labware/measurement-guide/images/depth/depth-plate-round@3x.png +0 -0
  291. package/src/images/labware/measurement-guide/images/depth/depth-plate-v@3x.png +0 -0
  292. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-flat@3x.png +0 -0
  293. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-round@3x.png +0 -0
  294. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-v@3x.png +0 -0
  295. package/src/images/labware/measurement-guide/images/depth/length-tip-rack@3x.png +0 -0
  296. package/src/images/labware/measurement-guide/images/dimensions/footprint@3x.png +0 -0
  297. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-plate@3x.png +0 -0
  298. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-tubes@3x.png +0 -0
  299. package/src/images/labware/measurement-guide/images/dimensions/height-plate-and-reservoir@3x.png +0 -0
  300. package/src/images/labware/measurement-guide/images/dimensions/height-tip-rack@3x.png +0 -0
  301. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack-irregular@3x.png +0 -0
  302. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack@3x.png +0 -0
  303. package/src/images/labware/measurement-guide/images/offset/offset-reservoir@3x.png +0 -0
  304. package/src/images/labware/measurement-guide/images/offset/offset-well-circular@3x.png +0 -0
  305. package/src/images/labware/measurement-guide/images/offset/offset-well-rectangular@3x.png +0 -0
  306. package/src/images/labware/measurement-guide/images/shape/shape-circular@3x.png +0 -0
  307. package/src/images/labware/measurement-guide/images/shape/shape-rectangular@3x.png +0 -0
  308. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir-multi-row@3x.png +0 -0
  309. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir@3x.png +0 -0
  310. package/src/images/labware/measurement-guide/images/spacing/spacing-well-circular@3x.png +0 -0
  311. package/src/images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png +0 -0
  312. package/src/images/labware/measurement-guide/index.ts +272 -0
  313. package/src/index.module.css +9 -0
  314. package/src/index.ts +41 -0
  315. package/src/instrument/InstrumentDiagram.stories.tsx +42 -0
  316. package/src/instrument/InstrumentDiagram.tsx +58 -0
  317. package/src/instrument/InstrumentGroup.stories.tsx +88 -0
  318. package/src/instrument/InstrumentGroup.tsx +35 -0
  319. package/src/instrument/InstrumentInfo.tsx +107 -0
  320. package/src/instrument/PipetteSelect.module.css +14 -0
  321. package/src/instrument/PipetteSelect.stories.tsx +40 -0
  322. package/src/instrument/PipetteSelect.tsx +170 -0
  323. package/src/instrument/__tests__/InstrumentInfo.test.tsx +55 -0
  324. package/src/instrument/__tests__/PipetteSelect.test.tsx +4 -0
  325. package/src/instrument/eight-channel-flex.png +0 -0
  326. package/src/instrument/index.ts +4 -0
  327. package/src/instrument/instrument.module.css +45 -0
  328. package/src/instrument/multi-channel_GEN1_800px.png +0 -0
  329. package/src/instrument/multi-channel_GEN2_800px.png +0 -0
  330. package/src/instrument/ninety-six-channel-gen1.png +0 -0
  331. package/src/instrument/pipetteGEN2Multi.png +0 -0
  332. package/src/instrument/pipetteGEN2Single.png +0 -0
  333. package/src/instrument/pipetteMulti.png +0 -0
  334. package/src/instrument/pipetteSingle.png +0 -0
  335. package/src/instrument/single-channel-flex.png +0 -0
  336. package/src/instrument/single-channel_GEN2_800px.png +0 -0
  337. package/src/instrument/single_channel_GEN1_800px.png +0 -0
  338. package/src/interaction-enhancers/ClickOutside.ts +57 -0
  339. package/src/interaction-enhancers/HandleKeypress.tsx +69 -0
  340. package/src/interaction-enhancers/__tests__/useHover.test.tsx +4 -0
  341. package/src/interaction-enhancers/index.ts +4 -0
  342. package/src/interaction-enhancers/useHover.ts +84 -0
  343. package/src/interaction-enhancers/useOnClickOutside.ts +42 -0
  344. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +20 -0
  345. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +22 -0
  346. package/src/legacy-hardware-sim/ModuleItem.module.css +98 -0
  347. package/src/legacy-hardware-sim/ModuleItem.tsx +145 -0
  348. package/src/legacy-hardware-sim/index.ts +2 -0
  349. package/src/lists/SidePanelGroup.tsx +48 -0
  350. package/src/lists/TitledList.tsx +155 -0
  351. package/src/lists/index.ts +3 -0
  352. package/src/lists/lists.module.css +171 -0
  353. package/src/modals/AlertModal.tsx +89 -0
  354. package/src/modals/ContinueModal.tsx +32 -0
  355. package/src/modals/LegacyModal.tsx +59 -0
  356. package/src/modals/Modal.stories.tsx +52 -0
  357. package/src/modals/Modal.tsx +96 -0
  358. package/src/modals/ModalHeader.tsx +100 -0
  359. package/src/modals/ModalShell.tsx +155 -0
  360. package/src/modals/Overlay.tsx +38 -0
  361. package/src/modals/SpinnerModal.tsx +35 -0
  362. package/src/modals/SpinnerModalPage.tsx +30 -0
  363. package/src/modals/__tests__/Modal.test.tsx +65 -0
  364. package/src/modals/__tests__/ModalHeader.test.tsx +73 -0
  365. package/src/modals/__tests__/ModalShell.test.tsx +45 -0
  366. package/src/modals/index.ts +10 -0
  367. package/src/modals/modals.module.css +275 -0
  368. package/src/molecules/Banner/Banner.stories.tsx +41 -0
  369. package/src/molecules/Banner/__tests__/Banner.test.tsx +94 -0
  370. package/src/molecules/Banner/index.tsx +147 -0
  371. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +65 -0
  372. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +49 -0
  373. package/src/molecules/DeckInfoLabel/index.tsx +95 -0
  374. package/src/molecules/DeckLabel/DeckLabel.stories.tsx +31 -0
  375. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +69 -0
  376. package/src/molecules/DeckLabel/index.tsx +80 -0
  377. package/src/molecules/DropdownMenu/DropdownMenu.stories.tsx +30 -0
  378. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +85 -0
  379. package/src/molecules/DropdownMenu/index.tsx +343 -0
  380. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +50 -0
  381. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +40 -0
  382. package/src/molecules/InfoScreen/index.tsx +54 -0
  383. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +53 -0
  384. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +50 -0
  385. package/src/molecules/LiquidIcon/index.tsx +68 -0
  386. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +172 -0
  387. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +126 -0
  388. package/src/molecules/ParametersTable/index.tsx +198 -0
  389. package/src/molecules/Tabs/Tabs.stories.tsx +74 -0
  390. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +90 -0
  391. package/src/molecules/Tabs/index.tsx +94 -0
  392. package/src/molecules/index.ts +8 -0
  393. package/src/nav/SidePanel.module.css +34 -0
  394. package/src/nav/SidePanel.stories.tsx +29 -0
  395. package/src/nav/SidePanel.tsx +21 -0
  396. package/src/nav/index.ts +2 -0
  397. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +46 -0
  398. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +49 -0
  399. package/src/organisms/DeckLabelSet/index.tsx +69 -0
  400. package/src/organisms/EndUserAgreementFooter/__tests__/EndUserAgreementFooter.test.tsx +21 -0
  401. package/src/organisms/EndUserAgreementFooter/index.tsx +49 -0
  402. package/src/organisms/Toolbox/Toolbox.stories.tsx +23 -0
  403. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +35 -0
  404. package/src/organisms/Toolbox/index.tsx +160 -0
  405. package/src/organisms/index.ts +3 -0
  406. package/src/primitives/Box.stories.tsx +25 -0
  407. package/src/primitives/Box.tsx +17 -0
  408. package/src/primitives/Btn.stories.tsx +105 -0
  409. package/src/primitives/Btn.tsx +266 -0
  410. package/src/primitives/Flex.stories.tsx +50 -0
  411. package/src/primitives/Flex.tsx +17 -0
  412. package/src/primitives/ForeignObject.tsx +70 -0
  413. package/src/primitives/Link.stories.tsx +27 -0
  414. package/src/primitives/Link.tsx +32 -0
  415. package/src/primitives/README.md +188 -0
  416. package/src/primitives/Svg.stories.tsx +36 -0
  417. package/src/primitives/Svg.tsx +68 -0
  418. package/src/primitives/Text.stories.tsx +17 -0
  419. package/src/primitives/Text.tsx +18 -0
  420. package/src/primitives/__tests__/Box.test.tsx +4 -0
  421. package/src/primitives/__tests__/Btn.test.tsx +4 -0
  422. package/src/primitives/__tests__/Flex.test.tsx +4 -0
  423. package/src/primitives/__tests__/Link.test.tsx +4 -0
  424. package/src/primitives/__tests__/Svg.test.tsx +4 -0
  425. package/src/primitives/__tests__/Text.test.tsx +4 -0
  426. package/src/primitives/__tests__/primitives.test.tsx +4 -0
  427. package/src/primitives/__tests__/style-props.test.tsx +4 -0
  428. package/src/primitives/index.ts +10 -0
  429. package/src/primitives/style-props.ts +197 -0
  430. package/src/primitives/types.ts +120 -0
  431. package/src/robot-types.ts +4 -0
  432. package/src/slotmap/OT2SlotMap.tsx +73 -0
  433. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +4 -0
  434. package/src/slotmap/index.ts +1 -0
  435. package/src/slotmap/styles.module.css +18 -0
  436. package/src/structure/Card.stories.tsx +28 -0
  437. package/src/structure/Card.tsx +64 -0
  438. package/src/structure/LabeledValue.stories.tsx +17 -0
  439. package/src/structure/LabeledValue.tsx +31 -0
  440. package/src/structure/Pill.module.css +16 -0
  441. package/src/structure/Pill.tsx +43 -0
  442. package/src/structure/Splash.module.css +16 -0
  443. package/src/structure/Splash.stories.tsx +24 -0
  444. package/src/structure/Splash.tsx +22 -0
  445. package/src/structure/TitleBar.stories.tsx +42 -0
  446. package/src/structure/TitleBar.tsx +81 -0
  447. package/src/structure/index.ts +7 -0
  448. package/src/structure/structure.module.css +114 -0
  449. package/src/styles/borders.module.css +20 -0
  450. package/src/styles/borders.ts +16 -0
  451. package/src/styles/colors.module.css +57 -0
  452. package/src/styles/colors.ts +58 -0
  453. package/src/styles/cursor.ts +12 -0
  454. package/src/styles/flexbox.ts +39 -0
  455. package/src/styles/index.module.css +8 -0
  456. package/src/styles/index.ts +8 -0
  457. package/src/styles/layout.ts +31 -0
  458. package/src/styles/position.ts +5 -0
  459. package/src/styles/spacing.ts +11 -0
  460. package/src/styles/typography.module.css +22 -0
  461. package/src/styles/typography.ts +90 -0
  462. package/src/testing/utils/index.ts +2 -0
  463. package/src/testing/utils/matchers.ts +31 -0
  464. package/src/testing/utils/renderWithProviders.tsx +53 -0
  465. package/src/tooltips/DeprecatedTooltip.tsx +105 -0
  466. package/src/tooltips/HoverTooltip.tsx +83 -0
  467. package/src/tooltips/LegacyTooltip.stories.tsx +98 -0
  468. package/src/tooltips/LegacyTooltip.tsx +151 -0
  469. package/src/tooltips/__tests__/Tooltip.test.tsx +4 -0
  470. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +4 -0
  471. package/src/tooltips/__tests__/usePopper.test.tsx +4 -0
  472. package/src/tooltips/__tests__/useTooltip.test.tsx +4 -0
  473. package/src/tooltips/constants.ts +28 -0
  474. package/src/tooltips/index.ts +10 -0
  475. package/src/tooltips/styles.ts +20 -0
  476. package/src/tooltips/tooltips.module.css +72 -0
  477. package/src/tooltips/types.ts +73 -0
  478. package/src/tooltips/useHoverTooltip.ts +47 -0
  479. package/src/tooltips/usePopper.ts +87 -0
  480. package/src/tooltips/useTooltip.ts +100 -0
  481. package/src/ui-style-constants/index.ts +4 -0
  482. package/src/ui-style-constants/responsiveness.ts +15 -0
  483. package/src/ui-style-constants/spacing.ts +18 -0
  484. package/src/ui-style-constants/typography.ts +258 -0
  485. package/src/ui-style-constants/viewport.ts +18 -0
  486. package/src/utils.ts +56 -0
  487. package/tsconfig.json +0 -2
  488. package/vite.config.mts +6 -25
  489. package/lib/index.cjs +0 -732
  490. package/lib/index.mjs +0 -36590
  491. package/lib/style.css +0 -1
@@ -19,6 +19,7 @@ export declare function Checkbox(props: CheckboxProps): JSX.Element;
19
19
  interface CheckProps {
20
20
  isChecked: boolean;
21
21
  color?: string;
22
+ disabled?: boolean;
22
23
  }
23
24
  export declare function Check(props: CheckProps): JSX.Element;
24
25
  export {};
@@ -1,5 +1,5 @@
1
- import * as React from 'react';
2
1
  import { TYPOGRAPHY } from '../../ui-style-constants';
2
+ import type { ChangeEventHandler, FocusEvent, MouseEvent, ReactNode } from 'react';
3
3
  import type { IconName } from '../../icons';
4
4
  export declare const INPUT_TYPE_NUMBER: "number";
5
5
  export declare const LEGACY_INPUT_TYPE_TEXT: "text";
@@ -8,7 +8,7 @@ export interface InputFieldProps {
8
8
  /** field is disabled if value is true */
9
9
  disabled?: boolean;
10
10
  /** change handler */
11
- onChange?: React.ChangeEventHandler<HTMLInputElement>;
11
+ onChange?: ChangeEventHandler<HTMLInputElement>;
12
12
  /** name of field in form */
13
13
  name?: string;
14
14
  /** optional ID of <input> element */
@@ -16,7 +16,7 @@ export interface InputFieldProps {
16
16
  /** placeholder text */
17
17
  placeholder?: string;
18
18
  /** optional suffix component, appears to the right of input text */
19
- units?: React.ReactNode;
19
+ units?: ReactNode;
20
20
  /** current value of text in box, defaults to '' */
21
21
  value?: string | number | null;
22
22
  /** if included, InputField will use error style and display error instead of caption */
@@ -30,11 +30,11 @@ export interface InputFieldProps {
30
30
  /** optional input type (default "text") */
31
31
  type?: typeof LEGACY_INPUT_TYPE_TEXT | typeof LEGACY_INPUT_TYPE_PASSWORD | typeof INPUT_TYPE_NUMBER;
32
32
  /** mouse click handler */
33
- onClick?: (event: React.MouseEvent<HTMLInputElement>) => unknown;
33
+ onClick?: (event: MouseEvent<HTMLInputElement>) => unknown;
34
34
  /** focus handler */
35
- onFocus?: (event: React.FocusEvent<HTMLInputElement>) => unknown;
35
+ onFocus?: (event: FocusEvent<HTMLInputElement>) => unknown;
36
36
  /** blur handler */
37
- onBlur?: (event: React.FocusEvent<HTMLInputElement>) => unknown;
37
+ onBlur?: (event: FocusEvent<HTMLInputElement>) => unknown;
38
38
  /** makes input field read-only */
39
39
  readOnly?: boolean;
40
40
  /** html tabindex property */
@@ -44,8 +44,8 @@ export interface InputFieldProps {
44
44
  /** if true, clear out value and add '-' placeholder */
45
45
  isIndeterminate?: boolean;
46
46
  /** if input type is number, these are the min and max values */
47
- max?: number;
48
- min?: number;
47
+ max?: number | string;
48
+ min?: number | string;
49
49
  /** horizontal text alignment for title, input, and (sub)captions */
50
50
  textAlign?: typeof TYPOGRAPHY.textAlignLeft | typeof TYPOGRAPHY.textAlignCenter;
51
51
  /** small or medium input field height, relevant only */
@@ -65,4 +65,4 @@ export interface InputFieldProps {
65
65
  /** optional prop to override input field padding */
66
66
  padding?: string;
67
67
  }
68
- export declare const InputField: React.ForwardRefExoticComponent<Omit<InputFieldProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
68
+ export declare const InputField: import("react").ForwardRefExoticComponent<Omit<InputFieldProps, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
@@ -8,8 +8,8 @@ interface ListItemCustomizeProps {
8
8
  label?: string;
9
9
  dropdown?: DropdownMenuProps;
10
10
  tag?: TagProps;
11
- /** temporary prop for dropdown menu */
12
- forceDirection?: boolean;
11
+ /** optional placement of the menu */
12
+ menuPlacement?: 'auto' | 'top' | 'bottom';
13
13
  }
14
14
  export declare function ListItemCustomize(props: ListItemCustomizeProps): JSX.Element;
15
15
  export {};
@@ -2,6 +2,7 @@ interface ListItemDescriptorProps {
2
2
  type: 'default' | 'large';
3
3
  description: JSX.Element;
4
4
  content: JSX.Element;
5
+ changeFlexDirection?: boolean;
5
6
  }
6
7
  export declare const ListItemDescriptor: (props: ListItemDescriptorProps) => JSX.Element;
7
8
  export {};
@@ -1,7 +1,7 @@
1
1
  import type * as React from 'react';
2
2
  import type { StyleProps } from '../../primitives';
3
3
  export * from './ListItemChildren';
4
- export type ListItemType = 'error' | 'noActive' | 'success' | 'warning';
4
+ export type ListItemType = 'error' | 'noActive' | 'success' | 'warning' | 'unavailable';
5
5
  interface ListItemProps extends StyleProps {
6
6
  /** ListItem state type */
7
7
  type: ListItemType;
@@ -9,5 +9,6 @@ export interface TagProps {
9
9
  iconPosition?: 'left' | 'right';
10
10
  /** Tagicon */
11
11
  iconName?: IconName;
12
+ shrinkToContent?: boolean;
12
13
  }
13
14
  export declare function Tag(props: TagProps): JSX.Element;
@@ -1,5 +1,5 @@
1
- import * as React from 'react';
2
1
  import { Module } from '../Module';
2
+ import type { ComponentProps, ReactNode } from 'react';
3
3
  import type { Svg } from '../../primitives';
4
4
  import type { DeckConfiguration, LabwareDefinition2, LabwareLocation, ModuleLocation, ModuleModel, RobotType } from '@opentrons/shared-data';
5
5
  import type { WellFill, WellGroup } from '../Labware';
@@ -9,7 +9,7 @@ export interface LabwareOnDeck {
9
9
  wellFill?: WellFill;
10
10
  missingTips?: WellGroup;
11
11
  /** generic prop to render self-positioned children for each labware */
12
- labwareChildren?: React.ReactNode;
12
+ labwareChildren?: ReactNode;
13
13
  onLabwareClick?: () => void;
14
14
  highlight?: boolean;
15
15
  highlightShadow?: boolean;
@@ -20,9 +20,9 @@ export interface ModuleOnDeck {
20
20
  moduleLocation: ModuleLocation;
21
21
  nestedLabwareDef?: LabwareDefinition2 | null;
22
22
  nestedLabwareWellFill?: WellFill;
23
- innerProps?: React.ComponentProps<typeof Module>['innerProps'];
23
+ innerProps?: ComponentProps<typeof Module>['innerProps'];
24
24
  /** generic prop to render self-positioned children for each module */
25
- moduleChildren?: React.ReactNode;
25
+ moduleChildren?: ReactNode;
26
26
  onLabwareClick?: () => void;
27
27
  highlightLabware?: boolean;
28
28
  highlightShadowLabware?: boolean;
@@ -38,12 +38,12 @@ interface BaseDeckProps {
38
38
  lightFill?: string;
39
39
  mediumFill?: string;
40
40
  darkFill?: string;
41
- children?: React.ReactNode;
41
+ children?: ReactNode;
42
42
  showSlotLabels?: boolean;
43
43
  /** whether to make wrapping svg tag animatable via @react-spring/web, defaults to false */
44
44
  animatedSVG?: boolean;
45
45
  /** extra props to pass to svg tag */
46
- svgProps?: React.ComponentProps<typeof Svg>;
46
+ svgProps?: ComponentProps<typeof Svg>;
47
47
  }
48
48
  export declare function BaseDeck(props: BaseDeckProps): JSX.Element;
49
49
  export {};
@@ -3,6 +3,7 @@ export interface RobotCoordsTextProps extends React.ComponentProps<'text'> {
3
3
  x: number;
4
4
  y: number;
5
5
  children?: React.ReactNode;
6
+ canHighlight?: boolean;
6
7
  }
7
8
  /** SVG text reflected to use take robot coordinates as props */
8
9
  export declare function RobotCoordsText(props: RobotCoordsTextProps): JSX.Element;
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import type { ReactNode } from 'react';
2
2
  import type { StyleProps } from '../../primitives';
3
3
  import type { DeckDefinition, DeckSlot } from '@opentrons/shared-data';
4
4
  export interface RobotWorkSpaceRenderProps {
@@ -13,7 +13,7 @@ export interface RobotWorkSpaceRenderProps {
13
13
  export interface RobotWorkSpaceProps extends StyleProps {
14
14
  deckDef?: DeckDefinition;
15
15
  viewBox?: string | null;
16
- children?: (props: RobotWorkSpaceRenderProps) => React.ReactNode;
16
+ children?: (props: RobotWorkSpaceRenderProps) => ReactNode;
17
17
  deckLayerBlocklist?: string[];
18
18
  showDeckLayers?: boolean;
19
19
  id?: string;
@@ -1,9 +1,9 @@
1
- import * as React from 'react';
1
+ import type { Dispatch, MouseEventHandler, SetStateAction } from 'react';
2
2
  interface MenuHandleClickOutside {
3
3
  menuOverlay: JSX.Element;
4
- handleOverflowClick: React.MouseEventHandler<HTMLButtonElement>;
4
+ handleOverflowClick: MouseEventHandler<HTMLButtonElement>;
5
5
  showOverflowMenu: boolean;
6
- setShowOverflowMenu: React.Dispatch<React.SetStateAction<boolean>>;
6
+ setShowOverflowMenu: Dispatch<SetStateAction<boolean>>;
7
7
  }
8
8
  export declare function useMenuHandleClickOutside(): MenuHandleClickOutside;
9
9
  export {};
@@ -35,7 +35,7 @@ export interface DropdownMenuProps {
35
35
  onBlur?: React.FocusEventHandler<HTMLButtonElement>;
36
36
  /** optional disabled */
37
37
  disabled?: boolean;
38
- /** force direction for pd after release this will be fixed and remove */
39
- forceDirection?: boolean;
38
+ /** optional placement of the menu */
39
+ menuPlacement?: 'auto' | 'top' | 'bottom';
40
40
  }
41
41
  export declare function DropdownMenu(props: DropdownMenuProps): JSX.Element;
@@ -1,6 +1,8 @@
1
1
  interface InfoScreenProps {
2
2
  content: string;
3
+ subContent?: string;
3
4
  backgroundColor?: string;
5
+ height?: string;
4
6
  }
5
- export declare function InfoScreen({ content, backgroundColor, }: InfoScreenProps): JSX.Element;
7
+ export declare function InfoScreen({ content, subContent, backgroundColor, height, }: InfoScreenProps): JSX.Element;
6
8
  export {};
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  export interface ToolboxProps {
3
2
  title: JSX.Element;
4
3
  children: React.ReactNode;
@@ -12,6 +11,7 @@ export interface ToolboxProps {
12
11
  closeButton?: JSX.Element;
13
12
  side?: 'left' | 'right';
14
13
  horizontalSide?: 'top' | 'bottom';
14
+ titlePadding?: string;
15
15
  childrenPadding?: string;
16
16
  subHeader?: JSX.Element | null;
17
17
  secondaryHeaderButton?: JSX.Element;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@opentrons/components",
3
- "version": "0.1.6-alpha.15",
3
+ "version": "0.1.6-alpha.17",
4
4
  "description": "React components library for Opentrons' projects",
5
5
  "source": "src/index.ts",
6
6
  "types": "lib/index.d.ts",
7
7
  "style": "src/index.module.css",
8
- "main": "lib/index.mjs",
8
+ "main": "src/index.ts",
9
9
  "module": "src/index.ts",
10
10
  "repository": {
11
11
  "type": "git",
@@ -19,11 +19,10 @@
19
19
  "homepage": "https://github.com/Opentrons/opentrons#readme",
20
20
  "peerDependencies": {
21
21
  "react": "18.2.0",
22
- "react-dom": "18.2.0",
23
- "styled-components": "5.3.6"
22
+ "react-dom": "18.2.0"
24
23
  },
25
24
  "dependencies": {
26
- "@opentrons/shared-data": "0.1.6-alpha.15",
25
+ "@opentrons/shared-data": "0.1.6-alpha.17",
27
26
  "@popperjs/core": "2.1.1",
28
27
  "@react-spring/types": "9.6.1",
29
28
  "@react-spring/web": "9.6.1",
@@ -38,7 +37,8 @@
38
37
  "react-popper": "1.0.0",
39
38
  "react-remove-scroll": "2.4.3",
40
39
  "react-select": "5.4.0",
41
- "redux": "4.0.5"
40
+ "redux": "4.0.5",
41
+ "styled-components": "5.3.6"
42
42
  },
43
43
  "devDependencies": {
44
44
  "react-redux": "8.1.2"
@@ -0,0 +1,10 @@
1
+ // File transformer for Jest
2
+ // Makes asset filenames appear in snapshots
3
+ // see https://facebook.github.io/jest/docs/en/webpack.html
4
+ const path = require('path')
5
+
6
+ module.exports = {
7
+ process(src, filename, config, options) {
8
+ return 'module.exports = ' + JSON.stringify(path.basename(filename))
9
+ },
10
+ }
@@ -0,0 +1,27 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { truncateString } from '../utils'
3
+
4
+ describe('truncateString', () => {
5
+ it('when an input string less than max length, return the original input', () => {
6
+ // Note (kj:05/03/2023) the max length and breakPoints are the same as what we use for the Desktop app
7
+ const str = 'opentrons-dev'
8
+ const result = truncateString(str, 80, 65)
9
+ expect(result).toEqual(str)
10
+ })
11
+
12
+ it('when an input string is more than 80 characters, return the truncated string', () => {
13
+ const str = `Lorem Ipsum Is Simply Dummy Text Of The Printing And Typesetting Industry. Lorem Ipsum Has Been The Industry's Standard Dummy Text Ever Since The 1500s, When An Unknown Printer Took A Galley Of Type And Scrambled It To Make A Type Specimen Book.Py`
14
+ const result = truncateString(str, 80, 65)
15
+ const truncatedStr =
16
+ 'Lorem Ipsum Is Simply Dummy Text Of The Printing And Typesetting ...imen Book.Py'
17
+ expect(result).toEqual(truncatedStr)
18
+ })
19
+
20
+ it('when an input string is more than 80 characters without specifying the break point, return the truncated string', () => {
21
+ const str = `Lorem Ipsum Is Simply Dummy Text Of The Printing And Typesetting Industry. Lorem Ipsum Has Been The Industry's Standard Dummy Text Ever Since The 1500s, When An Unknown Printer Took A Galley Of Type And Scrambled It To Make A Type Specimen Book.Py`
22
+ const result = truncateString(str, 80)
23
+ const truncatedStr =
24
+ 'Lorem Ipsum Is Simply Dummy Text Of The Printing And Typesetting Industry. Lo...'
25
+ expect(result).toEqual(truncatedStr)
26
+ })
27
+ })
@@ -0,0 +1,49 @@
1
+ import type * as React from 'react'
2
+ import { AlertItem } from './AlertItem'
3
+
4
+ import type { Story, Meta } from '@storybook/react'
5
+
6
+ export default {
7
+ title: 'Library/Molecules/AlertItem',
8
+ component: AlertItem,
9
+ argTypes: { onCloseClick: { action: 'clicked' } },
10
+ } as Meta
11
+
12
+ const Template: Story<React.ComponentProps<typeof AlertItem>> = args => (
13
+ <AlertItem {...args} />
14
+ )
15
+
16
+ export const Basic = Template.bind({})
17
+ Basic.args = {
18
+ type: 'success',
19
+ title: 'good job!',
20
+ }
21
+
22
+ export const OverriddenIcon = Template.bind({})
23
+ OverriddenIcon.args = {
24
+ type: 'info',
25
+ title: 'Alert with overridden icon',
26
+ icon: { name: 'pause-circle' },
27
+ }
28
+
29
+ export const Stackable: Story<
30
+ React.ComponentProps<typeof AlertItem>
31
+ > = args => (
32
+ <div>
33
+ <Template {...args} type="warning" title={'Warning with close button'} />
34
+ <Template
35
+ {...args}
36
+ onCloseClick={undefined}
37
+ type="warning"
38
+ title={'Warning with no close button'}
39
+ />
40
+ <Template {...args} type="warning" title={'Warning with no children'} />
41
+ <Template
42
+ {...args}
43
+ type="warning"
44
+ title={'Warning with React Node children'}
45
+ >
46
+ <p>Some additional info</p>
47
+ </Template>
48
+ </div>
49
+ )
@@ -0,0 +1,85 @@
1
+ import type * as React from 'react'
2
+ import cx from 'classnames'
3
+ import { Icon } from '../icons'
4
+ import { IconButton } from '../buttons'
5
+ import styles from './alerts.module.css'
6
+
7
+ import type { IconProps } from '../icons'
8
+
9
+ export type AlertType = 'success' | 'warning' | 'error' | 'info'
10
+
11
+ export interface AlertItemProps {
12
+ /** name constant of the icon to display */
13
+ type: AlertType
14
+ /** title/main message of colored alert bar */
15
+ title: React.ReactNode
16
+ /** Alert message body contents */
17
+ children?: React.ReactNode
18
+ /** Additional class name */
19
+ className?: string
20
+ /** optional handler to show close button/clear alert */
21
+ onCloseClick?: () => unknown
22
+ /** Override the default Alert Icon */
23
+ icon?: IconProps
24
+ }
25
+
26
+ /**
27
+ * Alert overlay,
28
+ * change style and icon by using type 'success' 'warning' 'error'
29
+ */
30
+
31
+ const ALERT_PROPS_BY_TYPE: Record<
32
+ AlertType,
33
+ { icon: IconProps; className: string }
34
+ > = {
35
+ success: {
36
+ icon: { name: 'check-circle' },
37
+ className: styles.success,
38
+ },
39
+ error: {
40
+ icon: { name: 'alert-circle' },
41
+ className: styles.error,
42
+ },
43
+ warning: {
44
+ icon: { name: 'alert-circle' },
45
+ className: styles.warning,
46
+ },
47
+ info: {
48
+ icon: { name: 'information' },
49
+ className: styles.info,
50
+ },
51
+ }
52
+
53
+ /**
54
+ * @deprecated Use 'Banner' instead
55
+ */
56
+
57
+ export function AlertItem(props: AlertItemProps): JSX.Element {
58
+ const alertProps = ALERT_PROPS_BY_TYPE[props.type]
59
+ const icon = props.icon ? props.icon : alertProps.icon
60
+ const className = cx(styles.alert, alertProps.className, props.className)
61
+
62
+ const iconProps = {
63
+ ...icon,
64
+ className: styles.icon,
65
+ }
66
+
67
+ return (
68
+ <div className={className}>
69
+ <div className={styles.title_bar}>
70
+ <Icon {...iconProps} />
71
+ <span className={styles.title} data-testid="alert_item_title">
72
+ {props.title}
73
+ </span>
74
+ {props.onCloseClick && (
75
+ <IconButton
76
+ name="close"
77
+ onClick={props.onCloseClick}
78
+ className={styles.close}
79
+ />
80
+ )}
81
+ </div>
82
+ {props.children && <div className={styles.message}>{props.children}</div>}
83
+ </div>
84
+ )
85
+ }
@@ -0,0 +1,103 @@
1
+ @import '../index.module.css';
2
+
3
+ .alert {
4
+ font-size: var(--fs-body-2);
5
+ font-weight: var(--fw-regular);
6
+ }
7
+
8
+ .alert:not(:first-of-type) {
9
+ border-top: none;
10
+ }
11
+
12
+ .title_bar {
13
+ display: flex;
14
+ flex-direction: row;
15
+ justify-content: space-between;
16
+ align-items: center;
17
+ padding: 0.5rem 1rem;
18
+ font-weight: var(--fw-semibold);
19
+ }
20
+
21
+ .title {
22
+ width: 100%;
23
+ }
24
+
25
+ .success {
26
+ border: 1px solid var(--c-success);
27
+
28
+ & > .title_bar {
29
+ background-color: var(--c-bg-success);
30
+ color: var(--c-success);
31
+
32
+ & svg {
33
+ color: var(--c-success);
34
+ }
35
+ }
36
+ }
37
+
38
+ .info {
39
+ border: 1px solid var(--c-highlight);
40
+
41
+ & > .title_bar {
42
+ background-color: var(--c-bg-selected);
43
+ color: var(--c-selected-dark);
44
+
45
+ & svg {
46
+ color: var(--c-highlight);
47
+ }
48
+ }
49
+ }
50
+
51
+ .warning {
52
+ border: 1px solid var(--c-warning);
53
+
54
+ & > .title_bar {
55
+ background-color: var(--c-warning-light);
56
+ color: var(--c-warning-dark);
57
+
58
+ & svg {
59
+ fill: var(--c-warning);
60
+ }
61
+ }
62
+ }
63
+
64
+ .error {
65
+ border: 1px solid var(--c-error);
66
+
67
+ & > .title_bar {
68
+ background-color: var(--c-error-light);
69
+ color: var(--c-error-dark);
70
+
71
+ & svg {
72
+ fill: var(--c-error);
73
+ }
74
+ }
75
+ }
76
+
77
+ .message {
78
+ padding: 1rem 3rem;
79
+ background-color: white;
80
+
81
+ & a {
82
+ text-decoration: underline;
83
+ color: inherit;
84
+ }
85
+
86
+ &:empty {
87
+ padding: 0;
88
+ }
89
+ }
90
+
91
+ .icon {
92
+ width: 1.5rem;
93
+ margin-right: 0.5rem;
94
+ }
95
+
96
+ .close {
97
+ width: 2rem;
98
+ padding: 0.125rem;
99
+
100
+ &:hover {
101
+ background-color: rgba(100, 100, 100, 0.1);
102
+ }
103
+ }
@@ -0,0 +1,3 @@
1
+ // alert components
2
+
3
+ export * from './AlertItem'
@@ -0,0 +1,24 @@
1
+ import { Checkbox } from './index'
2
+
3
+ import type { StoryObj, Meta } from '@storybook/react'
4
+
5
+ const meta: Meta<typeof Checkbox> = {
6
+ title: 'Library/Atoms/Checkbox',
7
+ component: Checkbox,
8
+ }
9
+
10
+ type Story = StoryObj<typeof Checkbox>
11
+
12
+ export const Basic: Story = {
13
+ args: {
14
+ isChecked: true,
15
+ labelText: 'Button Text',
16
+ onClick: () => {
17
+ console.log('clicked')
18
+ },
19
+ tabIndex: 1,
20
+ disabled: false,
21
+ },
22
+ }
23
+
24
+ export default meta
@@ -0,0 +1,55 @@
1
+ import type * as React from 'react'
2
+ import { describe, beforeEach, afterEach, vi, expect, it } from 'vitest'
3
+ import { fireEvent, screen } from '@testing-library/react'
4
+ import '@testing-library/jest-dom/vitest'
5
+ import { renderWithProviders } from '../../../testing/utils'
6
+ import { Checkbox } from '..'
7
+
8
+ const render = (props: React.ComponentProps<typeof Checkbox>) => {
9
+ return renderWithProviders(<Checkbox {...props} />)[0]
10
+ }
11
+
12
+ describe('Checkbox', () => {
13
+ let props: React.ComponentProps<typeof Checkbox>
14
+
15
+ beforeEach(() => {
16
+ props = {
17
+ onClick: vi.fn(),
18
+ isChecked: false,
19
+ labelText: 'fake checkbox label',
20
+ tabIndex: 1,
21
+ disabled: false,
22
+ }
23
+ })
24
+
25
+ afterEach(() => {
26
+ vi.resetAllMocks()
27
+ })
28
+
29
+ it('renders label with disabled true', () => {
30
+ props.disabled = true
31
+ render(props)
32
+ const checkBoxInput = screen.getByRole('checkbox', {
33
+ name: 'fake checkbox label',
34
+ })
35
+ expect(checkBoxInput).toBeDisabled()
36
+ })
37
+
38
+ it('renders label with correct style - tabIndex 1', () => {
39
+ props.tabIndex = 1
40
+ render(props)
41
+ const checkBoxInput = screen.getByRole('checkbox', {
42
+ name: 'fake checkbox label',
43
+ })
44
+ expect(checkBoxInput).toHaveAttribute('tabindex', '1')
45
+ })
46
+
47
+ it('calls mock function when clicking checkbox', () => {
48
+ render(props)
49
+ const checkBoxInput = screen.getByRole('checkbox', {
50
+ name: 'fake checkbox label',
51
+ })
52
+ fireEvent.click(checkBoxInput)
53
+ expect(props.onClick).toHaveBeenCalled()
54
+ })
55
+ })