@antscorp/antsomi-ui 2.0.89 → 2.0.91-text-editor-beta.1

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 (336) hide show
  1. package/es/assets/css/main.scss +4 -2
  2. package/es/components/icons/ALignRightIcon.d.ts +3 -0
  3. package/es/components/icons/ALignRightIcon.js +7 -0
  4. package/es/components/icons/AlignCenterIcon.d.ts +3 -0
  5. package/es/components/icons/AlignCenterIcon.js +7 -0
  6. package/es/components/icons/AlignJustifyIcon.d.ts +3 -0
  7. package/es/components/icons/AlignJustifyIcon.js +7 -0
  8. package/es/components/icons/AlignLeftIcon.d.ts +3 -0
  9. package/es/components/icons/AlignLeftIcon.js +7 -0
  10. package/es/components/icons/AntsomiAIIcon.d.ts +3 -0
  11. package/es/components/icons/AntsomiAIIcon.js +7 -0
  12. package/es/components/icons/ArrowDropDownIcon.d.ts +3 -0
  13. package/es/components/icons/ArrowDropDownIcon.js +7 -0
  14. package/es/components/icons/ChevronRightIcon.d.ts +3 -0
  15. package/es/components/icons/ChevronRightIcon.js +7 -0
  16. package/es/components/icons/EmotionFeedbackIcon.d.ts +6 -0
  17. package/es/components/icons/EmotionFeedbackIcon.js +8 -0
  18. package/es/components/icons/FeedbackRatingIcon.d.ts +3 -0
  19. package/es/components/icons/FeedbackRatingIcon.js +7 -0
  20. package/es/components/icons/LazyIcon/LazyIcon.d.ts +17 -0
  21. package/es/components/icons/LazyIcon/LazyIcon.js +14 -0
  22. package/es/components/icons/LinkOffIcon.d.ts +3 -0
  23. package/es/components/icons/LinkOffIcon.js +7 -0
  24. package/es/components/icons/MinusIcon.d.ts +3 -0
  25. package/es/components/icons/MinusIcon.js +7 -0
  26. package/es/components/icons/NoteNewIcon.d.ts +3 -0
  27. package/es/components/icons/NoteNewIcon.js +7 -0
  28. package/es/components/icons/SearchNotFoundIcon.d.ts +3 -0
  29. package/es/components/icons/SearchNotFoundIcon.js +7 -0
  30. package/es/components/icons/SummarizeIcon.d.ts +3 -0
  31. package/es/components/icons/SummarizeIcon.js +7 -0
  32. package/es/components/icons/index.d.ts +14 -0
  33. package/es/components/icons/index.js +14 -0
  34. package/es/components/index.scss +2 -0
  35. package/es/components/molecules/ColorSetting/index.js +2 -11
  36. package/es/components/molecules/ColorSetting/styled.d.ts +1 -1
  37. package/es/components/molecules/ColorSetting/styled.js +9 -1
  38. package/es/components/molecules/EmojiCollections/CommonCollection/index.js +2 -2
  39. package/es/components/molecules/EmojiCollections/types.d.ts +1 -0
  40. package/es/components/molecules/EmojiPopover/EmojiPopover.d.ts +1 -0
  41. package/es/components/molecules/EmojiPopover/EmojiPopover.js +10 -6
  42. package/es/components/molecules/EmojiPopover/styled.d.ts +2 -2
  43. package/es/components/molecules/EmojiPopover/styled.js +1 -1
  44. package/es/components/molecules/FontSizeInput/FontSizeInput.d.ts +3 -0
  45. package/es/components/molecules/FontSizeInput/FontSizeInput.js +127 -0
  46. package/es/components/molecules/FontSizeInput/components/FontSizeControl.d.ts +8 -0
  47. package/es/components/molecules/FontSizeInput/components/FontSizeControl.js +14 -0
  48. package/es/components/molecules/FontSizeInput/components/FontSizeDropdown.d.ts +20 -0
  49. package/es/components/molecules/FontSizeInput/components/FontSizeDropdown.js +19 -0
  50. package/es/components/molecules/FontSizeInput/constants.d.ts +2 -0
  51. package/es/components/molecules/FontSizeInput/constants.js +5 -0
  52. package/es/components/molecules/FontSizeInput/index.d.ts +2 -0
  53. package/es/components/molecules/FontSizeInput/index.js +1 -0
  54. package/es/components/molecules/FontSizeInput/styled.d.ts +7 -0
  55. package/es/components/molecules/FontSizeInput/styled.js +36 -0
  56. package/es/components/molecules/FontSizeInput/styles.scss +15 -0
  57. package/es/components/molecules/FontSizeInput/types.d.ts +23 -0
  58. package/es/components/molecules/FontSizeInput/types.js +1 -0
  59. package/es/components/molecules/FontSizeInput/utils.d.ts +7 -0
  60. package/es/components/molecules/FontSizeInput/utils.js +9 -0
  61. package/es/components/molecules/ItemNotFound/ItemNotFound.d.ts +6 -0
  62. package/es/components/molecules/ItemNotFound/ItemNotFound.js +9 -0
  63. package/es/components/molecules/ItemNotFound/index.d.ts +1 -0
  64. package/es/components/molecules/ItemNotFound/index.js +1 -0
  65. package/es/components/molecules/ItemNotFound/styled.d.ts +4 -0
  66. package/es/components/molecules/ItemNotFound/styled.js +29 -0
  67. package/es/components/molecules/MatchAnySelect/MatchesAnySelect.js +23 -7
  68. package/es/components/molecules/MatchAnySelect/components/ExtendValuePopup.d.ts +1 -0
  69. package/es/components/molecules/MatchAnySelect/components/ExtendValuePopup.js +7 -2
  70. package/es/components/molecules/MatchAnySelect/types.d.ts +2 -1
  71. package/es/components/molecules/MatchAnySelect/utils.d.ts +1 -0
  72. package/es/components/molecules/MatchAnySelect/utils.js +2 -0
  73. package/es/components/molecules/QuillEditor/EditorToolbar.js +1 -0
  74. package/es/components/molecules/QuillEditor/QuillEditor.d.ts +6 -1
  75. package/es/components/molecules/QuillEditor/QuillEditor.js +90 -55
  76. package/es/components/molecules/QuillEditor/styled.d.ts +5 -0
  77. package/es/components/molecules/QuillEditor/styled.js +29 -0
  78. package/es/components/molecules/VirtualizedMenu/VirtualizedMenu.d.ts +6 -3
  79. package/es/components/molecules/VirtualizedMenu/__mocks__/index.js +2550 -938
  80. package/es/components/molecules/VirtualizedMenu/components/Item/Item.d.ts +1 -11
  81. package/es/components/molecules/VirtualizedMenu/components/Item/Item.js +53 -25
  82. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.d.ts +8 -5
  83. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.js +289 -46
  84. package/es/components/molecules/VirtualizedMenu/components/MenuInline/index.js +1 -0
  85. package/es/components/molecules/VirtualizedMenu/styled.d.ts +2 -2
  86. package/es/components/molecules/VirtualizedMenu/styled.js +23 -4
  87. package/es/components/molecules/VirtualizedMenu/types.d.ts +27 -10
  88. package/es/components/molecules/VirtualizedMenu/utils.d.ts +8 -5
  89. package/es/components/molecules/VirtualizedMenu/utils.js +13 -18
  90. package/es/components/molecules/index.d.ts +2 -0
  91. package/es/components/molecules/index.js +2 -0
  92. package/es/components/molecules/index.scss +1 -0
  93. package/es/components/organism/ActivityTimeline/ActivityTimeline.js +15 -9
  94. package/es/components/organism/ActivityTimeline/__mocks__/event_tracking.json +1290 -0
  95. package/es/components/organism/ActivityTimeline/__mocks__/timeline.json +3059 -0
  96. package/es/components/organism/ActivityTimeline/components/ItemEvent/ItemEvent.d.ts +3 -4
  97. package/es/components/organism/ActivityTimeline/components/ItemEvent/ItemEvent.js +4 -3
  98. package/es/components/organism/ActivityTimeline/components/ItemGroupEvent/ItemGroupEvent.d.ts +4 -6
  99. package/es/components/organism/ActivityTimeline/components/ItemGroupEvent/ItemGroupEvent.js +4 -4
  100. package/es/components/organism/ActivityTimeline/components/TimeLineTitle/TimelineTitle.js +1 -1
  101. package/es/components/organism/ActivityTimeline/types.d.ts +2 -1
  102. package/es/components/organism/ActivityTimeline/utils.d.ts +1 -1
  103. package/es/components/organism/ActivityTimeline/utils.js +1 -1
  104. package/es/components/organism/Help/Help.js +47 -10
  105. package/es/components/organism/TextEditor/TextEditor.d.ts +3 -0
  106. package/es/components/organism/TextEditor/TextEditor.js +257 -0
  107. package/es/components/organism/TextEditor/__mocks__/text-block.settings.json +320 -0
  108. package/es/components/organism/TextEditor/__mocks__/text-contennt.d.ts +1 -0
  109. package/es/components/organism/TextEditor/__mocks__/text-contennt.js +38 -0
  110. package/es/components/organism/TextEditor/constants.d.ts +175 -0
  111. package/es/components/organism/TextEditor/constants.js +321 -0
  112. package/es/components/organism/TextEditor/extensions/BackgroundColor.d.ts +25 -0
  113. package/es/components/organism/TextEditor/extensions/BackgroundColor.js +46 -0
  114. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.d.ts +130 -0
  115. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.js +247 -0
  116. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.d.ts +15 -0
  117. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.js +31 -0
  118. package/es/components/organism/TextEditor/extensions/BubbleMenu/index.d.ts +2 -0
  119. package/es/components/organism/TextEditor/extensions/BubbleMenu/index.js +2 -0
  120. package/es/components/organism/TextEditor/extensions/Color.d.ts +6 -0
  121. package/es/components/organism/TextEditor/extensions/Color.js +34 -0
  122. package/es/components/organism/TextEditor/extensions/Emoji.d.ts +57 -0
  123. package/es/components/organism/TextEditor/extensions/Emoji.js +184 -0
  124. package/es/components/organism/TextEditor/extensions/FontFamily.d.ts +6 -0
  125. package/es/components/organism/TextEditor/extensions/FontFamily.js +36 -0
  126. package/es/components/organism/TextEditor/extensions/FontSize.d.ts +32 -0
  127. package/es/components/organism/TextEditor/extensions/FontSize.js +47 -0
  128. package/es/components/organism/TextEditor/extensions/FontWeight.d.ts +23 -0
  129. package/es/components/organism/TextEditor/extensions/FontWeight.js +41 -0
  130. package/es/components/organism/TextEditor/extensions/Highlight.d.ts +1 -0
  131. package/es/components/organism/TextEditor/extensions/Highlight.js +14 -0
  132. package/es/components/organism/TextEditor/extensions/Indent.d.ts +21 -0
  133. package/es/components/organism/TextEditor/extensions/Indent.js +63 -0
  134. package/es/components/organism/TextEditor/extensions/LetterSpacing.d.ts +32 -0
  135. package/es/components/organism/TextEditor/extensions/LetterSpacing.js +48 -0
  136. package/es/components/organism/TextEditor/extensions/LineHeight.d.ts +20 -0
  137. package/es/components/organism/TextEditor/extensions/LineHeight.js +36 -0
  138. package/es/components/organism/TextEditor/extensions/Link.d.ts +16 -0
  139. package/es/components/organism/TextEditor/extensions/Link.js +48 -0
  140. package/es/components/organism/TextEditor/extensions/ListItemMarker.d.ts +13 -0
  141. package/es/components/organism/TextEditor/extensions/ListItemMarker.js +174 -0
  142. package/es/components/organism/TextEditor/extensions/OrderedList.d.ts +56 -0
  143. package/es/components/organism/TextEditor/extensions/OrderedList.js +187 -0
  144. package/es/components/organism/TextEditor/extensions/SmartTag.d.ts +39 -0
  145. package/es/components/organism/TextEditor/extensions/SmartTag.js +167 -0
  146. package/es/components/organism/TextEditor/extensions/StyleMemory.d.ts +36 -0
  147. package/es/components/organism/TextEditor/extensions/StyleMemory.js +163 -0
  148. package/es/components/organism/TextEditor/extensions/TextTransform.d.ts +31 -0
  149. package/es/components/organism/TextEditor/extensions/TextTransform.js +37 -0
  150. package/es/components/organism/TextEditor/extensions/UnorderedList.d.ts +55 -0
  151. package/es/components/organism/TextEditor/extensions/UnorderedList.js +176 -0
  152. package/es/components/organism/TextEditor/hooks/index.d.ts +7 -0
  153. package/es/components/organism/TextEditor/hooks/index.js +7 -0
  154. package/es/components/organism/TextEditor/hooks/useColorSet.d.ts +4 -0
  155. package/es/components/organism/TextEditor/hooks/useColorSet.js +22 -0
  156. package/es/components/organism/TextEditor/hooks/useDocumentState.d.ts +18 -0
  157. package/es/components/organism/TextEditor/hooks/useDocumentState.js +42 -0
  158. package/es/components/organism/TextEditor/hooks/useLinkHandler.d.ts +11 -0
  159. package/es/components/organism/TextEditor/hooks/useLinkHandler.js +125 -0
  160. package/es/components/organism/TextEditor/hooks/useMarkTracking.d.ts +26 -0
  161. package/es/components/organism/TextEditor/hooks/useMarkTracking.js +68 -0
  162. package/es/components/organism/TextEditor/hooks/usePersistence.d.ts +31 -0
  163. package/es/components/organism/TextEditor/hooks/usePersistence.js +169 -0
  164. package/es/components/organism/TextEditor/hooks/useStyleMemory.d.ts +6 -0
  165. package/es/components/organism/TextEditor/hooks/useStyleMemory.js +42 -0
  166. package/es/components/organism/TextEditor/hooks/useStylePresets.d.ts +34 -0
  167. package/es/components/organism/TextEditor/hooks/useStylePresets.js +83 -0
  168. package/es/components/organism/TextEditor/index.d.ts +14 -0
  169. package/es/components/organism/TextEditor/index.js +6 -0
  170. package/es/components/organism/TextEditor/index.scss +61 -0
  171. package/es/components/organism/TextEditor/provider.d.ts +15 -0
  172. package/es/components/organism/TextEditor/provider.js +33 -0
  173. package/es/components/organism/TextEditor/store.d.ts +13 -0
  174. package/es/components/organism/TextEditor/store.js +20 -0
  175. package/es/components/organism/TextEditor/styled.d.ts +10 -0
  176. package/es/components/organism/TextEditor/styled.js +94 -0
  177. package/es/components/organism/TextEditor/types.d.ts +96 -0
  178. package/es/components/organism/TextEditor/types.js +3 -0
  179. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.d.ts +6 -0
  180. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.js +85 -0
  181. package/es/components/organism/TextEditor/ui/BubbleMenu/index.d.ts +1 -0
  182. package/es/components/organism/TextEditor/ui/BubbleMenu/index.js +1 -0
  183. package/es/components/organism/TextEditor/ui/BubbleToolbar/BubbleToolbar.d.ts +1 -0
  184. package/es/components/organism/TextEditor/ui/BubbleToolbar/BubbleToolbar.js +1 -0
  185. package/es/components/organism/TextEditor/ui/BubbleToolbar/index.d.ts +0 -0
  186. package/es/components/organism/TextEditor/ui/BubbleToolbar/index.js +1 -0
  187. package/es/components/organism/TextEditor/ui/Button/Button.d.ts +2 -0
  188. package/es/components/organism/TextEditor/ui/Button/Button.js +31 -0
  189. package/es/components/organism/TextEditor/ui/Button/index.d.ts +2 -0
  190. package/es/components/organism/TextEditor/ui/Button/index.js +1 -0
  191. package/es/components/organism/TextEditor/ui/Button/types.d.ts +10 -0
  192. package/es/components/organism/TextEditor/ui/Button/types.js +1 -0
  193. package/es/components/organism/TextEditor/ui/ColorPicker/ColorPicker.d.ts +39 -0
  194. package/es/components/organism/TextEditor/ui/ColorPicker/ColorPicker.js +131 -0
  195. package/es/components/organism/TextEditor/ui/ColorPicker/index.d.ts +1 -0
  196. package/es/components/organism/TextEditor/ui/ColorPicker/index.js +1 -0
  197. package/es/components/organism/TextEditor/ui/DropdownButton/DropdownButton.d.ts +17 -0
  198. package/es/components/organism/TextEditor/ui/DropdownButton/DropdownButton.js +51 -0
  199. package/es/components/organism/TextEditor/ui/DropdownButton/index.d.ts +1 -0
  200. package/es/components/organism/TextEditor/ui/DropdownButton/index.js +1 -0
  201. package/es/components/organism/TextEditor/ui/Emoji/EmojiList.d.ts +11 -0
  202. package/es/components/organism/TextEditor/ui/Emoji/EmojiList.js +66 -0
  203. package/es/components/organism/TextEditor/ui/Emoji/index.d.ts +2 -0
  204. package/es/components/organism/TextEditor/ui/Emoji/index.js +2 -0
  205. package/es/components/organism/TextEditor/ui/Emoji/suggestion.d.ts +4 -0
  206. package/es/components/organism/TextEditor/ui/Emoji/suggestion.js +71 -0
  207. package/es/components/organism/TextEditor/ui/FontPopover/FontPopover.d.ts +12 -0
  208. package/es/components/organism/TextEditor/ui/FontPopover/FontPopover.js +69 -0
  209. package/es/components/organism/TextEditor/ui/FontPopover/styled.d.ts +1 -0
  210. package/es/components/organism/TextEditor/ui/FontPopover/styled.js +22 -0
  211. package/es/components/organism/TextEditor/ui/Popover/Popover.d.ts +6 -0
  212. package/es/components/organism/TextEditor/ui/Popover/Popover.js +9 -0
  213. package/es/components/organism/TextEditor/ui/Popover/index.d.ts +1 -0
  214. package/es/components/organism/TextEditor/ui/Popover/index.js +1 -0
  215. package/es/components/organism/TextEditor/ui/Select/Select.d.ts +4 -0
  216. package/es/components/organism/TextEditor/ui/Select/Select.js +7 -0
  217. package/es/components/organism/TextEditor/ui/Select/index.d.ts +1 -0
  218. package/es/components/organism/TextEditor/ui/Select/index.js +1 -0
  219. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/SplitButtonDropdown.d.ts +2 -0
  220. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/SplitButtonDropdown.js +44 -0
  221. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/index.d.ts +1 -0
  222. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/index.js +1 -0
  223. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/styled.d.ts +2 -0
  224. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/styled.js +52 -0
  225. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/types.d.ts +19 -0
  226. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/types.js +1 -0
  227. package/es/components/organism/TextEditor/ui/TextAlignSelect/TextAlignSelect.d.ts +30 -0
  228. package/es/components/organism/TextEditor/ui/TextAlignSelect/TextAlignSelect.js +77 -0
  229. package/es/components/organism/TextEditor/ui/TextAlignSelect/index.d.ts +1 -0
  230. package/es/components/organism/TextEditor/ui/TextAlignSelect/index.js +1 -0
  231. package/es/components/organism/TextEditor/ui/Toolbar/Toolbar.d.ts +15 -0
  232. package/es/components/organism/TextEditor/ui/Toolbar/Toolbar.js +41 -0
  233. package/es/components/organism/TextEditor/ui/Toolbar/actions/BoldAction.d.ts +5 -0
  234. package/es/components/organism/TextEditor/ui/Toolbar/actions/BoldAction.js +18 -0
  235. package/es/components/organism/TextEditor/ui/Toolbar/actions/BulletListAction.d.ts +6 -0
  236. package/es/components/organism/TextEditor/ui/Toolbar/actions/BulletListAction.js +84 -0
  237. package/es/components/organism/TextEditor/ui/Toolbar/actions/ClearFormattingAction.d.ts +5 -0
  238. package/es/components/organism/TextEditor/ui/Toolbar/actions/ClearFormattingAction.js +27 -0
  239. package/es/components/organism/TextEditor/ui/Toolbar/actions/EmojiAction.d.ts +4 -0
  240. package/es/components/organism/TextEditor/ui/Toolbar/actions/EmojiAction.js +31 -0
  241. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.d.ts +7 -0
  242. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.js +28 -0
  243. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontSizeAction.d.ts +7 -0
  244. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontSizeAction.js +47 -0
  245. package/es/components/organism/TextEditor/ui/Toolbar/actions/HistoryAction.d.ts +5 -0
  246. package/es/components/organism/TextEditor/ui/Toolbar/actions/HistoryAction.js +21 -0
  247. package/es/components/organism/TextEditor/ui/Toolbar/actions/IndentAction.d.ts +5 -0
  248. package/es/components/organism/TextEditor/ui/Toolbar/actions/IndentAction.js +17 -0
  249. package/es/components/organism/TextEditor/ui/Toolbar/actions/ItalicAction.d.ts +5 -0
  250. package/es/components/organism/TextEditor/ui/Toolbar/actions/ItalicAction.js +18 -0
  251. package/es/components/organism/TextEditor/ui/Toolbar/actions/LetterSpacing.d.ts +5 -0
  252. package/es/components/organism/TextEditor/ui/Toolbar/actions/LetterSpacing.js +28 -0
  253. package/es/components/organism/TextEditor/ui/Toolbar/actions/LinkAction.d.ts +6 -0
  254. package/es/components/organism/TextEditor/ui/Toolbar/actions/LinkAction.js +17 -0
  255. package/es/components/organism/TextEditor/ui/Toolbar/actions/OrderedListAction.d.ts +5 -0
  256. package/es/components/organism/TextEditor/ui/Toolbar/actions/OrderedListAction.js +67 -0
  257. package/es/components/organism/TextEditor/ui/Toolbar/actions/OutdentAction.d.ts +5 -0
  258. package/es/components/organism/TextEditor/ui/Toolbar/actions/OutdentAction.js +17 -0
  259. package/es/components/organism/TextEditor/ui/Toolbar/actions/SmartTagAction.d.ts +7 -0
  260. package/es/components/organism/TextEditor/ui/Toolbar/actions/SmartTagAction.js +18 -0
  261. package/es/components/organism/TextEditor/ui/Toolbar/actions/SpacingAction.d.ts +10 -0
  262. package/es/components/organism/TextEditor/ui/Toolbar/actions/SpacingAction.js +45 -0
  263. package/es/components/organism/TextEditor/ui/Toolbar/actions/StrikeAction.d.ts +5 -0
  264. package/es/components/organism/TextEditor/ui/Toolbar/actions/StrikeAction.js +18 -0
  265. package/es/components/organism/TextEditor/ui/Toolbar/actions/SubscriptAction.d.ts +5 -0
  266. package/es/components/organism/TextEditor/ui/Toolbar/actions/SubscriptAction.js +26 -0
  267. package/es/components/organism/TextEditor/ui/Toolbar/actions/SuperscriptAction.d.ts +5 -0
  268. package/es/components/organism/TextEditor/ui/Toolbar/actions/SuperscriptAction.js +26 -0
  269. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextAlignAction.d.ts +5 -0
  270. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextAlignAction.js +3 -0
  271. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextBackgroundColorAction.d.ts +5 -0
  272. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextBackgroundColorAction.js +29 -0
  273. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextColorAction.d.ts +14 -0
  274. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextColorAction.js +22 -0
  275. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextTransformAction.d.ts +5 -0
  276. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextTransformAction.js +36 -0
  277. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnderlineAction.d.ts +5 -0
  278. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnderlineAction.js +18 -0
  279. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnsetLink.d.ts +6 -0
  280. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnsetLink.js +19 -0
  281. package/es/components/organism/TextEditor/ui/Toolbar/actions/index.d.ts +19 -0
  282. package/es/components/organism/TextEditor/ui/Toolbar/actions/index.js +19 -0
  283. package/es/components/organism/TextEditor/ui/Toolbar/index.d.ts +1 -0
  284. package/es/components/organism/TextEditor/ui/Toolbar/index.js +1 -0
  285. package/es/components/organism/TextEditor/utils/documentState.d.ts +57 -0
  286. package/es/components/organism/TextEditor/utils/documentState.js +100 -0
  287. package/es/components/organism/TextEditor/utils/font.d.ts +73 -0
  288. package/es/components/organism/TextEditor/utils/font.js +160 -0
  289. package/es/components/organism/TextEditor/utils/htmlProcessing.d.ts +63 -0
  290. package/es/components/organism/TextEditor/utils/htmlProcessing.js +319 -0
  291. package/es/components/organism/TextEditor/utils/indent.d.ts +11 -0
  292. package/es/components/organism/TextEditor/utils/indent.js +56 -0
  293. package/es/components/organism/TextEditor/utils/index.d.ts +8 -0
  294. package/es/components/organism/TextEditor/utils/index.js +16 -0
  295. package/es/components/organism/TextEditor/utils/link.d.ts +100 -0
  296. package/es/components/organism/TextEditor/utils/link.js +149 -0
  297. package/es/components/organism/TextEditor/utils/menu.d.ts +134 -0
  298. package/es/components/organism/TextEditor/utils/menu.js +317 -0
  299. package/es/components/organism/TextEditor/utils/selection.d.ts +25 -0
  300. package/es/components/organism/TextEditor/utils/selection.js +57 -0
  301. package/es/components/organism/TextEditor/utils/shared.d.ts +1 -0
  302. package/es/components/organism/TextEditor/utils/shared.js +9 -0
  303. package/es/components/organism/TextEditor/utils/smartTag.d.ts +49 -0
  304. package/es/components/organism/TextEditor/utils/smartTag.js +89 -0
  305. package/es/components/organism/TextEditor/utils/style.d.ts +78 -0
  306. package/es/components/organism/TextEditor/utils/style.js +193 -0
  307. package/es/components/organism/TicketEditor/Content.js +47 -33
  308. package/es/components/organism/TicketEditor/components/MessageComponent.js +1 -0
  309. package/es/components/organism/TicketEditor/index.js +24 -16
  310. package/es/components/organism/TicketEditor/styled.js +1 -0
  311. package/es/components/organism/TicketEditorV2/Content.js +41 -7
  312. package/es/components/organism/TicketEditorV2/components/MessageComponent.js +1 -0
  313. package/es/components/organism/TicketEditorV2/styled.js +2 -1
  314. package/es/components/organism/index.d.ts +1 -0
  315. package/es/components/organism/index.js +1 -0
  316. package/es/components/organism/index.scss +1 -0
  317. package/es/hooks/index.d.ts +3 -0
  318. package/es/hooks/index.js +3 -0
  319. package/es/hooks/useBroadcastedLocalStorage.d.ts +5 -0
  320. package/es/hooks/useBroadcastedLocalStorage.js +71 -0
  321. package/es/hooks/useElementSize.d.ts +7 -0
  322. package/es/hooks/useElementSize.js +56 -0
  323. package/es/hooks/useIsMounted.d.ts +1 -0
  324. package/es/hooks/useIsMounted.js +11 -0
  325. package/es/locales/en/translation.json +2 -1
  326. package/es/locales/i18n.d.ts +3 -1
  327. package/es/locales/vi/translation.json +2 -1
  328. package/es/utils/common.d.ts +6 -9
  329. package/es/utils/common.js +44 -23
  330. package/es/utils/index.d.ts +1 -0
  331. package/es/utils/index.js +1 -0
  332. package/es/utils/tree.d.ts +225 -0
  333. package/es/utils/tree.js +469 -0
  334. package/es/utils/web.d.ts +15 -0
  335. package/es/utils/web.js +39 -0
  336. package/package.json +25 -4
@@ -23,10 +23,11 @@ import { MATCHES_ANY_THEME } from './constants';
23
23
  import { useDeepCompareEffect, useDeepCompareMemo, useIntersectionObserver, } from '@antscorp/antsomi-ui/es/hooks';
24
24
  // Utils
25
25
  import { flatTree, recursiveFindParents, recursiveSearchItems, } from '@antscorp/antsomi-ui/es/utils';
26
- import { getSelectedTreeData } from './utils';
26
+ import { getSelectedTreeData, NUMBER_REGEX } from './utils';
27
27
  // Icons
28
28
  import { DataIcon, ErrorIcon, LongerIcon, WarningIcon } from '../../icons';
29
29
  import { translate, translations as translationsLocale } from '@antscorp/antsomi-locales';
30
+ import { DATA_TYPES } from '../../organism/FilterSetting/constants';
30
31
  const initialState = {
31
32
  isOpenPopover: false,
32
33
  searchValue: '',
@@ -43,12 +44,15 @@ const { t } = i18nInstance;
43
44
  const { Text } = Typography;
44
45
  export function MatchesAny(props) {
45
46
  // Props
46
- const { maxSelectedItem, maxLengthEachItem, objectName, loading = false, showExtendValue = true, selectedItems: selectedItemsProp, items, groupSelectProps, renderExtraValues, customItemRenders, listEmptyProps, selectedListEmptyProps, selectedTreeData: selectedTreeDataProp, searchValue = '', isExternalSearch, onApply = () => { }, onCancel = () => { }, onLoadMore = () => { }, onChangeSearch, ...restOfProps } = props;
47
+ const { dataType, maxSelectedItem, maxLengthEachItem, objectName, loading = false, showExtendValue = true, selectedItems: selectedItemsProp, items, groupSelectProps, renderExtraValues, customItemRenders, listEmptyProps, selectedListEmptyProps, selectedTreeData: selectedTreeDataProp, searchValue = '', isExternalSearch, onApply = () => { }, onCancel = () => { }, onLoadMore = () => { }, onChangeSearch, ...restOfProps } = props;
47
48
  // State
48
49
  const [state, setState] = useState(matchesAnyInitialState);
49
50
  const [maxItemsError, setMaxItemsError] = useState(false);
50
51
  const [itemOverMaxLength, setItemOverMaxLength] = useState(false);
51
52
  const [isApply, setIsApply] = useState(false);
53
+ const [isExistString, setIsExistString] = useState(false);
54
+ // If data type is number or array number filter data
55
+ const shouldFilterNumber = dataType === DATA_TYPES.NUMBER || dataType === DATA_TYPES.ARRAY_NUMBER;
52
56
  // Variables
53
57
  const { selectedItems, selectedTreeData, isShowLoadMoreEl, expandedKeys, selectedExpandedKeys } = state;
54
58
  const { icon: listEmptyIcon = _jsx(LongerIcon, {}), description: listEmptyDescription = (_jsx("div", { dangerouslySetInnerHTML: { __html: t(translations.matchesAnySelect.noData) } })), ...restListEmptyProps } = listEmptyProps || {};
@@ -60,8 +64,10 @@ export function MatchesAny(props) {
60
64
  : false;
61
65
  setMaxItemsError(!!isOverMaxSelected);
62
66
  setItemOverMaxLength(!!isSomeTextTooLong);
63
- if (isApply && !isOverMaxSelected && !isSomeTextTooLong)
67
+ if (isApply && !isOverMaxSelected && !isSomeTextTooLong) {
64
68
  setIsApply(false);
69
+ setIsExistString(false);
70
+ }
65
71
  }, [selectedItems, maxSelectedItem, maxLengthEachItem, isApply]);
66
72
  // Refs
67
73
  const { ref: loadMoreRef } = useIntersectionObserver({
@@ -147,6 +153,7 @@ export function MatchesAny(props) {
147
153
  selectedExpandedKeys: newSelectedExpandKeys,
148
154
  selectedTreeData: newSelectedTreeData,
149
155
  }));
156
+ setIsExistString(false);
150
157
  };
151
158
  /**
152
159
  * Removes an item and its descendants from the list of selected items.
@@ -156,6 +163,7 @@ export function MatchesAny(props) {
156
163
  *
157
164
  */
158
165
  const onRemoveItem = (item) => {
166
+ setIsExistString(false);
159
167
  setState(prev => {
160
168
  const newSelectedItems = prev.selectedItems?.filter(selectedItem => {
161
169
  if (item.children) {
@@ -174,9 +182,11 @@ export function MatchesAny(props) {
174
182
  });
175
183
  };
176
184
  const onRemoveAll = () => {
185
+ setIsExistString(false);
177
186
  setState(prev => ({ ...prev, selectedItems: [], selectedTreeData: [] }));
178
187
  };
179
188
  const onClickApply = () => {
189
+ setIsExistString(false);
180
190
  if (maxItemsError || itemOverMaxLength) {
181
191
  setIsApply(true);
182
192
  return;
@@ -313,6 +323,7 @@ export function MatchesAny(props) {
313
323
  .map(item => item.key);
314
324
  const newSelectedItems = uniqBy([...(state.selectedItems || []), ...flattenTreeData], 'key');
315
325
  const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData);
326
+ setIsExistString(false);
316
327
  setState(prev => ({
317
328
  ...prev,
318
329
  selectedItems: newSelectedItems,
@@ -359,16 +370,21 @@ export function MatchesAny(props) {
359
370
  const availableExtendValues = extendValues?.filter(value => !selectedItems?.some(item => item.title === value));
360
371
  // If there are available values to add
361
372
  if (availableExtendValues) {
373
+ // check extendValues has string data type
374
+ const isExistString = shouldFilterNumber ? availableExtendValues.some(value => !NUMBER_REGEX.test(value)) : false;
362
375
  // Create new items in the format required (MatchesAnyItem)
363
376
  const newSelectedItems = [
364
377
  ...(selectedItems || []),
365
- ...availableExtendValues.map(value => ({
378
+ ...(isExistString
379
+ ? availableExtendValues.filter(value => NUMBER_REGEX.test(value))
380
+ : availableExtendValues).map(value => ({
366
381
  key: value,
367
382
  title: value,
368
383
  isExtendValue: true, // Flag to indicate that this item is an extend value
369
384
  })),
370
385
  ];
371
386
  const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData || []);
387
+ setIsExistString(isExistString);
372
388
  setState(prev => ({
373
389
  ...prev,
374
390
  selectedItems: newSelectedItems,
@@ -376,10 +392,10 @@ export function MatchesAny(props) {
376
392
  }));
377
393
  }
378
394
  };
379
- return (_jsx(ConfigProvider, { theme: MATCHES_ANY_THEME, children: _jsxs(MatchesAnyWrapper, { ...restOfProps, vertical: true, justify: "space-between", children: [_jsxs(Flex, { style: { width: '100%', height: '100%' }, children: [renderSelectList(), renderSelectedList()] }), _jsxs(Flex, { className: "matches-any__footer", align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 10, children: [_jsx(Button, { type: "primary", disabled: isDisableApply, onClick: onClickApply, children: translate(translationsLocale._ACT_APPLY) }), _jsx(Button, { onClick: () => onCancel(), children: translate(translationsLocale._ACT_CANCEL) }), isApply && (maxItemsError || itemOverMaxLength) && (_jsxs(_Fragment, { children: [_jsx(Typography, { style: { color: globalToken?.colorError }, children: translate(translationsLocale._OPERATOR_MATCH_ANY_EX_VALUE_LIMIT) }), itemOverMaxLength && (_jsx(Button, { type: "text", onClick: handleClickRemoveInvalid, children: translate(translationsLocale._OPERATOR_MATCH_ANY_EX_VALUE_LIMIT_REMOVE_INV) }))] }))] }), showExtendValue && (_jsx(ExtendValuePopup, { getPopupContainer: trigger => trigger.parentElement || document.body, onApply: onApplyExtendValue, children: _jsx(Button, { icon: _jsx(Icon, { type: "icon-ants-empty-flag" }), children: t(translations.extendValue.title).toString() }) }))] })] }) }));
395
+ return (_jsx(ConfigProvider, { theme: MATCHES_ANY_THEME, children: _jsxs(MatchesAnyWrapper, { ...restOfProps, vertical: true, justify: "space-between", children: [_jsxs(Flex, { style: { width: '100%', height: '100%' }, children: [renderSelectList(), renderSelectedList()] }), _jsxs(Flex, { className: "matches-any__footer", align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 10, children: [_jsx(Button, { type: "primary", disabled: isDisableApply, onClick: onClickApply, children: translate(translationsLocale._ACT_APPLY) }), _jsx(Button, { onClick: () => onCancel(), children: translate(translationsLocale._ACT_CANCEL) }), _jsxs("div", { children: [isApply && (maxItemsError || itemOverMaxLength) && (_jsx(Typography, { style: { color: globalToken?.colorError }, children: translate(translationsLocale._OPERATOR_MATCH_ANY_EX_VALUE_LIMIT) })), isExistString && (_jsx(Typography, { style: { color: globalToken?.orange6 }, children: translate(translationsLocale._OPERATOR_MATCH_ANY_EX_VALUE_VAL_NUM_VAL) }))] }), isApply && itemOverMaxLength && (_jsx(Button, { type: "text", onClick: handleClickRemoveInvalid, children: translate(translationsLocale._OPERATOR_MATCH_ANY_EX_VALUE_LIMIT_REMOVE_INV) }))] }), showExtendValue && (_jsx(ExtendValuePopup, { getPopupContainer: trigger => trigger.parentElement || document.body, shouldFilterNumber: shouldFilterNumber, onApply: onApplyExtendValue, children: _jsx(Button, { icon: _jsx(Icon, { type: "icon-ants-empty-flag" }), children: t(translations.extendValue.title).toString() }) }))] })] }) }));
380
396
  }
381
397
  export function MatchesAnySelect(props) {
382
- const { maxSelectedItem, maxLengthEachItem, placeholder = 'Select an item', dropdownStyle, objectName, selectedItems, items, loading, popupClassName, groupSelectProps, renderExtraValues, customItemRenders, popoverProps, listEmptyProps, selectedListEmptyProps, selectedTreeData, error, onChangeSearch, onChange = () => { }, onLoadMore, ...restProps } = props;
398
+ const { dataType, maxSelectedItem, maxLengthEachItem, placeholder = 'Select an item', dropdownStyle, objectName, selectedItems, items, loading, popupClassName, groupSelectProps, renderExtraValues, customItemRenders, popoverProps, listEmptyProps, selectedListEmptyProps, selectedTreeData, error, onChangeSearch, onChange = () => { }, onLoadMore, ...restProps } = props;
383
399
  // State
384
400
  const [state, setState] = useState(initialState);
385
401
  // Variables
@@ -396,7 +412,7 @@ export function MatchesAnySelect(props) {
396
412
  onChange(selectedItems, selectedTreeData);
397
413
  setState(prev => ({ ...prev, isOpenPopover: false }));
398
414
  };
399
- return (_jsx(Popover, { open: isOpenPopover, arrow: false, placement: "bottomLeft", content: _jsx(MatchesAny, { maxSelectedItem: maxSelectedItem, maxLengthEachItem: maxLengthEachItem, isExternalSearch: !!onChangeSearch, searchValue: state.searchValue, className: popupClassName, items: items, selectedItems: selectedItems, loading: loading, objectName: objectName, groupSelectProps: groupSelectProps, renderExtraValues: renderExtraValues, customItemRenders: customItemRenders, listEmptyProps: listEmptyProps, selectedListEmptyProps: selectedListEmptyProps, selectedTreeData: selectedTreeData, onChangeSearch: searchValue => {
415
+ return (_jsx(Popover, { open: isOpenPopover, arrow: false, placement: "bottomLeft", content: _jsx(MatchesAny, { maxSelectedItem: maxSelectedItem, maxLengthEachItem: maxLengthEachItem, dataType: dataType, isExternalSearch: !!onChangeSearch, searchValue: state.searchValue, className: popupClassName, items: items, selectedItems: selectedItems, loading: loading, objectName: objectName, groupSelectProps: groupSelectProps, renderExtraValues: renderExtraValues, customItemRenders: customItemRenders, listEmptyProps: listEmptyProps, selectedListEmptyProps: selectedListEmptyProps, selectedTreeData: selectedTreeData, onChangeSearch: searchValue => {
400
416
  setState(prev => ({ ...prev, searchValue }));
401
417
  if (onChangeSearch)
402
418
  onChangeSearch(searchValue);
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { type PopoverProps } from '@antscorp/antsomi-ui/es/components/atoms';
3
3
  interface ExtendValuePopupProps extends PopoverProps {
4
4
  onApply?: (extendValues: string[]) => void;
5
+ shouldFilterNumber?: boolean;
5
6
  }
6
7
  export declare const ExtendValuePopup: React.FC<ExtendValuePopupProps>;
7
8
  export {};
@@ -20,10 +20,13 @@ const TextArea = styled(props => _jsx(Input.TextArea, { ...props })) `
20
20
  border: 1px solid ${blue1} !important;
21
21
  border-radius: ${borderRadius}px;
22
22
  }
23
+ ::-webkit-input-placeholder {
24
+ opacity: 1 !important;
25
+ }
23
26
  `;
24
27
  export const ExtendValuePopup = props => {
25
28
  // Props
26
- const { children, onApply = () => { }, ...restProps } = props;
29
+ const { shouldFilterNumber = false, children, onApply = () => { }, ...restProps } = props;
27
30
  // State
28
31
  const [state, setState] = useState({
29
32
  isOpenPopover: false,
@@ -49,5 +52,7 @@ export const ExtendValuePopup = props => {
49
52
  width: 500,
50
53
  }, trigger: ['click'], arrow: false, placement: "topRight", onOpenChange: () => setState(prev => ({ ...prev, isOpenPopover: !isOpenPopover })), ...restProps, content: _jsx(ApplyPopupContent, { title: t(translations.extendValue.title).toString(), applyButtonProps: {
51
54
  disabled: !extendValues?.trim(),
52
- }, onCancel: onClosePopover, onApply: () => form.submit(), children: _jsx(Form, { form: form, onFinish: onFinishSubmit, children: _jsx(Form.Item, { noStyle: true, name: "extendValues", children: _jsx(TextArea, { autoSize: false, bordered: false, rows: 9, placeholder: t(translations.extendValue.placeholder).toString() }) }) }) }), children: children }));
55
+ }, onCancel: onClosePopover, onApply: () => form.submit(), children: _jsx(Form, { form: form, onFinish: onFinishSubmit, children: _jsx(Form.Item, { noStyle: true, name: "extendValues", children: _jsx(TextArea, { autoSize: false, bordered: false, rows: 9, placeholder: t(shouldFilterNumber
56
+ ? translations.extendValue.placeholderNumber
57
+ : translations.extendValue.placeholder).toString() }) }) }) }), children: children }));
53
58
  };
@@ -28,6 +28,7 @@ export type CustomItemRenders<TItem> = {
28
28
  error?: (item: MatchesAnyItem<TItem>) => ReactNode;
29
29
  };
30
30
  export interface MatchesAnySelectProps<TItem = any> extends Omit<SelectProps, 'onChange'> {
31
+ dataType?: string;
31
32
  /** Maximum item can select from items list */
32
33
  maxSelectedItem?: number;
33
34
  /** Max character of each item selected
@@ -67,7 +68,7 @@ export interface MatchesAnySelectProps<TItem = any> extends Omit<SelectProps, 'o
67
68
  /** Callback function that is called when the user scroll */
68
69
  onLoadMore?: () => void;
69
70
  }
70
- export interface MatchesAnyProps<TItem = any> extends Omit<FlexProps, 'children'>, Pick<MatchesAnySelectProps<TItem>, 'objectName' | 'loading' | 'showExtendValue' | 'items' | 'selectedItems' | 'onLoadMore' | 'groupSelectProps' | 'onChangeSearch' | 'renderExtraValues' | 'customItemRenders' | 'listEmptyProps' | 'selectedListEmptyProps' | 'selectedTreeData' | 'searchValue' | 'maxSelectedItem' | 'maxLengthEachItem'> {
71
+ export interface MatchesAnyProps<TItem = any> extends Omit<FlexProps, 'children'>, Pick<MatchesAnySelectProps<TItem>, 'objectName' | 'loading' | 'showExtendValue' | 'items' | 'selectedItems' | 'onLoadMore' | 'groupSelectProps' | 'onChangeSearch' | 'renderExtraValues' | 'customItemRenders' | 'listEmptyProps' | 'selectedListEmptyProps' | 'selectedTreeData' | 'searchValue' | 'maxSelectedItem' | 'maxLengthEachItem' | 'dataType'> {
71
72
  /** Indicates handle search out of component */
72
73
  isExternalSearch?: boolean;
73
74
  /**
@@ -90,3 +90,4 @@ export declare const getSelectedTreeData: (items: MatchesAnyItem<any>[], selecte
90
90
  [Symbol.iterator]: () => IterableIterator<string>;
91
91
  at: (index: number) => string | undefined;
92
92
  }[];
93
+ export declare const NUMBER_REGEX: RegExp;
@@ -66,3 +66,5 @@ export const getSelectedTreeData = (items, selectedItems, selectedTreeData = [])
66
66
  ]);
67
67
  return unionBy(treeData, 'key');
68
68
  };
69
+ // filter number data
70
+ export const NUMBER_REGEX = /^-?\d+(\.\d+)?$/;
@@ -69,6 +69,7 @@ export const formats = [
69
69
  'image',
70
70
  'color',
71
71
  'code-block',
72
+ 'imageBlot',
72
73
  ];
73
74
  const ToolBarWrapper = styled.div `
74
75
  border: 1px solid ${props => props.borderColor} !important;
@@ -1,7 +1,12 @@
1
1
  import 'quill/dist/quill.snow.css';
2
+ export declare enum TCallBack {
3
+ LOADING_UPLOAD = "LOADING_UPLOAD",
4
+ ERROR = "error"
5
+ }
2
6
  type TEditorProps = {
3
7
  value: string;
4
8
  onChange: (value: string) => void;
9
+ callback?: (type: TCallBack, value: string | boolean) => void;
5
10
  placeholder: string;
6
11
  uploadService?: Function;
7
12
  height?: string | number;
@@ -9,5 +14,5 @@ type TEditorProps = {
9
14
  borderColor?: string;
10
15
  isRoundCorner?: boolean;
11
16
  };
12
- export declare const QuillEditor: ({ value, onChange, placeholder, uploadService, height, maxImgHeight, borderColor, isRoundCorner, }: TEditorProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const QuillEditor: ({ value, onChange, placeholder, uploadService, height, maxImgHeight, borderColor, isRoundCorner, callback, }: TEditorProps) => import("react/jsx-runtime").JSX.Element;
13
18
  export {};
@@ -1,48 +1,29 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
3
  import Quill from 'quill';
4
- import { ImageHandler } from 'quill-upload';
4
+ import { isFunction } from 'lodash';
5
+ import QuillImageDropAndPaste from 'quill-image-drop-and-paste';
5
6
  // Hooks
6
7
  import debounce from 'lodash/debounce';
7
8
  // Components
8
9
  import EditorToolbar, { modules, formats } from './EditorToolbar';
9
10
  // Styles
10
11
  import 'quill/dist/quill.snow.css';
11
- import styled from 'styled-components';
12
- Quill.register('modules/imageHandler', ImageHandler);
12
+ import { EditorWrapper, LoadingOverlay, QuillWrapper } from './styled';
13
+ import { Spin } from '../../atoms';
13
14
  const Block = Quill.import('blots/block');
14
15
  Block.tagName = 'DIV';
15
16
  Quill.register(Block, true);
16
- // const toolbarOptions = [
17
- // ['bold', 'italic', 'underline', 'strike'],
18
- // ['blockquote', 'code-block'],
19
- // ['link', 'image', 'video', 'formula'],
20
- // [{ header: 1 }, { header: 2 }],
21
- // [{ list: 'ordered' }, { list: 'bullet' }, { list: 'check' }],
22
- // [{ script: 'sub' }, { script: 'super' }],
23
- // [{ indent: '-1' }, { indent: '+1' }],
24
- // [{ direction: 'rtl' }],
25
- // [{ size: ['small', false, 'large', 'huge'] }],
26
- // [{ header: [1, 2, 3, 4, 5, 6, false] }],
27
- // [{ color: [] }, { background: [] }],
28
- // [{ font: [] }],
29
- // [{ align: [] }],
30
- // ['clean'],
31
- // ];
32
- const EditorWrapper = styled.div `
33
- border: 1px solid ${props => props.borderColor} !important;
34
-
35
- .ql-editor.ql-blank::before {
36
- font-style: normal !important;
37
- }
38
-
39
- .ql-editor a {
40
- color: #06c !important;
41
- }
42
- `;
43
- export const QuillEditor = ({ value, onChange, placeholder = '', uploadService, height = 'auto', maxImgHeight = '300px', borderColor = '#d4d4d4', isRoundCorner, }) => {
17
+ Quill.register('modules/imageDropAndPaste', QuillImageDropAndPaste);
18
+ export var TCallBack;
19
+ (function (TCallBack) {
20
+ TCallBack["LOADING_UPLOAD"] = "LOADING_UPLOAD";
21
+ TCallBack["ERROR"] = "error";
22
+ })(TCallBack || (TCallBack = {}));
23
+ export const QuillEditor = ({ value, onChange, placeholder = '', uploadService, height = 'auto', maxImgHeight = '300px', borderColor = '#d4d4d4', isRoundCorner, callback = () => { }, }) => {
44
24
  const editor = useRef(null);
45
25
  const rand = useRef(String(Math.random()).replace(/\./g, ''));
26
+ const [isUploading, setIsUploading] = useState(false);
46
27
  const processText = () => {
47
28
  editor.current?.root.querySelectorAll('li').forEach(li => {
48
29
  let max = 0;
@@ -56,22 +37,76 @@ export const QuillEditor = ({ value, onChange, placeholder = '', uploadService,
56
37
  const debounceQuickProcess = debounce(processText, 100);
57
38
  const debounceChange = debounce(onChange, 500);
58
39
  // Upload handler function
59
- const _onUpload = async (file, resolve) => {
40
+ const _onUpload = async (file) => {
60
41
  try {
42
+ setIsUploading(true);
43
+ callback(TCallBack.LOADING_UPLOAD, true);
61
44
  const result = await uploadService({ files: [file], mode: 'file' });
62
45
  if (result?.data?.length) {
63
- resolve(result.data[0].url);
64
- editor.current.root.querySelectorAll('img.quill-upload-progress').forEach(el => {
65
- el.classList.remove('quill-upload-progress');
66
- el.style.maxHeight = maxImgHeight;
67
- });
46
+ return result.data[0].url;
47
+ }
48
+ return '';
49
+ }
50
+ finally {
51
+ setIsUploading(false);
52
+ isFunction(callback) && callback(TCallBack.LOADING_UPLOAD, false);
53
+ }
54
+ };
55
+ const handlerDropImage = async (_imageDataUrl, _type, imageData) => {
56
+ callback(TCallBack.ERROR, 'RESET');
57
+ const file = imageData.toFile();
58
+ if (!editor.current)
59
+ return;
60
+ if (file.size > 10 * 1024 * 1024) {
61
+ callback(TCallBack.ERROR, 'FILE_TOO_LARGE');
62
+ return;
63
+ }
64
+ const range = editor.current?.getSelection();
65
+ if (!range)
66
+ return;
67
+ // Insert loading placeholder
68
+ try {
69
+ const fileUrl = await _onUpload(file);
70
+ if (fileUrl) {
71
+ const currentRange = editor.current?.getSelection();
72
+ editor.current?.insertEmbed(currentRange?.index || range.index, 'image', fileUrl, Quill.sources.USER);
68
73
  }
69
- resolve('');
70
74
  }
71
75
  catch (error) {
72
- resolve('');
76
+ callback(TCallBack.ERROR, 'UPLOAD_FAILED');
73
77
  }
74
78
  };
79
+ const imageHandler = useCallback(() => {
80
+ callback(TCallBack.ERROR, 'RESET');
81
+ const input = document.createElement('input');
82
+ input.setAttribute('type', 'file');
83
+ input.setAttribute('accept', 'image/*');
84
+ input.click();
85
+ input.onchange = async () => {
86
+ if (input !== null && input.files !== null) {
87
+ if (!editor.current)
88
+ return;
89
+ const file = input.files[0];
90
+ if (file.size > 10 * 1024 * 1024) {
91
+ callback(TCallBack.ERROR, 'FILE_TOO_LARGE');
92
+ return;
93
+ }
94
+ const range = editor.current?.getSelection();
95
+ if (!range)
96
+ return;
97
+ try {
98
+ const fileUrl = await _onUpload(file);
99
+ if (fileUrl) {
100
+ const currentRange = editor.current?.getSelection();
101
+ editor.current?.insertEmbed(currentRange?.index || range.index, 'image', fileUrl, Quill.sources.USER);
102
+ }
103
+ }
104
+ catch (error) {
105
+ callback(TCallBack.ERROR, 'UPLOAD_FAILED');
106
+ }
107
+ }
108
+ };
109
+ }, []);
75
110
  useEffect(() => {
76
111
  if (!value && editor.current) {
77
112
  editor.current.setText('');
@@ -80,22 +115,21 @@ export const QuillEditor = ({ value, onChange, placeholder = '', uploadService,
80
115
  useEffect(() => {
81
116
  if (editor.current)
82
117
  return;
118
+ const configModule = modules(`toolbar-${rand.current}`);
83
119
  editor.current = new Quill(`#editor-${rand.current}`, {
84
120
  theme: 'snow',
85
121
  modules: {
86
- ...modules(`toolbar-${rand.current}`),
87
- imageHandler: uploadService
88
- ? {
89
- imageClass: 'custom-image-class',
90
- upload: file => new Promise(resolve => {
91
- if (file.size > 10 * 1024 * 1024) {
92
- resolve('');
93
- return;
94
- }
95
- _onUpload(file, resolve);
96
- }),
97
- }
98
- : undefined,
122
+ ...configModule,
123
+ toolbar: {
124
+ ...configModule.toolbar,
125
+ handlers: {
126
+ ...configModule.toolbar.handlers,
127
+ image: imageHandler,
128
+ },
129
+ },
130
+ imageDropAndPaste: {
131
+ handler: handlerDropImage,
132
+ },
99
133
  },
100
134
  formats,
101
135
  placeholder,
@@ -111,8 +145,9 @@ export const QuillEditor = ({ value, onChange, placeholder = '', uploadService,
111
145
  else {
112
146
  debounceChange(editor.current?.root.innerHTML || '');
113
147
  }
148
+ callback(TCallBack.ERROR, 'RESET');
114
149
  }
115
150
  });
116
151
  }, []);
117
- return (_jsxs(_Fragment, { children: [_jsx(EditorToolbar, { id: `toolbar-${rand.current}`, isRoundCorner: isRoundCorner, borderColor: borderColor }), _jsx(EditorWrapper, { id: `editor-${rand.current}`, style: { height, color: '#000000' }, borderColor: borderColor })] }));
152
+ return (_jsxs(QuillWrapper, { children: [_jsx(EditorToolbar, { id: `toolbar-${rand.current}`, isRoundCorner: isRoundCorner, borderColor: borderColor }), _jsx(EditorWrapper, { id: `editor-${rand.current}`, style: { height, color: '#000000' }, borderColor: borderColor, children: isUploading && (_jsx(LoadingOverlay, { children: _jsx(Spin, { spinning: isUploading }) })) })] }));
118
153
  };
@@ -0,0 +1,5 @@
1
+ export declare const QuillWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const EditorWrapper: import("styled-components").StyledComponent<"div", any, {
3
+ borderColor: string;
4
+ }, never>;
5
+ export declare const LoadingOverlay: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,29 @@
1
+ import styled from 'styled-components';
2
+ export const QuillWrapper = styled.div `
3
+ position: relative;
4
+ `;
5
+ export const EditorWrapper = styled.div `
6
+ position: relative;
7
+ border: 1px solid ${props => props.borderColor} !important;
8
+
9
+ .ql-editor.ql-blank::before {
10
+ font-style: normal !important;
11
+ }
12
+
13
+ .ql-editor a {
14
+ color: #06c !important;
15
+ }
16
+ `;
17
+ export const LoadingOverlay = styled.div `
18
+ position: absolute;
19
+ top: 0;
20
+ left: 0;
21
+ right: 0;
22
+ bottom: 0;
23
+ background-color: rgba(255, 255, 255, 0.8);
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ z-index: 1000;
28
+ backdrop-filter: blur(2px);
29
+ `;
@@ -7,13 +7,16 @@ export declare const VirtualizedMenu: React.ForwardRefExoticComponent<Partial<{
7
7
  selectable: boolean;
8
8
  className: string;
9
9
  itemSize: number;
10
- selected: string[];
10
+ selected: string | string[];
11
11
  expanded: string[];
12
12
  onClick: (args: {
13
13
  item: import("./types").ItemType;
14
- pathKey: import("./types").PathKey;
14
+ domEvent?: React.MouseEvent<Element, MouseEvent> | undefined;
15
+ elKey: "item" | "item-expand-el";
15
16
  }) => void;
16
- action: React.ReactNode | ((item: import("./types").ItemType) => React.ReactNode);
17
+ action: React.ReactNode | ((item: import("./types").ItemType, others: {
18
+ expandEl: React.ReactNode;
19
+ }) => React.ReactNode);
17
20
  }> & {
18
21
  mode?: "inline" | undefined;
19
22
  } & React.RefAttributes<import("./types").VirtualizedMenuBaseHandle>>;