@spaced-out/ui-design-system 0.3.38-beta.0 → 0.3.39-beta.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 (307) hide show
  1. package/.cspell/custom-words.txt +4 -0
  2. package/.github/workflows/publish_to_npm.yml +32 -4
  3. package/CHANGELOG.md +16 -0
  4. package/dts-generator/.editorconfig +10 -0
  5. package/dts-generator/.gitattributes +4 -0
  6. package/dts-generator/README.md +63 -0
  7. package/dts-generator/convert.js +101 -0
  8. package/dts-generator/package.json +16 -0
  9. package/gulpfile.js +20 -1
  10. package/lib/components/Avatar/Avatar.d.ts +264 -0
  11. package/lib/components/Avatar/index.d.ts +1 -0
  12. package/lib/components/AvatarGroup/AvatarGroup.d.ts +161 -0
  13. package/lib/components/AvatarGroup/index.d.ts +1 -0
  14. package/lib/components/Badge/Badge.d.ts +138 -0
  15. package/lib/components/Badge/index.d.ts +1 -0
  16. package/lib/components/Banner/Banner.d.ts +52 -0
  17. package/lib/components/Banner/index.d.ts +1 -0
  18. package/lib/components/Breadcrumbs/BreadcrumbLink/BreadcrumbLink.d.ts +50 -0
  19. package/lib/components/Breadcrumbs/BreadcrumbLink/index.d.ts +1 -0
  20. package/lib/components/Breadcrumbs/Breadcrumbs.d.ts +64 -0
  21. package/lib/components/Breadcrumbs/index.d.ts +2 -0
  22. package/lib/components/Button/Button.d.ts +288 -0
  23. package/lib/components/Button/index.d.ts +14 -0
  24. package/lib/components/ButtonDropdown/ButtonDropdown.d.ts +192 -0
  25. package/lib/components/ButtonDropdown/SimpleButtonDropdown.d.ts +148 -0
  26. package/lib/components/ButtonDropdown/index.d.ts +2 -0
  27. package/lib/components/ButtonTabs/ButtonTab/ButtonTab.d.ts +82 -0
  28. package/lib/components/ButtonTabs/ButtonTab/index.d.ts +1 -0
  29. package/lib/components/ButtonTabs/ButtonTabDropdown.d.ts +118 -0
  30. package/lib/components/ButtonTabs/ButtonTabs.d.ts +113 -0
  31. package/lib/components/ButtonTabs/index.d.ts +2 -0
  32. package/lib/components/Card/Card.d.ts +163 -0
  33. package/lib/components/Card/index.d.ts +1 -0
  34. package/lib/components/Charts/ChartTooltip/index.d.ts +10 -0
  35. package/lib/components/Charts/ChartWrapper/ChartWrapper.d.ts +184 -0
  36. package/lib/components/Charts/ChartWrapper/index.d.ts +1 -0
  37. package/lib/components/Charts/ColumnChart/ColumnChart.d.ts +111 -0
  38. package/lib/components/Charts/ColumnChart/index.d.ts +1 -0
  39. package/lib/components/Charts/DonutChart/DonutChart.d.ts +142 -0
  40. package/lib/components/Charts/DonutChart/index.d.ts +1 -0
  41. package/lib/components/Charts/FunnelChart/FunnelChart.d.ts +99 -0
  42. package/lib/components/Charts/FunnelChart/index.d.ts +1 -0
  43. package/lib/components/Charts/LineChart/LineChart.d.ts +97 -0
  44. package/lib/components/Charts/LineChart/index.d.ts +1 -0
  45. package/lib/components/Charts/SpiderChart/SpiderChart.d.ts +95 -0
  46. package/lib/components/Charts/SpiderChart/index.d.ts +1 -0
  47. package/lib/components/Charts/index.d.ts +7 -0
  48. package/lib/components/ChatBubble/ChatBubble.d.ts +203 -0
  49. package/lib/components/ChatBubble/index.d.ts +1 -0
  50. package/lib/components/Checkbox/Checkbox.d.ts +165 -0
  51. package/lib/components/Checkbox/CheckboxGroup.d.ts +113 -0
  52. package/lib/components/Checkbox/index.d.ts +2 -0
  53. package/lib/components/Chip/Chip.d.ts +181 -0
  54. package/lib/components/Chip/index.d.ts +2 -0
  55. package/lib/components/CircularLoader/CircularLoader.d.ts +56 -0
  56. package/lib/components/CircularLoader/index.d.ts +1 -0
  57. package/lib/components/CollapsibleCard/CollapsibleCard.d.ts +134 -0
  58. package/lib/components/CollapsibleCard/index.d.ts +1 -0
  59. package/lib/components/Combobox/Combobox.d.ts +292 -0
  60. package/lib/components/Combobox/helper.d.ts +205 -0
  61. package/lib/components/Combobox/index.d.ts +1 -0
  62. package/lib/components/ConditionalWrapper/ConditionalWrapper.d.ts +12 -0
  63. package/lib/components/ConditionalWrapper/index.d.ts +1 -0
  64. package/lib/components/DateRangePicker/Calendar.d.ts +119 -0
  65. package/lib/components/DateRangePicker/DateRangePicker.d.ts +196 -0
  66. package/lib/components/DateRangePicker/DateRangeWrapper.d.ts +311 -0
  67. package/lib/components/DateRangePicker/Day.d.ts +70 -0
  68. package/lib/components/DateRangePicker/index.d.ts +1 -0
  69. package/lib/components/Dialog/Dialog.d.ts +208 -0
  70. package/lib/components/Dialog/index.d.ts +1 -0
  71. package/lib/components/Disclaimer/Disclaimer.d.ts +32 -0
  72. package/lib/components/Disclaimer/index.d.ts +1 -0
  73. package/lib/components/Dropdown/Dropdown.d.ts +145 -0
  74. package/lib/components/Dropdown/SimpleDropdown.d.ts +142 -0
  75. package/lib/components/Dropdown/index.d.ts +2 -0
  76. package/lib/components/EmptyState/EmptyImages/CalendarEmptyImage.d.ts +108 -0
  77. package/lib/components/EmptyState/EmptyImages/ChartEmptyImage.d.ts +194 -0
  78. package/lib/components/EmptyState/EmptyImages/DataEmptyImage.d.ts +116 -0
  79. package/lib/components/EmptyState/EmptyImages/FileEmptyImage.d.ts +133 -0
  80. package/lib/components/EmptyState/EmptyImages/MessageEmptyImage.d.ts +64 -0
  81. package/lib/components/EmptyState/EmptyImages/UploadEmptyImage.d.ts +67 -0
  82. package/lib/components/EmptyState/EmptyImages/index.d.ts +6 -0
  83. package/lib/components/EmptyState/EmptyState.d.ts +82 -0
  84. package/lib/components/EmptyState/index.d.ts +1 -0
  85. package/lib/components/ErrorMessage/ErrorImages/ForbiddenImage.d.ts +85 -0
  86. package/lib/components/ErrorMessage/ErrorImages/NotFoundImage.d.ts +117 -0
  87. package/lib/components/ErrorMessage/ErrorImages/ServerErrorImage.d.ts +237 -0
  88. package/lib/components/ErrorMessage/ErrorImages/UnauthorizedImage.d.ts +73 -0
  89. package/lib/components/ErrorMessage/ErrorImages/index.d.ts +4 -0
  90. package/lib/components/ErrorMessage/ErrorMessage.d.ts +86 -0
  91. package/lib/components/ErrorMessage/index.d.ts +1 -0
  92. package/lib/components/FileUpload/FileBlock/FileBlock.d.ts +137 -0
  93. package/lib/components/FileUpload/FileBlock/index.d.ts +1 -0
  94. package/lib/components/FileUpload/FileUpload.d.ts +190 -0
  95. package/lib/components/FileUpload/index.d.ts +2 -0
  96. package/lib/components/FocusManager/FocusManager.d.ts +52 -0
  97. package/lib/components/FocusManager/index.d.ts +1 -0
  98. package/lib/components/FocusManagerWithArrowKeyNavigation/FocusManagerWithArrowKeyNavigation.d.ts +137 -0
  99. package/lib/components/FocusManagerWithArrowKeyNavigation/index.d.ts +1 -0
  100. package/lib/components/FormTitleWrapper/FormTitleWrapper.d.ts +62 -0
  101. package/lib/components/FormTitleWrapper/index.d.ts +1 -0
  102. package/lib/components/Grid/Grid.d.ts +104 -0
  103. package/lib/components/Grid/index.d.ts +1 -0
  104. package/lib/components/Icon/ClickableIcon.d.ts +101 -0
  105. package/lib/components/Icon/Icon.d.ts +71 -0
  106. package/lib/components/Icon/Icon.docs.d.ts +138 -0
  107. package/lib/components/Icon/SemanticIcon.d.ts +42 -0
  108. package/lib/components/Icon/index.d.ts +3 -0
  109. package/lib/components/InContextAlert/InContextAlert.d.ts +210 -0
  110. package/lib/components/InContextAlert/index.d.ts +1 -0
  111. package/lib/components/InlineDropdown/InlineDropdown.d.ts +146 -0
  112. package/lib/components/InlineDropdown/SimpleInlineDropdown.d.ts +145 -0
  113. package/lib/components/InlineDropdown/index.d.ts +2 -0
  114. package/lib/components/Input/Input.d.ts +327 -0
  115. package/lib/components/Input/index.d.ts +1 -0
  116. package/lib/components/KPIBox/KPIBox.d.ts +89 -0
  117. package/lib/components/KPIBox/index.d.ts +1 -0
  118. package/lib/components/LinearLoader/LinearLoader.d.ts +44 -0
  119. package/lib/components/LinearLoader/index.d.ts +1 -0
  120. package/lib/components/Link/Link.d.ts +225 -0
  121. package/lib/components/Link/index.d.ts +1 -0
  122. package/lib/components/Menu/Menu.d.ts +379 -0
  123. package/lib/components/Menu/MenuOptionButton.d.ts +199 -0
  124. package/lib/components/Menu/index.d.ts +2 -0
  125. package/lib/components/Modal/Modal.d.ts +354 -0
  126. package/lib/components/Modal/index.d.ts +14 -0
  127. package/lib/components/Notification/Notification.d.ts +147 -0
  128. package/lib/components/Notification/index.d.ts +1 -0
  129. package/lib/components/OptionButton/OptionButton.d.ts +150 -0
  130. package/lib/components/OptionButton/SimpleOptionButton.d.ts +150 -0
  131. package/lib/components/OptionButton/index.d.ts +2 -0
  132. package/lib/components/PageTitle/PageTitle.d.ts +256 -0
  133. package/lib/components/PageTitle/index.d.ts +1 -0
  134. package/lib/components/Pagination/Pagination.d.ts +144 -0
  135. package/lib/components/Pagination/PaginationItem.d.ts +136 -0
  136. package/lib/components/Pagination/index.d.ts +1 -0
  137. package/lib/components/Panel/Panel.d.ts +168 -0
  138. package/lib/components/Panel/index.d.ts +9 -0
  139. package/lib/components/ProgressDonut/ProgressDonut.d.ts +102 -0
  140. package/lib/components/ProgressDonut/index.d.ts +1 -0
  141. package/lib/components/PromptChip/PromptChip.d.ts +167 -0
  142. package/lib/components/PromptChip/index.d.ts +1 -0
  143. package/lib/components/PromptInput/PromptInput.d.ts +189 -0
  144. package/lib/components/PromptInput/index.d.ts +1 -0
  145. package/lib/components/RadioButton/RadioButton.d.ts +132 -0
  146. package/lib/components/RadioButton/RadioGroup.d.ts +88 -0
  147. package/lib/components/RadioButton/index.d.ts +2 -0
  148. package/lib/components/RadioTile/RadioTile.d.ts +109 -0
  149. package/lib/components/RadioTile/index.d.ts +1 -0
  150. package/lib/components/RangeSlider/RangeSlider.d.ts +207 -0
  151. package/lib/components/RangeSlider/index.d.ts +1 -0
  152. package/lib/components/Rating/Rating.d.ts +131 -0
  153. package/lib/components/Rating/index.d.ts +1 -0
  154. package/lib/components/ScoreBar/ScoreBar.d.ts +122 -0
  155. package/lib/components/ScoreBar/index.d.ts +1 -0
  156. package/lib/components/SearchInput/SearchInput.d.ts +79 -0
  157. package/lib/components/SearchInput/index.d.ts +2 -0
  158. package/lib/components/Separator/Separator.d.ts +51 -0
  159. package/lib/components/Separator/index.d.ts +1 -0
  160. package/lib/components/Shimmer/Shimmer.d.ts +131 -0
  161. package/lib/components/Shimmer/index.d.ts +1 -0
  162. package/lib/components/SideMenuLink/SideMenuLink.d.ts +336 -0
  163. package/lib/components/SideMenuLink/index.d.ts +1 -0
  164. package/lib/components/StatusIndicator/StatusIndicator.d.ts +60 -0
  165. package/lib/components/StatusIndicator/index.d.ts +1 -0
  166. package/lib/components/Stepper/Step/Step.d.ts +119 -0
  167. package/lib/components/Stepper/Step/StepContent.d.ts +35 -0
  168. package/lib/components/Stepper/Step/StepLabel.d.ts +35 -0
  169. package/lib/components/Stepper/Step/index.d.ts +3 -0
  170. package/lib/components/Stepper/Stepper.d.ts +60 -0
  171. package/lib/components/Stepper/index.d.ts +2 -0
  172. package/lib/components/StickyBar/StickyBar.d.ts +55 -0
  173. package/lib/components/StickyBar/index.d.ts +1 -0
  174. package/lib/components/SubMenu/SubMenu.d.ts +89 -0
  175. package/lib/components/SubMenu/SubMenuGroup.d.ts +156 -0
  176. package/lib/components/SubMenu/SubMenuItem.d.ts +161 -0
  177. package/lib/components/SubMenu/SubMenuLink.d.ts +81 -0
  178. package/lib/components/SubMenu/index.d.ts +4 -0
  179. package/lib/components/Table/Cell.d.ts +107 -0
  180. package/lib/components/Table/DefaultRow.d.ts +144 -0
  181. package/lib/components/Table/DefaultTableHeader.d.ts +236 -0
  182. package/lib/components/Table/StaticTable.d.ts +198 -0
  183. package/lib/components/Table/Table.d.ts +113 -0
  184. package/lib/components/Table/Table.docs.d.ts +532 -0
  185. package/lib/components/Table/TableActionBar.d.ts +48 -0
  186. package/lib/components/Table/TableBottomBar.d.ts +20 -0
  187. package/lib/components/Table/TableTopBar.d.ts +20 -0
  188. package/lib/components/Table/dummyTableData.d.ts +2189 -0
  189. package/lib/components/Table/hooks.d.ts +98 -0
  190. package/lib/components/Table/index.d.ts +8 -0
  191. package/lib/components/Tabs/Tab/Tab.d.ts +146 -0
  192. package/lib/components/Tabs/Tab/index.d.ts +1 -0
  193. package/lib/components/Tabs/TabList/TabDropdown.d.ts +100 -0
  194. package/lib/components/Tabs/TabList/TabList.d.ts +157 -0
  195. package/lib/components/Tabs/TabList/index.d.ts +1 -0
  196. package/lib/components/Tabs/index.d.ts +2 -0
  197. package/lib/components/Text/Text.d.ts +1021 -0
  198. package/lib/components/Text/index.d.ts +30 -0
  199. package/lib/components/TextTile/TextTile.d.ts +40 -0
  200. package/lib/components/TextTile/index.d.ts +1 -0
  201. package/lib/components/Textarea/Textarea.d.ts +132 -0
  202. package/lib/components/Textarea/index.d.ts +2 -0
  203. package/lib/components/Timeline/Timeline.d.ts +40 -0
  204. package/lib/components/Timeline/TimelineItem/TimelineItem.d.ts +121 -0
  205. package/lib/components/Timeline/TimelineItem/index.d.ts +1 -0
  206. package/lib/components/Timeline/index.d.ts +2 -0
  207. package/lib/components/Toast/Toast.d.ts +248 -0
  208. package/lib/components/Toast/ToastContainer.d.ts +140 -0
  209. package/lib/components/Toast/ToastManager.d.ts +58 -0
  210. package/lib/components/Toast/index.d.ts +10 -0
  211. package/lib/components/Toggle/Toggle.d.ts +111 -0
  212. package/lib/components/Toggle/index.d.ts +1 -0
  213. package/lib/components/TokenListInput/TokenListInput.d.ts +333 -0
  214. package/lib/components/TokenListInput/TokenValueChips.d.ts +64 -0
  215. package/lib/components/TokenListInput/index.d.ts +1 -0
  216. package/lib/components/Tooltip/Tooltip.d.ts +186 -0
  217. package/lib/components/Tooltip/index.d.ts +1 -0
  218. package/lib/components/Truncate/Truncate.d.ts +87 -0
  219. package/lib/components/Truncate/index.d.ts +2 -0
  220. package/lib/components/TruncatedTextWithTooltip/TruncatedTextWithTooltip.d.ts +95 -0
  221. package/lib/components/TruncatedTextWithTooltip/index.d.ts +1 -0
  222. package/lib/components/Typeahead/SimpleTypeahead.d.ts +141 -0
  223. package/lib/components/Typeahead/Typeahead.d.ts +217 -0
  224. package/lib/components/Typeahead/index.d.ts +2 -0
  225. package/lib/components/WeekdayPicker/WeekdayPicker.d.ts +242 -0
  226. package/lib/components/WeekdayPicker/index.d.ts +1 -0
  227. package/lib/components/index.d.ts +71 -0
  228. package/lib/hooks/index.d.ts +12 -0
  229. package/lib/hooks/useArbitraryOptionAddition/index.d.ts +1 -0
  230. package/lib/hooks/useArbitraryOptionAddition/useArbitraryOptionAddition.d.ts +124 -0
  231. package/lib/hooks/useCopyToClipboard/index.d.ts +1 -0
  232. package/lib/hooks/useCopyToClipboard/useCopyToClipboard.d.ts +27 -0
  233. package/lib/hooks/useFileUpload/index.d.ts +1 -0
  234. package/lib/hooks/useFileUpload/useFileUpload.d.ts +342 -0
  235. package/lib/hooks/useFilteredOptions/index.d.ts +1 -0
  236. package/lib/hooks/useFilteredOptions/useFilteredOptions.d.ts +87 -0
  237. package/lib/hooks/useInputState/index.d.ts +1 -0
  238. package/lib/hooks/useInputState/useInputState.d.ts +22 -0
  239. package/lib/hooks/useLockedBody/index.d.ts +1 -0
  240. package/lib/hooks/useLockedBody/useLockedBody.d.ts +46 -0
  241. package/lib/hooks/useModal/index.d.ts +1 -0
  242. package/lib/hooks/useModal/useModal.d.ts +32 -0
  243. package/lib/hooks/useMountTransition/index.d.ts +24 -0
  244. package/lib/hooks/usePagination/index.d.ts +1 -0
  245. package/lib/hooks/usePagination/usePagination.d.ts +140 -0
  246. package/lib/hooks/useToastPortal/index.d.ts +1 -0
  247. package/lib/hooks/useToastPortal/useToastPortal.d.ts +31 -0
  248. package/lib/hooks/useToggle/index.d.ts +1 -0
  249. package/lib/hooks/useToggle/useToggle.d.ts +11 -0
  250. package/lib/hooks/useWindowSize/index.d.ts +1 -0
  251. package/lib/hooks/useWindowSize/useWindowSize.d.ts +28 -0
  252. package/lib/index.d.ts +5 -0
  253. package/lib/styles/index.d.ts +267 -0
  254. package/lib/styles/variables/_border.d.ts +12 -0
  255. package/lib/styles/variables/_color.d.ts +104 -0
  256. package/lib/styles/variables/_elevation.d.ts +7 -0
  257. package/lib/styles/variables/_font.d.ts +30 -0
  258. package/lib/styles/variables/_motion.d.ts +6 -0
  259. package/lib/styles/variables/_opacity.d.ts +15 -0
  260. package/lib/styles/variables/_shadow.d.ts +24 -0
  261. package/lib/styles/variables/_size.d.ts +57 -0
  262. package/lib/styles/variables/_space.d.ts +12 -0
  263. package/lib/types/charts.d.ts +225 -0
  264. package/lib/types/common.d.ts +10 -0
  265. package/lib/types/date-range-picker.d.ts +17 -0
  266. package/lib/types/date-range-picker.js.flow +2 -3
  267. package/lib/types/index.d.ts +6 -0
  268. package/lib/types/menu.d.ts +13 -0
  269. package/lib/types/toast.d.ts +32 -0
  270. package/lib/types/typography.d.ts +17 -0
  271. package/lib/utils/array/are-arrays-equal.d.ts +11 -0
  272. package/lib/utils/array/index.d.ts +1 -0
  273. package/lib/utils/charts/charts.d.ts +102 -0
  274. package/lib/utils/charts/columnChart.d.ts +51 -0
  275. package/lib/utils/charts/donutChart.d.ts +116 -0
  276. package/lib/utils/charts/funnelChart.d.ts +94 -0
  277. package/lib/utils/charts/helpers.d.ts +44 -0
  278. package/lib/utils/charts/index.d.ts +7 -0
  279. package/lib/utils/charts/lineChart.d.ts +44 -0
  280. package/lib/utils/charts/spiderChart.d.ts +46 -0
  281. package/lib/utils/charts/typography.d.ts +42 -0
  282. package/lib/utils/classify/index.d.ts +27 -0
  283. package/lib/utils/click-away/click-away.d.ts +194 -0
  284. package/lib/utils/click-away/index.d.ts +1 -0
  285. package/lib/utils/date-range-picker/date-range-picker.d.ts +391 -0
  286. package/lib/utils/date-range-picker/index.d.ts +2 -0
  287. package/lib/utils/date-range-picker/timezones.d.ts +262 -0
  288. package/lib/utils/dom/dom.d.ts +245 -0
  289. package/lib/utils/dom/index.d.ts +1 -0
  290. package/lib/utils/helpers/helpers.d.ts +48 -0
  291. package/lib/utils/helpers/index.d.ts +1 -0
  292. package/lib/utils/index.d.ts +14 -0
  293. package/lib/utils/makeClassNameComponent/index.d.ts +1 -0
  294. package/lib/utils/makeClassNameComponent/makeClassNameComponent.d.ts +73 -0
  295. package/lib/utils/menu/index.d.ts +1 -0
  296. package/lib/utils/merge-refs/index.d.ts +1 -0
  297. package/lib/utils/merge-refs/merge-refs.d.ts +15 -0
  298. package/lib/utils/rating/index.d.ts +1 -0
  299. package/lib/utils/rating/rating.d.ts +31 -0
  300. package/lib/utils/score-bar/index.d.ts +1 -0
  301. package/lib/utils/score-bar/score-bar.d.ts +54 -0
  302. package/lib/utils/string/index.d.ts +1 -0
  303. package/lib/utils/string/string.d.ts +30 -0
  304. package/lib/utils/token-list-input/token-list-input.d.ts +32 -0
  305. package/lib/utils/tokens/index.d.ts +1 -0
  306. package/lib/utils/tokens/tokens.d.ts +230 -0
  307. package/package.json +5 -5
@@ -0,0 +1,146 @@
1
+ import {$ReadOnly} from 'utility-types';
2
+ import * as React from 'react';
3
+ import {
4
+ // $FlowFixMe[untyped-import]
5
+ autoUpdate, // $FlowFixMe[untyped-import]
6
+ flip, // $FlowFixMe[untyped-import]
7
+ offset, // $FlowFixMe[untyped-import]
8
+ shift, // $FlowFixMe[untyped-import]
9
+ useFloating,
10
+ } from '@floating-ui/react';
11
+ import {spaceNone, spaceXXSmall} from '../../styles/variables/_space';
12
+ import {classify} from '../../utils/classify';
13
+ import type {ClickAwayRefType} from '../../utils/click-away';
14
+ import {ClickAway} from '../../utils/click-away';
15
+ import {mergeRefs} from '../../utils/merge-refs';
16
+ import type {UnstyledButtonProps} from '../Button';
17
+ import {UnstyledButton} from '../Button';
18
+ import type {AnchorType} from '../ButtonDropdown';
19
+ import {Icon} from '../Icon';
20
+ import type {MenuOption, MenuProps} from '../Menu';
21
+ import {Menu} from '../Menu';
22
+ import {Truncate} from '../Truncate';
23
+ import css from './InlineDropdown.module.css';
24
+ type ClassNames = $ReadOnly<{
25
+ buttonWrapper?: string;
26
+ dropdownContainer?: string;
27
+ }>;
28
+ export type InlineDropdownProps = UnstyledButtonProps & {
29
+ classNames?: ClassNames;
30
+ menu?: MenuProps;
31
+ anchorPosition?: AnchorType;
32
+ onOptionSelect?: (
33
+ option: MenuOption,
34
+ arg1: React.SyntheticEvent<HTMLElement> | null | undefined,
35
+ ) => unknown;
36
+ onMenuOpen?: () => unknown;
37
+ onMenuClose?: () => unknown;
38
+ size?: 'medium' | 'small' | 'extraSmall';
39
+ clickAwayRef?: ClickAwayRefType;
40
+ };
41
+ export const InlineDropdown: React$AbstractComponent<
42
+ InlineDropdownProps,
43
+ HTMLDivElement
44
+ > = React.forwardRef<InlineDropdownProps, HTMLDivElement>(
45
+ (
46
+ {
47
+ anchorPosition = 'bottom-start',
48
+ size = 'medium',
49
+ onOptionSelect,
50
+ menu,
51
+ classNames,
52
+ disabled,
53
+ onMenuOpen,
54
+ onMenuClose,
55
+ children,
56
+ clickAwayRef,
57
+ ...restButtonProps
58
+ }: InlineDropdownProps,
59
+ ref,
60
+ ): React.ReactNode => {
61
+ const menuBtnRef = React.useRef(null);
62
+ React.useImperativeHandle(ref, () => menuBtnRef.current);
63
+ const {x, y, refs, strategy} = useFloating({
64
+ open: true,
65
+ strategy: 'absolute',
66
+ placement: anchorPosition,
67
+ whileElementsMounted: autoUpdate,
68
+ middleware: [shift(), flip(), offset(parseInt(spaceXXSmall))],
69
+ });
70
+
71
+ const onMenuToggle = (isOpen: boolean) => {
72
+ isOpen ? onMenuOpen && onMenuOpen() : onMenuClose && onMenuClose();
73
+ };
74
+
75
+ return (
76
+ <ClickAway onChange={onMenuToggle} clickAwayRef={clickAwayRef}>
77
+ {({isOpen, onOpen, clickAway, boundaryRef, triggerRef}) => (
78
+ <div
79
+ data-testid="InlineDropdown"
80
+ className={classify(
81
+ css.inlineDropdownContainer,
82
+ classNames?.dropdownContainer,
83
+ )}
84
+ ref={menuBtnRef}
85
+ >
86
+ <UnstyledButton
87
+ {...restButtonProps}
88
+ disabled={disabled}
89
+ ref={mergeRefs([refs.setReference, triggerRef])}
90
+ onClick={(e) => {
91
+ e.stopPropagation();
92
+ onOpen();
93
+ }}
94
+ className={classify(
95
+ css.inlineButton,
96
+ {
97
+ [css.disabled]: disabled,
98
+ },
99
+ css[size],
100
+ classNames?.buttonWrapper,
101
+ )}
102
+ >
103
+ <Truncate>{children}</Truncate>
104
+ <Icon
105
+ name={isOpen ? 'caret-up' : 'caret-down'}
106
+ size="small"
107
+ type="solid"
108
+ className={classify({
109
+ [css.disabled]: disabled,
110
+ })}
111
+ />
112
+ </UnstyledButton>
113
+ {isOpen && menu && (
114
+ <div
115
+ ref={mergeRefs([refs.setFloating, boundaryRef])}
116
+ style={{
117
+ display: 'flex',
118
+ position: strategy,
119
+ top: y ?? spaceNone,
120
+ left: x ?? spaceNone,
121
+ }}
122
+ >
123
+ <Menu
124
+ {...menu}
125
+ onSelect={(option, e) => {
126
+ onOptionSelect && onOptionSelect(option, e);
127
+
128
+ if (
129
+ // option.keepMenuOpenOnOptionSelect - to allow the menu persist its open stat upon option selection in normal variant
130
+ !option.keepMenuOpenOnOptionSelect &&
131
+ (!menu.optionsVariant || menu.optionsVariant === 'normal')
132
+ ) {
133
+ clickAway();
134
+ }
135
+ }}
136
+ size={menu.size || 'medium'}
137
+ onTabOut={clickAway}
138
+ />
139
+ </div>
140
+ )}
141
+ </div>
142
+ )}
143
+ </ClickAway>
144
+ );
145
+ },
146
+ );
@@ -0,0 +1,145 @@
1
+ import {$ReadOnly} from 'utility-types';
2
+ import * as React from 'react';
3
+ import type {MenuClassNames, MenuLabelTooltip} from '../../types/menu';
4
+ import type {ClickAwayRefType} from '../../utils/click-away';
5
+ import {
6
+ getButtonLabelFromSelectedKeys,
7
+ getSelectedKeysFromSelectedOption,
8
+ } from '../../utils/menu';
9
+ import type {ButtonProps} from '../Button';
10
+ import type {AnchorType} from '../ButtonDropdown';
11
+ import type {MenuOption, MenuOptionsVariant, Virtualization} from '../Menu';
12
+ import {InlineDropdown} from './InlineDropdown';
13
+ type ClassNames = $ReadOnly<{
14
+ buttonWrapper?: string;
15
+ dropdownContainer?: string;
16
+ }>;
17
+ export type SimpleInlineDropdownRef = {
18
+ selectedKeys?: Array<string>;
19
+ };
20
+ export type SimpleInlineDropdownProps = ButtonProps & {
21
+ classNames?: ClassNames;
22
+ anchorPosition?: AnchorType;
23
+ // Menu props
24
+ options?: Array<MenuOption>;
25
+ optionsVariant?: MenuOptionsVariant;
26
+ allowSearch?: boolean;
27
+ selectedKeys?: Array<string>;
28
+ showLabelTooltip?: MenuLabelTooltip;
29
+ allowWrap?: boolean;
30
+ // events
31
+ onOptionSelect?: (
32
+ option: MenuOption,
33
+ arg1: React.SyntheticEvent<HTMLElement> | null | undefined,
34
+ ) => unknown;
35
+ onMenuOpen?: () => unknown;
36
+ onMenuClose?: () => unknown;
37
+ menuVirtualization?: Virtualization;
38
+ header?: React.ReactNode;
39
+ footer?: React.ReactNode;
40
+ menuClassNames?: MenuClassNames;
41
+ // Resolvers
42
+ resolveLabel?: (option: MenuOption) => string | React.ReactNode;
43
+ resolveSecondaryLabel?: (option: MenuOption) => string | React.ReactNode;
44
+ clickAwayRef?: ClickAwayRefType;
45
+ };
46
+
47
+ const SimpleInlineDropdownBase = (props: SimpleInlineDropdownProps, ref) => {
48
+ const {
49
+ size = 'medium',
50
+ classNames,
51
+ anchorPosition,
52
+ options,
53
+ optionsVariant,
54
+ allowSearch,
55
+ selectedKeys,
56
+ onOptionSelect,
57
+ onMenuOpen,
58
+ onMenuClose,
59
+ resolveLabel,
60
+ resolveSecondaryLabel,
61
+ children,
62
+ isFluid,
63
+ menuVirtualization,
64
+ header,
65
+ footer,
66
+ menuClassNames,
67
+ showLabelTooltip,
68
+ clickAwayRef,
69
+ allowWrap = false,
70
+ ...buttonProps
71
+ } = props;
72
+ const [btnText, setBtnText] = React.useState('');
73
+ const [inlineDropdownSelectedKeys, setInlineDropdownSelectedKeys] =
74
+ React.useState(selectedKeys);
75
+ React.useEffect(() => {
76
+ const newBtnText = getButtonLabelFromSelectedKeys(selectedKeys, children);
77
+ setInlineDropdownSelectedKeys(selectedKeys);
78
+ setBtnText(newBtnText);
79
+ }, [selectedKeys]);
80
+
81
+ const handleOptionChange = (selectedOption: MenuOption, e) => {
82
+ e?.stopPropagation();
83
+ let newSelectedKeys = [];
84
+
85
+ if (optionsVariant === 'checkbox') {
86
+ newSelectedKeys = getSelectedKeysFromSelectedOption(
87
+ selectedOption,
88
+ inlineDropdownSelectedKeys,
89
+ );
90
+ } else {
91
+ newSelectedKeys = [selectedOption.key];
92
+ }
93
+
94
+ const newBtnText = getButtonLabelFromSelectedKeys(
95
+ newSelectedKeys,
96
+ children,
97
+ );
98
+ setInlineDropdownSelectedKeys(newSelectedKeys);
99
+ setBtnText(newBtnText);
100
+ setTimeout(() => {
101
+ onOptionSelect?.(selectedOption, e);
102
+ });
103
+ };
104
+
105
+ React.useImperativeHandle(ref, () => ({
106
+ selectedKeys: inlineDropdownSelectedKeys,
107
+ }));
108
+ return (
109
+ <InlineDropdown
110
+ {...buttonProps}
111
+ anchorPosition={anchorPosition}
112
+ classNames={classNames}
113
+ size={size}
114
+ onOptionSelect={handleOptionChange}
115
+ onMenuOpen={onMenuOpen}
116
+ onMenuClose={onMenuClose}
117
+ clickAwayRef={clickAwayRef}
118
+ menu={{
119
+ isFluid,
120
+ options,
121
+ selectedKeys: inlineDropdownSelectedKeys,
122
+ optionsVariant,
123
+ allowSearch,
124
+ resolveLabel,
125
+ resolveSecondaryLabel,
126
+ size: size === 'extraSmall' ? 'small' : size,
127
+ virtualization: menuVirtualization,
128
+ header,
129
+ footer,
130
+ classNames: menuClassNames,
131
+ showLabelTooltip,
132
+ allowWrap,
133
+ }}
134
+ >
135
+ {optionsVariant === 'checkbox' ? btnText : children}
136
+ </InlineDropdown>
137
+ );
138
+ };
139
+
140
+ export const SimpleInlineDropdown: React.AbstractComponent<
141
+ SimpleInlineDropdownProps,
142
+ SimpleInlineDropdownRef
143
+ > = React.forwardRef<SimpleInlineDropdownProps, SimpleInlineDropdownRef>(
144
+ SimpleInlineDropdownBase,
145
+ );
@@ -0,0 +1,2 @@
1
+ export * from './InlineDropdown';
2
+ export * from './SimpleInlineDropdown';
@@ -0,0 +1,327 @@
1
+ import {$ReadOnly, $Values} from 'utility-types';
2
+ import * as React from 'react';
3
+ import {classify} from '../../utils/classify';
4
+ import type {IconType} from '../Icon';
5
+ import {Icon} from '../Icon';
6
+ import {BodySmall, FormLabelSmall} from '../Text';
7
+ import css from './Input.module.css';
8
+ type ClassNames = $ReadOnly<{
9
+ box?: string;
10
+ iconLeft?: string;
11
+ iconRight?: string;
12
+ wrapper?: string;
13
+ }>;
14
+ export const EXPONENT_CHARACTER_LIST = ['E', 'e'];
15
+ export const INPUT_TYPES = Object.freeze({
16
+ text: 'text',
17
+ number: 'number',
18
+ password: 'password',
19
+ email: 'email',
20
+ tel: 'tel',
21
+ url: 'url',
22
+ date: 'date',
23
+ 'datetime-local': 'datetime-local',
24
+ time: 'time',
25
+ week: 'week',
26
+ month: 'month',
27
+ color: 'color',
28
+ search: 'search',
29
+ });
30
+ export type InputType = $Values<typeof INPUT_TYPES>;
31
+ export type InputOnChangeParamsType = {
32
+ evt: React.SyntheticEvent<HTMLInputElement>;
33
+ isEnter?: boolean;
34
+ };
35
+ export type InputProps = {
36
+ value?: string;
37
+ onChange?: (
38
+ evt: React.SyntheticEvent<HTMLInputElement>,
39
+ isEnter?: boolean,
40
+ ) => unknown;
41
+ classNames?: ClassNames;
42
+ onFocus?: (e: React.SyntheticEvent<HTMLInputElement>) => unknown;
43
+ onBlur?: (e: React.SyntheticEvent<HTMLInputElement>) => unknown;
44
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => unknown;
45
+ onPaste?: (e: ClipboardEvent) => unknown;
46
+ onIconRightClick?:
47
+ | ((arg0: React.SyntheticEvent<HTMLElement>) => unknown)
48
+ | null
49
+ | undefined;
50
+ onContainerClick?:
51
+ | ((arg0: React.SyntheticEvent<HTMLElement>) => unknown)
52
+ | null
53
+ | undefined;
54
+ name?: string;
55
+ disabled?: boolean;
56
+ placeholder?: string;
57
+ locked?: boolean;
58
+ error?: boolean;
59
+ errorText?: string;
60
+ label?: string | React.ReactNode;
61
+ helperText?: string | React.ReactNode;
62
+ type?: InputType;
63
+ size?: 'medium' | 'small';
64
+ iconLeftName?: string;
65
+ iconLeftType?: IconType;
66
+ iconRightName?: string;
67
+ iconRightType?: IconType;
68
+ required?: boolean;
69
+ readOnly?: boolean;
70
+ boxRef?: (arg0: HTMLElement | null | undefined) => unknown;
71
+ minLength?: string;
72
+ maxLength?: string;
73
+ pattern?: string;
74
+ min?: string;
75
+ max?: string;
76
+ autoComplete?: string;
77
+
78
+ /* Note(Nishant): Restricts typing `e` and `E` in the number input when
79
+ set to true. We have baked this condition in the keydown handler itself so
80
+ this would restrict and not show these exponent characters when typed
81
+ **/
82
+ disallowExponents?: boolean;
83
+
84
+ /** The step attribute is a number that specifies the granularity that the value must adhere to, or the special value any.
85
+ * Only values which are equal to the basis for stepping (min if specified, value otherwise, and an
86
+ * appropriate default value if neither of those is provided) are valid. */
87
+ step?: string;
88
+ hideNumberSpinner?: boolean;
89
+ hidePasswordToggleIcon?: boolean;
90
+ };
91
+
92
+ const Input_ = (props: InputProps, ref): React.ReactNode => {
93
+ const {
94
+ value,
95
+ type,
96
+ onChange,
97
+ onFocus,
98
+ onBlur,
99
+ onIconRightClick,
100
+ onContainerClick,
101
+ name,
102
+ disabled,
103
+ placeholder,
104
+ error,
105
+ locked,
106
+ errorText,
107
+ label,
108
+ helperText,
109
+ classNames,
110
+ size = 'medium',
111
+ iconLeftName = '',
112
+ iconLeftType = 'regular',
113
+ iconRightName = '',
114
+ iconRightType = 'regular',
115
+ required,
116
+ readOnly,
117
+ boxRef,
118
+ onKeyDown,
119
+ disallowExponents,
120
+ hideNumberSpinner,
121
+ hidePasswordToggleIcon,
122
+ ...inputProps
123
+ } = props;
124
+ const [showPassword, setShowPassword] = React.useState(false);
125
+ const controlledInputFilled = value !== '';
126
+
127
+ const handleRightIconClick = (e: React.SyntheticEvent<HTMLElement>) => {
128
+ if (locked || disabled) {
129
+ return;
130
+ }
131
+
132
+ if (type === 'password') {
133
+ setShowPassword(!showPassword);
134
+ }
135
+
136
+ onIconRightClick && onIconRightClick(e);
137
+ };
138
+
139
+ const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
140
+ if (type === INPUT_TYPES.number && disallowExponents) {
141
+ if (EXPONENT_CHARACTER_LIST.includes(e.key)) {
142
+ e.preventDefault();
143
+ }
144
+ }
145
+
146
+ onKeyDown?.(e);
147
+ };
148
+
149
+ return (
150
+ <div
151
+ className={classify(
152
+ css.wrapper,
153
+ {
154
+ [css.filled]: controlledInputFilled ?? false,
155
+ [css.withError]: error ?? false,
156
+ },
157
+ classNames?.wrapper,
158
+ )}
159
+ >
160
+ {Boolean(label) && (
161
+ <div className={css.info}>
162
+ <div className={css.infoContent}>
163
+ <FormLabelSmall color="secondary">{label ?? ''}</FormLabelSmall>
164
+ &nbsp;
165
+ {required && <FormLabelSmall color="danger">{'*'}</FormLabelSmall>}
166
+ </div>
167
+ </div>
168
+ )}
169
+ <div
170
+ className={classify(
171
+ css.box,
172
+ {
173
+ [css.inputDisabled]: disabled ?? false,
174
+ [css.medium]: size === 'medium',
175
+ [css.small]: size === 'small',
176
+ [css.locked]: locked,
177
+ [css.color]: type === 'color',
178
+ [css.hideNumberSpinner]: hideNumberSpinner,
179
+ },
180
+ classNames?.box,
181
+ )}
182
+ onClick={!(disabled || locked) ? onContainerClick : null}
183
+ ref={boxRef}
184
+ >
185
+ {iconLeftName && (
186
+ <Icon
187
+ className={classify(classNames?.iconLeft)}
188
+ name={iconLeftName}
189
+ color={disabled ? 'disabled' : 'secondary'}
190
+ size="small"
191
+ type={iconLeftType}
192
+ />
193
+ )}
194
+ <input
195
+ {...inputProps}
196
+ disabled={locked || disabled}
197
+ name={name}
198
+ ref={ref}
199
+ placeholder={placeholder}
200
+ value={value}
201
+ onChange={onChange}
202
+ onFocus={onFocus}
203
+ onBlur={onBlur}
204
+ type={showPassword ? 'text' : type}
205
+ readOnly={readOnly && 'readOnly'}
206
+ onKeyDown={handleKeyDown}
207
+ />
208
+ {type === 'color' && (
209
+ <div
210
+ className={classify(css.colorText, css[size], {
211
+ [css.hasValue]: value,
212
+ })}
213
+ >
214
+ {value ? value : placeholder}
215
+ </div>
216
+ )}
217
+ <RightInputIcon
218
+ isEmail={type === 'email'}
219
+ isPassword={type === 'password'}
220
+ showPassword={showPassword}
221
+ showPasswordToggleIcon={!hidePasswordToggleIcon}
222
+ isLocked={locked}
223
+ isDisabled={disabled}
224
+ onClick={handleRightIconClick}
225
+ iconRightName={iconRightName}
226
+ iconRightType={iconRightType}
227
+ className={classNames?.iconRight}
228
+ />
229
+ </div>
230
+ {(Boolean(helperText) || error) && (
231
+ <div className={css.info}>
232
+ {error && errorText ? (
233
+ <BodySmall color="danger">{errorText}</BodySmall>
234
+ ) : typeof helperText === 'string' ? (
235
+ <BodySmall color={disabled ? 'disabled' : 'secondary'}>
236
+ {helperText}
237
+ </BodySmall>
238
+ ) : (
239
+ helperText
240
+ )}
241
+ </div>
242
+ )}
243
+ </div>
244
+ );
245
+ };
246
+
247
+ const RightInputIcon = ({
248
+ isEmail,
249
+ isPassword,
250
+ showPassword,
251
+ showPasswordToggleIcon,
252
+ isLocked,
253
+ isDisabled,
254
+ iconRightName,
255
+ iconRightType,
256
+ ...rightIconProps
257
+ }: {
258
+ isEmail?: boolean;
259
+ isPassword?: boolean;
260
+ showPassword?: boolean;
261
+ showPasswordToggleIcon?: boolean;
262
+ isLocked?: boolean;
263
+ isDisabled?: boolean;
264
+ onClick?:
265
+ | ((arg0: React.SyntheticEvent<HTMLElement>) => unknown)
266
+ | null
267
+ | undefined;
268
+ iconRightName?: string;
269
+ iconRightType?: IconType;
270
+ className?: string;
271
+ }): React.ReactNode => {
272
+ if (isLocked) {
273
+ return (
274
+ <Icon
275
+ name="lock"
276
+ color={isDisabled ? 'disabled' : 'secondary'}
277
+ size="small"
278
+ {...rightIconProps}
279
+ />
280
+ );
281
+ }
282
+
283
+ if (isEmail) {
284
+ return (
285
+ <Icon
286
+ name="at"
287
+ color={isDisabled ? 'disabled' : 'secondary'}
288
+ size="small"
289
+ type={iconRightType}
290
+ {...rightIconProps}
291
+ />
292
+ );
293
+ }
294
+
295
+ if (isPassword && showPasswordToggleIcon) {
296
+ return (
297
+ <Icon
298
+ name={showPassword ? 'eye-slash' : 'eye'}
299
+ color={isDisabled ? 'disabled' : 'secondary'}
300
+ size="small"
301
+ type={iconRightType}
302
+ {...rightIconProps}
303
+ className={classify(css.rightClickableIcon, {
304
+ [css.disabled]: isDisabled || isLocked,
305
+ })}
306
+ />
307
+ );
308
+ }
309
+
310
+ if (iconRightName) {
311
+ return (
312
+ <Icon
313
+ name={iconRightName || ''}
314
+ color={isDisabled ? 'disabled' : 'secondary'}
315
+ size="small"
316
+ type={iconRightType}
317
+ {...rightIconProps}
318
+ />
319
+ );
320
+ }
321
+
322
+ return <></>;
323
+ };
324
+
325
+ export const Input = React.forwardRef<InputProps, HTMLInputElement>(
326
+ Input_,
327
+ ) as React$AbstractComponent<InputProps, HTMLInputElement>;
@@ -0,0 +1 @@
1
+ export * from './Input';
@@ -0,0 +1,89 @@
1
+ import {$ReadOnly} from 'utility-types';
2
+ import * as React from 'react';
3
+ import type {AlertSemanticType} from '../../types/common';
4
+ import classify from '../../utils/classify';
5
+ import type {IconSize, IconType} from '../Icon';
6
+ import {SemanticIcon} from '../Icon';
7
+ import css from './KPIBox.module.css';
8
+ type ClassNames = $ReadOnly<{
9
+ wrapper?: string;
10
+ topFoldContent?: string;
11
+ middleFoldContent?: string;
12
+ bottomFoldContent?: string;
13
+ }>;
14
+ export type KPIBoxProps = {
15
+ classNames?: ClassNames;
16
+ semantic?: AlertSemanticType;
17
+ topContent?: React.ReactNode;
18
+ middleContent?: React.ReactNode;
19
+ bottomContent?: React.ReactNode;
20
+ iconName?: string;
21
+ iconSize?: IconSize;
22
+ iconType?: IconType;
23
+ };
24
+ export const KPIBox: React$AbstractComponent<KPIBoxProps, HTMLDivElement> =
25
+ React.forwardRef<KPIBoxProps, HTMLDivElement>(
26
+ (
27
+ {
28
+ classNames,
29
+ semantic = 'neutral',
30
+ topContent,
31
+ middleContent,
32
+ bottomContent,
33
+ iconName,
34
+ iconSize = 'large',
35
+ iconType = 'solid',
36
+ ...props
37
+ }: KPIBoxProps,
38
+ ref,
39
+ ) => (
40
+ <div
41
+ {...props}
42
+ ref={ref}
43
+ data-testid="KPIBox"
44
+ className={classify(css.wrapper, classNames?.wrapper)}
45
+ >
46
+ {!!iconName && (
47
+ <SemanticIcon
48
+ semantic={semantic}
49
+ name={iconName}
50
+ size={iconSize}
51
+ type={iconType}
52
+ />
53
+ )}
54
+
55
+ <div className={css.textContainer}>
56
+ {!!topContent && (
57
+ <div
58
+ className={classify(
59
+ css.topFoldContent,
60
+ classNames?.topFoldContent,
61
+ )}
62
+ >
63
+ {topContent}
64
+ </div>
65
+ )}
66
+ {!!middleContent && (
67
+ <div
68
+ className={classify(
69
+ css.middleFoldContent,
70
+ classNames?.middleFoldContent,
71
+ )}
72
+ >
73
+ {middleContent}
74
+ </div>
75
+ )}
76
+ {!!bottomContent && (
77
+ <div
78
+ className={classify(
79
+ css.bottomFoldContent,
80
+ classNames?.bottomFoldContent,
81
+ )}
82
+ >
83
+ {bottomContent}
84
+ </div>
85
+ )}
86
+ </div>
87
+ </div>
88
+ ),
89
+ );