@innovaccer/design-system 2.5.0 → 2.7.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/.eslintrc.json +54 -0
  2. package/.github/workflows/chromatic.yml +5 -0
  3. package/.github/workflows/main.yml +2 -2
  4. package/.github/workflows/pull_request.yml +2 -2
  5. package/.github/workflows/test.yml +1 -1
  6. package/.husky/commit-msg +4 -0
  7. package/.prettierrc +2 -2
  8. package/.storybook/main.js +4 -0
  9. package/.vscode/settings.json +11 -0
  10. package/CHANGELOG.md +78 -0
  11. package/CONTRIBUTING.md +180 -98
  12. package/commitlint.config.js +1 -0
  13. package/core/accessibility/utils/index.ts +5 -0
  14. package/core/accessibility/utils/isEnterKey.ts +5 -0
  15. package/core/accessibility/utils/isSpaceKey.ts +5 -0
  16. package/core/accessibility/utils/useAccessibilityProps.ts +33 -0
  17. package/core/common.type.tsx +22 -0
  18. package/core/components/atoms/_chip/__tests__/__snapshots__/_chip.test.tsx.snap +17 -9
  19. package/core/components/atoms/_chip/index.tsx +19 -3
  20. package/core/components/atoms/avatar/Avatar.tsx +4 -14
  21. package/core/components/atoms/avatar/__stories__/variants/Appearance.story.tsx +3 -2
  22. package/core/components/atoms/avatar/__tests__/Avatar.test.tsx +14 -9
  23. package/core/components/atoms/avatarGroup/AvatarGroup.tsx +3 -5
  24. package/core/components/atoms/badge/Badge.tsx +2 -12
  25. package/core/components/atoms/badge/__tests__/Badge.test.tsx +22 -7
  26. package/core/components/atoms/badge/_stories_/variants/Appearance.story.tsx +3 -2
  27. package/core/components/atoms/badge/_stories_/variants/Subtle.story.tsx +3 -2
  28. package/core/components/atoms/button/Button.tsx +10 -7
  29. package/core/components/atoms/button/__stories__/Alert.story.tsx +8 -1
  30. package/core/components/atoms/button/__stories__/Cancel.story.tsx +4 -1
  31. package/core/components/atoms/button/__stories__/IconButtonGroup.story.tsx +12 -3
  32. package/core/components/atoms/button/__stories__/IconButtonSecondary.story.tsx +6 -1
  33. package/core/components/atoms/button/__stories__/IconLeftSecondary.story.tsx +4 -1
  34. package/core/components/atoms/button/__stories__/IconRightSecondary.story.tsx +4 -1
  35. package/core/components/atoms/button/__stories__/IconTransparent.story.tsx +4 -1
  36. package/core/components/atoms/button/__stories__/LabelButtonGroup.story.tsx +14 -3
  37. package/core/components/atoms/button/__stories__/LargeIconExpanded.story.tsx +4 -1
  38. package/core/components/atoms/button/__stories__/LoadingPrimary.story.tsx +4 -1
  39. package/core/components/atoms/button/__stories__/Primary.story.tsx +5 -2
  40. package/core/components/atoms/button/__stories__/SplitButton.story.tsx +6 -1
  41. package/core/components/atoms/button/__stories__/Transparent.story.tsx +8 -1
  42. package/core/components/atoms/button/__stories__/index.story.tsx +12 -2
  43. package/core/components/atoms/button/__stories__/variants/Appearance.story.tsx +6 -2
  44. package/core/components/atoms/button/__stories__/variants/Expanded.story.tsx +6 -2
  45. package/core/components/atoms/button/__stories__/variants/Size.story.tsx +4 -0
  46. package/core/components/atoms/button/__stories__/variants/icon/Icon.story.tsx +15 -0
  47. package/core/components/atoms/button/__stories__/variants/icon/IconLeft.story.tsx +6 -2
  48. package/core/components/atoms/button/__stories__/variants/icon/IconRight.story.tsx +6 -2
  49. package/core/components/atoms/button/__stories__/variants/state/Alert.story.tsx +7 -17
  50. package/core/components/atoms/button/__stories__/variants/state/Basic.story.tsx +9 -17
  51. package/core/components/atoms/button/__stories__/variants/state/Primary.story.tsx +7 -17
  52. package/core/components/atoms/button/__stories__/variants/state/Transparent.story.tsx +13 -17
  53. package/core/components/atoms/button/__tests__/Button.test.tsx +1 -1
  54. package/core/components/atoms/button/__tests__/__snapshots__/Button.test.tsx.snap +0 -137
  55. package/core/components/atoms/card/__stories__/empty.story.tsx +1 -1
  56. package/core/components/atoms/card/__stories__/nested.story.tsx +1 -1
  57. package/core/components/atoms/card/__stories__/scroll.story.tsx +1 -1
  58. package/core/components/atoms/checkbox/Checkbox.tsx +8 -9
  59. package/core/components/atoms/checkbox/__stories__/variants/Size.story.tsx +2 -2
  60. package/core/components/atoms/chip/Chip.tsx +3 -2
  61. package/core/components/atoms/chip/__stories__/variants/Selection.story.tsx +17 -0
  62. package/core/components/atoms/chip/__stories__/variants/Type.story.tsx +2 -2
  63. package/core/components/atoms/chip/__tests__/Chip.test.tsx +7 -0
  64. package/core/components/atoms/chipGroup/__tests__/__snapshots__/chipGroup.test.tsx.snap +11 -5
  65. package/core/components/atoms/chipGroup/__tests__/chipGroup.test.tsx +2 -2
  66. package/core/components/atoms/chipGroup/_stories_/index.story.tsx +2 -2
  67. package/core/components/atoms/collapsible/__tests__/__snapshots__/Collapsible.test.tsx.snap +8 -0
  68. package/core/components/atoms/divider/Divider.tsx +44 -0
  69. package/core/components/atoms/divider/__stories__/BasicDividerInCard.story.tsx +74 -0
  70. package/core/components/atoms/divider/__stories__/HeaderDividerInCard.story.tsx +35 -0
  71. package/core/components/atoms/divider/__stories__/IndentedDivider.story.tsx +49 -0
  72. package/core/components/atoms/divider/__stories__/Vertical.story.tsx +51 -0
  73. package/core/components/atoms/divider/__stories__/index.story.tsx +91 -0
  74. package/core/components/atoms/divider/__stories__/variants/HorizontalDivider.story.tsx +27 -0
  75. package/core/components/atoms/divider/__tests__/Divider.test.tsx +50 -0
  76. package/core/components/atoms/divider/__tests__/__snapshots__/Divider.test.tsx.snap +53 -0
  77. package/core/components/atoms/divider/index.tsx +2 -0
  78. package/core/components/atoms/dropdown/Dropdown.tsx +18 -17
  79. package/core/components/atoms/dropdown/DropdownButton.tsx +2 -2
  80. package/core/components/atoms/dropdown/DropdownList.tsx +18 -7
  81. package/core/components/atoms/dropdown/Loading.tsx +1 -1
  82. package/core/components/atoms/dropdown/__stories__/CustomSearchPlaceholder.story.tsx +45 -0
  83. package/core/components/atoms/dropdown/__stories__/_common_/types.tsx +3 -0
  84. package/core/components/atoms/dropdown/__stories__/variants/Size.story.tsx +2 -2
  85. package/core/components/atoms/dropdown/__stories__/variants/controlledDropdown/MultiSelect.story.tsx +28 -18
  86. package/core/components/atoms/dropdown/__tests__/Dropdown.test.tsx +12 -1
  87. package/core/components/atoms/dropdown/__tests__/Loading.test.tsx +0 -1
  88. package/core/components/atoms/dropdown/option/DefaultOption.tsx +3 -0
  89. package/core/components/atoms/dropdown/option/IconOption.tsx +3 -0
  90. package/core/components/atoms/dropdown/option/IconWithMetaOption.tsx +3 -0
  91. package/core/components/atoms/dropdown/option/MetaOption.tsx +3 -0
  92. package/core/components/atoms/dropdown/option/index.tsx +1 -1
  93. package/core/components/atoms/editable/Editable.tsx +3 -0
  94. package/core/components/atoms/heading/Heading.tsx +4 -4
  95. package/core/components/atoms/heading/__stories__/variants/Appearance.story.tsx +3 -2
  96. package/core/components/atoms/heading/__tests__/Heading.test.tsx +4 -3
  97. package/core/components/atoms/icon/Icon.tsx +16 -5
  98. package/core/components/atoms/icon/__stories__/variants/Image.story.tsx +6 -1
  99. package/core/components/atoms/icon/__tests__/__snapshots__/Icon.test.tsx.snap +74 -0
  100. package/core/components/atoms/input/Input.tsx +17 -7
  101. package/core/components/atoms/input/__stories__/BasicInput.story.tsx +2 -1
  102. package/core/components/atoms/input/__stories__/InputWithCaption.story.tsx +91 -9
  103. package/core/components/atoms/input/__stories__/InputWithLabel.story.tsx +11 -3
  104. package/core/components/atoms/input/__stories__/LabelPosition.story.tsx +46 -4
  105. package/core/components/atoms/input/__stories__/RequiredVsOptional.story.tsx +12 -8
  106. package/core/components/atoms/input/__stories__/variants/controlledInput.story.tsx +46 -0
  107. package/core/components/atoms/input/__stories__/variants/types/BasicInput.story.tsx +2 -2
  108. package/core/components/atoms/input/__stories__/variants/types/IconLeft.story.tsx +2 -10
  109. package/core/components/atoms/input/__stories__/variants/types/WithLabel.story.tsx +1 -9
  110. package/core/components/atoms/input/__tests__/__snapshots__/Input.test.tsx.snap +19 -0
  111. package/core/components/atoms/label/Label.tsx +1 -1
  112. package/core/components/atoms/legend/Legend.tsx +5 -2
  113. package/core/components/atoms/legend/__stories__/variants/labelAppearance.story.tsx +2 -2
  114. package/core/components/atoms/link/Link.tsx +4 -4
  115. package/core/components/atoms/message/Message.tsx +12 -12
  116. package/core/components/atoms/message/__stories__/index.story.tsx +1 -1
  117. package/core/components/atoms/message/__stories__/variants/Appearance.story.tsx +1 -1
  118. package/core/components/atoms/message/__stories__/variants/AppearanceTitle.story.tsx +1 -1
  119. package/core/components/atoms/message/__tests__/Message.test.tsx +1 -6
  120. package/core/components/atoms/message/__tests__/__snapshots__/Message.test.tsx.snap +0 -45
  121. package/core/components/atoms/metaList/__tests__/MetaList.test.tsx +2 -2
  122. package/core/components/atoms/metricInput/MetricInput.tsx +17 -7
  123. package/core/components/atoms/metricInput/__stories__/DefaultMetric.story.tsx +8 -2
  124. package/core/components/atoms/metricInput/__stories__/WithPrefix.story.tsx +6 -2
  125. package/core/components/atoms/metricInput/__stories__/index.story.tsx +1 -0
  126. package/core/components/atoms/metricInput/__stories__/variants/Controlled.story.tsx +2 -0
  127. package/core/components/atoms/metricInput/__stories__/variants/Size.story.tsx +2 -2
  128. package/core/components/atoms/metricInput/__stories__/withSuffix.story.tsx +6 -2
  129. package/core/components/atoms/metricInput/__tests__/__snapshots__/MetricInput.test.tsx.snap +20 -4
  130. package/core/components/atoms/multiSlider/Handle.tsx +3 -0
  131. package/core/components/atoms/multiSlider/SliderUtils.tsx +1 -4
  132. package/core/components/atoms/multiSlider/index.tsx +9 -4
  133. package/core/components/atoms/outsideClick/OutsideClick.tsx +1 -2
  134. package/core/components/atoms/paragraph/Paragraph.tsx +2 -2
  135. package/core/components/atoms/paragraph/__stories__/variants/Appearance.story.tsx +2 -2
  136. package/core/components/atoms/paragraph/__tests__/Paragraph.test.tsx +2 -2
  137. package/core/components/atoms/pills/Pills.tsx +2 -12
  138. package/core/components/atoms/pills/__stories__/variants/Appearance.story.tsx +3 -2
  139. package/core/components/atoms/pills/__stories__/variants/Subtle.story.tsx +3 -2
  140. package/core/components/atoms/pills/__tests__/Pills.test.tsx +3 -2
  141. package/core/components/atoms/placeholderImage/PlaceholderImage.tsx +2 -2
  142. package/core/components/atoms/placeholderImage/__stories__/variants/Size.story.tsx +2 -2
  143. package/core/components/atoms/placeholderParagraph/PlaceholderParagraph.tsx +2 -2
  144. package/core/components/atoms/placeholderParagraph/__stories__/variants/Size.story.tsx +2 -2
  145. package/core/components/atoms/popperWrapper/PopperWrapper.tsx +2 -6
  146. package/core/components/atoms/progressRing/ProgressRing.tsx +2 -2
  147. package/core/components/atoms/progressRing/__stories__/variants/Size.story.tsx +1 -1
  148. package/core/components/atoms/radio/Radio.tsx +4 -5
  149. package/core/components/atoms/rangeSlider/RangeSlider.tsx +1 -2
  150. package/core/components/atoms/rangeSlider/__stories__/index.story.tsx +1 -2
  151. package/core/components/atoms/rangeSlider/__stories__/variants/Controlled.story.tsx +1 -2
  152. package/core/components/atoms/rangeSlider/__stories__/variants/CustomLabels.story.tsx +1 -2
  153. package/core/components/atoms/spinner/Spinner.tsx +4 -4
  154. package/core/components/atoms/spinner/__stories__/variants/Appearance.story.tsx +2 -2
  155. package/core/components/atoms/spinner/__stories__/variants/Size.story.tsx +1 -1
  156. package/core/components/atoms/statusHint/StatusHint.tsx +5 -3
  157. package/core/components/atoms/statusHint/__stories__/variants/Appearance.story.tsx +3 -2
  158. package/core/components/atoms/statusHint/__tests__/StatusHint.test.tsx +3 -2
  159. package/core/components/atoms/subheading/Subheading.tsx +2 -2
  160. package/core/components/atoms/subheading/__stories__/variants/Appearance.story.tsx +3 -2
  161. package/core/components/atoms/subheading/__tests__/Subheading.test.tsx +3 -2
  162. package/core/components/atoms/switchInput/Switch.tsx +14 -9
  163. package/core/components/atoms/switchInput/__stories__/DefaultSwitch.story.tsx +4 -1
  164. package/core/components/atoms/switchInput/__stories__/OffState.story.tsx +4 -1
  165. package/core/components/atoms/switchInput/__stories__/index.story.tsx +26 -3
  166. package/core/components/atoms/switchInput/__stories__/variants/Size.story.tsx +10 -1
  167. package/core/components/atoms/switchInput/__stories__/variants/State.story.tsx +9 -2
  168. package/core/components/atoms/text/Text.tsx +4 -4
  169. package/core/components/atoms/text/__stories__/variants/Appearance.story.tsx +2 -2
  170. package/core/components/atoms/text/__tests__/Text.test.tsx +2 -3
  171. package/core/components/atoms/textarea/__stories__/TextareaWithCaption.story.tsx +9 -3
  172. package/core/components/atoms/textarea/__stories__/defaultTextarea.story.tsx +10 -2
  173. package/core/components/atoms/textarea/__stories__/index.story.tsx +1 -0
  174. package/core/components/atoms/textarea/__stories__/variants/Disable.story.tsx +1 -0
  175. package/core/components/atoms/toast/ActionButton.tsx +2 -2
  176. package/core/components/atoms/toast/Toast.tsx +11 -6
  177. package/core/components/atoms/toast/__stories__/index.story.tsx +2 -6
  178. package/core/components/atoms/toast/__stories__/variants/Appearance.story.tsx +3 -2
  179. package/core/components/atoms/toast/__stories__/variants/ToastMessage.story.tsx +3 -2
  180. package/core/components/atoms/toast/__stories__/variants/ToastWithAction.story.tsx +3 -2
  181. package/core/components/atoms/toast/__tests__/Toast.test.tsx +1 -1
  182. package/core/components/atoms/toast/__tests__/__snapshots__/Toast.test.tsx.snap +24 -125
  183. package/core/components/css-utilities/Schema.tsx +1 -1
  184. package/core/components/css-utilities/Spacing/Schema.tsx +1 -1
  185. package/core/components/molecules/chatMessage/Box.tsx +3 -0
  186. package/core/components/molecules/chipInput/ChipInput.tsx +3 -0
  187. package/core/components/molecules/chipInput/__tests__/__snapshots__/ChipInput.test.tsx.snap +14 -2
  188. package/core/components/molecules/dropzone/Dropzone.tsx +6 -3
  189. package/core/components/molecules/dropzone/DropzoneBase.tsx +22 -38
  190. package/core/components/molecules/dropzone/FileSelectorUtils.tsx +1 -1
  191. package/core/components/molecules/dropzone/__stories__/index.story.tsx +151 -41
  192. package/core/components/molecules/dropzone/__tests__/Dropzone.test.tsx +2 -2
  193. package/core/components/molecules/dropzone/utils.tsx +6 -4
  194. package/core/components/molecules/editableChipInput/EditableChipInput.tsx +9 -5
  195. package/core/components/molecules/editableChipInput/__stories__/Uncontrolled.story.tsx +1 -1
  196. package/core/components/molecules/editableChipInput/__tests__/__snapshots__/EditableChipInput.test.tsx.snap +12 -4
  197. package/core/components/molecules/editableDropdown/EditableDropdown.tsx +2 -2
  198. package/core/components/molecules/editableInput/EditableInput.tsx +13 -4
  199. package/core/components/molecules/emptyState/EmptyState.tsx +9 -5
  200. package/core/components/molecules/emptyState/__stories__/pageNotLoadedWithSVG.story.tsx +26 -26
  201. package/core/components/molecules/fileList/FileListItem.tsx +3 -2
  202. package/core/components/molecules/fileUploader/FileUploaderItem.tsx +3 -2
  203. package/core/components/molecules/fileUploader/FileUploaderStatus.tsx +1 -1
  204. package/core/components/molecules/fileUploader/__stories__/_common_/types.tsx +3 -0
  205. package/core/components/molecules/fileUploader/__stories__/index.story.tsx +3 -222
  206. package/core/components/molecules/fullscreenModal/FullscreenModal.tsx +5 -7
  207. package/core/components/molecules/inputMask/InputMask.tsx +212 -146
  208. package/core/components/molecules/inputMask/__stories__/index.story.tsx +24 -0
  209. package/core/components/molecules/inputMask/__tests__/__snapshots__/InputMask.test.tsx.snap +1 -0
  210. package/core/components/molecules/modal/Modal.tsx +4 -6
  211. package/core/components/molecules/modal/__stories__/Confirmation.story.tsx +1 -1
  212. package/core/components/molecules/pagination/__tests__/__snapshots__/Pagination.test.tsx.snap +5 -1
  213. package/core/components/molecules/placeholder/Placeholder.tsx +2 -2
  214. package/core/components/molecules/popover/Popover.tsx +2 -9
  215. package/core/components/molecules/sidesheet/Sidesheet.tsx +5 -7
  216. package/core/components/molecules/sidesheet/__stories__/variants/CustomHeader.story.tsx +172 -0
  217. package/core/components/molecules/stepper/Step.tsx +2 -0
  218. package/core/components/molecules/tabs/Tabs.tsx +2 -0
  219. package/core/components/molecules/tabs/TabsWrapper.tsx +2 -0
  220. package/core/components/molecules/tabs/__stories__/CustomLabels.story.tsx +1 -1
  221. package/core/components/molecules/tooltip/Tooltip.tsx +4 -4
  222. package/core/components/molecules/verificationCodeInput/VerificationCodeInput.tsx +8 -4
  223. package/core/components/molecules/verificationCodeInput/__stories__/index.story.tsx +3 -1
  224. package/core/components/molecules/verificationCodeInput/__tests__/__snapshots__/VerificationCodeInput.test.tsx.snap +1 -0
  225. package/core/components/organisms/calendar/Calendar.tsx +130 -8
  226. package/core/components/organisms/calendar/__stories__/variants/firstDayOfWeek.story.tsx +2 -2
  227. package/core/components/organisms/calendar/__tests__/Calendar.test.tsx +27 -0
  228. package/core/components/organisms/calendar/utility.ts +3 -3
  229. package/core/components/organisms/choiceList/ChoiceList.tsx +12 -12
  230. package/core/components/organisms/datePicker/DatePicker.tsx +31 -16
  231. package/core/components/organisms/datePicker/Trigger.tsx +1 -5
  232. package/core/components/organisms/datePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +4518 -4479
  233. package/core/components/organisms/dateRangePicker/DateRangePicker.tsx +9 -10
  234. package/core/components/organisms/dateRangePicker/SingleInputTrigger.tsx +0 -1
  235. package/core/components/organisms/dateRangePicker/Trigger.tsx +2 -2
  236. package/core/components/organisms/dateRangePicker/__stories__/variants/monthsInView.story.tsx +2 -2
  237. package/core/components/organisms/dateRangePicker/__tests__/__snapshots__/DateRangePicker.test.tsx.snap +112 -40
  238. package/core/components/organisms/grid/Cell.tsx +23 -19
  239. package/core/components/organisms/grid/Grid.tsx +3 -4
  240. package/core/components/organisms/grid/GridBody.tsx +0 -1
  241. package/core/components/organisms/grid/GridContext.ts +1 -1
  242. package/core/components/organisms/grid/GridRow.tsx +4 -0
  243. package/core/components/organisms/grid/__stories__/_common_/editableSchema.tsx +1 -3
  244. package/core/components/organisms/grid/__stories__/_common_/fetchData.ts +3 -3
  245. package/core/components/organisms/grid/__stories__/_common_/loaderSchema.ts +0 -2
  246. package/core/components/organisms/grid/__stories__/_common_/schema.tsx +1 -3
  247. package/core/components/organisms/grid/__stories__/_common_/simpleLoaderSchema.ts +0 -2
  248. package/core/components/organisms/grid/__stories__/_common_/statusSchema.ts +0 -2
  249. package/core/components/organisms/horizontalNav/HorizontalNav.tsx +2 -0
  250. package/core/components/organisms/inlineMessage/InlineMessage.tsx +5 -7
  251. package/core/components/organisms/inlineMessage/__tests__/InlineMessage.test.tsx +3 -2
  252. package/core/components/organisms/inlineMessage/__tests__/__snapshots__/InlineMessage.test.tsx.snap +30 -40
  253. package/core/components/organisms/list/__stories__/_common_/types.tsx +3 -0
  254. package/core/components/organisms/list/__stories__/index.story.tsx +0 -16
  255. package/core/components/organisms/navigation/VerticalNavigation.tsx +4 -0
  256. package/core/components/organisms/table/Table.tsx +3 -2
  257. package/core/components/organisms/table/__stories__/CompressedTable.story.tsx +1 -1
  258. package/core/components/organisms/table/__stories__/DataTable.story.tsx +1 -1
  259. package/core/components/organisms/table/__stories__/NestedTableWithNestedCard.story.tsx +1 -1
  260. package/core/components/organisms/table/__stories__/PinnedColumn.story.tsx +1 -1
  261. package/core/components/organisms/table/__stories__/ResourceTable.story.tsx +4 -3
  262. package/core/components/organisms/table/__stories__/Selection.story.tsx +2 -2
  263. package/core/components/organisms/table/__stories__/StandardTable.story.tsx +1 -1
  264. package/core/components/organisms/table/__stories__/TableAsDescriptionList.story.tsx +2 -2
  265. package/core/components/organisms/table/__stories__/TableAsOptionList.story.tsx +2 -2
  266. package/core/components/organisms/table/__stories__/TightStory.story.tsx +1 -1
  267. package/core/components/organisms/table/__stories__/_common_/types.tsx +3 -0
  268. package/core/components/organisms/table/__stories__/syncTable.story.tsx +14 -6
  269. package/core/components/organisms/table/__stories__/variants/showHead.story.tsx +2 -2
  270. package/core/components/organisms/table/__stories__/variants/showMenu.story.tsx +2 -2
  271. package/core/components/organisms/table/__stories__/variants/size.story.tsx +2 -2
  272. package/core/components/organisms/table/__stories__/variants/type.story.tsx +2 -2
  273. package/core/components/organisms/table/__stories__/variants/withCheckbox.story.tsx +2 -2
  274. package/core/components/organisms/table/__stories__/variants/withHeader.story.tsx +0 -2
  275. package/core/components/organisms/table/__stories__/variants/withPagination.story.tsx +2 -2
  276. package/core/components/organisms/timePicker/TimePicker.tsx +4 -8
  277. package/core/components/organisms/timePicker/__tests__/__snapshots__/TimePicker.test.tsx.snap +14 -2
  278. package/core/components/organisms/verticalNav/MenuItem.tsx +2 -0
  279. package/core/components/organisms/verticalNav/__stories__/schema.tsx +0 -2
  280. package/core/components/organisms/verticalNav/__tests__/VerticalNav.test.tsx +1 -2
  281. package/core/components/patterns/datePicker/datePickerWithPresets.story.tsx +126 -0
  282. package/core/components/patterns/dateRangePicker/withCustomPopover.story.tsx +8 -8
  283. package/core/components/patterns/forms/CreatePassword.story.tsx +1 -1
  284. package/core/components/patterns/forms/VerificationCodeInput.story.tsx +2 -2
  285. package/core/components/patterns/table/Table with Header/tableWithHeader.story.jsx +7 -7
  286. package/core/global.d.ts +9 -0
  287. package/core/index.tsx +2 -1
  288. package/core/index.type.tsx +1 -0
  289. package/core/utils/Keys.ts +4 -0
  290. package/core/utils/__tests__/__snapshots__/TS.test.tsx.snap +562 -541
  291. package/core/utils/docPage/generateImports.tsx +2 -3
  292. package/core/utils/docPage/index.tsx +52 -37
  293. package/core/utils/docPage/sandbox.tsx +14 -7
  294. package/core/utils/overlayHelper.ts +7 -3
  295. package/core/utils/testHelper.ts +2 -2
  296. package/core/utils/types.tsx +1 -1
  297. package/core/utils/validators.ts +37 -34
  298. package/css/dist/index.css +1550 -1415
  299. package/css/dist/index.css.map +1 -1
  300. package/css/src/components/Legend.css +7 -7
  301. package/css/src/components/ProgressBar.css +1 -1
  302. package/css/src/components/avatarGroup.css +1 -1
  303. package/css/src/components/backdrop.css +12 -6
  304. package/css/src/components/badge.css +52 -52
  305. package/css/src/components/button.css +95 -94
  306. package/css/src/components/calendar.css +137 -126
  307. package/css/src/components/card.css +0 -1
  308. package/css/src/components/cardSubdued.css +3 -5
  309. package/css/src/components/chat.css +1 -1
  310. package/css/src/components/checkbox.css +71 -70
  311. package/css/src/components/chip.css +20 -17
  312. package/css/src/components/chipGroup.css +5 -5
  313. package/css/src/components/chipInput.css +1 -1
  314. package/css/src/components/choiceList.css +4 -4
  315. package/css/src/components/dateRangePicker.css +13 -13
  316. package/css/src/components/divider.css +20 -0
  317. package/css/src/components/dropdown.css +61 -61
  318. package/css/src/components/dropdownButton.css +36 -36
  319. package/css/src/components/dropzone.css +16 -20
  320. package/css/src/components/editableChipInput.css +10 -9
  321. package/css/src/components/editableDropdown.css +1 -1
  322. package/css/src/components/editableInput.css +1 -1
  323. package/css/src/components/emptyState.css +15 -15
  324. package/css/src/components/fileList.css +44 -45
  325. package/css/src/components/fullscreenModal.css +4 -3
  326. package/css/src/components/grid.css +217 -199
  327. package/css/src/components/horizontalNav.css +0 -1
  328. package/css/src/components/icon.css +1 -7
  329. package/css/src/components/inlineMessage.css +2 -1
  330. package/css/src/components/input.css +62 -62
  331. package/css/src/components/link.css +1 -1
  332. package/css/src/components/list.css +10 -10
  333. package/css/src/components/message.css +64 -70
  334. package/css/src/components/metaList.css +26 -26
  335. package/css/src/components/metricInput.css +3 -4
  336. package/css/src/components/modal.css +1 -1
  337. package/css/src/components/navigation.css +3 -3
  338. package/css/src/components/pageHeader.css +1 -2
  339. package/css/src/components/pagination.css +36 -36
  340. package/css/src/components/pills.css +19 -19
  341. package/css/src/components/placeholder.css +10 -5
  342. package/css/src/components/popover.css +2 -2
  343. package/css/src/components/progressRing.css +1 -1
  344. package/css/src/components/radio.css +74 -74
  345. package/css/src/components/slider.css +5 -5
  346. package/css/src/components/statusHints.css +15 -15
  347. package/css/src/components/switch.css +66 -41
  348. package/css/src/components/table.css +15 -15
  349. package/css/src/components/tabs.css +53 -53
  350. package/css/src/components/textarea.css +1 -1
  351. package/css/src/components/toast.css +51 -56
  352. package/css/src/components/verificationCodeInput.css +5 -6
  353. package/css/src/components/verticalNav.css +1 -2
  354. package/css/src/core/base.css +3 -0
  355. package/css/src/core/typography.css +1 -1
  356. package/css/src/core/utilities.css +1 -1
  357. package/css/src/tokens/index.css +63 -63
  358. package/css/src/utils/align.css +1 -1
  359. package/css/src/utils/background.css +1 -1
  360. package/css/src/utils/cursor.css +1 -1
  361. package/css/src/utils/display.css +1 -1
  362. package/css/src/utils/flex.css +1 -1
  363. package/css/src/utils/grid.css +1 -1
  364. package/css/src/utils/overflow.css +1 -1
  365. package/css/src/utils/position.css +1 -1
  366. package/css/src/utils/spacing.css +1 -1
  367. package/css/src/utils/utility.css +13 -13
  368. package/css/src/variables/index.css +6 -3
  369. package/dist/core/accessibility/utils/index.d.ts +4 -0
  370. package/dist/core/accessibility/utils/isEnterKey.d.ts +3 -0
  371. package/dist/core/accessibility/utils/isSpaceKey.d.ts +3 -0
  372. package/dist/core/accessibility/utils/useAccessibilityProps.d.ts +18 -0
  373. package/dist/core/common.type.d.ts +12 -0
  374. package/dist/core/components/atoms/avatar/Avatar.d.ts +4 -4
  375. package/dist/core/components/atoms/avatarGroup/AvatarGroup.d.ts +2 -3
  376. package/dist/core/components/atoms/badge/Badge.d.ts +2 -2
  377. package/dist/core/components/atoms/button/Button.d.ts +6 -6
  378. package/dist/core/components/atoms/checkbox/Checkbox.d.ts +3 -3
  379. package/dist/core/components/atoms/chip/Chip.d.ts +2 -2
  380. package/dist/core/components/atoms/divider/Divider.d.ts +15 -0
  381. package/dist/core/components/atoms/divider/index.d.ts +2 -0
  382. package/dist/core/components/atoms/dropdown/Dropdown.d.ts +18 -17
  383. package/dist/core/components/atoms/dropdown/DropdownButton.d.ts +2 -2
  384. package/dist/core/components/atoms/dropdown/DropdownList.d.ts +4 -3
  385. package/dist/core/components/atoms/dropdown/option/index.d.ts +1 -1
  386. package/dist/core/components/atoms/heading/Heading.d.ts +4 -4
  387. package/dist/core/components/atoms/icon/Icon.d.ts +5 -3
  388. package/dist/core/components/atoms/input/Input.d.ts +4 -4
  389. package/dist/core/components/atoms/legend/Legend.d.ts +2 -2
  390. package/dist/core/components/atoms/link/Link.d.ts +4 -4
  391. package/dist/core/components/atoms/message/Message.d.ts +2 -2
  392. package/dist/core/components/atoms/metricInput/MetricInput.d.ts +3 -3
  393. package/dist/core/components/atoms/multiSlider/SliderUtils.d.ts +1 -1
  394. package/dist/core/components/atoms/multiSlider/index.d.ts +3 -3
  395. package/dist/core/components/atoms/paragraph/Paragraph.d.ts +2 -2
  396. package/dist/core/components/atoms/pills/Pills.d.ts +2 -2
  397. package/dist/core/components/atoms/placeholderImage/PlaceholderImage.d.ts +2 -2
  398. package/dist/core/components/atoms/placeholderParagraph/PlaceholderParagraph.d.ts +2 -2
  399. package/dist/core/components/atoms/popperWrapper/PopperWrapper.d.ts +51 -51
  400. package/dist/core/components/atoms/progressRing/ProgressRing.d.ts +2 -2
  401. package/dist/core/components/atoms/radio/Radio.d.ts +4 -4
  402. package/dist/core/components/atoms/rangeSlider/RangeSlider.d.ts +1 -1
  403. package/dist/core/components/atoms/spinner/Spinner.d.ts +4 -4
  404. package/dist/core/components/atoms/statusHint/StatusHint.d.ts +2 -2
  405. package/dist/core/components/atoms/subheading/Subheading.d.ts +2 -2
  406. package/dist/core/components/atoms/switchInput/Switch.d.ts +7 -6
  407. package/dist/core/components/atoms/text/Text.d.ts +4 -4
  408. package/dist/core/components/atoms/toast/ActionButton.d.ts +2 -2
  409. package/dist/core/components/atoms/toast/Toast.d.ts +2 -2
  410. package/dist/core/components/molecules/dropzone/Dropzone.d.ts +3 -3
  411. package/dist/core/components/molecules/dropzone/DropzoneBase.d.ts +1 -1
  412. package/dist/core/components/molecules/dropzone/utils.d.ts +5 -3
  413. package/dist/core/components/molecules/emptyState/EmptyState.d.ts +4 -4
  414. package/dist/core/components/molecules/fileList/FileListItem.d.ts +1 -1
  415. package/dist/core/components/molecules/fileUploader/FileUploaderItem.d.ts +1 -1
  416. package/dist/core/components/molecules/fileUploader/FileUploaderStatus.d.ts +1 -1
  417. package/dist/core/components/molecules/fullscreenModal/FullscreenModal.d.ts +4 -7
  418. package/dist/core/components/molecules/inputMask/InputMask.d.ts +10 -2
  419. package/dist/core/components/molecules/modal/Modal.d.ts +3 -6
  420. package/dist/core/components/molecules/placeholder/Placeholder.d.ts +2 -2
  421. package/dist/core/components/molecules/popover/Popover.d.ts +0 -1
  422. package/dist/core/components/molecules/sidesheet/Sidesheet.d.ts +3 -6
  423. package/dist/core/components/molecules/tooltip/Tooltip.d.ts +3 -3
  424. package/dist/core/components/organisms/calendar/Calendar.d.ts +31 -0
  425. package/dist/core/components/organisms/choiceList/ChoiceList.d.ts +5 -6
  426. package/dist/core/components/organisms/datePicker/DatePicker.d.ts +2 -0
  427. package/dist/core/components/organisms/dateRangePicker/DateRangePicker.d.ts +24 -0
  428. package/dist/core/components/organisms/grid/Cell.d.ts +1 -1
  429. package/dist/core/components/organisms/grid/Grid.d.ts +3 -3
  430. package/dist/core/components/organisms/grid/GridContext.d.ts +1 -1
  431. package/dist/core/components/organisms/inlineMessage/InlineMessage.d.ts +2 -2
  432. package/dist/core/components/organisms/table/Table.d.ts +2 -2
  433. package/dist/core/components/patterns/datePicker/datePickerWithPresets.story.d.ts +15 -0
  434. package/dist/core/components/patterns/dateRangePicker/withCustomPopover.story.d.ts +5 -1
  435. package/dist/core/index.d.ts +1 -0
  436. package/dist/core/index.type.d.ts +1 -0
  437. package/dist/core/utils/docPage/generateImports.d.ts +1 -1
  438. package/dist/core/utils/overlayHelper.d.ts +1 -1
  439. package/dist/core/utils/types.d.ts +1 -1
  440. package/dist/index.esm.js +1039 -729
  441. package/dist/index.js +532 -371
  442. package/dist/index.js.map +1 -1
  443. package/dist/index.umd.js +1 -1
  444. package/dist/index.umd.js.br +0 -0
  445. package/dist/index.umd.js.gz +0 -0
  446. package/dts.config.js +11 -2
  447. package/package.json +32 -27
  448. package/tsconfig.json +3 -16
  449. package/tsconfig.type.json +2 -1
  450. package/types/index.d.ts +2217 -0
  451. package/types/{innovaccer-design-system/tsconfig.json → tsconfig.json} +1 -1
  452. package/types/{innovaccer-design-system/tslint.json → tslint.json} +0 -0
  453. package/types/types-tests.tsx +936 -0
  454. package/.husky/prepare-commit-msg +0 -6
  455. package/core/components/atoms/button/__stories__/variants/state/Success.story.tsx +0 -99
  456. package/core/components/atoms/message/__stories__/default.story.tsx +0 -16
  457. package/core/components/atoms/toast/__stories__/DefaultToast.story.tsx +0 -16
  458. package/core/components/molecules/dropzone/__stories__/variants/DropzoneWithFileList.story.tsx +0 -176
  459. package/core/components/molecules/fileUploader/__stories__/variants/FileUploaderList.story.tsx +0 -80
  460. package/tslint.json +0 -30
  461. package/types/innovaccer-design-system/index.d.ts +0 -39
  462. package/types/innovaccer-design-system/innovaccer-design-system-tests.ts +0 -0
@@ -0,0 +1,172 @@
1
+ import * as React from 'react';
2
+ import { boolean } from '@storybook/addon-knobs';
3
+ import { action } from '@storybook/addon-actions';
4
+ import { updateKnob } from '@/utils/storybookEventEmitter';
5
+ import { Text, Paragraph, Sidesheet, ModalDescription, Button, Badge, Heading, Divider } from '@/index';
6
+
7
+ export const customHeader = () => {
8
+ const open = boolean('open', true);
9
+ const seperator = boolean('seperator', false);
10
+ const stickFooter = boolean('stick bottom', false);
11
+ const backdropClose = boolean('backdropClose', false);
12
+
13
+ const onClose = () => {
14
+ updateKnob('open', false);
15
+ action('on close triggered')();
16
+ };
17
+
18
+ const options = {
19
+ onClose,
20
+ open,
21
+ seperator,
22
+ stickFooter,
23
+ backdropClose,
24
+ footer: (
25
+ <>
26
+ <Button appearance="primary" className="mr-4">
27
+ Primary
28
+ </Button>
29
+ <Button appearance="basic">Basic</Button>
30
+ </>
31
+ ),
32
+ };
33
+
34
+ const modalDescriptionOptions = {
35
+ title: 'Description Title',
36
+ description: 'Adding a subheading clearly indicates the hierarchy of the information.',
37
+ removePadding: true,
38
+ };
39
+
40
+ const modalDescriptionOptionsWithoutTitle = {
41
+ description: 'Card Sections include supporting text like an article summary or a restaurant description.',
42
+ removePadding: true,
43
+ };
44
+
45
+ return (
46
+ <div>
47
+ <Paragraph>
48
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
49
+ magna aliqua.
50
+ <br />
51
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
52
+ <br />
53
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <br />
54
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
55
+ <br />
56
+ </Paragraph>
57
+ <Sidesheet
58
+ {...options}
59
+ dimension="regular"
60
+ header={
61
+ <div className="pl-7">
62
+ <Heading size="s">Untitled document</Heading>
63
+ <div className="d-flex">
64
+ <div className="mr-3">
65
+ <Badge appearance="primary">User Interface</Badge>
66
+ </div>
67
+ <div className="mr-3">
68
+ <Badge>Design</Badge>
69
+ </div>
70
+ <div className="mr-3">
71
+ <Badge>Development</Badge>
72
+ </div>
73
+ </div>
74
+ <Divider></Divider>
75
+ </div>
76
+ }
77
+ >
78
+ <Text>Modal Body</Text>
79
+ <ModalDescription {...modalDescriptionOptions} />
80
+ <ModalDescription {...modalDescriptionOptionsWithoutTitle} />
81
+ </Sidesheet>
82
+ </div>
83
+ );
84
+ };
85
+
86
+ const customCode = `() => {
87
+ const [open, setOpen] = React.useState(true);
88
+
89
+ const onClose = () => {
90
+ setOpen(!open);
91
+ };
92
+
93
+ const options = {
94
+ onClose,
95
+ open,
96
+ footer: (
97
+ <>
98
+ <Button appearance="primary" className="mr-4">
99
+ Primary
100
+ </Button>
101
+ <Button appearance="basic">Basic</Button>
102
+ </>
103
+ ),
104
+ };
105
+
106
+ const modalDescriptionOptions = {
107
+ title: 'Description Title',
108
+ description: 'Adding a subheading clearly indicates the hierarchy of the information.',
109
+ removePadding: true,
110
+ };
111
+
112
+ const modalDescriptionOptionsWithoutTitle = {
113
+ description: 'Card Sections include supporting text like an article summary or a restaurant description.',
114
+ removePadding: true,
115
+ };
116
+
117
+ return (
118
+ <div>
119
+ <Paragraph>
120
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
121
+ magna aliqua. <br />
122
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.{' '}
123
+ <br />
124
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <br />
125
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{' '}
126
+ <br />
127
+ <Button appearance="primary" onClick={() => setOpen(true)}>
128
+ Open
129
+ </Button>
130
+ </Paragraph>
131
+ <Sidesheet
132
+ {...options}
133
+ dimension="regular"
134
+ header={
135
+ <div className="pl-7">
136
+ <Heading size="s">Untitled document</Heading>
137
+ <div className="d-flex">
138
+ <div className="mr-3">
139
+ <Badge appearance="primary">User Interface</Badge>
140
+ </div>
141
+ <div className="mr-3">
142
+ <Badge>Design</Badge>
143
+ </div>
144
+ <div className="mr-3">
145
+ <Badge>Development</Badge>
146
+ </div>
147
+ </div>
148
+ <Divider></Divider>
149
+ </div>
150
+ }
151
+ >
152
+ <Text>Modal Body</Text>
153
+ <ModalDescription {...modalDescriptionOptions} />
154
+ <ModalDescription {...modalDescriptionOptionsWithoutTitle} />
155
+ </Sidesheet>
156
+ </div>
157
+ );
158
+ }`;
159
+
160
+ export default {
161
+ title: 'Components/Sidesheet/Custom Header',
162
+ component: Sidesheet,
163
+ parameters: {
164
+ docs: {
165
+ docPage: {
166
+ customCode,
167
+ title: 'Modal',
168
+ noHtml: true,
169
+ },
170
+ },
171
+ },
172
+ };
@@ -30,6 +30,8 @@ export const Step = (props: StepProps) => {
30
30
  const appearance = active ? 'link' : disabled ? 'disabled' : 'default';
31
31
 
32
32
  return (
33
+ // TODO(a11y)
34
+ // eslint-disable-next-line
33
35
  <div data-test="DesignSystem-Step" className={StepClass} onClick={onClickHandle}>
34
36
  <Icon
35
37
  data-test="DesignSystem-Step--Icon"
@@ -189,6 +189,8 @@ export const Tabs = (props: TabsProps) => {
189
189
  });
190
190
 
191
191
  return (
192
+ // TODO(a11y)
193
+ // eslint-disable-next-line
192
194
  <div
193
195
  ref={(element) => element && !disabled && tabRefs.push(element)}
194
196
  data-test="DesignSystem-Tabs--Tab"
@@ -52,6 +52,8 @@ export const TabsWrapper = (props: TabsWrapperProps) => {
52
52
  });
53
53
 
54
54
  return (
55
+ // TODO(a11y)
56
+ // eslint-disable-next-line
55
57
  <div
56
58
  data-test="DesignSystem-Tabs--Header"
57
59
  key={index}
@@ -54,7 +54,7 @@ const customCode = `() => {
54
54
 
55
55
  const onTabChangeHandler = (tabIndex) => {
56
56
  setActiveIndex(tabIndex);
57
- console.log(\`\tab-change: \${tabIndex}\`)();
57
+ console.log(\`tab-change: \${tabIndex}\`)();
58
58
  };
59
59
 
60
60
  return (
@@ -3,7 +3,7 @@ import { Popover, Text } from '@/index';
3
3
  import { PopoverProps } from '@/index.type';
4
4
  import { BaseProps, filterProps } from '@/utils/types';
5
5
 
6
- const propsList = [
6
+ const tooltipPropsList = [
7
7
  'trigger',
8
8
  'on',
9
9
  'open',
@@ -15,8 +15,8 @@ const propsList = [
15
15
  'hideOnReferenceEscape',
16
16
  'closeOnScroll',
17
17
  ] as const;
18
- type PopperProps = typeof propsList[number];
19
- export interface TooltipProps extends Omit<PopoverProps, PopperProps>, BaseProps {
18
+ type TooltipPopperProps = typeof tooltipPropsList[number];
19
+ export interface TooltipProps extends Omit<PopoverProps, TooltipPopperProps>, BaseProps {
20
20
  /**
21
21
  * Text to be rendered in `Tooltip`
22
22
  */
@@ -49,7 +49,7 @@ export const Tooltip = (props: TooltipProps) => {
49
49
  // ...Popover.defaultProps,
50
50
  // hoverable: false
51
51
  // }, propsList);
52
- Tooltip.defaultProps = Object.assign({}, filterProps(Popover.defaultProps, propsList), {
52
+ Tooltip.defaultProps = Object.assign({}, filterProps(Popover.defaultProps, tooltipPropsList), {
53
53
  hoverable: false,
54
54
  });
55
55
 
@@ -156,7 +156,7 @@ const VerificationCodeInput = (props: VerificationCodeInputProps) => {
156
156
  const prev = refs[prevIndex];
157
157
  const nextRef = refs[nextIndex];
158
158
  switch (e.key) {
159
- case KEY_CODE.backspace:
159
+ case KEY_CODE.backspace: {
160
160
  e.preventDefault();
161
161
  const vals = [...values];
162
162
  if (values[index]) {
@@ -168,26 +168,30 @@ const VerificationCodeInput = (props: VerificationCodeInputProps) => {
168
168
  setValues(vals);
169
169
  }
170
170
  break;
171
- case KEY_CODE.left:
171
+ }
172
+ case KEY_CODE.left: {
172
173
  e.preventDefault();
173
174
  if (prev && prev.current) {
174
175
  prev.current.focus({ preventScroll: true });
175
176
  }
176
177
  break;
177
- case KEY_CODE.right:
178
+ }
179
+ case KEY_CODE.right: {
178
180
  e.preventDefault();
179
181
  if (nextRef && nextRef.current) {
180
182
  nextRef.current.focus({ preventScroll: true });
181
183
  }
182
184
  break;
185
+ }
183
186
  case KEY_CODE.up:
184
187
  case KEY_CODE.down:
185
188
  case KEY_CODE.e:
186
- case KEY_CODE.E:
189
+ case KEY_CODE.E: {
187
190
  if (type === 'number') {
188
191
  e.preventDefault();
189
192
  }
190
193
  break;
194
+ }
191
195
  default:
192
196
  break;
193
197
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { VerificationCodeInput, Label } from '@/index';
3
- import { select, text, boolean, number } from '@storybook/addon-knobs';
3
+ import { select, text, boolean } from '@storybook/addon-knobs';
4
4
  import { action } from '@storybook/addon-actions';
5
5
 
6
6
  // CSF format story
@@ -38,6 +38,8 @@ export const all = () => {
38
38
  placeholder={placeholder}
39
39
  error={error}
40
40
  pattern={pattern}
41
+ // TODO(a11y)
42
+ // eslint-disable-next-line
41
43
  autoFocus={autoFocus}
42
44
  />
43
45
  </>
@@ -12,6 +12,7 @@ exports[`VerificationCodeInput component
12
12
  <div
13
13
  class="Input Input--large VerificationCodeInput-Input"
14
14
  data-test="DesignSystem-InputWrapper"
15
+ role="presentation"
15
16
  style="min-width: 40px;"
16
17
  >
17
18
  <input
@@ -16,6 +16,31 @@ import {
16
16
  convertToDate,
17
17
  } from './utility';
18
18
 
19
+ type OnHover = React.MouseEvent<HTMLSpanElement> | React.MouseEvent<HTMLDivElement>;
20
+ interface hoveredDateProps {
21
+ value: number;
22
+ isToday: boolean;
23
+ isDisabled: boolean;
24
+ todayDate?: Date;
25
+ fullDate: Date;
26
+ date: number;
27
+ month: string;
28
+ year: number;
29
+ dayName: string;
30
+ }
31
+ interface hoveredMonthProps {
32
+ value: string;
33
+ month: string;
34
+ year?: number;
35
+ isCurrentMonth: boolean;
36
+ isDisabled: boolean;
37
+ }
38
+ interface hoveredYearProps {
39
+ value: number;
40
+ year: number;
41
+ isCurrentYear: boolean;
42
+ isDisabled: boolean;
43
+ }
19
44
  export interface SharedProps extends BaseProps {
20
45
  /**
21
46
  * Size of `Calendar`
@@ -73,6 +98,18 @@ export type CalendarProps = {
73
98
  * Callback function called when range is changed
74
99
  */
75
100
  onRangeChange?: (startDate: Date | undefined, endDate: Date | undefined) => void;
101
+ /**
102
+ * Callback function called when a date is hovered
103
+ */
104
+ onDateHover?: (dateData: hoveredDateProps, evnt: OnHover) => void;
105
+ /**
106
+ * Callback function called when a month is hovered
107
+ */
108
+ onMonthHover?: (monthData: hoveredMonthProps, evnt: OnHover) => void;
109
+ /**
110
+ * Callback function called when a year is hovered
111
+ */
112
+ onYearHover?: (yearData: hoveredYearProps, evnt: OnHover) => void;
76
113
  /**
77
114
  * Selected date
78
115
  */
@@ -351,6 +388,22 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
351
388
  });
352
389
  };
353
390
 
391
+ yearMouseOverHandler = (
392
+ year: number,
393
+ isCurrentYear: boolean,
394
+ isDisabled: boolean,
395
+ ev: React.MouseEvent<HTMLDivElement>
396
+ ) => {
397
+ const { onYearHover } = this.props;
398
+ const yearData = {
399
+ value: year,
400
+ year: year,
401
+ isCurrentYear: isCurrentYear,
402
+ isDisabled: isDisabled,
403
+ };
404
+ if (onYearHover) onYearHover(yearData, ev);
405
+ };
406
+
354
407
  selectMonth = (month: number) => () => {
355
408
  this.updateState(this.state.yearNav, month);
356
409
  this.setState({
@@ -358,7 +411,38 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
358
411
  });
359
412
  };
360
413
 
414
+ monthMouseOverHandler = (
415
+ month: number,
416
+ isCurrentMonth: boolean,
417
+ isDisabled: boolean,
418
+ ev: React.MouseEvent<HTMLDivElement>
419
+ ) => {
420
+ const { months } = config;
421
+ const { onMonthHover } = this.props;
422
+ const monthData = {
423
+ value: months[month],
424
+ month: months[month],
425
+ year: this.state.year,
426
+ isCurrentMonth: isCurrentMonth,
427
+ isDisabled: isDisabled,
428
+ };
429
+ if (onMonthHover) onMonthHover(monthData, ev);
430
+ };
431
+
361
432
  selectDate = (index: number, date: number, prevMonthDayRange: number, dayRange: number) => {
433
+ const d = this.calculateDate(index, date, prevMonthDayRange, dayRange, false);
434
+ this.setState({
435
+ currDate: d,
436
+ });
437
+ };
438
+
439
+ calculateDate = (
440
+ index: number,
441
+ date: number,
442
+ prevMonthDayRange: number,
443
+ dayRange: number,
444
+ isDateHovered: boolean
445
+ ) => {
362
446
  let neighbouringMonthIndex;
363
447
  let neighbouringMonthDate;
364
448
  let type = '';
@@ -375,12 +459,12 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
375
459
  neighbouringMonthDate = date;
376
460
  }
377
461
  const { year, month } = this.getNavDateInfo(neighbouringMonthIndex);
378
- this.updateState(year, month, neighbouringMonthDate);
379
- this.onNavIconClickHandler(type)();
462
+ if (isDateHovered === false) {
463
+ this.updateState(year, month, neighbouringMonthDate);
464
+ this.onNavIconClickHandler(type)();
465
+ }
380
466
  const d = this.getDateValue(year, month, neighbouringMonthDate);
381
- this.setState({
382
- currDate: d,
383
- });
467
+ return d;
384
468
  };
385
469
 
386
470
  onNavIconClickHandler = (type: string) => () => {
@@ -525,6 +609,8 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
525
609
  return (
526
610
  <div className={headerContentClass}>
527
611
  {view !== 'date' && (
612
+ // TODO(a11y)
613
+ // eslint-disable-next-line
528
614
  <div
529
615
  className="d-flex justify-content-center align-items-center"
530
616
  onClick={this.onNavHeadingClickHandler(view)}
@@ -532,14 +618,19 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
532
618
  {renderHeading(headerContent)}
533
619
  </div>
534
620
  )}
621
+
535
622
  {view === 'date' && (
536
623
  <>
624
+ {/* TODO(a11y) */}
625
+ {/* eslint-disable-next-line */}
537
626
  <div
538
627
  onClick={this.onNavHeadingClickHandler(view)}
539
628
  className="d-flex justify-content-center align-items-center"
540
629
  >
541
630
  {renderHeading(months[monthNavVal])}
542
631
  </div>
632
+ {/* TODO(a11y) */}
633
+ {/* eslint-disable-next-line */}
543
634
  <div
544
635
  className="ml-4 d-flex justify-content-center align-items-center"
545
636
  onClick={this.onNavHeadingClickHandler('month')}
@@ -584,11 +675,14 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
584
675
  });
585
676
 
586
677
  return (
678
+ // TODO(a11y)
679
+ // eslint-disable-next-line
587
680
  <div
588
681
  key={`${row}-${col}`}
589
682
  data-test="DesignSystem-Calendar--yearValue"
590
683
  className={valueClass}
591
684
  onClick={this.selectYear(year)}
685
+ onMouseOver={this.yearMouseOverHandler.bind(this, year, isCurrentYear(), disabled)}
592
686
  >
593
687
  <Text
594
688
  size={size === 'small' ? 'small' : 'regular'}
@@ -632,11 +726,14 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
632
726
  });
633
727
 
634
728
  return (
729
+ //TODO(a11y)
730
+ //eslint-disable-next-line
635
731
  <div
636
732
  key={`${row}-${col}`}
637
733
  data-test="DesignSystem-Calendar--monthValue"
638
734
  className={valueClass}
639
735
  onClick={this.selectMonth(month)}
736
+ onMouseOver={this.monthMouseOverHandler.bind(this, month, isCurrentMonth(), disabled)}
640
737
  >
641
738
  <Text
642
739
  size={size === 'small' ? 'small' : 'regular'}
@@ -703,7 +800,7 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
703
800
  renderDateValues = (index: number) => {
704
801
  const { daysInRow, monthBlock } = config;
705
802
 
706
- const { size, rangePicker, firstDayOfWeek, disabledBefore, disabledAfter, monthsInView } = this.props;
803
+ const { size, rangePicker, firstDayOfWeek, disabledBefore, disabledAfter, monthsInView, onDateHover } = this.props;
707
804
 
708
805
  const {
709
806
  startDate,
@@ -727,10 +824,10 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
727
824
  const dayDiff = getFirstDayOfMonth(yearNavVal, monthNavVal) - getIndexOfDay(firstDayOfWeek);
728
825
  const dummyDays = Math.abs(dayDiff);
729
826
  let noOfRows = Math.ceil((dayRange + dummyDays) / daysInRow);
827
+ // TODO: @veekays
828
+ // if(noOfRows !== 6 && monthsInView <= 1) ?
730
829
  if (noOfRows === 6) {
731
- noOfRows = noOfRows;
732
830
  } else if (monthsInView > 1) {
733
- noOfRows = noOfRows;
734
831
  } else {
735
832
  noOfRows = noOfRows + 1;
736
833
  }
@@ -761,6 +858,29 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
761
858
  }
762
859
  };
763
860
 
861
+ const onMouseEnterHandler = (
862
+ date: number,
863
+ isToday: boolean,
864
+ isDisabled: boolean,
865
+ ev: React.MouseEvent<HTMLSpanElement>
866
+ ) => {
867
+ const d = this.calculateDate(index, date, prevMonthDayRange, dayRange, true) || new Date();
868
+ const { months, days } = config;
869
+ const dayName = days.large[d.getDay()];
870
+ const dateData = {
871
+ value: d.getDate(),
872
+ isToday: isToday,
873
+ isDisabled: isDisabled,
874
+ todayDate: this.state.currDate,
875
+ fullDate: d,
876
+ date: d.getDate(),
877
+ month: months[d.getMonth()],
878
+ year: d.getFullYear(),
879
+ dayName: dayName,
880
+ };
881
+ if (onDateHover) onDateHover(dateData, ev);
882
+ };
883
+
764
884
  return Array.from({ length: noOfRows }, (_y, row) => {
765
885
  return (
766
886
  <div key={row} className="Calendar-valueRow">
@@ -876,6 +996,7 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
876
996
  className={valueClass}
877
997
  onClick={onClickHandler(date)}
878
998
  onMouseOver={onMouseOverHandler(date)}
999
+ onMouseEnter={onMouseEnterHandler.bind(this, date, today(), disabled)}
879
1000
  >
880
1001
  {date}
881
1002
  </Text>
@@ -891,6 +1012,7 @@ export class Calendar extends React.Component<CalendarProps, CalendarState> {
891
1012
  className={valueClass}
892
1013
  onClick={onClickHandler(date)}
893
1014
  onMouseOver={onMouseOverHandler(date)}
1015
+ onMouseEnter={onMouseEnterHandler.bind(this, date, today(), disabled)}
894
1016
  >
895
1017
  {date <= 0 ? prevMonthDayRange + date : date - dayRange}
896
1018
  </Text>
@@ -9,10 +9,10 @@ export const firstDayOfWeek = () => {
9
9
 
10
10
  const style = {
11
11
  flexWrap: 'wrap',
12
- };
12
+ } as const;
13
+ // to freeze the object for typescript
13
14
 
14
15
  return (
15
- // @ts-ignore
16
16
  <div className="d-flex" style={style}>
17
17
  {values.map((v, index) => (
18
18
  <div className="mr-9 mt-5" key={index}>
@@ -214,4 +214,31 @@ describe('Calendar compoennt', () => {
214
214
  fireEvent.click(month);
215
215
  expect(FunctionValue).toHaveBeenCalled();
216
216
  });
217
+
218
+ it('calls onMouseOver handler when date value is hovered', () => {
219
+ const { getAllByTestId } = render(
220
+ <Calendar date={new Date(2020, 2, 15)} rangePicker={false} onDateHover={FunctionValue} view="date" />
221
+ );
222
+ const date = getAllByTestId('DesignSystem-Calendar--dateValue')[0];
223
+ fireEvent.mouseOver(date);
224
+ expect(FunctionValue).toHaveBeenCalled();
225
+ });
226
+
227
+ it('calls onMouseOver handler when month value is hovered', () => {
228
+ const { getAllByTestId } = render(
229
+ <Calendar date={new Date(2020, 2, 15)} rangePicker={false} onMonthHover={FunctionValue} view="month" />
230
+ );
231
+ const month = getAllByTestId('DesignSystem-Calendar--monthValue')[0];
232
+ fireEvent.mouseOver(month);
233
+ expect(FunctionValue).toHaveBeenCalled();
234
+ });
235
+
236
+ it('calls onMouseOver handler when year value is hovered', () => {
237
+ const { getAllByTestId } = render(
238
+ <Calendar date={new Date(2020, 2, 15)} rangePicker={false} onYearHover={FunctionValue} view="year" />
239
+ );
240
+ const year = getAllByTestId('DesignSystem-Calendar--yearValue')[0];
241
+ fireEvent.mouseOver(year);
242
+ expect(FunctionValue).toHaveBeenCalled();
243
+ });
217
244
  });
@@ -151,9 +151,9 @@ export const translateToDate = (format: string, val: string, validators: Validat
151
151
  if (isValid(validators, val, format)) {
152
152
  const separator = format.includes('/') ? '/' : '-';
153
153
 
154
- let year: number = -1,
155
- month: number = -1,
156
- date: number = -1;
154
+ let year = -1,
155
+ month = -1,
156
+ date = -1;
157
157
  const v = val.split(separator);
158
158
  format.split(separator).forEach((f, i) => {
159
159
  switch (f) {