@integry/sdk 4.5.2 → 4.5.4

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 (279) hide show
  1. package/.vscode/launch.json +2 -2
  2. package/THIRD_PARTY_LICENSES +0 -37
  3. package/dist/esm/index.csm.d.ts +12 -2
  4. package/dist/esm/index.csm.js +7262 -1
  5. package/dist/umd/index.umd.d.ts +9 -1
  6. package/dist/umd/index.umd.js +7262 -1
  7. package/jest.config.cjs +10 -0
  8. package/package.json +10 -4
  9. package/src/components/AddTagButton/index.ts +23 -0
  10. package/src/components/BasicSelect/index.ts +114 -0
  11. package/src/components/BasicSelect/styles.module.scss +44 -0
  12. package/src/components/Button/index.ts +94 -0
  13. package/src/components/Button/styles.module.scss +152 -0
  14. package/src/components/CheckboxGroup/Checkbox.ts +104 -0
  15. package/src/components/CheckboxGroup/index.ts +190 -0
  16. package/src/components/CheckboxGroup/styles.module.scss +63 -0
  17. package/src/components/CollapsedMenu/index.ts +101 -0
  18. package/src/components/CollapsedMenu/styles.module.scss +46 -0
  19. package/src/components/ConfigureFieldWrapper/index.ts +85 -0
  20. package/src/components/ConfigureFieldWrapper/styles.module.scss +57 -0
  21. package/src/components/EditableText/index.ts +121 -0
  22. package/src/components/EditableText/styles.module.scss +38 -0
  23. package/src/components/EditableTextArea/index.ts +143 -0
  24. package/src/components/EditableTextArea/styles.module.scss +91 -0
  25. package/src/components/ErrorMessage/index.ts +16 -0
  26. package/src/components/ErrorMessage/styles.module.scss +19 -0
  27. package/src/components/ErrorPage/index.ts +42 -0
  28. package/src/components/ErrorPage/styles.module.scss +26 -0
  29. package/src/components/Footer/index.ts +41 -0
  30. package/src/components/Footer/styles.module.scss +40 -0
  31. package/src/components/HTMLContent/index.tsx +275 -0
  32. package/src/components/HTMLContent/styles.module.scss +3 -0
  33. package/src/components/InfoBox/index.ts +48 -0
  34. package/src/components/InfoBox/styles.module.scss +21 -0
  35. package/src/components/Input/BaseInput/index.ts +170 -0
  36. package/src/components/Input/BaseInput/styles.module.scss +94 -0
  37. package/src/components/Input/DateInput/index.ts +103 -0
  38. package/src/components/Input/DateInput/styles.module.scss +50 -0
  39. package/src/components/Input/Input/index.ts +206 -0
  40. package/src/components/Input/Input/styles.module.scss +14 -0
  41. package/src/components/Input/PasswordInput/index.ts +164 -0
  42. package/src/components/Input/PasswordInput/styles.module.scss +37 -0
  43. package/src/components/Input/index.ts +7 -0
  44. package/src/components/Label/index.ts +61 -0
  45. package/src/components/Label/styles.module.scss +41 -0
  46. package/src/components/LargeLoader/index.ts +25 -0
  47. package/src/components/LargeLoader/styles.module.scss +16 -0
  48. package/src/components/Listbox/ListBoxItem.ts +57 -0
  49. package/src/components/Listbox/index.ts +479 -0
  50. package/src/components/Listbox/styles.module.scss +197 -0
  51. package/src/components/Loader/index.ts +25 -0
  52. package/src/components/Loader/styles.module.scss +16 -0
  53. package/src/components/MediaGallery/MediaGalleryModal.ts +82 -0
  54. package/src/components/MediaGallery/MediaSlider.ts +76 -0
  55. package/src/components/MediaGallery/index.ts +92 -0
  56. package/src/components/MediaGallery/styles.module.scss +156 -0
  57. package/src/components/MediaUpload/index.ts +233 -0
  58. package/src/components/MediaUpload/styles.module.scss +118 -0
  59. package/src/components/Modal/index.ts +87 -0
  60. package/src/components/Modal/styles.module.scss +441 -0
  61. package/src/components/MultipurposeField/Dropdown/ListBoxItem.tsx +58 -0
  62. package/src/components/MultipurposeField/Dropdown/index.tsx +981 -0
  63. package/src/components/MultipurposeField/Dropdown/styles.module.scss +208 -0
  64. package/src/components/MultipurposeField/TagMenu/index.ts +384 -0
  65. package/src/components/MultipurposeField/TagMenu/styles.module.scss +136 -0
  66. package/src/components/MultipurposeField/TagOptions/index.tsx +83 -0
  67. package/src/components/MultipurposeField/TagOptions/styles.module.scss +95 -0
  68. package/src/components/MultipurposeField/index.tsx +687 -0
  69. package/src/components/MultipurposeField/styles.module.scss +56 -0
  70. package/src/components/NewModal/index.ts +69 -0
  71. package/src/components/NewModal/styles.module.scss +70 -0
  72. package/src/components/OverflowTooltip/index.tsx +59 -0
  73. package/src/components/PopUp/ConfirmationPopUp/index.ts +58 -0
  74. package/src/components/PopUp/ConfirmationPopUp/styles.module.scss +49 -0
  75. package/src/components/PopUp/SuccessPopUp/index.ts +62 -0
  76. package/src/components/PopUp/SuccessPopUp/styles.module.scss +38 -0
  77. package/src/components/RadioGroup/Radio.ts +129 -0
  78. package/src/components/RadioGroup/index.ts +169 -0
  79. package/src/components/RadioGroup/styles.module.scss +81 -0
  80. package/src/components/Search/index.ts +69 -0
  81. package/src/components/Search/styles.module.scss +149 -0
  82. package/src/components/TabBar/Tab.ts +33 -0
  83. package/src/components/TabBar/index.ts +64 -0
  84. package/src/components/TabBar/styles.module.scss +43 -0
  85. package/src/components/Tag/index.ts +29 -0
  86. package/src/components/Tag/styles.module.scss +57 -0
  87. package/src/components/TextArea/index.ts +172 -0
  88. package/src/components/TextArea/styles.module.scss +70 -0
  89. package/src/components/TextContent/index.tsx +128 -0
  90. package/src/components/TextContent/styles.module.scss +6 -0
  91. package/src/components/ThreeDotLoader/index.ts +39 -0
  92. package/src/components/ThreeDotLoader/styles.module.scss +41 -0
  93. package/src/components/TimeInput/index.ts +129 -0
  94. package/src/components/TimeInput/styles.module.scss +16 -0
  95. package/src/components/Toggle/index.ts +34 -0
  96. package/src/components/Toggle/styles.module.scss +56 -0
  97. package/src/components/Toggle-v2/index.ts +40 -0
  98. package/src/components/Toggle-v2/styles.module.scss +86 -0
  99. package/src/components/Tooltip/index.ts +271 -0
  100. package/src/components/Tooltip/styles.module.scss +105 -0
  101. package/src/components/form/ObjectField/index.ts +364 -0
  102. package/src/components/form/ObjectField/styles.module.scss +103 -0
  103. package/src/components/form/index.ts +3 -0
  104. package/src/contexts/AppContext.ts +12 -0
  105. package/src/declaration.d.ts +7 -0
  106. package/src/extensions/HMAC.ts +25 -0
  107. package/src/extensions/IntegryAPIError.ts +19 -0
  108. package/src/features/common/AccountDropdown/index.ts +291 -0
  109. package/src/features/common/AccountDropdown/styles.module.scss +19 -0
  110. package/src/features/common/ActionForm/index.ts +1818 -0
  111. package/src/features/common/ActionForm/styles.module.scss +23 -0
  112. package/src/features/common/AppCard/index.ts +207 -0
  113. package/src/features/common/AppCard/styles.module.scss +117 -0
  114. package/src/features/common/AppCardCompact/index.ts +189 -0
  115. package/src/features/common/AppCardCompact/styles.module.scss +141 -0
  116. package/src/features/common/AuthSelector/index.ts +537 -0
  117. package/src/features/common/AuthSelector/styles.module.scss +161 -0
  118. package/src/features/common/AuthSelectorCompact/index.ts +706 -0
  119. package/src/features/common/AuthSelectorCompact/styles.module.scss +219 -0
  120. package/src/features/common/AuthSelectorDropdown/index.ts +704 -0
  121. package/src/features/common/AuthSelectorDropdown/styles.module.scss +361 -0
  122. package/src/features/common/DynamicField/index.ts +229 -0
  123. package/src/features/common/DynamicField/styles.module.scss +67 -0
  124. package/src/features/common/DynamicTypedField/index.ts +217 -0
  125. package/src/features/common/DynamicTypedField/styles.module.scss +67 -0
  126. package/src/features/common/FunctionForm/index.ts +862 -0
  127. package/src/features/common/FunctionForm/styles.module.scss +163 -0
  128. package/src/features/common/MappingUI/index.ts +649 -0
  129. package/src/features/common/MappingUI/styles.module.scss +121 -0
  130. package/src/features/common/MarketplaceAppCard/index.ts +279 -0
  131. package/src/features/common/MarketplaceAppCard/styles.module.scss +231 -0
  132. package/src/features/common/MarketplaceAppCardCompact/index.ts +283 -0
  133. package/src/features/common/MarketplaceAppCardCompact/styles.module.scss +255 -0
  134. package/src/features/common/NewMappingUI/index.ts +515 -0
  135. package/src/features/common/NewMappingUI/styles.module.scss +113 -0
  136. package/src/features/common/RequestAppWidget/RequestAppModal/index.ts +67 -0
  137. package/src/features/common/RequestAppWidget/RequestAppModal/styles.module.scss +23 -0
  138. package/src/features/common/RequestAppWidget/index.ts +48 -0
  139. package/src/features/common/RequestAppWidget/request-app-form.ts +89 -0
  140. package/src/features/common/RequestAppWidget/styles.module.scss +43 -0
  141. package/src/features/common/SectionField/index.ts +272 -0
  142. package/src/features/common/SectionField/styles.module.scss +67 -0
  143. package/src/features/common/Step/index.ts +827 -0
  144. package/src/features/common/Step/styles.module.scss +12 -0
  145. package/src/features/common/StepNavigation/CollapsedSteps.ts +125 -0
  146. package/src/features/common/StepNavigation/NavItem.ts +111 -0
  147. package/src/features/common/StepNavigation/index.ts +257 -0
  148. package/src/features/common/StepNavigation/styles.module.scss +117 -0
  149. package/src/features/common/Steps/index.ts +1139 -0
  150. package/src/features/common/Steps/styles.module.scss +314 -0
  151. package/src/features/containers/AppFlowContainer/AppFlowListing/compactStyles.module.scss +383 -0
  152. package/src/features/containers/AppFlowContainer/AppFlowListing/flow-instance.tsx +367 -0
  153. package/src/features/containers/AppFlowContainer/AppFlowListing/flowCard.tsx +194 -0
  154. package/src/features/containers/AppFlowContainer/AppFlowListing/flowCardCompact.tsx +389 -0
  155. package/src/features/containers/AppFlowContainer/AppFlowListing/flowInstanceCompact.tsx +577 -0
  156. package/src/features/containers/AppFlowContainer/AppFlowListing/index.tsx +83 -0
  157. package/src/features/containers/AppFlowContainer/AppFlowListing/styles.module.scss +212 -0
  158. package/src/features/containers/AppFlowContainer/AppFlowWrap/app-page-loader.tsx +45 -0
  159. package/src/features/containers/AppFlowContainer/AppFlowWrap/index.tsx +1081 -0
  160. package/src/features/containers/AppFlowContainer/AppFlowWrap/styles.module.scss +452 -0
  161. package/src/features/containers/AppFlowContainer/Authentication/index.ts +610 -0
  162. package/src/features/containers/AppFlowContainer/Authentication/styles.module.scss +468 -0
  163. package/src/features/containers/AppFlowContainer/index.ts +114 -0
  164. package/src/features/containers/AppPageContainer/AppPage/index.tsx +262 -0
  165. package/src/features/containers/AppPageContainer/AppPage/styles.module.scss +120 -0
  166. package/src/features/containers/AppPageContainer/IntegrationCard/index.ts +165 -0
  167. package/src/features/containers/AppPageContainer/IntegrationCard/styles.module.scss +81 -0
  168. package/src/features/containers/AppPageContainer/index.tsx +93 -0
  169. package/src/features/containers/AppPageContainer/styles.module.scss +0 -0
  170. package/src/features/containers/AppsForFlows/index.ts +161 -0
  171. package/src/features/containers/AppsForFlows/styles.module.scss +280 -0
  172. package/src/features/containers/AppsForFlowsCompact/index.ts +161 -0
  173. package/src/features/containers/AppsForFlowsCompact/styles.module.scss +279 -0
  174. package/src/features/containers/AuthSetupContainer/AppSelection.ts +73 -0
  175. package/src/features/containers/AuthSetupContainer/AuthTypeSelection.ts +67 -0
  176. package/src/features/containers/AuthSetupContainer/Footer.ts +32 -0
  177. package/src/features/containers/AuthSetupContainer/Header.ts +39 -0
  178. package/src/features/containers/AuthSetupContainer/PostAdditionPopup.ts +27 -0
  179. package/src/features/containers/AuthSetupContainer/index.ts +349 -0
  180. package/src/features/containers/AuthSetupContainer/styles.module.scss +229 -0
  181. package/src/features/containers/FlowSetupContainer/index.ts +390 -0
  182. package/src/features/containers/FlowSetupContainer/styles.module.scss +18 -0
  183. package/src/features/containers/MarkeplaceApps/index.ts +574 -0
  184. package/src/features/containers/MarkeplaceApps/styles.module.scss +559 -0
  185. package/src/features/containers/MarketplaceAppsCompact/index.ts +576 -0
  186. package/src/features/containers/MarketplaceAppsCompact/styles.module.scss +546 -0
  187. package/src/features/containers/MarketplaceAppsContainer/index.ts +83 -0
  188. package/src/features/containers/MarketplaceContainer/AppCard/index.ts +91 -0
  189. package/src/features/containers/MarketplaceContainer/AppCard/styles.module.scss +66 -0
  190. package/src/features/containers/MarketplaceContainer/AppListing/index.ts +34 -0
  191. package/src/features/containers/MarketplaceContainer/AppListing/styles.module.scss +10 -0
  192. package/src/features/containers/MarketplaceContainer/MarketplaceContentWrap/index.ts +132 -0
  193. package/src/features/containers/MarketplaceContainer/MarketplaceContentWrap/styles.module.scss +117 -0
  194. package/src/features/containers/MarketplaceContainer/index.ts +242 -0
  195. package/src/features/containers/MarketplaceContainer/styles.module.scss +84 -0
  196. package/src/features/containers/SDKContainer/index.ts +817 -0
  197. package/src/features/containers/SDKContainer/styles.module.scss +266 -0
  198. package/src/features/containers/SDKDebugContainer/index.ts +137 -0
  199. package/src/features/containers/SDKDebugContainer/styles.module.scss +37 -0
  200. package/src/features/containers/SDKFailedContainer/index.ts +117 -0
  201. package/src/features/containers/SDKFailedContainer/styles.module.scss +57 -0
  202. package/src/features/integrations/IntegrationRow/Icons.ts +77 -0
  203. package/src/features/integrations/IntegrationRow/index.ts +129 -0
  204. package/src/features/integrations/IntegrationRow/styles.module.scss +62 -0
  205. package/src/features/integrations/IntegrationsHeader/index.ts +34 -0
  206. package/src/features/integrations/IntegrationsHeader/styles.module.scss +47 -0
  207. package/src/features/integrations/IntegrationsList/index.ts +252 -0
  208. package/src/features/integrations/IntegrationsList/styles.module.scss +67 -0
  209. package/src/features/templates/Template/index.ts +295 -0
  210. package/src/features/templates/Template/styles.module.scss +226 -0
  211. package/src/features/templates/TemplatesView/index.ts +368 -0
  212. package/src/features/templates/TemplatesView/styles.module.scss +71 -0
  213. package/src/features/templates/TemplatesViewCompact/index.ts +364 -0
  214. package/src/features/templates/TemplatesViewCompact/styles.module.scss +141 -0
  215. package/src/hooks/useAutosizeTextArea.ts +22 -0
  216. package/src/hooks/useCustomRef.ts +13 -0
  217. package/src/hooks/useDebounce.ts +17 -0
  218. package/src/hooks/useElementResize.ts +40 -0
  219. package/src/hooks/useEventListener.ts +44 -0
  220. package/src/hooks/useHover.ts +40 -0
  221. package/src/hooks/useOnClickOutside.ts +32 -0
  222. package/src/index.ts +2051 -0
  223. package/src/index.umd.ts +13 -0
  224. package/src/interfaces/index.ts +924 -0
  225. package/src/modules/api/index.ts +1315 -0
  226. package/src/modules/api/responseHandler.ts +38 -0
  227. package/src/modules/event-emitter/index.ts +72 -0
  228. package/src/modules/event-emitter/runners/abstract.ts +21 -0
  229. package/src/modules/event-emitter/runners/default.ts +11 -0
  230. package/src/modules/event-emitter/runners/ntimes.ts +28 -0
  231. package/src/modules/event-emitter/types.ts +34 -0
  232. package/src/store/actionFunctions.ts +1573 -0
  233. package/src/store/index.ts +17 -0
  234. package/src/store/initialState.ts +58 -0
  235. package/src/stories/Button.stories.tsx +83 -0
  236. package/src/stories/Checkbox/Checkbox.stories.tsx +41 -0
  237. package/src/stories/Checkbox/CheckboxGroup.stories.tsx +46 -0
  238. package/src/stories/EditableText.stories.tsx +35 -0
  239. package/src/stories/Input/BaseInput.stories.tsx +48 -0
  240. package/src/stories/Input/DateInput.stories.tsx +28 -0
  241. package/src/stories/Input/Input.stories.tsx +24 -0
  242. package/src/stories/Input/PasswordInput.stories.tsx +26 -0
  243. package/src/stories/Introduction.stories.mdx +211 -0
  244. package/src/stories/Label.stories.tsx +27 -0
  245. package/src/stories/Listbox.stories.tsx +122 -0
  246. package/src/stories/Radio/Radio.stories.tsx +39 -0
  247. package/src/stories/Radio/RadioGroup.stories.tsx +46 -0
  248. package/src/stories/StepNavigation/NavItem.stories.tsx +31 -0
  249. package/src/stories/StepNavigation/StepNavigation.stories.tsx +50 -0
  250. package/src/stories/TabBar.stories.tsx +31 -0
  251. package/src/stories/TextArea.stories.tsx +23 -0
  252. package/src/stories/TimeInput.stories.tsx +37 -0
  253. package/src/stories/Toggle.stories.tsx +33 -0
  254. package/src/stories/assets/code-brackets.svg +1 -0
  255. package/src/stories/assets/colors.svg +1 -0
  256. package/src/stories/assets/comments.svg +1 -0
  257. package/src/stories/assets/direction.svg +1 -0
  258. package/src/stories/assets/flow.svg +1 -0
  259. package/src/stories/assets/plugin.svg +1 -0
  260. package/src/stories/assets/repo.svg +1 -0
  261. package/src/stories/assets/stackalt.svg +1 -0
  262. package/src/types/index.ts +293 -0
  263. package/src/types/store.ts +366 -0
  264. package/src/types/utils.ts +19 -0
  265. package/src/utils/ActivityOutputUtils.ts +163 -0
  266. package/src/utils/common.ts +20 -0
  267. package/src/utils/copyToClipboard.ts +24 -0
  268. package/src/utils/datetime.ts +101 -0
  269. package/src/utils/getUrlParam.ts +11 -0
  270. package/src/utils/isAuthMessage.ts +16 -0
  271. package/src/utils/isBrowser.ts +1 -0
  272. package/src/utils/jsonEncodeDecode.ts +15 -0
  273. package/src/utils/objectUtils.ts +116 -0
  274. package/src/utils/popup.ts +30 -0
  275. package/src/utils/searchJson.ts +51 -0
  276. package/src/utils/stepUtils.ts +45 -0
  277. package/src/utils/truncate.ts +6 -0
  278. package/test/setup.ts +1 -0
  279. package/vitest.config.ts +10 -0
@@ -0,0 +1,40 @@
1
+ import { html } from 'htm/preact';
2
+
3
+ import styles from './styles.module.scss';
4
+
5
+ interface ToggleProps {
6
+ id: string;
7
+ value: boolean;
8
+ disabled: boolean;
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ onChange: (val: boolean, event?: any) => void;
11
+ size?: string;
12
+ }
13
+
14
+ /**
15
+ * Toggle component
16
+ *
17
+ */
18
+ const Toggle = (props: ToggleProps) => {
19
+ const { id, value: isToggled, onChange, disabled = false, size = 'lg' } = props;
20
+
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ const handleChange = (e: any) => {
23
+ onChange(!isToggled, e);
24
+ };
25
+
26
+ return html`
27
+ <label className=${`${styles.switch} toggle ${size === 'sm' ? styles.smallSwitch : ''}`}>
28
+ <input
29
+ type="checkbox"
30
+ id=${id}
31
+ onclick=${handleChange}
32
+ checked=${isToggled}
33
+ disabled=${disabled}
34
+ />
35
+ <span className=${`${styles.slider} ${styles.round}`} />
36
+ </label>
37
+ `;
38
+ };
39
+
40
+ export { Toggle, ToggleProps };
@@ -0,0 +1,86 @@
1
+ /* The switch - the box around the slider */
2
+ .switch {
3
+ position: relative;
4
+ display: inline-block;
5
+ width: 34px;
6
+ height: 14px;
7
+ margin: 0;
8
+ top: 0px;
9
+ }
10
+
11
+ /* Hide default HTML checkbox */
12
+ .switch input {
13
+ display: none;
14
+ }
15
+
16
+ /* The slider */
17
+ .slider {
18
+ position: absolute;
19
+ cursor: pointer;
20
+ top: 0;
21
+ left: 0;
22
+ right: 0;
23
+ bottom: 0;
24
+ background-color: rgb(213, 213, 213);
25
+ transition: 0.4s;
26
+ }
27
+
28
+ .slider:before {
29
+ position: absolute;
30
+ content: '';
31
+ height: 15px;
32
+ width: 15px;
33
+ bottom: -0.5px;
34
+ background-color: #9b9b9b;
35
+ transition: 0.4s;
36
+ }
37
+
38
+ input:checked + .slider {
39
+ background-color: #9ddab3;
40
+ }
41
+
42
+ input:checked + .slider:before {
43
+ background-color: #3bb568;
44
+ left: 2.5px;
45
+ }
46
+
47
+ input:focus + .slider {
48
+ box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);
49
+ }
50
+
51
+ input:checked + .slider:before {
52
+ transform: translateX(16px);
53
+ }
54
+
55
+ /* Rounded sliders */
56
+ .slider.round {
57
+ border-radius: 14px;
58
+ }
59
+
60
+ .slider.round:before {
61
+ border-radius: 50%;
62
+ }
63
+
64
+ .disabled-input:checked + .slider {
65
+ background-color: #c6c5c5;
66
+ }
67
+
68
+ .disabled-input:checked + .slider:before {
69
+ background-color: #9b9b9b;
70
+ }
71
+
72
+ .smallSwitch {
73
+ width: 26px;
74
+ height: 10px;
75
+
76
+ .slider:before {
77
+ height: 15px;
78
+ width: 15px;
79
+ left: -1px;
80
+ bottom: -2.5px;
81
+ }
82
+
83
+ input:checked + .slider:before {
84
+ transform: translateX(13px);
85
+ }
86
+ }
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Modified version of https://github.com/rschristian/preact-hint
3
+ * for Preact with htm with added support for:
4
+ * 1. bottom position
5
+ * 2. dismissing popup on click of target element
6
+ * 3. Delta Y to configure spacing
7
+ * 4. Offset from center rendering
8
+ */
9
+
10
+ import { html } from 'htm/preact';
11
+ import type { ComponentChild, VNode } from 'preact';
12
+ import { useCallback, useRef, useState } from 'preact/hooks';
13
+ import { ViewStyles } from '@/types';
14
+
15
+ import styles from './styles.module.scss';
16
+
17
+ interface Props {
18
+ children: ComponentChild | ComponentChild[];
19
+ dismissOnClick?: boolean;
20
+ position?:
21
+ | 'top'
22
+ | 'bottom'
23
+ | 'bottom-right'
24
+ | 'fixed'
25
+ | 'top-right'
26
+ | 'top-right-compact';
27
+ attribute?: string;
28
+ deltaY?: number;
29
+ hideArrow?: boolean;
30
+ template?: (content: string) => VNode;
31
+ style?: string;
32
+ disabled?: boolean;
33
+ className?: string;
34
+ }
35
+
36
+ interface HintProps {
37
+ content: string;
38
+ position:
39
+ | 'top'
40
+ | 'bottom'
41
+ | 'bottom-right'
42
+ | 'fixed'
43
+ | 'fixed-right'
44
+ | 'top-right'
45
+ | 'top-right-compact';
46
+ deltaY: number;
47
+ template?: (content: string) => VNode;
48
+ hideArrow?: boolean;
49
+ rootBoundingRect: ClientRect;
50
+ targetBoundingRect: ClientRect;
51
+ }
52
+
53
+ export function HintWrap(props: HintProps): VNode {
54
+ const hint = useRef<HTMLSpanElement | null>(null);
55
+
56
+ const { position, deltaY = 0, hideArrow, targetBoundingRect } = props;
57
+
58
+ if (['fixed', 'fixed-right'].includes(position)) {
59
+ return html`
60
+ <div
61
+ class="${`${styles['preact-hint']} ${
62
+ styles[`preact-hint__${position}`]
63
+ }`}
64
+ ${hideArrow ? styles['preact-hint_hide-arrow'] : ''}"
65
+ style="${position === 'fixed-right' ? 'right' : 'left'}: ${(position ===
66
+ 'fixed-right'
67
+ ? 60 + 38 + targetBoundingRect.right - targetBoundingRect.left
68
+ : targetBoundingRect.left) -
69
+ deltaY}px; top: ${targetBoundingRect.bottom + 5}px;"
70
+ >
71
+ <pre class=${styles['preact-hint__content']} ref=${hint}>
72
+ ${props.template ? props.template(props.content) : props.content}
73
+ </pre
74
+ >
75
+ </div>
76
+ `;
77
+ }
78
+
79
+ let className = '';
80
+ if (
81
+ position === 'top' ||
82
+ position === 'top-right' ||
83
+ position === 'top-right-compact'
84
+ ) {
85
+ className = styles['preact-hint__top'];
86
+ } else if (position === 'bottom') {
87
+ className = styles['preact-hint__bottom'];
88
+ } else if (position === 'bottom-right') {
89
+ className = styles['preact-hint__bottom-right'];
90
+ }
91
+ return html`
92
+ <div
93
+ class="${`${styles['preact-hint']} ${className} ${
94
+ position === 'top-right' ? styles['preact-hint__top-right'] : ''
95
+ }}`}
96
+ ${hideArrow ? styles['preact-hint_hide-arrow'] : ''}"
97
+ style=${{
98
+ ...(position === 'bottom-right'
99
+ ? {
100
+ right:
101
+ props.rootBoundingRect.right -
102
+ props.targetBoundingRect.right -
103
+ 12,
104
+ }
105
+ : {
106
+ left: props.targetBoundingRect.left - props.rootBoundingRect.left,
107
+ }),
108
+ ...(position === 'top'
109
+ ? {
110
+ bottom:
111
+ props.rootBoundingRect.height -
112
+ props.targetBoundingRect.top +
113
+ props.rootBoundingRect.top +
114
+ 2 +
115
+ deltaY,
116
+ }
117
+ : {
118
+ top:
119
+ props.rootBoundingRect.height -
120
+ props.targetBoundingRect.top +
121
+ props.rootBoundingRect.top +
122
+ 2 +
123
+ deltaY,
124
+ }),
125
+ ...(position === 'top-right'
126
+ ? {
127
+ right: 0,
128
+ left: 'auto',
129
+ top: 0 - props.targetBoundingRect.height - 10,
130
+ }
131
+ : {}),
132
+ ...(position === 'top-right-compact'
133
+ ? {
134
+ left: 0,
135
+ top: 0 - props.targetBoundingRect.height - 5,
136
+ }
137
+ : {}),
138
+ }}
139
+ >
140
+ <pre class=${styles['preact-hint__content']} ref=${hint}>
141
+ ${props.template ? props.template(props.content) : props.content}
142
+ </pre
143
+ >
144
+ </div>
145
+ `;
146
+ }
147
+
148
+ export const Hint = (props: Props): VNode => {
149
+ const {
150
+ position = 'bottom',
151
+ attribute = 'data-hint',
152
+ deltaY = 0,
153
+ hideArrow,
154
+ style = '',
155
+ disabled = false,
156
+ className = '',
157
+ } = props;
158
+ const [content, setContent] = useState<string>('');
159
+ const [
160
+ containerElement,
161
+ setContainerElement,
162
+ ] = useState<HTMLDivElement | null>(null);
163
+ const [
164
+ targetBoundingRect,
165
+ setTargetBoundingRect,
166
+ ] = useState<ClientRect | null>(null);
167
+
168
+ const handleMouseOver = (e: Event) => {
169
+ if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
170
+ setContent(e.target.getAttribute(attribute) || '');
171
+ setTargetBoundingRect(e.target.getBoundingClientRect());
172
+ }
173
+ };
174
+
175
+ const handleMouseOut = (e: Event) => {
176
+ // if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
177
+ setContent('');
178
+ setTargetBoundingRect(null);
179
+ // }
180
+ };
181
+ const handleMouseClick = () => {
182
+ setContent('');
183
+ setTargetBoundingRect(null);
184
+ };
185
+
186
+ const onRefChange = useCallback(
187
+ (node: HTMLDivElement | null) => {
188
+ // Remove existing event listeners before adding new ones
189
+ if (containerElement) {
190
+ containerElement.removeEventListener('mouseover', handleMouseOver);
191
+ containerElement.removeEventListener('mouseout', handleMouseOut);
192
+ if (props.dismissOnClick)
193
+ containerElement.removeEventListener('click', handleMouseClick);
194
+ }
195
+
196
+ setContainerElement(node);
197
+
198
+ if (containerElement) {
199
+ containerElement.addEventListener('mouseover', handleMouseOver);
200
+ containerElement.addEventListener('mouseout', handleMouseOut);
201
+ containerElement.addEventListener('mouseleave', handleMouseOut);
202
+ document.addEventListener('wheel', handleMouseOut);
203
+ if (props.dismissOnClick)
204
+ containerElement.addEventListener('click', handleMouseClick);
205
+ }
206
+ },
207
+ [containerElement, props.dismissOnClick],
208
+ );
209
+
210
+ const onRefChangeOld = useCallback(
211
+ (node: HTMLDivElement | null) => {
212
+ setContainerElement(node);
213
+ if (containerElement) {
214
+ containerElement.addEventListener('mouseover', (e) => {
215
+ if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
216
+ setContent(e.target.getAttribute(attribute) || '');
217
+ setTargetBoundingRect(e.target.getBoundingClientRect());
218
+ }
219
+ });
220
+ containerElement.addEventListener('mouseout', (e) => {
221
+ if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
222
+ setContent('');
223
+ setTargetBoundingRect(null);
224
+ }
225
+ });
226
+ containerElement.addEventListener('mouseleave', (e) => {
227
+ if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
228
+ setContent('');
229
+ setTargetBoundingRect(null);
230
+ }
231
+ });
232
+ document.addEventListener('wheel', (e) => {
233
+ if (e.target instanceof Element && e.target.hasAttribute(attribute)) {
234
+ setContent('');
235
+ setTargetBoundingRect(null);
236
+ }
237
+ });
238
+ if (props.dismissOnClick)
239
+ containerElement.addEventListener('click', () => {
240
+ setContent('');
241
+ setTargetBoundingRect(null);
242
+ });
243
+ }
244
+ },
245
+ [containerElement],
246
+ );
247
+
248
+ return disabled
249
+ ? html` ${props.children}`
250
+ : html`
251
+ <div
252
+ ref=${onRefChange}
253
+ style="position: relative;${style}"
254
+ class=${className}
255
+ >
256
+ ${content &&
257
+ containerElement &&
258
+ targetBoundingRect &&
259
+ html` <${HintWrap}
260
+ content=${content}
261
+ position=${position}
262
+ deltaY=${deltaY}
263
+ template=${props.template}
264
+ rootBoundingRect=${containerElement?.getBoundingClientRect()}
265
+ targetBoundingRect=${targetBoundingRect}
266
+ hideArrow=${hideArrow}
267
+ />`}
268
+ ${props.children}
269
+ </div>
270
+ `;
271
+ };
@@ -0,0 +1,105 @@
1
+ .preact-hint {
2
+ position: absolute;
3
+ z-index: 9999;
4
+ cursor: default;
5
+ filter: drop-shadow(0px 2px 8px rgba(0, 0, 0, 0.15));
6
+ &::after {
7
+ content: '';
8
+ width: 0;
9
+ height: 0;
10
+ margin: auto;
11
+ display: block;
12
+ position: absolute;
13
+ border: 4px solid transparent;
14
+ }
15
+
16
+ &.preact-hint__top {
17
+ padding-bottom: 4px;
18
+ &::after {
19
+ top: auto;
20
+ left: 50%;
21
+ bottom: 0;
22
+ border-bottom: none;
23
+ border-top-color: #fff;
24
+ }
25
+ }
26
+
27
+ &.preact-hint__bottom {
28
+ padding-top: 4px;
29
+ &::after {
30
+ top: 0;
31
+ left: 16px;
32
+ bottom: auto;
33
+ border-top: none;
34
+ border-bottom-color: #fff;
35
+ }
36
+ }
37
+ &.preact-hint__bottom-right {
38
+ padding-top: 4px;
39
+ &::after {
40
+ top: 0;
41
+ right: 16px;
42
+ bottom: auto;
43
+ border-top: none;
44
+ border-bottom-color: #fff;
45
+ }
46
+ }
47
+ &.preact-hint__fixed {
48
+ position: fixed;
49
+
50
+ &::after {
51
+ top: -4px;
52
+ left: 16px;
53
+ bottom: auto;
54
+ border-top: none;
55
+ border-bottom-color: #fff;
56
+ }
57
+ }
58
+
59
+ &.preact-hint__fixed-right {
60
+ position: fixed;
61
+
62
+ &::after {
63
+ top: -4px;
64
+ right: 16px;
65
+ bottom: auto;
66
+ border-top: none;
67
+ border-bottom-color: #fff;
68
+ }
69
+ }
70
+ &.preact-hint__top-right {
71
+ padding-top: 4px;
72
+ &::after {
73
+ top: auto;
74
+ left: 86%;
75
+ bottom: 0;
76
+ border-top: none;
77
+ border-bottom-color: #fff;
78
+ }
79
+ }
80
+ &.preact-hint_hide-arrow {
81
+ &::after {
82
+ display: none !important;
83
+ }
84
+ }
85
+ }
86
+
87
+ .preact-hint__content {
88
+ font-family: inherit;
89
+ font-style: normal;
90
+ font-weight: 400;
91
+ font-size: 12px;
92
+ line-height: 16px;
93
+ background: #ffffff;
94
+ border-radius: 5px;
95
+ box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.062132);
96
+ padding: 8px;
97
+ margin: 0;
98
+ color: #000000;
99
+ display: block;
100
+ }
101
+ [class*='preact-hint__top-right'] {
102
+ &::after {
103
+ left: 86% !important;
104
+ }
105
+ }