@7shifts/sous-chef 2.17.2 → 2.19.0

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 (472) hide show
  1. package/dist/actions/Button/Button.d.ts +1 -0
  2. package/dist/actions/Button/constants.d.ts +1 -0
  3. package/dist/actions/Button/types.d.ts +1 -1
  4. package/dist/actions/Link/Link.d.ts +11 -0
  5. package/dist/actions/Link/constants.d.ts +8 -0
  6. package/dist/actions/Link/index.d.ts +1 -0
  7. package/dist/actions/Link/types.d.ts +2 -0
  8. package/dist/actions/index.d.ts +2 -1
  9. package/dist/controls/DateFilter/DateFilter.d.ts +12 -0
  10. package/dist/controls/DateFilter/DateFilterDisplay/DateFilterDisplay.d.ts +10 -0
  11. package/dist/controls/DateFilter/DateFilterDisplay/DateFilterText/DateFilterText.d.ts +9 -0
  12. package/dist/controls/DateFilter/DateFilterDisplay/DateFilterText/domain.d.ts +2 -0
  13. package/dist/controls/DateFilter/DateFilterDisplay/index.d.ts +1 -0
  14. package/dist/controls/DateFilter/DateFilterStepper/DateFilterStepper.d.ts +11 -0
  15. package/dist/controls/DateFilter/DateFilterStepper/domain.d.ts +2 -0
  16. package/dist/controls/DateFilter/DateFilterStepper/index.d.ts +1 -0
  17. package/dist/controls/DateFilter/constants.d.ts +9 -0
  18. package/dist/controls/DateFilter/index.d.ts +1 -0
  19. package/dist/controls/DateFilter/types.d.ts +3 -0
  20. package/dist/controls/SegmentedControl/SegmentedControl.d.ts +8 -0
  21. package/dist/controls/SegmentedControl/index.d.ts +1 -0
  22. package/dist/controls/index.d.ts +3 -1
  23. package/dist/core/SousChefProvider/SousChefProvider.d.ts +6 -0
  24. package/dist/core/SousChefProvider/index.d.ts +1 -0
  25. package/dist/core/index.d.ts +2 -12
  26. package/dist/feedback/CircularProgress/CircularProgress.d.ts +9 -0
  27. package/dist/feedback/CircularProgress/index.d.ts +1 -0
  28. package/dist/feedback/PersistentBanner/PersistentBanner.d.ts +13 -0
  29. package/dist/feedback/PersistentBanner/constants.d.ts +5 -0
  30. package/dist/feedback/PersistentBanner/index.d.ts +1 -0
  31. package/dist/feedback/PersistentBanner/types.d.ts +1 -0
  32. package/dist/feedback/Progress/domain.d.ts +11 -0
  33. package/dist/feedback/Progress/useProgress.d.ts +18 -0
  34. package/dist/feedback/ProgressBar/ProgressBar.d.ts +8 -0
  35. package/dist/feedback/ProgressBar/index.d.ts +1 -0
  36. package/dist/feedback/Toast/Toast.d.ts +9 -0
  37. package/dist/feedback/Toast/constants.d.ts +5 -0
  38. package/dist/feedback/Toast/index.d.ts +1 -0
  39. package/dist/feedback/Toast/types.d.ts +1 -0
  40. package/dist/feedback/index.d.ts +5 -2
  41. package/dist/forms/CurrencyField/CurrencyField.d.ts +1 -1
  42. package/dist/forms/ErrorMessage/ErrorMessage.d.ts +1 -0
  43. package/dist/forms/FormFeedback/FormFeedback.d.ts +8 -0
  44. package/dist/forms/FormFeedback/index.d.ts +1 -0
  45. package/dist/forms/FormFooter/FormFooter.d.ts +12 -0
  46. package/dist/forms/FormFooter/FormFooterActions/FormFooterActions.d.ts +10 -0
  47. package/dist/forms/FormFooter/domain.d.ts +2 -0
  48. package/dist/forms/FormFooter/index.d.ts +1 -0
  49. package/dist/forms/FormSection/FormSection.d.ts +10 -0
  50. package/dist/forms/FormSection/index.d.ts +1 -0
  51. package/dist/forms/PercentageField/PercentageField.d.ts +1 -1
  52. package/dist/forms/SelectField/CustomMenu/CustomMenu.d.ts +5 -0
  53. package/dist/forms/SelectField/CustomMenu/index.d.ts +1 -0
  54. package/dist/forms/SelectField/SelectField.d.ts +2 -0
  55. package/dist/forms/SelectField/types.d.ts +1 -0
  56. package/dist/forms/SelectField/useSelectField.d.ts +1 -1
  57. package/dist/forms/TimeField/TimeField.d.ts +1 -1
  58. package/dist/forms/hooks/useSelectFieldControllers.d.ts +2 -1
  59. package/dist/forms/index.d.ts +4 -1
  60. package/dist/icons/components/IconAnalytics.d.ts +1 -4
  61. package/dist/icons/components/IconArrowDown.d.ts +1 -4
  62. package/dist/icons/components/IconArrowLeft.d.ts +1 -4
  63. package/dist/icons/components/IconArrowRight.d.ts +1 -4
  64. package/dist/icons/components/IconArrowToTop.d.ts +1 -4
  65. package/dist/icons/components/IconArrowUp.d.ts +1 -4
  66. package/dist/icons/components/IconAward.d.ts +1 -4
  67. package/dist/icons/components/IconBalanceScale.d.ts +1 -4
  68. package/dist/icons/components/IconBalanceScaleLeft.d.ts +1 -4
  69. package/dist/icons/components/IconBan.d.ts +1 -4
  70. package/dist/icons/components/IconBarsH.d.ts +1 -4
  71. package/dist/icons/components/IconBarsV.d.ts +1 -4
  72. package/dist/icons/components/IconBell.d.ts +1 -4
  73. package/dist/icons/components/IconBirthdayCake.d.ts +1 -4
  74. package/dist/icons/components/IconBold.d.ts +1 -4
  75. package/dist/icons/components/IconBolt.d.ts +1 -4
  76. package/dist/icons/components/IconBook.d.ts +1 -4
  77. package/dist/icons/components/IconBriefcase.d.ts +1 -4
  78. package/dist/icons/components/IconBullseyeArrow.d.ts +1 -4
  79. package/dist/icons/components/IconCalculator.d.ts +1 -4
  80. package/dist/icons/components/IconCalendar.d.ts +1 -4
  81. package/dist/icons/components/IconCalendarAlt.d.ts +1 -4
  82. package/dist/icons/components/IconCalendarCheck.d.ts +1 -4
  83. package/dist/icons/components/IconCalendarDay.d.ts +1 -4
  84. package/dist/icons/components/IconCalendarExclamation.d.ts +1 -4
  85. package/dist/icons/components/IconCalendarStar.d.ts +1 -4
  86. package/dist/icons/components/IconCalendarTomorrow.d.ts +1 -4
  87. package/dist/icons/components/IconCamera.d.ts +1 -4
  88. package/dist/icons/components/IconCameraSlash.d.ts +1 -4
  89. package/dist/icons/components/IconCashRegister.d.ts +1 -4
  90. package/dist/icons/components/IconChartBar.d.ts +1 -4
  91. package/dist/icons/components/IconCheck.d.ts +1 -4
  92. package/dist/icons/components/IconChevronDown.d.ts +1 -4
  93. package/dist/icons/components/IconChevronLeft.d.ts +1 -4
  94. package/dist/icons/components/IconChevronRight.d.ts +1 -4
  95. package/dist/icons/components/IconChevronUp.d.ts +1 -4
  96. package/dist/icons/components/IconClipboardList.d.ts +1 -4
  97. package/dist/icons/components/IconClock.d.ts +1 -4
  98. package/dist/icons/components/IconCog.d.ts +1 -4
  99. package/dist/icons/components/IconComment.d.ts +1 -4
  100. package/dist/icons/components/IconCommentLines.d.ts +1 -4
  101. package/dist/icons/components/IconCopy.d.ts +1 -4
  102. package/dist/icons/components/IconCreditCard.d.ts +1 -4
  103. package/dist/icons/components/IconCreditCardPlus.d.ts +1 -4
  104. package/dist/icons/components/IconDownload.d.ts +1 -4
  105. package/dist/icons/components/IconEdit.d.ts +1 -4
  106. package/dist/icons/components/IconEllipsisV.d.ts +1 -4
  107. package/dist/icons/components/IconEnvelope.d.ts +1 -4
  108. package/dist/icons/components/IconExclaimation.d.ts +1 -4
  109. package/dist/icons/components/IconExclaimationTriangle.d.ts +1 -4
  110. package/dist/icons/components/IconExpand.d.ts +1 -4
  111. package/dist/icons/components/IconExternalLink.d.ts +1 -4
  112. package/dist/icons/components/IconEye.d.ts +1 -4
  113. package/dist/icons/components/IconEyeSlash.d.ts +1 -4
  114. package/dist/icons/components/IconFile.d.ts +1 -4
  115. package/dist/icons/components/IconFilePdf.d.ts +1 -4
  116. package/dist/icons/components/IconFlag.d.ts +1 -4
  117. package/dist/icons/components/IconFourDotsCircle.d.ts +1 -4
  118. package/dist/icons/components/IconFourSquares.d.ts +1 -4
  119. package/dist/icons/components/IconGavel.d.ts +1 -4
  120. package/dist/icons/components/IconGif.d.ts +1 -4
  121. package/dist/icons/components/IconGift.d.ts +1 -4
  122. package/dist/icons/components/IconGrinBeam.d.ts +1 -4
  123. package/dist/icons/components/IconGripVertical.d.ts +1 -4
  124. package/dist/icons/components/IconHandshake.d.ts +1 -4
  125. package/dist/icons/components/IconImage.d.ts +1 -4
  126. package/dist/icons/components/IconInfoCircle.d.ts +1 -4
  127. package/dist/icons/components/IconIslandTropical.d.ts +1 -4
  128. package/dist/icons/components/IconItalic.d.ts +1 -4
  129. package/dist/icons/components/IconLaptopSearch.d.ts +1 -4
  130. package/dist/icons/components/IconLink.d.ts +1 -4
  131. package/dist/icons/components/IconList.d.ts +1 -4
  132. package/dist/icons/components/IconListOI.d.ts +1 -4
  133. package/dist/icons/components/IconLock.d.ts +1 -4
  134. package/dist/icons/components/IconMagicSolid.d.ts +1 -4
  135. package/dist/icons/components/IconMapMarker.d.ts +1 -4
  136. package/dist/icons/components/IconMegaphone.d.ts +1 -4
  137. package/dist/icons/components/IconMinus.d.ts +1 -4
  138. package/dist/icons/components/IconMinusCircle.d.ts +1 -4
  139. package/dist/icons/components/IconMoneyBill.d.ts +1 -4
  140. package/dist/icons/components/IconNotesMedical.d.ts +1 -4
  141. package/dist/icons/components/IconOvertime.d.ts +1 -4
  142. package/dist/icons/components/IconPaperPlane.d.ts +1 -4
  143. package/dist/icons/components/IconPaperPlaneClock.d.ts +1 -4
  144. package/dist/icons/components/IconPaperclip.d.ts +1 -4
  145. package/dist/icons/components/IconPencil.d.ts +1 -4
  146. package/dist/icons/components/IconPercentage.d.ts +1 -4
  147. package/dist/icons/components/IconPhone.d.ts +1 -4
  148. package/dist/icons/components/IconPlug.d.ts +1 -4
  149. package/dist/icons/components/IconPlus.d.ts +1 -4
  150. package/dist/icons/components/IconPrint.d.ts +1 -4
  151. package/dist/icons/components/IconQuestionCircle.d.ts +1 -4
  152. package/dist/icons/components/IconRepeat.d.ts +1 -4
  153. package/dist/icons/components/IconReply.d.ts +1 -4
  154. package/dist/icons/components/IconSearch.d.ts +1 -4
  155. package/dist/icons/components/IconSignOut.d.ts +1 -4
  156. package/dist/icons/components/IconSitemap.d.ts +1 -4
  157. package/dist/icons/components/IconSlidersH.d.ts +1 -4
  158. package/dist/icons/components/IconSort.d.ts +1 -4
  159. package/dist/icons/components/IconStar.d.ts +1 -4
  160. package/dist/icons/components/IconStarSolid.d.ts +1 -4
  161. package/dist/icons/components/IconStickyNoteLines.d.ts +1 -4
  162. package/dist/icons/components/IconStopwatch.d.ts +1 -4
  163. package/dist/icons/components/IconStrikethrough.d.ts +1 -4
  164. package/dist/icons/components/IconSync.d.ts +1 -4
  165. package/dist/icons/components/IconSyncExclaimation.d.ts +1 -4
  166. package/dist/icons/components/IconTachometer.d.ts +1 -4
  167. package/dist/icons/components/IconTimes.d.ts +1 -4
  168. package/dist/icons/components/IconTimesOctagon.d.ts +1 -4
  169. package/dist/icons/components/IconTrash.d.ts +1 -4
  170. package/dist/icons/components/IconUnderline.d.ts +1 -4
  171. package/dist/icons/components/IconUndo.d.ts +1 -4
  172. package/dist/icons/components/IconUniversity.d.ts +1 -4
  173. package/dist/icons/components/IconUserComputer.d.ts +1 -4
  174. package/dist/icons/components/IconUserFriends.d.ts +1 -4
  175. package/dist/icons/components/IconUserLight.d.ts +1 -4
  176. package/dist/icons/components/IconUserPlus.d.ts +1 -4
  177. package/dist/icons/components/IconUserSlash.d.ts +1 -4
  178. package/dist/icons/components/IconUserSolid.d.ts +1 -4
  179. package/dist/icons/components/IconUserTag.d.ts +1 -4
  180. package/dist/icons/components/IconUserTie.d.ts +1 -4
  181. package/dist/icons/components/IconUsers.d.ts +1 -4
  182. package/dist/icons/components/IconVideo.d.ts +1 -4
  183. package/dist/icons/components/IconVolume.d.ts +1 -4
  184. package/dist/icons/components/IconVolumeMute.d.ts +1 -4
  185. package/dist/icons/components/IconWrench.d.ts +1 -4
  186. package/dist/icons/src/components/IconArrowLeft.d.ts +9 -0
  187. package/dist/icons/src/components/IconArrowRight.d.ts +9 -0
  188. package/dist/icons/src/components/IconAward.d.ts +9 -0
  189. package/dist/icons/src/components/IconCalendarAlt.d.ts +9 -0
  190. package/dist/icons/src/components/IconCheck.d.ts +9 -0
  191. package/dist/icons/src/components/IconChevronDown.d.ts +9 -0
  192. package/dist/icons/src/components/IconChevronLeft.d.ts +9 -0
  193. package/dist/icons/src/components/IconChevronRight.d.ts +9 -0
  194. package/dist/icons/src/components/IconChevronUp.d.ts +9 -0
  195. package/dist/icons/src/components/IconEllipsisV.d.ts +9 -0
  196. package/dist/icons/src/components/IconExclaimationTriangle.d.ts +9 -0
  197. package/dist/icons/src/components/IconEye.d.ts +9 -0
  198. package/dist/icons/src/components/IconEyeSlash.d.ts +9 -0
  199. package/dist/icons/src/components/IconInfoCircle.d.ts +9 -0
  200. package/dist/icons/src/components/IconPlus.d.ts +9 -0
  201. package/dist/icons/src/components/IconTimes.d.ts +9 -0
  202. package/dist/icons/src/components/IconTimesOctagon.d.ts +9 -0
  203. package/dist/icons/src/components/IconUserSolid.d.ts +9 -0
  204. package/dist/icons/src/constants.d.ts +6 -0
  205. package/dist/icons/src/iconUtils.d.ts +8 -0
  206. package/dist/icons.tsx.js +2 -0
  207. package/dist/icons.tsx.js.map +1 -0
  208. package/dist/icons.tsx.modern.js +2 -0
  209. package/dist/icons.tsx.modern.js.map +1 -0
  210. package/dist/index.css +719 -333
  211. package/dist/index.d.ts +1 -0
  212. package/dist/index.js +1741 -1102
  213. package/dist/index.js.map +1 -1
  214. package/dist/index.modern.js +1732 -1104
  215. package/dist/index.modern.js.map +1 -1
  216. package/dist/index.tsx.js +2 -0
  217. package/dist/index.tsx.js.map +1 -0
  218. package/dist/index.tsx.modern.js +2 -0
  219. package/dist/index.tsx.modern.js.map +1 -0
  220. package/dist/lists/DataTableRow/DataTableRow.d.ts +1 -1
  221. package/dist/src/actions/Button/Button.d.ts +30 -0
  222. package/dist/src/actions/Button/constants.d.ts +28 -0
  223. package/dist/src/actions/Button/index.d.ts +1 -0
  224. package/dist/src/actions/Button/types.d.ts +4 -0
  225. package/dist/src/actions/Link/Link.d.ts +11 -0
  226. package/dist/src/actions/Link/constants.d.ts +8 -0
  227. package/dist/src/actions/Link/index.d.ts +1 -0
  228. package/dist/src/actions/Link/types.d.ts +2 -0
  229. package/dist/src/actions/PaginationControls/PaginationControls.d.ts +13 -0
  230. package/dist/src/actions/PaginationControls/index.d.ts +1 -0
  231. package/dist/src/actions/Toggle/Toggle.d.ts +18 -0
  232. package/dist/src/actions/Toggle/index.d.ts +1 -0
  233. package/dist/src/actions/index.d.ts +5 -0
  234. package/dist/src/controls/DateFilter/DateFilter.d.ts +12 -0
  235. package/dist/src/controls/DateFilter/DateFilterDisplay/DateFilterDisplay.d.ts +10 -0
  236. package/dist/src/controls/DateFilter/DateFilterDisplay/DateFilterText/DateFilterText.d.ts +9 -0
  237. package/dist/src/controls/DateFilter/DateFilterDisplay/DateFilterText/domain.d.ts +2 -0
  238. package/dist/src/controls/DateFilter/DateFilterDisplay/index.d.ts +1 -0
  239. package/dist/src/controls/DateFilter/DateFilterStepper/DateFilterStepper.d.ts +11 -0
  240. package/dist/src/controls/DateFilter/DateFilterStepper/domain.d.ts +2 -0
  241. package/dist/src/controls/DateFilter/DateFilterStepper/index.d.ts +1 -0
  242. package/dist/src/controls/DateFilter/constants.d.ts +9 -0
  243. package/dist/src/controls/DateFilter/index.d.ts +1 -0
  244. package/dist/src/controls/DateFilter/types.d.ts +3 -0
  245. package/dist/src/controls/SegmentedControl/SegmentedControl.d.ts +8 -0
  246. package/dist/src/controls/SegmentedControl/index.d.ts +1 -0
  247. package/dist/src/controls/ToolbarSelect/ToolbarSelect.d.ts +17 -0
  248. package/dist/src/controls/ToolbarSelect/ToolbarSelect.styles.d.ts +5 -0
  249. package/dist/src/controls/ToolbarSelect/index.d.ts +1 -0
  250. package/dist/src/controls/index.d.ts +4 -0
  251. package/dist/src/core/Portal/Portal.d.ts +6 -0
  252. package/dist/src/core/Portal/index.d.ts +1 -0
  253. package/dist/src/core/SousChefProvider/SousChefProvider.d.ts +6 -0
  254. package/dist/src/core/SousChefProvider/index.d.ts +1 -0
  255. package/dist/src/core/index.d.ts +2 -0
  256. package/dist/src/feedback/CircularProgress/CircularProgress.d.ts +9 -0
  257. package/dist/src/feedback/CircularProgress/index.d.ts +1 -0
  258. package/dist/src/feedback/InlineBanner/ButtonCTA/ButtonCTA.d.ts +10 -0
  259. package/dist/src/feedback/InlineBanner/ButtonCTA/index.d.ts +1 -0
  260. package/dist/src/feedback/InlineBanner/InlineBanner.d.ts +14 -0
  261. package/dist/src/feedback/InlineBanner/InlineBannerCTA/InlineBannerCTA.d.ts +11 -0
  262. package/dist/src/feedback/InlineBanner/InlineBannerCTA/index.d.ts +1 -0
  263. package/dist/src/feedback/InlineBanner/InlineBannerIcon/InlineBannerIcon.d.ts +6 -0
  264. package/dist/src/feedback/InlineBanner/InlineBannerIcon/index.d.ts +1 -0
  265. package/dist/src/feedback/InlineBanner/constants.d.ts +11 -0
  266. package/dist/src/feedback/InlineBanner/index.d.ts +1 -0
  267. package/dist/src/feedback/InlineBanner/types.d.ts +1 -0
  268. package/dist/src/feedback/PersistentBanner/PersistentBanner.d.ts +13 -0
  269. package/dist/src/feedback/PersistentBanner/constants.d.ts +5 -0
  270. package/dist/src/feedback/PersistentBanner/index.d.ts +1 -0
  271. package/dist/src/feedback/PersistentBanner/types.d.ts +1 -0
  272. package/dist/src/feedback/Progress/domain.d.ts +11 -0
  273. package/dist/src/feedback/Progress/useProgress.d.ts +18 -0
  274. package/dist/src/feedback/ProgressBar/ProgressBar.d.ts +8 -0
  275. package/dist/src/feedback/ProgressBar/index.d.ts +1 -0
  276. package/dist/src/feedback/Spinner/Spinner.d.ts +9 -0
  277. package/dist/src/feedback/Spinner/constants.d.ts +6 -0
  278. package/dist/src/feedback/Spinner/index.d.ts +1 -0
  279. package/dist/src/feedback/Toast/Toast.d.ts +9 -0
  280. package/dist/src/feedback/Toast/constants.d.ts +5 -0
  281. package/dist/src/feedback/Toast/index.d.ts +1 -0
  282. package/dist/src/feedback/Toast/types.d.ts +1 -0
  283. package/dist/src/feedback/index.d.ts +7 -0
  284. package/dist/src/forms/AffixContainer/AffixContainer.d.ts +8 -0
  285. package/dist/src/forms/AffixContainer/index.d.ts +1 -0
  286. package/dist/src/forms/AsyncSelectField/AsyncSelectField.d.ts +14 -0
  287. package/dist/src/forms/AsyncSelectField/CustomList/CustomList.d.ts +8 -0
  288. package/dist/src/forms/AsyncSelectField/CustomList/index.d.ts +1 -0
  289. package/dist/src/forms/AsyncSelectField/index.d.ts +1 -0
  290. package/dist/src/forms/AsyncSelectField/types.d.ts +5 -0
  291. package/dist/src/forms/Caption/Caption.d.ts +7 -0
  292. package/dist/src/forms/Caption/index.d.ts +1 -0
  293. package/dist/src/forms/CheckboxField/CheckboxField.d.ts +18 -0
  294. package/dist/src/forms/CheckboxField/index.d.ts +1 -0
  295. package/dist/src/forms/CurrencyField/CurrencyField.d.ts +11 -0
  296. package/dist/src/forms/CurrencyField/index.d.ts +1 -0
  297. package/dist/src/forms/DateField/DateField.d.ts +25 -0
  298. package/dist/src/forms/DateField/index.d.ts +1 -0
  299. package/dist/src/forms/DatePickerCalendar/DatePickerCalendar.d.ts +15 -0
  300. package/dist/src/forms/DatePickerCalendar/index.d.ts +1 -0
  301. package/dist/src/forms/DateRangeField/DateRangeField.d.ts +25 -0
  302. package/dist/src/forms/DateRangeField/FromDate/FromDate.d.ts +17 -0
  303. package/dist/src/forms/DateRangeField/FromDate/index.d.ts +1 -0
  304. package/dist/src/forms/DateRangeField/ToDate/ToDate.d.ts +17 -0
  305. package/dist/src/forms/DateRangeField/ToDate/index.d.ts +1 -0
  306. package/dist/src/forms/DateRangeField/index.d.ts +1 -0
  307. package/dist/src/forms/ErrorMessage/ErrorMessage.d.ts +8 -0
  308. package/dist/src/forms/ErrorMessage/index.d.ts +1 -0
  309. package/dist/src/forms/Field/Field.d.ts +11 -0
  310. package/dist/src/forms/Field/index.d.ts +1 -0
  311. package/dist/src/forms/Form/Form.d.ts +14 -0
  312. package/dist/src/forms/Form/FormContext.d.ts +8 -0
  313. package/dist/src/forms/Form/index.d.ts +1 -0
  314. package/dist/src/forms/Form/types.d.ts +3 -0
  315. package/dist/src/forms/FormFeedback/FormFeedback.d.ts +8 -0
  316. package/dist/src/forms/FormFeedback/index.d.ts +1 -0
  317. package/dist/src/forms/FormRow/FormRow.d.ts +21 -0
  318. package/dist/src/forms/FormRow/index.d.ts +1 -0
  319. package/dist/src/forms/Label/Label.d.ts +8 -0
  320. package/dist/src/forms/Label/domain.d.ts +1 -0
  321. package/dist/src/forms/Label/index.d.ts +1 -0
  322. package/dist/src/forms/Label/useLabelTooltip.d.ts +7 -0
  323. package/dist/src/forms/MultiSelectField/MultiSelectField.d.ts +28 -0
  324. package/dist/src/forms/MultiSelectField/index.d.ts +1 -0
  325. package/dist/src/forms/PasswordCriteria/PasswordCriteria.d.ts +7 -0
  326. package/dist/src/forms/PasswordCriteria/index.d.ts +1 -0
  327. package/dist/src/forms/PasswordField/PasswordField.d.ts +20 -0
  328. package/dist/src/forms/PasswordField/index.d.ts +1 -0
  329. package/dist/src/forms/PasswordField/types.d.ts +5 -0
  330. package/dist/src/forms/PercentageField/PercentageField.d.ts +13 -0
  331. package/dist/src/forms/PercentageField/index.d.ts +1 -0
  332. package/dist/src/forms/PillSelectField/PillSelectField.d.ts +19 -0
  333. package/dist/src/forms/PillSelectField/index.d.ts +1 -0
  334. package/dist/src/forms/RadioGroupBoxOption/RadioGroupBoxOption.d.ts +11 -0
  335. package/dist/src/forms/RadioGroupBoxOption/index.d.ts +1 -0
  336. package/dist/src/forms/RadioGroupField/BoxOptions/BoxOptions.d.ts +8 -0
  337. package/dist/src/forms/RadioGroupField/BoxOptions/index.d.ts +1 -0
  338. package/dist/src/forms/RadioGroupField/RadioGroupField.d.ts +25 -0
  339. package/dist/src/forms/RadioGroupField/RadioGroupFieldContext.d.ts +10 -0
  340. package/dist/src/forms/RadioGroupField/RadioOptions/RadioOptions.d.ts +9 -0
  341. package/dist/src/forms/RadioGroupField/RadioOptions/index.d.ts +1 -0
  342. package/dist/src/forms/RadioGroupField/domain.d.ts +6 -0
  343. package/dist/src/forms/RadioGroupField/index.d.ts +1 -0
  344. package/dist/src/forms/RadioGroupOption/RadioGroupOption.d.ts +11 -0
  345. package/dist/src/forms/RadioGroupOption/index.d.ts +1 -0
  346. package/dist/src/forms/SelectField/CustomContainer/CustomContainer.d.ts +2 -0
  347. package/dist/src/forms/SelectField/CustomContainer/index.d.ts +1 -0
  348. package/dist/src/forms/SelectField/CustomControl/CustomControl.d.ts +5 -0
  349. package/dist/src/forms/SelectField/CustomControl/index.d.ts +1 -0
  350. package/dist/src/forms/SelectField/CustomMenu/CustomMenu.d.ts +5 -0
  351. package/dist/src/forms/SelectField/CustomMenu/index.d.ts +1 -0
  352. package/dist/src/forms/SelectField/CustomOption/CustomOption.d.ts +2 -0
  353. package/dist/{forms/MultiSelectField → src/forms/SelectField}/CustomOption/index.d.ts +0 -0
  354. package/dist/src/forms/SelectField/SelectField.d.ts +36 -0
  355. package/dist/src/forms/SelectField/SelectField.styles.d.ts +7 -0
  356. package/dist/src/forms/SelectField/domain.d.ts +5 -0
  357. package/dist/src/forms/SelectField/index.d.ts +1 -0
  358. package/dist/src/forms/SelectField/types.d.ts +22 -0
  359. package/dist/src/forms/SelectField/useSelectField.d.ts +12 -0
  360. package/dist/src/forms/TextAreaField/TextAreaField.d.ts +26 -0
  361. package/dist/src/forms/TextAreaField/index.d.ts +1 -0
  362. package/dist/src/forms/TextField/TextField.d.ts +28 -0
  363. package/dist/src/forms/TextField/index.d.ts +1 -0
  364. package/dist/src/forms/TextField/useTextField.d.ts +38 -0
  365. package/dist/src/forms/TimeField/TimeField.d.ts +9 -0
  366. package/dist/src/forms/TimeField/index.d.ts +1 -0
  367. package/dist/src/forms/WeekField/WeekField.d.ts +26 -0
  368. package/dist/src/forms/WeekField/index.d.ts +1 -0
  369. package/dist/src/forms/hooks/useCheckBoxFieldControllers.d.ts +18 -0
  370. package/dist/src/forms/hooks/useDateFieldControllers.d.ts +18 -0
  371. package/dist/src/forms/hooks/useFieldControllers.d.ts +24 -0
  372. package/dist/src/forms/hooks/useFieldId.d.ts +6 -0
  373. package/dist/src/forms/hooks/useGrowTextAreaRef.d.ts +10 -0
  374. package/dist/src/forms/hooks/useMultiSelectFieldControllers.d.ts +19 -0
  375. package/dist/src/forms/hooks/usePasswordCriteria.d.ts +2 -0
  376. package/dist/src/forms/hooks/useRadioGroupFieldControllers.d.ts +15 -0
  377. package/dist/src/forms/hooks/useRangeFieldControllers.d.ts +19 -0
  378. package/dist/src/forms/hooks/useSelectFieldControllers.d.ts +20 -0
  379. package/dist/src/forms/index.d.ts +24 -0
  380. package/dist/src/foundation/colors.d.ts +53 -0
  381. package/dist/src/foundation/constants.d.ts +8 -0
  382. package/dist/src/hooks/useIsMounted.d.ts +1 -0
  383. package/dist/src/hooks/usePortalContainer.d.ts +4 -0
  384. package/dist/src/icons.d.ts +2 -0
  385. package/dist/src/index.d.ts +10 -0
  386. package/dist/src/layout/Card/Card.d.ts +11 -0
  387. package/dist/src/layout/Card/index.d.ts +1 -0
  388. package/dist/{core → src/layout}/Flex/Flex.d.ts +2 -0
  389. package/dist/{core → src/layout}/Flex/index.d.ts +0 -0
  390. package/dist/{core → src/layout}/Flex/types.d.ts +0 -0
  391. package/dist/{core → src/layout}/Inline/Inline.d.ts +1 -0
  392. package/dist/{core → src/layout}/Inline/index.d.ts +0 -0
  393. package/dist/{core → src/layout}/Stack/Stack.d.ts +1 -0
  394. package/dist/{core → src/layout}/Stack/index.d.ts +0 -0
  395. package/dist/src/layout/index.d.ts +5 -0
  396. package/dist/{core → src/lists}/DataTable/DataTable.d.ts +3 -1
  397. package/dist/{core → src/lists}/DataTable/DataTableCell/DataTableCell.d.ts +0 -0
  398. package/dist/{core → src/lists}/DataTable/DataTableCell/index.d.ts +0 -0
  399. package/dist/{core → src/lists}/DataTable/DataTableContext.d.ts +0 -0
  400. package/dist/{core → src/lists}/DataTable/DataTableHeader.d.ts +0 -0
  401. package/dist/{core → src/lists}/DataTable/index.d.ts +0 -0
  402. package/dist/{core → src/lists}/DataTable/types.d.ts +3 -7
  403. package/dist/{core → src/lists}/DataTableEditableCell/DataTableEditableCell.d.ts +2 -1
  404. package/dist/{core → src/lists}/DataTableEditableCell/index.d.ts +0 -0
  405. package/dist/src/lists/DataTableRow/DataTableRow.d.ts +11 -0
  406. package/dist/{core → src/lists}/DataTableRow/DataTableRowActions/DataTableRowActions.d.ts +0 -0
  407. package/dist/{core → src/lists}/DataTableRow/DataTableRowActions/index.d.ts +0 -0
  408. package/dist/{core → src/lists}/DataTableRow/index.d.ts +0 -0
  409. package/dist/src/lists/index.d.ts +6 -0
  410. package/dist/src/media/Avatar/Avatar.d.ts +12 -0
  411. package/dist/src/media/Avatar/AvatarImage/AvatarImage.d.ts +9 -0
  412. package/dist/src/media/Avatar/AvatarImage/index.d.ts +1 -0
  413. package/dist/src/media/Avatar/constants.d.ts +4 -0
  414. package/dist/src/media/Avatar/index.d.ts +1 -0
  415. package/dist/src/media/Badge/Badge.d.ts +10 -0
  416. package/dist/src/media/Badge/index.d.ts +1 -0
  417. package/dist/src/media/Chip/Chip.d.ts +11 -0
  418. package/dist/src/media/Chip/constants.d.ts +8 -0
  419. package/dist/src/media/Chip/index.d.ts +1 -0
  420. package/dist/src/media/Chip/types.d.ts +1 -0
  421. package/dist/src/media/Pill/Pill.d.ts +10 -0
  422. package/dist/src/media/Pill/constants.d.ts +7 -0
  423. package/dist/src/media/Pill/index.d.ts +1 -0
  424. package/dist/src/media/Pill/types.d.ts +1 -0
  425. package/dist/src/media/index.d.ts +5 -0
  426. package/dist/src/overlay/Calendar/Calendar.d.ts +24 -0
  427. package/dist/src/overlay/Calendar/constants.d.ts +8 -0
  428. package/dist/src/overlay/Calendar/domain.d.ts +7 -0
  429. package/dist/src/overlay/Calendar/index.d.ts +1 -0
  430. package/dist/src/overlay/Calendar/types.d.ts +2 -0
  431. package/dist/src/overlay/KebabMenu/KebabMenu.d.ts +6 -0
  432. package/dist/src/overlay/KebabMenu/index.d.ts +1 -0
  433. package/dist/src/overlay/Menu/Menu.d.ts +10 -0
  434. package/dist/src/overlay/Menu/MenuButton.d.ts +8 -0
  435. package/dist/src/overlay/Menu/MenuContext.d.ts +9 -0
  436. package/dist/src/overlay/Menu/MenuItem.d.ts +7 -0
  437. package/dist/src/overlay/Menu/MenuList.d.ts +6 -0
  438. package/dist/src/overlay/Menu/index.d.ts +1 -0
  439. package/dist/src/overlay/Menu/types.d.ts +6 -0
  440. package/dist/src/overlay/Modal/Modal.d.ts +20 -0
  441. package/dist/src/overlay/Modal/ModalBody/ModalBody.d.ts +7 -0
  442. package/dist/src/overlay/Modal/ModalBody/index.d.ts +1 -0
  443. package/dist/src/overlay/Modal/ModalBody/useScrollShadow.d.ts +7 -0
  444. package/dist/src/overlay/Modal/ModalFooter/ModalFooter.d.ts +13 -0
  445. package/dist/src/overlay/Modal/ModalFooter/index.d.ts +1 -0
  446. package/dist/src/overlay/Modal/ModalHeader/ModalHeader.d.ts +8 -0
  447. package/dist/src/overlay/Modal/ModalHeader/index.d.ts +1 -0
  448. package/dist/src/overlay/Modal/index.d.ts +1 -0
  449. package/dist/src/overlay/Tooltip/Tooltip.d.ts +22 -0
  450. package/dist/src/overlay/Tooltip/TooltipOverlay/TooltipOverlay.d.ts +16 -0
  451. package/dist/src/overlay/Tooltip/TooltipOverlay/domain.d.ts +20 -0
  452. package/dist/src/overlay/Tooltip/TooltipOverlay/index.d.ts +1 -0
  453. package/dist/src/overlay/Tooltip/constants.d.ts +15 -0
  454. package/dist/src/overlay/Tooltip/index.d.ts +1 -0
  455. package/dist/src/overlay/Tooltip/types.d.ts +6 -0
  456. package/dist/src/overlay/hooks/useOnClickOutside.d.ts +5 -0
  457. package/dist/src/overlay/index.d.ts +6 -0
  458. package/dist/src/utils/date.d.ts +24 -0
  459. package/dist/src/utils/formik.d.ts +6 -0
  460. package/dist/src/utils/i18n.d.ts +1 -0
  461. package/dist/src/utils/string.d.ts +1 -0
  462. package/dist/src/utils/types.d.ts +2 -0
  463. package/package.json +16 -10
  464. package/dist/core/DataTableRow/DataTableRow.d.ts +0 -11
  465. package/dist/core/ResourceTable/ResourceTable.d.ts +0 -28
  466. package/dist/core/ResourceTable/ResourceTableContext.d.ts +0 -8
  467. package/dist/core/ResourceTable/ResourceTableHeader.d.ts +0 -12
  468. package/dist/core/ResourceTable/index.d.ts +0 -1
  469. package/dist/core/ResourceTable/types.d.ts +0 -26
  470. package/dist/core/ResourceTableRow/ResourceTableRow.d.ts +0 -13
  471. package/dist/core/ResourceTableRow/index.d.ts +0 -1
  472. package/dist/forms/MultiSelectField/CustomOption/CustomOption.d.ts +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.tsx.js","sources":["../src/layout/Flex/Flex.tsx","../src/layout/Stack/Stack.tsx","../src/layout/Inline/Inline.tsx","../src/feedback/Spinner/Spinner.tsx","../src/feedback/Spinner/constants.ts","../src/overlay/Tooltip/TooltipOverlay/domain.ts","../src/overlay/Tooltip/constants.ts","../src/hooks/useIsMounted.ts","../src/foundation/constants.ts","../src/core/Portal/Portal.tsx","../src/hooks/usePortalContainer.ts","../src/overlay/Tooltip/TooltipOverlay/TooltipOverlay.tsx","../src/overlay/Tooltip/Tooltip.tsx","../src/actions/Button/Button.tsx","../src/actions/Button/constants.ts","../icons/src/constants.ts","../icons/src/iconUtils.ts","../icons/src/components/IconArrowLeft.tsx","../icons/src/components/IconArrowRight.tsx","../src/utils/i18n.ts","../src/utils/string.ts","../src/actions/PaginationControls/PaginationControls.tsx","../icons/src/components/IconTimes.tsx","../src/feedback/Toast/Toast.tsx","../src/feedback/Toast/constants.ts","../src/lists/DataTable/DataTableContext.ts","../src/overlay/Menu/MenuContext.ts","../src/overlay/Menu/Menu.tsx","../src/overlay/Menu/MenuItem.tsx","../src/overlay/Menu/MenuButton.tsx","../src/overlay/hooks/useOnClickOutside.ts","../src/overlay/Menu/MenuList.tsx","../icons/src/components/IconEllipsisV.tsx","../src/overlay/KebabMenu/KebabMenu.tsx","../src/lists/DataTableRow/DataTableRowActions/DataTableRowActions.tsx","../src/lists/DataTableRow/DataTableRow.tsx","../icons/src/components/IconChevronUp.tsx","../icons/src/components/IconChevronDown.tsx","../src/foundation/colors.ts","../src/lists/DataTable/DataTableHeader.tsx","../src/lists/DataTable/DataTable.tsx","../src/forms/Form/FormContext.ts","../src/forms/hooks/useFieldId.ts","../src/utils/formik.ts","../src/forms/hooks/useFieldControllers.ts","../src/overlay/Modal/ModalHeader/ModalHeader.tsx","../src/overlay/Modal/Modal.tsx","../src/overlay/Modal/ModalBody/useScrollShadow.ts","../src/overlay/Modal/ModalFooter/ModalFooter.tsx","../src/utils/date.ts","../src/overlay/Calendar/Calendar.tsx","../src/overlay/Calendar/constants.ts","../src/overlay/Calendar/domain.ts","../src/forms/Label/Label.tsx","../src/forms/Label/useLabelTooltip.ts","../src/forms/Label/domain.ts","../src/forms/Caption/Caption.tsx","../icons/src/components/IconTimesOctagon.tsx","../src/forms/ErrorMessage/ErrorMessage.tsx","../src/forms/Field/Field.tsx","../src/forms/AffixContainer/AffixContainer.tsx","../src/forms/hooks/useSelectFieldControllers.ts","../src/controls/ToolbarSelect/ToolbarSelect.styles.ts","../icons/src/components/IconChevronLeft.tsx","../icons/src/components/IconChevronRight.tsx","../icons/src/components/IconCalendarAlt.tsx","../src/controls/DateFilter/DateFilterDisplay/DateFilterText/domain.ts","../src/controls/DateFilter/constants.ts","../src/controls/DateFilter/DateFilterDisplay/DateFilterText/DateFilterText.tsx","../src/controls/DateFilter/DateFilterDisplay/DateFilterDisplay.tsx","../src/controls/DateFilter/DateFilterStepper/DateFilterStepper.tsx","../src/controls/DateFilter/DateFilterStepper/domain.ts","../src/forms/FormRow/FormRow.tsx","../src/forms/TextField/useTextField.tsx","../src/forms/TextField/TextField.tsx","../src/forms/hooks/useMultiSelectFieldControllers.ts","../src/forms/RadioGroupField/RadioGroupFieldContext.ts","../src/forms/RadioGroupBoxOption/RadioGroupBoxOption.tsx","../src/forms/RadioGroupOption/RadioGroupOption.tsx","../src/forms/RadioGroupField/domain.ts","../src/forms/RadioGroupField/RadioOptions/RadioOptions.tsx","../src/forms/RadioGroupField/BoxOptions/BoxOptions.tsx","../icons/src/components/IconCheck.tsx","../src/forms/PasswordCriteria/PasswordCriteria.tsx","../icons/src/components/IconEye.tsx","../icons/src/components/IconEyeSlash.tsx","../src/forms/PasswordField/PasswordField.tsx","../src/forms/SelectField/SelectField.styles.ts","../src/forms/SelectField/CustomOption/CustomOption.tsx","../src/forms/SelectField/domain.ts","../src/forms/SelectField/CustomContainer/CustomContainer.tsx","../src/forms/SelectField/CustomControl/CustomControl.tsx","../icons/src/components/IconPlus.tsx","../src/forms/SelectField/CustomMenu/CustomMenu.tsx","../src/forms/SelectField/useSelectField.tsx","../src/forms/AsyncSelectField/CustomList/CustomList.tsx","../src/forms/hooks/useDateFieldControllers.ts","../src/forms/DatePickerCalendar/DatePickerCalendar.tsx","../src/forms/hooks/useRangeFieldControllers.ts","../src/forms/DateRangeField/FromDate/FromDate.tsx","../src/forms/DateRangeField/ToDate/ToDate.tsx","../src/forms/TimeField/TimeField.tsx","../src/forms/CurrencyField/CurrencyField.tsx","../src/forms/PercentageField/PercentageField.tsx","../src/feedback/InlineBanner/ButtonCTA/ButtonCTA.tsx","../src/feedback/InlineBanner/constants.ts","../src/feedback/InlineBanner/InlineBannerCTA/InlineBannerCTA.tsx","../icons/src/components/IconInfoCircle.tsx","../icons/src/components/IconExclaimationTriangle.tsx","../icons/src/components/IconAward.tsx","../src/feedback/InlineBanner/InlineBannerIcon/InlineBannerIcon.tsx","../src/feedback/Progress/domain.ts","../src/feedback/Progress/useProgress.ts","../src/media/Badge/Badge.tsx","../icons/src/components/IconUserSolid.tsx","../src/media/Avatar/AvatarImage/AvatarImage.tsx","../src/media/Avatar/constants.ts","../src/forms/AsyncSelectField/AsyncSelectField.tsx","../src/media/Avatar/Avatar.tsx","../src/layout/Card/Card.tsx","../src/forms/CheckboxField/CheckboxField.tsx","../src/forms/hooks/useCheckBoxFieldControllers.ts","../src/media/Chip/Chip.tsx","../src/media/Chip/constants.ts","../src/feedback/CircularProgress/CircularProgress.tsx","../src/lists/DataTable/DataTableCell/DataTableCell.tsx","../src/lists/DataTableEditableCell/DataTableEditableCell.tsx","../src/forms/DateField/DateField.tsx","../src/controls/DateFilter/DateFilter.tsx","../src/forms/DateRangeField/DateRangeField.tsx","../src/forms/Form/Form.tsx","../src/forms/FormFeedback/FormFeedback.tsx","../src/feedback/InlineBanner/InlineBanner.tsx","../src/actions/Link/Link.tsx","../src/actions/Link/constants.ts","../src/overlay/Modal/ModalBody/ModalBody.tsx","../src/forms/MultiSelectField/MultiSelectField.tsx","../src/forms/hooks/usePasswordCriteria.tsx","../src/feedback/PersistentBanner/PersistentBanner.tsx","../src/feedback/PersistentBanner/constants.ts","../src/media/Pill/Pill.tsx","../src/media/Pill/constants.ts","../src/forms/PillSelectField/PillSelectField.tsx","../src/feedback/ProgressBar/ProgressBar.tsx","../src/forms/RadioGroupField/RadioGroupField.tsx","../src/forms/hooks/useRadioGroupFieldControllers.ts","../src/controls/SegmentedControl/SegmentedControl.tsx","../src/forms/SelectField/SelectField.tsx","../src/core/SousChefProvider/SousChefProvider.tsx","../src/forms/TextAreaField/TextAreaField.tsx","../src/forms/hooks/useGrowTextAreaRef.ts","../src/actions/Toggle/Toggle.tsx","../src/controls/ToolbarSelect/ToolbarSelect.tsx","../src/forms/WeekField/WeekField.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport type { AlignItems, FlexWrap, JustifyContent, Space } from './types';\nimport styles from './flex.scss';\n\ntype Props = {\n children: React.ReactNode;\n space?: Space;\n /** It sets how each item will grow or shrink to fit the space available in its flex container. The default value is `0 1 auto` but it can be overriden. Check it out this [official doc](https://developer.mozilla.org/en-US/docs/Web/CSS/flex) to see all the possible values. */\n flex?: (string | number)[];\n alignItems?: AlignItems;\n justifyContent?: JustifyContent;\n inlineFlex?: boolean;\n direction?: 'row' | 'column';\n flexItems?: boolean;\n flexWrap?: FlexWrap;\n testId?: string;\n extraClass?: string;\n};\n\n/**\n * Flex is a internal component used by Stack and Inline. DON'T use this component outside of Sous Chef\n */\nconst Flex: React.FC<Props> = ({\n children,\n space = 20,\n flex,\n alignItems = 'flex-start',\n justifyContent = 'start',\n inlineFlex = false,\n direction = 'row',\n flexItems = false,\n flexWrap = 'nowrap',\n testId,\n extraClass\n}) => {\n const className = classNames(styles['flex'], extraClass, {\n [styles['align-start']]: alignItems === 'flex-start',\n [styles['align-end']]: alignItems === 'flex-end',\n [styles['align-center']]: alignItems === 'center',\n [styles['justify-start']]: justifyContent === 'start',\n [styles['justify-end']]: justifyContent === 'end',\n [styles['justify-center']]: justifyContent === 'center',\n [styles['justify-space-between']]: justifyContent === 'space-between',\n [styles['inline-flex']]: inlineFlex\n });\n const items = React.Children.toArray(children).filter(Boolean);\n const lastItemIndex = items.length - 1;\n\n return (\n <div\n className={className}\n style={{ flexDirection: direction, flexWrap }}\n data-testid={testId || `flex-${direction}`}\n >\n {items.map((child, i) => (\n <div\n key={i}\n style={{\n display: (flexItems && 'flex') || 'inline',\n flex: flex ? flex[i] || '0 1 auto' : '0 1 auto',\n marginRight:\n direction === 'row' && i < lastItemIndex\n ? space\n : 0,\n marginBottom:\n direction === 'column' && i < lastItemIndex\n ? space\n : 0\n }}\n >\n {child}\n </div>\n ))}\n </div>\n );\n};\n\nexport default Flex;\n","import * as React from 'react';\nimport Flex from '../Flex';\nimport type { JustifyContent, Space, AlignItems } from '../Flex/types';\n\ntype Props = {\n children: React.ReactNode;\n /** From `0` to `60` with multiples of `4`, eg. `8`, `12`, `16` and so on. */\n space?: Space;\n /** It sets how each item will grow or shrink to fit the space available in its flex container. The default value is `0 1 auto` but it can be overriden. Check it out this [official doc](https://developer.mozilla.org/en-US/docs/Web/CSS/flex) to see all the possible values. */\n flex?: (string | number)[];\n /** One of: `flex-start`, `flex-end`, `center`, `stretch` */\n alignItems?: AlignItems;\n /** One of: `start`, `end`, `center`, `space-between` */\n justifyContent?: JustifyContent;\n flexItems?: boolean;\n testId?: string;\n};\n/**\n * Layout component to easily stack elements up in a column.\n */\nconst Stack: React.FC<Props> = ({ alignItems = 'stretch', ...props }) => (\n <Flex {...props} alignItems={alignItems} direction=\"column\" />\n);\n\nexport default Stack;\n","import React from 'react';\nimport Flex from '../Flex';\nimport type {\n AlignItems,\n FlexWrap,\n JustifyContent,\n Space\n} from '../Flex/types';\n\ntype Props = {\n children: React.ReactNode;\n /** From `0` to `60` with multiples of `4`, eg. `8`, `12`, `16` and so on. */\n space?: Space;\n /** It sets how each item will grow or shrink to fit the space available in its flex container. The default value is `0 1 auto` but it can be overriden. Check it out this [official doc](https://developer.mozilla.org/en-US/docs/Web/CSS/flex) to see all the possible values. */\n flex?: (string | number)[];\n /** One of: `flex-start`, `flex-end`, `center`, `stretch` */\n alignItems?: AlignItems;\n /** One of: `start`, `end`, `center`, `space-between` */\n justifyContent?: JustifyContent;\n inlineFlex?: boolean;\n flexWrap?: FlexWrap;\n testId?: string;\n};\n/**\n * Layout component to easily line elements up in a row.\n */\nconst Inline: React.FC<Props> = (props) => <Flex {...props} direction=\"row\" />;\n\nexport default Inline;\n","import React from 'react';\nimport classnames from 'classnames';\nimport { SPINNER_THEMES } from './constants';\nimport styles from './spinner.scss';\n\ntype Props = {\n size?: number;\n theme?: 'mint' | 'disabled' | 'contrast' | 'pride';\n block?: boolean;\n testId?: string;\n};\nconst Spinner: React.FC<Props> = ({\n size = 28,\n theme = SPINNER_THEMES.MINT,\n block = false,\n testId = 'spinner'\n}) => {\n return (\n <div className={classnames({ [styles['spinner--block']]: block })}>\n <svg\n className={styles['spinner']}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 66 66\"\n data-testid={testId}\n >\n <defs>\n <linearGradient id=\"prideGradient\">\n <stop offset=\"0\" stopColor=\"#000000\" />\n <stop offset=\"0.0500\" stopColor=\"#000000\" />\n <stop offset=\"0.0501\" stopColor=\"#ffafc7\" />\n <stop offset=\"0.15\" stopColor=\"#ffafc7\" />\n <stop offset=\"0.1501\" stopColor=\"#73d7ee\" />\n <stop offset=\"0.25\" stopColor=\"#73d7ee\" />\n <stop offset=\"0.2501\" stopColor=\"#613915\" />\n <stop offset=\"0.35\" stopColor=\"#613915\" />\n <stop offset=\"0.3501\" stopColor=\"#ffffff\" />\n <stop offset=\"0.45\" stopColor=\"#ffffff\" />\n <stop offset=\"0.4501\" stopColor=\"#e50000\" />\n <stop offset=\"0.55\" stopColor=\"#e50000\" />\n <stop offset=\"0.5501\" stopColor=\"#ff8d00\" />\n <stop offset=\"0.65\" stopColor=\"#ff8d00\" />\n <stop offset=\"0.6501\" stopColor=\"#ddee00\" />\n <stop offset=\"0.75\" stopColor=\"#ddee00\" />\n <stop offset=\"0.7501\" stopColor=\"#028121\" />\n <stop offset=\"0.85\" stopColor=\"#028121\" />\n <stop offset=\"0.8501\" stopColor=\"#004cff\" />\n <stop offset=\"0.95\" stopColor=\"#004cff\" />\n <stop offset=\"0.9501\" stopColor=\"#760088\" />\n <stop offset=\"1\" stopColor=\"#760088\" />\n </linearGradient>\n </defs>\n\n <circle\n className={classnames(\n styles['path'],\n styles[`path--${theme}`]\n )}\n fill=\"none\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n />\n </svg>\n </div>\n );\n};\n\nexport default Spinner;\n","export const SPINNER_THEMES = {\n MINT: 'mint' as const,\n DISABLED: 'disabled' as const,\n CONTRAST: 'contrast' as const,\n PRIDE: 'pride' as const\n};\n","import { Placement, ActualPlacement } from '../types';\nimport {\n TOOLTIP_PLACEMENT,\n SPACE,\n PADDING,\n BUFFER,\n ARROW_WIDTH,\n ARROW_MARGIN\n} from '../constants';\n\ntype Position = {\n width: number;\n left: number;\n top: number;\n};\n\nexport const calculatePosition = (\n placement: Placement,\n anchorPosition: DOMRect,\n tooltipRectPosition?: DOMRect\n): {\n overlay?: Position;\n arrow?: ArrowPosition;\n actualPlacement: ActualPlacement;\n} => {\n if (!tooltipRectPosition) {\n return {\n overlay: undefined,\n arrow: undefined,\n actualPlacement: {\n placement,\n top: 0\n }\n };\n }\n\n const actualPlacement = getActualPlacement(\n placement,\n anchorPosition,\n tooltipRectPosition.height\n );\n const overlayPosition = calculateOverlayPosition(\n actualPlacement,\n anchorPosition,\n tooltipRectPosition.width\n );\n const arrowPosition =\n overlayPosition &&\n calculateArrowPosition(\n actualPlacement.placement,\n overlayPosition,\n anchorPosition,\n tooltipRectPosition\n );\n\n return {\n overlay: updateMisalignedOverlay(\n overlayPosition,\n arrowPosition,\n tooltipRectPosition\n ),\n arrow: arrowPosition,\n actualPlacement\n };\n};\n\nexport const updateMisalignedOverlay = (\n overlayPosition: Position,\n arrowPosition: ArrowPosition,\n tooltipRectPosition: DOMRect\n): Position => {\n let left = overlayPosition.left;\n // Checking when there is a horizontal scrool and the arrow is not aligned with the tooltip in the LEFT side\n if (overlayPosition.left > arrowPosition.left) {\n left = arrowPosition.left - ARROW_MARGIN;\n }\n // Checking when there is a horizontal scrool and the arrow is not aligned with the tooltip in the RIGHT side\n else if (\n overlayPosition.left + tooltipRectPosition.width <\n arrowPosition.left + ARROW_WIDTH\n ) {\n left =\n arrowPosition.left -\n tooltipRectPosition.width +\n ARROW_WIDTH +\n ARROW_MARGIN;\n }\n return { ...overlayPosition, left };\n};\n\nexport const calculateOverlayPosition = (\n actualPlacement: ActualPlacement,\n anchorPosition: DOMRect,\n tooltipWidth: number = 156\n): Position => {\n // some maths to align the tooltip with whatever you just hovered over (the 'target')\n const position: Position = {\n width: tooltipWidth - PADDING * 2,\n left: 0,\n top: 0\n };\n\n // center align the tooltip by taking both the target and tooltip widths into account\n position.left =\n anchorPosition.width / 2 +\n anchorPosition.left -\n tooltipWidth / 2 -\n BUFFER;\n position.left = Math.max(SPACE, position.left); // make sure it doesn't poke off the left side of the page\n position.left = Math.min(\n position.left,\n window.innerWidth - tooltipWidth - SPACE\n ); // or off the right\n\n position.top = actualPlacement.top;\n\n return position;\n};\n\nexport const getActualPlacement = (\n placement: Placement,\n anchorPosition: DOMRect,\n tooltipHeight: number\n): ActualPlacement => {\n const topPosition = anchorPosition.top - tooltipHeight - SPACE;\n const bottomPosition = anchorPosition.top + anchorPosition.height + SPACE;\n\n let actualPlacement: Placement;\n\n if (placement === TOOLTIP_PLACEMENT.BOTTOM) {\n actualPlacement =\n bottomPosition + tooltipHeight < window.innerHeight\n ? TOOLTIP_PLACEMENT.BOTTOM\n : TOOLTIP_PLACEMENT.TOP;\n } else {\n actualPlacement =\n topPosition <= 0 ? TOOLTIP_PLACEMENT.BOTTOM : TOOLTIP_PLACEMENT.TOP;\n }\n const top =\n actualPlacement === TOOLTIP_PLACEMENT.BOTTOM\n ? bottomPosition\n : topPosition;\n\n return {\n placement: actualPlacement,\n top\n };\n};\n\ntype ArrowPosition = {\n left: number;\n top: number;\n};\nexport const calculateArrowPosition = (\n placement: Placement,\n tooltipPosition: Position,\n anchorPosition: DOMRect,\n tooltipRectPosition?: DOMRect\n): ArrowPosition => {\n let top;\n if (placement === TOOLTIP_PLACEMENT.BOTTOM) {\n top = (tooltipPosition?.top || 0) - 3;\n } else {\n top = tooltipPosition.top + (tooltipRectPosition?.height || 0) - 8;\n }\n return {\n left: anchorPosition.width / 2 + anchorPosition.left - ARROW_WIDTH / 2,\n top\n };\n};\n","export const TOOLTIP_THEME = {\n BLACK: 'black' as 'black',\n WHITE: 'white' as 'white'\n};\n\nexport const TOOLTIP_PLACEMENT = {\n BOTTOM: 'bottom' as 'bottom',\n TOP: 'top' as 'top'\n};\n\nexport const TOOLTIP_DELAY_ON_CLOSE = 350;\nexport const TOOLTIP_DELAY_ON_OPEN = 600;\nexport const SPACE = 14;\nexport const PADDING = 12;\nexport const BUFFER = 2;\nexport const ARROW_WIDTH = 10;\nexport const ARROW_MARGIN = 5;\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport const useIsMounted = (): (() => boolean) => {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return function cleanup(): void {\n isMounted.current = false;\n };\n }, []);\n const checker = useCallback((): boolean => {\n return isMounted.current;\n }, []);\n return checker;\n};\n","/** This is to help us centralize all the zIndexes layers in here so we avoid side effects with wrong styles */\nexport const Z_INDEX_LAYERS = {\n BASE: 1,\n MODAL: 100,\n MENU: 200,\n TOOLTIP: 300\n};\n\nexport const FONT_FAMILY = \"'Proxima Nova', sans-serif\";\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePortalContainer } from '../../hooks/usePortalContainer';\n\ntype Props = {\n children: React.ReactNode;\n};\nconst Portal: React.FC<Props> = ({ children }) => {\n const container = usePortalContainer();\n\n if (!container) {\n return null;\n }\n return ReactDOM.createPortal(children, container);\n};\n\nexport default Portal;\n","import { useState, useEffect } from 'react';\n\n/**\n * Used when you need to create a DOM element and remove it after the component unmounts\n */\nexport const usePortalContainer = (): HTMLElement | undefined => {\n const [container, setContainer] = useState<HTMLElement | undefined>();\n\n useEffect(() => {\n const containerElement = document.createElement('div');\n containerElement.setAttribute('style', `position: absolute;`);\n document.body?.prepend(containerElement);\n setContainer(containerElement);\n\n return () => {\n containerElement.remove();\n };\n }, []);\n\n return container;\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport styles from './tooltip-overlay.scss';\nimport classnames from 'classnames';\nimport { Placement, TooltipTheme } from '../types';\nimport { calculatePosition } from './domain';\nimport Stack from '../../../layout/Stack';\nimport { useIsMounted } from '../../../hooks/useIsMounted';\nimport { TOOLTIP_THEME, TOOLTIP_PLACEMENT } from '../constants';\nimport { Z_INDEX_LAYERS } from '../../../foundation/constants';\nimport Portal from '../../../core/Portal/Portal';\n\ntype Props = {\n theme: TooltipTheme;\n children: React.ReactNode;\n anchorPosition: DOMRect;\n placement: Placement;\n header?: React.ReactNode;\n onClose: () => void;\n onFocusIn: () => void;\n onFocusOut: () => void;\n extraClass?: string;\n testId?: string;\n};\nconst TooltipOverlay: React.FC<Props> = ({\n children,\n anchorPosition,\n placement,\n theme,\n header,\n onClose,\n onFocusIn,\n onFocusOut,\n extraClass,\n testId\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const checkIsMounted = useIsMounted();\n\n useEffect(() => {\n setTimeout(() => {\n checkIsMounted() && setIsVisible(true);\n }, 50);\n }, [checkIsMounted]);\n\n useEffect(() => {\n window.addEventListener('scroll', onClose);\n return () => {\n window.removeEventListener('scroll', onClose);\n };\n }, []);\n\n const tooltipRectPosition = tooltipRef?.current?.getBoundingClientRect();\n const position = calculatePosition(\n placement,\n anchorPosition,\n tooltipRectPosition\n );\n\n return (\n <Portal>\n <div role=\"tooltip\" data-testid={testId}>\n <div\n ref={tooltipRef}\n style={{\n ...position.overlay,\n zIndex: Z_INDEX_LAYERS.TOOLTIP\n }}\n className={classnames(\n styles['tooltip-overlay'],\n extraClass,\n {\n [styles['tooltip-overlay--visible']]: isVisible,\n [styles['tooltip-overlay--black-theme']]:\n theme === TOOLTIP_THEME.BLACK,\n [styles['tooltip-overlay--white-theme']]:\n theme === TOOLTIP_THEME.WHITE\n }\n )}\n onMouseEnter={onFocusIn}\n onMouseLeave={onFocusOut}\n >\n <Stack space={8}>\n {header && (\n <div className={styles['tooltip-overlay__header']}>\n {header}\n </div>\n )}\n {children}\n </Stack>\n </div>\n <div\n className={classnames(\n styles['tooltip-overlay-arrow'],\n extraClass,\n {\n [styles['tooltip-overlay-arrow--visible']]:\n isVisible,\n [styles['tooltip-overlay-arrow--top']]:\n position.actualPlacement.placement ===\n TOOLTIP_PLACEMENT.TOP,\n [styles['tooltip-overlay-arrow--bottom']]:\n position.actualPlacement.placement ===\n TOOLTIP_PLACEMENT.BOTTOM,\n [styles['tooltip-overlay-arrow--black-theme']]:\n theme === TOOLTIP_THEME.BLACK,\n [styles['tooltip-overlay-arrow--white-theme']]:\n theme === TOOLTIP_THEME.WHITE\n }\n )}\n style={{\n ...position.arrow,\n zIndex: Z_INDEX_LAYERS.TOOLTIP\n }}\n onMouseEnter={onFocusIn}\n />\n </div>\n </Portal>\n );\n};\n\nexport default TooltipOverlay;\n","import React, {\n useState,\n useEffect,\n useRef,\n Fragment,\n forwardRef\n} from 'react';\nimport styles from './tooltip.scss';\nimport classnames from 'classnames';\nimport TooltipOverlay from './TooltipOverlay';\nimport { Placement, TooltipTheme } from './types';\nimport { useIsMounted } from '../../hooks/useIsMounted';\nimport {\n TOOLTIP_THEME,\n TOOLTIP_PLACEMENT,\n TOOLTIP_DELAY_ON_OPEN,\n TOOLTIP_DELAY_ON_CLOSE\n} from './constants';\nimport { RefType } from '../../utils/types';\n\ntype Props = {\n theme?: TooltipTheme;\n /** It defines the overlay position on the screen. The component might not use the value defined in here as it will place the tooltip on the best place based on the anchor position on the screen. */\n placement?: Placement;\n /** It can be text or a JSX. */\n overlay?: React.ReactNode;\n /** Used on the `white` theme when there is a need of adding a header to the tooltip. */\n header?: React.ReactNode;\n /** If `true` it allow the overlay to keep open if the user hover it so, user can iteract with it (click on a link or copy the text). */\n delayOnClose?: boolean;\n /** If `true` it will add a delay on opening the overlay, if the user is not hovering the anchor it will not open the overlay. */\n delayOnOpen?: boolean;\n extraClass?: string;\n onClose?: () => void;\n onVisibleChange?: (isVisible: boolean) => void;\n children: React.ReactElement;\n testId?: string;\n};\n\nconst Tooltip = (\n {\n theme = TOOLTIP_THEME.BLACK,\n placement = TOOLTIP_PLACEMENT.BOTTOM,\n delayOnClose = false,\n delayOnOpen = false,\n overlay,\n header,\n extraClass,\n onClose,\n onVisibleChange,\n children,\n testId\n }: Props,\n forwardedRef: RefType<HTMLDivElement>\n) => {\n const checkIsMounted = useIsMounted();\n const internalRef = useRef<HTMLDivElement>(null);\n const containerRef = forwardedRef || internalRef;\n const [isVisible, setIsVisible] = useState(false);\n const isFocusingOnTooltip = useRef(false);\n const isFocusingOnAnchor = useRef(false);\n\n useEffect(() => {\n if (isVisible && !header && !overlay) {\n setIsVisible(false);\n }\n }, [isVisible, header, overlay]);\n\n const updateOverlayVisibility = (shouldShow: boolean) => {\n setIsVisible(shouldShow);\n if (!shouldShow) {\n onClose?.();\n }\n if (onVisibleChange) {\n onVisibleChange(shouldShow);\n }\n };\n\n const onAnchorFocusIn = () => {\n isFocusingOnAnchor.current = true;\n };\n const onAnchorFocusOut = () => {\n isFocusingOnAnchor.current = false;\n };\n const openTooltip = () => {\n onAnchorFocusIn();\n if (delayOnOpen) {\n setTimeout(() => {\n checkIsMounted() &&\n isFocusingOnAnchor.current &&\n updateOverlayVisibility(true);\n }, TOOLTIP_DELAY_ON_OPEN);\n } else {\n updateOverlayVisibility(true);\n }\n };\n\n const closeTooltip = () => updateOverlayVisibility(false);\n const closeTooltipWithDelay = () => {\n onAnchorFocusOut();\n if (delayOnClose) {\n setTimeout(() => {\n checkIsMounted() &&\n !isFocusingOnTooltip.current &&\n closeTooltip();\n }, TOOLTIP_DELAY_ON_CLOSE);\n } else {\n closeTooltip();\n }\n };\n const anchorElements = React.Children.count(children);\n\n if ((!overlay && !header) || anchorElements === 0) {\n return children;\n }\n\n const anchorPosition =\n typeof containerRef !== 'function' &&\n containerRef?.current?.getBoundingClientRect();\n\n const Overlay = () =>\n isVisible && anchorPosition ? (\n <TooltipOverlay\n anchorPosition={anchorPosition}\n placement={placement}\n theme={theme}\n header={\n theme === TOOLTIP_THEME.BLACK && !header ? overlay : header\n }\n onClose={closeTooltip}\n onFocusIn={() => {\n isFocusingOnTooltip.current = true;\n }}\n onFocusOut={() => {\n isFocusingOnTooltip.current = false;\n closeTooltip();\n }}\n extraClass={extraClass}\n testId={testId}\n >\n {theme === TOOLTIP_THEME.BLACK && !header ? null : overlay}\n </TooltipOverlay>\n ) : null;\n\n if (React.Children.count(children) === 1) {\n return (\n <Fragment>\n {React.Children.map(children, (child: React.ReactElement) => {\n return React.cloneElement(child, {\n onMouseEnter: openTooltip,\n onMouseLeave: closeTooltipWithDelay,\n onFocus: openTooltip,\n onBlur: closeTooltipWithDelay,\n ref: containerRef\n });\n })}\n <Overlay />\n </Fragment>\n );\n }\n\n return (\n <div\n className={classnames(styles['tooltip'])}\n onMouseEnter={openTooltip}\n onMouseLeave={closeTooltipWithDelay}\n onFocus={openTooltip}\n onBlur={closeTooltipWithDelay}\n ref={containerRef}\n >\n {children}\n <Overlay />\n </div>\n );\n};\n\nexport default forwardRef<HTMLDivElement, Props>(Tooltip);\n","import React, { Children, forwardRef } from 'react';\nimport classnames from 'classnames';\nimport Inline from '../../layout/Inline';\nimport Spinner from '../../feedback/Spinner';\nimport Tooltip from '../../overlay/Tooltip';\nimport styles from './button.scss';\nimport {\n BUTTON_SIZES,\n BUTTON_THEMES,\n BUTTON_TYPES,\n BUTTON_TARGETS\n} from './constants';\nimport type {\n ButtonTheme,\n ButtonSize,\n ButtonType,\n ButtonTarget\n} from './types';\nimport { RefType } from '../../utils/types';\nimport { SPINNER_THEMES } from '../../feedback/Spinner/constants';\n\ntype Props = {\n children: React.ReactNode;\n type?: ButtonType;\n /** It controls the button theme */\n theme?: ButtonTheme;\n disabled?: boolean;\n onClick?: React.MouseEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n id?: string;\n /**\n * @deprecated use the `size='min-width-100'` instead\n */\n wide?: boolean;\n loading?: boolean;\n /** This will show a black tooltip when the user hover the button */\n title?: string;\n href?: string;\n target?: ButtonTarget;\n testId?: string;\n /**\n * This prop controls how the button grows having the following options:<br/>\n * *full-width*: Will grow to fill the size of the container it is placed within.\n * *min-width-100*: It will have a `min-width: 100` style. It is used for CTA buttons in forms and modals.\n */\n size?: ButtonSize;\n};\n\nconst Button = (\n {\n children,\n type = BUTTON_TYPES.BUTTON,\n theme = BUTTON_THEMES.DEFAULT,\n disabled = false,\n onClick,\n onKeyDown,\n id,\n wide,\n loading,\n title,\n href,\n target = BUTTON_TARGETS.SELF,\n testId,\n size\n }: Props,\n ref: RefType<HTMLButtonElement | HTMLAnchorElement>\n) => {\n const contrastSpinner: string[] = [\n BUTTON_THEMES.PRIMARY,\n BUTTON_THEMES.DANGER,\n BUTTON_THEMES.UPSELL,\n BUTTON_THEMES.MARKETING,\n BUTTON_THEMES.LINK_CONTRAST\n ];\n\n const childrenArr = Children.toArray(children);\n const isIconOnly =\n childrenArr.length === 1 && typeof childrenArr[0] != 'string';\n\n return (\n <Tooltip overlay={title}>\n <ButtonElement\n id={id}\n onClick={onClick}\n onKeyDown={onKeyDown}\n className={classnames(styles['button'], {\n [styles['button--default']]:\n theme === BUTTON_THEMES.DEFAULT,\n [styles['button--primary']]:\n theme === BUTTON_THEMES.PRIMARY,\n [styles['button--danger']]: theme === BUTTON_THEMES.DANGER,\n [styles['button--upsell']]: theme === BUTTON_THEMES.UPSELL,\n [styles['button--marketing']]:\n theme === BUTTON_THEMES.MARKETING,\n [styles['button--hollow']]: theme === BUTTON_THEMES.HOLLOW,\n [styles['button--hollow-contrast']]:\n theme === BUTTON_THEMES.HOLLOW_CONTRAST,\n [styles['button--link-primary']]:\n theme === BUTTON_THEMES.LINK_PRIMARY,\n [styles['button--link-danger']]:\n theme === BUTTON_THEMES.LINK_DANGER,\n [styles['button--link-upsell']]:\n theme === BUTTON_THEMES.LINK_UPSELL,\n [styles['button--link-toolbar']]:\n theme === BUTTON_THEMES.LINK_TOOLBAR,\n [styles['button--link-contrast']]:\n theme === BUTTON_THEMES.LINK_CONTRAST,\n [styles['button--link-icon']]:\n theme === BUTTON_THEMES.LINK_ICON,\n [styles['button--loading']]: loading,\n [styles['button--icon-only']]: isIconOnly,\n [styles['button--size-min-width-100']]:\n wide || size === BUTTON_SIZES.MIN_WIDTH_100,\n [styles['button--size-full-width']]:\n size === BUTTON_SIZES.FULL_WIDTH\n })}\n type={type}\n disabled={disabled || loading}\n href={href}\n ref={ref}\n target={target}\n data-testid={testId}\n >\n <Inline space={8} alignItems=\"center\">\n {children}\n </Inline>\n {loading && (\n <div className={styles['button__spinner']}>\n <Spinner\n theme={\n contrastSpinner.includes(theme)\n ? SPINNER_THEMES.CONTRAST\n : SPINNER_THEMES.DISABLED\n }\n />\n </div>\n )}\n </ButtonElement>\n </Tooltip>\n );\n};\n\ntype ButtonElementProps = {\n id?: string;\n onClick?: React.MouseEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n className: string;\n type?: ButtonType;\n disabled?: boolean;\n children: React.ReactNode;\n href?: string;\n target: ButtonTarget;\n};\nconst ButtonElement = forwardRef<\n HTMLButtonElement | HTMLAnchorElement,\n ButtonElementProps\n>(\n (\n {\n id,\n onClick,\n onKeyDown,\n className,\n type,\n disabled,\n href,\n target,\n children,\n ...rest\n }: ButtonElementProps,\n ref: RefType<HTMLButtonElement | HTMLAnchorElement>\n ) => {\n const commonProps = {\n id: id,\n onClick: onClick,\n onKeyDown: onKeyDown,\n className,\n disabled\n };\n if (href) {\n return (\n <a\n {...commonProps}\n {...rest}\n href={href}\n target={target}\n aria-disabled={disabled}\n ref={ref as RefType<HTMLAnchorElement>}\n >\n {children}\n </a>\n );\n }\n return (\n <button\n {...commonProps}\n {...rest}\n type={type}\n ref={ref as RefType<HTMLButtonElement>}\n >\n {children}\n </button>\n );\n }\n);\n\nexport default forwardRef<HTMLButtonElement | HTMLAnchorElement, Props>(Button);\n","export const BUTTON_SIZES = {\n FULL_WIDTH: 'full-width' as const,\n MIN_WIDTH_100: 'min-width-100' as const\n};\n\nexport const BUTTON_THEMES = {\n DEFAULT: 'default' as const,\n PRIMARY: 'primary' as const,\n DANGER: 'danger' as const,\n UPSELL: 'upsell' as const,\n MARKETING: 'marketing' as const,\n HOLLOW: 'hollow' as const,\n HOLLOW_CONTRAST: 'hollow-contrast' as const,\n LINK_PRIMARY: 'link-primary' as const,\n LINK_DANGER: 'link-danger' as const,\n LINK_UPSELL: 'link-upsell' as const,\n LINK_TOOLBAR: 'link-toolbar' as const,\n LINK_CONTRAST: 'link-contrast' as const,\n LINK_ICON: 'link-icon' as const\n};\n\nexport const BUTTON_TYPES = {\n BUTTON: 'button' as const,\n SUBMIT: 'submit' as const,\n RESET: 'reset' as const\n};\n\nexport const BUTTON_TARGETS = {\n BLANK: '_blank' as const,\n SELF: '_self' as const\n};\n","export const ICON_SIZES = {\n small: '12px',\n medium: '16px',\n default: '20px',\n large: '24px'\n};\n","import { ICON_SIZES } from './constants';\nimport { IconSize } from './types';\n\ntype Params = {\n size?: IconSize;\n color?: string;\n styles?: Object;\n};\nexport const getIconStyles = ({\n size = 'default',\n color = 'currentColor',\n styles = {}\n}: Params): Object => ({\n width: ICON_SIZES[size],\n height: ICON_SIZES[size],\n verticalAlign: 'middle',\n fill: color,\n ...styles\n});\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconArrowLeft = forwardRef(\n (\n { testId = 'icon-arrow-left', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"m10.293 18.574.277-.277a.47.47 0 0 0 0-.664l-6.972-6.969H18.28a.47.47 0 0 0 .469-.469v-.39a.47.47 0 0 0-.469-.47H3.598l6.972-6.972a.47.47 0 0 0 0-.664l-.277-.277a.47.47 0 0 0-.664 0L1.383 9.664a.47.47 0 0 0 0 .664l8.246 8.242c.187.188.48.188.664.004Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconArrowLeft.displayName = 'IconArrowLeft';\nexport default IconArrowLeft;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconArrowRight = forwardRef(\n (\n { testId = 'icon-arrow-right', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"m9.707 1.426-.277.277a.47.47 0 0 0 0 .664l6.972 6.969H1.72a.47.47 0 0 0-.469.469v.39c0 .258.21.47.469.47h14.683L9.43 17.636a.47.47 0 0 0 0 .664l.277.277a.47.47 0 0 0 .664 0l8.246-8.242a.47.47 0 0 0 0-.664L10.371 1.43a.466.466 0 0 0-.664-.004Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconArrowRight.displayName = 'IconArrowRight';\nexport default IconArrowRight;\n","// This is basicaly a copy from `Util/localization.js` so we can remove the dependency from webapp until we find a better way of dealing with translations\nexport const getLocalizedString = (key: string): string => {\n // Just a hacky way to see if we are in the webapp and have the Shifts var defined\n // @ts-ignore: TODO: Fix it\n if (!window.Shifts) {\n return getLocalTranslation(key);\n }\n return getWebAppTranslation(key);\n};\n\nconst getWebAppTranslation = (key: string): string => {\n // @ts-ignore: TODO: Fix it\n declare var Shifts: any;\n // If the Shifts is not present, return the key capitalized, for example, `default.next` => `Next`\n if (!Shifts || Shifts?.Lang?.cache === undefined) {\n return getLocalTranslation(key);\n }\n\n var [moduleName, id] = key.split('.');\n if (\n Shifts.Lang.cache === undefined ||\n Shifts.Lang.cache[moduleName] === undefined ||\n Shifts.Lang.cache[moduleName][id] === undefined\n ) {\n return key;\n }\n return Shifts.Lang.cache[moduleName][id];\n};\n\n// If the Shifts is not present, return the key capitalized, for example, `default.next` => `Next`\nconst getLocalTranslation = (key: string): string => {\n const translationParts = key.split('.');\n if (translationParts.length > 1) {\n const literal = translationParts[1];\n // It converts this `main.START_TYPING` into this `Start typing`\n return (\n literal.charAt(0).toUpperCase() +\n literal.slice(1).toLowerCase().replace(/_/g, ' ')\n );\n }\n return key;\n};\n","export const capitalizeFirstLetter = (text: string) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\n","import React from 'react';\nimport Button from '../Button';\nimport IconArrowLeft from '@7shifts/sous-chef-icons/IconArrowLeft';\nimport IconArrowRight from '@7shifts/sous-chef-icons/IconArrowRight';\nimport styles from './pagination-controls.scss';\nimport { getLocalizedString as __ } from '../../utils/i18n';\nimport { capitalizeFirstLetter } from '../../utils/string';\n\ntype Props = {\n hasPrevious?: boolean;\n hasNext?: boolean;\n onPreviousClick: () => void;\n onNextClick: () => void;\n testId?: string;\n};\n\n/**\n * `PaginationControls` are two buttons side by side.\n */\nconst PaginationControls: React.FC<Props> = ({\n hasPrevious = true,\n hasNext = true,\n onPreviousClick,\n onNextClick,\n testId\n}) => {\n return (\n <div className={styles['pagination-controls']} data-testid={testId}>\n <Button\n disabled={!hasPrevious}\n onClick={onPreviousClick}\n title={capitalizeFirstLetter(__('default.PREVIOUS'))}\n >\n <IconArrowLeft size=\"small\" />\n </Button>\n <Button\n disabled={!hasNext}\n onClick={onNextClick}\n title={capitalizeFirstLetter(__('default.next'))}\n >\n <IconArrowRight size=\"small\" />\n </Button>\n </div>\n );\n};\n\nexport default PaginationControls;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconTimes = forwardRef(\n (\n { testId = 'icon-times', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"m19.457 18.143-8.135-8.145 8.135-8.175a.312.312 0 0 0 0-.442l-.884-.884a.312.312 0 0 0-.442 0L9.996 8.672 1.86.497a.312.312 0 0 0-.441 0l-.884.884a.312.312 0 0 0 0 .442L8.67 9.998.534 18.143a.312.312 0 0 0 0 .442l.884.884c.122.122.32.122.441 0l8.137-8.145 8.135 8.145c.122.122.32.122.442 0l.884-.884a.312.312 0 0 0 0-.442Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconTimes.displayName = 'IconTimes';\nexport default IconTimes;\n","import classNames from 'classnames';\nimport React from 'react';\nimport {\n ToastContainer as ReactToastifyContainer,\n toast as _toast,\n Slide,\n ToastOptions\n} from 'react-toastify';\nimport { Button } from '../../actions';\nimport IconTimes from '@7shifts/sous-chef-icons/IconTimes';\nimport type { Theme } from './types';\nimport { TOAST_THEME, TOAST_CONTAINER_ID } from './constants';\n\nimport 'react-toastify/dist/ReactToastify.css';\nimport styles from './toast.scss';\n\nexport const toast = (\n text: string,\n theme: Theme = TOAST_THEME.DEFAULT,\n options: ToastOptions = {}\n) => {\n _toast(text, {\n className: classNames(styles['toast'], {\n [styles['toast--danger']]: theme === TOAST_THEME.DANGER\n }),\n containerId: TOAST_CONTAINER_ID,\n ...options\n });\n};\n\ntype CloseButtonProps = { closeToast?: () => void };\nconst CloseButton = ({ closeToast }: CloseButtonProps) => (\n <Button theme=\"link-contrast\" onClick={closeToast}>\n <IconTimes />\n </Button>\n);\n\ntype Props = { containerId?: string };\nexport const ToastContainer = ({ containerId = TOAST_CONTAINER_ID }: Props) => (\n <ReactToastifyContainer\n bodyClassName={styles['toast__text']}\n hideProgressBar\n draggable={false}\n transition={Slide}\n position=\"bottom-center\"\n closeButton={<CloseButton />}\n containerId={containerId}\n enableMultiContainer\n />\n);\n","export const TOAST_THEME = {\n DEFAULT: 'default' as const,\n DANGER: 'danger' as const\n};\n\nexport const TOAST_CONTAINER_ID = 'sous-chef-toast';\n","import { createContext, useContext } from 'react';\nimport type { Column } from './types';\n\nexport type DataTableContextType = {\n columns?: Column[];\n showActionMenu?: boolean;\n numberOfRows: number;\n hasVerticalBorders?: boolean;\n};\n\nconst initialValue: DataTableContextType = {\n columns: [],\n numberOfRows: 0\n};\nconst Context = createContext<DataTableContextType>(initialValue);\n\nexport const useDataTableContext = (): DataTableContextType => {\n const context = useContext(Context);\n\n if (!context) {\n throw Error(\n 'useDataTableContext should be used withing `DataTable`. Probably you are using `DataTableRow` without a `DataTable` component'\n );\n }\n return context;\n};\n\nexport default Context;\n","import React from 'react';\n\nexport type MenuContextType = {\n onToggleMenu: () => void;\n isOpen: boolean;\n triggerRef: any;\n};\n\nconst MenuContext: React.Context<MenuContextType> =\n React.createContext<MenuContextType>({\n onToggleMenu: () => {},\n isOpen: false,\n triggerRef: undefined\n });\n\nexport const useMenuContext = (): MenuContextType =>\n React.useContext(MenuContext);\n\nexport default MenuContext;\n","import React, { useState, useRef } from 'react';\nimport MenuContext from './MenuContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n/**\n * STATUS: IN DRAFT (Don't use this component yet)\n * It is working to cover the ResourceTable actions menu but there are some functionalities pending such as `dividers` and `direction`.\n */\nconst Menu: React.FC<Props> = ({ children }) => {\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef();\n\n return (\n <MenuContext.Provider\n value={{\n isOpen,\n onToggleMenu: () => setIsOpen(!isOpen),\n triggerRef\n }}\n >\n {children}\n </MenuContext.Provider>\n );\n};\n\nexport default Menu;\n","import React from 'react';\nimport { useMenuContext } from './MenuContext';\nimport styles from './menu.scss';\n\ntype Props = {\n onClick: (e: React.MouseEvent | React.KeyboardEvent) => void;\n children: React.ReactNode;\n};\n\nconst MenuItem: React.FC<Props> = ({ onClick, children }) => {\n const { onToggleMenu } = useMenuContext();\n const handleClick = (e: React.MouseEvent | React.KeyboardEvent) => {\n onToggleMenu();\n onClick(e);\n e.stopPropagation();\n };\n return (\n <li\n className={styles['list-item']}\n onClick={handleClick}\n onKeyPress={handleClick}\n tabIndex={0}\n role=\"menuitem\"\n >\n {children}\n </li>\n );\n};\n\nexport default MenuItem;\n","import React from 'react';\nimport Button from '../../actions/Button';\nimport { useMenuContext } from './MenuContext';\n\ntype ButtonTheme =\n | 'default'\n | 'primary'\n | 'danger'\n | 'upsell'\n | 'marketing'\n | 'hollow'\n | 'link-primary'\n | 'link-danger'\n | 'link-upsell'\n | 'link-toolbar'\n | 'link-contrast'\n | 'link-icon';\n\ntype Props = {\n children: React.ReactNode;\n theme?: ButtonTheme;\n};\n\n// @ts-ignore: This will be implmented soon\nconst MenuButton: React.FC<Props> = ({ theme = 'link-icon', children }) => {\n const { onToggleMenu, triggerRef } = useMenuContext();\n\n return (\n <Button\n onClick={(e) => {\n onToggleMenu();\n e.stopPropagation();\n }}\n theme={theme}\n ref={triggerRef}\n >\n {children}\n </Button>\n );\n};\n\nexport default MenuButton;\n","import React from 'react';\n\ntype Event = MouseEvent | TouchEvent;\n\n// Determine if click was inside of provided element\nfunction isClickInside<T = HTMLElement>(\n ref: { current: T | null },\n event: Event\n): boolean {\n return (\n !ref.current ||\n // @ts-ignore: `.contains` should exist on T type\n (event.target instanceof Node && ref.current.contains(event.target))\n );\n}\n\n// Make sure to wrap your callback function in useCallback before passing so that it doesn't rerender\nexport default function useOnClickOutside<T = HTMLElement>(\n ref: { current: T | null },\n cb: (event?: Event) => void\n) {\n React.useEffect(() => {\n const listener = (event: Event) => {\n if (isClickInside<T>(ref, event)) {\n return;\n }\n\n cb(event);\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, cb]);\n}\n","import React, { useRef, useEffect, useCallback, useState } from 'react';\nimport classnames from 'classnames';\nimport useOnClickOutside from '../hooks/useOnClickOutside';\nimport { useMenuContext } from './MenuContext';\nimport styles from './menu.scss';\nimport Portal from '../../core/Portal/Portal';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst MenuList: React.FC<Props> = ({ children }) => {\n const paneElement = useRef<HTMLUListElement>(null);\n const { isOpen, onToggleMenu, triggerRef } = useMenuContext();\n const [position, setPosition] = useState({});\n\n const clickOutisideCallback = useCallback(() => {\n if (isOpen) {\n onToggleMenu();\n }\n }, [isOpen]);\n\n useOnClickOutside(paneElement, clickOutisideCallback);\n\n useEffect(() => {\n const triggerPosition = triggerRef.current.getBoundingClientRect();\n const panePosition = paneElement.current?.getBoundingClientRect();\n const paneWidth = panePosition?.width || 160;\n\n const pos = {\n left: triggerPosition.left + triggerPosition.width - paneWidth,\n top:\n triggerPosition.top +\n window.scrollY +\n triggerPosition.height +\n 3\n };\n setPosition(pos);\n }, [isOpen, triggerRef]);\n\n return (\n <Portal>\n <ul\n className={classnames(styles['list'], {\n [styles['list--active']]: isOpen\n })}\n role=\"menu\"\n style={position}\n ref={paneElement}\n >\n {children}\n </ul>\n </Portal>\n );\n};\n\nexport default MenuList;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconEllipsisV = forwardRef(\n (\n { testId = 'icon-ellipsis-v', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 2.188C8 3.34 8.892 4.27 9.997 4.27c1.104 0 1.996-.931 1.996-2.083 0-1.153-.892-2.084-1.996-2.084C8.892.104 8 1.035 8 2.188Zm1.997 5.729c1.104 0 1.996.93 1.996 2.083 0 1.152-.892 2.083-1.996 2.083C8.892 12.083 8 11.153 8 10c0-1.152.892-2.083 1.997-2.083Zm0 11.979C8.892 19.896 8 18.965 8 17.813c0-1.153.892-2.084 1.997-2.084 1.104 0 1.996.931 1.996 2.084 0 1.152-.892 2.083-1.996 2.083Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconEllipsisV.displayName = 'IconEllipsisV';\nexport default IconEllipsisV;\n","import React from 'react';\nimport Menu from '../Menu/Menu';\nimport MenuItem from '../Menu/MenuItem';\nimport MenuButton from '../Menu/MenuButton';\nimport MenuList from '../Menu/MenuList';\nimport IconEllipsisV from '@7shifts/sous-chef-icons/IconEllipsisV';\nimport { MenuAction } from '../Menu/types';\n\ntype Props = {\n actions: MenuAction[];\n};\nconst KebabMenu = ({ actions }: Props) => {\n return (\n <Menu>\n <MenuButton>\n <IconEllipsisV />\n </MenuButton>\n <MenuList>\n {actions.map((action: MenuAction, index: number) => (\n <MenuItem\n onClick={action.onAction}\n key={action.action || index}\n >\n {action.label}\n </MenuItem>\n ))}\n </MenuList>\n </Menu>\n );\n};\n\nexport default KebabMenu;\n","import React from 'react';\nimport classnames from 'classnames';\nimport type { Action } from '../../DataTable/types';\nimport styles from '../data-table-row.scss';\nimport { Button } from '../../../actions';\nimport KebabMenu from '../../../overlay/KebabMenu';\n\ntype Props = {\n actions: Action[];\n};\nconst ActionsCell = ({ actions }: Props) => {\n const kebabMenuItems = actions.filter(\n (action) => action.showInKebab === undefined || action.showInKebab\n );\n\n const sideActions = actions.filter(\n (action) => action.showInKebab === false\n );\n\n return (\n <div\n className={classnames(styles['item-column'], styles['actions'])}\n data-testid=\"data-table-dropdown-menu\"\n >\n {sideActions.length > 0 &&\n sideActions.map((action, index) => (\n <Button\n key={action.action || index}\n onClick={action.onAction}\n theme=\"link-icon\"\n {...(action.showInKebab === false\n ? action.buttonProps\n : {})}\n >\n {action.label}\n </Button>\n ))}\n {kebabMenuItems.length > 0 && (\n <KebabMenu actions={kebabMenuItems} />\n )}\n </div>\n );\n};\n\nexport default ActionsCell;\n","import React, { forwardRef } from 'react';\nimport classnames from 'classnames';\nimport { useDataTableContext } from '../DataTable/DataTableContext';\nimport type { Action } from '../DataTable/types';\nimport styles from './data-table-row.scss';\nimport { RefType } from '../../utils/types';\nimport DataTableRowActions from './DataTableRowActions';\n\ntype Props = {\n children: React.ReactNode;\n onClick?: () => void;\n isSelected?: boolean;\n actions?: Action[];\n hasDefaultPadding?: boolean;\n} & Omit<React.HTMLProps<HTMLDivElement>, 'css'>;\nconst DataTableRowComponent = (\n {\n children,\n onClick,\n isSelected = false,\n actions = [],\n hasDefaultPadding = true,\n ...nativeDivProps\n }: Props,\n ref: RefType<HTMLDivElement>\n) => {\n const { columns, showActionMenu, hasVerticalBorders } =\n useDataTableContext();\n const styleNames = classnames(styles['item'], {\n [styles['clickable']]: onClick,\n [styles['selected']]: isSelected\n });\n\n const renderColumn = (columnElement: React.ReactNode, index: number) => {\n const column = columns?.[index];\n const isRightAligned = column?.isRightAligned;\n return (\n <div\n className={classnames(\n {\n [styles['item-column--right-align']]: isRightAligned,\n [styles['item-column--vertical-border']]:\n hasVerticalBorders,\n [styles['item-column--default-padding']]:\n hasDefaultPadding\n },\n styles['item-column']\n )}\n style={{\n flex: column?.size || 1\n }}\n key={index}\n data-testid=\"data-table-column\"\n >\n {columnElement}\n </div>\n );\n };\n return (\n // We do not want hitting tab to focus a row\n // eslint-disable-next-line jsx-a11y/interactive-supports-focus\n <div\n {...nativeDivProps}\n className={styleNames}\n onClick={onClick ? onClick : undefined}\n onKeyPress={onClick ? onClick : undefined}\n data-testid=\"data-table-row\"\n role=\"row\"\n ref={ref}\n >\n {React.Children.map(children, (child, index) =>\n renderColumn(child, index)\n )}\n {showActionMenu && <DataTableRowActions actions={actions} />}\n </div>\n );\n};\n\nconst DataTableRow = forwardRef<HTMLDivElement, Props>(DataTableRowComponent);\n\nexport default DataTableRow;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconChevronUp = forwardRef(\n (\n { testId = 'icon-chevron-up', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.502 5.222 1.873 13.43a.783.783 0 0 0-.206.537c0 .202.073.393.206.536l.256.275a.671.671 0 0 0 .997 0L10 7.38l6.874 7.397c.133.143.31.222.499.222a.676.676 0 0 0 .498-.222l.256-.275a.787.787 0 0 0 .206-.536.787.787 0 0 0-.206-.537l-7.63-8.208a.67.67 0 0 0-.996 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconChevronUp.displayName = 'IconChevronUp';\nexport default IconChevronUp;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconChevronDown = forwardRef(\n (\n { testId = 'icon-chevron-down', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.502 14.778 1.873 6.57a.783.783 0 0 1-.206-.537c0-.202.073-.393.206-.536l.256-.275a.671.671 0 0 1 .997 0L10 12.62l6.874-7.397A.676.676 0 0 1 17.374 5c.188 0 .365.079.498.222l.256.275a.787.787 0 0 1 .206.536.787.787 0 0 1-.206.537l-7.63 8.208a.67.67 0 0 1-.996 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconChevronDown.displayName = 'IconChevronDown';\nexport default IconChevronDown;\n","/*\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\nTHIS IS A JAVASCRIPT CONVERSION OF _colors.scss\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n*/\n\nexport const WHITE: '#ffffff' = '#ffffff';\nexport const BLACK: '#000000' = '#000000';\n\n// TANGERINE (oranges)\nexport const TANGERINE100: '#fef1ed' = '#fef1ed';\nexport const TANGERINE200: '#fdd5c8' = '#fdd5c8';\nexport const TANGERINE300: '#fcab91' = '#fcab91';\nexport const TANGERINE400: '#fb7448' = '#fb7448'; // Base\nexport const TANGERINE500: '#e16840' = '#e16840';\nexport const TANGERINE600: '#96452b' = '#96452b';\n\n// EGGPLANT (purples)\nexport const EGGPLANT100: '#f0f3fb' = '#f0f3fb';\nexport const EGGPLANT200: '#d3dbf4' = '#d3dbf4';\nexport const EGGPLANT300: '#a7b7ea' = '#a7b7ea';\nexport const EGGPLANT400: '#6d87dd' = '#6d87dd'; // Base\nexport const EGGPLANT500: '#6179c6' = '#6179c6';\nexport const EGGPLANT600: '#415184' = '#415184';\n\n// MINT (teals)\nexport const MINT100: '#ecfaf8' = '#ecfaf8';\nexport const MINT200: '#c6f1eb' = '#c6f1eb';\nexport const MINT300: '#8de4d7' = '#8de4d7';\nexport const MINT400: '#3abda9' = '#3abda9'; // Base\nexport const MINT500: '#35ac9a' = '#35ac9a';\nexport const MINT600: '#277e71' = '#277e71';\n\n// RADISH (reds)\nexport const RADISH100: '#fcf0f0' = '#fcf0f0';\nexport const RADISH200: '#f7d1d1' = '#f7d1d1';\nexport const RADISH300: '#f0a3a3' = '#f0a3a3';\nexport const RADISH400: '#e76767' = '#e76767'; // Base\nexport const RADISH500: '#cf5c5c' = '#cf5c5c';\nexport const RADISH600: '#8a3d3d' = '#8a3d3d';\n\n// BLUEBERRY (blues)\nexport const BLUEBERRY100: '#f6fdff' = '#f6fdff';\nexport const BLUEBERRY200: '#ceecf5' = '#ceecf5';\nexport const BLUEBERRY300: '#9cd9eb' = '#9cd9eb';\nexport const BLUEBERRY400: '#5bc0de' = '#5bc0de'; // Base\nexport const BLUEBERRY500: '#51acc7' = '#51acc7';\nexport const BLUEBERRY600: '#367385' = '#367385';\n\n//BANANA (yellows)\nexport const BANANA100: '#fff9ed' = '#fff9ed';\nexport const BANANA200: '#ffeec9' = '#ffeec9';\nexport const BANANA300: '#ffdd92' = '#ffdd92';\nexport const BANANA400: '#ffc74a' = '#ffc74a'; // Base\nexport const BANANA500: '#e5b242' = '#e5b242';\nexport const BANANA600: '#99772c' = '#99772c';\n\n// GREYS\nexport const GREY100: '#F3F3F3' = '#F3F3F3';\nexport const GREY200: '#D5D5D5' = '#D5D5D5';\nexport const GREY300: '#949494' = '#949494';\nexport const GREY400: '#767676' = '#767676';\nexport const GREY500: '#464646' = '#464646'; // Body Text (Base)\nexport const GREY600: '#323232' = '#323232';\n\nexport const COLORS = {\n TANGERINE: 'tangerine',\n EGGPLANT: 'eggplant',\n MINT: 'mint',\n RADISH: 'radish',\n BLUEBERRY: 'blueberry',\n BANANA: 'banana'\n};\n\nexport type Color =\n | typeof WHITE\n | typeof BLACK\n | typeof TANGERINE100\n | typeof TANGERINE200\n | typeof TANGERINE300\n | typeof TANGERINE400\n | typeof TANGERINE500\n | typeof TANGERINE600\n | typeof EGGPLANT100\n | typeof EGGPLANT200\n | typeof EGGPLANT300\n | typeof EGGPLANT400\n | typeof EGGPLANT500\n | typeof EGGPLANT600\n | typeof MINT100\n | typeof MINT200\n | typeof MINT300\n | typeof MINT400\n | typeof MINT500\n | typeof MINT600\n | typeof RADISH100\n | typeof RADISH200\n | typeof RADISH300\n | typeof RADISH400\n | typeof RADISH500\n | typeof RADISH600\n | typeof BLUEBERRY100\n | typeof BLUEBERRY200\n | typeof BLUEBERRY300\n | typeof BLUEBERRY400\n | typeof BLUEBERRY500\n | typeof BLUEBERRY600\n | typeof BANANA100\n | typeof BANANA200\n | typeof BANANA300\n | typeof BANANA400\n | typeof BANANA500\n | typeof BANANA600\n | typeof GREY100\n | typeof GREY200\n | typeof GREY300\n | typeof GREY400\n | typeof GREY500\n | typeof GREY600;\n","import React from 'react';\nimport type { Column, Sort, SortDirection } from './types';\nimport classnames from 'classnames';\nimport styles from './data-table.scss';\nimport IconChevronUp from '@7shifts/sous-chef-icons/IconChevronUp';\nimport IconChevronDown from '@7shifts/sous-chef-icons/IconChevronDown';\nimport { GREY400 } from '../../foundation/colors';\n\ntype SortOrder = {\n ASC: 'asc';\n DESC: 'desc';\n};\nconst SORT_ORDER: SortOrder = {\n ASC: 'asc',\n DESC: 'desc'\n};\n\ntype Props = {\n columns: Column[];\n onSort?: (sort: Sort) => void;\n showActionMenu?: boolean;\n};\nconst DataTableHeader: React.FC<Props> = ({\n columns,\n onSort,\n showActionMenu\n}) => {\n //Handling the case where the columns is used only to define the size\n const haveLabels = columns.find(\n (column) => column.label && column.label !== ''\n );\n if (!haveLabels) {\n return null;\n }\n\n const handleSort = (column: Column) => {\n const nextDirection = getNextSort(column);\n if (onSort) {\n onSort({\n columnName: column.name,\n direction: nextDirection\n });\n }\n };\n return (\n <div className={styles['header']}>\n {columns.map((column: Column) => {\n const isSortable = column.isSortable;\n const sortDir = column.currentSort;\n const isRightAligned = column.isRightAligned;\n\n return (\n <div\n className={classnames({\n [styles['header-item']]: true,\n [styles['header-item--sortable']]: isSortable,\n [styles['header-item--right-align']]: isRightAligned\n })}\n style={{\n flex: column.size || 1\n }}\n key={column.name}\n onClick={() => isSortable && handleSort(column)}\n onKeyPress={() => isSortable && handleSort(column)}\n role=\"columnheader\"\n tabIndex={0}\n >\n {column.label}{' '}\n {isSortable && (\n <span className={styles['header-sort-icon']}>\n <IconSort sortDirection={sortDir} />\n </span>\n )}\n </div>\n );\n })}\n {showActionMenu && (\n <div\n className={classnames(\n styles['header-item'],\n styles['header-item--action']\n )}\n />\n )}\n </div>\n );\n};\n\nconst getNextSort = (column: Column): SortDirection => {\n switch (column.currentSort) {\n case SORT_ORDER.ASC:\n return null;\n case SORT_ORDER.DESC:\n return SORT_ORDER.ASC;\n default:\n return SORT_ORDER.DESC;\n }\n};\n\ntype IconSortProps = {\n sortDirection?: SortDirection;\n};\nconst IconSort = ({ sortDirection }: IconSortProps) => {\n const sortDir = sortDirection || null;\n return (\n <div style={{ display: 'inline-flex', flexDirection: 'column' }}>\n {sortDir !== 'desc' && (\n <IconChevronUp size=\"small\" color={GREY400} />\n )}\n {sortDir !== 'asc' && (\n <span style={{ marginTop: '-4px' }}>\n <IconChevronDown size=\"small\" color={GREY400} />\n </span>\n )}\n </div>\n );\n};\n\nexport default DataTableHeader;\n","import React from 'react';\nimport DataTableRow from '../DataTableRow';\nimport DataTableHeader from './DataTableHeader';\nimport PaginationControls from '../../actions/PaginationControls';\nimport Spinner from '../../feedback/Spinner';\nimport Context from './DataTableContext';\nimport type { Column, CustomComponent, Item, Sort } from './types';\nimport styles from './data-table.scss';\n\ntype Props<T> = {\n /** Each element represents a row and each key of the object represents a column */\n items: Item<T>[];\n /** For each column element, the `name` property should match the key on `items` */\n columns?: Column[];\n /** A custom component for customizing how the each item is rendered. It pass as props: `item`, `index`, `columnSizes` and `columns` */\n itemComponent?: React.ComponentType<CustomComponent<T>>;\n maxHeight?: number;\n /** Used for pagination */\n hasPrevious?: boolean;\n /** Used for pagination */\n hasNext?: boolean;\n /** Used for pagination */\n onPreviousClick?: () => void;\n /** Used for pagination */\n onNextClick?: () => void;\n isLoading?: boolean;\n /** It is fired when a sorted column is clicked to be sorted */\n onSort?: (sort: Sort) => void;\n showActionMenu?: boolean;\n /** Will render footer component if not null - expects a custom RowItem component */\n footerComponent?: React.ReactNode;\n /** Will render vertical borders between columns if true */\n hasVerticalBorders?: boolean;\n /** Used to override the default data-testid */\n testId?: string;\n};\nconst DataTable = <T extends unknown>({\n items,\n columns,\n itemComponent,\n maxHeight,\n hasPrevious = true,\n hasNext = true,\n onPreviousClick,\n onNextClick,\n onSort,\n isLoading = false,\n showActionMenu = false,\n footerComponent,\n hasVerticalBorders = false,\n testId\n}: Props<T>) => {\n const RowItem = itemComponent || DefaultItemComponent;\n let conditionalStyles = {};\n if (maxHeight !== null) {\n conditionalStyles = {\n ...conditionalStyles,\n maxHeight,\n overflowY: 'auto'\n };\n }\n const numberOfRows = items.length + (footerComponent ? 1 : 0);\n\n return (\n <Context.Provider\n value={{\n columns,\n showActionMenu,\n numberOfRows,\n hasVerticalBorders\n }}\n >\n {columns && (\n <DataTableHeader\n columns={columns}\n onSort={onSort}\n showActionMenu={showActionMenu}\n />\n )}\n <div\n className={styles['body']}\n style={conditionalStyles}\n role=\"table\"\n data-testid={testId}\n >\n {isLoading && <Spinner block />}\n {!isLoading &&\n items.map((item, index) => (\n <RowItem\n item={item}\n columns={columns}\n key={index}\n index={index}\n />\n ))}\n {footerComponent && !isLoading && (\n <div className={styles['footer']} data-testid=\"footer\">\n {footerComponent}\n </div>\n )}\n </div>\n {onPreviousClick && onNextClick && (hasPrevious || hasNext) && (\n <div\n className={styles['pagination-controls']}\n data-testid=\"pagination-controls\"\n >\n <PaginationControls\n hasPrevious={hasPrevious && !isLoading}\n hasNext={hasNext && !isLoading}\n onPreviousClick={onPreviousClick}\n onNextClick={onNextClick}\n />\n </div>\n )}\n </Context.Provider>\n );\n};\n\nconst DefaultItemComponent = ({ columns, item }: CustomComponent<any>) => {\n const headingKeys = columns\n ? columns.map((column) => column.name)\n : Object.keys(item);\n\n const columnsToShow = headingKeys.filter(\n (key: string) => key !== 'actions'\n );\n\n return (\n <DataTableRow actions={item.actions}>\n {columnsToShow.map((headingKey) => (\n <div key={headingKey}>{item[headingKey] || ''}</div>\n ))}\n </DataTableRow>\n );\n};\n\nexport default DataTable;\n","import React, { createContext, useContext } from 'react';\nimport { FormikType } from './types';\n\nexport type FormContextType = {\n formik?: FormikType;\n};\n\nconst Context: React.Context<FormContextType> = createContext<FormContextType>(\n {}\n);\n\nexport const useFormContext = (): FormContextType => {\n const context = useContext(Context);\n\n return context || {};\n};\n\nexport default Context;\n","import { useMemo } from 'react';\n\ntype Props = {\n name: string;\n id?: string;\n};\nexport const useFieldId = ({ name, id: inputId }: Props): string => {\n //Using useMemo so it does not generate a different id every time the component rerenders\n const id = useMemo(\n () => (inputId ? inputId : `${name}-${Math.random()}`),\n [inputId, name]\n );\n return id;\n};\n","import { FormikType } from '../forms';\n\nexport const getFormikState = (name: string, formik?: FormikType) => {\n if (formik === undefined) {\n return null;\n }\n\n const formikPath = getFormikArrayPath(name);\n if (formikPath.length === 0) {\n return null;\n }\n\n const formikLatestLevel = formikPath.reduce(\n (acc: any, path) => {\n return {\n touched: acc.touched?.[path],\n error: acc.error?.[path],\n value: acc.value?.[path]\n };\n },\n { touched: formik.touched, error: formik.errors, value: formik.values }\n );\n\n return {\n error: formikLatestLevel.touched ? formikLatestLevel.error : undefined,\n value: formikLatestLevel.value\n };\n};\n\nexport const getFormikArrayPath = (name: string): string[] =>\n name.split(/[^a-zA-Z0-9]/).filter(Boolean);\n","import { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport { getFormikState } from '../../utils/formik';\nimport React from 'react';\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement;\n\ntype FieldControls = {\n id: string;\n error?: React.ReactNode;\n value?: string;\n onChange: (e: React.ChangeEvent<InputElement>) => void;\n onBlur: (e: React.ChangeEvent<InputElement>) => void;\n onFocus: (e: React.FocusEvent<InputElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<InputElement>) => void;\n};\n\ntype Props = {\n name: string;\n id?: string;\n value?: string;\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n onKeyDown?: (key: string) => void;\n error?: React.ReactNode;\n type?: 'text' | 'currency';\n};\nexport const useFieldControllers = ({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n error,\n type = 'text'\n}: Props): FieldControls => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n let controllers: FieldControls = {\n id,\n error,\n value,\n onChange: (e: React.ChangeEvent<InputElement>) =>\n onChange && onChange(e.target.value),\n onBlur: (e: React.ChangeEvent<InputElement>) =>\n onBlur && onBlur(e.target.value),\n onFocus: (e: React.FocusEvent<InputElement>) =>\n onFocus && onFocus(e.target.value),\n onKeyDown: (e: React.KeyboardEvent<InputElement>) =>\n onKeyDown && onKeyDown(e.key)\n };\n\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n const currencyBlur = () => {\n if (type === 'currency') {\n formik.setFieldValue(name, Number(value).toFixed(2));\n }\n };\n controllers = {\n ...controllers,\n error: error !== undefined ? controllers.error : formikState.error,\n value: value !== undefined ? controllers.value : formikState.value,\n onChange: onChange\n ? controllers.onChange\n : (e: React.ChangeEvent<InputElement>) =>\n formik.setFieldValue(name, e.target.value),\n onBlur: onBlur\n ? (e) => {\n onBlur && onBlur(e.target.value);\n currencyBlur();\n }\n : () => {\n formik.setFieldTouched(name);\n currencyBlur();\n }\n };\n }\n return controllers;\n};\n","import React from 'react';\nimport styles from './modal-header.scss';\nimport Inline from '../../../layout/Inline';\nimport Stack from '../../../layout/Stack';\nimport Button from '../../../actions/Button';\nimport IconTimes from '@7shifts/sous-chef-icons/IconTimes';\n\ntype Props = {\n header?: React.ReactNode;\n subHeader?: React.ReactNode;\n onClose: () => void;\n};\n\nconst ModalHeader = ({ header, subHeader, onClose }: Props) => {\n return (\n <Stack space={12}>\n <Inline flex={[1]} alignItems=\"center\">\n <span className={styles['header']}>{header}</span>\n <Button theme=\"link-icon\" onClick={onClose}>\n <IconTimes />\n </Button>\n </Inline>\n {subHeader && (\n <div className={styles['sub-header']}>{subHeader}</div>\n )}\n </Stack>\n );\n};\n\nexport default ModalHeader;\n","import React from 'react';\nimport ReactModal from 'react-modal';\nimport { Z_INDEX_LAYERS } from '../../foundation/constants';\nimport styles from './modal.scss';\nimport ModalHeader from './ModalHeader';\n\ntype Props = {\n children: React.ReactNode;\n header?: React.ReactNode;\n subHeader?: React.ReactNode;\n onClose: () => void;\n zIndex?: number;\n /** This is the ID for the root element so when the modal is open it only allows iteracting with the modal when pressing tab. Can also use `Modal.setAppElement('#root')` in te main app once. */\n rootElementId?: string;\n width?: number;\n height?: number;\n maxWidth?: number;\n shouldReturnFocusAfterClose?: boolean;\n testId?: string;\n};\n\nconst Modal = ({\n children,\n header,\n subHeader,\n onClose,\n zIndex = Z_INDEX_LAYERS.MODAL,\n rootElementId,\n width = 500,\n height,\n maxWidth,\n shouldReturnFocusAfterClose = true,\n testId\n}: Props) => {\n const style = {\n content: {\n width,\n height,\n maxWidth\n },\n overlay: {\n zIndex\n }\n };\n return (\n <ReactModal\n isOpen\n testId={testId}\n shouldCloseOnEsc\n shouldCloseOnOverlayClick={false}\n shouldReturnFocusAfterClose={shouldReturnFocusAfterClose}\n onRequestClose={onClose}\n style={style}\n closeTimeoutMS={200}\n contentLabel=\"Modal\"\n appElement={\n (rootElementId && document.getElementById(rootElementId)) ||\n undefined\n }\n overlayClassName={{\n base: styles['overlay'],\n afterOpen: styles['overlay--after-open'],\n beforeClose: styles['overlay--before-close']\n }}\n className={{\n base: styles['content'],\n afterOpen: styles['content--after-open'],\n beforeClose: styles['content--before-close']\n }}\n >\n <ModalHeader\n header={header}\n subHeader={subHeader}\n onClose={onClose}\n />\n {children}\n </ReactModal>\n );\n};\n\n// The user can set the main app root id so when the modal is open it only allows iteracting with the modal when pressing tab\nModal.setAppElement = (rootElement: string | HTMLElement) => {\n ReactModal.setAppElement(rootElement);\n};\n\nexport default Modal;\n","import { useEffect, useRef, useState } from 'react';\nimport { RefType } from '../../../utils/types';\n\nconst THRESHOLD = 20;\n\ntype UseScrollShadow = {\n ref: RefType<HTMLDivElement>;\n showScrollShadow: boolean;\n};\nexport const useScrollShadow = (): UseScrollShadow => {\n const ref = useRef<HTMLDivElement>(null);\n const [showScrollShadow, setShowScrollShadow] = useState(false);\n\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const modalBody = ref.current;\n\n /**\n * Once we support only Safari 13 and above we can use ResizeObserver\n * https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver\n */\n if (modalBody.offsetHeight > THRESHOLD) {\n setShowScrollShadow(true);\n }\n }, []);\n\n return {\n ref,\n showScrollShadow\n };\n};\n","import React from 'react';\nimport styles from './modal-footer.scss';\nimport Inline from '../../../layout/Inline';\nimport classnames from 'classnames';\nimport { Button } from '../../../actions';\n\ntype Props = {\n children?: React.ReactNode;\n /** This will streamline the button creation and all the design pattern applied on buttons with a modal footer. If you want more flexibility to build the footer you can pass a `children` instead of using the `actions` prop. */\n actions?: {\n primary?: React.ReactElement;\n secondary?: React.ReactElement;\n tertiary?: React.ReactElement;\n };\n testId?: string;\n};\n\nconst ModalFooter = ({ children, actions, testId }: Props) => {\n if (actions) {\n const primaryButton = updateButtonProps(actions.primary, {\n theme: actions?.primary?.props.theme || 'primary'\n });\n const secondaryButton = updateButtonProps(actions.secondary, {\n theme: actions?.secondary?.props.theme || 'default'\n });\n const tertiaryButton = updateButtonProps(actions.tertiary, {\n theme: actions?.tertiary?.props.theme || 'link-primary'\n });\n\n return (\n <FooterContainer testId={testId}>\n <Inline justifyContent=\"space-between\">\n <div\n className={classnames({\n [styles['tertiary-container']]:\n tertiaryButton &&\n tertiaryButton.props.theme.startsWith('link')\n })}\n >\n {tertiaryButton || <div />}\n </div>\n <Inline space={12}>\n {secondaryButton}\n {primaryButton}\n </Inline>\n </Inline>\n </FooterContainer>\n );\n }\n\n return <FooterContainer>{children}</FooterContainer>;\n};\n\nconst updateButtonProps = (\n button: React.ReactElement | undefined,\n newProps: Object\n): React.ReactElement | null => {\n if (!button) {\n return null;\n }\n if (button.type !== Button) {\n return button;\n }\n return React.cloneElement(button, {\n wide: true,\n ...newProps\n });\n};\n\ntype FooterContainerProps = {\n children: React.ReactNode;\n testId?: string;\n};\nconst FooterContainer = ({ children, testId }: FooterContainerProps) => {\n const childrenItens = React.Children.toArray(children);\n const hasCustomAlignment =\n childrenItens.length === 1 && (childrenItens[0] as any).type === Inline;\n return (\n <div className={styles['modal-footer']} data-testid={testId}>\n <Inline\n justifyContent=\"end\"\n space={12}\n flex={hasCustomAlignment ? [1] : undefined}\n >\n {children}\n </Inline>\n </div>\n );\n};\n\nexport default ModalFooter;\n","import { DateUtils, Modifier } from 'react-day-picker';\nimport dateFnsFormat from 'date-fns/format';\nimport dateFnsParse from 'date-fns/parse';\nimport startOfDay from 'date-fns/startOfDay';\nimport { getLocalizedString as __ } from './i18n';\n\n// This is `any` because dateFnsParse uses some sort of Locale type but DayPickerInput uses string\ntype Locale = any;\n\nexport function parseDate(\n str: string,\n format: string,\n locale?: Locale\n): Date | undefined {\n const parsed = dateFnsParse(str, format, new Date(), { locale });\n if (str.length === format.length && DateUtils.isDate(parsed)) {\n return parsed;\n }\n return undefined;\n}\n\nexport function formatDate(\n date: Date,\n format: string,\n locale?: Locale\n): string {\n return dateFnsFormat(date, format, { locale });\n}\n\nexport function setToMidnight(date: Date): Date {\n return date && startOfDay(date);\n}\n\nexport function getStartOfWeek(date: Date, weekIndex: number): Date {\n const d = new Date(date);\n const firstDay = d.getDate() - d.getDay() + weekIndex;\n const firstDayAdjusted = firstDay > d.getDate() ? firstDay - 7 : firstDay;\n return new Date(d.setDate(firstDayAdjusted));\n}\n\nexport function getEndOfWeek(date: Date, weekIndex: number): Date {\n const startOfWeek = getStartOfWeek(date, weekIndex);\n const endDay = startOfWeek.getDate() + 6;\n return new Date(startOfWeek.setDate(endDay));\n}\n\nexport function createWeekRange(\n date: Date,\n weekStart: WeekStart\n): FullDateRange {\n return {\n start: getStartOfWeek(date, weekStart),\n end: getEndOfWeek(date, weekStart)\n };\n}\n\nexport const DAYS = [\n __('time.sunday'),\n __('time.monday'),\n __('time.tuesday'),\n __('time.wednesday'),\n __('time.thursday'),\n __('time.friday'),\n __('time.saturday')\n];\n\nexport const MONTH_NAMES = [\n __('time.january'),\n __('time.february'),\n __('time.march'),\n __('time.april'),\n __('time.may'),\n __('time.june'),\n __('time.july'),\n __('time.august'),\n __('time.september'),\n __('time.october'),\n __('time.november'),\n __('time.december')\n];\n\nexport type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\nexport type FullDateRange = { start: Date; end: Date };\nexport type DateRange = { start?: Date; end?: Date };\nexport type BlockedDays = Modifier | Modifier[];\nexport type DateRangeError = string | { [K in keyof DateRange]: string };\n","import React, { MutableRefObject, useState } from 'react';\nimport '../../forms/DatePickerCalendar/date-picker-calendar.scss';\nimport DayPicker, { DayModifiers } from 'react-day-picker';\nimport 'react-day-picker/lib/style.css';\nimport dayStyles from '../../forms/DatePickerCalendar/date-picker-calendar.scss';\nimport weekStyles from '../../forms/WeekField/week-field.scss';\nimport Portal from '../../core/Portal';\nimport {\n BlockedDays,\n createWeekRange,\n DAYS,\n FullDateRange,\n MONTH_NAMES,\n setToMidnight,\n WeekStart\n} from '../../utils/date';\nimport { RangeModifier } from 'react-day-picker/types/Modifiers';\nimport useOnClickOutside from '../hooks/useOnClickOutside';\nimport { Z_INDEX_LAYERS } from '../../foundation/constants';\nimport { CALENDAR_MODE, CALENDAR_PLACEMENT } from './constants';\nimport { calculateCalendarPosition } from './domain';\nimport { CalendarMode, CalendarPlacement } from './types';\n\ntype Props = {\n mode?: CalendarMode;\n /** Note that if the calendar is not able to fit in the selected position,\n * it will override this selection and select the one that fits in the window. */\n position?: CalendarPlacement;\n weekStart?: WeekStart;\n selected?: Date;\n onSelect: (selected: Date) => void;\n onClickOutside: () => void;\n /** It disable some dates so the user can't click on them. Refer to this\n * [doc](https://react-day-picker-v7.netlify.app/api/DayPicker#disabledDays) to see what\n * values you can use. */\n disabledDays?: BlockedDays;\n anchorRef: MutableRefObject<HTMLElement | null>;\n testId?: string;\n};\n\n/**Calendar overlay component*/\nconst Calendar: React.FC<Props> = ({\n mode = CALENDAR_MODE.DAY,\n position = CALENDAR_PLACEMENT.BOTTOM,\n weekStart = 0,\n selected,\n onSelect,\n onClickOutside,\n disabledDays,\n anchorRef,\n testId\n}) => {\n const [calendarRef, setCalendarRef] = useState<HTMLDivElement | null>(null);\n const style = mode === CALENDAR_MODE.DAY ? dayStyles : weekStyles;\n const anchorNode = anchorRef.current;\n useOnClickOutside({ current: calendarRef }, (event) => {\n //Check if outside click is inside the trigger ref\n if (!anchorRef.current?.contains(event?.srcElement as Node)) {\n onClickOutside();\n }\n });\n\n const weekRange: FullDateRange | undefined = selected\n ? createWeekRange(selected, weekStart)\n : undefined;\n\n const selectedRange: RangeModifier | undefined = weekRange && {\n from: weekRange.start,\n to: weekRange.end\n };\n\n const handleSelect = (day: Date) => {\n const selectedDate = setToMidnight(day);\n if (mode === CALENDAR_MODE.DAY) {\n onSelect(selectedDate);\n } else {\n const weekRange = createWeekRange(selectedDate, weekStart);\n onSelect(weekRange.start);\n }\n //For better UX, delay closing the calendar modal for 100ms as the UI will confirm\n // user selected by changing selected data/date range background colour\n setTimeout(() => {\n onClickOutside();\n }, 100);\n };\n\n if (!anchorNode) {\n return null;\n }\n\n const anchorPosition = anchorNode.getBoundingClientRect();\n\n const calendarPosition = calculateCalendarPosition(\n position,\n anchorPosition,\n calendarRef?.getBoundingClientRect()\n );\n\n return (\n <Portal>\n <div className={style.overlayWrapper}>\n <div\n className={style.overlay}\n ref={(ref) => setCalendarRef(ref)}\n style={{\n ...calendarPosition,\n zIndex: Z_INDEX_LAYERS.MODAL\n }}\n data-testid={testId}\n >\n <DayPicker\n format=\"MM/dd/yyyy\"\n /* @ts-ignore: styles types are generic */\n classNames={style}\n onDayClick={(\n day: Date,\n activeModifiers: DayModifiers\n ) => {\n const isDateDisabled = Object.keys(\n activeModifiers\n ).find((modifier) => modifier.includes('disabled'));\n if (!Boolean(isDateDisabled)) {\n handleSelect(day);\n }\n }}\n selectedDays={\n mode === CALENDAR_MODE.DAY\n ? selected\n : selectedRange\n }\n disabledDays={disabledDays}\n months={MONTH_NAMES}\n weekdaysLong={DAYS}\n initialMonth={selected}\n weekdaysShort={DAYS.map((day) => day.substring(0, 2))}\n showOutsideDays={mode === CALENDAR_MODE.WEEK}\n firstDayOfWeek={weekStart}\n />\n </div>\n </div>\n </Portal>\n );\n};\n\nexport default Calendar;\n","export const CALENDAR_MODE = {\n DAY: 'day' as 'day',\n WEEK: 'week' as 'week'\n};\n\nexport const CALENDAR_PLACEMENT = {\n BOTTOM: 'bottom' as 'bottom',\n TOP: 'top' as 'top'\n};\n","import { CALENDAR_PLACEMENT } from './constants';\nimport { BUFFER, PADDING } from '../Tooltip/constants';\nimport { CalendarPlacement } from './types';\n\ntype Position = {\n left: number;\n top: number;\n};\n\nexport const calculateCalendarPosition = (\n placement: CalendarPlacement,\n anchorPosition: DOMRect,\n calendarDimensions?: DOMRect\n): Position => {\n if (!calendarDimensions) {\n return { left: 0, top: 0 };\n }\n const horizontalPosition = getHorizontalPosition(\n anchorPosition,\n calendarDimensions\n );\n const verticalPosition = getVerticalPosition(\n anchorPosition,\n placement,\n calendarDimensions\n );\n return { ...horizontalPosition, ...verticalPosition };\n};\n\nconst getHorizontalPosition = (\n anchorPosition: DOMRect,\n calendarDimensions: DOMRect\n) => {\n const innerWidth = window.innerWidth;\n const calendarRight = anchorPosition.left + calendarDimensions.width;\n\n if (innerWidth > calendarRight + BUFFER) {\n return { left: anchorPosition.left };\n }\n // If left align goes out of window, then right align\n return { left: anchorPosition.right - calendarDimensions.width };\n};\n\nconst getVerticalPosition = (\n anchorPosition: DOMRect,\n placement: CalendarPlacement,\n calendarDimensions: DOMRect\n) => {\n const calendarTopAboveTrigger =\n anchorPosition.top - calendarDimensions.height - PADDING;\n const calendarTopBelowTrigger = anchorPosition.bottom + PADDING;\n\n //Add window scroll value after determining position. Position should be relative to\n // users scroll position and adding it before can mess up checks for placement\n if (placement === CALENDAR_PLACEMENT.TOP) {\n if (calendarTopAboveTrigger < 0) {\n //If top is out of window, ignore position and place at bottom\n return { top: anchorPosition.bottom + PADDING };\n }\n return { top: calendarTopAboveTrigger + window.scrollY };\n } else {\n if (\n calendarTopBelowTrigger + calendarDimensions.height >\n window.innerHeight\n ) {\n //If calendar is further bellow window, ignore position and place it above\n return { top: calendarTopAboveTrigger + window.scrollY };\n }\n return { top: calendarTopBelowTrigger + window.scrollY };\n }\n};\n","import classNames from 'classnames';\nimport React from 'react';\nimport { Tooltip } from '../../overlay';\nimport styles from './label.scss';\nimport { useLabelTooltip } from './useLabelTooltip';\n\ntype Props = {\n htmlFor: string;\n children: React.ReactNode;\n truncate?: boolean;\n};\nconst Label: React.FC<Props> = ({ htmlFor, children, truncate = true }) => {\n const labelId = `label-${htmlFor}`;\n const { showTooltip, shouldTruncate } = useLabelTooltip(\n labelId,\n children,\n truncate\n );\n\n const LabelElement = (\n <label\n htmlFor={htmlFor}\n id={labelId}\n className={classNames(styles['label'], {\n [styles['label--truncate']]: shouldTruncate\n })}\n >\n {children}\n </label>\n );\n\n if (showTooltip) {\n return (\n <Tooltip overlay={children} placement=\"top\">\n {LabelElement}\n </Tooltip>\n );\n }\n\n return LabelElement;\n};\n\nexport default Label;\n","import { debounce } from 'lodash-es';\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useState\n} from 'react';\nimport { isEllipsisActive } from './domain';\n\ntype UseLabelTooltip = {\n showTooltip: boolean;\n shouldTruncate: boolean;\n};\nexport const useLabelTooltip = (\n labelId: string,\n tooltipContent: React.ReactNode,\n truncate: boolean\n): UseLabelTooltip => {\n const [showTooltip, setShowTooltip] = useState(false);\n const shouldTruncate = typeof tooltipContent === 'string' && truncate;\n\n const labelElement = document.getElementById(labelId);\n const isHidden = labelElement && labelElement.offsetParent === null;\n\n const handleApplyTooltip = useCallback(() => {\n if (!shouldTruncate) {\n return;\n }\n\n const labelElement = document.getElementById(labelId);\n if (!labelElement) {\n return;\n }\n\n const shouldShowTooltip = isEllipsisActive(labelElement);\n if (showTooltip !== shouldShowTooltip) {\n setShowTooltip(shouldShowTooltip);\n }\n }, [shouldTruncate, isHidden]);\n\n useEffect(() => {\n const onWindowResize = debounce(handleApplyTooltip, 300);\n window.addEventListener('resize', onWindowResize);\n\n return () => window.removeEventListener('resize', onWindowResize);\n }, [handleApplyTooltip]);\n\n useLayoutEffect(handleApplyTooltip, [handleApplyTooltip]);\n\n return { showTooltip, shouldTruncate };\n};\n","export const isEllipsisActive = (e: HTMLElement) => {\n return e.offsetWidth < e.scrollWidth;\n};\n","import React from 'react';\nimport styles from './caption.scss';\n\ntype Props = {\n fieldId?: string;\n children: React.ReactNode;\n};\nconst Caption: React.FC<Props> = ({ fieldId, children }) => {\n return (\n <div\n id={fieldId && `${fieldId}-describer`}\n className={styles['caption']}\n >\n {children}\n </div>\n );\n};\n\nexport default Caption;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconTimesOctagon = forwardRef(\n (\n { testId = 'icon-times-octagon', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.094.57c-.351-.35-.827-.55-1.322-.55H7.193c-.495 0-.97.2-1.322.55L.55 5.888c-.351.35-.55.826-.55 1.321v5.58c0 .494.199.97.55 1.32l5.321 5.323c.351.35.827.55 1.322.55h5.579c.495 0 .97-.2 1.322-.55l5.321-5.322c.351-.35.55-.827.55-1.322V7.213c0-.495-.199-.97-.55-1.321L14.094.57Zm4.62 12.217a.62.62 0 0 1-.184.441l-5.318 5.322a.619.619 0 0 1-.44.183H7.193a.62.62 0 0 1-.44-.183L1.43 13.232a.62.62 0 0 1-.183-.44v-5.58a.62.62 0 0 1 .183-.44L6.749 1.45a.62.62 0 0 1 .44-.183h5.58a.62.62 0 0 1 .44.183l5.321 5.322a.62.62 0 0 1 .183.44v5.575Zm-5.369.909.331-.332a.475.475 0 0 0 0-.662L10.975 10l2.701-2.702a.468.468 0 0 0 0-.663l-.331-.331a.468.468 0 0 0-.663 0L9.981 9.006 7.279 6.304a.468.468 0 0 0-.663 0l-.331.331a.468.468 0 0 0 0 .663L8.986 10l-2.701 2.702a.468.468 0 0 0 0 .662l.331.332c.183.183.48.183.663 0l2.702-2.702 2.701 2.702c.184.183.48.183.663 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconTimesOctagon.displayName = 'IconTimesOctagon';\nexport default IconTimesOctagon;\n","import React from 'react';\nimport Inline from '../../layout/Inline';\nimport IconTimesOctagon from '@7shifts/sous-chef-icons/IconTimesOctagon';\nimport { RADISH400 } from '../../foundation/colors';\nimport styles from './error-message.scss';\n\ntype Props = {\n fieldId?: string;\n children: React.ReactNode;\n testId?: string;\n};\nconst ErrorMessage: React.FC<Props> = ({ fieldId, children, testId }) => {\n return (\n <div\n id={fieldId && `${fieldId}-error-message`}\n className={styles['error-message']}\n data-testid={testId}\n >\n <Inline space={8} alignItems=\"center\">\n <IconTimesOctagon color={RADISH400} size=\"medium\" />\n {children}\n </Inline>\n </div>\n );\n};\n\nexport default ErrorMessage;\n","import React from 'react';\nimport Label from '../Label';\nimport Caption from '../Caption';\nimport ErrorMessage from '../ErrorMessage';\nimport Stack from '../../layout/Stack';\n\ntype Props = {\n id: string;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n children: React.ReactNode;\n testId?: string;\n};\nconst Field: React.FC<Props> = ({ id, label, caption, error, children }) => {\n const shouldRenderLabel = label || typeof label === 'string';\n return (\n <Stack space={8} flexItems>\n {shouldRenderLabel && <Label htmlFor={id}>{label}</Label>}\n {children}\n {caption && <Caption fieldId={id}>{caption}</Caption>}\n {error && <ErrorMessage fieldId={id}>{error}</ErrorMessage>}\n </Stack>\n );\n};\n\nexport default Field;\n","import React, { useRef, useLayoutEffect } from 'react';\nimport classnames from 'classnames';\nimport styles from './affix-container.scss';\n\ntype Props = {\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n children: React.ReactElement;\n};\nconst AffixContainer: React.FC<Props> = ({ prefix, suffix, children }) => {\n const container = useRef<HTMLDivElement>(null);\n const prefixElement = useRef<HTMLDivElement>(null);\n const suffixElement = useRef<HTMLDivElement>(null);\n\n const isHidden =\n container.current && container.current.offsetParent === null;\n\n useLayoutEffect(() => {\n if (container.current) {\n // `[class$=control] > div` is to make it work on SelectField as well\n const input: HTMLElement | null = container.current.querySelector(\n 'input, [class$=control] > div'\n );\n if (input) {\n // This is to have flexible padding according to the affix size\n if (prefix && prefixElement.current) {\n const prefixWidth = prefixElement?.current?.offsetWidth;\n input.style.paddingLeft = prefixWidth + 'px';\n }\n if (suffix && suffixElement.current) {\n const suffixWidth = suffixElement.current.offsetWidth;\n input.style.paddingRight = suffixWidth + 'px';\n }\n }\n }\n }, [prefix, suffix, isHidden]);\n\n const hasPrefix = !!prefix;\n const hasSuffix = !!suffix;\n\n if (!hasPrefix && !hasSuffix) {\n return children;\n }\n\n const classes = classnames(styles['affix-container'], {\n [styles['affix-container--prefixed']]: hasPrefix,\n [styles['affix-container--suffixed']]: hasSuffix\n });\n\n return (\n <div className={classes} ref={container} data-testid=\"affix-container\">\n {hasPrefix && (\n <div className={styles['prefix']} ref={prefixElement}>\n {prefix}\n </div>\n )}\n {children}\n {hasSuffix && (\n <div className={styles['suffix']} ref={suffixElement}>\n {suffix}\n </div>\n )}\n </div>\n );\n};\n\nexport default AffixContainer;\n","import { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport type { SelectOption } from '../SelectField/types';\nimport { getFormikState } from '../../utils/formik';\n\ntype FieldControls<T> = {\n id: string;\n error?: React.ReactNode;\n value?: SelectOption<T>;\n onChange: (e: SelectOption<T>) => void;\n onBlur: (e: SelectOption<T>) => void;\n};\n\ntype Props<T> = {\n name: string;\n id?: string;\n value?: SelectOption<T>;\n onChange?: (e: SelectOption<T>) => void;\n onBlur?: (e: SelectOption<T>) => void;\n error?: React.ReactNode;\n onMenuInputFocus?: (isFocused: boolean) => void;\n};\nexport const useSelectFieldControllers = <T>({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error,\n onMenuInputFocus\n}: Props<T>): FieldControls<T> => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n let controllers = {\n id,\n error,\n value,\n onChange: (option: SelectOption<T>) => {\n if (onChange) {\n onChange(option);\n }\n if (onChange && onMenuInputFocus) {\n onMenuInputFocus(false);\n }\n },\n onBlur: (option: SelectOption<T>) => {\n if (onBlur) {\n onBlur(option);\n }\n if (onBlur && onMenuInputFocus) {\n onMenuInputFocus(false);\n }\n }\n };\n\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n controllers = {\n ...controllers,\n error: error ? controllers.error : formikState.error,\n value: value ? controllers.value : formikState.value,\n onChange: (option: SelectOption<T>) => {\n if (onChange) {\n onChange(option);\n }\n if (onChange && onMenuInputFocus) {\n onMenuInputFocus(false);\n }\n formik.setFieldValue(name, option);\n },\n onBlur: (option: SelectOption<T>) => {\n if (onBlur) {\n onBlur(option);\n }\n if (onBlur && onMenuInputFocus) {\n onMenuInputFocus(false);\n }\n formik.setFieldTouched(name);\n }\n };\n }\n return controllers;\n};\n","import {\n EGGPLANT200,\n GREY100,\n GREY200,\n GREY300,\n GREY400,\n GREY500,\n WHITE\n} from '../../foundation/colors';\nimport { Z_INDEX_LAYERS, FONT_FAMILY } from '../../foundation/constants';\nimport { CSSObject } from '@emotion/serialize';\nimport { OptionProps } from 'react-select/src/types';\n\ntype GetSelectStylesControls = {\n wrapToNextLine?: boolean;\n};\nexport const getSelectStyles = ({\n wrapToNextLine = false\n}: GetSelectStylesControls): Object => {\n return {\n valueContainer: (base: CSSObject): Object => {\n return Object.assign({}, base, {\n flexWrap: wrapToNextLine ? 'wrap' : 'nowrap'\n });\n },\n container: (base: CSSObject, state: OptionProps): Object => {\n return Object.assign({}, base, {\n flex: '1',\n fontFamily: FONT_FAMILY,\n minWidth: '64px',\n background: state.isDisabled\n ? GREY100\n : WHITE,\n ':hover': {\n backgroundColor: GREY100\n },\n position: 'initial' \n });\n },\n control: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n color: state.isDisabled ? GREY400 : GREY500,\n boxShadow: 'none',\n fontSize: '14px',\n cursor: 'pointer',\n background: 'none',\n outline: '1px solid',\n outlineColor: GREY200,\n borderRadius: '4px',\n border: 'none'\n });\n },\n indicatorSeparator: () => ({ display: 'none' }),\n placeholder: (base: CSSObject, state: OptionProps) => ({\n ...base,\n color: state.isDisabled ? GREY300 : GREY400,\n marginRight: 0,\n position: 'static',\n transform: 'initial',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }),\n singleValue: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n color: state.isDisabled ? GREY400 : null,\n marginRight: 0,\n position: 'static',\n transform: 'initial',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n });\n },\n dropdownIndicator: (base: CSSObject) => {\n return Object.assign({}, base, {\n color: GREY400,\n padding: '8px'\n });\n },\n option: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n backgroundColor: state.isDisabled\n ? null\n : state.isSelected\n ? EGGPLANT200\n : state.isFocused\n ? GREY100\n : WHITE,\n color: state.isDisabled\n ? GREY400\n : GREY500,\n cursor: state.isDisabled\n ? 'default'\n : 'pointer',\n fontFamily: FONT_FAMILY,\n fontSize: '14px'\n });\n },\n group: (base: CSSObject): Object => {\n return Object.assign({}, base, {\n fontFamily: FONT_FAMILY\n });\n },\n menu: (base: CSSObject) => ({\n ...base,\n zIndex: Z_INDEX_LAYERS.MENU,\n minWidth: '164px'\n }),\n menuPortal: (base: CSSObject) => ({\n ...base,\n zIndex: Z_INDEX_LAYERS.MENU\n })\n };\n};\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconChevronLeft = forwardRef(\n (\n { testId = 'icon-chevron-left', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"m5.222 9.502 8.208-7.629a.783.783 0 0 1 .537-.206c.202 0 .393.073.536.206l.275.256a.671.671 0 0 1 0 .997L7.38 10l7.397 6.875c.143.133.222.31.222.498a.677.677 0 0 1-.222.499l-.275.255a.787.787 0 0 1-.536.206.787.787 0 0 1-.537-.206L5.222 10.5a.671.671 0 0 1 0-.997Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconChevronLeft.displayName = 'IconChevronLeft';\nexport default IconChevronLeft;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconChevronRight = forwardRef(\n (\n { testId = 'icon-chevron-right', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.778 10.498 6.57 18.127a.784.784 0 0 1-.537.206.784.784 0 0 1-.536-.206l-.275-.256a.671.671 0 0 1 0-.997L12.62 10 5.222 3.125A.676.676 0 0 1 5 2.627c0-.189.079-.366.222-.499l.275-.255a.787.787 0 0 1 .536-.206c.195 0 .389.068.537.206L14.778 9.5a.671.671 0 0 1 0 .997Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconChevronRight.displayName = 'IconChevronRight';\nexport default IconChevronRight;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconCalendarAlt = forwardRef(\n (\n { testId = 'icon-calendar-alt', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.292 2.5h-1.875V.469A.47.47 0 0 0 14.948 0h-.312a.47.47 0 0 0-.469.469V2.5h-7.5V.469A.47.47 0 0 0 6.198 0h-.312a.47.47 0 0 0-.469.469V2.5H3.542c-1.035 0-1.875.84-1.875 1.875v13.75c0 1.035.84 1.875 1.875 1.875h13.75c1.035 0 1.875-.84 1.875-1.875V4.375c0-1.035-.84-1.875-1.875-1.875ZM3.542 3.75h13.75c.344 0 .625.281.625.625V6.25h-15V4.375c0-.344.281-.625.625-.625Zm0 15h13.75a.627.627 0 0 0 .625-.625V7.5h-15v10.625c0 .344.281.625.625.625Zm3.906-6.25H5.886a.47.47 0 0 1-.469-.469V10.47A.47.47 0 0 1 5.886 10h1.562a.47.47 0 0 1 .469.469v1.562a.47.47 0 0 1-.469.469Zm2.188 0h1.562a.47.47 0 0 0 .469-.469V10.47a.47.47 0 0 0-.469-.469H9.636a.47.47 0 0 0-.469.469v1.562c0 .258.21.469.469.469Zm5.312 0h-1.562a.47.47 0 0 1-.469-.469V10.47a.47.47 0 0 1 .469-.469h1.562a.47.47 0 0 1 .469.469v1.562a.47.47 0 0 1-.469.469Zm-5.312 3.75h1.562a.47.47 0 0 0 .469-.469V14.22a.47.47 0 0 0-.469-.469H9.636a.47.47 0 0 0-.469.469v1.562c0 .258.21.469.469.469Zm-2.188 0H5.886a.47.47 0 0 1-.469-.469V14.22a.47.47 0 0 1 .469-.469h1.562a.47.47 0 0 1 .469.469v1.562a.47.47 0 0 1-.469.469Zm5.938 0h1.562a.47.47 0 0 0 .469-.469V14.22a.47.47 0 0 0-.469-.469h-1.562a.47.47 0 0 0-.469.469v1.562c0 .258.21.469.469.469Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconCalendarAlt.displayName = 'IconCalendarAlt';\nexport default IconCalendarAlt;\n","import { DATE_FILTER_MODE } from \"../../constants\";\nimport { DateFilterMode } from \"../../types\";\nimport * as dateUtil from '../../../../utils/date';\n\nexport const getDateString = (date: Date, mode: DateFilterMode) => {\n let format: string;\n switch (mode) {\n case DATE_FILTER_MODE.DAY:\n format = \"EEE',' MMM d',' yyyy\";\n break;\n case DATE_FILTER_MODE.WEEK:\n format = \"MMM d',' yyyy\";\n break;\n default:\n format = \"MMMM',' yyyy\";\n break;\n }\n return dateUtil.formatDate(date, format);\n};","export const DATE_FILTER_MODE = {\n DAY: 'day' as const,\n WEEK: 'week' as const,\n MONTH: 'month' as const\n};\n\nexport const STEP_DIRECTION = {\n FORWARD: 'forward' as const,\n BACKWARD: 'backward' as const\n}","import React from 'react';\nimport { DATE_FILTER_MODE } from '../../constants';\nimport { DateFilterMode } from '../../types';\nimport { createWeekRange, WeekStart } from '../../../../utils/date';\nimport { getDateString } from './domain';\nimport Inline from '../../../../layout/Inline';\nimport IconArrowRight from '@7shifts/sous-chef-icons/IconArrowRight';\nimport { GREY400 } from '../../../../foundation/colors';\n\ntype Props = {\n mode: DateFilterMode;\n selectedDate: Date;\n weekStart: WeekStart;\n};\n\nconst DateFilterText = ({ mode, selectedDate, weekStart }: Props) => {\n switch (mode) {\n case DATE_FILTER_MODE.WEEK:\n let weekRange = createWeekRange(selectedDate, weekStart);\n return (\n <Inline space={12}>\n <span>{getDateString(weekRange.start, mode)}</span>\n <span className=\"date-filter__to_date_icon\">\n <IconArrowRight size=\"small\" color={GREY400} />\n </span>\n <span>{getDateString(weekRange.end, mode)}</span>\n </Inline>\n );\n default:\n return <span>{getDateString(selectedDate, mode)}</span>;\n }\n};\n\nexport default DateFilterText;\n","import classnames from 'classnames';\nimport styles from './date-filter-display.scss';\nimport React from 'react';\nimport { GREY400 } from '../../../foundation/colors';\nimport IconCalendarAlt from '@7shifts/sous-chef-icons/IconCalendarAlt';\nimport Inline from '../../../layout/Inline';\nimport { WeekStart } from '../../../utils/date';\nimport { DATE_FILTER_MODE } from '../constants';\nimport { DateFilterMode } from '../types';\nimport DateFilterText from './DateFilterText/DateFilterText';\n\ntype Props = {\n mode: DateFilterMode;\n selectedDate: Date;\n weekStart: WeekStart;\n onClick: () => void;\n};\n\nconst DateFilterDisplay = ({\n mode,\n selectedDate,\n weekStart,\n onClick\n}: Props) => {\n return (\n <button\n className={classnames(styles['date-filter-display'], {\n [styles['date-filter-display--wide']]:\n mode === DATE_FILTER_MODE.WEEK,\n [styles['date-filter-display--non-interactive']]:\n mode === DATE_FILTER_MODE.MONTH\n })}\n onClick={onClick}\n tabIndex={mode === DATE_FILTER_MODE.MONTH ? -1 : undefined}\n >\n <Inline space={12} alignItems=\"center\">\n <div\n className={classnames(\n styles['date-filter-display__display-icon']\n )}\n >\n <IconCalendarAlt size=\"flexible\" color={GREY400} />\n </div>\n <DateFilterText\n mode={mode}\n selectedDate={selectedDate}\n weekStart={weekStart}\n />\n </Inline>\n </button>\n );\n};\n\nexport default DateFilterDisplay;\n","import classnames from 'classnames';\nimport React from 'react';\nimport styles from './date-filter-stepper.scss';\nimport { STEP_DIRECTION } from '../constants';\nimport { DateFilterMode, StepDirection } from '../types';\nimport { handleDateStepper } from './domain';\n\ntype Props = {\n children: React.ReactNode;\n mode: DateFilterMode;\n stepDirection: StepDirection;\n date: Date;\n onChange: (selected: Date) => void;\n};\n\nconst DateFilterStepper = ({\n children,\n mode,\n stepDirection,\n onChange,\n date\n}: Props) => {\n return (\n <button\n className={classnames(styles['date-stepper'], {\n [styles['date-stepper--backward']]:\n stepDirection === STEP_DIRECTION.BACKWARD,\n [styles['date-stepper--forward']]:\n stepDirection === STEP_DIRECTION.FORWARD\n })}\n onClick={() =>\n handleDateStepper(date, mode, stepDirection, onChange)\n }\n >\n {children}\n </button>\n );\n};\n\nexport default DateFilterStepper;\n","import { DATE_FILTER_MODE, STEP_DIRECTION } from \"../constants\";\nimport { DateFilterMode, StepDirection } from \"../types\";\n\nexport const handleDateStepper = (date: Date, mode: DateFilterMode, stepDirection: StepDirection, onChange: (selected: Date) => void) => {\n const step = stepDirection === STEP_DIRECTION.FORWARD ? 1 : -1;\n const newDate = new Date(date);\n switch (mode) {\n case DATE_FILTER_MODE.DAY:\n newDate.setDate(date.getDate() + step);\n break;\n case DATE_FILTER_MODE.WEEK:\n newDate.setDate(date.getDate() + step * 7);\n break;\n case DATE_FILTER_MODE.MONTH:\n newDate.setMonth(date.getMonth() + step);\n break;\n default:\n throw new Error('Mode not supported by DateFilter: ' + mode);\n }\n onChange(newDate);\n};\n\n","import React from 'react';\nimport Flex from '../../layout/Flex';\nimport styles from './form-row.scss';\n\ntype Size25Percent = '25%';\nexport const SIZE_25_PERCENT: Size25Percent = '25%';\n\ntype Size33Percent = '33.333%';\nexport const SIZE_33_PERCENT: Size33Percent = '33.333%';\n\ntype Size50Percent = '50%';\nexport const SIZE_50_PERCENT: Size50Percent = '50%';\n\ntype Size66Percent = '66.666%';\nexport const SIZE_66_PERCENT: Size66Percent = '66.666%';\n\ntype Size75Percent = '75%';\nexport const SIZE_75_PERCENT: Size75Percent = '75%';\n\ntype Size =\n | Size25Percent\n | Size33Percent\n | Size50Percent\n | Size66Percent\n | Size75Percent;\n\ntype Props = {\n children: React.ReactNode;\n columns?: number;\n sizes?: Size[];\n testId?: string;\n};\n/** Easily add form fields side by side with equal size. */\nconst FormRow: React.FC<Props> = ({ children, columns, sizes, testId }) => {\n const items = React.Children.toArray(children).filter(Boolean);\n const additionalColumns = [];\n if (columns !== undefined) {\n if (columns > items.length) {\n additionalColumns.push(\n ...new Array(columns - items.length).map(() => '')\n );\n }\n }\n return (\n <Flex\n flex={[...items, ...additionalColumns].map(\n (_, index) => sizes?.[index] || 1\n )}\n space={20}\n testId={testId}\n alignItems=\"stretch\"\n extraClass={styles['form-row']}\n >\n {children}\n {additionalColumns.map((_, index) => (\n <span key={index} data-testid=\"empty-cell\" />\n ))}\n </Flex>\n );\n};\n\nexport default FormRow;\n","import { useFieldControllers } from '../hooks/useFieldControllers';\nimport classnames from 'classnames';\nimport { RefType } from '../../utils/types';\nimport styles from './text-field.scss';\nimport type { Props } from './TextField';\n\ntype UseTextFieldProps = Props & {\n ref: RefType<HTMLInputElement>;\n};\nexport const useTextField = ({\n autoComplete,\n autoFocus,\n defaultValue,\n disabled,\n error,\n id,\n maxLength,\n name,\n caption,\n label,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n placeholder,\n value,\n ref,\n testId\n}: UseTextFieldProps) => {\n const controllers = useFieldControllers({\n error,\n id,\n name,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n value\n });\n\n const hasError = !!controllers.error;\n\n const inputProps = {\n 'aria-describedby': hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`,\n 'aria-invalid': hasError,\n autoComplete,\n autoFocus,\n className: classnames(styles['text-field'], {\n [styles['text-field--invalid']]: hasError\n }),\n 'data-testid': testId || `text-field-${name}`,\n disabled,\n defaultValue,\n id: controllers.id,\n maxLength,\n name,\n onBlur: controllers.onBlur,\n onChange: controllers.onChange,\n onFocus: controllers.onFocus,\n onKeyDown: controllers.onKeyDown,\n placeholder,\n ref,\n size: 1,\n type: 'text',\n value: controllers.value\n };\n\n const fieldProps = {\n caption,\n error: controllers.error,\n label,\n id: inputProps.id,\n name\n };\n\n return { inputProps, fieldProps };\n};\n","import React, { forwardRef } from 'react';\nimport Field from '../Field';\nimport AffixContainer from '../AffixContainer';\nimport { RefType } from '../../utils/types';\nimport { useTextField } from './useTextField';\n\ntype AutoCompleteType = 'off' | 'on';\n\nexport type Props = {\n autoComplete?: AutoCompleteType;\n autoFocus?: boolean;\n caption?: React.ReactNode;\n defaultValue?: string;\n disabled?: boolean;\n error?: React.ReactNode;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n label?: React.ReactNode;\n maxLength?: number;\n name: string;\n onBlur?: (value: string) => void;\n onChange?: (value: string) => void;\n onFocus?: (value: string) => void;\n onKeyDown?: (key: string) => void;\n placeholder?: string;\n /** Use a prefix for things like currency symbols (“$”, “¥”, “£”) or icons. */\n prefix?: React.ReactNode;\n /** Use suffix for things like units of measure (“in”, “cm”, ”hours”) or icons. */\n suffix?: React.ReactNode;\n value?: string;\n testId?: string;\n};\n\nconst TextFieldElement = (\n { prefix, suffix, ...props }: Props,\n ref: RefType<HTMLInputElement>\n) => {\n const { inputProps, fieldProps } = useTextField({ ...props, ref });\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={prefix} suffix={suffix}>\n <input {...inputProps} />\n </AffixContainer>\n </Field>\n );\n};\n\nconst TextField = forwardRef<HTMLInputElement, Props>(TextFieldElement);\nexport default TextField;\n","import { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport type { SelectOption } from '../SelectField/types';\nimport { getFormikState } from '../../utils/formik';\n\ntype FieldControls<T> = {\n id: string;\n error?: React.ReactNode;\n value?: SelectOption<T>[];\n onChange: (e: SelectOption<T>[]) => void;\n onBlur: (e: SelectOption<T>[]) => void;\n};\n\ntype Props<T> = {\n name: string;\n id?: string;\n value?: SelectOption<T>[];\n onChange?: (e: SelectOption<T>[]) => void;\n onBlur?: (e: SelectOption<T>[]) => void;\n error?: React.ReactNode;\n};\nexport const useMultiSelectFieldControllers = <T>({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n}: Props<T>): FieldControls<T> => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n let controllers = {\n id,\n error,\n value,\n onChange: (options: SelectOption<T>[]) => onChange && onChange(options),\n onBlur: (options: SelectOption<T>[]) => onBlur && onBlur(options)\n };\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n controllers = {\n ...controllers,\n error: error ? controllers.error : formikState.error,\n value: value ? controllers.value : formikState.value,\n onChange: (options: SelectOption<T>[]) => {\n if (onChange) {\n onChange(options);\n }\n formik.setFieldValue(name, options);\n },\n onBlur: (options: SelectOption<T>[]) => {\n if (onBlur) {\n onBlur(options);\n }\n formik.setFieldTouched(name);\n }\n };\n }\n return controllers;\n};\n","import React, { createContext, useContext } from 'react';\n\nexport type RadioGroupFieldContextType = {\n name: string;\n value?: string | number;\n disabled: boolean;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nconst RadioGroupFieldContext: React.Context<RadioGroupFieldContextType | null> =\n createContext<RadioGroupFieldContextType | null>(null);\n\nexport const useRadioGroupFieldContext = (): RadioGroupFieldContextType => {\n const context = useContext(RadioGroupFieldContext);\n\n if (!context) {\n throw new Error('You need to have a `RadioGroupFieldContext` wrapper.');\n }\n\n return context;\n};\n\nexport default RadioGroupFieldContext;\n","import React from 'react';\nimport Stack from '../../layout/Stack';\nimport Caption from '../Caption';\nimport { useFieldId } from '../hooks/useFieldId';\nimport { useRadioGroupFieldContext } from '../RadioGroupField/RadioGroupFieldContext';\nimport styles from './radio-group-box-option.scss';\n\ntype Props = {\n value: string | number;\n id?: string;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n children?: React.ReactNode;\n testId?: string;\n};\n\nconst RadioGroupBoxOption = ({\n value,\n id: inputId,\n label,\n caption,\n testId,\n children\n}: Props) => {\n const radioGroupContext = useRadioGroupFieldContext();\n const id = useFieldId({ name: radioGroupContext.name, id: inputId });\n return (\n <label className={styles['radio-group-box-option']}>\n <input\n type=\"radio\"\n data-testid={testId}\n id={id}\n name={radioGroupContext.name}\n value={value}\n onChange={radioGroupContext.onChange}\n checked={\n radioGroupContext.value !== undefined\n ? radioGroupContext.value === value\n : undefined\n }\n disabled={radioGroupContext.disabled}\n />\n <div className={styles['radio-group-box-option__box']}>\n <Stack space={16} alignItems=\"center\" justifyContent=\"center\">\n {children}\n <Stack space={8} alignItems=\"center\">\n {label && (\n <div\n className={\n styles['radio-group-box-option__label']\n }\n >\n {label}\n </div>\n )}\n {caption && <Caption fieldId={id}>{caption}</Caption>}\n </Stack>\n </Stack>\n </div>\n </label>\n );\n};\n\nexport default RadioGroupBoxOption;\n","import React from 'react';\nimport Stack from '../../layout/Stack';\nimport Inline from '../../layout/Inline';\nimport { useRadioGroupFieldContext } from '../RadioGroupField/RadioGroupFieldContext';\nimport Label from '../Label';\nimport Caption from '../Caption';\nimport { useFieldId } from '../hooks/useFieldId';\nimport styles from './radio-group-option.scss';\n\ntype Props = {\n value: string | number;\n id?: string;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n testId?: string;\n};\n/** RadioGroupField form element. */\nconst RadioGroupOption: React.FC<Props> = ({\n value,\n id: inputId,\n label,\n caption,\n testId\n}) => {\n const radioGroupContext = useRadioGroupFieldContext();\n const id = useFieldId({ name: radioGroupContext.name, id: inputId });\n return (\n <Stack space={8}>\n <Inline space={8} alignItems=\"center\">\n <div className={styles['radio-group-option']}>\n <input\n type=\"radio\"\n data-testid={testId}\n id={id}\n name={radioGroupContext.name}\n value={value}\n onChange={radioGroupContext.onChange}\n checked={\n radioGroupContext.value !== undefined\n ? radioGroupContext.value === value\n : undefined\n }\n disabled={radioGroupContext.disabled}\n />\n <span\n className={styles['radio-group-option__custom-input']}\n />\n </div>\n {label && <Label htmlFor={id}>{label}</Label>}\n </Inline>\n {caption && (\n <div className={styles['radio-group-option__caption']}>\n <Caption fieldId={id}>{caption}</Caption>\n </div>\n )}\n </Stack>\n );\n};\n\nexport default RadioGroupOption;\n","import React from 'react';\nimport RadioGroupBoxOption from '../RadioGroupBoxOption';\nimport RadioGroupOption from '../RadioGroupOption';\n\nexport const OPTION_TYPES = {\n BOX: 'BOX' as const,\n RADIO: 'RADIO' as const\n};\nconst INVALID_OPTIONS_MESSAGE =\n 'RadioGroupField accept only RadioGroupOption or RadioGroupBoxOption as children. Check the children passed on the RadioGroupField.';\n\nexport const getOptionsType = (\n children: React.ReactNode\n): keyof typeof OPTION_TYPES => {\n const options: Array<keyof typeof OPTION_TYPES> = [];\n\n React.Children.forEach(children, (child) => {\n if (!child || typeof child !== 'object' || !('type' in child)) {\n throw new TypeError(INVALID_OPTIONS_MESSAGE);\n }\n\n const isBoxOption = child.type === RadioGroupBoxOption;\n const isRadioOption = child.type === RadioGroupOption;\n\n if (!isBoxOption && !isRadioOption) {\n throw new TypeError(INVALID_OPTIONS_MESSAGE);\n }\n\n if (\n (isBoxOption && options.includes(OPTION_TYPES.RADIO)) ||\n (isRadioOption && options.includes(OPTION_TYPES.BOX))\n ) {\n throw new TypeError(\n `${INVALID_OPTIONS_MESSAGE} It is not possible to mix options`\n );\n }\n\n options.push(isBoxOption ? OPTION_TYPES.BOX : OPTION_TYPES.RADIO);\n });\n\n return options[0];\n};\n","import React from 'react';\nimport Stack from '../../../layout/Stack';\nimport FormRow from '../../FormRow';\n\ntype Props = {\n children: React.ReactNode;\n inline: boolean;\n columns?: 2 | 3 | 4;\n testId?: string;\n};\n\nconst RadioOptions = ({ children, inline, columns = 4, testId }: Props) => {\n if (inline) {\n return (\n <InlineOptions testId={testId} columns={columns}>\n {children}\n </InlineOptions>\n );\n }\n return (\n <Stack space={12} testId={testId}>\n {children}\n </Stack>\n );\n};\n\ntype InlineProps = {\n children: React.ReactNode;\n columns: 2 | 3 | 4;\n testId?: string;\n};\nconst InlineOptions: React.FC<InlineProps> = ({\n children,\n columns,\n testId\n}) => {\n const MAX_OPTIONS_PER_ROW = columns;\n const childrenArray = React.Children.toArray(children);\n const rows = [];\n\n for (let i = 0; i < childrenArray.length; i += MAX_OPTIONS_PER_ROW) {\n rows.push(childrenArray.slice(i, i + MAX_OPTIONS_PER_ROW));\n }\n return (\n <Stack space={12} testId={testId}>\n {rows.map((row, rowIndex) => (\n <FormRow key={rowIndex} columns={MAX_OPTIONS_PER_ROW}>\n {row}\n </FormRow>\n ))}\n </Stack>\n );\n};\n\nexport default RadioOptions;\n","import React from 'react';\nimport Stack from '../../../layout/Stack';\nimport FormRow from '../../FormRow';\n\ntype Props = {\n children: React.ReactNode;\n columns?: 2 | 3 | 4;\n testId?: string;\n};\n\nconst BoxOptions = ({ children, columns = 4, testId }: Props) => {\n const MAX_OPTIONS_PER_ROW = +columns;\n const childrenArray = React.Children.toArray(children);\n const rows = [];\n\n for (let i = 0; i < childrenArray.length; i += MAX_OPTIONS_PER_ROW) {\n rows.push(childrenArray.slice(i, i + MAX_OPTIONS_PER_ROW));\n }\n\n return (\n <Stack space={12} testId={testId}>\n {rows.map((row, rowIndex) => (\n <FormRow key={rowIndex} columns={row.length}>\n {row}\n </FormRow>\n ))}\n </Stack>\n );\n};\n\nexport default BoxOptions;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconCheck = forwardRef(\n (\n { testId = 'icon-check', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.324 16.832a.827.827 0 0 1-1.169-.005L.24 10.864a.827.827 0 0 1 .004-1.169l.587-.582a.827.827 0 0 1 1.17.005l4.75 4.79L18.01 2.74a.827.827 0 0 1 1.17.004l.581.587a.826.826 0 0 1-.005 1.17L7.325 16.831Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconCheck.displayName = 'IconCheck';\nexport default IconCheck;\n","import React from 'react';\nimport classnames from 'classnames';\nimport styles from './password-criteria.scss';\nimport IconCheck from '@7shifts/sous-chef-icons/IconCheck';\nimport Inline from '../../layout/Inline';\nimport { GREY200 } from '../../foundation/colors';\n\ntype Props = {\n met: boolean;\n children: React.ReactNode;\n};\n\nconst PasswordCriteria: React.FC<Props> = ({ met, children }) => {\n return (\n <span\n className={classnames(styles['password-criteria'], {\n [styles['password-criteria--invalid']]: !met\n })}\n >\n <Inline space={met ? 4 : 8}>\n {met ? <IconCheck size=\"small\" color={GREY200} /> : '\\u25CF'}\n {children}\n </Inline>\n </span>\n );\n};\n\nexport default PasswordCriteria;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconEye = forwardRef(\n ({ testId = 'icon-eye', ...props }: Props, ref: RefType<SVGSVGElement>) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <g clipPath=\"url(#icon-eye_svg__a)\">\n <path\n d=\"M10 11a2 2 0 0 0 0-4c-.031 0-.059.008-.09.01a1.484 1.484 0 0 1-1.901 1.9C8.01 8.943 8 8.97 8 9a2 2 0 0 0 2 2Zm8.891-1.456C17.197 6.237 13.841 4 10 4 6.158 4 2.802 6.239 1.109 9.544a1.011 1.011 0 0 0 0 .912C2.803 13.763 6.159 16 10 16s7.198-2.239 8.891-5.544a1.01 1.01 0 0 0 0-.912ZM10 5a4 4 0 1 1 0 8 4 4 0 0 1 0-8Zm0 10c-3.355 0-6.42-1.916-8-5a9.212 9.212 0 0 1 4.056-4.042 4.954 4.954 0 0 0 .408 6.578A5 5 0 0 0 15 9c0-1.15-.403-2.197-1.056-3.042A9.212 9.212 0 0 1 18 10c-1.58 3.084-4.645 5-8 5Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"icon-eye_svg__a\">\n <path\n fill=\"#fff\"\n transform=\"translate(1 2)\"\n d=\"M0 0h18v16H0z\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n }\n);\nIconEye.displayName = 'IconEye';\nexport default IconEye;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconEyeSlash = forwardRef(\n (\n { testId = 'icon-eye-slash', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <g clipPath=\"url(#icon-eye-slash_svg__a)\">\n <g clipPath=\"url(#icon-eye-slash_svg__b)\">\n <path\n d=\"M19.906 16.806.719 2.452a.26.26 0 0 0-.352.037l-.312.371a.23.23 0 0 0 .039.334L19.28 17.548a.256.256 0 0 0 .184.05.257.257 0 0 0 .168-.087l.312-.371a.23.23 0 0 0-.039-.334ZM10 5.25a4.113 4.113 0 0 1 2.827 1.114A3.71 3.71 0 0 1 14 9.05c0 .642-.185 1.238-.482 1.768l.796.594A4.518 4.518 0 0 0 15 9.05c0-1.093-.404-2.087-1.056-2.89 1.747.838 3.168 2.183 4.057 3.84a8.975 8.975 0 0 1-2.118 2.588l.792.592c.89-.78 1.652-1.7 2.216-2.747a.922.922 0 0 0 0-.867A10.085 10.085 0 0 0 10 4.3c-1.404 0-2.791.287-4.066.844l1.43 1.069A4.094 4.094 0 0 1 10 5.25Zm1.902 4.359c.098-.284.123-.585.073-.88a1.826 1.826 0 0 0-.358-.815 1.952 1.952 0 0 0-.711-.568A2.06 2.06 0 0 0 10 7.15c-.031 0-.06.007-.09.009.122.308.12.648-.007.955l1.999 1.495Zm-6.8-1.46a4.36 4.36 0 0 0-.102.9c-.003.797.205 1.58.605 2.28.4.699.98 1.29 1.684 1.72a5.21 5.21 0 0 0 4.781.313l-.924-.69A4.136 4.136 0 0 1 10 12.85a4.114 4.114 0 0 1-2.827-1.114A3.71 3.71 0 0 1 6 9.05c0-.073.018-.14.022-.211l-.92-.69ZM10 14.75A9.065 9.065 0 0 1 2 10c.545-1.008 1.284-1.861 2.135-2.574l-.809-.604c-.89.78-1.652 1.7-2.216 2.746a.922.922 0 0 0 0 .866C2.803 13.575 6.158 15.7 10 15.7c1.403 0 2.79-.287 4.066-.844l-.914-.683A9.147 9.147 0 0 1 10 14.75Z\"\n fill=\"currentColor\"\n />\n </g>\n </g>\n <defs>\n <clipPath id=\"icon-eye-slash_svg__a\">\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\n </clipPath>\n <clipPath id=\"icon-eye-slash_svg__b\">\n <path\n fill=\"#fff\"\n transform=\"translate(0 2.4)\"\n d=\"M0 0h20v15.2H0z\"\n />\n </clipPath>\n </defs>\n </svg>\n );\n }\n);\nIconEyeSlash.displayName = 'IconEyeSlash';\nexport default IconEyeSlash;\n","import React, { useState } from 'react';\nimport classnames from 'classnames';\nimport Field from '../Field';\nimport styles from './password-field.scss';\nimport { useFieldControllers } from '../hooks/useFieldControllers';\nimport { usePasswordCriteria } from '../hooks/usePasswordCriteria';\nimport type { PasswordCriteria } from './types';\nimport IconEye from '@7shifts/sous-chef-icons/IconEye';\nimport IconEyeSlash from '@7shifts/sous-chef-icons/IconEyeSlash';\nimport { GREY400 } from '../../foundation/colors';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n value?: string;\n onChange?: (e: string) => void;\n onBlur?: (e: string) => void;\n label?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n disabled?: boolean;\n defaultValue?: string;\n criterias?: PasswordCriteria[];\n testId?: string;\n};\n/** It allows show and hide the password as well as displaying the criteria. */\nconst PasswordField: React.FC<Props> = ({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n label,\n error,\n placeholder,\n disabled,\n defaultValue,\n criterias = [],\n testId\n}) => {\n const [type, setType] = useState('password');\n const toggleType = () => setType(type === 'password' ? 'text' : 'password');\n\n const controllers = useFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const caption = usePasswordCriteria(criterias);\n\n const hasError = !!controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n return (\n <Field {...fieldProps}>\n <div className={styles['password-container']}>\n <input\n name={name}\n id={controllers.id}\n className={classnames(styles['text-field'], {\n [styles['text-field--invalid']]: hasError\n })}\n type={type}\n data-testid={testId || `text-field-${name}`}\n aria-describedby={\n hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`\n }\n aria-invalid={hasError}\n disabled={disabled}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={controllers.value}\n onChange={controllers.onChange}\n onBlur={controllers.onBlur}\n />\n <div\n className={styles['password-toggle']}\n onClick={toggleType}\n onKeyPress={toggleType}\n data-testid=\"password-toggle\"\n tabIndex={0}\n role=\"button\"\n >\n {type === 'password' ? (\n <IconEyeSlash color={GREY400} />\n ) : (\n <IconEye color={GREY400} />\n )}\n </div>\n </div>\n </Field>\n );\n};\n\nexport default PasswordField;\n","import {\n EGGPLANT200,\n EGGPLANT300,\n EGGPLANT400,\n EGGPLANT600,\n RADISH400,\n GREY100,\n GREY200,\n GREY300,\n GREY400,\n GREY500,\n WHITE\n} from '../../foundation/colors';\nimport { Z_INDEX_LAYERS, FONT_FAMILY } from '../../foundation/constants';\nimport { CSSObject } from '@emotion/serialize';\nimport { OptionProps } from 'react-select/src/types';\n\ntype GetSelectStylesControls = {\n isInvalid: boolean;\n asToolbarFilter?: boolean;\n wrapToNextLine?: boolean;\n};\nexport const getSelectStyles = ({\n isInvalid,\n asToolbarFilter = false,\n wrapToNextLine = false\n}: GetSelectStylesControls): Object => {\n const borderColor = isInvalid ? RADISH400 : GREY200;\n return {\n valueContainer: (base: CSSObject): Object => {\n return Object.assign({}, base, {\n flexWrap: wrapToNextLine ? 'wrap' : 'nowrap'\n });\n },\n container: (base: CSSObject, state: OptionProps): Object => {\n return Object.assign({}, base, {\n flex: '1',\n fontFamily: FONT_FAMILY,\n minWidth: '110px',\n backgroundColor:\n state.isDisabled && !asToolbarFilter ? GREY100 : WHITE,\n position: 'initial'\n });\n },\n control: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n borderColor: state.isFocused ? EGGPLANT400 : borderColor,\n color: state.isDisabled ? GREY400 : GREY500,\n boxShadow: state.isFocused ? `0 0 8px ${EGGPLANT300}` : 'none',\n '&:hover': 'none',\n background: 'none',\n fontSize: '14px',\n cursor: 'pointer',\n border: asToolbarFilter && 'none'\n });\n },\n indicatorSeparator: () => ({ display: 'none' }),\n placeholder: (base: CSSObject, state: OptionProps) => ({\n ...base,\n color: state.isDisabled && asToolbarFilter ? GREY300 : GREY400,\n marginRight: 0,\n position: 'static',\n transform: 'initial',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }),\n noOptionsMessage: () => ({\n color: GREY400,\n textAlign: 'center',\n padding: '8px',\n fontFamily: FONT_FAMILY,\n fontSize: '14px'\n }),\n loadingMessage: () => ({\n color: GREY400,\n textAlign: 'center',\n padding: '8px',\n fontFamily: FONT_FAMILY,\n fontSize: '14px'\n }),\n singleValue: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n color: state.isDisabled ? GREY400 : null,\n marginRight: 0,\n position: asToolbarFilter ? 'static' : 'absolute',\n transform: 'initial',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n top: !asToolbarFilter && 'auto'\n });\n },\n dropdownIndicator: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n color: state.isDisabled ? GREY300 : GREY400,\n padding: '8px'\n });\n },\n option: (base: CSSObject, state: OptionProps) => {\n return Object.assign({}, base, {\n backgroundColor: state.isDisabled\n ? null\n : state.isSelected\n ? EGGPLANT200\n : state.isFocused\n ? GREY100\n : WHITE,\n color: state.isDisabled\n ? GREY400\n : state.isSelected\n ? EGGPLANT600\n : GREY500,\n cursor: 'pointer',\n fontFamily: FONT_FAMILY,\n fontSize: '14px',\n wordBreak: 'break-word'\n });\n },\n group: (base: CSSObject): Object => {\n return Object.assign({}, base, {\n fontFamily: FONT_FAMILY\n });\n },\n multiValueRemove: (base: CSSObject) => {\n return Object.assign({}, base, {\n ':hover': {\n backgroundColor: 'none',\n color: GREY500\n }\n });\n },\n clearIndicator: (base: CSSObject) => {\n return Object.assign({}, base, {\n color: GREY400,\n ':hover': {\n color: GREY500\n }\n });\n },\n menu: (base: CSSObject) => ({\n ...base,\n zIndex: Z_INDEX_LAYERS.MENU\n }),\n menuPortal: (base: CSSObject) => ({\n ...base,\n zIndex: Z_INDEX_LAYERS.MENU\n })\n };\n};\n","import React, { ComponentProps } from 'react';\nimport { components } from 'react-select';\n\ntype Props = ComponentProps<typeof components.Option>;\n\nfunction CustomOption({ children, ...props }: Props) {\n const { UserCustomOption } = props.selectProps.componentsProps;\n return (\n <components.Option {...props}>\n <UserCustomOption {...props}>{children}</UserCustomOption>\n </components.Option>\n );\n}\n\nexport default CustomOption as typeof components.Option;\n","/**\n * This helper method helps to check if the user is scrolling inside the select options so,\n * it does not close the menu when using the prop menuShouldScrollIntoView\n **/\nexport const isScrollingTheSelectMenu = (element: HTMLElement) => {\n if (!isReactSelectElement(element)) {\n // Checking in case it is a grouped options\n return isReactSelectElement(element?.children?.[0]);\n }\n return true;\n};\n\nconst isReactSelectElement = (element: Element) => {\n let firstOption = element?.children?.[0];\n if (!firstOption) {\n return false;\n }\n return (\n typeof firstOption.id === 'string' &&\n firstOption.id.includes('react-select')\n );\n};\n","import React, { ComponentProps } from 'react';\nimport { components } from 'react-select';\n\nconst CustomContainer = (\n props: ComponentProps<typeof components.SelectContainer> & {\n testId?: string;\n }\n) => {\n const componentsProps = props.selectProps.componentsProps;\n return (\n <components.SelectContainer\n {...props}\n innerProps={Object.assign({}, props.innerProps, {\n 'data-testid': componentsProps.testId\n })}\n />\n );\n};\n\nexport default CustomContainer as typeof components.SelectContainer;\n","import React, { ComponentProps } from 'react';\nimport { components } from 'react-select';\nimport Inline from '../../../layout/Inline';\nimport styles from './custom-control.scss';\n\ntype Props = ComponentProps<typeof components.Control>;\n\nfunction CustomControl({ children, ...props }: Props) {\n const { SelectedOptionPrefix } = props.selectProps.componentsProps;\n const selectedOption = props.getValue()?.[0];\n return (\n <components.Control {...props}>\n {SelectedOptionPrefix && selectedOption ? (\n <div\n className={styles['custom-control']}\n style={{\n paddingLeft: selectedOption ? 8 : 0\n }}\n >\n <Inline\n alignItems=\"center\"\n space={0}\n flex={['0 1 auto', 1]}\n >\n <SelectedOptionPrefix\n selectedOption={selectedOption}\n {...props}\n />\n {children}\n </Inline>\n </div>\n ) : (\n children\n )}\n </components.Control>\n );\n}\n\nexport default CustomControl;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconPlus = forwardRef(\n (\n { testId = 'icon-plus', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.672 9.063h-8.734V.336a.312.312 0 0 0-.312-.313h-1.25a.312.312 0 0 0-.313.313v8.727H.33a.312.312 0 0 0-.312.312v1.25c0 .173.14.313.312.313h8.733v8.714c0 .173.14.313.313.313h1.25c.173 0 .312-.14.312-.313v-8.715h8.734c.173 0 .313-.14.313-.312v-1.25a.312.312 0 0 0-.313-.312Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconPlus.displayName = 'IconPlus';\nexport default IconPlus;\n","import React, { ComponentProps, useRef, useState } from 'react';\nimport { components } from 'react-select';\nimport Inline from '../../../layout/Inline';\nimport Button from '../../../actions/Button';\nimport IconPlus from '@7shifts/sous-chef-icons/IconPlus';\nimport styles from './custom-menu.scss';\nimport textFieldStyles from '../../TextField/text-field.scss';\nimport { getLocalizedString as __ } from '../../../utils/i18n';\nimport Flex from '../../../layout/Flex';\nimport useOnClickOutside from '../../../overlay/hooks/useOnClickOutside';\n\ntype Props = ComponentProps<typeof components.Menu>;\n\nfunction CustomMenu({ children, ...props }: Props) {\n const { creatableButton, onMenuInputFocus, onCreate } =\n props.selectProps.componentsProps;\n const [showFooter, setShowFooter] = useState(false);\n const textFieldRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const CreatableButton = (): React.ReactElement<typeof Button> => {\n const button = creatableButton as React.ReactElement;\n if (!button || typeof button === 'string') {\n return (\n <Button\n theme=\"link-primary\"\n onClick={() => setShowFooter(true)}\n size=\"full-width\"\n >\n <Inline space={4} justifyContent=\"center\">\n <IconPlus size=\"medium\" />\n {button || __('main.CREATE_OPTION')}\n </Inline>\n </Button>\n );\n }\n return React.cloneElement(button, {\n onClick: () => setShowFooter(true)\n });\n };\n\n const onCreateButton = () => {\n if (textFieldRef.current && textFieldRef.current.value.trim() !== '') {\n onCreate(textFieldRef.current.value);\n textFieldRef.current.value = '';\n }\n };\n\n const handleClickOutsideContainer = () => {\n onMenuInputFocus(false);\n };\n\n useOnClickOutside(containerRef, handleClickOutsideContainer);\n\n return (\n <components.Menu {...props}>\n <div ref={containerRef}>\n {children}\n <hr className={styles['custom-menu-hr']} />\n {!showFooter ? (\n <CreatableButton />\n ) : (\n <div className={styles['custom-menu-div']}>\n <Flex space={4} flex={[1]} flexItems>\n <input\n className={textFieldStyles['text-field']}\n autoCorrect=\"off\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n type=\"text\"\n onMouseDown={(e) => {\n e.stopPropagation();\n textFieldRef?.current?.focus();\n }}\n onKeyDown={(e) => e.stopPropagation()}\n onKeyPress={(e) => {\n if (e.key === 'Enter') {\n onCreateButton();\n }\n }}\n onTouchEnd={(e) => {\n e.stopPropagation();\n textFieldRef?.current?.focus();\n }}\n onFocus={() => onMenuInputFocus(true)}\n ref={textFieldRef}\n data-testid=\"select-create-option-input\"\n autoFocus\n />\n <Button\n onClick={onCreateButton}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n >\n {__('default.CREATE')}\n </Button>\n </Flex>\n </div>\n )}\n </div>\n </components.Menu>\n );\n}\n\nexport default CustomMenu;\n","import { ComponentProps, useState } from 'react';\nimport Select from 'react-select';\nimport { components } from 'react-select';\nimport { useSelectFieldControllers } from '../hooks/useSelectFieldControllers';\nimport type { Props } from './SelectField';\nimport { isScrollingTheSelectMenu } from './domain';\nimport CustomControl from './CustomControl';\nimport CustomOption from './CustomOption';\nimport { getSelectStyles } from './SelectField.styles';\nimport CustomContainer from './CustomContainer';\nimport CustomMenu from './CustomMenu';\n\nexport const useSelectField = <T extends unknown>({\n asToolbarFilter = false,\n caption,\n disabled,\n error,\n id,\n isClearable = false,\n label,\n menuShouldScrollIntoView = true,\n name,\n noOptionsMessage,\n options,\n onBlur,\n onChange,\n placeholder,\n value,\n defaultValue,\n CustomOption: UserCustomOption,\n SelectedOptionPrefix,\n testId,\n creatableButton,\n onCreate\n}: Props<T>) => {\n const [isMenuInputFocus, setIsMenuInputFocus] = useState(false);\n const onMenuInputFocus = (isFocused: boolean) =>\n setIsMenuInputFocus(isFocused);\n\n const controllers = useSelectFieldControllers({\n error,\n id,\n name,\n onChange,\n onBlur,\n value,\n onMenuInputFocus\n });\n\n const hasError = !!controllers.error;\n\n const defaultNoOptionsMessage =\n noOptionsMessage && typeof noOptionsMessage === 'string'\n ? () => noOptionsMessage\n : undefined;\n const selectProps: ComponentProps<typeof Select> = {\n closeMenuOnScroll: (e: Event) => {\n if (menuShouldScrollIntoView || !e.target) {\n return false;\n }\n\n return !isScrollingTheSelectMenu(e.target as HTMLElement);\n },\n // Used to pass props to the custom components inside `components`\n componentsProps: {\n testId,\n UserCustomOption,\n SelectedOptionPrefix,\n creatableButton,\n onMenuInputFocus,\n onCreate\n },\n /**\n * Don't render an inline component on the object bellow otherwise it can lead to unexpected side effects.\n * Inline declaration will cause remounting issues\n * https://react-select.com/components#defining-components\n */\n components: {\n SelectContainer: CustomContainer,\n Option: UserCustomOption ? CustomOption : components.Option,\n Control: SelectedOptionPrefix ? CustomControl : components.Control,\n Menu: onCreate ? CustomMenu : components.Menu\n },\n inputId: controllers.id,\n isClearable,\n isDisabled: disabled,\n menuPortalTarget: document.body,\n menuPlacement: menuShouldScrollIntoView ? 'bottom' : 'auto',\n menuPosition: menuShouldScrollIntoView ? 'absolute' : 'fixed',\n noOptionsMessage:\n typeof noOptionsMessage === 'function'\n ? noOptionsMessage\n : defaultNoOptionsMessage,\n menuShouldScrollIntoView: menuShouldScrollIntoView,\n onBlur: controllers.onBlur as any,\n onChange: controllers.onChange as any,\n options,\n placeholder,\n styles: getSelectStyles({\n isInvalid: hasError,\n asToolbarFilter\n }),\n value: controllers.value,\n defaultValue,\n menuIsOpen: isMenuInputFocus || undefined\n };\n\n const fieldProps = {\n caption,\n error: controllers.error,\n id: controllers.id,\n label,\n name\n };\n\n return { selectProps, fieldProps };\n};\n","import React, { ComponentProps, Fragment } from 'react';\nimport { components } from 'react-select';\nimport Inline from '../../../layout/Inline';\nimport { getLocalizedString as __ } from '../../../utils/i18n';\nimport styles from './custom-list.scss';\n\ntype Props = ComponentProps<typeof components.MenuList> & {\n hasMoreOptions: boolean;\n hasMoreOptionsFirstLoad: boolean | null | undefined;\n};\n\nconst CustomList = ({\n children,\n hasMoreOptions,\n hasMoreOptionsFirstLoad,\n ...props\n}: Props) => {\n let showFooter = hasMoreOptions;\n if (\n props.selectProps.inputValue === '' &&\n typeof hasMoreOptionsFirstLoad === 'boolean'\n ) {\n showFooter = hasMoreOptionsFirstLoad;\n }\n return (\n <components.MenuList {...props}>\n <Fragment>\n {children}\n {showFooter && (\n <Inline justifyContent=\"center\">\n <div className={styles['custom-list']}>\n {__('main.START_TYPING_TO_SEE_MORE_OPTIONS')}\n </div>\n </Inline>\n )}\n </Fragment>\n </components.MenuList>\n );\n};\n\nexport default CustomList;\n","import { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport { getFormikState } from '../../utils/formik';\nimport { isDate, startOfDay } from 'date-fns';\n\ntype FieldControls = {\n id: string;\n error?: React.ReactNode;\n value?: Date;\n onChange: (e: Date) => void;\n onBlur: () => void;\n};\n\ntype Props = {\n name: string;\n id?: string;\n value?: Date;\n onChange?: (e: Date) => void;\n onBlur?: () => void;\n error?: React.ReactNode;\n};\nexport const useDateFieldControllers = ({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n}: Props): FieldControls => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n let controllers = {\n id,\n error,\n value,\n onChange: (newValue: Date) =>\n onChange &&\n onChange(isDate(newValue) ? startOfDay(newValue) : newValue),\n onBlur: () => onBlur && onBlur()\n };\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n controllers = {\n ...controllers,\n error: error !== undefined ? controllers.error : formikState.error,\n value: value !== undefined ? controllers.value : formikState.value,\n onChange: onChange\n ? controllers.onChange\n : (newValue?: Date) => {\n formik.setFieldValue(\n name,\n newValue === undefined ? null : startOfDay(newValue)\n );\n },\n onBlur: onBlur\n ? controllers.onBlur\n : () => formik.setFieldTouched(name)\n };\n }\n return controllers;\n};\n","import React, { useRef } from 'react';\nimport styles from './date-picker-calendar.scss';\nimport Portal from '../../core/Portal/Portal';\nimport useOnClickOutside from '../../overlay/hooks/useOnClickOutside';\n\ntype Props = {\n classNames: typeof styles;\n inputNode: HTMLElement;\n onBlur: () => void;\n onFocus: () => void;\n tabIndex: number;\n children: React.ReactNode;\n showCalendar: boolean;\n onClickOutside: () => void;\n testId?: string;\n};\nconst DatePickerCalendar: React.FC<Props> = ({\n classNames,\n inputNode,\n children,\n onBlur,\n onFocus,\n tabIndex,\n showCalendar,\n onClickOutside,\n testId\n}) => {\n const inputPosition = inputNode.getBoundingClientRect();\n const calendarRef = useRef<HTMLDivElement>(null);\n useOnClickOutside(calendarRef, onClickOutside);\n\n if (!showCalendar) {\n return null;\n }\n\n return (\n <Portal>\n <div\n className={classNames.overlayWrapper}\n onBlur={onBlur}\n onFocus={onFocus}\n tabIndex={tabIndex}\n style={{\n zIndex: 9999,\n left: inputPosition.left,\n top:\n inputPosition.top +\n window.scrollY +\n inputPosition.height +\n 3\n }}\n ref={calendarRef}\n data-testid={testId}\n >\n <div className={classNames.overlay}>{children}</div>\n </div>\n </Portal>\n );\n};\n\nexport default DatePickerCalendar;\n","import { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport { DateRange, DateRangeError } from '../../utils/date';\nimport { getFormikState } from '../../utils/formik';\n\ntype FieldControls = {\n id: string;\n error?: React.ReactNode;\n value: DateRange;\n onChange: (e: DateRange) => void;\n onBlur: () => void;\n};\n\ntype Props = {\n name: string;\n id?: string;\n value?: DateRange;\n onChange?: (e: DateRange) => void;\n onBlur?: () => void;\n error?: React.ReactNode;\n};\nexport const useRangeFieldControllers = ({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n}: Props): FieldControls => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n const initialControllers = {\n id,\n error,\n value: value || { start: undefined, end: undefined },\n onChange: (newValue: DateRange) => onChange && onChange(newValue),\n onBlur: () => onBlur && onBlur()\n };\n\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n return {\n ...initialControllers,\n error:\n error !== undefined\n ? initialControllers.error\n : getFormikError(formikState.error),\n value:\n value !== undefined\n ? initialControllers.value\n : formikState.value,\n onChange: onChange\n ? initialControllers.onChange\n : (newValue?: DateRange) => {\n formik.setFieldValue(\n name,\n newValue === undefined ? null : newValue\n );\n },\n onBlur: onBlur\n ? initialControllers.onBlur\n : () => formik.setFieldTouched(name)\n };\n }\n return initialControllers;\n};\n\nconst getFormikError = (error?: DateRangeError): string | undefined => {\n if (!error) {\n return undefined;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error.start) {\n return error.start;\n }\n if (error.end) {\n return error.end;\n }\n return undefined;\n};\n","import React, { useRef, useState } from 'react';\nimport { getLocalizedString as __ } from '../../../utils/i18n';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport DatePickerCalendar from '../../DatePickerCalendar';\nimport {\n WeekStart,\n parseDate,\n formatDate,\n MONTH_NAMES,\n DAYS,\n BlockedDays\n} from '../../../utils/date';\nimport styles from '../date-range-field.scss';\nimport { DayModifiers, DayPickerProps } from 'react-day-picker';\nimport { ClassNames } from 'react-day-picker/types/ClassNames';\nimport { Modifier } from 'react-day-picker';\n\ntype Props = {\n name: string;\n id: string;\n format: string;\n disabledDays?: BlockedDays;\n start?: Date;\n end?: Date;\n placeholder: string;\n weekStart: WeekStart;\n disabled?: boolean;\n readOnly: boolean;\n onChange: (e: Date) => void;\n onDayClick: () => void;\n};\nconst FromDate = ({\n name,\n id,\n format,\n disabledDays,\n start,\n end,\n placeholder,\n weekStart,\n disabled,\n readOnly,\n onChange,\n onDayClick\n}: Props) => {\n const [showCalendar, setShowCalendar] = useState(false);\n const inputRef = useRef();\n const modifiers = { from: start, to: end };\n\n const disabledDaysChecks: Modifier[] = end ? [{ after: end }] : [];\n if (disabledDays) {\n if (Array.isArray(disabledDays)) {\n disabledDaysChecks.push(...disabledDays);\n } else {\n disabledDaysChecks.push(disabledDays);\n }\n }\n\n const dayPickerProps: DayPickerProps = {\n // We need to pass classNames here as well, otherwise it will allow disabled dates to be selected\n classNames: styles as unknown as ClassNames,\n months: MONTH_NAMES,\n weekdaysLong: DAYS,\n weekdaysShort: DAYS.map((day) => day.substring(0, 2)),\n\n showOutsideDays: true,\n firstDayOfWeek: weekStart,\n\n selectedDays: [start, { from: start, to: end }],\n disabledDays: disabledDaysChecks,\n toMonth: end,\n modifiers,\n onDayClick: (_, activeModifiers: DayModifiers) => {\n const isDateDisabled = Object.keys(activeModifiers).find(\n (modifier) => modifier\n );\n if (!Boolean(isDateDisabled)) {\n onDayClick();\n }\n }\n };\n return (\n <DayPickerInput\n format={format /* @ts-ignore: styles types are generic */}\n classNames={styles}\n selectedDay={start}\n value={start}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={placeholder}\n onDayChange={onChange}\n onDayPickerHide={() => setShowCalendar(false)}\n overlayComponent={(props: any) => (\n <DatePickerCalendar\n {...props}\n inputNode={inputRef.current}\n showCalendar={showCalendar}\n onClickOutside={() => setShowCalendar(false)}\n />\n )}\n dayPickerProps={dayPickerProps}\n inputProps={{\n name,\n id,\n autoComplete: 'off',\n ref: inputRef,\n readOnly,\n disabled,\n 'data-testid': `range-picker-field-from-${name}`,\n type: 'text',\n onFocus: () => setShowCalendar(true)\n }}\n onDayPickerShow={() => setShowCalendar(true)}\n />\n );\n};\n\nexport default FromDate;\n","import React, { forwardRef, useState } from 'react';\nimport { getLocalizedString as __ } from '../../../utils/i18n';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport DatePickerCalendar from '../../DatePickerCalendar';\nimport {\n WeekStart,\n parseDate,\n formatDate,\n MONTH_NAMES,\n DAYS,\n BlockedDays\n} from '../../../utils/date';\nimport styles from '../date-range-field.scss';\nimport { RefType } from '../../../utils/types';\nimport { Modifier } from 'react-day-picker';\n\ntype Props = {\n name: string;\n format: string;\n disabledDays?: BlockedDays;\n start?: Date;\n end?: Date;\n placeholder: string;\n weekStart: WeekStart;\n disabled?: boolean;\n readOnly: boolean;\n onChange: (e: Date) => void;\n onBlur: () => void;\n};\nconst ToDate = (\n {\n name,\n format,\n disabledDays,\n start,\n end,\n placeholder,\n weekStart,\n disabled,\n readOnly,\n onChange,\n onBlur\n }: Props,\n ref: RefType<HTMLInputElement>\n) => {\n const [showCalendar, setShowCalendar] = useState(false);\n const modifiers = { from: start, to: end };\n\n const disabledDaysChecks: Modifier[] = start ? [{ before: start }] : [];\n if (disabledDays) {\n if (Array.isArray(disabledDays)) {\n disabledDaysChecks.push(...disabledDays);\n } else {\n disabledDaysChecks.push(disabledDays);\n }\n }\n\n const dayPickerProps: any = {\n // We need to pass classNames here as well, otherwise it will allow disabled dates to be selected\n classNames: styles,\n months: MONTH_NAMES,\n weekdaysLong: DAYS,\n weekdaysShort: DAYS.map((day) => day.substring(0, 2)),\n\n showOutsideDays: true,\n firstDayOfWeek: weekStart,\n\n selectedDays: [start, { from: start, to: end }],\n disabledDays: disabledDaysChecks,\n modifiers,\n month: end || start,\n fromMonth: start\n };\n return (\n <DayPickerInput\n format={format /* @ts-ignore: styles types are generic */}\n classNames={styles}\n selectedDay={end}\n value={end}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={placeholder}\n onDayChange={onChange}\n onDayPickerHide={() => setShowCalendar(false)}\n overlayComponent={(props: any) => (\n <DatePickerCalendar\n {...props}\n inputNode={\n (ref as React.MutableRefObject<HTMLInputElement>)\n ?.current\n }\n showCalendar={showCalendar}\n onClickOutside={() => setShowCalendar(false)}\n />\n )}\n dayPickerProps={dayPickerProps}\n inputProps={{\n name,\n autoComplete: 'off',\n ref,\n readOnly,\n disabled,\n 'data-testid': `range-picker-field-to-${name}`,\n type: 'text',\n onFocus: () => setShowCalendar(true),\n onBlur: () => {\n // If we remove this setTimeout, the onChange won't be called\n setTimeout(onBlur, 200);\n }\n }}\n onDayPickerShow={() => setShowCalendar(true)}\n />\n );\n};\n\nexport default forwardRef<HTMLInputElement, Props>(ToDate);\n","import React, { forwardRef } from 'react';\n// @ts-expect-error time-autocomplete does not provide TypeScript definitions\nimport parseTime from 'time-autocomplete/src/core/AMPMParser';\nimport Field from '../Field';\nimport { RefType } from '../../utils/types';\nimport { useTextField } from '../TextField/useTextField';\nimport type { Props as TextFieldProps } from '../TextField/TextField';\n\ntype Props = Omit<TextFieldProps, 'prefix' | 'suffix'>;\n\nconst TimeFieldElement = (\n { placeholder = '9am', autoComplete = 'off', ...allOtherProps }: Props,\n ref: RefType<HTMLInputElement>\n) => {\n const { inputProps, fieldProps } = useTextField({\n ...allOtherProps,\n placeholder,\n autoComplete,\n ref\n });\n\n return (\n <Field {...fieldProps}>\n <input\n {...inputProps}\n onBlur={(e) => {\n e.target.value = parseTime(e.target.value, 'g:i A');\n inputProps.onChange(e);\n inputProps.onBlur(e);\n }}\n />\n </Field>\n );\n};\n\n/**\n * `TimeField` are like `TextField` but it auto-format the value when the user leaves the field.\n *\n * At the end, it is just a string formatted nicely. **You are in charge of validating the value and parsing it back to a value that you can use on your application**.\n */\nconst TimeField = forwardRef<HTMLInputElement, Props>(TimeFieldElement);\n\nexport default TimeField;\n","import React, { forwardRef } from 'react';\nimport Field from '../Field';\nimport { RefType } from '../../utils/types';\nimport { useTextField } from '../TextField/useTextField';\nimport type { Props as TextFieldProps } from '../TextField/TextField';\nimport AffixContainer from '../AffixContainer';\n\ntype CurrencyProps = {\n currencySymbol: string\n} & Omit<TextFieldProps, 'prefix' | 'suffix'>;\n\nconst CurrencyFieldElement = (\n {\n currencySymbol = \"$\",\n ...allOtherProps\n }: CurrencyProps,\n ref: RefType<HTMLInputElement>\n) => {\n const { inputProps, fieldProps } = useTextField({\n ...allOtherProps,\n ref\n });\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={currencySymbol}>\n <input\n {...inputProps}\n type='number'\n inputMode='decimal'\n step='0.01'\n min={0}\n onKeyDown={e => {\n if (e.key === 'e' || e.key === '-') {\n e.preventDefault();\n return;\n }\n inputProps.onKeyDown(e);\n }}\n onBlur={(e) => {\n e.currentTarget.value = parseFloat(e.currentTarget.value).toFixed(2);\n inputProps.onChange(e);\n inputProps.onBlur(e);\n }}\n />\n </AffixContainer>\n </Field>\n );\n};\n\n/**\n * `CurrencyField` is like `TextField` but it auto-format the value when the user leaves the field.\n *\n * At the end, it is just a string formatted nicely. **You are in charge of validating the value and parsing it back to a value that you can use on your application**.\n */\nconst CurrencyField = forwardRef<HTMLInputElement, TextFieldProps & CurrencyProps>(CurrencyFieldElement);\n\nexport default CurrencyField;\n","import React, {forwardRef} from 'react';\nimport Field from '../Field';\nimport { RefType } from '../../utils/types';\nimport { useTextField } from '../TextField/useTextField';\nimport type { Props as TextFieldProps } from '../TextField/TextField';\nimport AffixContainer from '../AffixContainer';\n\ntype Props = {\n max?: number\n min?: number\n precision?: number\n stepSize?: number\n} & Omit<TextFieldProps, 'suffix' | 'maxLength'>;\n\nconst PercentageElement = (\n { max = 100, min = 0, precision = 0, stepSize = 1, ...allOtherProps }: Props,\n ref: RefType<HTMLInputElement>\n) => {\n const { inputProps, fieldProps } = useTextField({...allOtherProps, ref});\n const inputMode = precision > 0 ? 'decimal' : 'numeric';\n\n const decimalDigitsCount = (input: string): number => {\n const decimalIndex = input.indexOf('.');\n return decimalIndex === -1 ? 0 : input.length - decimalIndex - 1;\n };\n\n const inputIsValid = (valueAsString: string): boolean => {\n if (valueAsString.startsWith('00')) {\n return false;\n }\n\n if (valueAsString === '-' || valueAsString === '.') {\n return true;\n }\n\n //only allow '-' as the first character\n if (valueAsString.indexOf('-') > 0) {\n return false;\n }\n\n return decimalDigitsCount(valueAsString) <= precision;\n };\n\n const keyPressIsValid = (keyPress: string, value: string): boolean => {\n // Prevent scientific notation, plus key, and negative key if min is equal to or below 0.\n if (keyPress == 'e' || keyPress == '+' || (keyPress == '-' && min >= 0)) {\n return false;\n }\n\n // Check for edge cases where the user should not be able to type in any more decimal points.\n if (keyPress == '.' && (precision == 0 || Number(value) == max)) {\n return false;\n }\n\n return true;\n };\n\n return (\n <Field {...fieldProps}>\n <AffixContainer suffix='%'>\n <input\n {...inputProps}\n type='number'\n inputMode={inputMode}\n step={stepSize}\n max={max}\n min={min}\n onKeyDown={e => {\n const value = e.currentTarget.value + e.key;\n if (e.key.length === 1 && (!keyPressIsValid(e.key, value) || !inputIsValid(value))) {\n e.preventDefault();\n return;\n }\n\n inputProps.onKeyDown(e);\n }}\n onChange={(e) => {\n const number = Number(e.target.value);\n if (number > max) {\n e.target.value = String(max);\n }\n\n if (number < min) {\n e.target.value = String(min);\n }\n\n inputProps.onChange(e);\n inputProps.onBlur(e);\n }}\n />\n </AffixContainer>\n </Field>\n );\n};\n\n/**\n * `PercentageField` is an extended `TextField` input with validation and formatting in place to properly display percentage values.\n * In its default state it only allows integers between 0 and 100, but it can be configured to allow decimals and negative values.\n */\nconst PercentageField = forwardRef<HTMLInputElement, Props>(PercentageElement);\n\nexport default PercentageField;\n","import { BANNER_THEME, BUTTON_THEME } from '../constants';\nimport { Button } from '../../../actions';\nimport { InlineBannerTheme } from '../types';\nimport React from 'react';\n\ntype ButtonCTAProps = {\n button: React.ReactElement;\n bannerTheme: InlineBannerTheme;\n primaryCTA?: boolean;\n};\n\n/** Infers theme prop for Sous Chef Button CTAs if not explicitly passed, default is hollow, primaryCTA is Upsell if banner theme is Upsell*/\nconst ButtonCTA = ({\n button,\n bannerTheme,\n primaryCTA = false\n}: ButtonCTAProps) => {\n if (button.type !== Button || button.props.theme) {\n return button;\n }\n if (bannerTheme === BANNER_THEME.UPSELL && primaryCTA) {\n return React.cloneElement(button, {\n theme: BUTTON_THEME.UPSELL,\n ...button.props\n });\n }\n return React.cloneElement(button, {\n theme: BUTTON_THEME.HOLLOW,\n ...button.props\n });\n};\n\nexport default ButtonCTA;\n","export const BANNER_THEME = {\n INFO: 'info' as 'info',\n WARNING: 'warning' as 'warning',\n SUCCESS: 'success' as 'success',\n DANGER: 'danger' as 'danger',\n UPSELL: 'upsell' as 'upsell'\n};\n\nexport const BUTTON_THEME = {\n HOLLOW: 'hollow' as 'hollow',\n UPSELL: 'upsell' as 'upsell'\n};\n","import React from 'react';\nimport Inline from '../../../layout/Inline';\nimport Stack from '../../../layout/Stack';\nimport ButtonCTA from '../ButtonCTA/ButtonCTA';\nimport { InlineBannerTheme } from '../types';\nimport styles from './inline-banner-cta.scss';\n\ntype Props = {\n primaryButton: React.ReactElement;\n secondaryButton?: React.ReactElement;\n caption?: string;\n multiLine: boolean;\n bannerTheme: InlineBannerTheme;\n};\n\nconst InlineBannerCTA = ({\n primaryButton,\n secondaryButton,\n caption,\n multiLine,\n bannerTheme\n}: Props) => {\n return (\n <Stack space={12} data-testid=\"banner_ctas\">\n {multiLine ? (\n <Inline flexWrap=\"wrap\" space={12}>\n <ButtonCTA\n button={primaryButton}\n bannerTheme={bannerTheme}\n primaryCTA\n />\n {secondaryButton && (\n <ButtonCTA\n button={secondaryButton}\n bannerTheme={bannerTheme}\n />\n )}\n </Inline>\n ) : (\n <Inline flexWrap=\"wrap\" space={12}>\n {secondaryButton && (\n <ButtonCTA\n button={secondaryButton}\n bannerTheme={bannerTheme}\n />\n )}\n <ButtonCTA\n button={primaryButton}\n bannerTheme={bannerTheme}\n primaryCTA\n />\n </Inline>\n )}\n {caption && multiLine && (\n <div className={styles['banner__caption']}>{caption}</div>\n )}\n </Stack>\n );\n};\n\nexport default InlineBannerCTA;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconInfoCircle = forwardRef(\n (\n { testId = 'icon-info-circle', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M.313 10C.313 4.652 4.65.312 10 .312s9.688 4.34 9.688 9.688A9.687 9.687 0 0 1 10 19.688 9.687 9.687 0 0 1 .312 10Zm18.125 0c0-4.685-3.804-8.438-8.438-8.438A8.437 8.437 0 0 0 1.562 10 8.435 8.435 0 0 0 10 18.438 8.435 8.435 0 0 0 18.438 10Zm-9.844 3.75h.469V9.062h-.47a.469.469 0 0 1-.468-.468V8.28c0-.259.21-.469.469-.469h1.875c.259 0 .469.21.469.47v5.468h.468c.26 0 .469.21.469.469v.312c0 .26-.21.469-.469.469H8.594a.469.469 0 0 1-.469-.469v-.312c0-.26.21-.469.469-.469Zm.156-8.125a1.25 1.25 0 1 1 2.5 0 1.25 1.25 0 0 1-2.5 0Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconInfoCircle.displayName = 'IconInfoCircle';\nexport default IconInfoCircle;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconExclaimationTriangle = forwardRef(\n (\n { testId = 'icon-exclaimation-triangle', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"m19.74 16.378-8.315-14.42C10.787.85 9.182.85 8.54 1.958L.225 16.378c-.637 1.105.16 2.495 1.442 2.495h16.635c1.275 0 2.08-1.386 1.438-2.495Zm-9.144-9.706h-1.23a.208.208 0 0 0-.208.215l.26 6.794a.207.207 0 0 0 .208.201h.71a.21.21 0 0 0 .208-.2l.26-6.795a.208.208 0 0 0-.208-.215Zm-1.584 8.874c0-.537.433-.97.97-.97.538 0 .971.433.971.97 0 .537-.433.97-.97.97a.969.969 0 0 1-.97-.97Zm-7.348 2.218h16.638a.554.554 0 0 0 .478-.832L10.461 2.513a.555.555 0 0 0-.96 0l-8.319 14.42a.556.556 0 0 0 .482.831Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconExclaimationTriangle.displayName = 'IconExclaimationTriangle';\nexport default IconExclaimationTriangle;\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconAward = forwardRef(\n (\n { testId = 'icon-award', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.834 10.635a2.246 2.246 0 0 0 .563-2.134l-.05-.188c-.09-.34-.136-.51-.136-.68 0-.171.045-.342.136-.683l.05-.188c.2-.76-.016-1.577-.563-2.135l-.105-.106c-.27-.27-.4-.4-.486-.555-.08-.143-.122-.307-.204-.622l-.058-.218a2.205 2.205 0 0 0-1.545-1.57l-.182-.049c-.327-.087-.494-.132-.64-.216-.153-.089-.28-.221-.544-.493L12.967.69a2.183 2.183 0 0 0-2.122-.576l-.157.044c-.349.097-.52.145-.691.144-.166 0-.331-.046-.657-.137L9.154.115a2.179 2.179 0 0 0-2.12.578L6.907.82c-.25.257-.374.384-.52.469-.143.083-.307.127-.631.214l-.191.052a2.206 2.206 0 0 0-1.547 1.569l-.055.21c-.084.324-.127.489-.208.633-.085.151-.212.278-.47.54l-.12.12a2.245 2.245 0 0 0-.562 2.135l.05.187c.09.34.136.51.136.68 0 .17-.045.341-.136.683l-.05.189c-.2.76.016 1.577.563 2.134l.105.106c.27.27.4.401.485.556.08.143.123.306.205.622l.057.218c.078.297.23.559.414.793l-1.857 4.567a.623.623 0 0 0 .576.858h.002l.45-.017h.006l1.616-.062 1.41 1.49a.62.62 0 0 0 1.029-.193l2.041-5.021a.909.909 0 0 1 .588 0l2.04 5.02a.62.62 0 0 0 1.03.194l1.41-1.49 1.619.062.453.017h.003a.623.623 0 0 0 .575-.858l-1.856-4.567c.184-.234.335-.495.414-.792l.055-.21c.084-.324.127-.49.208-.634.085-.151.211-.278.47-.54l.12-.12ZM6.264 7.508A3.74 3.74 0 0 1 10 3.772a3.74 3.74 0 0 1 3.736 3.736A3.74 3.74 0 0 1 10 11.243a3.74 3.74 0 0 1-3.735-3.735Zm1.246 0A2.493 2.493 0 0 0 10 9.998a2.493 2.493 0 0 0 2.49-2.49A2.493 2.493 0 0 0 10 5.018a2.493 2.493 0 0 0-2.49 2.49ZM5.743 17.01l1.133 1.197 1.317-3.239a2.159 2.159 0 0 1-1.4-.642l-.013-.013c-.174-.178-.268-.273-.379-.34-.13-.08-.283-.12-.615-.207l-.221-.059c-.017-.005-.033-.012-.048-.02-.014-.006-.027-.013-.041-.018l-1.383 3.404 1.136-.044.514-.02Zm10.165.063-1.104-.042-.546-.021-1.134 1.197-1.319-3.245a2.152 2.152 0 0 0 1.402-.636l.015-.015c.18-.184.276-.281.389-.349.126-.075.274-.113.587-.194l.238-.061a.27.27 0 0 0 .047-.02c.014-.006.027-.013.042-.018l1.383 3.404Zm-1.8-4.567a.96.96 0 0 0 .67-.686c.157-.6.231-.894.375-1.148.144-.254.357-.469.793-.91a.995.995 0 0 0 .247-.946l-.002-.005c-.316-1.178-.316-1.18.002-2.366a.994.994 0 0 0-.247-.946c-.854-.861-.855-.866-1.146-1.972l-.022-.086a.96.96 0 0 0-.67-.685c-.585-.159-.875-.234-1.126-.38-.253-.147-.466-.365-.903-.813a.934.934 0 0 0-.907-.248c-.591.164-.882.245-1.172.245-.29 0-.58-.082-1.173-.245a.929.929 0 0 0-.906.25c-.438.444-.645.66-.894.806-.248.146-.536.222-1.135.385a.957.957 0 0 0-.67.685c-.157.6-.231.894-.375 1.148-.144.254-.357.469-.793.91a.995.995 0 0 0-.247.946c.318 1.182.317 1.186.003 2.361l-.003.01c-.089.339.006.7.247.946.854.861.855.866 1.146 1.972l.022.086a.96.96 0 0 0 .67.685l.186.05c.77.205.975.259 1.603.898a.92.92 0 0 0 1.158.137 2.184 2.184 0 0 1 2.322 0 .917.917 0 0 0 1.158-.136c.634-.647.84-.7 1.6-.899l.189-.05Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconAward.displayName = 'IconAward';\nexport default IconAward;\n","import React from 'react';\nimport IconInfoCircle from '@7shifts/sous-chef-icons/IconInfoCircle';\nimport IconExclaimationTriangle from '@7shifts/sous-chef-icons/IconExclaimationTriangle';\nimport IconCheck from '@7shifts/sous-chef-icons/IconCheck';\nimport IconTimesOctagon from '@7shifts/sous-chef-icons/IconTimesOctagon';\nimport IconAward from '@7shifts/sous-chef-icons/IconAward';\nimport { BANNER_THEME } from '../constants';\nimport { InlineBannerTheme } from '../types';\n\ntype BannerIconProps = { theme: InlineBannerTheme };\n\nconst InlineBannerIcon = ({ theme }: BannerIconProps) => {\n switch (theme) {\n case BANNER_THEME.INFO:\n return <IconInfoCircle />;\n\n case BANNER_THEME.WARNING:\n return <IconExclaimationTriangle />;\n\n case BANNER_THEME.SUCCESS:\n return <IconCheck />;\n\n case BANNER_THEME.DANGER:\n return <IconTimesOctagon />;\n\n case BANNER_THEME.UPSELL:\n return <IconAward />;\n }\n};\n\nexport default InlineBannerIcon;\n","export const getProgressMetric = (progress: number, maxValue: number) => {\n const updatedMaxValue = maxValue > 0 ? maxValue : 100;\n\n let updatedProgress = progress;\n if (updatedProgress > updatedMaxValue) {\n updatedProgress = updatedMaxValue;\n }\n\n if (updatedProgress < 0) {\n updatedProgress = 0;\n }\n\n return {\n progress: updatedProgress,\n maxValue: updatedMaxValue\n };\n};\n\n/**\n * This function calculates the progress bar so it can align in the center of each step\n */\nexport const getProgressMetricWithSteps = (\n progress: number,\n amountOfSteps: number\n) => {\n const maxValue = amountOfSteps * 2;\n let actualProgress = progress;\n\n if (progress < 0) {\n actualProgress = 0;\n }\n\n if (progress > 0) {\n const previousProgress = (progress - 1) * 2;\n actualProgress = previousProgress + 1;\n }\n\n if (actualProgress > maxValue) {\n actualProgress = maxValue;\n }\n\n return {\n progress: actualProgress,\n maxValue\n };\n};\n","import { getProgressMetric } from './domain';\n\ntype UseProgress = {\n elementProps: {\n 'aria-valuemax': number;\n 'aria-valuemin': number;\n 'aria-valuenow': number;\n role: string;\n };\n metric: {\n percentage: number;\n maxValue: number;\n progress: number;\n };\n};\nexport const useProgress = (\n progress: number,\n maxValue: number,\n getMetric = getProgressMetric\n): UseProgress => {\n const metric = getMetric(progress, maxValue);\n const percentage = (metric.progress / metric.maxValue) * 100;\n const elementProps = {\n 'aria-valuemax': metric.maxValue,\n 'aria-valuemin': 0,\n 'aria-valuenow': metric.progress,\n role: 'progressbar'\n };\n return {\n elementProps,\n metric: {\n ...metric,\n percentage\n }\n };\n};\n","import React, { useRef, useLayoutEffect, forwardRef } from 'react';\nimport classnames from 'classnames';\nimport styles from './badge.scss';\nimport { RefType } from '../../utils/types';\nimport { Tooltip } from '../../overlay';\n\ntype Props = {\n children: React.ReactNode;\n theme?: 'success' | 'danger' | 'warning' | 'info';\n /** This will show a black tooltip when the user hover the button */\n title?: string;\n testId?: string;\n};\nconst Badge = (\n { children, theme, title, testId, ...otherProps }: Props,\n forwardedRef: RefType<HTMLDivElement>\n) => {\n const internalRef = useRef<HTMLDivElement>(null);\n\n const ref = forwardedRef || internalRef;\n\n useLayoutEffect(() => {\n if (\n typeof ref !== 'function' &&\n ref.current &&\n React.isValidElement(children) &&\n typeof children?.type !== 'string' &&\n typeof children?.type !== 'number'\n ) {\n ref.current.style.height = ref.current.offsetWidth + 'px';\n }\n });\n\n return (\n <Tooltip overlay={title} ref={ref}>\n <div\n className={classnames(styles['badge'], {\n [styles['badge--success']]: theme === 'success',\n [styles['badge--danger']]: theme === 'danger',\n [styles['badge--info']]: theme === 'info',\n [styles['badge--warning']]: theme === 'warning'\n })}\n ref={ref}\n data-testid={testId}\n {...otherProps}\n >\n {children}\n </div>\n </Tooltip>\n );\n};\n\nexport default forwardRef<HTMLDivElement, Props>(Badge);\n","import React, { forwardRef } from 'react';\nimport { IconSize, RefType } from '../types';\nimport { getIconStyles } from '../iconUtils';\ntype Props = {\n size?: IconSize,\n color?: string,\n testId?: string\n} & React.SVGProps<SVGSVGElement>;\nconst IconUserSolid = forwardRef(\n (\n { testId = 'icon-user-solid', ...props }: Props,\n ref: RefType<SVGSVGElement>\n ) => {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={getIconStyles(props)}\n data-testid={testId}\n ref={ref}\n {...props}\n >\n <path\n d=\"M10 10c2.63 0 4.762-2.238 4.762-5S12.63 0 10 0C7.37 0 5.238 2.238 5.238 5S7.37 10 10 10Zm3.334 1.25h-.622a6.226 6.226 0 0 1-2.712.625 6.238 6.238 0 0 1-2.712-.625h-.621c-2.76 0-5 2.352-5 5.25v1.625c0 1.035.8 1.875 1.786 1.875h13.095c.986 0 1.786-.84 1.786-1.875V16.5c0-2.898-2.24-5.25-5-5.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n);\nIconUserSolid.displayName = 'IconUserSolid';\nexport default IconUserSolid;\n","import React, { useState } from 'react';\nimport IconUserSolid from '@7shifts/sous-chef-icons/IconUserSolid';\nimport styles from './avatar-image.scss';\n\ntype Props = {\n url?: string;\n color?: string;\n alt?: string;\n onImageFallbackError: () => void;\n};\nconst AvatarImage: React.FC<Props> = ({\n url,\n color,\n alt = 'Profile',\n onImageFallbackError\n}) => {\n const [hasImageError, setHasImageError] = useState(false);\n if (url && !hasImageError) {\n return (\n <img\n src={url}\n alt={alt}\n onError={() => {\n setHasImageError(true);\n onImageFallbackError();\n }}\n />\n );\n }\n\n return (\n <div className={styles['avatar-image']}>\n <IconUserSolid size=\"flexible\" color={color} />\n </div>\n );\n};\n\nexport default AvatarImage;\n","export const PROFILE_IMAGES = [\n {\n backgroundColor: '#EAD3E3',\n avatarColor: '#AA6589'\n },\n {\n backgroundColor: '#F4F6FC',\n avatarColor: '#9EA9D3'\n },\n {\n backgroundColor: '#FBEBE6',\n avatarColor: '#F3A097'\n },\n {\n backgroundColor: '#F7FAF2',\n avatarColor: '#BBCA94'\n },\n {\n backgroundColor: '#E1F3EF',\n avatarColor: '#8DC3B9'\n },\n {\n backgroundColor: '#F2DCBD',\n avatarColor: '#A98146'\n },\n {\n backgroundColor: '#AA6589',\n avatarColor: '#EAD3E3'\n },\n {\n backgroundColor: '#9EA9D3',\n avatarColor: '#F4F6FC'\n },\n {\n backgroundColor: '#F3A097',\n avatarColor: '#FBEBE6'\n },\n {\n backgroundColor: '#BBCA94',\n avatarColor: '#F7FAF2'\n },\n {\n backgroundColor: '#8DC3B9',\n avatarColor: '#E1F3EF'\n },\n {\n backgroundColor: '#A98146',\n avatarColor: '#F2DCBD'\n }\n];\n","import React, { useRef, useState } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport Field from '../Field';\nimport type { SelectOptions } from '../SelectField/types';\nimport type { Props as SelectProps } from '../SelectField/SelectField';\nimport AffixContainer from '../AffixContainer';\nimport { AsyncSelectOptions } from './types';\nimport { debounce } from 'lodash-es';\nimport { getLocalizedString as __ } from '../../utils/i18n';\nimport { useSelectField } from '../SelectField/useSelectField';\nimport CustomList from './CustomList';\n\ntype Props<T> = {\n /** It is a function that takes the input search as parameter and returns a Promise with all the options and if there are more options to load. If it brings all the options on the first load, it won't call the `loadOptions` to perform the search. */\n loadOptions: (inputValue: string) => Promise<AsyncSelectOptions<T>>;\n /** It fires `loadOptions` again if this key value changes. Used when it depends on other fields to load its options */\n key?: string | number;\n} & Omit<SelectProps<T>, 'options'>;\n\n/**\n * Component to make possible choose from async options. It looks exactly as the [SelectField](./?path=/docs/forms-selectfield--default) but, this one handle asynchronous options.\n * Instead of passing a `options` props, this component requires a `loadOptions` prop.\n * */\nconst AsyncSelectField = <T extends unknown>({\n loadOptions,\n ...props\n}: Props<T>) => {\n const [hasMoreOptions, setHasMoreOptions] = useState(false);\n const [hasMoreOptionsFirstLoad, setHasMoreOptionsFirstLoad] = useState<\n boolean | null\n >();\n const [hasFirstLoadPerformed, setHasFirstLoadPerformed] = useState(false);\n const [localOptions, setLocalOptions] = useState<SelectOptions<T> | null>(\n null\n );\n\n const ref = useRef(null);\n\n const handleInternalSearch = (\n inputValue: string,\n callback: (options: SelectOptions<T>) => void\n ) => {\n if (!localOptions) {\n return;\n }\n const filteredOptions = localOptions.filter((option) =>\n option.label.toLowerCase().includes(inputValue.toLocaleLowerCase())\n );\n callback(filteredOptions);\n };\n\n const handleLoadOptions = (\n inputValue: string,\n callback: (options: SelectOptions<T>) => void\n ) => {\n if (hasMoreOptions) {\n setHasMoreOptions(false);\n }\n\n if (localOptions) {\n handleInternalSearch(inputValue, callback);\n return;\n }\n\n loadOptions(inputValue).then(({ hasMore, options }) => {\n if (\n ref.current &&\n inputValue !== ref?.current?.['state']['inputValue']\n ) {\n return;\n }\n if (!hasFirstLoadPerformed) {\n setHasFirstLoadPerformed(true);\n if (!hasMore) {\n setLocalOptions(options);\n }\n }\n setHasMoreOptions(hasMore);\n if (hasMoreOptionsFirstLoad === undefined) {\n setHasMoreOptionsFirstLoad(hasMore);\n }\n callback(options);\n });\n };\n\n const { fieldProps, selectProps } = useSelectField({\n ...props,\n options: []\n });\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={props.prefix}>\n <AsyncSelect\n {...selectProps}\n components={{\n ...selectProps.components,\n MenuList: (props) => (\n <CustomList\n {...props}\n hasMoreOptions={hasMoreOptions}\n hasMoreOptionsFirstLoad={\n hasMoreOptionsFirstLoad\n }\n />\n )\n }}\n cacheOptions={false}\n defaultOptions\n loadOptions={debounce(handleLoadOptions, 500, {\n leading: true\n })}\n ref={ref}\n />\n </AffixContainer>\n </Field>\n );\n};\n\nexport default AsyncSelectField;\n","import React, { useState } from 'react';\nimport classnames from 'classnames';\nimport { GREY400, GREY200 } from '../../foundation/colors';\nimport styles from './avatar.scss';\nimport AvatarImage from './AvatarImage';\nimport { PROFILE_IMAGES } from './constants';\n\ntype Props = {\n children?: React.ReactNode;\n size?: 'small' | 'medium' | 'large' | 'extra-large';\n color?: string;\n url?: string;\n badge?: React.ReactNode;\n alt?: string;\n testId?: string;\n};\nconst Avatar: React.FC<Props> = ({\n children,\n color = GREY400,\n size = 'medium',\n url,\n badge,\n alt,\n testId\n}) => {\n const [showIconInsteadOfImage, setShowIconInsteadOfImage] = useState(false);\n const [defaultProfilePictureColors] = useState(\n () => PROFILE_IMAGES[Math.floor(Math.random() * PROFILE_IMAGES.length)]\n );\n\n // If passing an url we are defaulting to a lighter grey while the image loads\n const backgroundColor = url ? GREY200 : color;\n return (\n <div\n className={classnames(styles['avatar'], {\n [styles['avatar--small']]: size === 'small',\n [styles['avatar--medium']]: size === 'medium',\n [styles['avatar--large']]: size === 'large',\n [styles['avatar--extra-large']]: size === 'extra-large'\n })}\n style={{\n backgroundColor:\n children || (url && !showIconInsteadOfImage)\n ? backgroundColor\n : defaultProfilePictureColors.backgroundColor\n }}\n data-testid={testId}\n >\n {children || (\n <AvatarImage\n url={url}\n color={defaultProfilePictureColors.avatarColor}\n alt={alt}\n onImageFallbackError={() => setShowIconInsteadOfImage(true)}\n />\n )}\n {badge && size !== 'small' && (\n <div className={styles['avatar__badge']}>{badge}</div>\n )}\n </div>\n );\n};\n\nexport default Avatar;\n","import classnames from 'classnames';\nimport React from 'react';\nimport KebabMenu from '../../overlay/KebabMenu';\nimport { MenuAction } from '../../overlay/Menu/types';\nimport styles from './card.scss';\n\ntype Props = {\n children: React.ReactNode;\n onClick?: () => void;\n isSelected?: boolean;\n actions?: MenuAction[];\n testId?: string;\n};\n\nconst Card = ({\n children,\n onClick,\n isSelected = false,\n actions,\n testId\n}: Props) => {\n return (\n <div className={classnames(styles['card'])}>\n {onClick ? (\n <button\n className={classnames(\n styles['card__body'],\n styles['card__body--interactive'],\n {\n [styles['card__body--focus']]: isSelected,\n [styles['card__body--with-kebab']]: actions\n }\n )}\n data-testid={testId}\n tabIndex={0}\n onClick={onClick}\n >\n {children}\n </button>\n ) : (\n <div\n className={classnames(styles['card__body'], {\n [styles['card__body--focus']]: isSelected,\n [styles['card__body--with-kebab']]: actions\n })}\n data-testid={testId}\n >\n {children}\n </div>\n )}\n {actions && (\n <div className={classnames(styles['card__kebab'])}>\n <KebabMenu actions={actions} />\n </div>\n )}\n </div>\n );\n};\n\nexport default Card;\n","import React from 'react';\nimport { useCheckBoxFieldControllers } from '../hooks/useCheckBoxFieldControllers';\nimport Stack from '../../layout/Stack';\nimport Label from '../Label';\nimport Caption from '../Caption';\nimport ErrorMessage from '../ErrorMessage';\nimport styles from './check-box-field.scss';\nimport Flex from '../../layout/Flex';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n checked?: boolean;\n onChange?: (e: boolean) => void;\n onBlur?: (e: boolean) => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n disabled?: boolean;\n /** This is used for setting the data-testid */\n testId?: string;\n};\n/** CheckboxField form element. */\nconst CheckboxField: React.FC<Props> = ({\n name,\n id: inputId,\n checked,\n onChange,\n onBlur,\n label,\n caption,\n error,\n disabled,\n testId\n}) => {\n const controllers = useCheckBoxFieldControllers({\n name,\n id: inputId,\n checked,\n onChange,\n onBlur,\n error\n });\n\n const hasError = !!controllers.error;\n\n return (\n <Stack space={8}>\n <Flex space={8} alignItems=\"center\" flexItems flex={['0 0 auto']}>\n <div className={styles['check-box-field']}>\n <input\n name={name}\n id={controllers.id}\n type=\"checkbox\"\n data-testid={testId || `check-box-field-${name}`}\n aria-describedby={\n hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`\n }\n aria-invalid={hasError}\n disabled={disabled}\n checked={controllers.checked}\n onChange={controllers.onChange}\n onBlur={controllers.onBlur}\n />\n <span className={styles['check-box-field__custom-input']} />\n </div>\n {label && (\n <Label htmlFor={controllers.id} truncate={false}>\n {label}\n </Label>\n )}\n </Flex>\n {caption && (\n <div className={styles['check-box-field__caption']}>\n <Caption fieldId={controllers.id}>{caption}</Caption>\n </div>\n )}\n {controllers.error && (\n <ErrorMessage fieldId={controllers.id}>\n {controllers.error}\n </ErrorMessage>\n )}\n </Stack>\n );\n};\n\nexport default CheckboxField;\n","import React from 'react';\nimport { useFormContext } from '../Form/FormContext';\nimport { useFieldId } from './useFieldId';\nimport { getFormikState } from '../../utils/formik';\n\ntype FieldControls = {\n id: string;\n error?: React.ReactNode;\n checked?: boolean;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onBlur: (e: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype Props = {\n name: string;\n id?: string;\n checked?: boolean;\n onChange?: (e: boolean) => void;\n onBlur?: (e: boolean) => void;\n error?: React.ReactNode;\n};\nexport const useCheckBoxFieldControllers = ({\n name,\n id: inputId,\n checked,\n onChange,\n onBlur,\n error\n}: Props): FieldControls => {\n const { formik } = useFormContext();\n const id = useFieldId({ name, id: inputId });\n\n let controllers: FieldControls = {\n id,\n error,\n checked,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) =>\n onChange && onChange(e.target.checked),\n onBlur: (e: React.ChangeEvent<HTMLInputElement>) =>\n onBlur && onBlur(e.target.checked)\n };\n\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n controllers = {\n ...controllers,\n error: error !== undefined ? controllers.error : formikState.error,\n checked:\n checked !== undefined ? controllers.checked : formikState.value,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n formik.setFieldValue(name, e.target.checked);\n onChange && onChange(e.target.checked);\n },\n onBlur: (e: React.ChangeEvent<HTMLInputElement>) => {\n formik.setFieldTouched(name);\n onBlur && onBlur(e.target.checked);\n }\n };\n }\n return controllers;\n};\n","import React from 'react';\nimport classnames from 'classnames';\nimport { Theme } from './types';\nimport { CHIP_THEME } from './constants';\nimport styles from './chip.scss';\n\ntype Props = {\n /** It is the body text of the Chip */\n children: React.ReactNode;\n theme?: Theme;\n /** This is used for overriding the default data-testid */\n testId?: string;\n};\n\nconst Chip = ({ children, theme = CHIP_THEME.MARKETING, testId }: Props) => {\n return (\n <div\n data-testid={testId}\n className={classnames(styles['chip'], {\n [styles['chip--marketing']]: theme === CHIP_THEME.MARKETING,\n [styles['chip--success']]: theme === CHIP_THEME.SUCCESS,\n [styles['chip--upsell']]: theme === CHIP_THEME.UPSELL,\n [styles['chip--warning']]: theme === CHIP_THEME.WARNING,\n [styles['chip--info']]: theme === CHIP_THEME.INFO,\n [styles['chip--danger']]: theme === CHIP_THEME.DANGER\n })}\n >\n {children}\n </div>\n );\n};\n\nexport default Chip;\n","export const CHIP_THEME = {\n MARKETING: 'marketing' as const,\n SUCCESS: 'success' as const,\n UPSELL: 'upsell' as const,\n WARNING: 'warning' as const,\n INFO: 'info' as const,\n DANGER: 'danger' as const\n};\n","import React from 'react';\nimport { useProgress } from '../Progress/useProgress';\nimport styles from './circular-progress.scss';\n\ntype Props = {\n progress: number;\n maxValue?: number;\n children?: React.ReactNode;\n testId?: string;\n};\n\nconst CircularProgress = ({\n progress,\n maxValue = 100,\n children,\n testId\n}: Props) => {\n const { elementProps, metric } = useProgress(progress, maxValue);\n const determinant = metric.percentage * 2.79;\n\n return (\n <div\n {...elementProps}\n className={styles['circular-progress']}\n data-testid={testId}\n >\n <svg viewBox=\"0 0 100 100\">\n <circle\n cx={50}\n cy={50}\n r={45}\n strokeWidth=\"10px\"\n className={styles['circular-progress__track']}\n />\n <circle\n cx={50}\n cy={50}\n r={45}\n strokeWidth=\"10px\"\n className={styles['circular-progress__indicator']}\n strokeDashoffset=\"66\"\n strokeDasharray={`${determinant} ${279 - determinant}`}\n />\n </svg>\n <div className={styles['circular-progress__label']}>\n {children || `${metric.progress}/${metric.maxValue}`}\n </div>\n </div>\n );\n};\n\nexport default CircularProgress;\n","import React from 'react';\nimport styles from './data-table-cell.scss';\nimport { useDataTableContext } from '../DataTableContext';\nimport classnames from 'classnames';\n\ntype Props = {\n children: React.ReactNode;\n columnIndex: number;\n};\n\nconst DataTableCell = ({ children, columnIndex }: Props) => {\n const { columns } = useDataTableContext();\n const column = columns?.[columnIndex] ?? null;\n const isRightAligned = column ? column.isRightAligned : false;\n\n return (\n <div\n className={classnames(\n {\n [styles['data-table-cell--right-aligned']]: isRightAligned\n },\n styles['data-table-cell']\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default DataTableCell;\n","import React from 'react';\nimport { useFieldControllers } from '../../forms/hooks/useFieldControllers';\nimport Field from '../../forms/Field';\nimport AffixContainer from '../../forms/AffixContainer';\nimport styles from './data-table-editable-cell.scss';\nimport { useDataTableContext } from '../DataTable/DataTableContext';\nimport classnames from 'classnames';\nimport Tooltip from '../../overlay/Tooltip';\n\ntype Props = {\n name: string;\n columnIndex: number;\n rowIndex: number;\n id?: string;\n value?: string;\n onChange?: (e: string) => void;\n onBlur?: (e: string) => void;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n /** Use a prefix for things like currency symbols (“$”, “¥”, “£”) or icons. */\n prefix?: React.ReactNode;\n /** Use suffix for things like units of measure (“in”, “cm”, ”hours”) or icons. */\n suffix?: React.ReactNode;\n defaultValue?: string;\n type?: 'text' | 'currency';\n testId?: string;\n};\n\nconst DataTableEditableCell = ({\n name,\n columnIndex,\n rowIndex,\n id: inputId,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled,\n error,\n prefix,\n suffix,\n defaultValue,\n type = 'text',\n testId\n}: Props) => {\n const { columns, numberOfRows } = useDataTableContext();\n const column = columns?.[columnIndex] ?? null;\n const isRightAligned = column ? column.isRightAligned : false;\n\n const numberOfColumns = columns?.length || 0;\n\n const isTopLeftCell = columnIndex === 0 && rowIndex === 0;\n const isTopRightCell =\n columnIndex === numberOfColumns - 1 && rowIndex === 0;\n const isBottomLeftCell = columnIndex === 0 && rowIndex === numberOfRows - 1;\n const isBottomRightCell =\n columnIndex === numberOfColumns - 1 && rowIndex === numberOfRows - 1;\n\n const controllers = useFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error,\n type\n });\n\n const hasError = !!controllers.error;\n const errorMessage = controllers.error?.toString();\n const fieldProps = {\n name,\n id: controllers.id\n };\n\n const EditableCell = (\n <div\n className={classnames(\n {\n [styles['data-table-editable-cell--currency']]:\n type === 'currency'\n },\n styles['data-table-editable-cell']\n )}\n data-testid={testId}\n >\n <Field {...fieldProps}>\n <AffixContainer prefix={prefix} suffix={suffix}>\n <input\n name={name}\n id={controllers.id}\n className={classnames({\n [styles['data-table-editable-cell--right-aligned']]:\n isRightAligned,\n [styles['data-table-editable-cell--top-left']]:\n isTopLeftCell,\n [styles['data-table-editable-cell--top-right']]:\n isTopRightCell,\n [styles['data-table-editable-cell--bottom-left']]:\n isBottomLeftCell,\n [styles['data-table-editable-cell--bottom-right']]:\n isBottomRightCell,\n [styles['data-table-editable-cell--invalid']]:\n hasError\n })}\n type={type === 'currency' ? 'number' : 'text'}\n step={type === 'currency' ? 'any' : ''}\n data-testid={`text-field-${name}`}\n aria-describedby={\n hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`\n }\n aria-invalid={hasError}\n disabled={disabled}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={controllers.value}\n onChange={controllers.onChange}\n onBlur={controllers.onBlur}\n />\n </AffixContainer>\n </Field>\n </div>\n );\n\n if (hasError) {\n return (\n <Tooltip overlay={errorMessage} placement=\"top\" theme=\"white\">\n {EditableCell}\n </Tooltip>\n );\n }\n return EditableCell;\n};\n\nexport default DataTableEditableCell;\n","import React, { useRef, useState } from 'react';\nimport { getLocalizedString as __ } from '../../utils/i18n';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport classnames from 'classnames';\nimport IconCalendarAlt from '@7shifts/sous-chef-icons/IconCalendarAlt';\nimport Field from '../Field';\nimport AffixContainer from '../AffixContainer';\nimport { useDateFieldControllers } from '../hooks/useDateFieldControllers';\nimport DatePickerCalendar from '../DatePickerCalendar';\nimport inputStyles from './date-field.scss';\nimport styles from '../DatePickerCalendar/date-picker-calendar.scss';\nimport {\n MONTH_NAMES,\n DAYS,\n setToMidnight,\n formatDate,\n parseDate\n} from '../../utils/date';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n value?: Date;\n disabledDays?: (day: Date) => boolean;\n /** Reference this for valid formats: https://date-fns.org/v2.18.0/docs/format */\n format?: string;\n initialMonth?: Date;\n onChange?: (e: Date) => void;\n onBlur?: () => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n disabled?: boolean;\n defaultValue?: Date;\n readOnly?: boolean;\n onMonthChange?: (month: Date) => void;\n testId?: string;\n};\n/** DateField form element. */\nconst DateField: React.FC<Props> = ({\n name,\n id: inputId,\n value,\n disabledDays,\n initialMonth,\n format = 'MM/dd/yyyy',\n onChange,\n onBlur,\n label,\n caption,\n error,\n placeholder,\n disabled,\n defaultValue,\n readOnly = false,\n onMonthChange,\n testId\n}) => {\n const inputRef = useRef();\n const [showCalendar, setShowCalendar] = useState(false);\n\n const controllers = useDateFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const hasError = controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n const dayPickerProps: any = {\n // We need to pass classNames here as well, otherwise it will allow disabled dates to be selected\n classNames: styles,\n disabledDays: (day: Date) =>\n disabledDays && disabledDays(setToMidnight(day)),\n initialMonth,\n months: MONTH_NAMES,\n weekdaysLong: DAYS,\n weekdaysShort: DAYS.map((day) => day.substring(0, 2)),\n onMonthChange\n };\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={<IconCalendarAlt size=\"medium\" />}>\n <DayPickerInput\n format={format /* @ts-ignore: styles types are generic */}\n classNames={styles}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={placeholder || format.toUpperCase()}\n defaultValue={defaultValue}\n value={controllers.value || ''}\n onDayChange={controllers.onChange}\n onDayPickerHide={() => {\n controllers.onBlur();\n setShowCalendar(false);\n }}\n overlayComponent={(props: any) => (\n <DatePickerCalendar\n {...props}\n inputNode={inputRef.current}\n showCalendar={showCalendar}\n onClickOutside={() => setShowCalendar(false)}\n />\n )}\n dayPickerProps={dayPickerProps}\n inputProps={{\n name,\n id: controllers.id,\n className: classnames(inputStyles['date-field'], {\n [inputStyles['date-field--invalid']]: hasError\n }),\n 'data-testid': testId || `date-field-${name}`,\n 'aria-describedby': hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`,\n 'aria-invalid': hasError,\n autoComplete: 'off',\n ref: inputRef,\n readOnly,\n disabled,\n onFocus: () => setShowCalendar(true)\n }}\n onDayPickerShow={() => setShowCalendar(true)}\n />\n </AffixContainer>\n </Field>\n );\n};\n\nexport default DateField;\n","import React, { useRef, useState } from 'react';\nimport styles from './date-filter.scss';\nimport IconChevronLeft from '@7shifts/sous-chef-icons/IconChevronLeft';\nimport IconChevronRight from '@7shifts/sous-chef-icons/IconChevronRight';\nimport { WeekStart } from '../../utils/date';\nimport { GREY400 } from '../../foundation/colors';\nimport Inline from '../../layout/Inline';\nimport DateFilterDisplay from './DateFilterDisplay';\nimport { DateFilterMode } from './types';\nimport { DATE_FILTER_MODE, STEP_DIRECTION } from './constants';\nimport DateFilterStepper from './DateFilterStepper';\nimport { Calendar } from '../../overlay';\nimport classnames from 'classnames';\n\ntype Props = {\n mode?: DateFilterMode;\n weekStart?: WeekStart;\n value: Date;\n onChange: (selected: Date) => void;\n testId?: string;\n};\n\nconst DateFilter: React.FC<Props> = ({\n mode = 'day',\n weekStart = 0,\n value,\n onChange,\n testId\n}) => {\n const calendarAnchorRef = useRef(null);\n const [calendarOpen, setCalendarOpen] = useState(false);\n const [date, setDate] = useState<Date>(value);\n const handleChange = (date: Date) => {\n setDate(date);\n onChange(date);\n setCalendarOpen(false);\n };\n return (\n <div\n data-testid={testId}\n ref={calendarAnchorRef}\n className={classnames(styles['date-filter'], {\n [styles['date-filter--wide']]: mode === DATE_FILTER_MODE.WEEK\n })}\n >\n <Inline space={0}>\n <DateFilterStepper\n mode={mode}\n date={date}\n stepDirection={STEP_DIRECTION.BACKWARD}\n onChange={handleChange}\n >\n <IconChevronLeft size=\"small\" color={GREY400} />\n </DateFilterStepper>\n <DateFilterDisplay\n mode={mode}\n weekStart={weekStart}\n selectedDate={date}\n onClick={() => setCalendarOpen((prevState) => !prevState)}\n />\n <DateFilterStepper\n mode={mode}\n stepDirection={STEP_DIRECTION.FORWARD}\n date={date}\n onChange={handleChange}\n >\n <IconChevronRight size=\"small\" color={GREY400} />\n </DateFilterStepper>\n </Inline>\n {calendarOpen && mode !== DATE_FILTER_MODE.MONTH && (\n <Calendar\n onSelect={handleChange}\n selected={date}\n onClickOutside={() => setCalendarOpen(false)}\n anchorRef={calendarAnchorRef}\n weekStart={weekStart}\n mode={mode}\n position=\"bottom\"\n />\n )}\n </div>\n );\n};\n\nexport default DateFilter;\n","import React, { useRef } from 'react';\nimport { getLocalizedString as __ } from '../../utils/i18n';\nimport classnames from 'classnames';\nimport IconCalendarAlt from '@7shifts/sous-chef-icons/IconCalendarAlt';\nimport IconArrowRight from '@7shifts/sous-chef-icons/IconArrowRight';\nimport Field from '../Field';\nimport { useRangeFieldControllers } from '../hooks/useRangeFieldControllers';\nimport { WeekStart, DateRange, BlockedDays } from '../../utils/date';\nimport styles from './date-range-field.scss';\nimport FromDate from './FromDate';\nimport ToDate from './ToDate';\nimport { GREY400 } from '../../foundation/colors';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n value?: DateRange;\n /** It disable some dates so the user can't click on them. Refer to this [doc](https://react-day-picker.js.org/api/types/matcher) to see what values you can use. */\n disabledDays?: BlockedDays;\n /** Reference this for valid formats: https://date-fns.org/v2.18.0/docs/format */\n format?: string;\n onChange?: (e: DateRange) => void;\n onBlur?: () => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n disabled?: boolean;\n readOnly?: boolean;\n weekStart?: WeekStart;\n testId?: string;\n};\n/** DateRangeField form element. */\nconst DateRangeField: React.FC<Props> = ({\n name,\n id: inputId,\n value,\n disabledDays,\n format = 'MM/dd/yyyy',\n onChange,\n onBlur,\n label,\n caption,\n error,\n placeholder,\n disabled,\n readOnly = true,\n weekStart = 0,\n testId\n}) => {\n const toInputRef = useRef<HTMLInputElement>(null);\n\n const controllers = useRangeFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const hasError = controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n const { start, end } = controllers.value;\n\n return (\n <Field {...fieldProps}>\n <div\n className={classnames(styles['date-range-field'], {\n [styles['date-range-field--invalid']]: hasError,\n [styles['date-range-field--disabled']]: disabled\n })}\n data-testid={testId}\n >\n <IconCalendarAlt size=\"medium\" color={GREY400} />\n <FromDate\n name={name}\n id={controllers.id}\n format={format}\n start={start}\n end={end}\n placeholder={placeholder || format.toUpperCase()}\n weekStart={weekStart}\n disabled={disabled}\n disabledDays={disabledDays}\n readOnly={readOnly}\n onChange={(val: Date) =>\n controllers.onChange({\n start: val,\n end: end\n })\n }\n onDayClick={() => {\n toInputRef?.current?.focus();\n }}\n />\n <IconArrowRight size=\"medium\" color={GREY400} />\n <ToDate\n name={name}\n format={format}\n start={start}\n end={end}\n placeholder={placeholder || format.toUpperCase()}\n weekStart={weekStart}\n disabled={disabled}\n disabledDays={disabledDays}\n readOnly={readOnly}\n onBlur={controllers.onBlur}\n onChange={(val: Date) =>\n controllers.onChange({\n start,\n end: val\n })\n }\n ref={toInputRef}\n />\n </div>\n </Field>\n );\n};\n\nexport default DateRangeField;\n","import React from 'react';\nimport classnames from 'classnames';\nimport Stack from '../../layout/Stack';\nimport Context from './FormContext';\nimport { FormikType } from './types';\nimport styles from './form.scss';\n\ntype Props = {\n children: React.ReactNode;\n onSubmit?: (e: Object) => void;\n /** By default forms are `500px`. If you want the form to use all the space you can turn this ON. */\n wide?: boolean;\n /** If set it will controll the state of the form using `Formik` */\n formik?: FormikType;\n stackContent?: boolean;\n testId?: string;\n};\nconst Form: React.FC<Props> = ({\n children,\n onSubmit,\n wide = false,\n formik,\n stackContent = true,\n testId = 'form'\n}) => {\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n onSubmit && onSubmit(e.currentTarget.elements);\n };\n return (\n <Context.Provider value={{ formik }}>\n <form\n onSubmit={onSubmit ? handleSubmit : formik?.handleSubmit}\n className={classnames({\n [styles['form--standard-size']]: !wide\n })}\n data-testid={testId}\n >\n {stackContent ? <Stack>{children}</Stack> : children}\n </form>\n </Context.Provider>\n );\n};\n\nexport default Form;\n","import React from 'react';\nimport ErrorMessage from '../ErrorMessage';\n\ntype Props = {\n children: React.ReactNode;\n fieldId?: string;\n testId?: string;\n};\n\nconst FormFeedback = ({ children, fieldId, testId }: Props) => {\n return (\n <ErrorMessage fieldId={fieldId} testId={testId}>\n {children}\n </ErrorMessage>\n );\n};\n\nexport default FormFeedback;\n","import classnames from 'classnames';\nimport React from 'react';\nimport { Button } from '../../actions';\nimport Inline from '../../layout/Inline';\nimport Stack from '../../layout/Stack';\nimport IconTimes from '@7shifts/sous-chef-icons/IconTimes';\nimport { BANNER_THEME } from './constants';\nimport styles from './inline-banner.scss';\nimport InlineBannerCTA from './InlineBannerCTA';\nimport InlineBannerIcon from './InlineBannerIcon';\nimport { InlineBannerTheme } from './types';\n\ntype Props = {\n children: React.ReactNode;\n theme?: InlineBannerTheme;\n title?: string;\n onClose?: () => void;\n caption?: string;\n primaryButton?: React.ReactElement;\n secondaryButton?: React.ReactElement;\n testId?: string;\n};\n\nconst InlineBanner: React.FC<Props> = ({\n children,\n theme = BANNER_THEME.INFO,\n title,\n onClose,\n caption,\n primaryButton,\n secondaryButton,\n testId = 'inline_banner'\n}) => {\n const multiLine = !!title;\n const dismissable = !!onClose;\n const Layout = multiLine ? Stack : Inline;\n\n return (\n <div\n data-testid={testId}\n className={classnames(styles['banner'], {\n [styles['banner--info']]: theme === BANNER_THEME.INFO,\n [styles['banner--warning']]: theme === BANNER_THEME.WARNING,\n [styles['banner--success']]: theme === BANNER_THEME.SUCCESS,\n [styles['banner--danger']]: theme === BANNER_THEME.DANGER,\n [styles['banner--upsell']]: theme === BANNER_THEME.UPSELL,\n [styles['banner--single-line']]: !multiLine\n })}\n >\n <Inline\n alignItems={multiLine ? undefined : 'center'}\n flex={['0 1 auto', 1]}\n space={12}\n >\n <div className={styles['banner__icon']}>\n <InlineBannerIcon theme={theme} />\n </div>\n <Layout\n justifyContent={multiLine ? undefined : 'space-between'}\n alignItems={multiLine ? undefined : 'center'}\n space={multiLine ? 8 : 12}\n data-testid=\"banner-body-container\"\n flex={['min-content']}\n flexWrap={multiLine ? undefined : 'wrap'}\n >\n {title && (\n <div className={styles['banner__title']}>{title}</div>\n )}\n <div\n className={classnames(styles['banner__body'], {\n [styles['banner__body--multilineCTA']]:\n primaryButton && multiLine\n })}\n >\n {children}\n </div>\n {primaryButton && (\n <InlineBannerCTA\n primaryButton={primaryButton}\n secondaryButton={secondaryButton}\n caption={caption}\n multiLine={multiLine}\n bannerTheme={theme}\n />\n )}\n </Layout>\n {dismissable && (\n <div className={styles['banner__close']}>\n <Button\n theme=\"link-icon\"\n type=\"button\"\n onClick={onClose}\n >\n <IconTimes />\n </Button>\n </div>\n )}\n </Inline>\n </div>\n );\n};\n\nexport default InlineBanner;\n","import classNames from 'classnames';\nimport React from 'react';\nimport { LINK_THEME, LINK_TARGET } from './constants';\nimport { Target, Theme } from './types';\nimport styles from './link.scss';\n\ntype Props = {\n href: string;\n target?: Target;\n theme?: Theme;\n onClick?: React.MouseEventHandler;\n children: React.ReactNode;\n};\n\nconst Link = ({\n href,\n target = LINK_TARGET.BLANK,\n theme = LINK_THEME.PRIMARY,\n onClick,\n children\n}: Props) => {\n return (\n <a\n className={classNames(styles['link'], {\n [styles['link--primary']]: theme === LINK_THEME.PRIMARY,\n [styles['link--contrast']]: theme === LINK_THEME.CONTRAST\n })}\n href={href}\n target={target}\n onClick={onClick}\n >\n {children}\n </a>\n );\n};\n\nexport default Link;\n","export const LINK_THEME = {\n PRIMARY: 'primary' as const,\n CONTRAST: 'contrast' as const\n};\n\nexport const LINK_TARGET = {\n SELF: '_self' as const,\n BLANK: '_blank' as const\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { useScrollShadow } from './useScrollShadow';\nimport styles from './modal-body.scss';\n\ntype Props = {\n children: React.ReactNode;\n testId?: string;\n};\n\nconst ModalBody = ({ children, testId }: Props) => {\n const { ref, showScrollShadow } = useScrollShadow();\n\n return (\n <div\n className={classNames(styles['modal-body'], {\n [styles['modal-body--with-scroll-shadow']]: showScrollShadow\n })}\n ref={ref}\n data-testid={testId}\n >\n {children}\n </div>\n );\n};\n\nexport default ModalBody;\n","import React from 'react';\nimport { useMultiSelectFieldControllers } from '../hooks/useMultiSelectFieldControllers';\nimport Select, { components } from 'react-select';\nimport Field from '../Field';\nimport { getSelectStyles } from '../SelectField/SelectField.styles';\nimport type { SelectOption, SelectOptions } from '../SelectField/types';\nimport CustomOption from '../SelectField/CustomOption';\nimport { isScrollingTheSelectMenu } from '../SelectField/domain';\nimport CustomContainer from '../SelectField/CustomContainer';\n\ntype NoOptionsMessageFunction = (input: {\n inputValue: string;\n}) => string | null;\n\ntype Props<T> = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n value?: SelectOption<T>[];\n options: SelectOptions<T>;\n onChange?: (e: SelectOption<T>[]) => void;\n onBlur?: (e: SelectOption<T>[]) => void;\n CustomOption?: React.ElementType;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n noOptionsMessage?: string | NoOptionsMessageFunction;\n disabled?: boolean;\n closeOnSelect?: boolean;\n /** When the user opens the menu, if this prop is `true`, it will scroll the page into to the menu view (if its content falls under a scroll). It is recomended to disable this behaviour when using the `MultiSelectField` inside a modal. */\n menuShouldScrollIntoView?: boolean;\n testId?: string;\n};\n/** Component to make possible choose from a predefined options. */\nconst MultiSelectField = <T extends unknown>({\n name,\n id: inputId,\n value,\n options,\n onChange,\n onBlur,\n CustomOption: UserCustomOption,\n label,\n caption,\n error,\n placeholder,\n noOptionsMessage,\n disabled,\n closeOnSelect = false,\n menuShouldScrollIntoView = true,\n testId\n}: Props<T>) => {\n const controllers = useMultiSelectFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const hasError = !!controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n const defaultNoOptionsMessage =\n noOptionsMessage && typeof noOptionsMessage === 'string'\n ? () => noOptionsMessage\n : undefined;\n\n return (\n <Field {...fieldProps}>\n <Select\n inputId={controllers.id}\n options={options}\n isDisabled={disabled}\n value={controllers.value}\n placeholder={placeholder}\n noOptionsMessage={\n typeof noOptionsMessage === 'function'\n ? noOptionsMessage\n : defaultNoOptionsMessage\n }\n styles={getSelectStyles({\n isInvalid: hasError,\n wrapToNextLine: true\n })}\n menuPortalTarget={document.body}\n onChange={controllers.onChange as any}\n onBlur={controllers.onBlur as any}\n isMulti\n closeMenuOnSelect={closeOnSelect}\n componentsProps={{\n testId,\n UserCustomOption\n }}\n components={{\n SelectContainer: CustomContainer,\n Option: UserCustomOption ? CustomOption : components.Option\n }}\n menuShouldScrollIntoView={menuShouldScrollIntoView}\n menuPlacement={menuShouldScrollIntoView ? 'bottom' : 'auto'}\n menuPosition={menuShouldScrollIntoView ? 'absolute' : 'fixed'}\n closeMenuOnScroll={(e) => {\n if (menuShouldScrollIntoView || !e.target) {\n return false;\n }\n\n return !isScrollingTheSelectMenu(e.target as HTMLElement);\n }}\n />\n </Field>\n );\n};\n\nexport default MultiSelectField;\n","import React from 'react';\nimport Inline from '../../layout/Inline';\nimport Stack from '../../layout/Stack';\nimport { PasswordCriteria as PasswordCriteriaType } from '../PasswordField/types';\nimport PasswordCriteria from '../PasswordCriteria';\n\nexport const usePasswordCriteria = (criterias: PasswordCriteriaType[]) => {\n if (criterias.length === 0) {\n return null;\n }\n const groupedCriterias = groupCriterias(criterias);\n\n return (\n <Inline space={28}>\n {groupedCriterias.map((group, groupId) => (\n <Stack space={12} key={groupId}>\n {group.map((criteria, criteriaId) => (\n <PasswordCriteria\n met={criteria.met}\n key={criteria.key || criteriaId}\n >\n {criteria.label}\n </PasswordCriteria>\n ))}\n </Stack>\n ))}\n </Inline>\n );\n};\n\nconst groupCriterias = (\n criterias: PasswordCriteriaType[]\n): Array<PasswordCriteriaType[]> => {\n const toBeGrouped = [...criterias];\n let groupedCriterias = [];\n const size = 4;\n\n while (toBeGrouped.length > 0) {\n groupedCriterias.push(toBeGrouped.splice(0, size));\n }\n\n return groupedCriterias;\n};\n","import classNames from 'classnames';\nimport React, { useEffect } from 'react';\nimport { Button } from '../../actions';\nimport { BUTTON_THEMES } from '../../actions/Button/constants';\nimport IconTimes from '@7shifts/sous-chef-icons/IconTimes';\nimport { Inline } from '../../layout';\nimport { PERSISTENT_BANNER_THEME } from './constants';\nimport styles from './persistent-banner.scss';\nimport { Theme } from './types';\n\ntype Props = {\n theme?: Theme;\n primaryButton?: React.ReactElement;\n secondaryButton?: React.ReactElement;\n onDismiss?: () => void;\n onLoad?: () => void;\n testId?: string;\n children: React.ReactNode;\n};\n\nconst PersistentBanner = ({\n theme = PERSISTENT_BANNER_THEME.INFO,\n children,\n primaryButton,\n secondaryButton,\n onDismiss,\n onLoad,\n testId\n}: Props) => {\n useEffect(() => {\n onLoad?.();\n }, []);\n\n const BannerContent = () => (\n <Inline justifyContent=\"center\" alignItems=\"center\">\n {children}\n {primaryButton &&\n React.cloneElement(primaryButton, {\n theme: BUTTON_THEMES.HOLLOW_CONTRAST,\n ...primaryButton.props\n })}\n {secondaryButton &&\n React.cloneElement(secondaryButton, {\n theme: BUTTON_THEMES.LINK_CONTRAST,\n ...secondaryButton.props\n })}\n </Inline>\n );\n\n return (\n <div\n className={classNames(styles['persistent-banner'], {\n [styles['persistent-banner--info']]:\n theme === PERSISTENT_BANNER_THEME.INFO,\n [styles['persistent-banner--danger']]:\n theme === PERSISTENT_BANNER_THEME.DANGER,\n [styles['persistent-banner--upsell']]:\n theme === PERSISTENT_BANNER_THEME.UPSELL\n })}\n data-testid={testId}\n >\n {onDismiss ? (\n <Inline flex={[1]} alignItems=\"center\">\n <BannerContent />\n <Button theme=\"link-contrast\" onClick={onDismiss}>\n <IconTimes />\n </Button>\n </Inline>\n ) : (\n <BannerContent />\n )}\n </div>\n );\n};\n\nexport default PersistentBanner;\n","export const PERSISTENT_BANNER_THEME = {\n UPSELL: 'upsell' as const,\n INFO: 'info' as const,\n DANGER: 'danger' as const\n};\n","import type { ReactNode } from 'react';\nimport React from 'react';\nimport classnames from 'classnames';\nimport styles from './pill.scss';\nimport { PILL_THEME } from './constants';\nimport { PillTheme } from './types';\ntype Props = {\n children: ReactNode;\n theme?: PillTheme;\n testId?: string;\n};\n\nconst Pill: React.FC<Props> = ({\n children,\n theme = PILL_THEME.DEFAULT,\n testId\n}) => {\n return (\n <div\n data-testid={testId}\n className={classnames(styles['pill'], {\n [styles['pill--default']]: theme === PILL_THEME.DEFAULT,\n [styles['pill--warning']]: theme === PILL_THEME.WARNING,\n [styles['pill--success']]: theme === PILL_THEME.SUCCESS,\n [styles['pill--danger']]: theme === PILL_THEME.DANGER,\n [styles['pill--info']]: theme === PILL_THEME.INFO\n })}\n >\n {children}\n </div>\n );\n};\n\nexport default Pill;\n","export const PILL_THEME = {\n INFO: 'info' as const,\n SUCCESS: 'success' as const,\n DANGER: 'danger' as const,\n WARNING: 'warning' as const,\n DEFAULT: 'default' as const\n};","import React from 'react';\nimport Field from '../Field';\nimport Inline from '../../layout/Inline';\nimport type { SelectOption } from '../SelectField/types';\nimport styles from './pill-select-field.scss';\nimport { useMultiSelectFieldControllers } from '../hooks/useMultiSelectFieldControllers';\n\ntype Props<T> = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the pill select input */\n id?: string;\n value?: SelectOption<T>[];\n options: SelectOption<T>[];\n onChange?: (e: SelectOption<T>[]) => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n disabled?: boolean;\n /** This is used for setting the data-testid */\n testId?: string;\n};\n/** PillSelectField form element. */\nconst PillSelectField = <T extends unknown>({\n name,\n id: inputId,\n value,\n options,\n onChange,\n label,\n caption,\n error,\n disabled,\n testId\n}: Props<T>) => {\n const controllers = useMultiSelectFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n error\n });\n\n const hasError = !!controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n return (\n <Field {...fieldProps}>\n <Inline flexWrap=\"wrap\" space={12}>\n {options.map((option, key) => {\n const selectedItemIndex = (\n controllers.value || []\n ).findIndex((val) => val.value === option.value);\n const isChecked = selectedItemIndex >= 0;\n const itemIdentifier =\n typeof option.value === 'string' ? option.value : key;\n const itemId = `${controllers.id}-${itemIdentifier}`;\n\n return (\n <div\n key={itemIdentifier}\n className={styles['pill-select-field']}\n >\n <input\n name={`${name}-${itemIdentifier}`}\n id={itemId}\n type=\"checkbox\"\n data-testid={\n testId ||\n `pill-select-field-${name}-${itemIdentifier}`\n }\n aria-describedby={\n hasError\n ? `${itemId}-error-message`\n : `${itemId}-describer`\n }\n aria-invalid={hasError}\n disabled={option.isDisabled || disabled}\n checked={isChecked}\n onChange={() => {\n const newValue = controllers.value\n ? [...controllers.value]\n : [];\n if (isChecked) {\n newValue.splice(selectedItemIndex, 1);\n } else {\n newValue.push(option);\n }\n controllers.onChange(newValue);\n }}\n />\n <span\n className={\n styles['pill-select-field__custom-input']\n }\n >\n {option.label}\n </span>\n </div>\n );\n })}\n </Inline>\n </Field>\n );\n};\n\nexport default PillSelectField;\n","import React from 'react';\nimport { Stack } from '../../layout';\nimport {\n getProgressMetric,\n getProgressMetricWithSteps\n} from '../Progress/domain';\nimport { useProgress } from '../Progress/useProgress';\nimport styles from './progress-bar.scss';\n\ntype Props = {\n progress: number;\n maxValue?: number;\n testId?: string;\n steps?: string[];\n};\n\nconst ProgressBar = ({ progress, maxValue, testId, steps }: Props) => {\n const isUsingStepsAsMaxValue = !maxValue && steps && steps.length > 0;\n const inferedMaxValue =\n !maxValue && steps && steps.length > 0 ? steps.length : maxValue;\n const { elementProps, metric } = useProgress(\n progress,\n inferedMaxValue || 100,\n isUsingStepsAsMaxValue ? getProgressMetricWithSteps : getProgressMetric\n );\n return (\n <Stack>\n <div\n {...elementProps}\n className={styles['progress-bar']}\n data-testid={testId}\n >\n <div\n className={styles['progress-bar__indicator']}\n style={{ width: `${metric.percentage}%` }}\n />\n </div>\n {steps && steps.length > 0 && (\n <div className={styles['progress-bar__steps']}>\n {steps.map((step) => (\n <div key={step}>{step}</div>\n ))}\n </div>\n )}\n </Stack>\n );\n};\n\nexport default ProgressBar;\n","import React, { useCallback } from 'react';\nimport Stack from '../../layout/Stack';\nimport { useRadioGroupFieldControllers } from '../hooks/useRadioGroupFieldControllers';\nimport RadioGroupFieldContext from './RadioGroupFieldContext';\nimport styles from './radio-group-field.scss';\nimport ErrorMessage from '../ErrorMessage';\nimport { getOptionsType, OPTION_TYPES } from './domain';\nimport RadioGroupOption from '../RadioGroupOption';\nimport RadioGroupBoxOption from '../RadioGroupBoxOption';\nimport RadioOptions from './RadioOptions';\nimport BoxOptions from './BoxOptions';\n\ntype Props = {\n name: string;\n value?: string | number;\n onChange?: (e: string | number) => void;\n label?: React.ReactNode;\n error?: React.ReactNode;\n\n /**\n * **DEPRECATED** *Use the `columns` prop instead.*<br/><br/>When true it will place the options on the same line up to 4 options per line. It only applies when using `RadioGroupOption` as children\n *\n * @deprecated use the `columns` prop to tell how many inline columns you want. This will signal you want inline radio options\n */\n inline?: boolean;\n disabled?: boolean;\n children:\n | React.ReactElement<typeof RadioGroupOption>\n | React.ReactElement<typeof RadioGroupOption>[]\n | React.ReactElement<typeof RadioGroupBoxOption>\n | React.ReactElement<typeof RadioGroupBoxOption>[];\n /** This is used for setting the data-testid */\n testId?: string;\n /** It states the radio options will be inline and defines how many columns it will have */\n columns?: 2 | 3 | 4;\n};\n/** RadioGroupField form element. */\nconst RadioGroupField = ({\n name,\n value,\n onChange,\n label,\n error,\n inline = false,\n disabled = false,\n children,\n testId,\n columns\n}: Props) => {\n const controllers = useRadioGroupFieldControllers({\n name,\n value,\n onChange,\n error\n });\n\n const onChangeHandler = useCallback(\n (e) => {\n controllers.onChange && controllers.onChange(e);\n },\n [name]\n );\n\n const contextValue = {\n name,\n disabled,\n value: controllers.value,\n onChange: onChangeHandler\n };\n\n const optionsType = getOptionsType(children);\n\n return (\n <RadioGroupFieldContext.Provider value={contextValue}>\n <Stack space={12}>\n {label && (\n <div className={styles['radio-group-field__label']}>\n {label}\n </div>\n )}\n <Stack space={8}>\n {optionsType === OPTION_TYPES.RADIO ? (\n <RadioOptions\n inline={inline || Boolean(columns)}\n columns={columns}\n testId={testId}\n >\n {children}\n </RadioOptions>\n ) : (\n <BoxOptions columns={columns} testId={testId}>\n {children}\n </BoxOptions>\n )}\n {controllers.error && (\n <ErrorMessage>{controllers.error}</ErrorMessage>\n )}\n </Stack>\n </Stack>\n </RadioGroupFieldContext.Provider>\n );\n};\n\nexport default RadioGroupField;\n","import React from 'react';\nimport { useFormContext } from '../Form/FormContext';\nimport { getFormikState } from '../../utils/formik';\n\ntype RadioValue = string | number;\ntype FieldControls = {\n error?: React.ReactNode;\n value?: RadioValue;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\ntype Props = {\n name: string;\n value?: RadioValue;\n onChange?: (value: RadioValue) => void;\n error?: React.ReactNode;\n};\nexport const useRadioGroupFieldControllers = ({\n name,\n value,\n onChange,\n error\n}: Props): FieldControls => {\n const { formik } = useFormContext();\n\n let controllers: FieldControls = {\n error,\n value,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) =>\n onChange && onChange(e.target.value)\n };\n\n const formikState = getFormikState(name, formik);\n if (formik && formikState) {\n controllers = {\n ...controllers,\n error: error !== undefined ? controllers.error : formikState.error,\n value: value !== undefined ? controllers.value : formikState.value,\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n formik.setFieldValue(name, e.target.value);\n onChange && onChange(e.target.value);\n }\n };\n }\n return controllers;\n};\n","import classnames from 'classnames';\nimport React from 'react';\nimport styles from './segmented-control.scss';\n\ntype Props = {\n options: string[];\n onChange: (action: string) => void;\n value: string;\n testId?: string;\n};\n\nconst SegmentedControl = ({ options, onChange, value, testId }: Props) => {\n const isSelected = (option: string) => {\n return option === value;\n };\n const isLastElement = (index: number) => {\n return index === options.length - 1;\n };\n return (\n <div className={styles['segmented-control']} data-testid={testId}>\n {options.map((option, i) => (\n <React.Fragment key={option}>\n <button\n onClick={() => onChange(option)}\n className={classnames(\n styles['segmented-control__button'],\n {\n [styles['segmented-control__button--selected']]:\n isSelected(option)\n }\n )}\n >\n {option}\n </button>\n {!isLastElement(i) && (\n <div\n className={classnames(\n styles['segmented-control__divider']\n )}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n );\n};\n\nexport default SegmentedControl;\n","import React from 'react';\nimport Select from 'react-select';\nimport Field from '../Field';\nimport type { SelectOption, SelectOptions } from './types';\nimport AffixContainer from '../AffixContainer';\nimport { useSelectField } from './useSelectField';\n\ntype NoOptionsMessageFunction = (input: {\n inputValue: string;\n}) => string | null;\n\nexport type Props<T> = {\n asToolbarFilter?: boolean;\n caption?: React.ReactNode;\n disabled?: boolean;\n error?: React.ReactNode;\n /** If not provided it will generate a random id so the l¡abel links properly with the text input */\n id?: string;\n isClearable?: boolean;\n label?: React.ReactNode;\n /** When the user opens the menu, if this prop is `true`, it will scroll the page into to the menu view (if its content falls under a scroll). It is recommended to disable this behaviour when using the `SelectField` inside a modal. */\n menuShouldScrollIntoView?: boolean;\n name: string;\n noOptionsMessage?: string | NoOptionsMessageFunction;\n onChange?: (e: SelectOption<T>) => void;\n onBlur?: (e: SelectOption<T>) => void;\n options: SelectOptions<T>;\n placeholder?: string;\n /** Use a prefix for things like currency symbols (“$”, “¥”, “£”) or icons. */\n prefix?: React.ReactNode;\n value?: SelectOption<T>;\n defaultValue?: SelectOption<T>;\n CustomOption?: React.ElementType;\n SelectedOptionPrefix?: React.ElementType;\n /** This is used for setting the data-testid */\n testId?: string;\n creatableButton?: React.ReactNode;\n onCreate?: (option: string) => void;\n};\n/** Component to make possible choose from a predefined options. */\nconst SelectField = <T extends unknown>(props: Props<T>) => {\n const { fieldProps, selectProps } = useSelectField(props);\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={props.prefix}>\n <Select {...selectProps} />\n </AffixContainer>\n </Field>\n );\n};\n\nexport default SelectField;\n","import React, { Fragment } from 'react';\nimport { ToastContainer } from '../../feedback/Toast';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst SousChefProvider = ({ children }: Props) => {\n return (\n <Fragment>\n <ToastContainer />\n {children}\n </Fragment>\n );\n};\n\nexport default SousChefProvider;\n","/* We need to disable these as the onClick on that div is just there to trigger the focus on the textare. It whould not have any keyboad event. */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\nimport React, { useState, useRef } from 'react';\nimport classnames from 'classnames';\nimport Field from '../Field';\nimport styles from './text-area-field.scss';\nimport { useFieldControllers } from '../hooks/useFieldControllers';\nimport { useGrowTextAreaRef } from '../hooks/useGrowTextAreaRef';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input. */\n id?: string;\n value?: string;\n onChange?: (e: string) => void;\n onBlur?: (e: string) => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n disabled?: boolean;\n defaultValue?: string;\n /** When `true` the field will grow as more lines is added until it hits the `maxHeight` defined. */\n autoGrow?: boolean;\n /** It defines the minimum size the input can grow. */\n minHeight?: number;\n /** It defines the maximum size the input can grow. */\n maxHeight?: number;\n /** A JSX containing the toolbar elements. You can use `Inline` to place the buttons properly on the toolbar space. */\n toolbar?: React.ReactNode;\n testId?: string;\n};\nconst TextAreaField: React.FC<Props> = ({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n label,\n caption,\n error,\n placeholder,\n disabled,\n defaultValue,\n autoGrow = false,\n minHeight = 40,\n maxHeight = 320,\n toolbar,\n testId\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const [hasFocus, setHasFocus] = useState(false);\n const controllers = useFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const hasError = !!controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n const { ref: textAreaRef, updateHeight } = useGrowTextAreaRef(\n minHeight,\n maxHeight,\n autoGrow\n );\n\n return (\n <Field {...fieldProps}>\n <div\n className={classnames(styles['text-field'], {\n [styles['text-field--invalid']]: hasError,\n [styles['text-field--disabled']]: disabled,\n [styles['text-field--focus']]: hasFocus\n })}\n ref={containerRef}\n onClick={(event: React.MouseEvent<HTMLDivElement>) => {\n if (event.target === containerRef?.current) {\n textAreaRef?.current?.focus();\n }\n }}\n >\n <textarea\n name={name}\n id={controllers.id}\n data-testid={testId || `text-field-${name}`}\n aria-describedby={\n hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`\n }\n aria-invalid={hasError}\n disabled={disabled}\n placeholder={placeholder}\n defaultValue={defaultValue}\n value={controllers.value}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n controllers.onChange(e);\n updateHeight();\n }}\n onBlur={(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n controllers.onBlur(e);\n setHasFocus(false);\n }}\n onFocus={() => setHasFocus(true)}\n ref={textAreaRef}\n />\n {toolbar && (\n <div\n className={styles['text-field__toolbar']}\n id={`${controllers.id}-toolbar`}\n ref={toolbarRef}\n onClick={(event: React.MouseEvent<HTMLDivElement>) => {\n if (event.target === toolbarRef?.current) {\n textAreaRef?.current?.focus();\n }\n }}\n >\n {toolbar}\n </div>\n )}\n </div>\n </Field>\n );\n};\n\nexport default TextAreaField;\n","import { useEffect, useRef } from 'react';\n\ntype UseGrowTextAreaRef = {\n ref: { current: null | HTMLTextAreaElement };\n updateHeight: () => void;\n};\n\nexport const useGrowTextAreaRef = (\n minHeight: number,\n maxHeight: number,\n autoGrow: boolean,\n forwardedRef?: { current: null | HTMLTextAreaElement }\n): UseGrowTextAreaRef => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const ref = forwardedRef ?? textareaRef;\n\n const updateHeight = () => {\n if (ref.current && autoGrow) {\n ref.current.style.height = `${minHeight}px`;\n ref.current.style.height = ref.current.scrollHeight + 'px';\n }\n };\n\n useEffect(() => {\n if (ref.current) {\n ref.current.style.minHeight = `${minHeight}px`;\n ref.current.style.maxHeight = `${maxHeight}px`;\n }\n }, [maxHeight, minHeight, minHeight, ref]);\n\n return {\n ref,\n updateHeight\n };\n};\n","import React from 'react';\nimport Stack from '../../layout/Stack';\nimport styles from './toggle.scss';\n\ntype Props = {\n /** It turns the toggle ON if `true` and OFF if `false` */\n checked: boolean;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n disabled?: boolean;\n id?: string;\n testId?: string;\n};\n\n/**\n * Used when you want to allow the user to turn some information ON and OFF.\n *\n * _The Toggle component is not intended to be used inside a Form (use a checkbox for that). It should be used when you want to act on that action immediately._\n */\nconst Toggle: React.FC<Props> = ({\n checked,\n label,\n caption,\n onChange,\n disabled = false,\n id,\n testId = 'toggle'\n}) => {\n return (\n <Stack space={8}>\n <label className={styles['toggle']}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n id={id}\n data-testid={testId}\n />\n <span className={styles['toggle__switch']} />\n {label && (\n <span className={styles['toggle__label']}>{label}</span>\n )}\n </label>\n {caption && (\n <span className={styles['toggle__caption']}>{caption}</span>\n )}\n </Stack>\n );\n};\n\nexport default Toggle;\n","import React from 'react';\nimport { useSelectFieldControllers } from '../../forms/hooks/useSelectFieldControllers';\nimport Select, { components } from 'react-select';\nimport type {\n SelectOption,\n SelectOptions\n} from '../../forms/SelectField/types';\nimport AffixContainer from '../../forms/AffixContainer';\nimport { getSelectStyles } from './ToolbarSelect.styles';\n\ntype Props<T> = {\n name: string;\n value?: SelectOption<T>;\n placeholder?: string;\n options: SelectOptions<T>;\n onChange?: (e: SelectOption<T>) => void;\n onBlur?: (e: SelectOption<T>) => void;\n disabled?: boolean;\n /** Use a prefix for things like icons or symbols (“$”, “¥”, “£”). */\n prefix: React.ReactNode;\n testId?: string;\n};\n/** Toolbar component to make a possible selection from predefined options. */\nconst ToolbarSelect = <T extends unknown>({\n name,\n value,\n options,\n onChange,\n onBlur,\n placeholder,\n disabled,\n prefix,\n testId\n}: Props<T>) => {\n const controllers = useSelectFieldControllers({\n name,\n value,\n onChange,\n onBlur\n });\n\n return (\n <AffixContainer prefix={prefix}>\n <Select\n inputId={controllers.id}\n options={options}\n isDisabled={disabled}\n value={controllers.value}\n placeholder={placeholder}\n styles={getSelectStyles({})}\n menuPortalTarget={document.body}\n onChange={controllers.onChange as any}\n onBlur={controllers.onBlur as any}\n components={{\n Option: components.Option,\n Control: components.Control\n }}\n testId={testId}\n />\n </AffixContainer>\n );\n};\n\nexport default ToolbarSelect;\n","import React, { useRef, useState } from 'react';\nimport { getLocalizedString as __ } from '../../utils/i18n';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport classnames from 'classnames';\nimport IconCalendarAlt from '@7shifts/sous-chef-icons/IconCalendarAlt';\nimport Field from '../Field';\nimport AffixContainer from '../AffixContainer';\nimport { useDateFieldControllers } from '../hooks/useDateFieldControllers';\nimport DatePickerCalendar from '../DatePickerCalendar';\nimport inputStyles from '../DateField/date-field.scss';\nimport styles from './week-field.scss';\nimport eachDayOfInterval from 'date-fns/eachDayOfInterval';\nimport {\n WeekStart,\n FullDateRange,\n createWeekRange,\n setToMidnight,\n parseDate,\n formatDate,\n MONTH_NAMES,\n DAYS\n} from '../../utils/date';\n\ntype Props = {\n name: string;\n /** If not provided it will generate a random id so the label links properly with the text input */\n id?: string;\n value?: Date;\n disabledDays?: (day: Date) => boolean;\n /** Reference this for valid formats: https://date-fns.org/v2.18.0/docs/format */\n format?: string;\n initialMonth?: Date;\n onChange?: (e: Date) => void;\n onBlur?: () => void;\n label?: React.ReactNode;\n caption?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n disabled?: boolean;\n defaultValue?: Date;\n readOnly?: boolean;\n weekStart?: WeekStart;\n testId?: string;\n};\n/** WeekField form element. */\nconst WeekField: React.FC<Props> = ({\n name,\n id: inputId,\n value,\n disabledDays,\n initialMonth,\n format = 'MM/dd/yyyy',\n onChange,\n onBlur,\n label,\n caption,\n error,\n placeholder,\n disabled,\n defaultValue,\n readOnly = true,\n weekStart = 0,\n testId\n}) => {\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\n const [showCalendar, setShowCalendar] = useState(false);\n const inputRef = useRef();\n\n const controllers = useDateFieldControllers({\n name,\n id: inputId,\n value,\n onChange,\n onBlur,\n error\n });\n\n const hasError = controllers.error;\n const fieldProps = {\n name,\n id: controllers.id,\n label,\n caption,\n error: controllers.error\n };\n\n const weekRange: FullDateRange | null = value\n ? createWeekRange(value, weekStart)\n : null;\n const selectedDays: Date[] =\n value && weekRange ? eachDayOfInterval(weekRange) : [];\n\n const getModifiers = () => {\n const hoverRange = hoverDate\n ? createWeekRange(hoverDate, weekStart)\n : null;\n return {\n hoverRange: hoverRange ? eachDayOfInterval(hoverRange) : [],\n selectedRange: weekRange && {\n from: weekRange.start,\n to: weekRange.end\n },\n from: weekRange && weekRange.start,\n to: weekRange && weekRange.end\n };\n };\n\n const handleHoverStart = (day: Date) => setHoverDate(day);\n const handleHoverEnd = () => setHoverDate(null);\n\n const dayPickerProps: any = {\n // We need to pass classNames here as well, otherwise it will allow disabled dates to be selected\n classNames: styles,\n disabledDays: (day: Date) =>\n disabledDays && disabledDays(setToMidnight(day)),\n initialMonth,\n months: MONTH_NAMES,\n weekdaysLong: DAYS,\n weekdaysShort: DAYS.map((day) => day.substring(0, 2)),\n\n showOutsideDays: true,\n selectedDays,\n modifiers: getModifiers(),\n firstDayOfWeek: weekStart,\n onDayMouseEnter: handleHoverStart,\n onDayMouseLeave: handleHoverEnd\n };\n\n const handleDayClick = (day: Date) => {\n const selectedDate = setToMidnight(day);\n setHoverDate(selectedDate);\n controllers.onChange(createWeekRange(day, weekStart).start);\n };\n\n return (\n <Field {...fieldProps}>\n <AffixContainer prefix={<IconCalendarAlt size=\"medium\" />}>\n <DayPickerInput\n format={format /* @ts-ignore: styles types are generic */}\n classNames={styles}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={placeholder || format.toUpperCase()}\n defaultValue={defaultValue}\n value={controllers.value || ''}\n onDayChange={handleDayClick}\n onDayPickerHide={controllers.onBlur}\n overlayComponent={(props: any) => (\n <DatePickerCalendar\n {...props}\n inputNode={inputRef.current}\n showCalendar={showCalendar}\n onClickOutside={() => setShowCalendar(false)}\n />\n )}\n dayPickerProps={dayPickerProps}\n inputProps={{\n name,\n id: controllers.id,\n className: classnames(inputStyles['date-field'], {\n [inputStyles['date-field--invalid']]: hasError\n }),\n 'data-testid': testId || `week-field-${name}`,\n 'aria-describedby': hasError\n ? `${controllers.id}-error-message`\n : `${controllers.id}-describer`,\n 'aria-invalid': hasError,\n autoComplete: 'off',\n ref: inputRef,\n readOnly,\n disabled,\n onFocus: () => setShowCalendar(true)\n }}\n onDayPickerShow={() => setShowCalendar(true)}\n />\n </AffixContainer>\n </Field>\n );\n};\n\nexport default WeekField;\n"],"names":["Flex","children","space","flex","alignItems","justifyContent","inlineFlex","direction","flexItems","flexWrap","testId","className","classNames","extraClass","items","React","Children","toArray","filter","Boolean","lastItemIndex","length","style","flexDirection","map","child","i","key","display","marginRight","marginBottom","Stack","props","Inline","Spinner","size","theme","block","classnames","styles","xmlns","width","height","viewBox","id","offset","stopColor","fill","strokeWidth","strokeLinecap","cx","cy","r","updateMisalignedOverlay","overlayPosition","arrowPosition","tooltipRectPosition","left","useIsMounted","isMounted","useRef","useEffect","current","useCallback","FONT_FAMILY","Portal","container","useState","setContainer","containerElement","document","createElement","setAttribute","body","prepend","remove","usePortalContainer","ReactDOM","createPortal","TooltipOverlay","anchorPosition","placement","header","onClose","onFocusIn","onFocusOut","isVisible","setIsVisible","tooltipRef","checkIsMounted","setTimeout","window","addEventListener","removeEventListener","position","overlay","undefined","arrow","actualPlacement","top","tooltipHeight","topPosition","bottomPosition","innerHeight","getActualPlacement","tooltipWidth","PADDING","Math","max","min","innerWidth","calculateOverlayPosition","tooltipPosition","ARROW_WIDTH","calculateArrowPosition","calculatePosition","_tooltipRef$current","getBoundingClientRect","role","ref","zIndex","onMouseEnter","onMouseLeave","forwardRef","forwardedRef","delayOnClose","delayOnOpen","onVisibleChange","internalRef","containerRef","isFocusingOnTooltip","isFocusingOnAnchor","updateOverlayVisibility","shouldShow","openTooltip","closeTooltip","closeTooltipWithDelay","anchorElements","count","_containerRef$current","Overlay","Fragment","cloneElement","onFocus","onBlur","ButtonElement","onClick","onKeyDown","type","disabled","href","target","rest","commonProps","wide","loading","title","childrenArr","isIconOnly","Tooltip","includes","ICON_SIZES","small","medium","default","large","getIconStyles","color","verticalAlign","IconArrowLeft","fillRule","clipRule","d","displayName","IconArrowRight","getLocalizedString","Shifts","getWebAppTranslation","getLocalTranslation","Lang","cache","split","moduleName","translationParts","literal","charAt","toUpperCase","slice","toLowerCase","replace","capitalizeFirstLetter","text","PaginationControls","hasPrevious","hasNext","onNextClick","Button","onPreviousClick","__","IconTimes","CloseButton","closeToast","ToastContainer","containerId","ReactToastifyContainer","bodyClassName","hideProgressBar","draggable","transition","Slide","closeButton","enableMultiContainer","Context","createContext","columns","numberOfRows","useDataTableContext","context","useContext","Error","MenuContext","onToggleMenu","isOpen","triggerRef","useMenuContext","Menu","setIsOpen","Provider","value","MenuItem","handleClick","e","stopPropagation","onKeyPress","tabIndex","MenuButton","useOnClickOutside","cb","listener","event","Node","contains","isClickInside","MenuList","paneElement","setPosition","clickOutisideCallback","triggerPosition","panePosition","_paneElement$current","pos","scrollY","IconEllipsisV","KebabMenu","actions","action","index","onAction","label","ActionsCell","kebabMenuItems","showInKebab","sideActions","buttonProps","DataTableRow","isSelected","hasDefaultPadding","nativeDivProps","showActionMenu","hasVerticalBorders","styleNames","columnElement","column","isRightAligned","renderColumn","DataTableRowActions","IconChevronUp","IconChevronDown","GREY400","DataTableHeader","onSort","find","handleSort","nextDirection","getNextSort","columnName","name","isSortable","sortDir","currentSort","IconSort","sortDirection","marginTop","DefaultItemComponent","item","columnsToShow","Object","keys","headingKey","useFormContext","useFieldId","inputId","useMemo","random","getFormikState","formik","formikPath","getFormikArrayPath","formikLatestLevel","reduce","acc","path","touched","_acc$touched","error","_acc$error","_acc$value","errors","values","useFieldControllers","onChange","controllers","formikState","currencyBlur","setFieldValue","Number","toFixed","setFieldTouched","ModalHeader","subHeader","Modal","rootElementId","shouldReturnFocusAfterClose","ReactModal","shouldCloseOnEsc","shouldCloseOnOverlayClick","onRequestClose","content","maxWidth","closeTimeoutMS","contentLabel","appElement","getElementById","overlayClassName","base","afterOpen","beforeClose","setAppElement","rootElement","updateButtonProps","button","newProps","FooterContainer","childrenItens","parseDate","str","format","locale","parsed","dateFnsParse","Date","DateUtils","isDate","formatDate","date","dateFnsFormat","setToMidnight","startOfDay","getStartOfWeek","weekIndex","firstDay","getDate","getDay","firstDayAdjusted","setDate","getEndOfWeek","startOfWeek","endDay","createWeekRange","weekStart","start","end","DAYS","MONTH_NAMES","Calendar","mode","selected","onSelect","onClickOutside","disabledDays","anchorRef","calendarRef","setCalendarRef","dayStyles","weekStyles","anchorNode","_anchorRef$current","srcElement","weekRange","selectedRange","from","to","calendarDimensions","calendarPosition","right","getHorizontalPosition","calendarTopAboveTrigger","calendarTopBelowTrigger","bottom","getVerticalPosition","overlayWrapper","DayPicker","onDayClick","day","activeModifiers","isDateDisabled","modifier","selectedDate","handleSelect","selectedDays","months","weekdaysLong","initialMonth","weekdaysShort","substring","showOutsideDays","firstDayOfWeek","Label","htmlFor","truncate","labelId","tooltipContent","showTooltip","setShowTooltip","shouldTruncate","labelElement","handleApplyTooltip","shouldShowTooltip","offsetWidth","scrollWidth","offsetParent","onWindowResize","debounce","useLayoutEffect","useLabelTooltip","LabelElement","Caption","fieldId","IconTimesOctagon","ErrorMessage","Field","caption","AffixContainer","prefix","suffix","prefixElement","suffixElement","input","querySelector","prefixWidth","_prefixElement$curren","paddingLeft","paddingRight","hasPrefix","hasSuffix","classes","useSelectFieldControllers","onMenuInputFocus","option","getSelectStyles","wrapToNextLine","valueContainer","assign","state","fontFamily","minWidth","background","isDisabled",":hover","backgroundColor","control","boxShadow","fontSize","cursor","outline","outlineColor","borderRadius","border","indicatorSeparator","placeholder","transform","overflow","textOverflow","whiteSpace","singleValue","dropdownIndicator","padding","isFocused","group","menu","menuPortal","IconChevronLeft","IconChevronRight","IconCalendarAlt","getDateString","dateUtil","DateFilterText","DateFilterDisplay","DateFilterStepper","stepDirection","step","newDate","setMonth","getMonth","handleDateStepper","FormRow","sizes","additionalColumns","push","Array","_","useTextField","autoComplete","autoFocus","defaultValue","maxLength","hasError","inputProps","aria-describedby","aria-invalid","data-testid","fieldProps","TextField","useMultiSelectFieldControllers","options","RadioGroupFieldContext","useRadioGroupFieldContext","RadioGroupBoxOption","radioGroupContext","checked","RadioGroupOption","INVALID_OPTIONS_MESSAGE","getOptionsType","forEach","TypeError","isBoxOption","isRadioOption","RadioOptions","inline","InlineOptions","MAX_OPTIONS_PER_ROW","childrenArray","rows","row","rowIndex","BoxOptions","IconCheck","PasswordCriteria","met","IconEye","clipPath","IconEyeSlash","asToolbarFilter","borderColor","isInvalid","&:hover","noOptionsMessage","textAlign","loadingMessage","wordBreak","multiValueRemove","clearIndicator","CustomOption","UserCustomOption","selectProps","componentsProps","components","Option","isScrollingTheSelectMenu","element","isReactSelectElement","_element$children","firstOption","_element$children2","CustomContainer","SelectContainer","innerProps","CustomControl","SelectedOptionPrefix","selectedOption","getValue","_props$getValue","Control","IconPlus","CustomMenu","creatableButton","onCreate","showFooter","setShowFooter","textFieldRef","onCreateButton","trim","autoCorrect","spellCheck","onMouseDown","focus","onTouchEnd","useSelectField","isClearable","menuShouldScrollIntoView","isMenuInputFocus","setIsMenuInputFocus","closeMenuOnScroll","menuPortalTarget","menuPlacement","menuPosition","menuIsOpen","CustomList","hasMoreOptions","hasMoreOptionsFirstLoad","inputValue","useDateFieldControllers","newValue","DatePickerCalendar","showCalendar","inputPosition","inputNode","getFormikError","FromDate","readOnly","setShowCalendar","inputRef","modifiers","disabledDaysChecks","after","isArray","dayPickerProps","toMonth","DayPickerInput","selectedDay","onDayChange","onDayPickerHide","overlayComponent","onDayPickerShow","before","month","fromMonth","TimeField","allOtherProps","parseTime","CurrencyField","currencySymbol","inputMode","preventDefault","currentTarget","parseFloat","PercentageField","precision","stepSize","valueAsString","decimalIndex","keyPress","keyPressIsValid","startsWith","indexOf","number","String","ButtonCTA","primaryCTA","bannerTheme","InlineBannerCTA","primaryButton","secondaryButton","multiLine","IconInfoCircle","IconExclaimationTriangle","IconAward","InlineBannerIcon","getProgressMetric","progress","maxValue","updatedMaxValue","updatedProgress","getProgressMetricWithSteps","amountOfSteps","actualProgress","useProgress","getMetric","metric","elementProps","aria-valuemax","aria-valuemin","aria-valuenow","percentage","otherProps","isValidElement","IconUserSolid","AvatarImage","url","alt","onImageFallbackError","setHasImageError","src","onError","PROFILE_IMAGES","avatarColor","loadOptions","setHasMoreOptions","setHasMoreOptionsFirstLoad","hasFirstLoadPerformed","setHasFirstLoadPerformed","localOptions","setLocalOptions","AsyncSelect","cacheOptions","defaultOptions","callback","toLocaleLowerCase","handleInternalSearch","then","hasMore","_ref$current","leading","badge","showIconInsteadOfImage","setShowIconInsteadOfImage","defaultProfilePictureColors","floor","useCheckBoxFieldControllers","determinant","strokeDashoffset","strokeDasharray","maxHeight","isLoading","footerComponent","RowItem","itemComponent","conditionalStyles","overflowY","columnIndex","numberOfColumns","isTopLeftCell","isTopRightCell","isBottomLeftCell","isBottomRightCell","errorMessage","_controllers$error","toString","EditableCell","onMonthChange","calendarAnchorRef","calendarOpen","setCalendarOpen","handleChange","prevState","toInputRef","initialControllers","useRangeFieldControllers","val","ToDate","onSubmit","stackContent","elements","handleSubmit","dismissable","Layout","showScrollShadow","setShowScrollShadow","offsetHeight","useScrollShadow","primary","secondary","tertiaryButton","tertiary","closeOnSelect","defaultNoOptionsMessage","Select","isMulti","closeMenuOnSelect","criterias","setType","toggleType","groupedCriterias","toBeGrouped","splice","groupCriterias","groupId","criteria","criteriaId","usePasswordCriteria","onDismiss","onLoad","BannerContent","selectedItemIndex","findIndex","isChecked","itemIdentifier","itemId","steps","useRadioGroupFieldControllers","onChangeHandler","contextValue","optionsType","autoGrow","minHeight","toolbar","toolbarRef","hasFocus","setHasFocus","updateHeight","scrollHeight","useGrowTextAreaRef","textAreaRef","hoverRange","hoverDate","setHoverDate","eachDayOfInterval","onDayMouseEnter","onDayMouseLeave","_toast"],"mappings":"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"}