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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/Makefile +5 -1
  2. package/package.json +6 -7
  3. package/src/__mocks__/file.js +10 -0
  4. package/src/alerts/AlertItem.stories.tsx +49 -0
  5. package/src/alerts/AlertItem.tsx +85 -0
  6. package/src/alerts/index.ts +3 -0
  7. package/src/atoms/Checkbox/Checkbox.stories.tsx +24 -0
  8. package/src/atoms/Checkbox/index.tsx +127 -0
  9. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +30 -0
  10. package/src/atoms/CheckboxField/index.tsx +171 -0
  11. package/src/atoms/Chip/Chip.stories.tsx +59 -0
  12. package/src/atoms/Chip/index.tsx +172 -0
  13. package/src/atoms/Divider/index.tsx +15 -0
  14. package/src/atoms/InputField/InputField.stories.tsx +77 -0
  15. package/src/atoms/InputField/index.tsx +383 -0
  16. package/src/atoms/ListButton/ListButton.stories.tsx +133 -0
  17. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordion.tsx +65 -0
  18. package/src/atoms/ListButton/ListButtonChildren/ListButtonAccordionContainer.tsx +23 -0
  19. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +108 -0
  20. package/src/atoms/ListButton/ListButtonChildren/index.ts +3 -0
  21. package/src/atoms/ListButton/index.tsx +72 -0
  22. package/src/atoms/ListItem/ListItem.stories.tsx +96 -0
  23. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +78 -0
  24. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +42 -0
  25. package/src/atoms/ListItem/ListItemChildren/index.ts +2 -0
  26. package/src/atoms/ListItem/index.tsx +89 -0
  27. package/src/atoms/MenuList/MenuItem.stories.tsx +20 -0
  28. package/src/atoms/MenuList/MenuItem.tsx +55 -0
  29. package/src/atoms/MenuList/MenuList.stories.tsx +31 -0
  30. package/src/atoms/MenuList/OverflowBtn.stories.tsx +17 -0
  31. package/src/atoms/MenuList/OverflowBtn.tsx +76 -0
  32. package/src/atoms/MenuList/index.tsx +50 -0
  33. package/src/atoms/Snackbar/Snackbar.stories.tsx +67 -0
  34. package/src/atoms/Snackbar/index.tsx +91 -0
  35. package/src/atoms/StepMeter/index.tsx +53 -0
  36. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +106 -0
  37. package/src/atoms/StyledText/LegacyStyledText.tsx +95 -0
  38. package/src/atoms/StyledText/StyledText.stories.tsx +46 -0
  39. package/src/atoms/StyledText/StyledText.tsx +323 -0
  40. package/src/atoms/StyledText/index.ts +2 -0
  41. package/src/atoms/Tag/Tag.stories.tsx +48 -0
  42. package/src/atoms/Tag/index.tsx +116 -0
  43. package/src/atoms/Toast/ODDToast.stories.tsx +68 -0
  44. package/src/atoms/Toast/Toast.stories.tsx +55 -0
  45. package/src/atoms/Toast/index.tsx +439 -0
  46. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +39 -0
  47. package/src/atoms/ToggleGroup/index.tsx +91 -0
  48. package/src/atoms/Tooltip/Tooltip.stories.tsx +99 -0
  49. package/src/atoms/Tooltip/index.tsx +38 -0
  50. package/src/atoms/buttons/AlertPrimaryButton.tsx +26 -0
  51. package/src/atoms/buttons/AltPrimaryButton.tsx +31 -0
  52. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +36 -0
  53. package/src/atoms/buttons/EmptySelectorButton.tsx +83 -0
  54. package/src/atoms/buttons/LargeButton.stories.tsx +99 -0
  55. package/src/atoms/buttons/LargeButton.tsx +320 -0
  56. package/src/atoms/buttons/PrimaryButton.tsx +36 -0
  57. package/src/atoms/buttons/RadioButton.stories.tsx +35 -0
  58. package/src/atoms/buttons/RadioButton.tsx +217 -0
  59. package/src/atoms/buttons/SecondaryButton.tsx +62 -0
  60. package/src/atoms/buttons/buttons.stories.tsx +78 -0
  61. package/src/atoms/buttons/index.ts +6 -0
  62. package/src/atoms/index.ts +20 -0
  63. package/src/barrel.ts +10 -0
  64. package/src/buttons/Button.tsx +96 -0
  65. package/src/buttons/DeprecatedPrimaryButton.tsx +24 -0
  66. package/src/buttons/FlatButton.tsx +21 -0
  67. package/src/buttons/IconButton.tsx +37 -0
  68. package/src/buttons/OutlineButton.tsx +24 -0
  69. package/src/buttons/index.ts +7 -0
  70. package/src/controls/ControlInfo.tsx +13 -0
  71. package/src/controls/LabeledButton.tsx +28 -0
  72. package/src/controls/LabeledCheckbox.tsx +35 -0
  73. package/src/controls/LabeledControl.tsx +24 -0
  74. package/src/controls/LabeledRadioGroup.tsx +27 -0
  75. package/src/controls/LabeledSelect.tsx +34 -0
  76. package/src/controls/LabeledToggle.tsx +35 -0
  77. package/src/controls/StackedLabeledControl.tsx +28 -0
  78. package/src/controls/ToggleButton.tsx +25 -0
  79. package/src/controls/index.ts +10 -0
  80. package/src/forms/DeprecatedCheckboxField.stories.tsx +31 -0
  81. package/src/forms/DeprecatedCheckboxField.tsx +94 -0
  82. package/src/forms/DropdownField.stories.tsx +44 -0
  83. package/src/forms/DropdownField.tsx +106 -0
  84. package/src/forms/FormGroup.stories.tsx +31 -0
  85. package/src/forms/FormGroup.tsx +53 -0
  86. package/src/forms/InputField.stories.tsx +41 -0
  87. package/src/forms/LegacyInputField.tsx +123 -0
  88. package/src/forms/RadioGroup.stories.tsx +44 -0
  89. package/src/forms/RadioGroup.tsx +87 -0
  90. package/src/forms/Select.stories.tsx +117 -0
  91. package/src/forms/Select.tsx +132 -0
  92. package/src/forms/SelectField.tsx +94 -0
  93. package/src/forms/ToggleField.stories.tsx +31 -0
  94. package/src/forms/ToggleField.tsx +59 -0
  95. package/src/forms/index.ts +8 -0
  96. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +94 -0
  97. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +423 -0
  98. package/src/hardware-sim/BaseDeck/SingleSlotFixture.tsx +199 -0
  99. package/src/hardware-sim/BaseDeck/SlotBase.tsx +5 -0
  100. package/src/hardware-sim/BaseDeck/SlotClip.tsx +15 -0
  101. package/src/hardware-sim/BaseDeck/StagingAreaFixture.tsx +114 -0
  102. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +114 -0
  103. package/src/hardware-sim/BaseDeck/WasteChuteStagingAreaFixture.tsx +68 -0
  104. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +165 -0
  105. package/src/hardware-sim/BaseDeck/index.ts +5 -0
  106. package/src/hardware-sim/BaseDeck/something.test.tsx +7 -0
  107. package/src/hardware-sim/Deck/DeckFromLayers.tsx +58 -0
  108. package/src/hardware-sim/Deck/FlexTrash.tsx +128 -0
  109. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +97 -0
  110. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +251 -0
  111. package/src/hardware-sim/Deck/OT2Layers.tsx +153 -0
  112. package/src/hardware-sim/Deck/RobotCoordsForeignDiv.tsx +46 -0
  113. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +42 -0
  114. package/src/hardware-sim/Deck/RobotCoordsText.tsx +32 -0
  115. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +90 -0
  116. package/src/hardware-sim/Deck/SlotLabels.tsx +111 -0
  117. package/src/hardware-sim/Deck/__mocks__/getDeckDefinitions.ts +29 -0
  118. package/src/hardware-sim/Deck/constants.ts +12 -0
  119. package/src/hardware-sim/Deck/index.tsx +8 -0
  120. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +91 -0
  121. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +110 -0
  122. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +131 -0
  123. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +102 -0
  124. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +130 -0
  125. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +89 -0
  126. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +54 -0
  127. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +103 -0
  128. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +89 -0
  129. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +99 -0
  130. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +96 -0
  131. package/src/hardware-sim/DeckConfigurator/constants.ts +81 -0
  132. package/src/hardware-sim/DeckConfigurator/index.tsx +285 -0
  133. package/src/hardware-sim/DeckSlotLocation/index.tsx +88 -0
  134. package/src/hardware-sim/Labware/Labware.tsx +173 -0
  135. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96DeepWellAdapter.tsx +23 -0
  136. package/src/hardware-sim/Labware/LabwareAdapter/Opentrons96FlatBottomAdapter.tsx +7 -0
  137. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAluminumFlatBottomPlate.tsx +13 -0
  138. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsAutoclavableDeckRiser.tsx +100 -0
  139. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsFlex96TiprackAdapter.tsx +13 -0
  140. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsToughPCRAutoSealingLid.tsx +83 -0
  141. package/src/hardware-sim/Labware/LabwareAdapter/OpentronsUniversalFlatAdapter.tsx +13 -0
  142. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +73 -0
  143. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +96 -0
  144. package/src/hardware-sim/Labware/LabwareRender.tsx +173 -0
  145. package/src/hardware-sim/Labware/LabwareStackRender.tsx +272 -0
  146. package/src/hardware-sim/Labware/index.ts +6 -0
  147. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +39 -0
  148. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +133 -0
  149. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +118 -0
  150. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +121 -0
  151. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +38 -0
  152. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +77 -0
  153. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +74 -0
  154. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +121 -0
  155. package/src/hardware-sim/Labware/labwareInternals/index.ts +8 -0
  156. package/src/hardware-sim/Labware/labwareInternals/types.ts +18 -0
  157. package/src/hardware-sim/Module/HeaterShaker.tsx +83 -0
  158. package/src/hardware-sim/Module/MagneticBlock.tsx +49 -0
  159. package/src/hardware-sim/Module/MagneticModule.tsx +51 -0
  160. package/src/hardware-sim/Module/Module.stories.tsx +90 -0
  161. package/src/hardware-sim/Module/ModuleTag.tsx +38 -0
  162. package/src/hardware-sim/Module/PlateReader.tsx +208 -0
  163. package/src/hardware-sim/Module/Temperature.tsx +54 -0
  164. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +248 -0
  165. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN2.tsx +286 -0
  166. package/src/hardware-sim/Module/Thermocycler/index.tsx +49 -0
  167. package/src/hardware-sim/Module/index.tsx +227 -0
  168. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +23 -0
  169. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +52 -0
  170. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +71 -0
  171. package/src/hardware-sim/Pipette/PipetteRender.tsx +92 -0
  172. package/src/hardware-sim/Pipette/constants.ts +10 -0
  173. package/src/hardware-sim/Pipette/index.ts +1 -0
  174. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +68 -0
  175. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +25 -0
  176. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +47145 -0
  177. package/src/hardware-sim/ProtocolDeck/index.tsx +174 -0
  178. package/src/hardware-sim/ProtocolDeck/types.ts +6 -0
  179. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +33 -0
  180. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +155 -0
  181. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +42 -0
  182. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +129 -0
  183. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +29 -0
  184. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +30 -0
  185. package/src/hardware-sim/ProtocolDeck/utils/index.ts +3 -0
  186. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +28 -0
  187. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +52 -0
  188. package/src/hardware-sim/RobotCoordinateSpace/index.ts +2 -0
  189. package/src/hardware-sim/index.ts +11 -0
  190. package/src/hardware-sim/utils.ts +18 -0
  191. package/src/helix-design-system/borders.ts +32 -0
  192. package/src/helix-design-system/colors.ts +100 -0
  193. package/src/helix-design-system/index.ts +4 -0
  194. package/src/helix-design-system/product/index.ts +1 -0
  195. package/src/helix-design-system/product/typography.ts +151 -0
  196. package/src/helix-design-system/style.ts +2 -0
  197. package/src/hooks/index.ts +15 -0
  198. package/src/hooks/useConditionalConfirm.ts +70 -0
  199. package/src/hooks/useDrag.ts +90 -0
  200. package/src/hooks/useIdle.ts +68 -0
  201. package/src/hooks/useInterval.ts +38 -0
  202. package/src/hooks/useLongPress.ts +83 -0
  203. package/src/hooks/useMenuHandleClickOutside.tsx +46 -0
  204. package/src/hooks/useMountEffect.ts +12 -0
  205. package/src/hooks/usePrevious.ts +19 -0
  206. package/src/hooks/useScrolling.ts +33 -0
  207. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +55 -0
  208. package/src/hooks/useSelectDeckLocation/index.tsx +331 -0
  209. package/src/hooks/useSwipe.ts +86 -0
  210. package/src/hooks/useTimeout.ts +33 -0
  211. package/src/hooks/useToggle.ts +27 -0
  212. package/src/icons/Icon.stories.tsx +37 -0
  213. package/src/icons/Icon.tsx +79 -0
  214. package/src/icons/IconList.stories.tsx +108 -0
  215. package/src/icons/ModuleIcon.tsx +48 -0
  216. package/src/icons/NotificationIcon.tsx +41 -0
  217. package/src/icons/icon-data.ts +821 -0
  218. package/src/icons/index.ts +6 -0
  219. package/src/images/index.ts +1 -0
  220. package/src/images/labware/index.ts +1 -0
  221. package/src/images/labware/measurement-guide/images/depth/depth-plate-flat@3x.png +0 -0
  222. package/src/images/labware/measurement-guide/images/depth/depth-plate-round@3x.png +0 -0
  223. package/src/images/labware/measurement-guide/images/depth/depth-plate-v@3x.png +0 -0
  224. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-flat@3x.png +0 -0
  225. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-round@3x.png +0 -0
  226. package/src/images/labware/measurement-guide/images/depth/depth-reservoir-and-tubes-v@3x.png +0 -0
  227. package/src/images/labware/measurement-guide/images/depth/length-tip-rack@3x.png +0 -0
  228. package/src/images/labware/measurement-guide/images/dimensions/footprint@3x.png +0 -0
  229. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-plate@3x.png +0 -0
  230. package/src/images/labware/measurement-guide/images/dimensions/height-alum-block-tubes@3x.png +0 -0
  231. package/src/images/labware/measurement-guide/images/dimensions/height-plate-and-reservoir@3x.png +0 -0
  232. package/src/images/labware/measurement-guide/images/dimensions/height-tip-rack@3x.png +0 -0
  233. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack-irregular@3x.png +0 -0
  234. package/src/images/labware/measurement-guide/images/dimensions/height-tube-rack@3x.png +0 -0
  235. package/src/images/labware/measurement-guide/images/offset/offset-reservoir@3x.png +0 -0
  236. package/src/images/labware/measurement-guide/images/offset/offset-well-circular@3x.png +0 -0
  237. package/src/images/labware/measurement-guide/images/offset/offset-well-rectangular@3x.png +0 -0
  238. package/src/images/labware/measurement-guide/images/shape/shape-circular@3x.png +0 -0
  239. package/src/images/labware/measurement-guide/images/shape/shape-rectangular@3x.png +0 -0
  240. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir-multi-row@3x.png +0 -0
  241. package/src/images/labware/measurement-guide/images/spacing/spacing-reservoir@3x.png +0 -0
  242. package/src/images/labware/measurement-guide/images/spacing/spacing-well-circular@3x.png +0 -0
  243. package/src/images/labware/measurement-guide/images/spacing/spacing-well-rectangular@3x.png +0 -0
  244. package/src/images/labware/measurement-guide/index.ts +272 -0
  245. package/src/index.ts +2 -0
  246. package/src/instrument/InstrumentDiagram.stories.tsx +42 -0
  247. package/src/instrument/InstrumentDiagram.tsx +58 -0
  248. package/src/instrument/InstrumentGroup.stories.tsx +88 -0
  249. package/src/instrument/InstrumentGroup.tsx +35 -0
  250. package/src/instrument/InstrumentInfo.tsx +107 -0
  251. package/src/instrument/PipetteSelect.stories.tsx +40 -0
  252. package/src/instrument/PipetteSelect.tsx +170 -0
  253. package/src/instrument/eight-channel-flex.png +0 -0
  254. package/src/instrument/index.ts +4 -0
  255. package/src/instrument/multi-channel_GEN1_800px.png +0 -0
  256. package/src/instrument/multi-channel_GEN2_800px.png +0 -0
  257. package/src/instrument/ninety-six-channel-gen1.png +0 -0
  258. package/src/instrument/pipetteGEN2Multi.png +0 -0
  259. package/src/instrument/pipetteGEN2Single.png +0 -0
  260. package/src/instrument/pipetteMulti.png +0 -0
  261. package/src/instrument/pipetteSingle.png +0 -0
  262. package/src/instrument/single-channel-flex.png +0 -0
  263. package/src/instrument/single-channel_GEN2_800px.png +0 -0
  264. package/src/instrument/single_channel_GEN1_800px.png +0 -0
  265. package/src/interaction-enhancers/ClickOutside.ts +57 -0
  266. package/src/interaction-enhancers/HandleKeypress.tsx +69 -0
  267. package/src/interaction-enhancers/index.ts +4 -0
  268. package/src/interaction-enhancers/useHover.ts +84 -0
  269. package/src/interaction-enhancers/useOnClickOutside.ts +42 -0
  270. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +22 -0
  271. package/src/legacy-hardware-sim/ModuleItem.tsx +145 -0
  272. package/src/legacy-hardware-sim/index.ts +2 -0
  273. package/src/lists/SidePanelGroup.tsx +48 -0
  274. package/src/lists/TitledList.tsx +155 -0
  275. package/src/lists/index.ts +3 -0
  276. package/src/modals/AlertModal.tsx +89 -0
  277. package/src/modals/ContinueModal.tsx +32 -0
  278. package/src/modals/LegacyModal.tsx +59 -0
  279. package/src/modals/Modal.stories.tsx +52 -0
  280. package/src/modals/Modal.tsx +96 -0
  281. package/src/modals/ModalHeader.tsx +100 -0
  282. package/src/modals/ModalShell.tsx +155 -0
  283. package/src/modals/Overlay.tsx +38 -0
  284. package/src/modals/SpinnerModal.tsx +35 -0
  285. package/src/modals/SpinnerModalPage.tsx +30 -0
  286. package/src/modals/index.ts +10 -0
  287. package/src/molecules/Banner/Banner.stories.tsx +41 -0
  288. package/src/molecules/Banner/index.tsx +147 -0
  289. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +65 -0
  290. package/src/molecules/DeckInfoLabel/index.tsx +95 -0
  291. package/src/molecules/DeckLabel/DeckLabel.stories.tsx +31 -0
  292. package/src/molecules/DeckLabel/index.tsx +80 -0
  293. package/src/molecules/DropdownMenu/DropdownMenu.stories.tsx +30 -0
  294. package/src/molecules/DropdownMenu/index.tsx +343 -0
  295. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +50 -0
  296. package/src/molecules/InfoScreen/index.tsx +54 -0
  297. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +53 -0
  298. package/src/molecules/LiquidIcon/index.tsx +68 -0
  299. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +172 -0
  300. package/src/molecules/ParametersTable/index.tsx +198 -0
  301. package/src/molecules/Tabs/Tabs.stories.tsx +74 -0
  302. package/src/molecules/Tabs/index.tsx +94 -0
  303. package/src/molecules/index.ts +8 -0
  304. package/src/nav/SidePanel.stories.tsx +29 -0
  305. package/src/nav/SidePanel.tsx +21 -0
  306. package/src/nav/index.ts +2 -0
  307. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +46 -0
  308. package/src/organisms/DeckLabelSet/index.tsx +69 -0
  309. package/src/organisms/EndUserAgreementFooter/index.tsx +49 -0
  310. package/src/organisms/Toolbox/Toolbox.stories.tsx +23 -0
  311. package/src/organisms/Toolbox/index.tsx +160 -0
  312. package/src/organisms/index.ts +3 -0
  313. package/src/primitives/Box.stories.tsx +25 -0
  314. package/src/primitives/Box.tsx +17 -0
  315. package/src/primitives/Btn.stories.tsx +105 -0
  316. package/src/primitives/Btn.tsx +266 -0
  317. package/src/primitives/Flex.stories.tsx +50 -0
  318. package/src/primitives/Flex.tsx +17 -0
  319. package/src/primitives/ForeignObject.tsx +70 -0
  320. package/src/primitives/Link.stories.tsx +27 -0
  321. package/src/primitives/Link.tsx +32 -0
  322. package/src/primitives/README.md +188 -0
  323. package/src/primitives/Svg.stories.tsx +36 -0
  324. package/src/primitives/Svg.tsx +68 -0
  325. package/src/primitives/Text.stories.tsx +17 -0
  326. package/src/primitives/Text.tsx +18 -0
  327. package/src/primitives/index.ts +10 -0
  328. package/src/primitives/style-props.ts +197 -0
  329. package/src/primitives/types.ts +120 -0
  330. package/src/robot-types.ts +4 -0
  331. package/src/slotmap/OT2SlotMap.tsx +73 -0
  332. package/src/slotmap/index.ts +1 -0
  333. package/src/structure/Card.stories.tsx +28 -0
  334. package/src/structure/Card.tsx +64 -0
  335. package/src/structure/LabeledValue.stories.tsx +17 -0
  336. package/src/structure/LabeledValue.tsx +31 -0
  337. package/src/structure/Pill.tsx +43 -0
  338. package/src/structure/Splash.stories.tsx +24 -0
  339. package/src/structure/Splash.tsx +22 -0
  340. package/src/structure/TitleBar.stories.tsx +42 -0
  341. package/src/structure/TitleBar.tsx +81 -0
  342. package/src/structure/index.ts +7 -0
  343. package/src/styles/borders.ts +16 -0
  344. package/src/styles/colors.ts +58 -0
  345. package/src/styles/cursor.ts +12 -0
  346. package/src/styles/flexbox.ts +39 -0
  347. package/src/styles/index.ts +8 -0
  348. package/src/styles/layout.ts +31 -0
  349. package/src/styles/position.ts +5 -0
  350. package/src/styles/spacing.ts +11 -0
  351. package/src/styles/typography.ts +90 -0
  352. package/src/testing/utils/index.ts +2 -0
  353. package/src/testing/utils/matchers.ts +31 -0
  354. package/src/testing/utils/renderWithProviders.tsx +53 -0
  355. package/src/tooltips/DeprecatedTooltip.tsx +105 -0
  356. package/src/tooltips/HoverTooltip.tsx +83 -0
  357. package/src/tooltips/LegacyTooltip.stories.tsx +98 -0
  358. package/src/tooltips/LegacyTooltip.tsx +151 -0
  359. package/src/tooltips/constants.ts +28 -0
  360. package/src/tooltips/index.ts +10 -0
  361. package/src/tooltips/styles.ts +20 -0
  362. package/src/tooltips/types.ts +73 -0
  363. package/src/tooltips/useHoverTooltip.ts +47 -0
  364. package/src/tooltips/usePopper.ts +87 -0
  365. package/src/tooltips/useTooltip.ts +100 -0
  366. package/src/ui-style-constants/index.ts +4 -0
  367. package/src/ui-style-constants/responsiveness.ts +15 -0
  368. package/src/ui-style-constants/spacing.ts +18 -0
  369. package/src/ui-style-constants/typography.ts +258 -0
  370. package/src/ui-style-constants/viewport.ts +18 -0
  371. package/src/utils.ts +56 -0
  372. package/{vite.config.ts → vite.config.mts} +2 -0
  373. package/lib/index.mjs +0 -19869
@@ -0,0 +1,68 @@
1
+ import styled from 'styled-components'
2
+
3
+ import { styleProps, isntStyleProp } from './style-props'
4
+
5
+ import type { StyleProps, PrimitiveComponent } from './types'
6
+
7
+ export interface SvgProps extends StyleProps {
8
+ /** attach a width attribute to the <svg> element */
9
+ svgWidth?: string | number
10
+ /** attach a height attribute to the <svg> element */
11
+ svgHeight?: string | number
12
+ /**
13
+ * internal helper prop to remap width style-prop to CSS
14
+ * @internal
15
+ */
16
+ _cssWidth?: string | number
17
+ /**
18
+ * internal helper prop to remap height style-prop to CSS
19
+ * @internal
20
+ */
21
+ _cssHeight?: string | number
22
+ }
23
+
24
+ const SVG_VERSION = '1.1'
25
+ const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'
26
+
27
+ const SVG_PROPS = ['svgWidth', 'svgHeight', '_cssWidth', '_cssHeight']
28
+
29
+ /**
30
+ * SVG primitive
31
+ *
32
+ * @component
33
+ */
34
+ export const Svg: PrimitiveComponent<'svg', SvgProps> = styled.svg
35
+ .withConfig({
36
+ shouldForwardProp: p => {
37
+ return (
38
+ // do not forward style-props or Svg-props to the underlying <svg>
39
+ (isntStyleProp(p) && !SVG_PROPS.includes(p)) ||
40
+ // unlike other primitives, allow width and height to be forwarded
41
+ p === 'width' ||
42
+ p === 'height'
43
+ )
44
+ },
45
+ })
46
+ .attrs(
47
+ (props: SvgProps): React.ComponentProps<PrimitiveComponent<'svg'>> => ({
48
+ version: SVG_VERSION,
49
+ xmlns: SVG_NAMESPACE,
50
+ // map the explicit svgWidth/Height props to width/height attrs
51
+ width: props.svgWidth,
52
+ height: props.svgHeight,
53
+ // map width and height style props to internal style props
54
+ _cssWidth: props.width,
55
+ _cssHeight: props.height,
56
+ })
57
+ )`
58
+ ${(props: Partial<SvgProps>) => {
59
+ const { width, height, ...otherProps } = props
60
+
61
+ // replace width and height attrs with internal style props
62
+ return styleProps({
63
+ ...otherProps,
64
+ width: otherProps._cssWidth,
65
+ height: otherProps._cssHeight,
66
+ })
67
+ }}
68
+ `
@@ -0,0 +1,17 @@
1
+ import type * as React from 'react'
2
+ import { Text as TextComponent } from './Text'
3
+
4
+ import type { Story, Meta } from '@storybook/react'
5
+
6
+ export default {
7
+ title: 'Library/Atoms/Text',
8
+ } as Meta
9
+
10
+ const Template: Story<React.ComponentProps<typeof TextComponent>> = args => (
11
+ <TextComponent {...args} />
12
+ )
13
+ export const Text = Template.bind({})
14
+ Text.args = {
15
+ children: 'This is a bunch text of text',
16
+ color: 'grey',
17
+ }
@@ -0,0 +1,18 @@
1
+ import styled from 'styled-components'
2
+
3
+ import { styleProps, isntStyleProp } from './style-props'
4
+
5
+ import type { PrimitiveComponent } from './types'
6
+
7
+ /**
8
+ * Text primitive
9
+ *
10
+ * @component
11
+ */
12
+ export const Text: PrimitiveComponent<'p'> = styled.p.withConfig({
13
+ shouldForwardProp: isntStyleProp,
14
+ })`
15
+ margin-top: 0;
16
+ margin-bottom: 0;
17
+ ${styleProps}
18
+ `
@@ -0,0 +1,10 @@
1
+ export * from './style-props'
2
+ export * from './Box'
3
+ export * from './Btn'
4
+ export * from './Flex'
5
+ export * from './ForeignObject'
6
+ export * from './Link'
7
+ export * from './Svg'
8
+ export * from './Text'
9
+
10
+ export * from './types'
@@ -0,0 +1,197 @@
1
+ // common styling props you can apply to any primitive component
2
+ // props are string type for flexibility, but try to use constants for safety
3
+
4
+ import pick from 'lodash/pick'
5
+
6
+ import type * as Types from './types'
7
+
8
+ import type { CSSObject } from 'styled-components'
9
+
10
+ const COLOR_PROPS = ['color', 'backgroundColor', 'opacity'] as const
11
+
12
+ const TYPOGRAPHY_PROPS = [
13
+ 'fontSize',
14
+ 'fontWeight',
15
+ 'fontStyle',
16
+ 'lineHeight',
17
+ 'textAlign',
18
+ 'textTransform',
19
+ 'textDecoration',
20
+ 'textOverflow',
21
+ ] as const
22
+
23
+ const SPACING_PROPS = [
24
+ 'margin',
25
+ 'marginX',
26
+ 'marginY',
27
+ 'marginTop',
28
+ 'marginRight',
29
+ 'marginBottom',
30
+ 'marginLeft',
31
+ 'padding',
32
+ 'paddingX',
33
+ 'paddingY',
34
+ 'paddingTop',
35
+ 'paddingRight',
36
+ 'paddingBottom',
37
+ 'paddingLeft',
38
+ ] as const
39
+
40
+ const BORDER_PROPS = [
41
+ 'border',
42
+ 'borderTop',
43
+ 'borderRight',
44
+ 'borderBottom',
45
+ 'borderLeft',
46
+ 'borderRadius',
47
+ 'borderWidth',
48
+ 'borderColor',
49
+ 'boxShadow',
50
+ ] as const
51
+
52
+ const FLEXBOX_PROPS = [
53
+ 'flex',
54
+ 'alignItems',
55
+ 'justifyContent',
56
+ 'flexDirection',
57
+ 'flexGrow',
58
+ 'flexWrap',
59
+ 'alignSelf',
60
+ 'whiteSpace',
61
+ 'gap',
62
+ ] as const
63
+
64
+ const GRID_PROPS = [
65
+ 'columnGap',
66
+ 'gridGap',
67
+ 'gridTemplateAreas',
68
+ 'gridTemplateRows',
69
+ 'gridTemplateColumns',
70
+ 'gridArea',
71
+ 'gridRow',
72
+ 'gridColumn',
73
+ ] as const
74
+
75
+ const LAYOUT_PROPS = [
76
+ 'display',
77
+ 'size',
78
+ 'width',
79
+ 'minWidth',
80
+ 'maxWidth',
81
+ 'height',
82
+ 'minHeight',
83
+ 'maxHeight',
84
+ 'overflow',
85
+ 'overflowX',
86
+ 'overflowY',
87
+ 'whiteSpace',
88
+ 'wordSpacing',
89
+ 'cursor',
90
+ 'overflowWrap',
91
+ ] as const
92
+
93
+ const POSITION_PROPS = [
94
+ 'position',
95
+ 'zIndex',
96
+ 'top',
97
+ 'right',
98
+ 'bottom',
99
+ 'left',
100
+ 'transform',
101
+ 'transformOrigin',
102
+ 'filter',
103
+ ] as const
104
+
105
+ const TRANSITION_PROPS = ['transition'] as const
106
+
107
+ const STYLE_PROPS = [
108
+ ...COLOR_PROPS,
109
+ ...TYPOGRAPHY_PROPS,
110
+ ...SPACING_PROPS,
111
+ ...BORDER_PROPS,
112
+ ...FLEXBOX_PROPS,
113
+ ...GRID_PROPS,
114
+ ...LAYOUT_PROPS,
115
+ ...POSITION_PROPS,
116
+ ...TRANSITION_PROPS,
117
+ ]
118
+
119
+ const colorStyles = (props: Types.StyleProps): CSSObject => {
120
+ return pick(props, COLOR_PROPS) as CSSObject
121
+ }
122
+
123
+ const typographyStyles = (props: Types.StyleProps): CSSObject => {
124
+ return pick(props, TYPOGRAPHY_PROPS) as CSSObject
125
+ }
126
+
127
+ const spacingStyles = (props: Types.StyleProps): CSSObject => {
128
+ const { marginX, marginY, paddingX, paddingY, ...styles } = pick(
129
+ props,
130
+ SPACING_PROPS
131
+ )
132
+
133
+ if (marginX != null) {
134
+ styles.marginRight = styles.marginRight ?? marginX
135
+ styles.marginLeft = styles.marginLeft ?? marginX
136
+ }
137
+ if (marginY != null) {
138
+ styles.marginTop = styles.marginTop ?? marginY
139
+ styles.marginBottom = styles.marginBottom ?? marginY
140
+ }
141
+ if (paddingX != null) {
142
+ styles.paddingRight = styles.paddingRight ?? paddingX
143
+ styles.paddingLeft = styles.paddingLeft ?? paddingX
144
+ }
145
+ if (paddingY != null) {
146
+ styles.paddingTop = styles.paddingTop ?? paddingY
147
+ styles.paddingBottom = styles.paddingBottom ?? paddingY
148
+ }
149
+
150
+ return styles as CSSObject
151
+ }
152
+
153
+ const borderStyles = (props: Types.StyleProps): CSSObject => {
154
+ return pick(props, BORDER_PROPS) as CSSObject
155
+ }
156
+
157
+ const flexboxStyles = (props: Types.StyleProps): CSSObject => {
158
+ return pick(props, FLEXBOX_PROPS) as CSSObject
159
+ }
160
+
161
+ const gridStyles = (props: Types.StyleProps): CSSObject => {
162
+ return pick(props, GRID_PROPS) as CSSObject
163
+ }
164
+
165
+ const layoutStyles = (props: Types.StyleProps): CSSObject => {
166
+ const { size, ...styles } = pick(props, LAYOUT_PROPS) as CSSObject
167
+
168
+ if (size != null) {
169
+ styles.width = styles.width ?? ((size as unknown) as typeof styles.width)
170
+ styles.height = styles.height ?? ((size as unknown) as typeof styles.height)
171
+ }
172
+
173
+ return styles
174
+ }
175
+
176
+ const positionStyles = (props: Types.StyleProps): CSSObject => {
177
+ return pick(props, POSITION_PROPS) as CSSObject
178
+ }
179
+
180
+ const transitionStyles = (props: Types.StyleProps): CSSObject => {
181
+ return pick(props, TRANSITION_PROPS)
182
+ }
183
+
184
+ export const styleProps = (props: Types.StyleProps): CSSObject => ({
185
+ ...colorStyles(props),
186
+ ...typographyStyles(props),
187
+ ...spacingStyles(props),
188
+ ...borderStyles(props),
189
+ ...flexboxStyles(props),
190
+ ...gridStyles(props),
191
+ ...layoutStyles(props),
192
+ ...positionStyles(props),
193
+ ...transitionStyles(props),
194
+ })
195
+
196
+ export const isntStyleProp = (prop: string | React.ReactText): boolean =>
197
+ !STYLE_PROPS.includes(prop as typeof STYLE_PROPS[number])
@@ -0,0 +1,120 @@
1
+ // known style types
2
+
3
+ import type { StyledComponent, CSSProperties } from 'styled-components'
4
+
5
+ export interface ColorProps {
6
+ color?: string
7
+ backgroundColor?: string
8
+ opacity?: string | number
9
+ }
10
+
11
+ export interface TypographyProps {
12
+ fontSize?: string | number
13
+ fontWeight?: string | number
14
+ fontStyle?: string
15
+ lineHeight?: string | number
16
+ textAlign?: string
17
+ textTransform?: string
18
+ textDecoration?: string
19
+ }
20
+
21
+ export interface SpacingProps {
22
+ margin?: string | number
23
+ marginX?: string | number
24
+ marginY?: string | number
25
+ marginTop?: string | number
26
+ marginRight?: string | number
27
+ marginBottom?: string | number
28
+ marginLeft?: string | number
29
+ padding?: string | number
30
+ paddingX?: string | number
31
+ paddingY?: string | number
32
+ paddingTop?: string | number
33
+ paddingRight?: string | number
34
+ paddingBottom?: string | number
35
+ paddingLeft?: string | number
36
+ }
37
+
38
+ export interface BorderProps {
39
+ border?: string
40
+ borderTop?: string
41
+ borderRight?: string
42
+ borderBottom?: string
43
+ borderLeft?: string
44
+ borderRadius?: string | number
45
+ borderWidth?: string | number
46
+ borderColor?: string
47
+ boxShadow?: string
48
+ }
49
+
50
+ export interface FlexboxProps {
51
+ flex?: string | number
52
+ alignItems?: string
53
+ alignSelf?: string
54
+ justifyContent?: string
55
+ flexDirection?: string
56
+ flexWrap?: string
57
+ whiteSpace?: string
58
+ }
59
+
60
+ export interface GridProps {
61
+ columnGap?: string | number
62
+ gridGap?: string | number
63
+ gridTemplateAreas?: string
64
+ gridTemplateRows?: string
65
+ gridTemplateColumns?: string
66
+ gridArea?: string | number
67
+ gridRow?: string | number
68
+ gridColumn?: string | number
69
+ }
70
+
71
+ export interface LayoutProps {
72
+ display?: string
73
+ size?: string | number
74
+ width?: string | number
75
+ minWidth?: string | number
76
+ maxWidth?: string | number
77
+ height?: string | number
78
+ minHeight?: string | number
79
+ maxHeight?: string | number
80
+ overflow?: CSSProperties['overflow']
81
+ overflowX?: CSSProperties['overflowX']
82
+ overflowY?: CSSProperties['overflowY']
83
+ wordSpacing?: string | number
84
+ cursor?: CSSProperties['cursor']
85
+ overflowWrap?: string
86
+ }
87
+
88
+ export interface PositionProps {
89
+ position?: string
90
+ zIndex?: string | number
91
+ top?: string | number
92
+ right?: string | number
93
+ bottom?: string | number
94
+ left?: string | number
95
+ transform?: string
96
+ filter?: string
97
+ transformOrigin?: CSSProperties['transformOrigin']
98
+ }
99
+
100
+ export interface TransitionProps {
101
+ transition?: string
102
+ }
103
+
104
+ export interface StyleProps
105
+ extends ColorProps,
106
+ TypographyProps,
107
+ SpacingProps,
108
+ BorderProps,
109
+ FlexboxProps,
110
+ GridProps,
111
+ LayoutProps,
112
+ PositionProps,
113
+ TransitionProps {
114
+ className?: string
115
+ }
116
+
117
+ export type PrimitiveComponent<
118
+ Instance extends keyof JSX.IntrinsicElements | React.ComponentType<any>,
119
+ Props extends StyleProps = StyleProps
120
+ > = StyledComponent<Instance, any, Props, any>
@@ -0,0 +1,4 @@
1
+ export type {
2
+ PipetteChannels as Channels,
3
+ PipetteMount as Mount,
4
+ } from '@opentrons/shared-data'
@@ -0,0 +1,73 @@
1
+ import cx from 'classnames'
2
+ import { Icon } from '../icons'
3
+ import styles from './styles.module.css'
4
+
5
+ // TODO(bc, 2021-03-29): this component is only used in PD
6
+ // reconsider whether it belongs in components library
7
+
8
+ export interface SlotMapProps {
9
+ /** Slot(s) to highlight */
10
+ occupiedSlots: string[]
11
+ /** Optional collision warning */
12
+ collisionSlots?: string[]
13
+ /** Optional error styling */
14
+ isError?: boolean
15
+ }
16
+
17
+ const OT2_SLOT_MAP_SLOTS = [
18
+ ['10', '11'],
19
+ ['7', '8', '9'],
20
+ ['4', '5', '6'],
21
+ ['1', '2', '3'],
22
+ ]
23
+
24
+ const slotWidth = 33
25
+ const slotHeight = 23
26
+ const iconSize = 20
27
+ const numRows = 4
28
+ const numCols = 3
29
+
30
+ export function OT2SlotMap(props: SlotMapProps): JSX.Element {
31
+ const { collisionSlots, occupiedSlots, isError } = props
32
+ const slots = OT2_SLOT_MAP_SLOTS
33
+ return (
34
+ <svg
35
+ viewBox={`-1,-1,${slotWidth * numCols + 2}, ${slotHeight * numRows + 2}`}
36
+ >
37
+ {slots.flatMap((row, rowIndex) =>
38
+ row.map((slot, colIndex) => {
39
+ const isCollisionSlot =
40
+ collisionSlots && collisionSlots.includes(slot)
41
+ const isOccupiedSlot = occupiedSlots.includes(slot)
42
+ return (
43
+ <g
44
+ key={slot}
45
+ transform={`translate(${colIndex * slotWidth} ${
46
+ rowIndex * slotHeight
47
+ })`}
48
+ >
49
+ <rect
50
+ className={cx(styles.slot_rect, {
51
+ [styles.slot_occupied]: isOccupiedSlot,
52
+ [styles.slot_error]: isError,
53
+ })}
54
+ width={slotWidth}
55
+ height={slotHeight}
56
+ />
57
+ {isCollisionSlot && (
58
+ <Icon
59
+ className={styles.collision_icon}
60
+ name="information"
61
+ svgWidth={iconSize}
62
+ svgHeight={iconSize}
63
+ x={slotWidth / 2 - iconSize / 2}
64
+ y={slotHeight / 2 - iconSize / 2}
65
+ />
66
+ )}
67
+ </g>
68
+ )
69
+ })
70
+ )}
71
+ </svg>
72
+ )
73
+ }
@@ -0,0 +1 @@
1
+ export * from './OT2SlotMap'
@@ -0,0 +1,28 @@
1
+ import type * as React from 'react'
2
+ import { Card as CardComponent } from './Card'
3
+ import { Box, Text, SIZE_4, SPACING_3 } from '@opentrons/components'
4
+
5
+ import type { Story, Meta } from '@storybook/react'
6
+
7
+ export default {
8
+ title: 'Library/Molecules/Card',
9
+ } as Meta
10
+
11
+ const Template: Story<React.ComponentProps<typeof CardComponent>> = args => (
12
+ <CardComponent {...args} />
13
+ )
14
+ export const Card = Template.bind({})
15
+ Card.args = {
16
+ title: 'Main Title Goes Here',
17
+ disabled: false,
18
+ children: (
19
+ <>
20
+ <Box size={SIZE_4} padding={SPACING_3}>
21
+ <Text>Some text contents</Text>
22
+ </Box>
23
+ <Box size={SIZE_4} padding={SPACING_3}>
24
+ <Text>Some more text contents</Text>
25
+ </Box>
26
+ </>
27
+ ),
28
+ }
@@ -0,0 +1,64 @@
1
+ // Card component with drop shadow
2
+
3
+ import type * as React from 'react'
4
+ import styled, { css } from 'styled-components'
5
+ import { isntStyleProp, styleProps } from '../primitives'
6
+ import * as styles from '../styles'
7
+
8
+ import type { StyleProps, PrimitiveComponent } from '../primitives'
9
+ export interface CardProps extends StyleProps {
10
+ /** Title for card, all cards should receive a title. */
11
+ title?: React.ReactNode
12
+ /** Card contents */
13
+ children?: React.ReactNode
14
+ /** If card can not be used, gray it out and remove pointer events */
15
+ disabled?: boolean
16
+ /** Additional class names */
17
+ className?: string
18
+ }
19
+
20
+ /**
21
+ * Renders a basic card element with a white background, dropshadow, and zero padding.
22
+ *
23
+ * Titles and other children handle their own styles and layout.
24
+ */
25
+ export function Card(props: CardProps): JSX.Element {
26
+ const { title, children, className, disabled, ...styleProps } = props
27
+
28
+ return (
29
+ <Section disabled={disabled} className={className} {...styleProps}>
30
+ {title && <Title className={className}>{title}</Title>}
31
+ {children}
32
+ </Section>
33
+ )
34
+ }
35
+
36
+ const Section: PrimitiveComponent<'section'> = styled.section.withConfig({
37
+ shouldForwardProp: isntStyleProp,
38
+ })`
39
+ font-size: ${styles.FONT_SIZE_BODY_2};
40
+ position: relative;
41
+ overflow: visible;
42
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.33);
43
+ ${({ disabled }) =>
44
+ disabled &&
45
+ css`
46
+ pointer-events: none;
47
+ background-color: transparent;
48
+
49
+ & * {
50
+ color: ${styles.C_FONT_DISABLED};
51
+ fill: ${styles.C_FONT_DISABLED};
52
+ background-color: transparent;
53
+ }
54
+ `}
55
+ ${styleProps}
56
+ `
57
+
58
+ const Title = styled.h3`
59
+ ${styles.FONT_HEADER_DARK}
60
+ font-weight: ${styles.FONT_WEIGHT_REGULAR};
61
+ margin: 0;
62
+ padding: ${styles.SPACING_3} ${styles.SPACING_3} 0;
63
+ text-transform: capitalize;
64
+ `
@@ -0,0 +1,17 @@
1
+ import type * as React from 'react'
2
+ import { LabeledValue as LabeledValueComponent } from './LabeledValue'
3
+
4
+ import type { Story, Meta } from '@storybook/react'
5
+
6
+ export default {
7
+ title: 'Library/Molecules/Labeled Value',
8
+ } as Meta
9
+
10
+ const Template: Story<
11
+ React.ComponentProps<typeof LabeledValueComponent>
12
+ > = args => <LabeledValueComponent {...args} />
13
+ export const LabeledValue = Template.bind({})
14
+ LabeledValue.args = {
15
+ label: 'Here is the label',
16
+ value: 'This is the value that needs a label',
17
+ }
@@ -0,0 +1,31 @@
1
+ // Card component with drop shadow
2
+
3
+ import type * as React from 'react'
4
+ import cx from 'classnames'
5
+
6
+ import styles from './structure.module.css'
7
+
8
+ export interface LabeledValueProps {
9
+ /** Label */
10
+ label: React.ReactNode
11
+ /** Value */
12
+ value: React.ReactNode
13
+ /** Additional className */
14
+ className?: string
15
+ /** Additional value className */
16
+ valueClassName?: string
17
+ }
18
+
19
+ export function LabeledValue(props: LabeledValueProps): JSX.Element {
20
+ const { label, value } = props
21
+ const className = cx(styles.labeled_value, props.className)
22
+
23
+ return (
24
+ <div className={className}>
25
+ <p className={styles.labeled_value_label}>{label}:</p>
26
+ <p className={cx(styles.labeled_value_value, props.valueClassName)}>
27
+ {value}
28
+ </p>
29
+ </div>
30
+ )
31
+ }
@@ -0,0 +1,43 @@
1
+ import type * as React from 'react'
2
+ import cx from 'classnames'
3
+
4
+ import styles from './Pill.module.css'
5
+
6
+ import type { UseHoverTooltipTargetProps } from '../tooltips'
7
+
8
+ // TODO(bc, 2021-03-29): this component is only used in PD
9
+ // reconsider whether it belongs in components library
10
+ // TODO(bc, 2021-03-05): can this color prop actually be null or undefined if not present?
11
+ // if no, then remove the cast to string
12
+ export interface PillProps {
13
+ /** background color of pill (any CSS color string) */
14
+ color?: string | null | undefined
15
+ /** text black, instead of default white */
16
+ invertTextColor?: boolean | null | undefined
17
+ /** additional class name */
18
+ className?: string
19
+ /** contents of the pill */
20
+ children?: React.ReactNode
21
+ /** handlers for HoverTooltipComponent */
22
+ hoverTooltipHandlers?: UseHoverTooltipTargetProps | null | undefined
23
+ }
24
+
25
+ /**
26
+ * Colored Pill containing text or other contents
27
+ */
28
+ export function Pill(props: PillProps): JSX.Element {
29
+ const className = cx(styles.pill, props.className, {
30
+ [styles.invert_text]: props.invertTextColor,
31
+ })
32
+ const { color, children, hoverTooltipHandlers } = props
33
+
34
+ return (
35
+ <span
36
+ style={{ backgroundColor: color as string }}
37
+ className={className}
38
+ {...hoverTooltipHandlers}
39
+ >
40
+ {children}
41
+ </span>
42
+ )
43
+ }