@opentrons/components 0.1.6-alpha.16 → 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 (486) hide show
  1. package/lib/atoms/StyledText/StyledText.d.ts +1 -1
  2. package/lib/hardware-sim/Labware/LabwareRender.d.ts +1 -1
  3. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +1 -1
  4. package/lib/hardware-sim/Labware/labwareInternals/LabwareOutline.d.ts +1 -1
  5. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +1 -1
  6. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +1 -1
  7. package/lib/instrument/InstrumentDiagram.d.ts +1 -1
  8. package/lib/primitives/Btn.d.ts +1 -1
  9. package/lib/primitives/style-props.d.ts +1 -1
  10. package/lib/primitives/types.d.ts +1 -1
  11. package/lib/styles/typography.d.ts +1 -1
  12. package/package.json +3 -3
  13. package/src/__mocks__/file.js +10 -0
  14. package/src/__tests__/utils.test.ts +27 -0
  15. package/src/alerts/AlertItem.stories.tsx +49 -0
  16. package/src/alerts/AlertItem.tsx +85 -0
  17. package/src/alerts/alerts.module.css +103 -0
  18. package/src/alerts/index.ts +3 -0
  19. package/src/atoms/Checkbox/Checkbox.stories.tsx +24 -0
  20. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +55 -0
  21. package/src/atoms/Checkbox/index.tsx +127 -0
  22. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +30 -0
  23. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +141 -0
  24. package/src/atoms/CheckboxField/index.tsx +171 -0
  25. package/src/atoms/Chip/Chip.stories.tsx +59 -0
  26. package/src/atoms/Chip/__tests__/Chip.test.tsx +429 -0
  27. package/src/atoms/Chip/index.tsx +172 -0
  28. package/src/atoms/Divider/index.tsx +15 -0
  29. package/src/atoms/InputField/InputField.stories.tsx +77 -0
  30. package/src/atoms/InputField/__tests__/InputField.test.tsx +63 -0
  31. package/src/atoms/InputField/index.tsx +383 -0
  32. package/src/atoms/ListButton/ListButton.stories.tsx +133 -0
  33. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordion.tsx +65 -0
  34. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.tsx +23 -0
  35. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +108 -0
  36. package/src/atoms/ListButton/ListButtonChildren/index.ts +3 -0
  37. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +46 -0
  38. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +35 -0
  39. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +27 -0
  40. package/src/atoms/ListButton/index.tsx +72 -0
  41. package/src/atoms/ListItem/ListItem.stories.tsx +96 -0
  42. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +78 -0
  43. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +42 -0
  44. package/src/atoms/ListItem/ListItemChildren/index.ts +2 -0
  45. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +61 -0
  46. package/src/atoms/ListItem/index.tsx +89 -0
  47. package/src/atoms/MenuList/MenuItem.stories.tsx +20 -0
  48. package/src/atoms/MenuList/MenuItem.tsx +55 -0
  49. package/src/atoms/MenuList/MenuList.stories.tsx +31 -0
  50. package/src/atoms/MenuList/OverflowBtn.stories.tsx +17 -0
  51. package/src/atoms/MenuList/OverflowBtn.tsx +76 -0
  52. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +50 -0
  53. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +36 -0
  54. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +33 -0
  55. package/src/atoms/MenuList/index.tsx +50 -0
  56. package/src/atoms/Snackbar/Snackbar.stories.tsx +67 -0
  57. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +73 -0
  58. package/src/atoms/Snackbar/index.tsx +91 -0
  59. package/src/atoms/StepMeter/index.tsx +53 -0
  60. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +106 -0
  61. package/src/atoms/StyledText/LegacyStyledText.tsx +95 -0
  62. package/src/atoms/StyledText/StyledText.stories.tsx +46 -0
  63. package/src/atoms/StyledText/StyledText.tsx +323 -0
  64. package/src/atoms/StyledText/index.ts +2 -0
  65. package/src/atoms/Tag/Tag.stories.tsx +48 -0
  66. package/src/atoms/Tag/__tests__/Tag.test.tsx +55 -0
  67. package/src/atoms/Tag/index.tsx +116 -0
  68. package/src/atoms/Toast/ODDToast.stories.tsx +68 -0
  69. package/src/atoms/Toast/Toast.stories.tsx +55 -0
  70. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +178 -0
  71. package/src/atoms/Toast/__tests__/Toast.test.tsx +174 -0
  72. package/src/atoms/Toast/index.tsx +439 -0
  73. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +39 -0
  74. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +28 -0
  75. package/src/atoms/ToggleGroup/index.tsx +91 -0
  76. package/src/atoms/Tooltip/Tooltip.stories.tsx +99 -0
  77. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +78 -0
  78. package/src/atoms/Tooltip/index.tsx +38 -0
  79. package/src/atoms/buttons/AlertPrimaryButton.tsx +26 -0
  80. package/src/atoms/buttons/AltPrimaryButton.tsx +31 -0
  81. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +36 -0
  82. package/src/atoms/buttons/EmptySelectorButton.tsx +83 -0
  83. package/src/atoms/buttons/LargeButton.stories.tsx +99 -0
  84. package/src/atoms/buttons/LargeButton.tsx +320 -0
  85. package/src/atoms/buttons/PrimaryButton.tsx +36 -0
  86. package/src/atoms/buttons/RadioButton.stories.tsx +35 -0
  87. package/src/atoms/buttons/RadioButton.tsx +217 -0
  88. package/src/atoms/buttons/SecondaryButton.tsx +62 -0
  89. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +47 -0
  90. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +57 -0
  91. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +42 -0
  92. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +91 -0
  93. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +64 -0
  94. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +98 -0
  95. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +54 -0
  96. package/src/atoms/buttons/buttons.stories.tsx +78 -0
  97. package/src/atoms/buttons/index.ts +6 -0
  98. package/src/atoms/index.ts +20 -0
  99. package/src/barrel.ts +10 -0
  100. package/src/buttons/Button.tsx +96 -0
  101. package/src/buttons/DeprecatedPrimaryButton.tsx +24 -0
  102. package/src/buttons/FlatButton.tsx +21 -0
  103. package/src/buttons/IconButton.tsx +37 -0
  104. package/src/buttons/OutlineButton.tsx +24 -0
  105. package/src/buttons/buttons.module.css +428 -0
  106. package/src/buttons/index.ts +7 -0
  107. package/src/controls/ControlInfo.tsx +13 -0
  108. package/src/controls/LabeledButton.tsx +28 -0
  109. package/src/controls/LabeledCheckbox.tsx +35 -0
  110. package/src/controls/LabeledControl.tsx +24 -0
  111. package/src/controls/LabeledRadioGroup.tsx +27 -0
  112. package/src/controls/LabeledSelect.tsx +34 -0
  113. package/src/controls/LabeledToggle.tsx +35 -0
  114. package/src/controls/StackedLabeledControl.tsx +28 -0
  115. package/src/controls/ToggleButton.tsx +25 -0
  116. package/src/controls/index.ts +10 -0
  117. package/src/controls/styles.module.css +103 -0
  118. package/src/forms/DeprecatedCheckboxField.stories.tsx +31 -0
  119. package/src/forms/DeprecatedCheckboxField.tsx +94 -0
  120. package/src/forms/DropdownField.stories.tsx +44 -0
  121. package/src/forms/DropdownField.tsx +106 -0
  122. package/src/forms/FormGroup.stories.tsx +31 -0
  123. package/src/forms/FormGroup.tsx +53 -0
  124. package/src/forms/InputField.stories.tsx +41 -0
  125. package/src/forms/LegacyInputField.tsx +123 -0
  126. package/src/forms/RadioGroup.stories.tsx +44 -0
  127. package/src/forms/RadioGroup.tsx +87 -0
  128. package/src/forms/Select.module.css +118 -0
  129. package/src/forms/Select.stories.tsx +117 -0
  130. package/src/forms/Select.tsx +132 -0
  131. package/src/forms/SelectField.module.css +16 -0
  132. package/src/forms/SelectField.tsx +94 -0
  133. package/src/forms/ToggleField.stories.tsx +31 -0
  134. package/src/forms/ToggleField.tsx +59 -0
  135. package/src/forms/__tests__/DeprecatedCheckboxField.test.tsx +5 -0
  136. package/src/forms/__tests__/DropdownField.test.tsx +5 -0
  137. package/src/forms/__tests__/InputField.test.tsx +5 -0
  138. package/src/forms/__tests__/Select.test.tsx +5 -0
  139. package/src/forms/__tests__/SelectField.test.tsx +5 -0
  140. package/src/forms/__tests__/ToggleField.test.tsx +5 -0
  141. package/src/forms/forms.module.css +239 -0
  142. package/src/forms/index.ts +8 -0
  143. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +94 -0
  144. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +423 -0
  145. package/src/hardware-sim/BaseDeck/SingleSlotFixture.tsx +199 -0
  146. package/src/hardware-sim/BaseDeck/SlotBase.tsx +5 -0
  147. package/src/hardware-sim/BaseDeck/SlotClip.tsx +15 -0
  148. package/src/hardware-sim/BaseDeck/StagingAreaFixture.tsx +114 -0
  149. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +114 -0
  150. package/src/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.tsx +68 -0
  151. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +165 -0
  152. package/src/hardware-sim/BaseDeck/index.ts +5 -0
  153. package/src/hardware-sim/Deck/DeckFromLayers.tsx +58 -0
  154. package/src/hardware-sim/Deck/FlexTrash.tsx +128 -0
  155. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +97 -0
  156. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +251 -0
  157. package/src/hardware-sim/Deck/OT2Layers.tsx +153 -0
  158. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +46 -0
  159. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +42 -0
  160. package/src/hardware-sim/Deck/RobotCoordsText.tsx +32 -0
  161. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +90 -0
  162. package/src/hardware-sim/Deck/SlotLabels.tsx +111 -0
  163. package/src/hardware-sim/Deck/__mocks__/getDeckDefinitions.ts +29 -0
  164. package/src/hardware-sim/Deck/constants.ts +12 -0
  165. package/src/hardware-sim/Deck/index.tsx +8 -0
  166. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +91 -0
  167. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +110 -0
  168. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +131 -0
  169. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +102 -0
  170. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +130 -0
  171. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +89 -0
  172. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +54 -0
  173. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +103 -0
  174. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +89 -0
  175. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +99 -0
  176. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +96 -0
  177. package/src/hardware-sim/DeckConfigurator/constants.ts +81 -0
  178. package/src/hardware-sim/DeckConfigurator/index.tsx +285 -0
  179. package/src/hardware-sim/DeckSlotLocation/index.tsx +88 -0
  180. package/src/hardware-sim/Labware/Labware.tsx +173 -0
  181. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96DeepWellAdapter.tsx +23 -0
  182. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96FlatBottomAdapter.tsx +7 -0
  183. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAluminumFlatBottomPlate.tsx +13 -0
  184. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx +100 -0
  185. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsFlex96TiprackAdapter.tsx +13 -0
  186. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx +83 -0
  187. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsUniversalFlatAdapter.tsx +13 -0
  188. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +73 -0
  189. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +96 -0
  190. package/src/hardware-sim/Labware/LabwareRender.tsx +173 -0
  191. package/src/hardware-sim/Labware/LabwareStackRender.tsx +272 -0
  192. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +43 -0
  193. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +54 -0
  194. package/src/hardware-sim/Labware/index.ts +6 -0
  195. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +39 -0
  196. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +133 -0
  197. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +118 -0
  198. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +121 -0
  199. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +38 -0
  200. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +77 -0
  201. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +74 -0
  202. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +121 -0
  203. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +66 -0
  204. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +31 -0
  205. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +91 -0
  206. package/src/hardware-sim/Labware/labwareInternals/index.ts +8 -0
  207. package/src/hardware-sim/Labware/labwareInternals/types.ts +18 -0
  208. package/src/hardware-sim/Module/HeaterShaker.tsx +83 -0
  209. package/src/hardware-sim/Module/MagneticBlock.tsx +49 -0
  210. package/src/hardware-sim/Module/MagneticModule.tsx +51 -0
  211. package/src/hardware-sim/Module/Module.stories.tsx +90 -0
  212. package/src/hardware-sim/Module/ModuleTag.tsx +38 -0
  213. package/src/hardware-sim/Module/PlateReader.tsx +208 -0
  214. package/src/hardware-sim/Module/Temperature.tsx +54 -0
  215. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +248 -0
  216. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN2.tsx +286 -0
  217. package/src/hardware-sim/Module/Thermocycler/index.tsx +49 -0
  218. package/src/hardware-sim/Module/index.tsx +227 -0
  219. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +23 -0
  220. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +52 -0
  221. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +71 -0
  222. package/src/hardware-sim/Pipette/PipetteRender.tsx +92 -0
  223. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +16 -0
  224. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +67 -0
  225. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +99 -0
  226. package/src/hardware-sim/Pipette/constants.ts +10 -0
  227. package/src/hardware-sim/Pipette/index.ts +1 -0
  228. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +68 -0
  229. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +25 -0
  230. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +47145 -0
  231. package/src/hardware-sim/ProtocolDeck/index.tsx +174 -0
  232. package/src/hardware-sim/ProtocolDeck/types.ts +6 -0
  233. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +158 -0
  234. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +33 -0
  235. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +155 -0
  236. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +42 -0
  237. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +129 -0
  238. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +29 -0
  239. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +30 -0
  240. package/src/hardware-sim/ProtocolDeck/utils/index.ts +3 -0
  241. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +28 -0
  242. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +52 -0
  243. package/src/hardware-sim/RobotCoordinateSpace/index.ts +2 -0
  244. package/src/hardware-sim/index.ts +11 -0
  245. package/src/hardware-sim/utils.ts +18 -0
  246. package/src/helix-design-system/borders.ts +32 -0
  247. package/src/helix-design-system/colors.ts +100 -0
  248. package/src/helix-design-system/index.ts +4 -0
  249. package/src/helix-design-system/product/index.ts +1 -0
  250. package/src/helix-design-system/product/typography.ts +151 -0
  251. package/src/helix-design-system/style.ts +2 -0
  252. package/src/hooks/__tests__/useConditionalConfirm.test.tsx +5 -0
  253. package/src/hooks/__tests__/useDrag.test.ts +46 -0
  254. package/src/hooks/__tests__/useIdle.test.ts +68 -0
  255. package/src/hooks/__tests__/useInterval.test.tsx +5 -0
  256. package/src/hooks/__tests__/useLongPress.test.ts +25 -0
  257. package/src/hooks/__tests__/useMountEffect.test.tsx +5 -0
  258. package/src/hooks/__tests__/usePrevious.test.tsx +5 -0
  259. package/src/hooks/__tests__/useScrolling.test.tsx +46 -0
  260. package/src/hooks/__tests__/useSwipe.test.tsx +26 -0
  261. package/src/hooks/__tests__/useTimeout.test.tsx +5 -0
  262. package/src/hooks/__tests__/useToggle.test.tsx +5 -0
  263. package/src/hooks/index.ts +15 -0
  264. package/src/hooks/useConditionalConfirm.ts +70 -0
  265. package/src/hooks/useDrag.ts +90 -0
  266. package/src/hooks/useIdle.ts +68 -0
  267. package/src/hooks/useInterval.ts +38 -0
  268. package/src/hooks/useLongPress.ts +83 -0
  269. package/src/hooks/useMenuHandleClickOutside.tsx +46 -0
  270. package/src/hooks/useMountEffect.ts +12 -0
  271. package/src/hooks/usePrevious.ts +19 -0
  272. package/src/hooks/useScrolling.ts +33 -0
  273. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +55 -0
  274. package/src/hooks/useSelectDeckLocation/index.tsx +331 -0
  275. package/src/hooks/useSwipe.ts +86 -0
  276. package/src/hooks/useTimeout.ts +33 -0
  277. package/src/hooks/useToggle.ts +27 -0
  278. package/src/icons/Icon.stories.tsx +37 -0
  279. package/src/icons/Icon.tsx +79 -0
  280. package/src/icons/IconList.stories.tsx +108 -0
  281. package/src/icons/ModuleIcon.tsx +48 -0
  282. package/src/icons/NotificationIcon.tsx +41 -0
  283. package/src/icons/icon-data.ts +821 -0
  284. package/src/icons/index.ts +6 -0
  285. package/src/images/index.ts +1 -0
  286. package/src/images/labware/index.ts +1 -0
  287. package/src/images/labware/measurement-guide/images/depth/depth-plate-flat@3x.png +0 -0
  288. package/src/images/labware/measurement-guide/images/depth/depth-plate-round@3x.png +0 -0
  289. package/src/images/labware/measurement-guide/images/depth/depth-plate-v@3x.png +0 -0
  290. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-flat@3x.png +0 -0
  291. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-round@3x.png +0 -0
  292. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-v@3x.png +0 -0
  293. package/src/images/labware/measurement-guide/images/depth/length-tip-rack@3x.png +0 -0
  294. package/src/images/labware/measurement-guide/images/dimensions/footprint@3x.png +0 -0
  295. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-plate@3x.png +0 -0
  296. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-tubes@3x.png +0 -0
  297. package/src/images/labware/measurement-guide/images/dimensions/height-plate-and-reservoir@3x.png +0 -0
  298. package/src/images/labware/measurement-guide/images/dimensions/height-tip-rack@3x.png +0 -0
  299. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack-irregular@3x.png +0 -0
  300. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack@3x.png +0 -0
  301. package/src/images/labware/measurement-guide/images/offset/offset-reservoir@3x.png +0 -0
  302. package/src/images/labware/measurement-guide/images/offset/offset-well-circular@3x.png +0 -0
  303. package/src/images/labware/measurement-guide/images/offset/offset-well-rectangular@3x.png +0 -0
  304. package/src/images/labware/measurement-guide/images/shape/shape-circular@3x.png +0 -0
  305. package/src/images/labware/measurement-guide/images/shape/shape-rectangular@3x.png +0 -0
  306. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir-multi-row@3x.png +0 -0
  307. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir@3x.png +0 -0
  308. package/src/images/labware/measurement-guide/images/spacing/spacing-well-circular@3x.png +0 -0
  309. package/src/images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png +0 -0
  310. package/src/images/labware/measurement-guide/index.ts +272 -0
  311. package/src/index.module.css +9 -0
  312. package/src/index.ts +41 -0
  313. package/src/instrument/InstrumentDiagram.stories.tsx +42 -0
  314. package/src/instrument/InstrumentDiagram.tsx +58 -0
  315. package/src/instrument/InstrumentGroup.stories.tsx +88 -0
  316. package/src/instrument/InstrumentGroup.tsx +35 -0
  317. package/src/instrument/InstrumentInfo.tsx +107 -0
  318. package/src/instrument/PipetteSelect.module.css +14 -0
  319. package/src/instrument/PipetteSelect.stories.tsx +40 -0
  320. package/src/instrument/PipetteSelect.tsx +170 -0
  321. package/src/instrument/__tests__/InstrumentInfo.test.tsx +55 -0
  322. package/src/instrument/__tests__/PipetteSelect.test.tsx +4 -0
  323. package/src/instrument/eight-channel-flex.png +0 -0
  324. package/src/instrument/index.ts +4 -0
  325. package/src/instrument/instrument.module.css +45 -0
  326. package/src/instrument/multi-channel_GEN1_800px.png +0 -0
  327. package/src/instrument/multi-channel_GEN2_800px.png +0 -0
  328. package/src/instrument/ninety-six-channel-gen1.png +0 -0
  329. package/src/instrument/pipetteGEN2Multi.png +0 -0
  330. package/src/instrument/pipetteGEN2Single.png +0 -0
  331. package/src/instrument/pipetteMulti.png +0 -0
  332. package/src/instrument/pipetteSingle.png +0 -0
  333. package/src/instrument/single-channel-flex.png +0 -0
  334. package/src/instrument/single-channel_GEN2_800px.png +0 -0
  335. package/src/instrument/single_channel_GEN1_800px.png +0 -0
  336. package/src/interaction-enhancers/ClickOutside.ts +57 -0
  337. package/src/interaction-enhancers/HandleKeypress.tsx +69 -0
  338. package/src/interaction-enhancers/__tests__/useHover.test.tsx +4 -0
  339. package/src/interaction-enhancers/index.ts +4 -0
  340. package/src/interaction-enhancers/useHover.ts +84 -0
  341. package/src/interaction-enhancers/useOnClickOutside.ts +42 -0
  342. package/src/legacy-hardware-sim/LabwareNameOverlay.module.css +20 -0
  343. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +22 -0
  344. package/src/legacy-hardware-sim/ModuleItem.module.css +98 -0
  345. package/src/legacy-hardware-sim/ModuleItem.tsx +145 -0
  346. package/src/legacy-hardware-sim/index.ts +2 -0
  347. package/src/lists/SidePanelGroup.tsx +48 -0
  348. package/src/lists/TitledList.tsx +155 -0
  349. package/src/lists/index.ts +3 -0
  350. package/src/lists/lists.module.css +171 -0
  351. package/src/modals/AlertModal.tsx +89 -0
  352. package/src/modals/ContinueModal.tsx +32 -0
  353. package/src/modals/LegacyModal.tsx +59 -0
  354. package/src/modals/Modal.stories.tsx +52 -0
  355. package/src/modals/Modal.tsx +96 -0
  356. package/src/modals/ModalHeader.tsx +100 -0
  357. package/src/modals/ModalShell.tsx +155 -0
  358. package/src/modals/Overlay.tsx +38 -0
  359. package/src/modals/SpinnerModal.tsx +35 -0
  360. package/src/modals/SpinnerModalPage.tsx +30 -0
  361. package/src/modals/__tests__/Modal.test.tsx +65 -0
  362. package/src/modals/__tests__/ModalHeader.test.tsx +73 -0
  363. package/src/modals/__tests__/ModalShell.test.tsx +45 -0
  364. package/src/modals/index.ts +10 -0
  365. package/src/modals/modals.module.css +275 -0
  366. package/src/molecules/Banner/Banner.stories.tsx +41 -0
  367. package/src/molecules/Banner/__tests__/Banner.test.tsx +94 -0
  368. package/src/molecules/Banner/index.tsx +147 -0
  369. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +65 -0
  370. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +49 -0
  371. package/src/molecules/DeckInfoLabel/index.tsx +95 -0
  372. package/src/molecules/DeckLabel/DeckLabel.stories.tsx +31 -0
  373. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +69 -0
  374. package/src/molecules/DeckLabel/index.tsx +80 -0
  375. package/src/molecules/DropdownMenu/DropdownMenu.stories.tsx +30 -0
  376. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +85 -0
  377. package/src/molecules/DropdownMenu/index.tsx +343 -0
  378. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +50 -0
  379. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +40 -0
  380. package/src/molecules/InfoScreen/index.tsx +54 -0
  381. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +53 -0
  382. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +50 -0
  383. package/src/molecules/LiquidIcon/index.tsx +68 -0
  384. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +172 -0
  385. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +126 -0
  386. package/src/molecules/ParametersTable/index.tsx +198 -0
  387. package/src/molecules/Tabs/Tabs.stories.tsx +74 -0
  388. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +90 -0
  389. package/src/molecules/Tabs/index.tsx +94 -0
  390. package/src/molecules/index.ts +8 -0
  391. package/src/nav/SidePanel.module.css +34 -0
  392. package/src/nav/SidePanel.stories.tsx +29 -0
  393. package/src/nav/SidePanel.tsx +21 -0
  394. package/src/nav/index.ts +2 -0
  395. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +46 -0
  396. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +49 -0
  397. package/src/organisms/DeckLabelSet/index.tsx +69 -0
  398. package/src/organisms/EndUserAgreementFooter/__tests__/EndUserAgreementFooter.test.tsx +21 -0
  399. package/src/organisms/EndUserAgreementFooter/index.tsx +49 -0
  400. package/src/organisms/Toolbox/Toolbox.stories.tsx +23 -0
  401. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +35 -0
  402. package/src/organisms/Toolbox/index.tsx +160 -0
  403. package/src/organisms/index.ts +3 -0
  404. package/src/primitives/Box.stories.tsx +25 -0
  405. package/src/primitives/Box.tsx +17 -0
  406. package/src/primitives/Btn.stories.tsx +105 -0
  407. package/src/primitives/Btn.tsx +266 -0
  408. package/src/primitives/Flex.stories.tsx +50 -0
  409. package/src/primitives/Flex.tsx +17 -0
  410. package/src/primitives/ForeignObject.tsx +70 -0
  411. package/src/primitives/Link.stories.tsx +27 -0
  412. package/src/primitives/Link.tsx +32 -0
  413. package/src/primitives/README.md +188 -0
  414. package/src/primitives/Svg.stories.tsx +36 -0
  415. package/src/primitives/Svg.tsx +68 -0
  416. package/src/primitives/Text.stories.tsx +17 -0
  417. package/src/primitives/Text.tsx +18 -0
  418. package/src/primitives/__tests__/Box.test.tsx +4 -0
  419. package/src/primitives/__tests__/Btn.test.tsx +4 -0
  420. package/src/primitives/__tests__/Flex.test.tsx +4 -0
  421. package/src/primitives/__tests__/Link.test.tsx +4 -0
  422. package/src/primitives/__tests__/Svg.test.tsx +4 -0
  423. package/src/primitives/__tests__/Text.test.tsx +4 -0
  424. package/src/primitives/__tests__/primitives.test.tsx +4 -0
  425. package/src/primitives/__tests__/style-props.test.tsx +4 -0
  426. package/src/primitives/index.ts +10 -0
  427. package/src/primitives/style-props.ts +197 -0
  428. package/src/primitives/types.ts +120 -0
  429. package/src/robot-types.ts +4 -0
  430. package/src/slotmap/OT2SlotMap.tsx +73 -0
  431. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +4 -0
  432. package/src/slotmap/index.ts +1 -0
  433. package/src/slotmap/styles.module.css +18 -0
  434. package/src/structure/Card.stories.tsx +28 -0
  435. package/src/structure/Card.tsx +64 -0
  436. package/src/structure/LabeledValue.stories.tsx +17 -0
  437. package/src/structure/LabeledValue.tsx +31 -0
  438. package/src/structure/Pill.module.css +16 -0
  439. package/src/structure/Pill.tsx +43 -0
  440. package/src/structure/Splash.module.css +16 -0
  441. package/src/structure/Splash.stories.tsx +24 -0
  442. package/src/structure/Splash.tsx +22 -0
  443. package/src/structure/TitleBar.stories.tsx +42 -0
  444. package/src/structure/TitleBar.tsx +81 -0
  445. package/src/structure/index.ts +7 -0
  446. package/src/structure/structure.module.css +114 -0
  447. package/src/styles/borders.module.css +20 -0
  448. package/src/styles/borders.ts +16 -0
  449. package/src/styles/colors.module.css +57 -0
  450. package/src/styles/colors.ts +58 -0
  451. package/src/styles/cursor.ts +12 -0
  452. package/src/styles/flexbox.ts +39 -0
  453. package/src/styles/index.module.css +8 -0
  454. package/src/styles/index.ts +8 -0
  455. package/src/styles/layout.ts +31 -0
  456. package/src/styles/position.ts +5 -0
  457. package/src/styles/spacing.ts +11 -0
  458. package/src/styles/typography.module.css +22 -0
  459. package/src/styles/typography.ts +90 -0
  460. package/src/testing/utils/index.ts +2 -0
  461. package/src/testing/utils/matchers.ts +31 -0
  462. package/src/testing/utils/renderWithProviders.tsx +53 -0
  463. package/src/tooltips/DeprecatedTooltip.tsx +105 -0
  464. package/src/tooltips/HoverTooltip.tsx +83 -0
  465. package/src/tooltips/LegacyTooltip.stories.tsx +98 -0
  466. package/src/tooltips/LegacyTooltip.tsx +151 -0
  467. package/src/tooltips/__tests__/Tooltip.test.tsx +4 -0
  468. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +4 -0
  469. package/src/tooltips/__tests__/usePopper.test.tsx +4 -0
  470. package/src/tooltips/__tests__/useTooltip.test.tsx +4 -0
  471. package/src/tooltips/constants.ts +28 -0
  472. package/src/tooltips/index.ts +10 -0
  473. package/src/tooltips/styles.ts +20 -0
  474. package/src/tooltips/tooltips.module.css +72 -0
  475. package/src/tooltips/types.ts +73 -0
  476. package/src/tooltips/useHoverTooltip.ts +47 -0
  477. package/src/tooltips/usePopper.ts +87 -0
  478. package/src/tooltips/useTooltip.ts +100 -0
  479. package/src/ui-style-constants/index.ts +4 -0
  480. package/src/ui-style-constants/responsiveness.ts +15 -0
  481. package/src/ui-style-constants/spacing.ts +18 -0
  482. package/src/ui-style-constants/typography.ts +258 -0
  483. package/src/ui-style-constants/viewport.ts +18 -0
  484. package/src/utils.ts +56 -0
  485. package/lib/index.mjs +0 -23832
  486. package/lib/patches.d.ts +0 -4
@@ -1,6 +1,6 @@
1
1
  import { Text } from '../../primitives';
2
2
  import type * as React from 'react';
3
- import type { FlattenSimpleInterpolation } from '../../patches';
3
+ import type { FlattenSimpleInterpolation } from 'styled-components';
4
4
  declare const helixProductStyleMap: {
5
5
  readonly displayBold: {
6
6
  readonly as: "h1";
@@ -1,5 +1,5 @@
1
1
  import type * as React from 'react';
2
- import type { CSSProperties } from '../../patches';
2
+ import type { CSSProperties } from 'styled-components';
3
3
  import type { LabwareDefinition2 } from '@opentrons/shared-data';
4
4
  import type { HighlightedWellLabels, WellMouseEvent, WellFill, WellStroke, WellGroup } from './labwareInternals/types';
5
5
  export declare const WELL_LABEL_OPTIONS: {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import type { LabwareDefinition2 } from '@opentrons/shared-data';
3
- import type { CSSProperties } from '../../../patches';
3
+ import type { CSSProperties } from 'styled-components';
4
4
  export interface FilledWellsProps {
5
5
  definition: LabwareDefinition2;
6
6
  fillByWell: Record<string, CSSProperties['fill']>;
@@ -1,4 +1,4 @@
1
- import type { CSSProperties } from '../../../patches';
1
+ import type { CSSProperties } from 'styled-components';
2
2
  import type { LabwareDefinition2 } from '@opentrons/shared-data';
3
3
  export interface LabwareOutlineProps {
4
4
  /** Labware definition to outline */
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import type { LabwareDefinition2 } from '@opentrons/shared-data';
3
3
  import type { WellMouseEvent, WellStroke } from './types';
4
- import type { CSSProperties } from '../../../patches';
4
+ import type { CSSProperties } from 'styled-components';
5
5
  export interface StaticLabwareProps {
6
6
  /** Labware definition to render */
7
7
  definition: LabwareDefinition2;
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import type { LabwareDefinition2 } from '@opentrons/shared-data';
3
- import type { CSSProperties } from '../../../patches';
3
+ import type { CSSProperties } from 'styled-components';
4
4
  export interface StrokedWellProps {
5
5
  definition: LabwareDefinition2;
6
6
  strokeByWell: Record<string, CSSProperties['stroke']>;
@@ -1,4 +1,4 @@
1
- import type { FlattenSimpleInterpolation } from '../patches';
1
+ import type { FlattenSimpleInterpolation } from 'styled-components';
2
2
  import type { PipetteV2Specs } from '@opentrons/shared-data';
3
3
  import type { Mount } from '../robot-types';
4
4
  import type { StyleProps } from '..';
@@ -1,4 +1,4 @@
1
- import type { StyledComponent } from '../patches';
1
+ import type { StyledComponent } from 'styled-components';
2
2
  import type { StyleProps } from './types';
3
3
  export declare const BUTTON_TYPE_SUBMIT: 'submit';
4
4
  export declare const BUTTON_TYPE_RESET: 'reset';
@@ -1,4 +1,4 @@
1
1
  import type * as Types from './types';
2
- import type { CSSObject } from '../patches';
2
+ import type { CSSObject } from 'styled-components';
3
3
  export declare const styleProps: (props: Types.StyleProps) => CSSObject;
4
4
  export declare const isntStyleProp: (prop: string | React.ReactText) => boolean;
@@ -1,4 +1,4 @@
1
- import type { StyledComponent, CSSProperties } from '../patches';
1
+ import type { StyledComponent, CSSProperties } from 'styled-components';
2
2
  export interface ColorProps {
3
3
  color?: string;
4
4
  backgroundColor?: string;
@@ -1,4 +1,4 @@
1
- import type { FlattenSimpleInterpolation } from '../patches';
1
+ import type { FlattenSimpleInterpolation } from 'styled-components';
2
2
  export declare const FONT_SIZE_HUGE = "3rem";
3
3
  export declare const FONT_SIZE_BIG = "1.5rem";
4
4
  export declare const FONT_SIZE_HEADER = "1.125rem";
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@opentrons/components",
3
- "version": "0.1.6-alpha.16",
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",
@@ -22,7 +22,7 @@
22
22
  "react-dom": "18.2.0"
23
23
  },
24
24
  "dependencies": {
25
- "@opentrons/shared-data": "0.1.6-alpha.16",
25
+ "@opentrons/shared-data": "0.1.6-alpha.17",
26
26
  "@popperjs/core": "2.1.1",
27
27
  "@react-spring/types": "9.6.1",
28
28
  "@react-spring/web": "9.6.1",
@@ -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
+ })
@@ -0,0 +1,127 @@
1
+ import type * as React from 'react'
2
+ import { css } from 'styled-components'
3
+ import { COLORS, BORDERS } from '../../helix-design-system'
4
+ import { Flex } from '../../primitives'
5
+ import { Icon } from '../../icons'
6
+ import {
7
+ ALIGN_CENTER,
8
+ CURSOR_AUTO,
9
+ CURSOR_POINTER,
10
+ DIRECTION_ROW,
11
+ FLEX_MAX_CONTENT,
12
+ JUSTIFY_SPACE_BETWEEN,
13
+ } from '../../styles'
14
+ import { RESPONSIVENESS, SPACING } from '../../ui-style-constants'
15
+ import { StyledText } from '../StyledText'
16
+
17
+ export interface CheckboxProps {
18
+ /** checkbox is checked if value is true */
19
+ isChecked: boolean
20
+ /** label text that describes the option */
21
+ labelText: string
22
+ /** callback click/tap handler */
23
+ onClick: React.MouseEventHandler
24
+ /** html tabindex property */
25
+ tabIndex?: number
26
+ /** if disabled is true, mouse events will not trigger onClick callback */
27
+ disabled?: boolean
28
+ /** optional borderRadius type */
29
+ type?: 'round' | 'neutral'
30
+ /** optional width for helix */
31
+ width?: string
32
+ }
33
+ export function Checkbox(props: CheckboxProps): JSX.Element {
34
+ const {
35
+ isChecked,
36
+ labelText,
37
+ onClick,
38
+ tabIndex = 0,
39
+ disabled = false,
40
+ width = FLEX_MAX_CONTENT,
41
+ type = 'round',
42
+ } = props
43
+
44
+ const CHECKBOX_STYLE = css`
45
+ width: ${width};
46
+ grid-gap: ${SPACING.spacing12};
47
+ border: none;
48
+ align-items: ${ALIGN_CENTER};
49
+ flex-direction: ${DIRECTION_ROW};
50
+ color: ${isChecked ? COLORS.white : COLORS.black90};
51
+ background-color: ${isChecked ? COLORS.blue50 : COLORS.blue30};
52
+ border-radius: ${type === 'round'
53
+ ? BORDERS.borderRadiusFull
54
+ : BORDERS.borderRadius8};
55
+ padding: ${SPACING.spacing12} ${SPACING.spacing16};
56
+ justify-content: ${JUSTIFY_SPACE_BETWEEN};
57
+ cursor: ${CURSOR_POINTER};
58
+
59
+ &:active {
60
+ background-color: ${isChecked ? COLORS.blue55 : COLORS.blue40};
61
+ }
62
+ &:focus-visible {
63
+ background-color: ${isChecked ? COLORS.blue50 : COLORS.blue35};
64
+ outline: 3px ${BORDERS.styleSolid} ${COLORS.blue50};
65
+ outline-offset: 2px;
66
+ }
67
+ &:disabled {
68
+ background-color: ${COLORS.grey35};
69
+ color: ${COLORS.grey50};
70
+ }
71
+ &:hover {
72
+ background-color: ${isChecked ? COLORS.blue55 : COLORS.blue35};
73
+ }
74
+
75
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
76
+ padding: ${SPACING.spacing20};
77
+ border-radius: ${BORDERS.borderRadius16};
78
+ width: 100%;
79
+ cursor: ${CURSOR_AUTO};
80
+ }
81
+ `
82
+
83
+ return (
84
+ <Flex
85
+ as="button"
86
+ role="checkbox"
87
+ onClick={onClick}
88
+ tabIndex={tabIndex}
89
+ disabled={disabled}
90
+ css={CHECKBOX_STYLE}
91
+ >
92
+ <StyledText desktopStyle="bodyDefaultRegular" oddStyle="bodyTextSemiBold">
93
+ {labelText}
94
+ </StyledText>
95
+ <Check isChecked={isChecked} />
96
+ </Flex>
97
+ )
98
+ }
99
+
100
+ interface CheckProps {
101
+ isChecked: boolean
102
+ color?: string
103
+ disabled?: boolean
104
+ }
105
+ export function Check(props: CheckProps): JSX.Element {
106
+ const { isChecked, color = COLORS.white, disabled = false } = props
107
+ return isChecked ? (
108
+ <Flex css={CHECK_STYLE}>
109
+ <Icon name="ot-checkbox" color={color} />
110
+ </Flex>
111
+ ) : (
112
+ <Flex
113
+ css={CHECK_STYLE}
114
+ border={`2px solid ${disabled ? COLORS.grey40 : COLORS.black90}`}
115
+ borderRadius={BORDERS.borderRadius4}
116
+ />
117
+ )
118
+ }
119
+
120
+ const CHECK_STYLE = css`
121
+ width: 1rem;
122
+ height: 1rem;
123
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
124
+ width: 1.75rem;
125
+ height: 1.75rem;
126
+ }
127
+ `
@@ -0,0 +1,30 @@
1
+ import * as React from 'react'
2
+ import { CheckboxField as CheckboxFieldComponent } from './index'
3
+
4
+ import type { Story, Meta } from '@storybook/react'
5
+
6
+ export default {
7
+ title: 'Library/Atoms/Checkbox Field',
8
+ component: CheckboxFieldComponent,
9
+ } as Meta
10
+
11
+ const Template: Story<
12
+ React.ComponentProps<typeof CheckboxFieldComponent>
13
+ > = args => {
14
+ const [isChecked, setIsChecked] = React.useState<boolean>(false)
15
+ return (
16
+ <CheckboxFieldComponent
17
+ {...args}
18
+ onChange={e => {
19
+ setIsChecked(!isChecked)
20
+ args.onChange(e)
21
+ }}
22
+ value={isChecked}
23
+ />
24
+ )
25
+ }
26
+ export const CheckboxField = Template.bind({})
27
+ CheckboxField.args = {
28
+ label: 'Remember this setting?',
29
+ isIndeterminate: false,
30
+ }