@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,169 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`TimePicker component snapshots renders snapshot for all props
4
+ startTime: "05:00 AM", endTime: "11:00 PM", showDuration: false, timeFormat: "12-Hour"
5
+ 1`] = `
6
+ <body>
7
+ <div>
8
+ <div
9
+ class="Dropdown"
10
+ >
11
+ <style />
12
+ <div
13
+ class="OutsideClick PopperWrapper-trigger w-100"
14
+ >
15
+ <button
16
+ class="Button DropdownButton DropdownButton--regular DropdownButton--placeholder"
17
+ data-test="DesignSystem-DropdownTrigger"
18
+ tabindex="0"
19
+ type="button"
20
+ value=""
21
+ >
22
+ <div
23
+ class="DropdownButton-wrapper"
24
+ >
25
+ <span
26
+ class="Text Text--regular DropdownButton-text"
27
+ >
28
+ Select
29
+ </span>
30
+ </div>
31
+ <i
32
+ class="material-icons material-icons-round Icon Icon--default"
33
+ role="button"
34
+ style="font-size: 16px; width: 16px;"
35
+ >
36
+ keyboard_arrow_down_round
37
+ </i>
38
+ </button>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </body>
43
+ `;
44
+
45
+ exports[`TimePicker component snapshots renders snapshot for all props
46
+ startTime: "05:00 AM", endTime: "11:00 PM", showDuration: false, timeFormat: "24-Hour"
47
+ 1`] = `
48
+ <body>
49
+ <div>
50
+ <div
51
+ class="Dropdown"
52
+ >
53
+ <style />
54
+ <div
55
+ class="OutsideClick PopperWrapper-trigger w-100"
56
+ >
57
+ <button
58
+ class="Button DropdownButton DropdownButton--regular DropdownButton--placeholder"
59
+ data-test="DesignSystem-DropdownTrigger"
60
+ tabindex="0"
61
+ type="button"
62
+ value=""
63
+ >
64
+ <div
65
+ class="DropdownButton-wrapper"
66
+ >
67
+ <span
68
+ class="Text Text--regular DropdownButton-text"
69
+ >
70
+ Select
71
+ </span>
72
+ </div>
73
+ <i
74
+ class="material-icons material-icons-round Icon Icon--default"
75
+ role="button"
76
+ style="font-size: 16px; width: 16px;"
77
+ >
78
+ keyboard_arrow_down_round
79
+ </i>
80
+ </button>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </body>
85
+ `;
86
+
87
+ exports[`TimePicker component snapshots renders snapshot for all props
88
+ startTime: "05:00 AM", endTime: "11:00 PM", showDuration: true, timeFormat: "12-Hour"
89
+ 1`] = `
90
+ <body>
91
+ <div>
92
+ <div
93
+ class="Dropdown"
94
+ >
95
+ <style />
96
+ <div
97
+ class="OutsideClick PopperWrapper-trigger w-100"
98
+ >
99
+ <button
100
+ class="Button DropdownButton DropdownButton--regular DropdownButton--placeholder"
101
+ data-test="DesignSystem-DropdownTrigger"
102
+ tabindex="0"
103
+ type="button"
104
+ value=""
105
+ >
106
+ <div
107
+ class="DropdownButton-wrapper"
108
+ >
109
+ <span
110
+ class="Text Text--regular DropdownButton-text"
111
+ >
112
+ Select
113
+ </span>
114
+ </div>
115
+ <i
116
+ class="material-icons material-icons-round Icon Icon--default"
117
+ role="button"
118
+ style="font-size: 16px; width: 16px;"
119
+ >
120
+ keyboard_arrow_down_round
121
+ </i>
122
+ </button>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </body>
127
+ `;
128
+
129
+ exports[`TimePicker component snapshots renders snapshot for all props
130
+ startTime: "05:00 AM", endTime: "11:00 PM", showDuration: true, timeFormat: "24-Hour"
131
+ 1`] = `
132
+ <body>
133
+ <div>
134
+ <div
135
+ class="Dropdown"
136
+ >
137
+ <style />
138
+ <div
139
+ class="OutsideClick PopperWrapper-trigger w-100"
140
+ >
141
+ <button
142
+ class="Button DropdownButton DropdownButton--regular DropdownButton--placeholder"
143
+ data-test="DesignSystem-DropdownTrigger"
144
+ tabindex="0"
145
+ type="button"
146
+ value=""
147
+ >
148
+ <div
149
+ class="DropdownButton-wrapper"
150
+ >
151
+ <span
152
+ class="Text Text--regular DropdownButton-text"
153
+ >
154
+ Select
155
+ </span>
156
+ </div>
157
+ <i
158
+ class="material-icons material-icons-round Icon Icon--default"
159
+ role="button"
160
+ style="font-size: 16px; width: 16px;"
161
+ >
162
+ keyboard_arrow_down_round
163
+ </i>
164
+ </button>
165
+ </div>
166
+ </div>
167
+ </div>
168
+ </body>
169
+ `;
@@ -1,2 +1,4 @@
1
1
  export { default } from './TimePicker';
2
2
  export * from './TimePicker';
3
+ export * from './TimePickerWithInput';
4
+ export * from './TimePickerWithSearch';
@@ -0,0 +1,295 @@
1
+ import {
2
+ convertToTwoDigit,
3
+ _isTimeInAM,
4
+ _isTimeInPM,
5
+ checkTimeDifference,
6
+ getTimeDifference,
7
+ } from './timePickerUtility';
8
+ import { OptionSchema } from '@/components/atoms/dropdown/option';
9
+
10
+ interface timeObj {
11
+ hour: string;
12
+ min: string;
13
+ }
14
+
15
+ const convertMinTo60 = (time: string) => {
16
+ const parseNum = parseInt(time, 10);
17
+ if (parseNum < 10) return time;
18
+
19
+ const timeInNum = parseNum > 60 ? parseNum % 60 : parseNum;
20
+ const min = (timeInNum.toString() + '0').slice(0, 2);
21
+ return min;
22
+ };
23
+
24
+ const get24HourCurrentTime = () => {
25
+ const today = new Date();
26
+ return convertToTwoDigit(today.getHours()) + ':' + convertToTwoDigit(today.getMinutes());
27
+ };
28
+
29
+ const convertHourTo24 = (time: string) => {
30
+ const timeInNum = parseInt(time, 10) % 24;
31
+ return timeInNum.toString();
32
+ };
33
+
34
+ const convertHourTo12 = (time: string) => {
35
+ const timeInNum = parseInt(time, 10) % 12;
36
+ return timeInNum.toString();
37
+ };
38
+
39
+ const _checkNumber = (str: string) => {
40
+ const numberRegex = /^[0-9]+$/;
41
+ return numberRegex.test(str);
42
+ };
43
+
44
+ const _checkNumberWithAMPM = (str: string) => {
45
+ const numberWithAMPMRegex = /^[0-9]+[ AaMmPp]+$/;
46
+ return numberWithAMPMRegex.test(str);
47
+ };
48
+
49
+ const _checkNumberWithSpecialChar = (str: string) => {
50
+ const numberWithSpecialCharRegex = /^[0-9]+[`\s!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?~][0-9]*$/;
51
+ return numberWithSpecialCharRegex.test(str);
52
+ };
53
+
54
+ const _checkNumberWithSpecialCharAMPM = (str: string) => {
55
+ const numberWithSpecialCharAMPM = /^[0-9]+[`\s!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?~][0-9]+[ AaMmPp]+$/;
56
+ return numberWithSpecialCharAMPM.test(str);
57
+ };
58
+
59
+ const specialCharRegex = /[`\s!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?~]/;
60
+
61
+ /**
62
+ * @param searchTime in [number special-char number] format
63
+ * @returns timeObj with hour & minute in 24 hour format
64
+ */
65
+ const getTimeFromNumberWithSpecialChar = (searchTime: string) => {
66
+ const time = searchTime.split(specialCharRegex);
67
+ const hour = convertHourTo24(time[0]);
68
+ const hh = convertToTwoDigit(hour);
69
+
70
+ const min = time[1] !== '' ? convertMinTo60(time[1]) : '00';
71
+ const mm = (min + '0').slice(0, 2);
72
+
73
+ return { hour: hh, min: mm };
74
+ };
75
+
76
+ /**
77
+ * If search term only contains number
78
+ * @param searchTerm
79
+ * @returns timeObj with hour & minute in 24 hour format
80
+ */
81
+ const getSearchTimeFromNumber = (searchTerm: string, show12HourFormat?: boolean) => {
82
+ const searchLen = searchTerm.length;
83
+ const searchTimeInNum = parseInt(searchTerm, 10);
84
+ const firstTwoTerm = searchTerm.slice(0, 2);
85
+ let hh = '00';
86
+ let mm = '00';
87
+
88
+ switch (searchLen) {
89
+ case 1: // if search term length is 1 consider it as hour
90
+ hh = '0' + searchTerm;
91
+ break;
92
+
93
+ case 2: // if search term length is 2
94
+ if (searchTimeInNum <= 24 || (show12HourFormat && searchTimeInNum <= 12)) {
95
+ // consider it as hour
96
+ hh = convertToTwoDigit(searchTerm);
97
+ } else {
98
+ // consider first term as hour and last term as min
99
+ hh = '0' + searchTerm[0];
100
+ mm = convertMinTo60(searchTerm[1] + '0');
101
+ // mm = searchTerm[1] + '0';
102
+ }
103
+ break;
104
+
105
+ case 3:
106
+ hh = '0' + searchTerm[0];
107
+ mm = convertMinTo60(searchTerm.slice(1));
108
+ break;
109
+
110
+ case 4:
111
+ hh = show12HourFormat ? convertHourTo12(firstTwoTerm) : convertHourTo24(firstTwoTerm);
112
+ mm = convertMinTo60(searchTerm.slice(2));
113
+ break;
114
+
115
+ default:
116
+ // set time as -1 in case of invalid time
117
+ hh = '-1';
118
+ mm = '-1';
119
+ }
120
+ return { hour: hh, min: mm };
121
+ };
122
+
123
+ /**
124
+ * @param searchTime in [number AMPM] format
125
+ * @returns timeObj with hour & minute in 24 hour format
126
+ */
127
+ const getTimeFromNumberWithAMPM = (searchTime: string) => {
128
+ const timeArr = searchTime.split(/[\saAmMpP]/);
129
+ const { hour, min } = getSearchTimeFromNumber(timeArr[0], true);
130
+
131
+ return { hour, min };
132
+ };
133
+
134
+ /**
135
+ * @param searchTerm entered by user in any format
136
+ * @returns modified search term in 24 hour format
137
+ */
138
+ export const formatSearchTerm = (optionList: string[], searchTerm: string) => {
139
+ let searchTime = { hour: '00', min: '00' };
140
+
141
+ // If search term only contains numbers
142
+ if (_checkNumber(searchTerm)) {
143
+ const searchTimeInHHMM = getSearchTimeFromNumber(searchTerm);
144
+
145
+ if (parseInt(searchTimeInHHMM.hour) <= 12 && parseInt(searchTimeInHHMM.hour) > 0) {
146
+ // switch to AM/PM based on current time
147
+ searchTime = getCurrentRelativeTime(optionList, searchTimeInHHMM);
148
+ } else {
149
+ searchTime = searchTimeInHHMM;
150
+ }
151
+ }
152
+
153
+ // if search term contains numbers along with [ampm]
154
+ else if (_checkNumberWithAMPM(searchTerm)) {
155
+ searchTime = getTimeFromNumberWithAMPM(searchTerm);
156
+ searchTime.hour = convert12To24HourFormat(searchTime.hour, searchTerm);
157
+ }
158
+
159
+ // if search term contains numbers along with special character
160
+ else if (_checkNumberWithSpecialChar(searchTerm)) {
161
+ const searchTimeInHHMM = getTimeFromNumberWithSpecialChar(searchTerm);
162
+
163
+ if (parseInt(searchTimeInHHMM.hour) <= 12) {
164
+ // switch to AM/PM based on current time
165
+ searchTime = getCurrentRelativeTime(optionList, searchTimeInHHMM);
166
+ } else {
167
+ searchTime = searchTimeInHHMM;
168
+ }
169
+ }
170
+
171
+ // if search term contains numbers, special character & [AmPm]
172
+ else if (_checkNumberWithSpecialCharAMPM(searchTerm)) {
173
+ const timeWithoutAMPM = searchTerm.replace(/[\saApPmM]/g, '');
174
+
175
+ if (_checkNumber(timeWithoutAMPM)) {
176
+ searchTime = getSearchTimeFromNumber(timeWithoutAMPM, true);
177
+ } else if (_checkNumberWithSpecialChar(timeWithoutAMPM)) {
178
+ searchTime = getTimeFromNumberWithSpecialChar(timeWithoutAMPM);
179
+ }
180
+
181
+ searchTime.hour = convert12To24HourFormat(searchTime.hour, searchTerm);
182
+ }
183
+
184
+ return searchTime;
185
+ };
186
+
187
+ /**
188
+ * @param hours
189
+ * @param searchTerm
190
+ * @returns hours based on AM/PM in 24 hour format
191
+ */
192
+ const convert12To24HourFormat = (hours: string, searchTerm: string) => {
193
+ if (hours === '12' && _isTimeInAM(searchTerm)) {
194
+ hours = '00';
195
+ } else if (_isTimeInPM(searchTerm) && hours !== '12') {
196
+ hours = (parseInt(hours, 10) + 12).toString();
197
+ }
198
+ return hours;
199
+ };
200
+
201
+ /**
202
+ * Switch to AM/PM time based on current time
203
+ * @param optionList
204
+ * @param searchTime
205
+ */
206
+ const getCurrentRelativeTime = (optionList: string[], searchTime: timeObj) => {
207
+ const searchTimeStr = `${searchTime.hour}:${searchTime.min}`;
208
+ const currentTime = get24HourCurrentTime();
209
+ const greaterTime = checkTimeDifference(currentTime, searchTimeStr);
210
+ const currentTimeIndex = findClosestTimeIndex(optionList, currentTime);
211
+ const searchTimeIndex = findClosestTimeIndex(optionList, searchTimeStr);
212
+
213
+ if (greaterTime && currentTimeIndex > searchTimeIndex) {
214
+ const hourIn24Format = parseInt(searchTime.hour, 10) + 12;
215
+ searchTime.hour = hourIn24Format.toString();
216
+ }
217
+
218
+ return searchTime;
219
+ };
220
+
221
+ const findClosestTimeIndex = (optionList: string[], searchItem: string) => {
222
+ let closestItemIndex = 0;
223
+ const minTime = { hour: 100, mins: 100 };
224
+
225
+ for (let index = 0; index < optionList.length; index++) {
226
+ const { hour, minute } = getTimeDifference(searchItem, optionList[index]);
227
+ if (hour < minTime.hour || (hour === minTime.hour && minute < minTime.mins)) {
228
+ minTime.hour = hour;
229
+ minTime.mins = minute;
230
+ closestItemIndex = index;
231
+ }
232
+ }
233
+
234
+ return closestItemIndex;
235
+ };
236
+
237
+ /**
238
+ * Get index of search term from option list
239
+ * @param optionList
240
+ * @param searchTerm
241
+ * @returns Index of the search term in option list
242
+ */
243
+ export const getSearchIndex = (optionList: string[], searchTerm: string) => {
244
+ let { hour, min } = formatSearchTerm(optionList, searchTerm);
245
+ if (min === '60') {
246
+ min = '00';
247
+ hour = (parseInt(hour, 10) + 1).toString();
248
+ }
249
+ const searchItem = `${hour}:${min}`;
250
+
251
+ const searchIndex = findClosestTimeIndex(optionList, searchItem);
252
+ return searchIndex;
253
+ };
254
+
255
+ /**
256
+ * @param searchTerm
257
+ * @returns count number of digits present inside search term
258
+ */
259
+ const countNumberInStr = (searchTerm: string) => {
260
+ return searchTerm.match(/\d/g)?.length || 0;
261
+ };
262
+
263
+ const isValidSearchTerm = (searchTerm: string) => {
264
+ const totalDigit = countNumberInStr(searchTerm);
265
+ return totalDigit > 0 && totalDigit < 5;
266
+ };
267
+
268
+ const getValueFromOptionList = (optionList: OptionSchema[]) => {
269
+ const list = optionList.map((option: any) => option.value);
270
+ return list;
271
+ };
272
+
273
+ const getSearchValueIndex = (options: string[], searchTerm: string): number => {
274
+ // Search Term is valid if it contains number
275
+ if (!isValidSearchTerm(searchTerm)) {
276
+ return -1;
277
+ }
278
+
279
+ const searchIndex = getSearchIndex(options, searchTerm);
280
+ return searchIndex;
281
+ };
282
+
283
+ export const getScrollIndex = (dropdownOptionList: OptionSchema[], searchTerm: string): number => {
284
+ const optionList = getValueFromOptionList(dropdownOptionList);
285
+
286
+ if (searchTerm === '') {
287
+ // return current time index
288
+ const currTime = get24HourCurrentTime();
289
+
290
+ const currTimeIndex = findClosestTimeIndex(optionList, currTime);
291
+ return currTimeIndex;
292
+ }
293
+
294
+ return getSearchValueIndex(optionList, searchTerm);
295
+ };
@@ -0,0 +1,219 @@
1
+ import { TimePickerDropdownProps, TimeFormat } from '../TimePickerWithSearch';
2
+
3
+ const parseDate = (date_time: any) => {
4
+ const d = new Date();
5
+ d.setHours(date_time.substring(0, 2));
6
+ d.setMinutes(date_time.substring(3, 5));
7
+ return d;
8
+ };
9
+
10
+ export const isFormat12Hour = (format: string) => {
11
+ return format === '12-Hour';
12
+ };
13
+
14
+ const isTimeIn12HourFormat = (time: string) => {
15
+ return _isTimeInAM(time) || _isTimeInPM(time);
16
+ };
17
+
18
+ export const _isTimeInAM = (time: string) => {
19
+ return time.includes('a') || time.includes('A');
20
+ };
21
+
22
+ export const _isTimeInPM = (time: string) => {
23
+ return time.includes('p') || time.includes('P');
24
+ };
25
+
26
+ /**
27
+ * Convert time from 12 hour format to 24 hour format
28
+ * @param timeStr in hh:mm [AM/PM] format
29
+ * @returns time in HH:MM format
30
+ */
31
+ export const convert12To24HourFormat = (timeStr: string) => {
32
+ const [time, modifier] = timeStr.split(' ');
33
+ const timeArr = time.split(':');
34
+ let hours = timeArr[0];
35
+ const minutes = timeArr[1];
36
+
37
+ if (hours === '12' && _isTimeInAM(modifier)) {
38
+ hours = '00';
39
+ }
40
+ if (_isTimeInPM(modifier) && hours !== '12') {
41
+ hours = (parseInt(hours, 10) + 12).toString();
42
+ }
43
+ return `${hours}:${minutes}`;
44
+ };
45
+
46
+ /**
47
+ * @param val
48
+ * @returns insert 0 at start in case of single digit
49
+ */
50
+ export const convertToTwoDigit = (val: string | number) => {
51
+ return ('0' + val).slice(-2);
52
+ };
53
+
54
+ /**
55
+ * Convert time from 24 hour format to 12 hour format
56
+ * @param timeStr in HH:MM format
57
+ * @returns time in hh:mm [AM/PM] format
58
+ */
59
+ export const convert24To12HourFormat = (timeStr: string) => {
60
+ const timeArr = timeStr.split(':');
61
+ const hours = parseInt(timeArr[0], 10);
62
+ const modifier = hours >= 12 ? 'PM' : 'AM';
63
+
64
+ const convertedHours = hours % 12 || 12;
65
+ let hoursInString = convertedHours.toString();
66
+ hoursInString = convertToTwoDigit(hoursInString);
67
+
68
+ const minutes = timeArr[1];
69
+
70
+ const result = `${hoursInString.toString()}:${minutes} ${modifier}`;
71
+ return result;
72
+ };
73
+
74
+ const getTimeIn24HrFormat = (timeStr: string) => {
75
+ if (isTimeIn12HourFormat(timeStr)) {
76
+ return convert12To24HourFormat(timeStr);
77
+ }
78
+
79
+ return timeStr;
80
+ };
81
+
82
+ /**
83
+ * @param startTime in HH:MM format
84
+ * @param endTime in HH:MM format
85
+ * @returns returns true if start time is greater than end time
86
+ */
87
+ export const checkTimeDifference = (startTime: string, endTime: string) => {
88
+ const parseStartTime = parseDate(startTime);
89
+ const parseEndTime = parseDate(endTime);
90
+ return parseStartTime > parseEndTime;
91
+ };
92
+
93
+ /**
94
+ * @param startTime in HH:MM format
95
+ * @param endTime in HH:MM format
96
+ * @param interval
97
+ * @returns array of 24 hour time list based on interval
98
+ */
99
+ const get24HourTimeList = (startTime: string, endTime: string, interval: number) => {
100
+ const timeList = [];
101
+ const parseStartTime = parseDate(startTime);
102
+ const parseEndTime = parseDate(endTime);
103
+
104
+ while (parseStartTime <= parseEndTime) {
105
+ timeList.push(parseStartTime.toTimeString().substring(0, 5));
106
+ parseStartTime.setMinutes(parseStartTime.getMinutes() + interval);
107
+ }
108
+
109
+ return timeList;
110
+ };
111
+
112
+ /**
113
+ * @param startTime in HH:MM format
114
+ * @param interval
115
+ * @returns time list in 24 hour format including times option for next day
116
+ */
117
+ const getReverseTimeList = (startTime: string, endTime: string, interval: number) => {
118
+ const timeList = get24HourTimeList('00:00', '23:59', interval);
119
+ const startTimeIndex = timeList.indexOf(startTime);
120
+ const endTimeIndex = timeList.indexOf(endTime);
121
+ const nextDayTimeIndex = endTime === '' ? startTimeIndex : endTimeIndex + 1;
122
+
123
+ const presentDayList = timeList.slice(startTimeIndex);
124
+ const nextDayList = timeList.slice(0, nextDayTimeIndex);
125
+ const result = presentDayList.concat(nextDayList);
126
+
127
+ return result;
128
+ };
129
+
130
+ const getTimeListIn24HourFormat = (startTime: string, endTime: string, interval: number) => {
131
+ if (endTime === '' || checkTimeDifference(startTime, endTime)) {
132
+ return getReverseTimeList(startTime, endTime, interval);
133
+ }
134
+
135
+ return get24HourTimeList(startTime, endTime, interval);
136
+ };
137
+
138
+ export const getTimeDifference = (startTime: string, endTime: string) => {
139
+ const timeStart = new Date('07/07/2022 ' + startTime);
140
+ const timeEnd = new Date('07/07/2022 ' + endTime);
141
+
142
+ const diff = timeEnd.getTime() - timeStart.getTime();
143
+ const diff_as_date = new Date(diff);
144
+
145
+ const hour = diff_as_date.getUTCHours();
146
+ const minute = diff_as_date.getUTCMinutes();
147
+
148
+ return { hour, minute };
149
+ };
150
+
151
+ const getCustomLabel = (time: string, timeFormat: TimeFormat, showDuration?: boolean, referenceTime?: string) => {
152
+ let label = time;
153
+ if (isFormat12Hour(timeFormat)) {
154
+ label = convert24To12HourFormat(time);
155
+ }
156
+ if (showDuration && referenceTime) {
157
+ const { hour, minute } = getTimeDifference(referenceTime, time);
158
+ const timeDiffLabel = ` (${hour} hr ${minute} min)`;
159
+ label += timeDiffLabel;
160
+ }
161
+
162
+ return label;
163
+ };
164
+
165
+ const isOptionDisabled = (time: string, timeFormat: TimeFormat, disabledSlotList: string[]) => {
166
+ let timeValue = time;
167
+ if (isFormat12Hour(timeFormat)) {
168
+ timeValue = convert24To12HourFormat(time);
169
+ }
170
+ if (disabledSlotList.includes(timeValue)) {
171
+ return true;
172
+ }
173
+
174
+ return false;
175
+ };
176
+
177
+ const convertTimeToOptionList = (
178
+ timeList: string[],
179
+ timeFormat: TimeFormat,
180
+ id = 'TimePicker-Option-key',
181
+ showDuration?: boolean,
182
+ referenceTime?: string,
183
+ disabledSlotList?: string[]
184
+ ) => {
185
+ const optionList = timeList.map((time, index) => {
186
+ return {
187
+ label: getCustomLabel(time, timeFormat, showDuration, referenceTime),
188
+ value: time,
189
+ disabled: disabledSlotList && isOptionDisabled(time, timeFormat, disabledSlotList),
190
+ selected: false,
191
+ optionID: id + index,
192
+ };
193
+ });
194
+ return optionList;
195
+ };
196
+
197
+ const computeEndTime = (startTime: string | undefined) => {
198
+ return startTime ? '' : '23:59';
199
+ };
200
+
201
+ export const getDropdownOptionList = (props: TimePickerDropdownProps) => {
202
+ const { startTime, endTime, interval, timeFormat, showDuration, disabledSlotList, id } = props;
203
+
204
+ const startTimeIn24Hr = startTime ? getTimeIn24HrFormat(startTime) : '00:00';
205
+ const endTimeIn24Hr = endTime ? getTimeIn24HrFormat(endTime) : computeEndTime(startTime);
206
+
207
+ const timeList = getTimeListIn24HourFormat(startTimeIn24Hr, endTimeIn24Hr, interval);
208
+
209
+ const dropdownOptionList = convertTimeToOptionList(
210
+ timeList,
211
+ timeFormat,
212
+ id,
213
+ showDuration,
214
+ startTime,
215
+ disabledSlotList
216
+ );
217
+
218
+ return dropdownOptionList;
219
+ };
@@ -1,4 +1,4 @@
1
- import { TimeType, AMPMType } from './TimePicker';
1
+ import { TimeType, AMPMType } from './TimePickerWithInput';
2
2
  import { InputProps } from '@/index.type';
3
3
 
4
4
  interface TimeObject {