@antscorp/antsomi-ui 1.3.7-beta.7 → 1.3.7-beta.70

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 (405) hide show
  1. package/README.md +78 -78
  2. package/es/__mocks__/1000_city.json +802 -802
  3. package/es/__mocks__/sql-query.json +56 -56
  4. package/es/assets/css/main.scss +8 -8
  5. package/es/assets/images/feedback.svg +3 -3
  6. package/es/assets/svg/mobile-frame.svg +3 -3
  7. package/es/assets/svg/warning-icon.svg +5 -5
  8. package/es/components/atoms/Alert/Alert.js +28 -28
  9. package/es/components/atoms/ContentEditable/styled.js +16 -16
  10. package/es/components/atoms/DividerPure/styled.js +35 -35
  11. package/es/components/atoms/Eyedropper/styled.js +39 -39
  12. package/es/components/atoms/Icon/index.js +19 -19
  13. package/es/components/atoms/Iframe/Iframe.js +18 -18
  14. package/es/components/atoms/Input/Input.js +3 -1
  15. package/es/components/atoms/Input/styled.js +104 -104
  16. package/es/components/atoms/InputDynamic/InputDynamic.js +3 -3
  17. package/es/components/atoms/InputDynamic/styled.js +284 -284
  18. package/es/components/atoms/MobileBrandingBar/styled.js +21 -21
  19. package/es/components/atoms/MobileFrame/styled.js +30 -30
  20. package/es/components/atoms/MobileFrameV2/styled.js +42 -42
  21. package/es/components/atoms/MobileFrameV3/styled.js +31 -31
  22. package/es/components/atoms/NotificationStatus/styled.js +10 -10
  23. package/es/components/atoms/PreviewTabs/styled.js +69 -69
  24. package/es/components/atoms/Radio/index.js +16 -16
  25. package/es/components/atoms/ReactIframe/ReactIframe.js +5 -5
  26. package/es/components/atoms/ReactIframe/styled.js +9 -9
  27. package/es/components/atoms/RequiredLabel/styled.js +3 -3
  28. package/es/components/atoms/ScrollBox/index.js +5 -5
  29. package/es/components/atoms/Scrollbars/styled.js +21 -21
  30. package/es/components/atoms/SelectAssociatedTag/styled.js +51 -51
  31. package/es/components/atoms/SlideBar/styled.js +194 -194
  32. package/es/components/atoms/Slider/styled.js +31 -31
  33. package/es/components/atoms/Space/Space.js +4 -4
  34. package/es/components/atoms/Spin/styled.js +11 -11
  35. package/es/components/atoms/Steps/styled.js +244 -244
  36. package/es/components/atoms/Switch/styled.js +56 -56
  37. package/es/components/atoms/Tag/Tag.js +10 -10
  38. package/es/components/atoms/Text/styled.js +34 -34
  39. package/es/components/icons/DomainManagementIcon.js +1 -1
  40. package/es/components/icons/LazyIcon/LazyIcon.d.ts +2 -0
  41. package/es/components/icons/LazyIcon/LazyIcon.js +2 -0
  42. package/es/components/icons/LoadingIcon.js +33 -33
  43. package/es/components/icons/QRCodeManagementIcon.d.ts +3 -0
  44. package/es/components/icons/QRCodeManagementIcon.js +7 -0
  45. package/es/components/icons/QRSetDashboardIcon.d.ts +3 -0
  46. package/es/components/icons/QRSetDashboardIcon.js +7 -0
  47. package/es/components/icons/document/styled.js +43 -43
  48. package/es/components/icons/index.d.ts +2 -0
  49. package/es/components/icons/index.js +2 -0
  50. package/es/components/index.scss +2 -2
  51. package/es/components/molecules/AccessDenied/styled.js +28 -28
  52. package/es/components/molecules/AccountSelection/styled.js +110 -110
  53. package/es/components/molecules/AddDynamicContent/AddDynamicContent.js +28 -2
  54. package/es/components/molecules/AddDynamicContent/components/DisplayFormat/DisplayFormat.d.ts +1 -0
  55. package/es/components/molecules/AddDynamicContent/constants.d.ts +2 -0
  56. package/es/components/molecules/AddDynamicContent/constants.js +2 -0
  57. package/es/components/molecules/AddDynamicContent/styled.js +23 -23
  58. package/es/components/molecules/AlignSetting/styled.js +4 -4
  59. package/es/components/molecules/ApplyPopupContent/styled.js +32 -32
  60. package/es/components/molecules/CalendarSelection/components/AutoUpdateTo/styled.js +8 -8
  61. package/es/components/molecules/CalendarSelection/components/CustomPicker/styled.js +79 -79
  62. package/es/components/molecules/CalendarSelection/components/Footer/styled.js +4 -4
  63. package/es/components/molecules/CalendarSelection/components/RangePicker/styled.js +21 -21
  64. package/es/components/molecules/CalendarSelection/components/RangeSelectOptions/components/Option/Option.js +26 -26
  65. package/es/components/molecules/CalendarSelection/components/RangeSelectOptions/styled.js +30 -30
  66. package/es/components/molecules/CalendarSelection/components/TimeRangeDisplay/styled.js +26 -26
  67. package/es/components/molecules/CalendarSelection/styled.js +8 -8
  68. package/es/components/molecules/CaptureScreen/components/CommentBox/styled.js +119 -119
  69. package/es/components/molecules/CaptureScreen/components/Cursor/styled.js +67 -67
  70. package/es/components/molecules/CaptureScreen/styled.js +240 -240
  71. package/es/components/molecules/ChartTab/components/styled.js +24 -24
  72. package/es/components/molecules/ChartTab/styled.js +20 -20
  73. package/es/components/molecules/ChatBox/AntsomiAI.js +8 -8
  74. package/es/components/molecules/ChatBox/ChatBoxInsight/QuestionItem.js +9 -9
  75. package/es/components/molecules/ChatBox/ChatBoxInsight/styled.js +365 -365
  76. package/es/components/molecules/ChatBox/styled.js +324 -324
  77. package/es/components/molecules/CodeStructure/styled.js +5 -5
  78. package/es/components/molecules/ColorPicker/ChromePicker/styled.js +10 -10
  79. package/es/components/molecules/ColorPicker/CustomPicker/styled.js +89 -89
  80. package/es/components/molecules/ColorPicker/SketchPicker/styled.js +5 -5
  81. package/es/components/molecules/ColorPicker/index.d.ts +2 -0
  82. package/es/components/molecules/ColorPicker/index.js +8 -3
  83. package/es/components/molecules/ColorPicker/styled.js +7 -7
  84. package/es/components/molecules/ColorSetting/styled.js +39 -39
  85. package/es/components/molecules/DatePicker/components/AdvancedPicker/styled.js +110 -110
  86. package/es/components/molecules/DatePickerV2/styled.js +6 -6
  87. package/es/components/molecules/DisplayFormat/styled.js +12 -12
  88. package/es/components/molecules/DrawerDetail/components/ToggleDrawerSizeButton.js +24 -24
  89. package/es/components/molecules/DrawerDetail/styled.js +109 -109
  90. package/es/components/molecules/Dropdown/style.scss +11 -11
  91. package/es/components/molecules/Dropdown/styled.js +28 -28
  92. package/es/components/molecules/EdgeSetting/styled.js +10 -10
  93. package/es/components/molecules/EditableName/styled.js +70 -70
  94. package/es/components/molecules/EditingList/styled.js +29 -29
  95. package/es/components/molecules/EditingListV2/components/List/List.js +9 -9
  96. package/es/components/molecules/EditorTab/styled.js +156 -156
  97. package/es/components/molecules/EmojiCollections/styled.js +22 -22
  98. package/es/components/molecules/EmojiPopover/EmojiPopover.d.ts +1 -0
  99. package/es/components/molecules/EmojiPopover/EmojiPopover.js +2 -2
  100. package/es/components/molecules/EmojiPopover/styled.d.ts +2 -2
  101. package/es/components/molecules/EmojiPopover/styled.js +5 -5
  102. package/es/components/molecules/EmptyData/styled.js +53 -53
  103. package/es/components/molecules/EyedropperButton/styled.js +19 -19
  104. package/es/components/molecules/FontSizeInput/index.scss +15 -15
  105. package/es/components/molecules/FontSizeInput/styled.js +31 -31
  106. package/es/components/molecules/GradientSetting/styled.js +57 -57
  107. package/es/components/molecules/HeaderV2/HeaderV2.d.ts +1 -1
  108. package/es/components/molecules/HeaderV2/styled.js +70 -70
  109. package/es/components/molecules/IconSelection/styled.js +69 -69
  110. package/es/components/molecules/ImageEditor/components/ModalShortcut.js +21 -21
  111. package/es/components/molecules/ImageEditor/styled.js +5 -5
  112. package/es/components/molecules/ImagePreview/styled.js +3 -3
  113. package/es/components/molecules/InputNumberWithUnit/styled.js +14 -14
  114. package/es/components/molecules/InputSearch/styled.js +41 -41
  115. package/es/components/molecules/InputSelectAttribute/styled.js +22 -22
  116. package/es/components/molecules/ItemNotFound/styled.js +26 -26
  117. package/es/components/molecules/MatchAnySelect/components/ExtendValuePopup.js +8 -8
  118. package/es/components/molecules/MatchAnySelect/styled.js +247 -247
  119. package/es/components/molecules/Modal/Modal.js +7 -1
  120. package/es/components/molecules/Modal/styled.js +63 -63
  121. package/es/components/molecules/ModalSelect/styled.js +152 -152
  122. package/es/components/molecules/ModalV2/styled.js +27 -27
  123. package/es/components/molecules/PopupDraggable/styled.js +57 -57
  124. package/es/components/molecules/PreviewModal/styled.js +26 -26
  125. package/es/components/molecules/ProcessLoading/styled.js +2 -2
  126. package/es/components/molecules/QuillEditor/CustomToolbar.js +3165 -3165
  127. package/es/components/molecules/QuillEditor/EditorToolbar.js +7 -7
  128. package/es/components/molecules/QuillEditor/styled.js +25 -25
  129. package/es/components/molecules/RadioGroup/styled.js +9 -9
  130. package/es/components/molecules/RequestAccess/styled.js +38 -38
  131. package/es/components/molecules/ResizeGrid/components/Cell/styled.js +77 -77
  132. package/es/components/molecules/ResizeGrid/styled.js +50 -50
  133. package/es/components/molecules/RichMenu/RichMenuBlock/RichMenuCell/styled.js +118 -118
  134. package/es/components/molecules/RichMenu/RichMenuBlock/styled.js +13 -13
  135. package/es/components/molecules/RichMenu/RichMenuChatBar/TypingChat/styled.js +40 -40
  136. package/es/components/molecules/RichMenu/RichMenuChatBar/styled.js +27 -27
  137. package/es/components/molecules/RichMenu/RichMenuMobileView/RichMenuMobileView.js +2 -2
  138. package/es/components/molecules/RichMenu/RichMenuMobileView/styled.js +38 -38
  139. package/es/components/molecules/SearchPopover/SearchPopover.js +2 -2
  140. package/es/components/molecules/SearchPopover/components/PopoverSelect/styled.js +36 -36
  141. package/es/components/molecules/SearchPopover/components/PopoverSelect/styles.scss +7 -7
  142. package/es/components/molecules/SearchPopover/styled.d.ts +12 -1
  143. package/es/components/molecules/SearchPopover/styled.js +32 -33
  144. package/es/components/molecules/SearchPopover/types.d.ts +4 -3
  145. package/es/components/molecules/Select/Select.js +3 -3
  146. package/es/components/molecules/Select/styled.d.ts +3 -1
  147. package/es/components/molecules/Select/styled.js +76 -32
  148. package/es/components/molecules/SelectAccount/styled.js +147 -147
  149. package/es/components/molecules/SelectEventAttribute/styled.js +8 -8
  150. package/es/components/molecules/SelectMulti/styled.js +62 -62
  151. package/es/components/molecules/SelectV2/styled.js +124 -124
  152. package/es/components/molecules/SettingWrapper/styled.js +12 -12
  153. package/es/components/molecules/ShareAccess/ShareAccess.d.ts +2 -1
  154. package/es/components/molecules/ShareAccess/ShareAccess.js +12 -9
  155. package/es/components/molecules/ShareAccess/components/GeneralAccess/styled.js +56 -56
  156. package/es/components/molecules/ShareAccess/components/LayoutContent/LayoutContent.js +5 -5
  157. package/es/components/molecules/ShareAccess/components/LayoutContent/styled.js +5 -5
  158. package/es/components/molecules/ShareAccess/components/ModalTransferOwnerShip/styled.js +15 -15
  159. package/es/components/molecules/ShareAccess/components/PeopleAccess/PeopleAccess.js +2 -2
  160. package/es/components/molecules/ShareAccess/components/PeopleAccess/styled.js +63 -63
  161. package/es/components/molecules/ShareAccess/components/SearchUser/styled.js +31 -31
  162. package/es/components/molecules/ShareAccess/hooks/useShareAccess.d.ts +2 -1
  163. package/es/components/molecules/ShareAccess/index.d.ts +1 -0
  164. package/es/components/molecules/ShareAccess/reducer.d.ts +1 -1
  165. package/es/components/molecules/ShareAccess/reducer.js +7 -4
  166. package/es/components/molecules/ShareAccess/types.d.ts +22 -0
  167. package/es/components/molecules/ShareAccess/utils.d.ts +3 -1
  168. package/es/components/molecules/ShareAccess/utils.js +35 -2
  169. package/es/components/molecules/SliderWithInputNumber/styled.js +2 -2
  170. package/es/components/molecules/Tabs/Tabs.js +11 -11
  171. package/es/components/molecules/TagifyInput/TagifyInput.js +98 -77
  172. package/es/components/molecules/TagifyInput/styled.js +37 -37
  173. package/es/components/molecules/TagifyInput/types.d.ts +14 -8
  174. package/es/components/molecules/TagifyInput/utils.d.ts +6 -1
  175. package/es/components/molecules/TagifyInput/utils.js +32 -13
  176. package/es/components/molecules/TagifyInput/utils.style.js +208 -208
  177. package/es/components/molecules/TemplateSaveAs/components/Category/Category.js +5 -5
  178. package/es/components/molecules/TemplateSaveAs/components/ImageSlider/styled.js +276 -276
  179. package/es/components/molecules/TemplateSaveAs/styled.js +134 -134
  180. package/es/components/molecules/ThumbnailCard/styled.js +92 -92
  181. package/es/components/molecules/Tree/styled.js +38 -38
  182. package/es/components/molecules/UnsubscribePreferences/styled.js +7 -7
  183. package/es/components/molecules/UnsubscribePreview/components/styled.js +53 -53
  184. package/es/components/molecules/UnsubscribePreview/styled.js +48 -48
  185. package/es/components/molecules/UploadImage/styled.js +114 -114
  186. package/es/components/molecules/VirtualizedMenu/VirtualizedMenu.d.ts +1 -0
  187. package/es/components/molecules/VirtualizedMenu/components/Item/Item.js +3 -7
  188. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.d.ts +10 -10
  189. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.js +46 -327
  190. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/index.d.ts +9 -0
  191. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/index.js +5 -0
  192. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useFocusManagement.d.ts +23 -0
  193. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useFocusManagement.js +81 -0
  194. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useItemInteraction.d.ts +24 -0
  195. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useItemInteraction.js +32 -0
  196. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useKeyboardNavigation.d.ts +26 -0
  197. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useKeyboardNavigation.js +93 -0
  198. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useTreeState.d.ts +24 -0
  199. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useTreeState.js +94 -0
  200. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useVisibleItems.d.ts +7 -0
  201. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useVisibleItems.js +132 -0
  202. package/es/components/molecules/VirtualizedMenu/styled.js +103 -92
  203. package/es/components/molecules/VirtualizedMenu/types.d.ts +1 -0
  204. package/es/components/molecules/VirtualizedMenu/utils.d.ts +1 -0
  205. package/es/components/molecules/VirtualizedMenu/utils.js +1 -0
  206. package/es/components/molecules/index.d.ts +1 -0
  207. package/es/components/molecules/index.scss +1 -1
  208. package/es/components/organism/AccountProfile/components/AccountSetting/components/EditableInput/styles.js +98 -98
  209. package/es/components/organism/AccountProfile/components/AccountSetting/components/LanguageSelector/styles.js +18 -18
  210. package/es/components/organism/AccountProfile/components/AccountSetting/styled.js +543 -543
  211. package/es/components/organism/AccountProfile/components/AccountSetting/styles.scss +39 -39
  212. package/es/components/organism/AccountSharing/AccountSharing.d.ts +1 -0
  213. package/es/components/organism/AccountSharing/AccountSharing.js +17 -33
  214. package/es/components/organism/AccountSharing/styled.js +346 -346
  215. package/es/components/organism/ActivityTimeline/ActivityTimeline.js +3 -3
  216. package/es/components/organism/ActivityTimeline/__mocks__/event_tracking.json +1290 -1290
  217. package/es/components/organism/ActivityTimeline/__mocks__/timeline.json +1896 -1896
  218. package/es/components/organism/ActivityTimeline/components/ActionHistory/styled.js +28 -28
  219. package/es/components/organism/ActivityTimeline/components/CardMember/styled.js +60 -60
  220. package/es/components/organism/ActivityTimeline/components/ItemGroupEvent/styled.js +4 -4
  221. package/es/components/organism/ActivityTimeline/components/List/styled.js +77 -77
  222. package/es/components/organism/ActivityTimeline/components/ListItem/styled.js +37 -37
  223. package/es/components/organism/ActivityTimeline/components/ProductCard/styled.js +92 -92
  224. package/es/components/organism/ActivityTimeline/components/Redeem/styled.js +7 -7
  225. package/es/components/organism/ActivityTimeline/components/Slide/styled.js +20 -20
  226. package/es/components/organism/ActivityTimeline/components/TimeLineTitle/styled.js +7 -7
  227. package/es/components/organism/ActivityTimeline/components/TimelineSection/styled.js +69 -69
  228. package/es/components/organism/ActivityTimeline/constants.d.ts +9 -9
  229. package/es/components/organism/ActivityTimeline/constants.js +3 -3
  230. package/es/components/organism/ActivityTimeline/index.d.ts +530 -1
  231. package/es/components/organism/ActivityTimeline/index.js +9 -1
  232. package/es/components/organism/ActivityTimeline/styled.js +43 -43
  233. package/es/components/organism/ActivityTimeline/utils.js +186 -15
  234. package/es/components/organism/AlgorithmsSetting/styled.js +35 -35
  235. package/es/components/organism/BasicLogin/components/ChooseMethod/styled.js +19 -19
  236. package/es/components/organism/BasicLogin/components/LoginWithEmail/styled.js +3 -3
  237. package/es/components/organism/BasicLogin/components/LoginWithGG/styled.js +3 -3
  238. package/es/components/organism/BasicLogin/components/SignIn/styled.js +8 -8
  239. package/es/components/organism/BasicLogin/components/WidgetLayout/styled.js +18 -18
  240. package/es/components/organism/BasicLogin/styled.js +107 -107
  241. package/es/components/organism/ContentSources/styled.js +50 -50
  242. package/es/components/organism/DataTable/components/AddButton/index.js +8 -8
  243. package/es/components/organism/DataTable/components/ModifyColumn/styled.js +18 -18
  244. package/es/components/organism/DataTable/components/Pagination/styled.js +26 -26
  245. package/es/components/organism/DataTable/components/Table/styled.js +135 -135
  246. package/es/components/organism/DataTable/components/Toolbar/SearchPopover.js +17 -17
  247. package/es/components/organism/DataTable/components/Toolbar/styled.js +70 -70
  248. package/es/components/organism/DataTable/styled/index.js +84 -84
  249. package/es/components/organism/Filter/components/FilterCondition/styled.js +34 -34
  250. package/es/components/organism/Filter/styled.js +109 -109
  251. package/es/components/organism/FilterSetting/components/common/InputArray/styled.js +5 -5
  252. package/es/components/organism/FilterSetting/components/common/InputOrSelect/index.js +63 -63
  253. package/es/components/organism/FilterSetting/components/common/InputSelectMulti/ColumnSuggestion/index.js +31 -31
  254. package/es/components/organism/FilterSetting/components/common/InputSelectMulti/Tree/index.js +22 -22
  255. package/es/components/organism/FilterSetting/components/common/InputSelectMulti/index.js +55 -55
  256. package/es/components/organism/FilterSetting/styled.js +19 -19
  257. package/es/components/organism/GenerativeInsights/styled.js +55 -55
  258. package/es/components/organism/Help/styled.js +267 -267
  259. package/es/components/organism/LeftMenu/LeftMenu.js +6 -6
  260. package/es/components/organism/LeftMenu/components/HomeMenu/styled.js +39 -39
  261. package/es/components/organism/LeftMenu/components/common/ChildMenu/components/MenuItemImage/styled.js +16 -16
  262. package/es/components/organism/LeftMenu/components/common/ChildMenu/styled.js +156 -156
  263. package/es/components/organism/LeftMenu/hooks/usePermission.js +1 -1
  264. package/es/components/organism/LeftMenu/styled.js +216 -214
  265. package/es/components/organism/LeftMenu/types/index.d.ts +7 -0
  266. package/es/components/organism/LeftMenu/utils/index.js +1 -1
  267. package/es/components/organism/Login/Login.js +19 -36
  268. package/es/components/organism/Login/components/ChooseMethod/styled.js +19 -19
  269. package/es/components/organism/Login/components/ForgotPassword/styled.js +8 -8
  270. package/es/components/organism/Login/components/LoginSelectPortal/Item/styled.js +31 -31
  271. package/es/components/organism/Login/components/LoginSelectPortal/styled.js +3 -3
  272. package/es/components/organism/Login/components/LoginWithEmail/styled.js +3 -3
  273. package/es/components/organism/Login/components/LoginWithGG/styled.js +3 -3
  274. package/es/components/organism/Login/components/SetupGGAuthenticator/styled.js +7 -7
  275. package/es/components/organism/Login/components/SignIn/SignIn.js +2 -2
  276. package/es/components/organism/Login/components/SignIn/styled.js +8 -8
  277. package/es/components/organism/Login/components/VerifyAccount/styled.js +13 -13
  278. package/es/components/organism/Login/components/WidgetLayout/styled.js +18 -18
  279. package/es/components/organism/Login/styled.js +115 -115
  280. package/es/components/organism/Login/types/index.d.ts +2 -0
  281. package/es/components/organism/Menu/styled.js +6 -6
  282. package/es/components/organism/ModifyColumnModal/styled.js +132 -132
  283. package/es/components/organism/Notification/styled.js +155 -155
  284. package/es/components/organism/PreviewCollections/Messages/SkeletonMessage/styled.js +14 -14
  285. package/es/components/organism/PreviewCollections/WhatsappMessage/CarouselMessage/styled.js +63 -63
  286. package/es/components/organism/PreviewCollections/constants.js +50 -50
  287. package/es/components/organism/PreviewCollections/styled.js +16 -16
  288. package/es/components/organism/PreviewTemplateModal/components/Banner/styled.js +78 -78
  289. package/es/components/organism/PreviewTemplateModal/components/Information/styled.js +52 -52
  290. package/es/components/organism/PreviewTemplateModal/components/SimilarTemplate/styled.js +18 -18
  291. package/es/components/organism/PreviewTemplateModal/components/ThumbnailSlider/styled.js +77 -77
  292. package/es/components/organism/PreviewTemplateModal/styled.js +21 -21
  293. package/es/components/organism/SQLGeneration/components/styled.js +354 -354
  294. package/es/components/organism/SQLGeneration/index.scss +1 -1
  295. package/es/components/organism/SQLGeneration/integrations/AceEditor/index.scss +4 -4
  296. package/es/components/organism/Table/CrossTabTable/components/CustomCell/styled.js +11 -11
  297. package/es/components/organism/Table/CrossTabTable/styled.js +11 -11
  298. package/es/components/organism/Table/ExplorePivotTable/components/CustomCell/styled.js +17 -17
  299. package/es/components/organism/Table/ExplorePivotTable/styled.js +11 -11
  300. package/es/components/organism/TextEditor/TextEditor.d.ts +9 -2
  301. package/es/components/organism/TextEditor/TextEditor.js +203 -42
  302. package/es/components/organism/TextEditor/__mocks__/text-contennt.js +44 -44
  303. package/es/components/organism/TextEditor/constants.d.ts +9 -0
  304. package/es/components/organism/TextEditor/constants.js +66 -0
  305. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.d.ts +6 -128
  306. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.js +7 -292
  307. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.d.ts +1 -1
  308. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.js +4 -0
  309. package/es/components/organism/TextEditor/extensions/Link.js +33 -14
  310. package/es/components/organism/TextEditor/extensions/ListItem.d.ts +10 -0
  311. package/es/components/organism/TextEditor/extensions/ListItem.js +93 -0
  312. package/es/components/organism/TextEditor/extensions/SmartTag.d.ts +5 -6
  313. package/es/components/organism/TextEditor/extensions/SmartTag.js +96 -4
  314. package/es/components/organism/TextEditor/hooks/useColorSet.js +7 -0
  315. package/es/components/organism/TextEditor/hooks/useMarkTracking.js +2 -1
  316. package/es/components/organism/TextEditor/index.d.ts +7 -5
  317. package/es/components/organism/TextEditor/index.scss +65 -68
  318. package/es/components/organism/TextEditor/provider.d.ts +1 -0
  319. package/es/components/organism/TextEditor/provider.js +6 -3
  320. package/es/components/organism/TextEditor/store.d.ts +11 -4
  321. package/es/components/organism/TextEditor/store.js +22 -2
  322. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/froala-legacy-format.settings.json +95 -0
  323. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/shared.d.ts +111 -0
  324. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/shared.js +82 -0
  325. package/es/components/organism/TextEditor/stories/shared.d.ts +64 -0
  326. package/es/components/organism/TextEditor/stories/shared.js +57 -0
  327. package/es/components/organism/TextEditor/styled.d.ts +1 -1
  328. package/es/components/organism/TextEditor/styled.js +54 -53
  329. package/es/components/organism/TextEditor/types.d.ts +161 -11
  330. package/es/components/organism/TextEditor/types.js +1 -0
  331. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.d.ts +2 -1
  332. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.js +80 -51
  333. package/es/components/organism/TextEditor/ui/Button/Button.js +22 -22
  334. package/es/components/organism/TextEditor/ui/DropdownButton/DropdownButton.js +13 -13
  335. package/es/components/organism/TextEditor/ui/Emoji/EmojiList.js +1 -1
  336. package/es/components/organism/TextEditor/ui/Emoji/suggestion.d.ts +1 -1
  337. package/es/components/organism/TextEditor/ui/Emoji/suggestion.js +2 -2
  338. package/es/components/organism/TextEditor/ui/FontPopover/FontPopover.js +12 -2
  339. package/es/components/organism/TextEditor/ui/FontPopover/styled.js +32 -32
  340. package/es/components/organism/TextEditor/ui/LinkInsertForm/LinkInsertForm.d.ts +16 -0
  341. package/es/components/organism/TextEditor/ui/LinkInsertForm/LinkInsertForm.js +61 -0
  342. package/es/components/organism/TextEditor/ui/LinkInsertForm/index.d.ts +2 -0
  343. package/es/components/organism/TextEditor/ui/LinkInsertForm/index.js +1 -0
  344. package/es/components/organism/TextEditor/ui/LinkPopover/LinkPopover.d.ts +9 -0
  345. package/es/components/organism/TextEditor/ui/LinkPopover/LinkPopover.js +126 -0
  346. package/es/components/organism/TextEditor/ui/LinkPopover/index.d.ts +2 -0
  347. package/es/components/organism/TextEditor/ui/LinkPopover/index.js +1 -0
  348. package/es/components/organism/TextEditor/ui/Popover/Popover.js +1 -1
  349. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/styled.js +54 -54
  350. package/es/components/organism/TextEditor/ui/TextAlignSelect/TextAlignSelect.js +10 -12
  351. package/es/components/organism/TextEditor/ui/Toolbar/{Toolbar.d.ts → FormattingToolbar.d.ts} +3 -4
  352. package/es/components/organism/TextEditor/ui/Toolbar/FormattingToolbar.js +90 -0
  353. package/es/components/organism/TextEditor/ui/Toolbar/LinkPreviewToolbar.d.ts +10 -0
  354. package/es/components/organism/TextEditor/ui/Toolbar/LinkPreviewToolbar.js +39 -0
  355. package/es/components/organism/TextEditor/ui/Toolbar/actions/EmojiAction.js +4 -3
  356. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.d.ts +1 -0
  357. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.js +2 -2
  358. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontSizeAction.js +17 -12
  359. package/es/components/organism/TextEditor/ui/Toolbar/index.d.ts +2 -1
  360. package/es/components/organism/TextEditor/ui/Toolbar/index.js +2 -1
  361. package/es/components/organism/TextEditor/utils/documentState.d.ts +14 -0
  362. package/es/components/organism/TextEditor/utils/documentState.js +25 -0
  363. package/es/components/organism/TextEditor/utils/htmlProcessing.js +60 -0
  364. package/es/components/organism/TextEditor/utils/link.d.ts +10 -1
  365. package/es/components/organism/TextEditor/utils/link.js +161 -7
  366. package/es/components/organism/TextEditor/utils/menu.js +2 -1
  367. package/es/components/organism/TextEditor/utils/selection.js +3 -2
  368. package/es/components/organism/TextEditor/utils/smartTag.js +2 -1
  369. package/es/components/organism/TicketEditor/styled.js +860 -860
  370. package/es/components/organism/TicketEditorV2/styled.js +839 -839
  371. package/es/components/organism/index.d.ts +1 -1
  372. package/es/components/organism/index.scss +2 -2
  373. package/es/components/template/Layout/Layout.js +10 -10
  374. package/es/components/template/Layout/components/RecommendationWorkspace/components/MenuMapping/components/OldLeftMenu/styled.js +73 -73
  375. package/es/components/template/Layout/components/RecommendationWorkspace/components/MenuMapping/styled.js +39 -39
  376. package/es/components/template/Layout/components/RecommendationWorkspace/components/RecommendationImage/styled.js +61 -61
  377. package/es/components/template/Layout/components/RecommendationWorkspace/styled.js +16 -16
  378. package/es/components/template/Layout/styled.js +84 -84
  379. package/es/components/template/TemplateListing/Loadable.d.ts +1 -0
  380. package/es/components/template/TemplateListing/components/BlankTemplate/styled.js +21 -21
  381. package/es/components/template/TemplateListing/components/CategoryListing/styled.js +123 -123
  382. package/es/components/template/TemplateListing/components/Empty/styled.js +20 -20
  383. package/es/components/template/TemplateListing/stories/demo/styled.js +4 -4
  384. package/es/components/template/TemplateListing/styled/index.js +40 -40
  385. package/es/hooks/index.d.ts +1 -1
  386. package/es/hooks/index.js +1 -1
  387. package/es/providers/ConfigProvider/ConfigProvider.d.ts +4 -0
  388. package/es/providers/ConfigProvider/ConfigProvider.js +2 -3
  389. package/es/providers/ConfigProvider/GlobalStyle.d.ts +2 -2
  390. package/es/providers/ConfigProvider/GlobalStyle.js +1252 -1249
  391. package/es/services/MediaTemplateDesign/UploadFile/index.js +4 -4
  392. package/es/styled/common.js +51 -51
  393. package/es/tests/styled.js +4 -4
  394. package/es/utils/common.d.ts +1 -1
  395. package/es/utils/common.js +3 -3
  396. package/es/utils/cookie.js +2 -1
  397. package/es/utils/crossSubdomainCookieOptions.d.ts +14 -0
  398. package/es/utils/crossSubdomainCookieOptions.js +12 -0
  399. package/es/utils/variables.js +7 -7
  400. package/package.json +282 -286
  401. package/es/components/organism/TextEditor/ui/BubbleToolbar/BubbleToolbar.d.ts +0 -1
  402. package/es/components/organism/TextEditor/ui/BubbleToolbar/BubbleToolbar.js +0 -1
  403. package/es/components/organism/TextEditor/ui/BubbleToolbar/index.d.ts +0 -0
  404. package/es/components/organism/TextEditor/ui/BubbleToolbar/index.js +0 -1
  405. package/es/components/organism/TextEditor/ui/Toolbar/Toolbar.js +0 -39
@@ -2,4 +2,5 @@ import { CUSTOM_LINK_EXTENSION_NAME, ORDERED_LIST_STYLE_TYPE, UNORDERED_LIST_STY
2
2
  export const isOrderedListStyleType = (value) => typeof value === 'string' && Object.values(ORDERED_LIST_STYLE_TYPE).some(v => v === value);
3
3
  export const isUnorderedListStyleType = (value) => typeof value === 'string' && Object.values(UNORDERED_LIST_STYLE_TYPE).some(v => v === value);
4
4
  export const isLinkMark = (mark) => mark.type.name === CUSTOM_LINK_EXTENSION_NAME;
5
+ export const isSmartTagNode = (node) => node.type.name === 'smartTag';
5
6
  export const isLinkMarkRange = (markRange) => isLinkMark(markRange.mark);
@@ -1,2 +1,3 @@
1
1
  /// <reference types="react" />
2
- export declare const BubbleMenu: import("react").ForwardRefExoticComponent<Pick<Partial<Omit<Pick<Partial<import("../../extensions/BubbleMenu").BubbleMenuPluginProps>, "pluginKey"> & Omit<import("../../extensions/BubbleMenu").BubbleMenuPluginProps, "pluginKey">, "element">>, "editor"> & Omit<Omit<Pick<Partial<import("../../extensions/BubbleMenu").BubbleMenuPluginProps>, "pluginKey"> & Omit<import("../../extensions/BubbleMenu").BubbleMenuPluginProps, "pluginKey">, "element">, "editor"> & import("react").HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
2
+ import { BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
3
+ export declare const BubbleMenu: import("react").ForwardRefExoticComponent<Pick<Partial<Omit<Pick<Partial<BubbleMenuPluginProps>, "pluginKey"> & Omit<BubbleMenuPluginProps, "pluginKey">, "element">>, "editor"> & Omit<Omit<Pick<Partial<BubbleMenuPluginProps>, "pluginKey"> & Omit<BubbleMenuPluginProps, "pluginKey">, "element">, "editor"> & import("react").HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,17 +1,32 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useCurrentEditor } from '@tiptap/react';
3
- import { forwardRef, useEffect, useRef } from 'react';
3
+ import { forwardRef, useEffect, useLayoutEffect, useRef, useState } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { BubbleMenuPlugin } from '../../extensions/BubbleMenu';
6
- import { useDeepCompareEffect, useIsMounted } from '@antscorp/antsomi-ui/es/hooks';
7
- import { useTextEditorStore } from '../../provider';
8
- import clsx from 'clsx';
6
+ import { useDeepCompareEffect } from '@antscorp/antsomi-ui/es/hooks';
9
7
  import { ANTSOMI_COMPONENT_PREFIX_CLS } from '@antscorp/antsomi-ui/es/constants';
10
- export const BubbleMenu = forwardRef(({ pluginKey = 'bubbleMenu', editor, updateDelay, resizeDelay, shouldShow = null, options, children, container, className, ...restProps }, ref) => {
8
+ export const BubbleMenu = forwardRef(({ pluginKey = 'bubbleMenu', editor, updateDelay, resizeDelay, shouldShow = null, getReferencedVirtualElement, appendTo, options, children, ...restProps }, ref) => {
11
9
  const menuEl = useRef(document.createElement('div'));
12
- const isMounted = useIsMounted();
13
- const setIsShowBubbleMenu = useTextEditorStore(state => state.setIsShowBubbleMenu);
10
+ menuEl.current.classList.add(`${ANTSOMI_COMPONENT_PREFIX_CLS}-text-editor-bubble-menu`);
14
11
  const { editor: currentEditor } = useCurrentEditor();
12
+ /**
13
+ * Tracks whether the bubble menu has been shown at least once.
14
+ * Used for lazy mounting optimization - children are only mounted after first show.
15
+ */
16
+ const [hasShown, setHasShown] = useState(false);
17
+ /**
18
+ * Ref to track hasShown synchronously (since state updates are async).
19
+ */
20
+ const hasShownRef = useRef(false);
21
+ /**
22
+ * Tracks whether we're in the first show process (to prevent empty flash).
23
+ * After first show completes, this flag is no longer used.
24
+ */
25
+ const isFirstShowRef = useRef(false);
26
+ /**
27
+ * The editor instance where the bubble menu plugin will be registered.
28
+ */
29
+ const pluginEditor = editor || currentEditor;
15
30
  useEffect(() => {
16
31
  if (typeof ref === 'function') {
17
32
  ref(menuEl.current);
@@ -20,66 +35,80 @@ export const BubbleMenu = forwardRef(({ pluginKey = 'bubbleMenu', editor, update
20
35
  ref.current = menuEl.current;
21
36
  }
22
37
  }, [ref]);
38
+ const bubbleMenuPluginProps = {
39
+ updateDelay,
40
+ resizeDelay,
41
+ pluginKey,
42
+ shouldShow,
43
+ getReferencedVirtualElement,
44
+ options: {
45
+ ...options,
46
+ strategy: options?.strategy || 'absolute',
47
+ placement: options?.placement || 'bottom',
48
+ offset: options?.offset || 10,
49
+ onHide: () => {
50
+ options?.onHide?.();
51
+ },
52
+ onShow: () => {
53
+ if (!hasShownRef.current) {
54
+ // First show: mark as first show and force hide until children mount
55
+ hasShownRef.current = true;
56
+ isFirstShowRef.current = true;
57
+ menuEl.current.style.visibility = 'hidden';
58
+ setHasShown(true);
59
+ }
60
+ options?.onShow?.();
61
+ },
62
+ },
63
+ };
64
+ const bubbleMenuPluginPropsRef = useRef(bubbleMenuPluginProps);
65
+ bubbleMenuPluginPropsRef.current = bubbleMenuPluginProps;
66
+ useLayoutEffect(() => {
67
+ // After children mount in first show, make menuEl visible
68
+ if (isFirstShowRef.current) {
69
+ menuEl.current.style.visibility = 'visible';
70
+ isFirstShowRef.current = false;
71
+ }
72
+ });
23
73
  useDeepCompareEffect(() => {
24
- const bubbleMenuElement = menuEl.current;
25
- bubbleMenuElement.className = clsx(className, `${ANTSOMI_COMPONENT_PREFIX_CLS}-text-editor-bubble-menu`);
26
- if (editor?.isDestroyed || currentEditor?.isDestroyed) {
74
+ if (pluginEditor?.isDestroyed) {
27
75
  return;
28
76
  }
29
- const attachToEditor = editor || currentEditor;
30
- if (!attachToEditor) {
77
+ if (!pluginEditor) {
31
78
  // eslint-disable-next-line no-console
32
79
  console.warn('BubbleMenu component is not rendered inside of an editor component or does not have editor prop.');
33
80
  return;
34
81
  }
82
+ const bubbleMenuElement = menuEl.current;
83
+ bubbleMenuElement.style.visibility = 'hidden';
84
+ bubbleMenuElement.style.position = 'absolute';
35
85
  const plugin = BubbleMenuPlugin({
36
- updateDelay,
37
- resizeDelay,
38
- editor: attachToEditor,
86
+ ...bubbleMenuPluginPropsRef.current,
87
+ appendTo,
88
+ editor: pluginEditor,
39
89
  element: bubbleMenuElement,
40
- container,
41
- pluginKey,
42
- options: {
43
- ...options,
44
- strategy: options?.strategy || 'absolute',
45
- placement: options?.placement || 'bottom',
46
- offset: options?.offset,
47
- onShow: () => {
48
- if (isMounted()) {
49
- setIsShowBubbleMenu(true);
50
- }
51
- options?.onShow?.();
52
- },
53
- onHide: () => {
54
- if (isMounted()) {
55
- setIsShowBubbleMenu(false);
56
- }
57
- options?.onHide?.();
58
- },
59
- },
60
- shouldShow,
61
90
  });
62
- attachToEditor.registerPlugin(plugin);
91
+ pluginEditor.registerPlugin(plugin);
92
+ const createdPluginKey = bubbleMenuPluginPropsRef.current.pluginKey;
63
93
  return () => {
64
- attachToEditor.unregisterPlugin(pluginKey);
94
+ pluginEditor.unregisterPlugin(createdPluginKey);
65
95
  window.requestAnimationFrame(() => {
66
96
  if (bubbleMenuElement.parentNode) {
67
97
  bubbleMenuElement.parentNode.removeChild(bubbleMenuElement);
68
98
  }
69
99
  });
70
100
  };
71
- }, [
72
- editor,
73
- container,
74
- updateDelay,
75
- resizeDelay,
76
- pluginKey,
77
- options,
78
- className,
79
- currentEditor,
80
- isMounted,
81
- shouldShow,
82
- setIsShowBubbleMenu,
83
- ]);
101
+ }, [appendTo, pluginEditor]);
102
+ /**
103
+ * Lazy mounting optimization: only mount children after the bubble menu
104
+ * has been shown at least once. This significantly improves performance
105
+ * when many TextEditor instances exist (e.g., in lists).
106
+ *
107
+ * After first show, children remain mounted and the tiptap plugin
108
+ * handles visibility automatically via CSS, avoiding flash effects.
109
+ */
110
+ if (!hasShown) {
111
+ return null;
112
+ }
84
113
  return createPortal(_jsx("div", { ...restProps, children: children }), menuEl.current);
85
114
  });
@@ -4,28 +4,28 @@ import clsx from 'clsx';
4
4
  import styled from 'styled-components';
5
5
  import { forwardRef } from 'react';
6
6
  import { THEME } from '@antscorp/antsomi-ui/es/constants';
7
- const StyledButton = styled(Button) `
8
- &.antsomi-btn.antsomi-btn-text {
9
- height: 24px;
10
- width: 24px;
11
- padding: 0;
12
- flex-shrink: 0;
13
- border-radius: 2px;
14
- color: ${THEME.token?.bw8};
15
-
16
- &.is-active {
17
- color: ${THEME.token?.colorPrimary};
18
- background-color: #e0ebf7;
19
-
20
- &:hover {
21
- background-color: #e0ebf7;
22
- }
23
- }
24
-
25
- &:hover:not(:disabled, .is-active) {
26
- color: ${THEME.token?.colorPrimary};
27
- }
28
- }
7
+ const StyledButton = styled(Button) `
8
+ &.antsomi-btn.antsomi-btn-text {
9
+ height: 24px;
10
+ width: 24px;
11
+ padding: 0;
12
+ flex-shrink: 0;
13
+ border-radius: 2px;
14
+ color: ${THEME.token?.bw8};
15
+
16
+ &.is-active {
17
+ color: ${THEME.token?.colorPrimary};
18
+ background-color: #e0ebf7;
19
+
20
+ &:hover {
21
+ background-color: #e0ebf7;
22
+ }
23
+ }
24
+
25
+ &:hover:not(:disabled, .is-active) {
26
+ color: ${THEME.token?.colorPrimary};
27
+ }
28
+ }
29
29
  `;
30
30
  export const TextEditorButton = forwardRef((props, ref) => {
31
31
  const { children, isActive, tooltipProps, className, disabled, ...restProps } = props;
@@ -5,19 +5,19 @@ import { TextEditorButton } from '../Button';
5
5
  import { ArrowDropDownIcon } from '@antscorp/antsomi-ui/es/components/icons';
6
6
  import styled from 'styled-components';
7
7
  import clsx from 'clsx';
8
- const StyledTriggerButton = styled(TextEditorButton) `
9
- &.antsomi-dropdown-trigger.antsomi-btn {
10
- gap: 0;
11
- padding: 0;
12
- width: 40px;
13
- height: 24px;
14
- }
15
-
16
- &.is-open {
17
- svg.icon-dropdown {
18
- transform: rotate(180deg);
19
- }
20
- }
8
+ const StyledTriggerButton = styled(TextEditorButton) `
9
+ &.antsomi-dropdown-trigger.antsomi-btn {
10
+ gap: 0;
11
+ padding: 0;
12
+ width: 40px;
13
+ height: 24px;
14
+ }
15
+
16
+ &.is-open {
17
+ svg.icon-dropdown {
18
+ transform: rotate(180deg);
19
+ }
20
+ }
21
21
  `;
22
22
  export const DropdownButton = (props) => {
23
23
  const { className, children, disabled, tooltipProps, options = [], value, onClickOption } = props;
@@ -44,7 +44,7 @@ export const EmojiList = forwardRef((props, ref) => {
44
44
  if (items.length <= 0) {
45
45
  return null;
46
46
  }
47
- return (_jsx(VirtualizedMenu, { className: `${COMPONENT_CLS}-emoji-list`, itemSize: ITEM_SIZE, selected: items.at(selectedIndex) ? [items[selectedIndex].slug] : [], onClick: item => {
47
+ return (_jsx(VirtualizedMenu, { className: `${COMPONENT_CLS}-emoji-list`, itemSize: ITEM_SIZE, selected: items.at(selectedIndex) ? [items[selectedIndex].slug] : [], focusedKey: items[selectedIndex]?.slug, onClick: item => {
48
48
  const idx = items.findIndex(i => i.slug === item.item.key);
49
49
  if (idx !== -1) {
50
50
  selectItem(idx);
@@ -1,4 +1,4 @@
1
1
  import { EmojiOptions } from '../../extensions/Emoji';
2
2
  export declare const suggestion: ({ container, }: {
3
- container?: HTMLElement | null;
3
+ container?: HTMLElement | (() => HTMLElement);
4
4
  }) => EmojiOptions['suggestion'];
@@ -10,7 +10,7 @@ const updatePosition = (editor, element, itemLength) => {
10
10
  getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to),
11
11
  };
12
12
  computePosition(virtualElement, element, {
13
- placement: 'top-start',
13
+ placement: 'bottom-start',
14
14
  strategy: 'absolute',
15
15
  middleware: [shift(), flip()],
16
16
  }).then(({ x, y, strategy }) => {
@@ -45,7 +45,7 @@ export const suggestion = ({ container }) => ({
45
45
  }
46
46
  const rendererEl = safeGetRenndererEl();
47
47
  rendererEl.classList.add(`${COMPONENT_CLS}-emoji-popover`);
48
- (container || document.body).appendChild(rendererEl);
48
+ ((typeof container === 'function' ? container() : container) || document.body).appendChild(rendererEl);
49
49
  updatePosition(props.editor, rendererEl, props.items.length);
50
50
  },
51
51
  onUpdate(props) {
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { memo, useCallback, useEffect, useMemo, useState } from 'react';
2
+ import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
3
  import { Typography } from 'antd';
4
4
  import { SearchPopover, VirtualizedMenu } from '@antscorp/antsomi-ui/es/components/molecules';
5
5
  import { FontGroupTitle, PopoverTrigger } from './styled';
@@ -52,6 +52,7 @@ export const FontPopover = memo((props) => {
52
52
  const itemSize = 30;
53
53
  const itemSpacing = 4;
54
54
  const activeFontName = fontValue?.font.fontFamily.name;
55
+ const inputSearchRef = useRef(null);
55
56
  const [search, setSearch] = useState('');
56
57
  const [open, setOpen] = useState(false);
57
58
  const [fontItemsSize, setFontItemSize] = useDebounce(0, 200);
@@ -83,10 +84,19 @@ export const FontPopover = memo((props) => {
83
84
  const listSize = calInlineListSize(Math.min(items.length, 6), itemSize, itemSpacing);
84
85
  setFontItemSize(listSize);
85
86
  }, [items.length, setFontItemSize]);
87
+ useEffect(() => {
88
+ if (open) {
89
+ // Use setTimeout to ensure the popover content is fully mounted in the DOM
90
+ const timeoutId = setTimeout(() => {
91
+ inputSearchRef.current?.focus();
92
+ }, 0);
93
+ return () => clearTimeout(timeoutId);
94
+ }
95
+ }, [open]);
86
96
  return (_jsx(SearchPopover, { open: open, placement: "bottomLeft", onOpenChange: handleOpenChange, getPopupContainer: () => bubbleMenuContainer || document.body, inputSearchProps: {
87
97
  value: search,
88
98
  onAfterChange: setSearch,
89
- }, overlayClassName: "font-popover-overlay", content: _jsx("div", { className: "list-font-root", style: {
99
+ }, inputSearchRef: inputSearchRef, overlayClassName: "font-popover-overlay", content: _jsx("div", { className: "list-font-root", style: {
90
100
  height: `${fontItemsSize}px`,
91
101
  }, children: _jsx(VirtualizedMenu, { itemSize: itemSize, inlinePadding: 0, itemSpacing: itemSpacing, selectable: false, items: items }) }), children: _jsx(PopoverTrigger, { className: "font-popover-trigger", children: _jsx(Typography.Text, { ellipsis: { tooltip: true }, children: activeFontName }) }) }));
92
102
  });
@@ -1,36 +1,36 @@
1
1
  import { THEME } from '@antscorp/antsomi-ui/es/constants';
2
2
  import styled from 'styled-components';
3
- export const PopoverTrigger = styled.div `
4
- &.font-popover-trigger {
5
- width: 100px;
6
- height: 30px;
7
- display: flex;
8
- align-items: center;
9
- padding: 0 7px;
10
- cursor: pointer;
11
- overflow: hidden;
12
- white-space: nowrap;
13
- text-overflow: ellipsis;
14
- font-size: ${THEME.token?.fontSize || 12}px;
15
- border-bottom: 1px solid ${THEME.token?.blue1};
16
- flex-shrink: 0;
17
-
18
- &:hover {
19
- background-color: ${THEME.token?.blue};
20
- }
21
- }
3
+ export const PopoverTrigger = styled.div `
4
+ &.font-popover-trigger {
5
+ width: 100px;
6
+ height: 30px;
7
+ display: flex;
8
+ align-items: center;
9
+ padding: 0 7px;
10
+ cursor: pointer;
11
+ overflow: hidden;
12
+ white-space: nowrap;
13
+ text-overflow: ellipsis;
14
+ font-size: ${THEME.token?.fontSize || 12}px;
15
+ border-bottom: 1px solid ${THEME.token?.blue1};
16
+ flex-shrink: 0;
17
+
18
+ &:hover {
19
+ background-color: ${THEME.token?.blue};
20
+ }
21
+ }
22
22
  `;
23
- export const FontGroupTitle = styled.div `
24
- color: ${THEME.token?.bw8};
25
- display: flex;
26
- align-items: center;
27
- font-size: 11px;
28
-
29
- &.font-popover-item {
30
- cursor: default;
31
-
32
- &:hover {
33
- background-color: white;
34
- }
35
- }
23
+ export const FontGroupTitle = styled.div `
24
+ color: ${THEME.token?.bw8};
25
+ display: flex;
26
+ align-items: center;
27
+ font-size: 11px;
28
+
29
+ &.font-popover-item {
30
+ cursor: default;
31
+
32
+ &:hover {
33
+ background-color: white;
34
+ }
35
+ }
36
36
  `;
@@ -0,0 +1,16 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import React from 'react';
3
+ import type { LinkFormData } from '../../types';
4
+ export type LinkInsertFormProps = {
5
+ /** TipTap editor instance */
6
+ editor: Editor;
7
+ /** Form mode: insert or edit */
8
+ mode: 'insert' | 'edit';
9
+ /** Initial form data */
10
+ initialData: LinkFormData;
11
+ /** Callback when form is submitted */
12
+ onSubmit: () => void;
13
+ /** Callback when form is cancelled */
14
+ onCancel: () => void;
15
+ };
16
+ export declare const LinkInsertForm: React.FC<LinkInsertFormProps>;
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Checkbox, Flex, Input } from 'antd';
3
+ import { useState, useCallback, useRef, useEffect } from 'react';
4
+ export const LinkInsertForm = props => {
5
+ const { editor, mode, initialData, onSubmit, onCancel } = props;
6
+ const [url, setUrl] = useState(initialData.url);
7
+ const [text, setText] = useState(initialData.text);
8
+ const [openInNewTab, setOpenInNewTab] = useState(initialData.openInNewTab);
9
+ const urlInputRef = useRef(null);
10
+ // Auto-focus the URL input without scrolling
11
+ useEffect(() => {
12
+ urlInputRef.current?.focus({
13
+ preventScroll: true,
14
+ });
15
+ }, []);
16
+ const handleSubmit = useCallback(() => {
17
+ if (!url.trim()) {
18
+ // Don't submit if URL is empty
19
+ return;
20
+ }
21
+ // If text is different from initial, update the content
22
+ if (text !== initialData.text && text.trim()) {
23
+ editor
24
+ .chain()
25
+ .focus()
26
+ .setCustomLink({
27
+ attrs: {
28
+ href: url,
29
+ target: openInNewTab ? '_blank' : null,
30
+ },
31
+ content: text,
32
+ })
33
+ .run();
34
+ }
35
+ else {
36
+ // Just update the link attributes
37
+ editor
38
+ .chain()
39
+ .focus()
40
+ .setCustomLink({
41
+ attrs: {
42
+ href: url,
43
+ target: openInNewTab ? '_blank' : null,
44
+ },
45
+ })
46
+ .run();
47
+ }
48
+ onSubmit();
49
+ }, [editor, url, text, initialData.text, openInNewTab, onSubmit]);
50
+ const handleKeyDown = useCallback((e) => {
51
+ if (e.key === 'Enter' && !e.shiftKey) {
52
+ e.preventDefault();
53
+ handleSubmit();
54
+ }
55
+ else if (e.key === 'Escape') {
56
+ e.preventDefault();
57
+ onCancel();
58
+ }
59
+ }, [handleSubmit, onCancel]);
60
+ return (_jsxs(Flex, { vertical: true, gap: 8, children: [_jsxs(Flex, { gap: 8, vertical: true, children: [_jsx(Input, { ref: urlInputRef, placeholder: "URL", value: url, onChange: e => setUrl(e.target.value), onKeyDown: handleKeyDown }), _jsx(Input, { placeholder: "Text", value: text, onChange: e => setText(e.target.value), onKeyDown: handleKeyDown })] }), _jsx(Checkbox, { checked: openInNewTab, onChange: e => setOpenInNewTab(e.target.checked), children: "Open in new tab" }), _jsxs(Flex, { justify: "flex-end", gap: 8, children: [_jsx(Button, { onClick: onCancel, children: "Cancel" }), _jsx(Button, { type: "primary", onClick: handleSubmit, disabled: !url.trim(), children: mode === 'insert' ? 'Insert' : 'Update' })] })] }));
61
+ };
@@ -0,0 +1,2 @@
1
+ export { LinkInsertForm } from './LinkInsertForm';
2
+ export type { LinkInsertFormProps } from './LinkInsertForm';
@@ -0,0 +1 @@
1
+ export { LinkInsertForm } from './LinkInsertForm';
@@ -0,0 +1,9 @@
1
+ import { Editor } from '@tiptap/react';
2
+ import React from 'react';
3
+ export type LinkPopoverProps = {
4
+ /** TipTap editor instance */
5
+ editor: Editor;
6
+ /** Optional container to append the popover to. Defaults to document.body */
7
+ container?: HTMLElement | (() => HTMLElement);
8
+ };
9
+ export declare const LinkPopover: React.FC<LinkPopoverProps>;
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { posToDOMRect } from '@tiptap/react';
3
+ import { useEffect, useRef, useCallback, useLayoutEffect } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { computePosition, flip, shift, offset } from '@floating-ui/dom';
6
+ import { useTextEditorStore } from '../../provider';
7
+ import { LinkInsertForm } from '../LinkInsertForm';
8
+ import { COMPONENT_CLS } from '../../constants';
9
+ const updatePosition = (editor, element) => {
10
+ const virtualElement = {
11
+ getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to),
12
+ };
13
+ computePosition(virtualElement, element, {
14
+ placement: 'bottom-start',
15
+ strategy: 'fixed',
16
+ middleware: [offset(10), shift(), flip()],
17
+ }).then(({ x, y, strategy }) => {
18
+ element.style.position = strategy;
19
+ element.style.left = `${x}px`;
20
+ element.style.top = `${y}px`;
21
+ });
22
+ };
23
+ export const LinkPopover = props => {
24
+ const { editor, container } = props;
25
+ const popoverRef = useRef(null);
26
+ const savedSelectionRef = useRef(null);
27
+ // Get link form state and actions from store
28
+ const linkFormState = useTextEditorStore(state => state.linkFormState);
29
+ const hideLinkForm = useTextEditorStore(state => state.hideLinkForm);
30
+ const isVisible = linkFormState?.isVisible ?? false;
31
+ // Save initial selection when form becomes visible
32
+ useEffect(() => {
33
+ if (isVisible) {
34
+ savedSelectionRef.current = {
35
+ from: editor.state.selection.from,
36
+ to: editor.state.selection.to,
37
+ };
38
+ }
39
+ else {
40
+ savedSelectionRef.current = null;
41
+ }
42
+ }, [editor, isVisible]);
43
+ // Update position whenever editor state changes or form becomes visible
44
+ useLayoutEffect(() => {
45
+ if (!isVisible || !popoverRef.current)
46
+ return;
47
+ updatePosition(editor, popoverRef.current);
48
+ }, [editor, isVisible, linkFormState]);
49
+ // Effect 1: Close on selection change (only if selection actually changed from saved)
50
+ useEffect(() => {
51
+ if (!isVisible || !savedSelectionRef.current)
52
+ return;
53
+ const handleSelectionUpdate = () => {
54
+ const currentSelection = editor.state.selection;
55
+ const savedSelection = savedSelectionRef.current;
56
+ // Only close if selection moved to a different position
57
+ if (savedSelection &&
58
+ (currentSelection.from !== savedSelection.from || currentSelection.to !== savedSelection.to)) {
59
+ hideLinkForm();
60
+ // Editor already has focus when selection changes, no need to refocus
61
+ }
62
+ };
63
+ editor.on('selectionUpdate', handleSelectionUpdate);
64
+ return () => {
65
+ editor.off('selectionUpdate', handleSelectionUpdate);
66
+ };
67
+ }, [editor, isVisible, hideLinkForm]);
68
+ // Effect 2: Close on click outside
69
+ useEffect(() => {
70
+ if (!isVisible)
71
+ return;
72
+ const handleClickOutside = (event) => {
73
+ if (popoverRef.current && !popoverRef.current.contains(event.target)) {
74
+ hideLinkForm();
75
+ // Check if click was on the editor
76
+ const editorElement = editor.view.dom;
77
+ const clickedOnEditor = editorElement.contains(event.target);
78
+ // If not clicked on editor, focus it after closing
79
+ if (!clickedOnEditor) {
80
+ setTimeout(() => {
81
+ editor.commands.focus();
82
+ }, 0);
83
+ }
84
+ // If clicked on editor, it will auto-focus naturally
85
+ }
86
+ };
87
+ // Use mousedown to catch the event before it propagates
88
+ document.addEventListener('mousedown', handleClickOutside);
89
+ return () => {
90
+ document.removeEventListener('mousedown', handleClickOutside);
91
+ };
92
+ }, [editor, isVisible, hideLinkForm]);
93
+ // Handle form submission
94
+ const handleSubmit = useCallback(() => {
95
+ hideLinkForm();
96
+ // Focus back to editor after closing form
97
+ setTimeout(() => {
98
+ editor.commands.focus();
99
+ }, 0);
100
+ }, [editor, hideLinkForm]);
101
+ // Handle form cancellation (also handles Escape key via LinkInsertForm)
102
+ const handleCancel = useCallback(() => {
103
+ hideLinkForm();
104
+ // Focus back to editor after closing form
105
+ setTimeout(() => {
106
+ editor.commands.focus();
107
+ }, 0);
108
+ }, [editor, hideLinkForm]);
109
+ // Don't render if not visible or no form state
110
+ if (!isVisible || !linkFormState) {
111
+ return null;
112
+ }
113
+ const popoverElement = (_jsx("div", { ref: popoverRef, className: `${COMPONENT_CLS}-link-popover`, style: {
114
+ position: 'absolute',
115
+ zIndex: 1000,
116
+ background: '#fff',
117
+ border: '1px solid #d9d9d9',
118
+ borderRadius: '8px',
119
+ padding: '16px',
120
+ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
121
+ minWidth: '300px',
122
+ }, children: _jsx(LinkInsertForm, { editor: editor, mode: linkFormState.mode, initialData: linkFormState.data, onSubmit: handleSubmit, onCancel: handleCancel }) }));
123
+ // Use portal to render into container or document.body
124
+ const containerElement = (typeof container === 'function' ? container() : container) || document.body;
125
+ return createPortal(popoverElement, containerElement);
126
+ };
@@ -0,0 +1,2 @@
1
+ export { LinkPopover } from './LinkPopover';
2
+ export type { LinkPopoverProps } from './LinkPopover';
@@ -0,0 +1 @@
1
+ export { LinkPopover } from './LinkPopover';
@@ -5,5 +5,5 @@ import { useCallback } from 'react';
5
5
  export const TextEditorPopover = ({ children, ...restProps }) => {
6
6
  const bubbleMenuContainer = useTextEditorStore(state => state.bubbleMenuContainer);
7
7
  const getPopupContainer = useCallback(() => bubbleMenuContainer || document.body, [bubbleMenuContainer]);
8
- return (_jsx(Popover, { trigger: ['click'], ...restProps, getPopupContainer: getPopupContainer, children: children }));
8
+ return (_jsx(Popover, { destroyTooltipOnHide: true, trigger: ['click'], ...restProps, getPopupContainer: getPopupContainer, children: children }));
9
9
  };