@opentrons/components 0.1.7-alpha.0 → 0.1.7-alpha.1

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 (432) hide show
  1. package/README.md +0 -1
  2. package/lib/assets/localization/en/index.d.ts +14 -0
  3. package/lib/assets/localization/index.d.ts +14 -0
  4. package/lib/atoms/Chip/index.d.ts +2 -0
  5. package/lib/atoms/InlineNotification/index.d.ts +18 -0
  6. package/lib/atoms/ListButton/index.d.ts +5 -0
  7. package/lib/atoms/ListItem/ListItemChildren/ListItemDescriptor.d.ts +4 -0
  8. package/lib/atoms/StyledText/StyledText.d.ts +1 -1
  9. package/lib/atoms/Tag/index.d.ts +4 -1
  10. package/lib/atoms/Toast/index.d.ts +1 -1
  11. package/lib/atoms/Tooltip/index.d.ts +1 -1
  12. package/lib/atoms/buttons/LargeButton.d.ts +1 -1
  13. package/lib/atoms/buttons/RadioButton.d.ts +29 -1
  14. package/lib/atoms/index.d.ts +3 -2
  15. package/lib/buttons/Button.d.ts +1 -1
  16. package/lib/controls/ToggleButton.d.ts +8 -2
  17. package/lib/controls/index.d.ts +0 -1
  18. package/lib/forms/DeprecatedCheckboxField.d.ts +1 -1
  19. package/lib/forms/SelectField.d.ts +1 -1
  20. package/lib/hardware-sim/BaseDeck/BaseDeck.d.ts +13 -1
  21. package/lib/hardware-sim/BaseDeck/WasteChuteFixture.d.ts +1 -1
  22. package/lib/hardware-sim/Deck/MoveLabwareOnDeck.d.ts +1 -1
  23. package/lib/hardware-sim/Deck/RobotWorkSpace.d.ts +1 -1
  24. package/lib/hardware-sim/Labware/Labware.d.ts +2 -2
  25. package/lib/hardware-sim/Labware/LabwareAdapter/index.d.ts +2 -2
  26. package/lib/hardware-sim/Labware/LabwareRender.d.ts +2 -2
  27. package/lib/hardware-sim/Labware/index.d.ts +0 -1
  28. package/lib/hardware-sim/Labware/labwareInternals/FilledWells.d.ts +1 -1
  29. package/lib/hardware-sim/Labware/labwareInternals/StaticLabware.d.ts +1 -1
  30. package/lib/hardware-sim/Labware/labwareInternals/StrokedWells.d.ts +1 -1
  31. package/lib/hardware-sim/Labware/labwareInternals/Well.d.ts +1 -1
  32. package/lib/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.d.ts +1 -0
  33. package/lib/hardware-sim/Module/FlexStacker.d.ts +1 -0
  34. package/lib/hardware-sim/Module/index.d.ts +1 -1
  35. package/lib/hardware-sim/index.d.ts +0 -2
  36. package/lib/helix-design-system/colors.d.ts +2 -1
  37. package/lib/hooks/useSwipe.d.ts +1 -1
  38. package/lib/icons/ModuleIcon.d.ts +1 -1
  39. package/lib/icons/NotificationIcon.d.ts +1 -1
  40. package/lib/instrument/InstrumentDiagram.d.ts +1 -1
  41. package/lib/instrument/index.d.ts +0 -1
  42. package/lib/legacy-hardware-sim/ModuleItem.d.ts +1 -1
  43. package/lib/molecules/Banner/index.d.ts +1 -1
  44. package/lib/molecules/DropdownMenu/index.d.ts +1 -1
  45. package/lib/molecules/LiquidIcon/index.d.ts +2 -2
  46. package/lib/organisms/CommandText/useCommandTextString/index.d.ts +2 -2
  47. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.d.ts +1 -0
  48. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.d.ts +1 -0
  49. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.d.ts +1 -1
  50. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.d.ts +6 -3
  51. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.d.ts +4 -0
  52. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.d.ts +1 -1
  53. package/lib/organisms/CommandText/useCommandTextString/utils/commandText/index.d.ts +2 -0
  54. package/lib/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.d.ts +1 -1
  55. package/lib/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.d.ts +1 -1
  56. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.d.ts +1 -1
  57. package/lib/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.d.ts +1 -1
  58. package/lib/organisms/DeckLabelSet/index.d.ts +1 -0
  59. package/lib/organisms/FixtureOption/__tests__/FixtureOption.test.d.ts +1 -0
  60. package/lib/organisms/FixtureOption/index.d.ts +10 -0
  61. package/lib/organisms/ProtocolTimelineScrubber/utils.d.ts +1 -1
  62. package/lib/organisms/index.d.ts +1 -0
  63. package/lib/primitives/ForeignObject.d.ts +1 -1
  64. package/lib/primitives/Link.d.ts +1 -1
  65. package/lib/primitives/Svg.d.ts +1 -1
  66. package/lib/primitives/style-props.d.ts +2 -2
  67. package/lib/primitives/types.d.ts +1 -1
  68. package/lib/testing/utils/renderWithProviders.d.ts +2 -2
  69. package/lib/tooltips/LegacyTooltip.d.ts +1 -1
  70. package/lib/tooltips/types.d.ts +2 -2
  71. package/package.json +2 -3
  72. package/src/Components.mdx +12 -0
  73. package/src/__tests__/utils.test.ts +2 -1
  74. package/src/alerts/AlertItem.stories.tsx +2 -2
  75. package/src/alerts/AlertItem.tsx +2 -1
  76. package/src/assets/localization/en/protocol_command_text.json +14 -0
  77. package/src/atoms/Checkbox/Checkbox.stories.tsx +1 -1
  78. package/src/atoms/Checkbox/__tests__/Checkbox.test.tsx +4 -2
  79. package/src/atoms/Checkbox/index.tsx +3 -2
  80. package/src/atoms/CheckboxField/CheckboxField.stories.tsx +3 -2
  81. package/src/atoms/CheckboxField/__tests__/CheckboxField.test.tsx +21 -35
  82. package/src/atoms/CheckboxField/index.tsx +81 -70
  83. package/src/atoms/Chip/Chip.stories.tsx +3 -2
  84. package/src/atoms/Chip/__tests__/Chip.test.tsx +41 -3
  85. package/src/atoms/Chip/index.tsx +76 -50
  86. package/src/atoms/InlineNotification/InlineNotification.stories.tsx +107 -0
  87. package/src/atoms/InlineNotification/__tests__/InlineNotification.test.tsx +66 -0
  88. package/src/atoms/InlineNotification/index.tsx +197 -0
  89. package/src/atoms/InputField/InputField.stories.tsx +3 -0
  90. package/src/atoms/InputField/__tests__/InputField.test.tsx +4 -3
  91. package/src/atoms/InputField/index.tsx +4 -4
  92. package/src/atoms/ListButton/ListButton.stories.tsx +4 -2
  93. package/src/atoms/ListButton/ListButtonChildren/ListButtonRadioButton.tsx +3 -2
  94. package/src/atoms/ListButton/__tests__/ListButton.test.tsx +5 -3
  95. package/src/atoms/ListButton/__tests__/ListButtonAccordion.test.tsx +2 -2
  96. package/src/atoms/ListButton/__tests__/ListButtonRadioButton.test.tsx +2 -2
  97. package/src/atoms/ListButton/index.tsx +57 -41
  98. package/src/atoms/ListItem/ListItem.stories.tsx +7 -5
  99. package/src/atoms/ListItem/ListItemChildren/ListItemCustomize.tsx +21 -15
  100. package/src/atoms/ListItem/ListItemChildren/ListItemDescriptor.tsx +4 -0
  101. package/src/atoms/ListItem/__tests__/ListItem.test.tsx +5 -3
  102. package/src/atoms/ListItem/index.tsx +3 -2
  103. package/src/atoms/ListTable/ListTable.stories.tsx +1 -1
  104. package/src/atoms/ListTable/__tests__/ListTable.test.tsx +2 -2
  105. package/src/atoms/ListTable/index.tsx +4 -4
  106. package/src/atoms/MenuList/MenuItem.stories.tsx +1 -1
  107. package/src/atoms/MenuList/MenuItem.tsx +4 -1
  108. package/src/atoms/MenuList/MenuList.stories.tsx +1 -0
  109. package/src/atoms/MenuList/OverflowBtn.tsx +1 -1
  110. package/src/atoms/MenuList/__tests__/MenuItem.test.tsx +2 -3
  111. package/src/atoms/MenuList/__tests__/MenuList.test.tsx +2 -2
  112. package/src/atoms/MenuList/__tests__/OverflowBtn.test.tsx +1 -1
  113. package/src/atoms/MenuList/index.tsx +2 -2
  114. package/src/atoms/Snackbar/Snackbar.stories.tsx +4 -2
  115. package/src/atoms/Snackbar/__tests__/Snackbar.test.tsx +6 -3
  116. package/src/atoms/Snackbar/index.tsx +3 -2
  117. package/src/atoms/StepMeter/__tests__/StepMeter.test.tsx +45 -0
  118. package/src/atoms/StepMeter/index.tsx +33 -24
  119. package/src/atoms/StyledText/LegacyStyledText.stories.tsx +2 -1
  120. package/src/atoms/StyledText/LegacyStyledText.tsx +3 -2
  121. package/src/atoms/StyledText/StyledText.stories.tsx +3 -2
  122. package/src/atoms/StyledText/StyledText.tsx +4 -3
  123. package/src/atoms/SubListTable/SubListTable.stories.tsx +1 -1
  124. package/src/atoms/SubListTable/__tests__/SubListTable.test.tsx +2 -2
  125. package/src/atoms/SubListTable/index.tsx +4 -4
  126. package/src/atoms/Tag/Tag.stories.tsx +2 -1
  127. package/src/atoms/Tag/__tests__/Tag.test.tsx +2 -1
  128. package/src/atoms/Tag/index.tsx +53 -35
  129. package/src/atoms/Toast/ODDToast.stories.tsx +18 -8
  130. package/src/atoms/Toast/Toast.stories.tsx +3 -2
  131. package/src/atoms/Toast/__tests__/ODDToast.test.tsx +5 -2
  132. package/src/atoms/Toast/__tests__/Toast.test.tsx +5 -2
  133. package/src/atoms/Toast/index.tsx +75 -80
  134. package/src/atoms/ToggleGroup/ToggleGroup.stories.tsx +2 -0
  135. package/src/atoms/ToggleGroup/__tests__/ToggleGroup.test.tsx +2 -1
  136. package/src/atoms/ToggleGroup/index.tsx +2 -1
  137. package/src/atoms/Tooltip/Tooltip.stories.tsx +6 -5
  138. package/src/atoms/Tooltip/__tests__/Tooltip.test.tsx +6 -5
  139. package/src/atoms/Tooltip/index.tsx +3 -3
  140. package/src/atoms/buttons/AlertPrimaryButton.tsx +2 -1
  141. package/src/atoms/buttons/AltPrimaryButton.tsx +1 -1
  142. package/src/atoms/buttons/EmptySelectorButton.stories.tsx +1 -0
  143. package/src/atoms/buttons/EmptySelectorButton.tsx +10 -3
  144. package/src/atoms/buttons/LargeButton.stories.tsx +2 -2
  145. package/src/atoms/buttons/LargeButton.tsx +5 -5
  146. package/src/atoms/buttons/PrimaryButton.tsx +7 -3
  147. package/src/atoms/buttons/RadioButton.stories.tsx +2 -1
  148. package/src/atoms/buttons/RadioButton.tsx +102 -43
  149. package/src/atoms/buttons/SecondaryButton.tsx +13 -7
  150. package/src/atoms/buttons/TertiaryButton.tsx +1 -0
  151. package/src/atoms/buttons/__tests__/AlertPrimaryButton.test.tsx +5 -4
  152. package/src/atoms/buttons/__tests__/AltPrimaryButton.test.tsx +6 -4
  153. package/src/atoms/buttons/__tests__/EmptySelectorButton.test.tsx +4 -2
  154. package/src/atoms/buttons/__tests__/LargeButton.test.tsx +4 -2
  155. package/src/atoms/buttons/__tests__/PrimaryButton.test.tsx +7 -5
  156. package/src/atoms/buttons/__tests__/RadioButton.test.tsx +17 -3
  157. package/src/atoms/buttons/__tests__/SecondaryButton.test.tsx +6 -5
  158. package/src/atoms/buttons/buttons.stories.tsx +6 -6
  159. package/src/atoms/index.ts +3 -2
  160. package/src/buttons/Button.tsx +2 -3
  161. package/src/buttons/IconButton.tsx +1 -2
  162. package/src/controls/LabeledRadioGroup.tsx +1 -1
  163. package/src/controls/ToggleButton.tsx +62 -18
  164. package/src/controls/index.ts +0 -1
  165. package/src/forms/DeprecatedCheckboxField.stories.tsx +1 -1
  166. package/src/forms/DeprecatedCheckboxField.tsx +3 -3
  167. package/src/forms/FormGroup.stories.tsx +3 -4
  168. package/src/forms/FormGroup.tsx +1 -0
  169. package/src/forms/InputField.stories.tsx +2 -1
  170. package/src/forms/LegacyInputField.tsx +1 -0
  171. package/src/forms/RadioGroup.stories.tsx +2 -1
  172. package/src/forms/RadioGroup.tsx +1 -0
  173. package/src/forms/Select.stories.tsx +2 -3
  174. package/src/forms/Select.tsx +3 -3
  175. package/src/forms/SelectField.tsx +1 -1
  176. package/src/forms/ToggleField.stories.tsx +1 -1
  177. package/src/forms/ToggleField.tsx +2 -2
  178. package/src/hardware-sim/BaseDeck/BaseDeck.stories.tsx +1 -1
  179. package/src/hardware-sim/BaseDeck/BaseDeck.tsx +121 -21
  180. package/src/hardware-sim/BaseDeck/WasteChuteFixture.tsx +5 -5
  181. package/src/hardware-sim/BaseDeck/__fixtures__/index.ts +2 -2
  182. package/src/hardware-sim/Deck/DeckFromLayers.tsx +6 -5
  183. package/src/hardware-sim/Deck/FlexTrash.tsx +2 -1
  184. package/src/hardware-sim/Deck/MoveLabwareOnDeck.stories.tsx +4 -3
  185. package/src/hardware-sim/Deck/MoveLabwareOnDeck.tsx +12 -12
  186. package/src/hardware-sim/Deck/RobotCoordsForeignObject.tsx +1 -0
  187. package/src/hardware-sim/Deck/RobotWorkSpace.tsx +3 -1
  188. package/src/hardware-sim/Deck/SlotLabels.tsx +2 -0
  189. package/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx +2 -2
  190. package/src/hardware-sim/DeckConfigurator/DeckConfigurator.stories.tsx +2 -3
  191. package/src/hardware-sim/DeckConfigurator/EmptyConfigFixture.tsx +4 -3
  192. package/src/hardware-sim/DeckConfigurator/FlexStackerFixture.tsx +2 -2
  193. package/src/hardware-sim/DeckConfigurator/HeaterShakerFixture.tsx +3 -3
  194. package/src/hardware-sim/DeckConfigurator/MagneticBlockFixture.tsx +6 -6
  195. package/src/hardware-sim/DeckConfigurator/StagingAreaConfigFixture.tsx +1 -1
  196. package/src/hardware-sim/DeckConfigurator/StaticFixture.tsx +2 -2
  197. package/src/hardware-sim/DeckConfigurator/TemperatureModuleFixture.tsx +3 -3
  198. package/src/hardware-sim/DeckConfigurator/ThermocyclerFixture.tsx +4 -4
  199. package/src/hardware-sim/DeckConfigurator/TrashBinConfigFixture.tsx +3 -3
  200. package/src/hardware-sim/DeckConfigurator/WasteChuteConfigFixture.tsx +3 -3
  201. package/src/hardware-sim/DeckConfigurator/index.tsx +29 -16
  202. package/src/hardware-sim/Labware/Labware.tsx +5 -7
  203. package/src/hardware-sim/Labware/LabwareAdapter/index.tsx +5 -4
  204. package/src/hardware-sim/Labware/LabwareRender.stories.tsx +4 -5
  205. package/src/hardware-sim/Labware/LabwareRender.tsx +8 -9
  206. package/src/hardware-sim/Labware/__tests__/Labware.test.tsx +6 -2
  207. package/src/hardware-sim/Labware/__tests__/LabwareRender.test.tsx +6 -2
  208. package/src/hardware-sim/Labware/index.ts +0 -1
  209. package/src/hardware-sim/Labware/labwareInternals/FilledWells.tsx +2 -1
  210. package/src/hardware-sim/Labware/labwareInternals/LabwareOutline.tsx +9 -4
  211. package/src/hardware-sim/Labware/labwareInternals/LabwareWellLabels.tsx +2 -1
  212. package/src/hardware-sim/Labware/labwareInternals/StaticLabware.tsx +5 -5
  213. package/src/hardware-sim/Labware/labwareInternals/StrokedWells.tsx +3 -2
  214. package/src/hardware-sim/Labware/labwareInternals/StyledWells.tsx +2 -1
  215. package/src/hardware-sim/Labware/labwareInternals/Well.tsx +5 -2
  216. package/src/hardware-sim/Labware/labwareInternals/WellLabels.tsx +2 -1
  217. package/src/hardware-sim/Labware/labwareInternals/__tests__/LabwareWellLabels.test.tsx +4 -1
  218. package/src/hardware-sim/Labware/labwareInternals/__tests__/StrokedWells.test.tsx +5 -1
  219. package/src/hardware-sim/Labware/labwareInternals/__tests__/WellLabels.test.tsx +6 -2
  220. package/src/hardware-sim/Labware/labwareInternals/getTiprackBackgroundColor.ts +32 -0
  221. package/src/hardware-sim/Module/FlexStacker.tsx +54 -0
  222. package/src/hardware-sim/Module/Module.stories.tsx +4 -3
  223. package/src/hardware-sim/Module/ModuleTag.tsx +3 -3
  224. package/src/hardware-sim/Module/Thermocycler/ThermocyclerGEN1.tsx +1 -0
  225. package/src/hardware-sim/Module/Thermocycler/index.tsx +3 -3
  226. package/src/hardware-sim/Module/index.tsx +14 -7
  227. package/src/hardware-sim/Pipette/EightEmanatingNozzles.tsx +1 -0
  228. package/src/hardware-sim/Pipette/EmanatingNozzle.tsx +2 -1
  229. package/src/hardware-sim/Pipette/PipetteRender.stories.tsx +4 -2
  230. package/src/hardware-sim/Pipette/PipetteRender.tsx +7 -5
  231. package/src/hardware-sim/Pipette/__tests__/EightEmanatingNozzles.test.tsx +2 -1
  232. package/src/hardware-sim/Pipette/__tests__/EmanatingNozzle.test.tsx +4 -3
  233. package/src/hardware-sim/Pipette/__tests__/PipetteRender.test.tsx +9 -7
  234. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpace.tsx +2 -1
  235. package/src/hardware-sim/RobotCoordinateSpace/RobotCoordinateSpaceWithRef.tsx +1 -0
  236. package/src/hardware-sim/index.ts +0 -2
  237. package/src/helix-design-system/colors.ts +2 -1
  238. package/src/hooks/__tests__/useDrag.test.ts +3 -1
  239. package/src/hooks/__tests__/useLongPress.test.ts +2 -1
  240. package/src/hooks/__tests__/useScrolling.test.tsx +3 -2
  241. package/src/hooks/__tests__/useSwipe.test.tsx +2 -1
  242. package/src/hooks/useDrag.ts +2 -1
  243. package/src/hooks/useInterval.ts +1 -0
  244. package/src/hooks/useLongPress.ts +2 -1
  245. package/src/hooks/useMenuHandleClickOutside.tsx +1 -0
  246. package/src/hooks/useMountEffect.ts +2 -0
  247. package/src/hooks/useScrolling.ts +1 -1
  248. package/src/hooks/useSelectDeckLocation/SelectDeckLocation.stories.tsx +3 -1
  249. package/src/hooks/useSelectDeckLocation/index.tsx +8 -6
  250. package/src/hooks/useSwipe.ts +3 -2
  251. package/src/i18n.ts +4 -2
  252. package/src/icons/Icon.stories.tsx +2 -1
  253. package/src/icons/Icon.tsx +1 -1
  254. package/src/icons/IconList.stories.tsx +9 -8
  255. package/src/icons/ModuleIcon.tsx +8 -7
  256. package/src/icons/NotificationIcon.tsx +1 -1
  257. package/src/icons/icon-data.ts +5 -0
  258. package/src/instrument/InstrumentDiagram.stories.tsx +3 -2
  259. package/src/instrument/InstrumentDiagram.tsx +9 -8
  260. package/src/instrument/InstrumentGroup.stories.tsx +4 -3
  261. package/src/instrument/InstrumentGroup.tsx +1 -1
  262. package/src/instrument/InstrumentInfo.tsx +4 -4
  263. package/src/instrument/__tests__/InstrumentInfo.test.tsx +5 -3
  264. package/src/instrument/index.ts +0 -1
  265. package/src/interaction-enhancers/ClickOutside.ts +1 -0
  266. package/src/interaction-enhancers/HandleKeypress.tsx +1 -0
  267. package/src/interaction-enhancers/__tests__/useHover.test.tsx +1 -0
  268. package/src/interaction-enhancers/useHover.ts +1 -1
  269. package/src/legacy-hardware-sim/LabwareNameOverlay.tsx +1 -0
  270. package/src/legacy-hardware-sim/ModuleItem.tsx +2 -2
  271. package/src/lists/SidePanelGroup.tsx +1 -1
  272. package/src/lists/TitledList.tsx +2 -3
  273. package/src/modals/LegacyModal.tsx +2 -2
  274. package/src/modals/Modal.stories.tsx +1 -1
  275. package/src/modals/Modal.tsx +1 -1
  276. package/src/modals/ModalHeader.tsx +2 -2
  277. package/src/modals/ModalShell.tsx +3 -2
  278. package/src/modals/SpinnerModal.tsx +2 -2
  279. package/src/modals/SpinnerModalPage.tsx +1 -1
  280. package/src/modals/__tests__/Modal.test.tsx +4 -2
  281. package/src/modals/__tests__/ModalHeader.test.tsx +5 -3
  282. package/src/modals/__tests__/ModalShell.test.tsx +3 -1
  283. package/src/molecules/Banner/Banner.stories.tsx +1 -1
  284. package/src/molecules/Banner/__tests__/Banner.test.tsx +2 -2
  285. package/src/molecules/Banner/index.tsx +5 -4
  286. package/src/molecules/DeckInfoLabel/DeckInfoLabel.stories.tsx +1 -1
  287. package/src/molecules/DeckInfoLabel/__tests__/DeckInfoLabel.test.tsx +4 -4
  288. package/src/molecules/DeckLabel/__tests__/DeckLabel.test.tsx +3 -3
  289. package/src/molecules/DeckLabel/index.tsx +5 -3
  290. package/src/molecules/DropdownMenu/__tests__/DropdownMenu.test.tsx +3 -3
  291. package/src/molecules/DropdownMenu/index.tsx +5 -2
  292. package/src/molecules/InfoScreen/InfoScreen.stories.tsx +2 -1
  293. package/src/molecules/InfoScreen/__tests__/InfoScreen.test.tsx +3 -3
  294. package/src/molecules/InfoScreen/index.tsx +2 -2
  295. package/src/molecules/LiquidIcon/LiquidIcon.stories.tsx +3 -2
  296. package/src/molecules/LiquidIcon/__tests__/LiquidIcon.test.tsx +4 -4
  297. package/src/molecules/LiquidIcon/index.tsx +16 -10
  298. package/src/molecules/ListAccordion/ListAccordion.stories.tsx +3 -3
  299. package/src/molecules/ListAccordion/__tests__/ListAccordion.test.tsx +3 -3
  300. package/src/molecules/ListAccordion/index.tsx +6 -6
  301. package/src/molecules/ParametersTable/ParametersTable.stories.tsx +1 -0
  302. package/src/molecules/ParametersTable/__tests__/ParametersTable.test.tsx +3 -2
  303. package/src/molecules/ParametersTable/index.tsx +9 -7
  304. package/src/molecules/ReleaseNotes/index.tsx +1 -1
  305. package/src/molecules/Tabs/Tabs.stories.tsx +3 -1
  306. package/src/molecules/Tabs/__tests__/Tabs.test.tsx +3 -2
  307. package/src/molecules/Tabs/index.tsx +4 -3
  308. package/src/molecules/TextListTableContent/TextListTableContent.stories.tsx +1 -1
  309. package/src/molecules/TextListTableContent/__tests__/TextListTableContent.test.tsx +2 -2
  310. package/src/molecules/TextListTableContent/index.tsx +2 -2
  311. package/src/nav/SidePanel.stories.tsx +4 -3
  312. package/src/organisms/CommandText/CommandText.stories.tsx +3 -2
  313. package/src/organisms/CommandText/__tests__/CommandText.test.tsx +7 -6
  314. package/src/organisms/CommandText/fixtures/index.ts +1 -0
  315. package/src/organisms/CommandText/index.tsx +4 -2
  316. package/src/organisms/CommandText/useCommandTextString/index.ts +28 -5
  317. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/formatDuration.test.tsx +2 -1
  318. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getFinalLabwareLocation.test.ts +4 -1
  319. package/src/organisms/CommandText/useCommandTextString/utils/__tests__/getLabwareDisplayLocation.test.tsx +6 -5
  320. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getFlexStackerCommandText.test.tsx +179 -0
  321. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getPipettingCommandText.test.tsx +10 -9
  322. package/src/organisms/CommandText/useCommandTextString/utils/commandText/__tests__/getRobotCommandText.test.tsx +118 -0
  323. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getAbsorbanceReaderCommandText.ts +1 -1
  324. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getFlexStackerCommandText.ts +142 -6
  325. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLiquidProbeCommandText.ts +1 -0
  326. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getLoadCommandText.ts +4 -3
  327. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getPipettingCommandText.ts +5 -4
  328. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getRobotCommandText.ts +87 -0
  329. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunExtendedProfileCommandText.ts +3 -2
  330. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTCRunProfileCommandText.ts +1 -0
  331. package/src/organisms/CommandText/useCommandTextString/utils/commandText/getTemperatureCommandText.ts +4 -4
  332. package/src/organisms/CommandText/useCommandTextString/utils/commandText/index.ts +2 -0
  333. package/src/organisms/CommandText/useCommandTextString/utils/formatDuration.ts +2 -0
  334. package/src/organisms/CommandText/useCommandTextString/utils/getAddressableAreaDisplayName.ts +1 -1
  335. package/src/organisms/CommandText/useCommandTextString/utils/getFinalAddressableAreaCmd.ts +2 -0
  336. package/src/organisms/CommandText/useCommandTextString/utils/getFinalLabwareLocation.ts +2 -2
  337. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDefinitionsFromCommands.ts +1 -1
  338. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareDisplayLocation.tsx +38 -15
  339. package/src/organisms/CommandText/useCommandTextString/utils/getLabwareLocation.tsx +18 -9
  340. package/src/organisms/CommandText/useCommandTextString/utils/getModuleDisplayLocation.ts +1 -0
  341. package/src/organisms/CommandText/useCommandTextString/utils/getModuleModel.ts +1 -0
  342. package/src/organisms/CommandText/useCommandTextString/utils/getWellRange.ts +2 -1
  343. package/src/organisms/DeckLabelSet/DeckLabelSet.stories.tsx +1 -2
  344. package/src/organisms/DeckLabelSet/__tests__/DeckLabelSet.test.tsx +3 -3
  345. package/src/organisms/DeckLabelSet/index.tsx +55 -22
  346. package/src/organisms/FixtureOption/__tests__/FixtureOption.test.tsx +42 -0
  347. package/src/organisms/FixtureOption/index.tsx +92 -0
  348. package/src/organisms/ProtocolTimelineScrubber/CommandItem.tsx +6 -4
  349. package/src/organisms/ProtocolTimelineScrubber/PipetteVisuals.tsx +4 -2
  350. package/src/organisms/ProtocolTimelineScrubber/index.tsx +22 -45
  351. package/src/organisms/ProtocolTimelineScrubber/utils.ts +6 -3
  352. package/src/organisms/Toolbox/Toolbox.stories.tsx +1 -0
  353. package/src/organisms/Toolbox/__tests__/Toolbox.test.tsx +2 -1
  354. package/src/organisms/Toolbox/index.tsx +3 -2
  355. package/src/organisms/index.ts +1 -0
  356. package/src/primitives/Box.stories.tsx +1 -1
  357. package/src/primitives/Box.tsx +1 -1
  358. package/src/primitives/Btn.stories.tsx +8 -8
  359. package/src/primitives/Btn.tsx +2 -3
  360. package/src/primitives/Flex.stories.tsx +3 -3
  361. package/src/primitives/Flex.tsx +1 -1
  362. package/src/primitives/ForeignObject.tsx +2 -2
  363. package/src/primitives/Link.tsx +2 -2
  364. package/src/primitives/README.md +7 -16
  365. package/src/primitives/Svg.stories.tsx +2 -2
  366. package/src/primitives/Svg.tsx +2 -2
  367. package/src/primitives/Text.stories.tsx +2 -2
  368. package/src/primitives/Text.tsx +1 -1
  369. package/src/primitives/__tests__/Box.test.tsx +1 -0
  370. package/src/primitives/__tests__/Btn.test.tsx +1 -0
  371. package/src/primitives/__tests__/Flex.test.tsx +1 -0
  372. package/src/primitives/__tests__/Link.test.tsx +1 -0
  373. package/src/primitives/__tests__/Svg.test.tsx +1 -0
  374. package/src/primitives/__tests__/Text.test.tsx +1 -0
  375. package/src/primitives/__tests__/primitives.test.tsx +1 -0
  376. package/src/primitives/__tests__/style-props.test.tsx +1 -0
  377. package/src/primitives/style-props.ts +1 -2
  378. package/src/primitives/types.ts +1 -1
  379. package/src/slotmap/OT2SlotMap.tsx +1 -0
  380. package/src/slotmap/__tests__/OT2SlotMap.test.tsx +1 -0
  381. package/src/structure/Card.stories.tsx +4 -3
  382. package/src/structure/Card.tsx +3 -1
  383. package/src/structure/LabeledValue.stories.tsx +2 -2
  384. package/src/structure/Splash.stories.tsx +4 -3
  385. package/src/structure/TitleBar.stories.tsx +4 -3
  386. package/src/testing/utils/matchers.ts +1 -0
  387. package/src/testing/utils/renderWithProviders.tsx +4 -4
  388. package/src/tooltips/DeprecatedTooltip.tsx +2 -1
  389. package/src/tooltips/LegacyTooltip.stories.tsx +10 -9
  390. package/src/tooltips/LegacyTooltip.tsx +5 -5
  391. package/src/tooltips/__tests__/Tooltip.test.tsx +1 -0
  392. package/src/tooltips/__tests__/useHoverTooltip.test.tsx +1 -0
  393. package/src/tooltips/__tests__/usePopper.test.tsx +1 -0
  394. package/src/tooltips/__tests__/useTooltip.test.tsx +1 -0
  395. package/src/tooltips/types.ts +2 -4
  396. package/src/tooltips/usePopper.ts +4 -4
  397. package/src/tooltips/useTooltip.ts +4 -3
  398. package/src/ui-style-constants/typography.ts +1 -0
  399. package/vite.config.mts +5 -1
  400. package/lib/controls/LabeledToggle.d.ts +0 -11
  401. package/lib/hardware-sim/Labware/LabwareStackRender.d.ts +0 -20
  402. package/lib/hardware-sim/ProtocolDeck/LabwareInfo.d.ts +0 -6
  403. package/lib/hardware-sim/ProtocolDeck/index.d.ts +0 -11
  404. package/lib/hardware-sim/ProtocolDeck/types.d.ts +0 -8
  405. package/lib/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.d.ts +0 -5
  406. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.d.ts +0 -12
  407. package/lib/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.d.ts +0 -3
  408. package/lib/hardware-sim/ProtocolDeck/utils/getModulesInSlots.d.ts +0 -10
  409. package/lib/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.d.ts +0 -2
  410. package/lib/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.d.ts +0 -4
  411. package/lib/hardware-sim/ProtocolDeck/utils/index.d.ts +0 -4
  412. package/lib/instrument/PipetteSelect.d.ts +0 -20
  413. package/src/controls/LabeledToggle.tsx +0 -35
  414. package/src/hardware-sim/Labware/LabwareStackRender.tsx +0 -273
  415. package/src/hardware-sim/ProtocolDeck/LabwareInfo.tsx +0 -69
  416. package/src/hardware-sim/ProtocolDeck/ProtocolDeck.stories.tsx +0 -25
  417. package/src/hardware-sim/ProtocolDeck/__fixtures__/analysis_QIAseqFX24xv4_8.json +0 -47145
  418. package/src/hardware-sim/ProtocolDeck/index.tsx +0 -85
  419. package/src/hardware-sim/ProtocolDeck/types.ts +0 -6
  420. package/src/hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.ts +0 -158
  421. package/src/hardware-sim/ProtocolDeck/utils/getInitiallyLoadedLabwareByAdapter.ts +0 -33
  422. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInSlots.ts +0 -321
  423. package/src/hardware-sim/ProtocolDeck/utils/getLabwareInfoByLiquidId.ts +0 -43
  424. package/src/hardware-sim/ProtocolDeck/utils/getModulesInSlots.ts +0 -129
  425. package/src/hardware-sim/ProtocolDeck/utils/getStandardDeckViewLayerBlockList.ts +0 -29
  426. package/src/hardware-sim/ProtocolDeck/utils/getWellFillFromLabwareId.ts +0 -30
  427. package/src/hardware-sim/ProtocolDeck/utils/index.ts +0 -4
  428. package/src/instrument/PipetteSelect.stories.tsx +0 -40
  429. package/src/instrument/PipetteSelect.tsx +0 -170
  430. package/src/instrument/__tests__/PipetteSelect.test.tsx +0 -4
  431. /package/lib/{hardware-sim/ProtocolDeck/utils/__tests__/getLabwareInforByLiquidId.test.d.ts → atoms/InlineNotification/__tests__/InlineNotification.test.d.ts} +0 -0
  432. /package/lib/{instrument/__tests__/PipetteSelect.test.d.ts → atoms/StepMeter/__tests__/StepMeter.test.d.ts} +0 -0
@@ -1,9 +1,10 @@
1
- import { describe, it, expect, beforeEach } from 'vitest'
2
1
  import { screen } from '@testing-library/react'
2
+ import { beforeEach, describe, expect, it } from 'vitest'
3
+
4
+ import { Chip } from '..'
3
5
  import { BORDERS, COLORS } from '../../../helix-design-system'
4
- import { SPACING } from '../../../ui-style-constants'
5
6
  import { renderWithProviders } from '../../../testing/utils'
6
- import { Chip } from '..'
7
+ import { SPACING } from '../../../ui-style-constants'
7
8
 
8
9
  import type { ComponentProps } from 'react'
9
10
 
@@ -212,6 +213,24 @@ describe('Chip Touchscreen', () => {
212
213
  // const icon = screen.getByLabelText('icon_mockInfo')
213
214
  // expect(icon).toHaveStyle(`width: 1.25rem`)
214
215
  // })
216
+ it('renders a pulsing icon when pulseIcon is true', () => {
217
+ props = { text: 'mockPulse', type: 'info', pulseIcon: true }
218
+ render(props)
219
+ const animate = screen.getByTestId('Chip_info_icon_animate')
220
+ expect(animate).toHaveAttribute('attributeName', 'fill')
221
+ expect(animate).toHaveAttribute('values', `${COLORS.blue60}; transparent`)
222
+ expect(animate).toHaveAttribute('dur', '1s')
223
+ expect(animate).toHaveAttribute('calcMode', 'discrete')
224
+ expect(animate).toHaveAttribute('repeatCount', 'indefinite')
225
+ })
226
+
227
+ it('does not render a pulsing icon when pulseIcon is false', () => {
228
+ props = { text: 'mockNoPulse', type: 'info', pulseIcon: false }
229
+ render(props)
230
+ expect(
231
+ screen.queryByTestId('Chip_info_icon_animate')
232
+ ).not.toBeInTheDocument()
233
+ })
215
234
  })
216
235
 
217
236
  describe('Chip Web', () => {
@@ -427,4 +446,23 @@ describe('Chip Web', () => {
427
446
  const icon = screen.getByLabelText('icon_mockInfo')
428
447
  expect(icon).toHaveStyle(`width: 0.75rem`)
429
448
  })
449
+
450
+ it('renders a pulsing icon when pulseIcon is true', () => {
451
+ props = { text: 'mockPulse', type: 'success', pulseIcon: true }
452
+ render(props)
453
+ const animate = screen.getByTestId('Chip_success_icon_animate')
454
+ expect(animate).toHaveAttribute('attributeName', 'fill')
455
+ expect(animate).toHaveAttribute('values', `${COLORS.green60}; transparent`)
456
+ expect(animate).toHaveAttribute('dur', '1s')
457
+ expect(animate).toHaveAttribute('calcMode', 'discrete')
458
+ expect(animate).toHaveAttribute('repeatCount', 'indefinite')
459
+ })
460
+
461
+ it('does not render a pulsing icon when pulseIcon is false', () => {
462
+ props = { text: 'mockNoPulse', type: 'success', pulseIcon: false }
463
+ render(props)
464
+ expect(
465
+ screen.queryByTestId('Chip_success_icon_animate')
466
+ ).not.toBeInTheDocument()
467
+ })
430
468
  })
@@ -1,11 +1,13 @@
1
1
  import { css } from 'styled-components'
2
+
2
3
  import { BORDERS, COLORS } from '../../helix-design-system'
4
+ import { Icon } from '../../icons'
3
5
  import { Flex } from '../../primitives'
4
- import { LegacyStyledText } from '../StyledText'
5
6
  import { ALIGN_CENTER, DIRECTION_ROW, FLEX_MAX_CONTENT } from '../../styles'
6
7
  import { RESPONSIVENESS, SPACING, TYPOGRAPHY } from '../../ui-style-constants'
7
- import { Icon } from '../../icons'
8
+ import { LegacyStyledText } from '../StyledText'
8
9
 
10
+ import type { FlattenSimpleInterpolation } from 'styled-components'
9
11
  import type { IconName } from '../../icons'
10
12
  import type { StyleProps } from '../../primitives'
11
13
 
@@ -26,6 +28,8 @@ interface ChipProps extends StyleProps {
26
28
  hasIcon?: boolean
27
29
  /** Chip size medium is the default size */
28
30
  chipSize?: ChipSize
31
+ /** icon should pulse */
32
+ pulseIcon?: boolean
29
33
  }
30
34
 
31
35
  const CHIP_PROPS_BY_TYPE: Record<
@@ -79,6 +83,7 @@ export function Chip(props: ChipProps): JSX.Element {
79
83
  text,
80
84
  hasIcon = true,
81
85
  chipSize = 'medium',
86
+ pulseIcon = false,
82
87
  ...styleProps
83
88
  } = props
84
89
  const backgroundColor =
@@ -86,48 +91,9 @@ export function Chip(props: ChipProps): JSX.Element {
86
91
  ? COLORS.transparent
87
92
  : CHIP_PROPS_BY_TYPE[type].backgroundColor
88
93
  const icon = iconName ?? CHIP_PROPS_BY_TYPE[type].iconName ?? 'ot-alert'
94
+ const iconColor = CHIP_PROPS_BY_TYPE[type].iconColor
89
95
 
90
- const MEDIUM_CONTAINER_STYLE = css`
91
- padding: ${SPACING.spacing2} ${background === false ? 0 : SPACING.spacing8};
92
- grid-gap: ${SPACING.spacing4};
93
-
94
- @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
95
- padding: ${SPACING.spacing8}
96
- ${background === false ? 0 : SPACING.spacing16};
97
- grid-gap: ${SPACING.spacing8};
98
- }
99
- `
100
-
101
- const SMALL_CONTAINER_STYLE = css`
102
- padding: ${SPACING.spacing4} ${background === false ? 0 : SPACING.spacing6};
103
- grid-gap: ${SPACING.spacing4};
104
-
105
- @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
106
- padding: ${SPACING.spacing4}
107
- ${background === false ? 0 : SPACING.spacing8};
108
- grid-gap: ${SPACING.spacing4};
109
- }
110
- `
111
-
112
- const ICON_STYLE = css`
113
- width: ${chipSize === 'medium' ? '1rem' : '0.75rem'};
114
- height: ${chipSize === 'medium' ? '1rem' : '0.75rem'};
115
-
116
- @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
117
- width: ${chipSize === 'medium' ? '1.5rem' : '1.25rem'};
118
- height: ${chipSize === 'medium' ? '1.5rem' : '1.25rem'};
119
- }
120
- `
121
-
122
- const TEXT_STYLE = css`
123
- ${chipSize === 'medium' ? WEB_MEDIUM_TEXT_STYLE : WEB_SMALL_TEXT_STYLE}
124
-
125
- @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
126
- ${chipSize === 'medium'
127
- ? TYPOGRAPHY.bodyTextSemiBold
128
- : TYPOGRAPHY.smallBodyTextSemiBold}
129
- }
130
- `
96
+ const smallSize = iconName === 'connection-status' ? '0.5rem' : '0.75rem'
131
97
 
132
98
  return (
133
99
  <Flex
@@ -137,7 +103,9 @@ export function Chip(props: ChipProps): JSX.Element {
137
103
  flexDirection={DIRECTION_ROW}
138
104
  height={FLEX_MAX_CONTENT}
139
105
  css={
140
- chipSize === 'medium' ? MEDIUM_CONTAINER_STYLE : SMALL_CONTAINER_STYLE
106
+ chipSize === 'medium'
107
+ ? MEDIUM_CONTAINER_STYLE(background)
108
+ : SMALL_CONTAINER_STYLE(background)
141
109
  }
142
110
  data-testid={`Chip_${type}`}
143
111
  {...styleProps}
@@ -145,13 +113,24 @@ export function Chip(props: ChipProps): JSX.Element {
145
113
  {hasIcon ? (
146
114
  <Icon
147
115
  name={icon}
148
- color={CHIP_PROPS_BY_TYPE[type].iconColor}
116
+ color={iconColor}
149
117
  aria-label={`icon_${text}`}
150
- css={ICON_STYLE}
151
- />
118
+ css={ICON_STYLE(chipSize, smallSize)}
119
+ >
120
+ {pulseIcon ? (
121
+ <animate
122
+ attributeName="fill"
123
+ values={`${iconColor}; transparent`}
124
+ dur="1s"
125
+ calcMode="discrete"
126
+ repeatCount="indefinite"
127
+ data-testid={`Chip_${type}_icon_animate`}
128
+ />
129
+ ) : null}
130
+ </Icon>
152
131
  ) : null}
153
132
  <LegacyStyledText
154
- css={TEXT_STYLE}
133
+ css={TEXT_STYLE(chipSize)}
155
134
  color={CHIP_PROPS_BY_TYPE[type].textColor}
156
135
  >
157
136
  {text}
@@ -166,7 +145,54 @@ const WEB_MEDIUM_TEXT_STYLE = css`
166
145
  font-weight: ${TYPOGRAPHY.fontWeightSemiBold};
167
146
  `
168
147
  const WEB_SMALL_TEXT_STYLE = css`
169
- font-size: ${TYPOGRAPHY.fontSizeLabel};
170
- line-height: ${TYPOGRAPHY.lineHeight12};
148
+ font-size: ${TYPOGRAPHY.fontSizeP};
149
+ line-height: ${TYPOGRAPHY.lineHeight16};
171
150
  font-weight: ${TYPOGRAPHY.fontWeightSemiBold};
172
151
  `
152
+
153
+ const ICON_STYLE = (
154
+ chipSize: ChipSize,
155
+ smallSize: string
156
+ ): FlattenSimpleInterpolation => css`
157
+ width: ${chipSize === 'medium' ? '1rem' : smallSize};
158
+ height: ${chipSize === 'medium' ? '1rem' : smallSize};
159
+
160
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
161
+ width: ${chipSize === 'medium' ? '1.5rem' : '1.25rem'};
162
+ height: ${chipSize === 'medium' ? '1.5rem' : '1.25rem'};
163
+ }
164
+ `
165
+
166
+ const TEXT_STYLE = (chipSize: ChipSize): FlattenSimpleInterpolation => css`
167
+ ${chipSize === 'medium' ? WEB_MEDIUM_TEXT_STYLE : WEB_SMALL_TEXT_STYLE}
168
+
169
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
170
+ ${chipSize === 'medium'
171
+ ? TYPOGRAPHY.bodyTextSemiBold
172
+ : TYPOGRAPHY.smallBodyTextSemiBold}
173
+ }
174
+ `
175
+
176
+ const MEDIUM_CONTAINER_STYLE = (
177
+ background?: boolean
178
+ ): FlattenSimpleInterpolation => css`
179
+ padding: ${SPACING.spacing2} ${background === false ? 0 : SPACING.spacing8};
180
+ grid-gap: ${SPACING.spacing4};
181
+
182
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
183
+ padding: ${SPACING.spacing8} ${background === false ? 0 : SPACING.spacing16};
184
+ grid-gap: ${SPACING.spacing8};
185
+ }
186
+ `
187
+
188
+ const SMALL_CONTAINER_STYLE = (
189
+ background?: boolean
190
+ ): FlattenSimpleInterpolation => css`
191
+ padding: ${SPACING.spacing4} ${background === false ? 0 : SPACING.spacing6};
192
+ grid-gap: ${SPACING.spacing4};
193
+
194
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
195
+ padding: ${SPACING.spacing4} ${background === false ? 0 : SPACING.spacing8};
196
+ grid-gap: ${SPACING.spacing4};
197
+ }
198
+ `
@@ -0,0 +1,107 @@
1
+ import { VIEWPORT } from '../../ui-style-constants'
2
+ import { InlineNotification } from './index'
3
+
4
+ import type { Meta, Story } from '@storybook/react'
5
+ import type * as React from 'react'
6
+
7
+ export default {
8
+ title: 'Helix/Atoms/InlineNotification',
9
+ argTypes: {
10
+ hug: {
11
+ control: {
12
+ type: 'boolean',
13
+ },
14
+ defaultValue: false,
15
+ },
16
+ type: {
17
+ options: ['alert', 'error', 'neutral', 'success'],
18
+ control: {
19
+ type: 'select',
20
+ },
21
+ defaultValue: 'success',
22
+ },
23
+ onCloseClick: {
24
+ control: {
25
+ type: 'boolean',
26
+ },
27
+ defaultValue: true,
28
+ },
29
+ hasMessage: {
30
+ control: {
31
+ type: 'boolean',
32
+ },
33
+ defaultValue: true,
34
+ },
35
+ message: {
36
+ control: {
37
+ type: 'text',
38
+ },
39
+ if: { arg: 'hasMessage' },
40
+ },
41
+ hasLink: {
42
+ control: {
43
+ type: 'boolean',
44
+ },
45
+ defaultValue: false,
46
+ },
47
+ linkText: {
48
+ control: {
49
+ type: 'text',
50
+ },
51
+ if: { arg: 'hasLink' },
52
+ },
53
+ },
54
+ parameters: VIEWPORT.touchScreenViewport,
55
+ } as Meta
56
+
57
+ export interface WrapperProps extends React.ComponentProps<InlineNotification> {
58
+ hasMessage: boolean
59
+ hasLink: boolean
60
+ }
61
+
62
+ function Wrapper(props: WrapperProps): JSX.Element {
63
+ return (
64
+ <InlineNotification
65
+ {...props}
66
+ onCloseClick={
67
+ props.onCloseClick
68
+ ? () => {
69
+ console.log('Close clicked')
70
+ }
71
+ : undefined
72
+ }
73
+ message={props.hasMessage ? props.message : undefined}
74
+ linkText={props.hasLink ? props.linkText : undefined}
75
+ onLinkClick={
76
+ props.hasLink
77
+ ? () => {
78
+ console.log('Link clicked')
79
+ }
80
+ : undefined
81
+ }
82
+ />
83
+ )
84
+ }
85
+
86
+ const Template: Story<React.ComponentProps<typeof Wrapper>> = args => (
87
+ <Wrapper {...args} />
88
+ )
89
+
90
+ export const InlineNotificationComponent = Template.bind({})
91
+ InlineNotificationComponent.args = {
92
+ heading: 'awesome',
93
+ message: 'you did it',
94
+ type: 'success',
95
+ hasMessage: true,
96
+ hasLink: false,
97
+ }
98
+
99
+ export const InlineNotificationWithLink = Template.bind({})
100
+ InlineNotificationWithLink.args = {
101
+ heading: 'Something has happened',
102
+ message: 'Here is an alert about it',
103
+ type: 'neutral',
104
+ hasMessage: true,
105
+ hasLink: true,
106
+ linkText: 'Link',
107
+ }
@@ -0,0 +1,66 @@
1
+ import { fireEvent, screen } from '@testing-library/react'
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
3
+
4
+ import { InlineNotification } from '..'
5
+ import { renderWithProviders } from '../../../testing/utils'
6
+
7
+ import type { ComponentProps } from 'react'
8
+
9
+ const render = (props: ComponentProps<typeof InlineNotification>) => {
10
+ return renderWithProviders(<InlineNotification {...props} />)[0]
11
+ }
12
+
13
+ describe('InlineNotification', () => {
14
+ let props: ComponentProps<typeof InlineNotification>
15
+
16
+ beforeEach(() => {
17
+ props = {
18
+ type: 'success',
19
+ heading: 'TITLE',
20
+ }
21
+ })
22
+ it('renders success inline notification', () => {
23
+ render(props)
24
+ screen.getByLabelText('icon_success')
25
+ screen.getByText('TITLE')
26
+ })
27
+ it('renders success inline notification with exit button and when click dismisses inline notification', () => {
28
+ props = {
29
+ type: 'success',
30
+ heading: 'TITLE',
31
+ onCloseClick: vi.fn(),
32
+ }
33
+ render(props)
34
+ screen.getByText('TITLE')
35
+ const btn = screen.getByLabelText('close_icon')
36
+ fireEvent.click(btn)
37
+ expect(props.onCloseClick).toHaveBeenCalled()
38
+ })
39
+ it('renders alert inline notification', () => {
40
+ props = {
41
+ type: 'alert',
42
+ heading: 'TITLE',
43
+ }
44
+ render(props)
45
+ screen.getByLabelText('icon_alert')
46
+ screen.getByText('TITLE')
47
+ })
48
+ it('renders error inline notification', () => {
49
+ props = {
50
+ type: 'error',
51
+ heading: 'TITLE',
52
+ }
53
+ render(props)
54
+ screen.getByLabelText('icon_error')
55
+ screen.getByText('TITLE')
56
+ })
57
+ it('renders neutral inline notification', () => {
58
+ props = {
59
+ type: 'neutral',
60
+ heading: 'TITLE',
61
+ }
62
+ render(props)
63
+ screen.getByLabelText('icon_neutral')
64
+ screen.getByText('TITLE')
65
+ })
66
+ })
@@ -0,0 +1,197 @@
1
+ import { css } from 'styled-components'
2
+
3
+ import { BORDERS, COLORS } from '../../helix-design-system'
4
+ import { Icon } from '../../icons'
5
+ import { Box, Btn, Flex, Link } from '../../primitives'
6
+ import {
7
+ ALIGN_CENTER,
8
+ DIRECTION_ROW,
9
+ JUSTIFY_FLEX_END,
10
+ JUSTIFY_FLEX_START,
11
+ JUSTIFY_SPACE_BETWEEN,
12
+ } from '../../styles'
13
+ import { RESPONSIVENESS, SPACING, TYPOGRAPHY } from '../../ui-style-constants'
14
+ import { StyledText } from '../StyledText'
15
+
16
+ import type { MouseEventHandler } from 'react'
17
+ import type { IconProps } from '../../icons'
18
+ import type { StyleProps } from '../../primitives'
19
+
20
+ type InlineNotificationType = 'alert' | 'error' | 'neutral' | 'success'
21
+
22
+ export interface InlineNotificationProps extends StyleProps {
23
+ /** name constant of the icon to display */
24
+ type: InlineNotificationType
25
+ /** InlineNotification contents */
26
+ heading: string
27
+ message?: string
28
+ /** Optional dynamic width based on contents */
29
+ hug?: boolean
30
+ /** optional handler to show close button/clear alert */
31
+ onCloseClick?: (() => void) | MouseEventHandler<HTMLButtonElement>
32
+ linkText?: string
33
+ onLinkClick?: (() => void) | MouseEventHandler<HTMLButtonElement>
34
+ }
35
+
36
+ const INLINE_NOTIFICATION_PROPS_BY_TYPE: Record<
37
+ InlineNotificationType,
38
+ { icon: IconProps; backgroundColor: string; color: string }
39
+ > = {
40
+ alert: {
41
+ icon: { name: 'ot-alert' },
42
+ backgroundColor: COLORS.yellow30,
43
+ color: COLORS.yellow60,
44
+ },
45
+ error: {
46
+ icon: { name: 'ot-alert' },
47
+ backgroundColor: COLORS.red30,
48
+ color: COLORS.red60,
49
+ },
50
+ neutral: {
51
+ icon: { name: 'information' },
52
+ backgroundColor: COLORS.blue30,
53
+ color: COLORS.blue60,
54
+ },
55
+ success: {
56
+ icon: { name: 'ot-check' },
57
+ backgroundColor: COLORS.green30,
58
+ color: COLORS.green60,
59
+ },
60
+ }
61
+
62
+ export function InlineNotification(
63
+ props: InlineNotificationProps
64
+ ): JSX.Element {
65
+ const {
66
+ heading,
67
+ hug = false,
68
+ onCloseClick,
69
+ message,
70
+ type,
71
+ linkText,
72
+ onLinkClick,
73
+ } = props
74
+ const fullHeading = `${heading}${message ? '. ' : ''}`
75
+ const fullmessage = `${message}.`
76
+ const inlineNotificationProps = INLINE_NOTIFICATION_PROPS_BY_TYPE[type]
77
+ const iconProps = {
78
+ ...inlineNotificationProps.icon,
79
+ color: INLINE_NOTIFICATION_PROPS_BY_TYPE[type].color,
80
+ size: '100%',
81
+ }
82
+ return (
83
+ <Flex
84
+ alignItems={ALIGN_CENTER}
85
+ backgroundColor={INLINE_NOTIFICATION_PROPS_BY_TYPE[type].backgroundColor}
86
+ data-testid={`InlineNotification_${type}`}
87
+ flexDirection={DIRECTION_ROW}
88
+ justifyContent={JUSTIFY_SPACE_BETWEEN}
89
+ width={hug ? 'max-content' : '100%'}
90
+ css={css`
91
+ gap: ${SPACING.spacing8};
92
+ border-radius: ${BORDERS.borderRadius4};
93
+ padding: ${SPACING.spacing8} ${SPACING.spacing12};
94
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
95
+ gap: ${SPACING.spacing12};
96
+ border-radius: ${BORDERS.borderRadius8};
97
+ padding: ${SPACING.spacing12} ${SPACING.spacing16};
98
+ }
99
+ `}
100
+ >
101
+ <Flex
102
+ justifyContent={JUSTIFY_FLEX_START}
103
+ alignItems={ALIGN_CENTER}
104
+ flexDirection={DIRECTION_ROW}
105
+ css={css`
106
+ gap: ${SPACING.spacing8};
107
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
108
+ gap: ${SPACING.spacing12};
109
+ }
110
+ `}
111
+ >
112
+ <Box
113
+ css={css`
114
+ width: ${SPACING.spacing16};
115
+ height: ${SPACING.spacing16};
116
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
117
+ width: 1.75rem;
118
+ height: 1.75rem;
119
+ }
120
+ `}
121
+ >
122
+ <Icon {...iconProps} aria-label={`icon_${type}`} />
123
+ </Box>
124
+ <Flex flex="1" alignItems={ALIGN_CENTER}>
125
+ <StyledText
126
+ oddStyle="bodyTextRegular"
127
+ desktopStyle="bodyDefaultRegular"
128
+ >
129
+ <span
130
+ css={`
131
+ font-weight: ${TYPOGRAPHY.fontWeightSemiBold};
132
+ `}
133
+ >
134
+ {fullHeading}
135
+ </span>
136
+ {/* this break is because the desktop wants this on two lines, but also wants/
137
+ inline text layout on ODD. Soooo here you go */}
138
+ <br
139
+ css={`
140
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
141
+ display: none;
142
+ }
143
+ `}
144
+ />
145
+ {message != null && fullmessage}
146
+ </StyledText>
147
+ </Flex>
148
+ </Flex>
149
+ <Flex
150
+ alignItems={ALIGN_CENTER}
151
+ justifyContent={JUSTIFY_FLEX_END}
152
+ gap={SPACING.spacing16}
153
+ >
154
+ {linkText && (
155
+ <Link onClick={onLinkClick}>
156
+ <StyledText
157
+ oddStyle="bodyTextRegular"
158
+ desktopStyle="bodyDefaultRegular"
159
+ textDecoration="underline"
160
+ >
161
+ {linkText}{' '}
162
+ </StyledText>
163
+ </Link>
164
+ )}
165
+ {onCloseClick && (
166
+ <Btn
167
+ data-testid="InlineNotification_close-button"
168
+ onClick={onCloseClick}
169
+ css={css`
170
+ width: 28px;
171
+ height: 28px;
172
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
173
+ width: ${SPACING.spacing48};
174
+ height: ${SPACING.spacing48};
175
+ }
176
+ `}
177
+ width=""
178
+ height="fit-content"
179
+ >
180
+ <Icon
181
+ aria-label="close_icon"
182
+ name="close"
183
+ css={css`
184
+ width: 28px;
185
+ height: 28px;
186
+ @media ${RESPONSIVENESS.touchscreenMediaQuerySpecs} {
187
+ width: ${SPACING.spacing48};
188
+ height: ${SPACING.spacing48};
189
+ }
190
+ `}
191
+ />
192
+ </Btn>
193
+ )}
194
+ </Flex>
195
+ </Flex>
196
+ )
197
+ }
@@ -1,11 +1,14 @@
1
1
  import * as React from 'react'
2
+
2
3
  import {
3
4
  DIRECTION_COLUMN,
4
5
  Flex,
5
6
  SPACING,
6
7
  VIEWPORT,
7
8
  } from '@opentrons/components'
9
+
8
10
  import { InputField as InputFieldComponent } from './index'
11
+
9
12
  import type { Meta, StoryObj } from '@storybook/react'
10
13
 
11
14
  const meta: Meta<typeof InputFieldComponent> = {
@@ -1,7 +1,8 @@
1
- import { describe, it, vi, beforeEach, expect } from 'vitest'
2
- import { screen, fireEvent } from '@testing-library/react'
3
- import { renderWithProviders } from '../../../testing/utils'
1
+ import { fireEvent, screen } from '@testing-library/react'
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
3
+
4
4
  import { InputField } from '..'
5
+ import { renderWithProviders } from '../../../testing/utils'
5
6
 
6
7
  import type { ComponentProps } from 'react'
7
8
 
@@ -1,6 +1,8 @@
1
1
  import { forwardRef } from 'react'
2
2
  import styled, { css } from 'styled-components'
3
3
 
4
+ import { BORDERS, COLORS } from '../../helix-design-system'
5
+ import { Icon } from '../../icons'
4
6
  import { Flex } from '../../primitives'
5
7
  import {
6
8
  ALIGN_CENTER,
@@ -9,12 +11,10 @@ import {
9
11
  NO_WRAP,
10
12
  TEXT_ALIGN_RIGHT,
11
13
  } from '../../styles'
12
- import { BORDERS, COLORS } from '../../helix-design-system'
13
- import { Icon } from '../../icons'
14
- import { RESPONSIVENESS, SPACING, TYPOGRAPHY } from '../../ui-style-constants'
15
- import { Tooltip } from '../Tooltip'
16
14
  import { useHoverTooltip } from '../../tooltips'
15
+ import { RESPONSIVENESS, SPACING, TYPOGRAPHY } from '../../ui-style-constants'
17
16
  import { StyledText } from '../StyledText'
17
+ import { Tooltip } from '../Tooltip'
18
18
 
19
19
  import type {
20
20
  ChangeEventHandler,
@@ -1,12 +1,14 @@
1
1
  import * as React from 'react'
2
+
3
+ import { StyledText } from '../..'
2
4
  import { STYLE_PROPS } from '../../primitives'
5
+ import { ListButton as ListButtonComponent } from './index'
3
6
  import {
4
7
  ListButtonAccordion,
5
8
  ListButtonAccordionContainer,
6
9
  ListButtonRadioButton,
7
10
  } from './ListButtonChildren/index'
8
- import { StyledText } from '../..'
9
- import { ListButton as ListButtonComponent } from './index'
11
+
10
12
  import type { Meta, StoryObj } from '@storybook/react'
11
13
 
12
14
  const meta: Meta<typeof ListButtonComponent> = {
@@ -1,9 +1,10 @@
1
1
  import styled, { css } from 'styled-components'
2
- import { SPACING } from '../../../ui-style-constants'
2
+
3
3
  import { BORDERS, COLORS } from '../../../helix-design-system'
4
4
  import { Flex } from '../../../primitives'
5
- import { StyledText } from '../../StyledText'
6
5
  import { CURSOR_POINTER } from '../../../styles'
6
+ import { SPACING } from '../../../ui-style-constants'
7
+ import { StyledText } from '../../StyledText'
7
8
 
8
9
  import type { ChangeEventHandler, MouseEvent } from 'react'
9
10
  import type { StyleProps } from '../../../primitives'