@innovaccer/design-system 2.13.3 → 2.13.4-2

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 (349) hide show
  1. package/core/components/atoms/button/__stories__/SplitButton.story.jsx +1 -2
  2. package/core/components/atoms/checkbox/__stories__/Alignment.story.jsx +28 -26
  3. package/core/components/atoms/checkbox/__stories__/variants/Controlled.story.jsx +2 -2
  4. package/core/components/atoms/chip/__stories__/index.story.jsx +2 -2
  5. package/core/components/atoms/chip/__stories__/variants/Action.story.jsx +2 -2
  6. package/core/components/atoms/chip/__stories__/variants/Input.story.jsx +2 -2
  7. package/core/components/atoms/chip/__stories__/variants/Selection.story.jsx +6 -6
  8. package/core/components/atoms/chip/__stories__/variants/Type.story.jsx +2 -2
  9. package/core/components/atoms/chipGroup/_stories_/index.story.jsx +1 -1
  10. package/core/components/atoms/collapsible/__stories__/CustomTrigger.story.jsx +5 -71
  11. package/core/components/atoms/dropdown/Dropdown.tsx +18 -2
  12. package/core/components/atoms/dropdown/DropdownList.tsx +47 -57
  13. package/core/components/atoms/dropdown/__stories__/CustomSearchPlaceholder.story.jsx +4 -4
  14. package/core/components/atoms/dropdown/__stories__/DropdownItemsWithCheckbox.story.jsx +1 -3
  15. package/core/components/atoms/dropdown/__stories__/DropdownItemsWithIcon.story.jsx +2 -4
  16. package/core/components/atoms/dropdown/__stories__/DropdownItemsWithInfo.story.jsx +2 -5
  17. package/core/components/atoms/dropdown/__stories__/DropdownWIthIcon.story.jsx +3 -4
  18. package/core/components/atoms/dropdown/__stories__/DropdownWithActionButtons.story.jsx +9 -9
  19. package/core/components/atoms/dropdown/__stories__/DropdownWithCaption.story.jsx +7 -7
  20. package/core/components/atoms/dropdown/__stories__/Gender.story.jsx +6 -6
  21. package/core/components/atoms/dropdown/__stories__/LabelInline.story.jsx +58 -0
  22. package/core/components/atoms/dropdown/__stories__/{LabelPositionInDropdown.story.jsx → LabelOnTop.story.jsx} +8 -9
  23. package/core/components/atoms/dropdown/__stories__/Languages.story.jsx +6 -6
  24. package/core/components/atoms/dropdown/__stories__/Menu.story.jsx +5 -6
  25. package/core/components/atoms/dropdown/__stories__/OptionsLessThan50.story.jsx +3 -7
  26. package/core/components/atoms/dropdown/__stories__/OptionsMoreThan50.story.jsx +2 -2
  27. package/core/components/atoms/dropdown/__stories__/SearchInDropdown.story.jsx +3 -5
  28. package/core/components/atoms/dropdown/__stories__/StandardDropdown.story.jsx +2 -2
  29. package/core/components/atoms/dropdown/__stories__/StatusWithoutLabel.story.jsx +3 -3
  30. package/core/components/atoms/dropdown/__stories__/WithCheckboxAndSubInfo.story.jsx +2 -4
  31. package/core/components/atoms/dropdown/__stories__/index.story.jsx +2 -2
  32. package/core/components/atoms/dropdown/__stories__/variants/LoadingType.story.jsx +0 -1
  33. package/core/components/atoms/dropdown/__stories__/variants/PreSelection.story.jsx +2 -2
  34. package/core/components/atoms/dropdown/__stories__/variants/StaticLimit.story.jsx +2 -2
  35. package/core/components/atoms/dropdown/__stories__/variants/controlledDropdown/BulkMultiSelectWithApply.story.jsx +2 -2
  36. package/core/components/atoms/dropdown/__stories__/variants/controlledDropdown/MultiSelect.story.jsx +2 -2
  37. package/core/components/atoms/dropdown/__stories__/variants/controlledDropdown/SingleSelect.story.jsx +4 -4
  38. package/core/components/atoms/dropdown/option/DefaultOption.tsx +1 -1
  39. package/core/components/atoms/dropdown/utility.tsx +6 -0
  40. package/core/components/atoms/icon/__stories__/variants/Image.story.jsx +1 -6
  41. package/core/components/atoms/input/__stories__/variants/Size.story.jsx +9 -9
  42. package/core/components/atoms/input/__stories__/variants/controlledInput.story.jsx +3 -3
  43. package/core/components/atoms/metaList/_stories_/index.story.jsx +0 -1
  44. package/core/components/atoms/rangeSlider/__stories__/index.story.jsx +2 -2
  45. package/core/components/atoms/rangeSlider/__stories__/variants/Controlled.story.jsx +2 -2
  46. package/core/components/atoms/slider/__stories__/variants/Controlled.story.jsx +2 -2
  47. package/core/components/css-utilities/Miscellaneous/Miscellaneous.story.tsx +4 -0
  48. package/core/components/molecules/dropzone/FileSelectorUtils.tsx +3 -0
  49. package/core/components/molecules/editableDropdown/__stories__/index.story.jsx +2 -2
  50. package/core/components/molecules/fullscreenModal/__stories__/DefaultWidth.story.jsx +4 -2
  51. package/core/components/molecules/fullscreenModal/__stories__/LargeWidth.story.jsx +4 -2
  52. package/core/components/molecules/fullscreenModal/__stories__/Layering.story.jsx +3 -1
  53. package/core/components/molecules/fullscreenModal/__stories__/Scrolling.story.jsx +4 -2
  54. package/core/components/molecules/fullscreenModal/__stories__/TwoStepWorkflow.story.jsx +1 -2
  55. package/core/components/molecules/fullscreenModal/__stories__/twoSteps.story.jsx +0 -1
  56. package/core/components/molecules/fullscreenModal/__stories__/variants/dimension/Large.story.jsx +0 -1
  57. package/core/components/molecules/fullscreenModal/__stories__/variants/dimension/Medium.story.jsx +0 -1
  58. package/core/components/molecules/modal/__stories__/Alert.story.jsx +3 -1
  59. package/core/components/molecules/modal/__stories__/Confirmation.story.jsx +3 -1
  60. package/core/components/molecules/modal/__stories__/Dialog.story.jsx +3 -1
  61. package/core/components/molecules/modal/__stories__/Input.story.jsx +3 -1
  62. package/core/components/molecules/modal/__stories__/Layering.story.jsx +3 -1
  63. package/core/components/molecules/modal/__stories__/NoFooter.story.jsx +3 -1
  64. package/core/components/molecules/modal/__stories__/Scrolling.story.jsx +4 -2
  65. package/core/components/molecules/modal/__stories__/index.story.jsx +3 -1
  66. package/core/components/molecules/modal/__stories__/old.story.jsx +3 -1
  67. package/core/components/molecules/modal/__stories__/variants/dimension/Large.story.jsx +3 -1
  68. package/core/components/molecules/modal/__stories__/variants/dimension/Medium.story.jsx +3 -1
  69. package/core/components/molecules/modal/__stories__/variants/dimension/Small.story.jsx +3 -1
  70. package/core/components/molecules/popover/__stories__/Actions.story.jsx +1 -6
  71. package/core/components/molecules/popover/__stories__/Inputs.story.jsx +1 -6
  72. package/core/components/molecules/popover/__stories__/Light.story.jsx +1 -6
  73. package/core/components/molecules/popover/__stories__/variants/boundaryElement.story.jsx +1 -1
  74. package/core/components/molecules/sidesheet/__stories__/index.story.jsx +3 -1
  75. package/core/components/molecules/sidesheet/__stories__/variants/CustomHeader.story.jsx +3 -1
  76. package/core/components/molecules/sidesheet/__stories__/variants/Layering.story.jsx +3 -1
  77. package/core/components/molecules/sidesheet/__stories__/variants/LayeringWithModal.story.jsx +3 -1
  78. package/core/components/molecules/sidesheet/__stories__/variants/dimension/Large.story.jsx +3 -1
  79. package/core/components/molecules/sidesheet/__stories__/variants/dimension/Regular.story.jsx +4 -2
  80. package/core/components/molecules/sidesheet/__stories__/variants/stickyFooter.story.jsx +3 -1
  81. package/core/components/molecules/sidesheet/__stories__/variants/twoSteps.story.jsx +6 -4
  82. package/core/components/molecules/tabs/__stories__/DismissibleTab.story.jsx +1 -0
  83. package/core/components/molecules/tooltip/__stories__/variants/Position.story.jsx +2 -13
  84. package/core/components/organisms/calendar/__stories__/index.story.jsx +40 -7
  85. package/core/components/organisms/calendar/__stories__/variants/size.story.jsx +2 -3
  86. package/core/components/organisms/datePicker/DatePicker.tsx +1 -1
  87. package/core/components/organisms/dateRangePicker/__stories__/variants/withSingleInput.story.jsx +3 -0
  88. package/core/components/organisms/horizontalNav/__stories__/leftAlign.story.jsx +35 -19
  89. package/core/components/organisms/inlineMessage/__stories__/variants/Default.story.jsx +1 -3
  90. package/core/components/organisms/inlineMessage/__stories__/variants/Error.story.jsx +1 -3
  91. package/core/components/organisms/inlineMessage/__stories__/variants/Info.story.jsx +1 -3
  92. package/core/components/organisms/inlineMessage/__stories__/variants/Success.story.jsx +1 -3
  93. package/core/components/organisms/inlineMessage/__stories__/variants/Warning.story.jsx +1 -3
  94. package/core/components/organisms/pageHeader/__stories__/Responsiveness.story.jsx +2 -2
  95. package/core/components/organisms/pageHeader/__stories__/variants/withNavigation.story.jsx +2 -2
  96. package/core/components/organisms/pageHeader/__stories__/variants/withNavigationL1.story.jsx +2 -2
  97. package/core/components/organisms/pageHeader/__stories__/variants/withStepper.story.jsx +2 -2
  98. package/core/components/organisms/pageHeader/__stories__/variants/withStepperL1.story.jsx +2 -2
  99. package/core/components/organisms/pageHeader/__stories__/variants/withTabs.story.jsx +2 -2
  100. package/core/components/organisms/pageHeader/__stories__/variants/withTabsL1.story.jsx +2 -2
  101. package/core/components/organisms/pageHeader/__stories__/withFilter.story.jsx +2 -2
  102. package/core/components/organisms/pageHeader/__stories__/withFilterL1.story.jsx +2 -2
  103. package/core/components/organisms/pageHeader/__stories__/withNavigation.story.jsx +2 -2
  104. package/core/components/organisms/pageHeader/__stories__/withNavigationL1.story.jsx +9 -3
  105. package/core/components/organisms/pageHeader/__stories__/withStepperL1.story.jsx +4 -4
  106. package/core/components/organisms/table/__stories__/TableAsDescriptionList.story.jsx +4 -4
  107. package/core/components/organisms/timePicker/TimePicker.tsx +6 -113
  108. package/core/components/organisms/timePicker/TimePickerWithInput.tsx +124 -0
  109. package/core/components/organisms/timePicker/TimePickerWithSearch.tsx +198 -0
  110. package/core/components/organisms/timePicker/__stories__/TimeIntervals.story.jsx +52 -0
  111. package/core/components/organisms/timePicker/__stories__/disabledOption.story.jsx +52 -0
  112. package/core/components/organisms/timePicker/__stories__/fromTo.story.jsx +72 -0
  113. package/core/components/organisms/timePicker/__stories__/showDuration.story.jsx +52 -0
  114. package/core/components/organisms/timePicker/__stories__/withDatePicker.story.jsx +88 -0
  115. package/core/components/organisms/timePicker/__stories__/{index.story.jsx → withInput.story.jsx} +6 -3
  116. package/core/components/organisms/timePicker/__stories__/withSearch.story.jsx +89 -0
  117. package/core/components/organisms/timePicker/__tests__/TimePickerWithSearch.test.tsx +464 -0
  118. package/core/components/organisms/timePicker/__tests__/__snapshots__/TimePickerWithSearch.test.tsx.snap +169 -0
  119. package/core/components/organisms/timePicker/index.tsx +2 -0
  120. package/core/components/organisms/timePicker/utility/searchUtils.tsx +295 -0
  121. package/core/components/organisms/timePicker/utility/timePickerUtility.tsx +219 -0
  122. package/core/components/organisms/timePicker/utils.tsx +1 -1
  123. package/core/components/organisms/verticalNav/MenuItem.tsx +11 -6
  124. package/core/components/organisms/verticalNav/__stories__/CustomOptionsRenderer.story.jsx +10 -9
  125. package/core/components/organisms/verticalNav/__stories__/CustomTrigger.story.jsx +14 -12
  126. package/core/components/organisms/verticalNav/__stories__/FlatEdgedVerticalNav.story.jsx +5 -5
  127. package/core/components/organisms/verticalNav/__stories__/LabelOverflowBehaviour.story.jsx +9 -15
  128. package/core/components/organisms/verticalNav/__tests__/__snapshots__/VerticalNav.test.tsx.snap +26 -24
  129. package/core/index.tsx +1 -0
  130. package/css/dist/index.css +9 -8
  131. package/css/dist/index.css.map +1 -1
  132. package/css/src/components/dropdown.css +6 -6
  133. package/css/src/components/metricInput.css +1 -0
  134. package/css/src/components/verticalNav.css +2 -0
  135. package/dist/core/components/atoms/dropdown/Dropdown.d.ts +2 -0
  136. package/dist/core/components/atoms/dropdown/DropdownList.d.ts +1 -0
  137. package/dist/core/components/atoms/dropdown/utility.d.ts +1 -0
  138. package/dist/core/components/atoms/popperWrapper/PopperWrapper.d.ts +22 -22
  139. package/dist/core/components/organisms/datePicker/DatePicker.d.ts +1 -1
  140. package/dist/core/components/organisms/timePicker/TimePicker.d.ts +5 -13
  141. package/dist/core/components/organisms/timePicker/TimePickerWithInput.d.ts +24 -0
  142. package/dist/core/components/organisms/timePicker/TimePickerWithSearch.d.ts +32 -0
  143. package/dist/core/components/organisms/timePicker/index.d.ts +2 -0
  144. package/dist/core/components/organisms/timePicker/utility/searchUtils.d.ts +7 -0
  145. package/dist/core/components/organisms/timePicker/utility/timePickerUtility.d.ts +19 -0
  146. package/dist/core/index.d.ts +1 -0
  147. package/dist/index.esm.js +719 -52
  148. package/dist/index.js +648 -74
  149. package/dist/index.js.map +1 -1
  150. package/dist/index.umd.js +1 -1
  151. package/dist/index.umd.js.br +0 -0
  152. package/dist/index.umd.js.gz +0 -0
  153. package/docs/.eslintrc.json +32 -1
  154. package/docs/.prettierrc +6 -0
  155. package/docs/README.md +14 -0
  156. package/docs/cypress/e2e/main.cy.js +35 -0
  157. package/docs/cypress/fixtures/example.json +5 -0
  158. package/docs/cypress/support/commands.ts +37 -0
  159. package/docs/cypress/support/e2e.ts +20 -0
  160. package/docs/cypress.config.js +9 -0
  161. package/docs/package.json +16 -3
  162. package/docs/src/components/Colors/Colors.css +4 -0
  163. package/docs/src/components/Colors/Colors.js +56 -61
  164. package/docs/src/components/Container/ComponentsContainer.js +10 -30
  165. package/docs/src/components/Container/Container.js +10 -41
  166. package/docs/src/components/ErrorBoundary.js +9 -3
  167. package/docs/src/components/Footer/Footer.js +11 -10
  168. package/docs/src/components/GlobalSearch/index.js +47 -44
  169. package/docs/src/components/Header/Header.css +4 -0
  170. package/docs/src/components/Header/Header.js +25 -19
  171. package/docs/src/components/Layout.js +59 -303
  172. package/docs/src/components/LeftNav/LeftNav.js +12 -28
  173. package/docs/src/components/Logos/Logos.js +12 -26
  174. package/docs/src/components/MDXComponents.js +213 -0
  175. package/docs/src/components/MDXHeading.js +12 -18
  176. package/docs/src/components/Meta.js +9 -9
  177. package/docs/src/components/PropsTable/ArgJsDoc.tsx +2 -6
  178. package/docs/src/components/PropsTable/ArgRow.tsx +19 -47
  179. package/docs/src/components/PropsTable/ArgValue.tsx +50 -93
  180. package/docs/src/components/PropsTable/EmptyBlock.tsx +2 -5
  181. package/docs/src/components/PropsTable/SectionRow.tsx +7 -18
  182. package/docs/src/components/PropsTable/Table.tsx +43 -130
  183. package/docs/src/components/PropsTable/generateImports.tsx +1 -3
  184. package/docs/src/components/PropsTable/index.js +94 -140
  185. package/docs/src/components/PropsTable/prism.css +19 -20
  186. package/docs/src/components/Rules/DONTs.js +1 -6
  187. package/docs/src/components/Rules/DOs.js +1 -6
  188. package/docs/src/components/Rules/IconWrapper.js +6 -7
  189. package/docs/src/components/Rules/InlineMessage.js +1 -5
  190. package/docs/src/components/Rules/Rules.js +18 -28
  191. package/docs/src/components/TableOfContent/TableOfContent.css +8 -1
  192. package/docs/src/components/TableOfContent/TableOfContent.js +67 -58
  193. package/docs/src/components/css/global.css +1 -1
  194. package/docs/src/components/css/prism.css +1 -1
  195. package/docs/src/components/css/style.css +13 -5
  196. package/docs/src/components/templates/Default.js +1 -1
  197. package/docs/src/components/templates/Homepage.js +4 -6
  198. package/docs/src/data/components/Overview.js +49 -56
  199. package/docs/src/data/components/images/Calendar.png +0 -0
  200. package/docs/src/data/components/images/MetaList.png +0 -0
  201. package/docs/src/data/components/images/PageHeader.png +0 -0
  202. package/docs/src/data/components/images/TimePicker.png +0 -0
  203. package/docs/src/data/components/images/mobile/Badge.png +0 -0
  204. package/docs/src/data/components/images/mobile/Dropdown.png +0 -0
  205. package/docs/src/data/components/images/mobile/Message.png +0 -0
  206. package/docs/src/data/components/images/mobile/MetaList.png +0 -0
  207. package/docs/src/data/components/images/mobile/Slider.png +0 -0
  208. package/docs/src/data/components/images/mobile/StatusHint.png +0 -0
  209. package/docs/src/data/components/images/mobile/Stepper.png +0 -0
  210. package/docs/src/data/components/index.js +168 -321
  211. package/docs/src/data/components/mobile.js +85 -125
  212. package/docs/src/data/components/overview.css +4 -2
  213. package/docs/src/data/components/patterns.js +25 -59
  214. package/docs/src/data/header-items.yaml +1 -0
  215. package/docs/src/data/nav/components.yaml +2 -8
  216. package/docs/src/pages/404.js +7 -17
  217. package/docs/src/pages/components/avatar/usage.mdx +23 -19
  218. package/docs/src/pages/components/calendar/usage.mdx +3 -3
  219. package/docs/src/pages/components/checkbox/usage.mdx +1 -1
  220. package/docs/src/pages/components/chips/images/actionchip-state.png +0 -0
  221. package/docs/src/pages/components/chips/images/inputchips-state.png +0 -0
  222. package/docs/src/pages/components/chips/images/selectionchip-state.png +0 -0
  223. package/docs/src/pages/components/chips/usage.mdx +24 -2
  224. package/docs/src/pages/components/datePicker/images/datePicker-3.png +0 -0
  225. package/docs/src/pages/components/datePicker/images/datePicker-6.png +0 -0
  226. package/docs/src/pages/components/datePicker/usage.mdx +9 -2
  227. package/docs/src/pages/components/dropdowns/usage.mdx +1 -1
  228. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableField-2.png +0 -0
  229. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableField-3.png +0 -0
  230. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableFields-1.png +0 -0
  231. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableFields-4.png +0 -0
  232. package/docs/src/pages/components/inlineEditableFields/usage.mdx +4 -4
  233. package/docs/src/pages/components/inputs/usage.mdx +7 -7
  234. package/docs/src/pages/components/tabs/images/tabs-1.png +0 -0
  235. package/docs/src/pages/content/button-guidelines/tabs/button-glossary.mdx +1776 -1
  236. package/docs/src/pages/content/button-guidelines/tabs/confusing-buttons.mdx +479 -8
  237. package/docs/src/pages/content/email-guidelines.mdx +3 -3
  238. package/docs/src/pages/content/house-rules/tabs/date,-time-&-numbers.mdx +24 -0
  239. package/docs/src/pages/content/house-rules/tabs/grammer.mdx +42 -2
  240. package/docs/src/pages/content/house-rules/tabs/punctuations.mdx +32 -0
  241. package/docs/src/pages/foundations/colors.mdx +338 -24
  242. package/docs/src/pages/foundations/layout/index.mdx +57 -82
  243. package/docs/src/pages/foundations/response-time.mdx +32 -77
  244. package/docs/src/pages/foundations/typography.mdx +166 -0
  245. package/docs/src/pages/index.js +92 -121
  246. package/docs/src/pages/introduction/get-started/designers.mdx +28 -188
  247. package/docs/src/pages/introduction/get-started/images/designers-1.png +0 -0
  248. package/docs/src/pages/introduction/get-started/images/designers-2.png +0 -0
  249. package/docs/src/pages/introduction/what's-new.mdx +322 -15
  250. package/docs/src/pages/mobile/components/badges/images/badge-1.png +0 -0
  251. package/docs/src/pages/mobile/components/badges/images/badge-2.png +0 -0
  252. package/docs/src/pages/mobile/components/badges/images/badge-3.png +0 -0
  253. package/docs/src/pages/mobile/components/badges/images/badge-4.png +0 -0
  254. package/docs/src/pages/mobile/components/badges/images/badge-5.png +0 -0
  255. package/docs/src/pages/mobile/components/badges/usage.mdx +100 -0
  256. package/docs/src/pages/mobile/components/card/images/mcard-1.png +0 -0
  257. package/docs/src/pages/mobile/components/card/images/mcard-2.png +0 -0
  258. package/docs/src/pages/mobile/components/card/images/mcard-3.png +0 -0
  259. package/docs/src/pages/mobile/components/card/images/mcard-4.png +0 -0
  260. package/docs/src/pages/mobile/components/card/images/mcard-5.png +0 -0
  261. package/docs/src/pages/mobile/components/card/images/mcard-6.png +0 -0
  262. package/docs/src/pages/mobile/components/card/usage.mdx +54 -67
  263. package/docs/src/pages/mobile/components/checkbox/images/checkbox-1.png +0 -0
  264. package/docs/src/pages/mobile/components/checkbox/usage.mdx +26 -2
  265. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-1.png +0 -0
  266. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-10.png +0 -0
  267. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-11.png +0 -0
  268. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-2.png +0 -0
  269. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-3.png +0 -0
  270. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-4.png +0 -0
  271. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-5.png +0 -0
  272. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-6.png +0 -0
  273. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-7.png +0 -0
  274. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-8.png +0 -0
  275. package/docs/src/pages/mobile/components/dropdowns/images/dropdown-9.png +0 -0
  276. package/docs/src/pages/mobile/components/dropdowns/usage.mdx +88 -0
  277. package/docs/src/pages/mobile/components/message/images/messages-1.png +0 -0
  278. package/docs/src/pages/mobile/components/message/images/messages-10.png +0 -0
  279. package/docs/src/pages/mobile/components/message/images/messages-11.png +0 -0
  280. package/docs/src/pages/mobile/components/message/images/messages-12.png +0 -0
  281. package/docs/src/pages/mobile/components/message/images/messages-2.png +0 -0
  282. package/docs/src/pages/mobile/components/message/images/messages-3.png +0 -0
  283. package/docs/src/pages/mobile/components/message/images/messages-4.png +0 -0
  284. package/docs/src/pages/mobile/components/message/images/messages-5.png +0 -0
  285. package/docs/src/pages/mobile/components/message/images/messages-6.png +0 -0
  286. package/docs/src/pages/mobile/components/message/images/messages-7.png +0 -0
  287. package/docs/src/pages/mobile/components/message/images/messages-8.png +0 -0
  288. package/docs/src/pages/mobile/components/message/images/messages-9.png +0 -0
  289. package/docs/src/pages/mobile/components/message/usage.mdx +170 -0
  290. package/docs/src/pages/mobile/components/metaList/images/metaList-1.png +0 -0
  291. package/docs/src/pages/mobile/components/metaList/images/metaList-2.png +0 -0
  292. package/docs/src/pages/mobile/components/metaList/images/metaList-3.png +0 -0
  293. package/docs/src/pages/mobile/components/metaList/images/metaList-4.png +0 -0
  294. package/docs/src/pages/mobile/components/metaList/usage.mdx +71 -0
  295. package/docs/src/pages/mobile/components/slider/images/slider-1.png +0 -0
  296. package/docs/src/pages/mobile/components/slider/images/slider-2.png +0 -0
  297. package/docs/src/pages/mobile/components/slider/images/slider-3.png +0 -0
  298. package/docs/src/pages/mobile/components/slider/images/slider-4.png +0 -0
  299. package/docs/src/pages/mobile/components/slider/images/slider-5.png +0 -0
  300. package/docs/src/pages/mobile/components/slider/usage.mdx +83 -0
  301. package/docs/src/pages/mobile/components/statusHint/images/statushint-1.png +0 -0
  302. package/docs/src/pages/mobile/components/statusHint/images/statushint-2.png +0 -0
  303. package/docs/src/pages/mobile/components/statusHint/images/statushint-3.png +0 -0
  304. package/docs/src/pages/mobile/components/statusHint/images/statushint-4.png +0 -0
  305. package/docs/src/pages/mobile/components/statusHint/images/statushint-5.png +0 -0
  306. package/docs/src/pages/mobile/components/statusHint/images/statushint-6.png +0 -0
  307. package/docs/src/pages/mobile/components/statusHint/images/statushint-7.png +0 -0
  308. package/docs/src/pages/mobile/components/statusHint/usage.mdx +108 -0
  309. package/docs/src/pages/mobile/components/steppers/images/stepper-1.png +0 -0
  310. package/docs/src/pages/mobile/components/steppers/images/stepper-2.png +0 -0
  311. package/docs/src/pages/mobile/components/steppers/images/stepper-3.png +0 -0
  312. package/docs/src/pages/mobile/components/steppers/images/stepper-4.png +0 -0
  313. package/docs/src/pages/mobile/components/steppers/images/stepper-5.png +0 -0
  314. package/docs/src/pages/mobile/components/steppers/images/stepper-6.png +0 -0
  315. package/docs/src/pages/mobile/components/steppers/usage.mdx +111 -0
  316. package/docs/src/pages/mobile/foundations/layout/images/layout-2.png +0 -0
  317. package/docs/src/pages/mobile/foundations/layout/index.mdx +3 -1
  318. package/docs/src/pages/mobile/foundations/page-types/index.mdx +0 -214
  319. package/docs/src/pages/mobile/foundations/spacing/index.mdx +5 -0
  320. package/docs/src/pages/mobile/foundations/typography.mdx +1 -1
  321. package/docs/src/pages/patterns/uiStates/usage.mdx +92 -0
  322. package/docs/src/util/Frontmatter.js +4 -4
  323. package/docs/src/util/HeaderItems.js +2 -1
  324. package/docs/src/util/Helpers.js +3 -3
  325. package/docs/src/util/HomeIcons.js +91 -53
  326. package/docs/src/util/InPageNavItems.js +2 -6
  327. package/docs/src/util/Logos.js +2 -2
  328. package/docs/src/util/MdsChangelog.js +5 -10
  329. package/docs/src/util/MediumBlogs.js +13 -13
  330. package/docs/src/util/NavItems.js +14 -17
  331. package/docs/src/util/Search.js +2 -2
  332. package/docs/src/util/StorybookData.js +2 -4
  333. package/docs/src/util/constants.js +1 -5
  334. package/docs/src/util/context/NavContext.js +1 -4
  335. package/docs/src/util/hooks/useMetadata.js +1 -1
  336. package/docs/tools/build.sh +1 -0
  337. package/docs/tools/changelog.sh +1 -1
  338. package/package.json +3 -3
  339. package/docs/src/pages/components/index.mdx +0 -11
  340. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableFields-2.png +0 -0
  341. package/docs/src/pages/components/inlineEditableFields/images/inlineEditableFields-3.png +0 -0
  342. package/docs/src/pages/content/button-guidelines/index.mdx +0 -7
  343. package/docs/src/pages/content/voice-and-tone-guidelines/index.mdx +0 -7
  344. package/docs/src/pages/introduction/get-started/images/designers-3.png +0 -0
  345. package/docs/src/pages/introduction/get-started/images/designers-4.png +0 -0
  346. package/docs/src/pages/introduction/get-started/images/designers-5.png +0 -0
  347. package/docs/src/pages/introduction/get-started/images/designers-6.png +0 -0
  348. package/docs/src/pages/introduction/get-started/images/designers-7.png +0 -0
  349. package/docs/src/pages/introduction/get-started/images/designers-8.png +0 -0
@@ -0,0 +1,89 @@
1
+ import * as React from 'react';
2
+ import { TimePicker, Label, Row } from '@/index';
3
+ import { action } from '@/utils/action';
4
+ import { TimePickerWithSearch } from '../TimePickerWithSearch';
5
+ import { TimePickerWithInput } from '../TimePickerWithInput';
6
+
7
+ // CSF format story
8
+ export const withSearch = () => {
9
+ const onChangeHandler = (props) => {
10
+ return action(`updated time: ${props}`)();
11
+ };
12
+
13
+ return (
14
+ <Row>
15
+ <div className="w-25">
16
+ <Label>12 Hour Format</Label>
17
+ <TimePicker
18
+ withSearch={true}
19
+ startTime="00:00 AM"
20
+ endTime="11:59 PM"
21
+ onChange={onChangeHandler}
22
+ noResultMessage="Invalid Time"
23
+ id="12-hour"
24
+ />
25
+ </div>
26
+ <div className="w-25 ml-7">
27
+ <Label>24 Hour Format</Label>
28
+ <TimePicker
29
+ withSearch={true}
30
+ startTime="00:00 AM"
31
+ endTime="11:59 PM"
32
+ timeFormat="24-Hour"
33
+ onChange={onChangeHandler}
34
+ noResultMessage="Invalid Time"
35
+ id="24-hour"
36
+ />
37
+ </div>
38
+ </Row>
39
+ );
40
+ };
41
+
42
+ const customCode = `() => {
43
+
44
+ const onChangeHandler = (props) => {
45
+ console.log(props);
46
+ };
47
+
48
+ return (
49
+ <Row>
50
+ <div className="w-25">
51
+ <Label>12 Hour Format</Label>
52
+ <TimePicker
53
+ withSearch={true}
54
+ startTime="00:00 AM"
55
+ endTime="11:59 PM"
56
+ onChange={onChangeHandler}
57
+ noResultMessage="Invalid Time"
58
+ id="12-hour"
59
+ />
60
+ </div>
61
+ <div className="w-25 ml-7">
62
+ <Label>24 Hour Format</Label>
63
+ <TimePicker
64
+ withSearch={true}
65
+ startTime="00:00 AM"
66
+ endTime="11:59 PM"
67
+ timeFormat="24-Hour"
68
+ onChange={onChangeHandler}
69
+ noResultMessage="Invalid Time"
70
+ id="24-hour"
71
+ />
72
+ </div>
73
+ </Row>
74
+ );
75
+ }`;
76
+
77
+ export default {
78
+ title: 'Components/TimePicker/With Search',
79
+ component: TimePickerWithInput,
80
+ subcomponents: { TimePickerWithSearch },
81
+ parameters: {
82
+ docs: {
83
+ docPage: {
84
+ customCode,
85
+ title: 'TimePicker',
86
+ },
87
+ },
88
+ },
89
+ };
@@ -0,0 +1,464 @@
1
+ import * as React from 'react';
2
+ import { TimePicker } from '@/index';
3
+ import { render, fireEvent, waitFor } from '@testing-library/react';
4
+ import { testHelper, filterUndefined, valueHelper, testMessageHelper } from '@/utils/testHelper';
5
+ import { TimePickerProps as Props } from '@/index.type';
6
+ import { convert12To24HourFormat } from '../utility/timePickerUtility';
7
+
8
+ const optionID = 'DesignSystem-DropdownOption--DEFAULT';
9
+ const trigger = 'DesignSystem-DropdownTrigger';
10
+ const startTime = '05:00 AM';
11
+ const endTime = '11:00 PM';
12
+ const FunctionValue = jest.fn();
13
+ const booleanValue = [true, false];
14
+ const timeFormat = ['12-Hour', '24-Hour'];
15
+ const activeOptionClass = 'Option--active';
16
+
17
+ const fetchOption = () => {
18
+ return new Promise<any>((resolve) => {
19
+ window.setTimeout(() => {
20
+ resolve({
21
+ searchTerm: '',
22
+ options: [{ label: '10:00 AM', value: '10:00 AM' }],
23
+ count: 1,
24
+ });
25
+ }, 1000);
26
+ });
27
+ };
28
+
29
+ const testFunc = (props: Record<string, any>): void => {
30
+ const attr = filterUndefined(props) as Props;
31
+
32
+ it(testMessageHelper(attr), () => {
33
+ const { baseElement } = render(<TimePicker withSearch={true} {...attr} />);
34
+ expect(baseElement).toMatchSnapshot();
35
+ });
36
+ };
37
+
38
+ describe('TimePicker component snapshots', () => {
39
+ describe('renders snapshot for all props', () => {
40
+ const mapper: Record<string, any> = {
41
+ startTime: valueHelper(startTime, { required: true, iterate: false }),
42
+ endTime: valueHelper(endTime, { required: true, iterate: false }),
43
+ showDuration: valueHelper(booleanValue, { required: true, iterate: true }),
44
+ timeFormat: valueHelper(timeFormat, { required: true, iterate: true }),
45
+ };
46
+ testHelper(mapper, testFunc);
47
+ });
48
+ });
49
+
50
+ describe('TimePicker option list in 12 hour format', () => {
51
+ it('check list when no start time & end time is given', async () => {
52
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} />);
53
+ const dropdownTrigger = getByTestId(trigger);
54
+ fireEvent.click(dropdownTrigger);
55
+ await waitFor(() => {
56
+ const optionList = getAllByTestId(optionID);
57
+ const optionLen = optionList.length - 1;
58
+ expect(optionList[0]).toHaveTextContent('12:00 AM');
59
+ expect(optionList[optionLen]).toHaveTextContent('11:45 PM');
60
+ });
61
+ });
62
+
63
+ it('check list when only end time is given', async () => {
64
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} endTime={endTime} />);
65
+ const dropdownTrigger = getByTestId(trigger);
66
+ fireEvent.click(dropdownTrigger);
67
+ await waitFor(() => {
68
+ const optionList = getAllByTestId(optionID);
69
+ const optionLen = optionList.length - 1;
70
+ expect(optionList[0]).toHaveTextContent('12:00 AM');
71
+ expect(optionList[optionLen]).toHaveTextContent(endTime);
72
+ });
73
+ });
74
+
75
+ it('check list when only start time is given', async () => {
76
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} startTime={startTime} />);
77
+ const dropdownTrigger = getByTestId(trigger);
78
+ fireEvent.click(dropdownTrigger);
79
+ await waitFor(() => {
80
+ const optionList = getAllByTestId(optionID);
81
+ const optionLen = optionList.length - 1;
82
+ expect(optionList[0]).toHaveTextContent(startTime);
83
+ expect(optionList[optionLen]).toHaveTextContent('04:45 AM');
84
+ });
85
+ });
86
+
87
+ it('check list when both start & end time is given', async () => {
88
+ const { getByTestId, getAllByTestId } = render(
89
+ <TimePicker withSearch={true} endTime={endTime} startTime={startTime} />
90
+ );
91
+ const dropdownTrigger = getByTestId(trigger);
92
+ fireEvent.click(dropdownTrigger);
93
+ await waitFor(() => {
94
+ const optionList = getAllByTestId(optionID);
95
+ const optionLen = optionList.length - 1;
96
+ expect(optionList[0]).toHaveTextContent(startTime);
97
+ expect(optionList[optionLen]).toHaveTextContent(endTime);
98
+ });
99
+ });
100
+
101
+ it('check list when startTime is greater than endTime', async () => {
102
+ const { getByTestId, getAllByTestId } = render(
103
+ <TimePicker withSearch={true} startTime="10:15 PM" endTime="11:45 AM" />
104
+ );
105
+ const dropdownTrigger = getByTestId(trigger);
106
+ fireEvent.click(dropdownTrigger);
107
+ await waitFor(() => {
108
+ const optionList = getAllByTestId(optionID);
109
+ const optionLen = optionList.length - 1;
110
+ expect(optionList[0]).toHaveTextContent('10:15 PM');
111
+ expect(optionList[optionLen]).toHaveTextContent('11:45 AM');
112
+ });
113
+ });
114
+ });
115
+
116
+ describe('TimePicker option list in 24 hour format', () => {
117
+ it('check list when no start time & end time is given', async () => {
118
+ const { getByTestId, getAllByTestId } = render(<TimePicker timeFormat="24-Hour" withSearch={true} />);
119
+ const dropdownTrigger = getByTestId(trigger);
120
+ fireEvent.click(dropdownTrigger);
121
+ await waitFor(() => {
122
+ const optionList = getAllByTestId(optionID);
123
+ const optionLen = optionList.length - 1;
124
+ expect(optionList[0]).toHaveTextContent('00:00');
125
+ expect(optionList[optionLen]).toHaveTextContent('23:45');
126
+ });
127
+ });
128
+
129
+ it('check list when only end time is given', async () => {
130
+ const { getByTestId, getAllByTestId } = render(
131
+ <TimePicker timeFormat="24-Hour" withSearch={true} endTime="20:59" />
132
+ );
133
+ const dropdownTrigger = getByTestId(trigger);
134
+ fireEvent.click(dropdownTrigger);
135
+ await waitFor(() => {
136
+ const optionList = getAllByTestId(optionID);
137
+ const optionLen = optionList.length - 1;
138
+ expect(optionList[0]).toHaveTextContent('00:00');
139
+ expect(optionList[optionLen]).toHaveTextContent('20:45');
140
+ });
141
+ });
142
+
143
+ it('check list when only start time is given', async () => {
144
+ const { getByTestId, getAllByTestId } = render(
145
+ <TimePicker timeFormat="24-Hour" withSearch={true} startTime="10:00" />
146
+ );
147
+ const dropdownTrigger = getByTestId(trigger);
148
+ fireEvent.click(dropdownTrigger);
149
+ await waitFor(() => {
150
+ const optionList = getAllByTestId(optionID);
151
+ const optionLen = optionList.length - 1;
152
+ expect(optionList[0]).toHaveTextContent('10:00');
153
+ expect(optionList[optionLen]).toHaveTextContent('09:45');
154
+ });
155
+ });
156
+
157
+ it('check list when both start & end time is given', async () => {
158
+ const { getByTestId, getAllByTestId } = render(
159
+ <TimePicker timeFormat="24-Hour" withSearch={true} startTime="10:00" endTime="20:00" />
160
+ );
161
+ const dropdownTrigger = getByTestId(trigger);
162
+ fireEvent.click(dropdownTrigger);
163
+ await waitFor(() => {
164
+ const optionList = getAllByTestId(optionID);
165
+ const optionLen = optionList.length - 1;
166
+ expect(optionList[0]).toHaveTextContent('10:00');
167
+ expect(optionList[optionLen]).toHaveTextContent('20:00');
168
+ });
169
+ });
170
+
171
+ it('check list when startTime is greater than endTime', async () => {
172
+ const { getByTestId, getAllByTestId } = render(
173
+ <TimePicker timeFormat="24-Hour" withSearch={true} startTime="20:00" endTime="10:00" />
174
+ );
175
+ const dropdownTrigger = getByTestId(trigger);
176
+ fireEvent.click(dropdownTrigger);
177
+ await waitFor(() => {
178
+ const optionList = getAllByTestId(optionID);
179
+ const optionLen = optionList.length - 1;
180
+ expect(optionList[0]).toHaveTextContent('20:00');
181
+ expect(optionList[optionLen]).toHaveTextContent('10:00');
182
+ });
183
+ });
184
+ });
185
+
186
+ describe('TimePicker with disabled option list ', () => {
187
+ it('check disabled option list', async () => {
188
+ const { getByTestId, getAllByTestId } = render(
189
+ <TimePicker
190
+ startTime={startTime}
191
+ endTime={endTime}
192
+ withSearch={true}
193
+ disabledSlotList={['05:15 AM', '05:30 AM']}
194
+ />
195
+ );
196
+ const dropdownTrigger = getByTestId(trigger);
197
+ fireEvent.click(dropdownTrigger);
198
+ await waitFor(() => {
199
+ const optionList = getAllByTestId(optionID);
200
+ expect(optionList[1]).toHaveClass('Option--disabled');
201
+ expect(getAllByTestId('DesignSystem-Text')[2]).toHaveClass('Text--disabled');
202
+ });
203
+ });
204
+ });
205
+
206
+ describe('TimePicker with time duration label', () => {
207
+ it('check for time duration label in 12 hour format', async () => {
208
+ const { getByTestId, getAllByTestId } = render(
209
+ <TimePicker startTime={startTime} endTime={endTime} withSearch={true} showDuration={true} />
210
+ );
211
+ const dropdownTrigger = getByTestId(trigger);
212
+ fireEvent.click(dropdownTrigger);
213
+ await waitFor(() => {
214
+ const optionList = getAllByTestId(optionID);
215
+ expect(optionList[0]).toHaveTextContent('05:00 AM (0 hr 0 min)');
216
+ expect(optionList[1]).toHaveTextContent('05:15 AM (0 hr 15 min)');
217
+ expect(optionList[3]).toHaveTextContent('05:45 AM (0 hr 45 min)');
218
+ });
219
+ });
220
+
221
+ it('check for time duration label in 24 hour format', async () => {
222
+ const { getByTestId, getAllByTestId } = render(
223
+ <TimePicker timeFormat="24-Hour" startTime="05:00" endTime="20:00" withSearch={true} showDuration={true} />
224
+ );
225
+ const dropdownTrigger = getByTestId(trigger);
226
+ fireEvent.click(dropdownTrigger);
227
+ await waitFor(() => {
228
+ const optionList = getAllByTestId(optionID);
229
+ expect(optionList[0]).toHaveTextContent('05:00 (0 hr 0 min)');
230
+ expect(optionList[1]).toHaveTextContent('05:15 (0 hr 15 min)');
231
+ expect(optionList[3]).toHaveTextContent('05:45 (0 hr 45 min)');
232
+ });
233
+ });
234
+ });
235
+
236
+ describe('TimePicker list for different interval', () => {
237
+ it('check for 12 hour option list for different interval ', async () => {
238
+ const { getByTestId, getAllByTestId } = render(
239
+ <TimePicker startTime={startTime} endTime={endTime} withSearch={true} interval={30} />
240
+ );
241
+ const dropdownTrigger = getByTestId(trigger);
242
+ fireEvent.click(dropdownTrigger);
243
+ await waitFor(() => {
244
+ const optionList = getAllByTestId(optionID);
245
+ expect(optionList[0]).toHaveTextContent('05:00 AM');
246
+ expect(optionList[1]).toHaveTextContent('05:30 AM');
247
+ expect(optionList[3]).toHaveTextContent('06:30 AM');
248
+ });
249
+ });
250
+
251
+ it('check for 24 hour option list for different interval ', async () => {
252
+ const { getByTestId, getAllByTestId } = render(
253
+ <TimePicker startTime={startTime} endTime={endTime} withSearch={true} interval={30} />
254
+ );
255
+ const dropdownTrigger = getByTestId(trigger);
256
+ fireEvent.click(dropdownTrigger);
257
+ await waitFor(() => {
258
+ const optionList = getAllByTestId(optionID);
259
+ expect(optionList[0]).toHaveTextContent('05:00');
260
+ expect(optionList[1]).toHaveTextContent('05:30');
261
+ expect(optionList[3]).toHaveTextContent('06:30');
262
+ });
263
+ });
264
+ });
265
+
266
+ describe('TimePicker fetchOption list', () => {
267
+ it('check for fetchTimeOptions prop', async () => {
268
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} fetchTimeOptions={fetchOption} />);
269
+ const dropdownTrigger = getByTestId(trigger);
270
+ fireEvent.click(dropdownTrigger);
271
+ await waitFor(() => {
272
+ const optionList = getAllByTestId(optionID);
273
+ expect(optionList[0]).toHaveTextContent('10:00 AM');
274
+ });
275
+ });
276
+ });
277
+
278
+ describe('TimePicker Event Handlers', () => {
279
+ it('check for onChange prop', async () => {
280
+ const { getByTestId } = render(
281
+ <TimePicker onChange={FunctionValue} withSearch={true} fetchTimeOptions={fetchOption} />
282
+ );
283
+ const dropdownTrigger = getByTestId(trigger);
284
+
285
+ fireEvent.click(dropdownTrigger);
286
+ await waitFor(() => {
287
+ fireEvent.click(getByTestId('DesignSystem-Text'));
288
+ expect(FunctionValue).toHaveBeenCalled();
289
+ });
290
+ });
291
+ });
292
+
293
+ describe('TimePicker Search Error Handlers', () => {
294
+ it('check for five digit search query in 12 hour format', async () => {
295
+ const { getByTestId } = render(<TimePicker withSearch={true} />);
296
+ const dropdownTrigger = getByTestId(trigger);
297
+
298
+ fireEvent.click(dropdownTrigger);
299
+ const searchInput = getByTestId('DesignSystem-Input');
300
+ expect(searchInput).toBeInTheDocument();
301
+ fireEvent.input(searchInput, { target: { value: '123456' } });
302
+
303
+ await waitFor(() => {
304
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toBeInTheDocument();
305
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toHaveTextContent('No result found');
306
+ });
307
+ });
308
+
309
+ it('check for invalid search', async () => {
310
+ const { getByTestId } = render(<TimePicker startTime={startTime} endTime={endTime} withSearch={true} />);
311
+ const dropdownTrigger = getByTestId(trigger);
312
+
313
+ fireEvent.click(dropdownTrigger);
314
+ const searchInput = getByTestId('DesignSystem-Input');
315
+ expect(searchInput).toBeInTheDocument();
316
+ fireEvent.input(searchInput, { target: { value: 'abc:;' } });
317
+
318
+ await waitFor(() => {
319
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toBeInTheDocument();
320
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toHaveTextContent('No result found');
321
+ });
322
+ });
323
+
324
+ it('check for noResultFound prop on invalid search', async () => {
325
+ const { getByTestId } = render(
326
+ <TimePicker startTime={startTime} endTime={endTime} withSearch={true} noResultMessage="Invalid Time" />
327
+ );
328
+ const dropdownTrigger = getByTestId(trigger);
329
+
330
+ fireEvent.click(dropdownTrigger);
331
+ const searchInput = getByTestId('DesignSystem-Input');
332
+ expect(searchInput).toBeInTheDocument();
333
+ fireEvent.input(searchInput, { target: { value: 'abc:;' } });
334
+
335
+ await waitFor(() => {
336
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toBeInTheDocument();
337
+ expect(getByTestId('DesignSystem-Dropdown--errorWrapper')).toHaveTextContent('Invalid Time');
338
+ });
339
+ });
340
+ });
341
+
342
+ const searchQueryWithTimeProp = [
343
+ { searchTime: '20', result: '08:00 PM', resultIndex: 60, desc: 'check for two digit' },
344
+ { searchTime: '715pm', result: '07:15 PM', resultIndex: 57, desc: 'check for time zone' },
345
+ { searchTime: '8am', result: '08:00 AM', resultIndex: 12, desc: 'check for one digit am/pm' },
346
+ ];
347
+
348
+ const searchQueryWithoutTimeProp = [
349
+ { searchTime: '00', result: '12:00 AM', resultIndex: 0, desc: 'check for 00 query' },
350
+ { searchTime: '20', result: '08:00 PM', resultIndex: 80, desc: 'check for 24 hr query' },
351
+ { searchTime: '2321', result: '11:30 PM', resultIndex: 94, desc: 'check for four digit' },
352
+ { searchTime: '24', result: '12:00 AM', resultIndex: 0, desc: 'check for search query 24' },
353
+ { searchTime: '905am', result: '09:15 AM', resultIndex: 37, desc: 'check for digit with AM/PM' },
354
+ { searchTime: '04;00am', result: '04:00 AM', resultIndex: 16, desc: 'check for special character' },
355
+ { searchTime: '1160Pm', result: '12:00 AM', resultIndex: 0, desc: 'check for four digit with time zone' },
356
+ { searchTime: '2360', result: '12:00 AM', resultIndex: 0, desc: 'check for query with minute set as 60' },
357
+ { searchTime: '14 30', result: '02:30 PM', resultIndex: 58, desc: 'check for query number/special char' },
358
+ { searchTime: '12pm', result: '12:00 PM', resultIndex: 48, desc: 'check for search query 12 with time zone' },
359
+ { searchTime: '14 30am', result: '02:30 AM', resultIndex: 10, desc: 'check for query number/timezone/special char' },
360
+ { searchTime: '0030', result: '12:30 AM', resultIndex: 2, desc: 'check for query with trailing zero' },
361
+ // { searchTime: '1230', result: '12:30 PM', resultIndex: 50, desc: 'check for search query with 12' },
362
+ ];
363
+
364
+ describe('TimePicker Search when start/end time is given', () => {
365
+ searchQueryWithTimeProp.forEach((testCase) => {
366
+ it(`${testCase.desc} in 12 hour format`, async () => {
367
+ const { getByTestId, getAllByTestId } = render(
368
+ <TimePicker startTime={startTime} endTime={endTime} withSearch={true} />
369
+ );
370
+ const dropdownTrigger = getByTestId(trigger);
371
+
372
+ fireEvent.click(dropdownTrigger);
373
+ const searchInput = getByTestId('DesignSystem-Input');
374
+ expect(searchInput).toBeInTheDocument();
375
+ fireEvent.input(searchInput, { target: { value: testCase.searchTime } });
376
+
377
+ await waitFor(() => {
378
+ const optionList = getAllByTestId(optionID);
379
+ expect(optionList[testCase.resultIndex]).toHaveTextContent(testCase.result);
380
+ expect(optionList[testCase.resultIndex]).toHaveClass(activeOptionClass);
381
+ });
382
+ });
383
+
384
+ it(`${testCase.desc} in 24 hour format`, async () => {
385
+ const { getByTestId, getAllByTestId } = render(
386
+ <TimePicker timeFormat="24-Hour" startTime={startTime} endTime={endTime} withSearch={true} />
387
+ );
388
+ const dropdownTrigger = getByTestId(trigger);
389
+
390
+ fireEvent.click(dropdownTrigger);
391
+ const searchInput = getByTestId('DesignSystem-Input');
392
+ expect(searchInput).toBeInTheDocument();
393
+ fireEvent.input(searchInput, { target: { value: testCase.searchTime } });
394
+
395
+ const result = convert12To24HourFormat(testCase.result);
396
+
397
+ await waitFor(() => {
398
+ const optionList = getAllByTestId(optionID);
399
+ expect(optionList[testCase.resultIndex]).toHaveTextContent(result);
400
+ expect(optionList[testCase.resultIndex]).toHaveClass(activeOptionClass);
401
+ });
402
+ });
403
+ });
404
+ });
405
+
406
+ describe('TimePicker Search when start/end time is not given', () => {
407
+ searchQueryWithoutTimeProp.forEach((testCase) => {
408
+ it(`${testCase.desc} in 12 hour format`, async () => {
409
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} />);
410
+ const dropdownTrigger = getByTestId(trigger);
411
+
412
+ fireEvent.click(dropdownTrigger);
413
+ const searchInput = getByTestId('DesignSystem-Input');
414
+ expect(searchInput).toBeInTheDocument();
415
+ fireEvent.input(searchInput, { target: { value: testCase.searchTime } });
416
+
417
+ await waitFor(() => {
418
+ const optionList = getAllByTestId(optionID);
419
+ expect(optionList[testCase.resultIndex]).toHaveTextContent(testCase.result);
420
+ expect(optionList[testCase.resultIndex]).toHaveClass(activeOptionClass);
421
+ });
422
+ });
423
+
424
+ it(`${testCase.desc} in 24 hour format`, async () => {
425
+ const { getByTestId, getAllByTestId } = render(<TimePicker timeFormat="24-Hour" withSearch={true} />);
426
+ const dropdownTrigger = getByTestId(trigger);
427
+
428
+ fireEvent.click(dropdownTrigger);
429
+ const searchInput = getByTestId('DesignSystem-Input');
430
+ expect(searchInput).toBeInTheDocument();
431
+ fireEvent.input(searchInput, { target: { value: testCase.searchTime } });
432
+
433
+ const result = convert12To24HourFormat(testCase.result);
434
+
435
+ await waitFor(() => {
436
+ const optionList = getAllByTestId(optionID);
437
+ expect(optionList[testCase.resultIndex]).toHaveTextContent(result);
438
+ expect(optionList[testCase.resultIndex]).toHaveClass(activeOptionClass);
439
+ });
440
+ });
441
+ });
442
+ });
443
+
444
+ describe('TimePicker Search when current time is in AM', () => {
445
+ const dateNowSpy = jest.spyOn(Date, 'now').mockImplementation(() => 1632314963710); // 7:15
446
+
447
+ it('check for one digit search query', async () => {
448
+ const { getByTestId, getAllByTestId } = render(<TimePicker withSearch={true} />);
449
+ const dropdownTrigger = getByTestId(trigger);
450
+
451
+ fireEvent.click(dropdownTrigger);
452
+ const searchInput = getByTestId('DesignSystem-Input');
453
+ expect(searchInput).toBeInTheDocument();
454
+ fireEvent.input(searchInput, { target: { value: '5' } });
455
+
456
+ await waitFor(() => {
457
+ const optionList = getAllByTestId(optionID);
458
+ expect(optionList[68]).toHaveTextContent('05:00 PM');
459
+ expect(optionList[68]).toHaveClass(activeOptionClass);
460
+ });
461
+ });
462
+
463
+ dateNowSpy.mockRestore();
464
+ });