@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
@@ -1,11 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
2
+ import { useEffect, useMemo, useState } from 'react';
3
3
  import Content from './Content';
4
4
  import Service from './Service';
5
5
  import TicketIcon from './components/icons/TicketIcon';
6
6
  import AddTicketIcon from './components/icons/AddTicketIcon';
7
- import { Button, Modal, Popover, Typography, DrawerDetail, message, Icon, } from '@antscorp/antsomi-ui/es/components/';
7
+ import { Button, Modal, Popover, Typography, DrawerDetail, message, Icon, ItemNotFound, Spin, } from '@antscorp/antsomi-ui/es/components/';
8
8
  import { WrapperModalHeader, TicketButton, TicketEditorWrapper } from './styled';
9
+ import { isEmpty } from 'lodash';
10
+ import { Flex } from 'antd/lib';
9
11
  // import Message from './components/Message';
10
12
  const defaultProps = {
11
13
  isOpen: false,
@@ -189,14 +191,8 @@ export const TicketEditor = props => {
189
191
  fetchAccountManage();
190
192
  fetchAccountPermission();
191
193
  }, []);
192
- const toggleModal = () => {
193
- setIsOpenModal(!isOpenModal);
194
- };
195
194
  useEffect(() => {
196
195
  setOpenDrawer(isOpen);
197
- // if (isOpen) {
198
- // setIsSuccessCreated(false);
199
- // }
200
196
  }, [isOpen]);
201
197
  const handleClose = (isCancle, isRulesEdit) => {
202
198
  if (isCancle) {
@@ -223,18 +219,30 @@ export const TicketEditor = props => {
223
219
  }
224
220
  setAnchorEl(null);
225
221
  };
222
+ const isExistTicket = useMemo(() => (!isEmpty(ticketDetails) && !isLoadingDetails) || action === 'create', [ticketDetails, isLoadingDetails, action]);
223
+ const renderContent = () => {
224
+ if (isLoadingDetails) {
225
+ return (_jsx(Flex, { style: { height: '100vh' }, align: "center", justify: "center", children: _jsx(Spin, { spinning: true }) }));
226
+ }
227
+ if (!isExistTicket) {
228
+ return _jsx(ItemNotFound, {});
229
+ }
230
+ return (_jsx(Content, { portalId: portalId, token: token, action: action, listUsers: listUsers, domainTicket: domainTicket, domainUpload: domainUpload, config: config, ticketDetails: ticketDetails, listComment: listComment, ticketId: ticketId, userId: userId, fetchgetTicketComments: fetchgetTicketComments, isLoadingComment: isLoadingComment, isLoadingDetails: isLoadingDetails, isLoadingDataSouce: isLoadingDataSouce, handleCloseDrawer: handleCloseDrawer, setIsSuccessCreated: setIsSuccessCreated, accountManage: accountManage, timeZone: timeZone, isLoadingSelectedAccount: isLoadingSelectedAccount, accountEdit: accountEdit, initOwnerId: ownerId, isAllAccount: isAllAccount, openDrawer: openDrawer, dataSelectInput: dataSelectInput, setDataSelectInput: setDataSelectInput }));
231
+ };
226
232
  return (_jsxs(TicketEditorWrapper, { children: [!!useIcon && (_jsxs(TicketButton, { onClick: e => (useChat ? setOpenPopover(true) : setOpenDrawer(true)), children: [_jsx(TicketIcon, {}), _jsx(AddTicketIcon, { className: "add-icon" })] })), !!useChat && (_jsx(_Fragment, { children: _jsxs(Popover, { open: isOpenPopover, className: "popoverBody", children: [_jsx(Typography, { className: "popoverItem", onClick: () => handleSelectPopover('DRAWER'), children: "Create ticket" }), _jsx(Typography, { className: "popoverItem", onClick: () => handleSelectPopover('CHAT'), children: "Chat with us" })] }) })), _jsx(DrawerDetail, { open: openDrawer, onClose: () => handleClose(true, false), menuProps: {
227
- items: [
228
- {
229
- icon: _jsx(Icon, { type: "icon-ants-pencil" }),
230
- label: 'Settings',
231
- key: 'settings',
232
- },
233
- ],
233
+ items: !isExistTicket
234
+ ? []
235
+ : [
236
+ {
237
+ icon: _jsx(Icon, { type: "icon-ants-pencil" }),
238
+ label: 'Settings',
239
+ key: 'settings',
240
+ },
241
+ ],
234
242
  selectedKeys: ['settings'],
235
243
  }, headerProps: {
236
244
  showBorderBottom: true,
237
- }, name: "ticket-editor-drawer", children: openDrawer && (_jsx(Content, { portalId: portalId, token: token, action: action, listUsers: listUsers, domainTicket: domainTicket, domainUpload: domainUpload, config: config, ticketDetails: ticketDetails, listComment: listComment, ticketId: ticketId, userId: userId, fetchgetTicketComments: fetchgetTicketComments, isLoadingComment: isLoadingComment, isLoadingDetails: isLoadingDetails, isLoadingDataSouce: isLoadingDataSouce, handleCloseDrawer: handleCloseDrawer, setIsSuccessCreated: setIsSuccessCreated, accountManage: accountManage, timeZone: timeZone, isLoadingSelectedAccount: isLoadingSelectedAccount, accountEdit: accountEdit, initOwnerId: ownerId, isAllAccount: isAllAccount, openDrawer: openDrawer, dataSelectInput: dataSelectInput, setDataSelectInput: setDataSelectInput })) }), _jsx(Modal, { open: isOpenModal, onCancel: () => setIsOpenModal(false), className: "modal", children: _jsxs("div", { className: "wrapperBody", children: [_jsx(WrapperModalHeader, { children: "Confirm deletion of this ticket" }), _jsx("div", { className: "modalBody", children: _jsx("span", { style: { fontSize: '12px', color: '#000' }, children: "Once you confirm cancel, this ticket will NOT be saved." }) }), _jsxs("div", { className: "modalFooter", children: [_jsx(Button, { style: {
245
+ }, name: "ticket-editor-drawer", children: openDrawer && renderContent() }), _jsx(Modal, { open: isOpenModal, onCancel: () => setIsOpenModal(false), className: "modal", children: _jsxs("div", { className: "wrapperBody", children: [_jsx(WrapperModalHeader, { children: "Confirm deletion of this ticket" }), _jsx("div", { className: "modalBody", children: _jsx("span", { style: { fontSize: '12px', color: '#000' }, children: "Once you confirm cancel, this ticket will NOT be saved." }) }), _jsxs("div", { className: "modalFooter", children: [_jsx(Button, { style: {
238
246
  height: '28px',
239
247
  background: '#1f5fac',
240
248
  color: '#fff',
@@ -424,6 +424,7 @@ export const WrapperLinkItemFiles = styled.div `
424
424
  display: flex;
425
425
  align-items: center;
426
426
  gap: 10px;
427
+ overflow: hidden;
427
428
  }
428
429
  .file-icon {
429
430
  font-size: 20.5px;
@@ -10,6 +10,7 @@ import Service from './Service';
10
10
  import { WrapperContent, WrapperContentInput, WrapperEditor, WrapperIconEditor, WrapperInputFile, WrapperLable, WrapperLeftContent, WrapperLinkItemFiles, WrapperMessageContent, WrapperRightContent, WrapperTextEdit, WrapperTextInput, } from './styled';
11
11
  import { formatDatarender, handleValidateContent } from './util';
12
12
  import { get, keyBy } from 'lodash';
13
+ import { TCallBack } from '../../molecules/QuillEditor/QuillEditor';
13
14
  const initValueInput = {
14
15
  originTitle: 'Create new ticket',
15
16
  title: '',
@@ -137,7 +138,7 @@ const Content = ({ apiKey, domain, portalId, token, action, ticketId, listUsers,
137
138
  const handleEditorChange = content => {
138
139
  setTextValue(content);
139
140
  updateValueInput({ message: content });
140
- setIsLoadingUpload(content.includes('<img src="data:image/png;base64'));
141
+ // setIsLoadingUpload(content.includes('<img src="data:image/png;base64'));
141
142
  };
142
143
  const handleUpdateFollowers = arrFolowers => {
143
144
  const params = {
@@ -221,12 +222,17 @@ const Content = ({ apiKey, domain, portalId, token, action, ticketId, listUsers,
221
222
  };
222
223
  }, [isOpenToast]);
223
224
  const handleOnchangeFile = e => {
224
- const limitSize = 50 * 1024 * 1024;
225
- const sizeFile = e.target?.files[0]?.size;
225
+ const file = e.target?.files[0];
226
+ if (!file)
227
+ return;
228
+ const sizeFile = file.size;
229
+ const fileType = file.type;
230
+ const isImage = fileType.startsWith('image/');
231
+ const limitSize = isImage ? 10 * 1024 * 1024 : 50 * 1024 * 1024;
226
232
  if (sizeFile >= limitSize) {
227
233
  setErrFile({
228
234
  isError: true,
229
- message: '*Maximum upload file size: 50MB',
235
+ message: `Maximum file size is reached (10MB for image & 50MB for other types).`,
230
236
  });
231
237
  }
232
238
  else {
@@ -267,15 +273,43 @@ const Content = ({ apiKey, domain, portalId, token, action, ticketId, listUsers,
267
273
  ? '--'
268
274
  : dataSelectOptions[ticketDetails[info?.value]]?.name }) })] }, info.id));
269
275
  };
276
+ const callbackEditor = (type, value) => {
277
+ switch (type) {
278
+ case TCallBack.LOADING_UPLOAD:
279
+ setIsLoadingUpload(value);
280
+ break;
281
+ case TCallBack.ERROR: {
282
+ switch (value) {
283
+ case 'FILE_TOO_LARGE':
284
+ setErrFile({
285
+ isError: true,
286
+ message: '*Maximum upload file size: 10MB',
287
+ });
288
+ break;
289
+ case 'RESET':
290
+ setErrFile({
291
+ isError: false,
292
+ message: '',
293
+ });
294
+ break;
295
+ default:
296
+ break;
297
+ }
298
+ break;
299
+ }
300
+ default:
301
+ break;
302
+ }
303
+ };
270
304
  return (_jsxs("div", { style: { height: '100%' }, children: [_jsxs(Helmet, { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("title", { children: browserTitle })] }), _jsx(Spin, { style: { height: '100vh' }, spinning: isLoading || isLoadingDetails || isLoadingDataSouce || isLoadingFollower, children: _jsxs(WrapperContent, { style: { height: '100%' }, children: [_jsxs(WrapperLeftContent, { children: [_jsxs(WrapperContentInput, { style: { alignItems: 'flex-start' }, children: [_jsxs(WrapperLable, { children: ["Owner", _jsx("span", { style: { color: '#ff0000' }, children: "*" })] }), _jsx("div", { children: ownerEmail })] }), _jsxs(WrapperContentInput, { style: { marginTop: '15px', alignItems: 'flex-start' }, children: [_jsx(WrapperLable, { children: "Follower(s)" }), _jsx(SelectAccount, { type: "default", initData: ticketDetails?.followers || [], nameKey: "userName", userIdKey: "userId", users: listUsers, onChange: (_, followers) => onChangeFollowers(followers) })] }), dataSelects?.map((data) => _jsx(_Fragment, { children: renderOptions(data) })), _jsxs(WrapperContentInput, { style: { marginTop: '15px' }, children: [_jsx(WrapperLable, { htmlFor: "referenceUrl", children: "Reference URL" }), isUpdate ? (ticketDetails.referenceUrl ? (_jsx(Tooltip, { title: ticketDetails.referenceUrl, placement: "top", children: _jsx(WrapperTextEdit, { color: "#005fb8", href: ticketDetails.referenceUrl, target: "_blank", children: ticketDetails.referenceUrl }) })) : (_jsx(WrapperTextEdit, { color: "#005fb8", href: ticketDetails.referenceUrl, target: "_blank", children: ticketDetails.referenceUrl }))) : (_jsx(WrapperTextInput, { placeholder: "Reference URL", id: "referenceUrl",
271
305
  // width="300px"
272
- onChange: handleOnchangeInput, name: "referenceUrl", value: valueInput.referenceUrl }))] })] }), _jsxs(WrapperRightContent, { children: [_jsxs(WrapperEditor, { children: [_jsxs("div", { children: [_jsx(QuillEditor, { value: textValue, uploadService: Service.tickets.callApi.uploadFile({
306
+ onChange: handleOnchangeInput, name: "referenceUrl", value: valueInput.referenceUrl }))] })] }), _jsxs(WrapperRightContent, { children: [_jsxs(WrapperEditor, { children: [_jsxs(_Fragment, { children: [_jsx(QuillEditor, { value: textValue, uploadService: Service.tickets.callApi.uploadFile({
273
307
  domain: domainUpload,
274
- }), onChange: handleEditorChange, placeholder: "Enter your comment...", height: 195 }), _jsxs("div", { children: [valueInput.files?.length > 0 && (_jsx(WrapperLinkItemFiles, { children: valueInput.files?.map((file, index) => (_jsxs("div", { className: "file-item", children: [_jsxs("div", { className: "file-name-group", children: [_jsx(Icon, { className: "file-icon", type: "icon-ants-attachment" }), _jsx(Tooltip, { title: file?.file_name, children: _jsx("span", { className: "file-name", children: file?.file_name }) })] }), _jsx(Icon, { onClick: () => handleRemoveFileV2(index), className: "remove-btn", type: "icon-ants-remove-slim" })] }, file?.token))) })), _jsxs(WrapperIconEditor, { borderTop: !!valueInput.files?.length, children: [_jsxs(WrapperInputFile, { children: [_jsx("label", { htmlFor: `fileImage-${fileInputKey}`, className: "upload-wrapper-label", children: _jsx(Icon, { type: "icon-ants-attachment", className: "upload-icon" }) }), _jsx("input", { type: "file", style: { position: 'absolute', top: 0, right: 0, display: 'none' }, name: `fileImage-${fileInputKey}`, id: `fileImage-${fileInputKey}`, onChange: handleOnchangeFile }, fileInputKey)] }), isUpdate && (_jsx(Button, { type: "primary", disabled: !handleValidateContent(textValue) || isLoadingUpload, className: "reply-btn", style: {
308
+ }), onChange: handleEditorChange, placeholder: "Enter your comment...", height: 195, callback: callbackEditor }), _jsxs("div", { children: [valueInput.files?.length > 0 && (_jsx(WrapperLinkItemFiles, { children: valueInput.files?.map((file, index) => (_jsxs("div", { className: "file-item", children: [_jsxs("div", { className: "file-name-group", children: [_jsx(Icon, { className: "file-icon", type: "icon-ants-attachment" }), _jsx(Tooltip, { title: file?.file_name, children: _jsx("span", { className: "file-name", children: file?.file_name }) })] }), _jsx(Icon, { onClick: () => handleRemoveFileV2(index), className: "remove-btn", type: "icon-ants-remove-slim" })] }, file?.token))) })), _jsxs(WrapperIconEditor, { borderTop: !!valueInput.files?.length, children: [_jsxs(WrapperInputFile, { children: [_jsx("label", { htmlFor: `fileImage-${fileInputKey}`, className: "upload-wrapper-label", children: _jsx(Icon, { type: "icon-ants-attachment", className: "upload-icon" }) }), _jsx("input", { type: "file", style: { position: 'absolute', top: 0, right: 0, display: 'none' }, name: `fileImage-${fileInputKey}`, id: `fileImage-${fileInputKey}`, onChange: handleOnchangeFile }, fileInputKey)] }), isUpdate && (_jsx(Button, { type: "primary", disabled: !handleValidateContent(textValue) || isLoadingUpload, className: "reply-btn", style: {
275
309
  background: `${!handleValidateContent(textValue) || isLoadingUpload
276
310
  ? '#ccc'
277
311
  : '#1f5fac'}`,
278
- }, onClick: handleUpdateComment, loading: isLoadingUpload, children: "Reply" }))] })] })] }), errFile.isError ? (_jsx("div", { className: "error-message", children: errFile.message })) : (isEmptyField &&
312
+ }, onClick: handleUpdateComment, children: "Reply" }))] })] })] }), errFile.isError ? (_jsx("div", { className: "error-message", children: errFile.message })) : (isEmptyField &&
279
313
  !valueInput?.message && (_jsx("div", { className: "error-message", children: "* This field can't be empty" })))] }), isUpdate && (_jsx(Spin, { spinning: isLoadingComment, children: _jsx(WrapperMessageContent, { children: listComment?.map(comment => (_jsx(MessageComponent, { toUser: comment?.toUser, fromUser: comment?.fromUser, followers: comment?.followers,
280
314
  // mailFollower={comment?.mailFollower}
281
315
  message: comment?.message, date: comment?.createdDate, attachments: comment?.attachments, timeZone: timeZone, submitterEmail: comment?.submitterEmail }, comment?.id))) }) }))] })] }) })] }));
@@ -18,6 +18,7 @@ const MessageComponent = ({ toUser, fromUser, followers, attachments, message, d
18
18
  if (refMesage.current) {
19
19
  refMesage.current.querySelectorAll('img')?.forEach(img => {
20
20
  img.style.cursor = 'pointer';
21
+ img.style.width = '100%';
21
22
  img.addEventListener('click', () => {
22
23
  setModalImg({
23
24
  ...modalImg,
@@ -34,7 +34,7 @@ export const WrapperLeftContent = styled.div `
34
34
  `;
35
35
  export const WrapperRightContent = styled.div `
36
36
  flex: 2;
37
- width: 100%;
37
+ max-width: 66.67%;
38
38
  ::-webkit-scrollbar {
39
39
  width: 8px;
40
40
  height: 8px;
@@ -423,6 +423,7 @@ export const WrapperLinkItemFiles = styled.div `
423
423
  display: flex;
424
424
  align-items: center;
425
425
  gap: 10px;
426
+ overflow: hidden;
426
427
  }
427
428
  .file-icon {
428
429
  font-size: 20.5px;
@@ -15,4 +15,5 @@ export { AccountProfile, type AccountSettingProps } from './AccountProfile';
15
15
  export * from './Login';
16
16
  export * from './Filter';
17
17
  export { ActivityTimeline, type ActivityTimeLineProps } from './ActivityTimeline';
18
+ export { TextEditor, TextEditorProvider, type TextEditorProps, type TextEditorRef, type TextEditorJSONContent, type TextEditorProviderProps, type TextEditorProviderRefHandler, } from './TextEditor';
18
19
  export { WhatsappMobile, SAMPLE_PREVIEW } from './PreviewCollections';
@@ -15,4 +15,5 @@ export { AccountProfile } from './AccountProfile';
15
15
  export * from './Login';
16
16
  export * from './Filter';
17
17
  export { ActivityTimeline } from './ActivityTimeline';
18
+ export { TextEditor, TextEditorProvider, } from './TextEditor';
18
19
  export { WhatsappMobile, SAMPLE_PREVIEW } from './PreviewCollections';
@@ -0,0 +1 @@
1
+ @import url('./TextEditor/index.scss');
@@ -26,3 +26,6 @@ export * from './useCustomRouter';
26
26
  export * from './useUpdateEffect';
27
27
  export * from './useOutsideClick';
28
28
  export * from './useDebouncedCallbackV2';
29
+ export * from './useElementSize';
30
+ export * from './useIsMounted';
31
+ export * from './useBroadcastedLocalStorage';
package/es/hooks/index.js CHANGED
@@ -45,3 +45,6 @@ export * from './useCustomRouter';
45
45
  export * from './useUpdateEffect';
46
46
  export * from './useOutsideClick';
47
47
  export * from './useDebouncedCallbackV2';
48
+ export * from './useElementSize';
49
+ export * from './useIsMounted';
50
+ export * from './useBroadcastedLocalStorage';
@@ -0,0 +1,5 @@
1
+ export declare function useBroadcastedLocalStorage<T>(key: string, initialValue: T): {
2
+ readonly value: T;
3
+ readonly setValue: (next: T | ((prev: T) => T)) => void;
4
+ readonly remove: () => void;
5
+ };
@@ -0,0 +1,71 @@
1
+ /* eslint-disable no-console */
2
+ import { useEffect, useState, useRef } from 'react';
3
+ import { useDeepCompareEffect } from './useDeepCompareEffect';
4
+ export function useBroadcastedLocalStorage(key, initialValue) {
5
+ const [value, setValue] = useState(() => {
6
+ if (typeof window === 'undefined')
7
+ return initialValue;
8
+ try {
9
+ const saved = window.localStorage.getItem(key);
10
+ return saved != null ? JSON.parse(saved) : initialValue;
11
+ }
12
+ catch {
13
+ return initialValue;
14
+ }
15
+ });
16
+ // We keep a ref to avoid re-creating the channel on every render
17
+ const channelRef = useRef(null);
18
+ // Initialize BroadcastChannel once
19
+ useEffect(() => {
20
+ if (typeof window === 'undefined' || !('BroadcastChannel' in window)) {
21
+ console.warn('BroadcastChannel not supported in this environment');
22
+ return;
23
+ }
24
+ const channel = new BroadcastChannel(`localstorage_${key}`);
25
+ channelRef.current = channel;
26
+ // Listen for incoming messages
27
+ const onMessage = (event) => {
28
+ setValue(event.data.value);
29
+ };
30
+ channel.addEventListener('message', onMessage);
31
+ return () => {
32
+ channel.removeEventListener('message', onMessage);
33
+ channel.close();
34
+ };
35
+ }, [key]);
36
+ // Whenever `value` changes, persist and broadcast
37
+ useDeepCompareEffect(() => {
38
+ if (typeof window === 'undefined')
39
+ return;
40
+ try {
41
+ window.localStorage.setItem(key, JSON.stringify(value));
42
+ }
43
+ catch (err) {
44
+ console.error('Failed to write to localStorage:', err);
45
+ }
46
+ if (channelRef.current) {
47
+ channelRef.current.postMessage({ value });
48
+ }
49
+ }, [key, value]);
50
+ // Expose setter that mirrors functional API of useState
51
+ const setValueAndBroadcast = (next) => {
52
+ setValue(prev => {
53
+ const computed = next instanceof Function ? next(prev) : next;
54
+ return computed;
55
+ });
56
+ };
57
+ // Optional: a remove function
58
+ const remove = () => {
59
+ try {
60
+ window.localStorage.removeItem(key);
61
+ setValue(initialValue);
62
+ if (channelRef.current) {
63
+ channelRef.current.postMessage({ value: initialValue });
64
+ }
65
+ }
66
+ catch (err) {
67
+ console.error('Failed to remove localStorage item:', err);
68
+ }
69
+ };
70
+ return { value, setValue: setValueAndBroadcast, remove };
71
+ }
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export declare const useElementSize: <T extends HTMLElement>(options?: {
3
+ type: string;
4
+ }) => readonly [import("react").RefObject<T>, {
5
+ width: number;
6
+ height: number;
7
+ }];
@@ -0,0 +1,56 @@
1
+ import { useState, useEffect, useRef, useCallback } from 'react';
2
+ export const useElementSize = (options = { type: 'offset' }) => {
3
+ const { type = 'offset' } = options;
4
+ const [size, setSize] = useState({
5
+ width: 0,
6
+ height: 0,
7
+ });
8
+ const ref = useRef(null);
9
+ const updateSize = useCallback(() => {
10
+ if (ref.current) {
11
+ let width;
12
+ let height;
13
+ switch (type) {
14
+ case 'client':
15
+ width = ref.current.clientWidth; // excludes padding, border, scrollbar
16
+ height = ref.current.clientHeight;
17
+ break;
18
+ case 'scroll':
19
+ width = ref.current.scrollWidth; // includes all scrollable content
20
+ height = ref.current.scrollHeight;
21
+ break;
22
+ case 'offset':
23
+ default:
24
+ width = ref.current.offsetWidth; // includes padding and border
25
+ height = ref.current.offsetHeight;
26
+ break;
27
+ }
28
+ setSize({ width, height });
29
+ }
30
+ }, [type]);
31
+ useEffect(() => {
32
+ const element = ref.current;
33
+ if (!element)
34
+ return;
35
+ // Set initial size
36
+ updateSize();
37
+ // Use ResizeObserver if available
38
+ if (typeof ResizeObserver !== 'undefined') {
39
+ const resizeObserver = new ResizeObserver(() => {
40
+ // Always use the same measurement method as updateSize
41
+ updateSize();
42
+ });
43
+ resizeObserver.observe(element);
44
+ return () => {
45
+ resizeObserver.unobserve(element);
46
+ };
47
+ }
48
+ // Fallback to window resize event
49
+ const handleResize = () => updateSize();
50
+ window.addEventListener('resize', handleResize);
51
+ return () => {
52
+ window.removeEventListener('resize', handleResize);
53
+ };
54
+ }, [updateSize]);
55
+ return [ref, size];
56
+ };
@@ -0,0 +1 @@
1
+ export declare const useIsMounted: () => () => boolean;
@@ -0,0 +1,11 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ export const useIsMounted = () => {
3
+ const isMountedRef = useRef(false);
4
+ useEffect(() => {
5
+ isMountedRef.current = true;
6
+ return () => {
7
+ isMountedRef.current = false;
8
+ };
9
+ }, []);
10
+ return useCallback(() => isMountedRef.current, []);
11
+ };
@@ -597,7 +597,8 @@
597
597
  "noData": "No data",
598
598
  "extendValue": {
599
599
  "title": "Extend Value",
600
- "placeholder": "Input or paste multiple values separated by Enter"
600
+ "placeholder": "Input or paste multiple values separated by Enter",
601
+ "placeholderNumber": "Input or paste multiple values separated by Enter. Only accept numeric values."
601
602
  },
602
603
  "leftMenu": {
603
604
  "pageTitle": {
@@ -3770,6 +3770,7 @@ export declare const translationsJson: {
3770
3770
  extendValue: {
3771
3771
  title: string;
3772
3772
  placeholder: string;
3773
+ placeholderNumber: string;
3773
3774
  };
3774
3775
  leftMenu: {
3775
3776
  pageTitle: {
@@ -7176,6 +7177,7 @@ export declare const translationsJson: {
7176
7177
  extendValue: {
7177
7178
  title: string;
7178
7179
  placeholder: string;
7180
+ placeholderNumber: string;
7179
7181
  };
7180
7182
  matchesAnySelect: {
7181
7183
  noData: string;
@@ -10661,6 +10663,6 @@ export declare const translationsJson: {
10661
10663
  };
10662
10664
  };
10663
10665
  };
10664
- declare const i18nInstance: import("i18next").i18n;
10666
+ declare const i18nInstance: import("node_modules/i18next").i18n;
10665
10667
  export declare const getTranslateMessage: (id: string, defaultMessage?: string, value?: Record<string, unknown>) => string;
10666
10668
  export default i18nInstance;
@@ -144,7 +144,8 @@
144
144
  "noData": "Không có dữ liệu",
145
145
  "extendValue": {
146
146
  "title": "Mở rộng giá trị",
147
- "placeholder": "Nhập hoặc dán nhiều giá trị cách nhau bằng Enter"
147
+ "placeholder": "Nhập hoặc dán nhiều giá trị cách nhau bằng Enter",
148
+ "placeholderNumber": "Nhập hoặc dán nhiều giá trị cách nhau bằng Enter. Chỉ chấp nhận giá trị số "
148
149
  },
149
150
  "matchesAnySelect": {
150
151
  "noData": "Bạn không có giá trị nào <br /> Bấm vào Extend Value để thêm giá trị"
@@ -66,17 +66,14 @@ export declare const searchParamsToObject: (searchParams?: string) => Record<str
66
66
  export declare const getShuffleArray: <T>(array: T[]) => T[];
67
67
  export declare const snakeCaseToCamelCase: <T = Record<string, any>>(object: Record<string, any> | Record<string, any>[], recursive?: boolean) => T;
68
68
  export declare const camelCaseToSnakeCase: <T = Record<string, any>>(object: Record<string, any>, recursive?: boolean) => T;
69
- export declare function generateKey(): any;
69
+ export declare function generateKey(): string;
70
70
  export declare const formatUserId: (userId?: number) => string;
71
71
  /**
72
- * Function to remove accent
73
- * @param str - String want to remove accent
74
- * @returns {string} - Result after remove accent
75
- */
76
- export declare const removeAccent: (str: string) => string;
77
- /** Remove all accents and convert string to lower case, remove leading and trailing white space */
78
- export declare const simplifyString: (str: string) => string;
79
- /**
72
+ * Checks string matching based on a query, supporting fuzzy matching,
73
+ * where the query characters must appear in order within the target string.
74
+ * Allows for missing characters in the query relative to the target,
75
+ * and ignores case, diacritics, and spaces.
76
+ *
80
77
  * @param str target string
81
78
  * @param queryStr search query
82
79
  * @returns true if target string includes search query
@@ -430,35 +430,56 @@ export function generateKey() {
430
430
  }
431
431
  export const formatUserId = (userId) => String(userId || '').replace(/(\d{3})(\d{3})(\d{0,})/, `$1-$2-$3`);
432
432
  /**
433
- * Function to remove accent
434
- * @param str - String want to remove accent
435
- * @returns {string} - Result after remove accent
433
+ * Normalizes a string for searching by:
434
+ * 1. Converting to NFD Unicode form and removing diacritics.
435
+ * 2. Converting to lowercase.
436
+ * 3. Removing all whitespace.
437
+ * @param str The string to normalize.
438
+ * @returns The normalized string.
436
439
  */
437
- export const removeAccent = (str) => {
438
- str = str.replace(/[àáạảãâầấậẩẫăằắặẳẵ]/g, 'a');
439
- str = str.replace(/[èéẹẻẽêềếệểễ]/g, 'e');
440
- str = str.replace(/[ìíịỉĩ]/g, 'i');
441
- str = str.replace(/[òóọỏõôồốộổỗơờớợởỡ]/g, 'o');
442
- str = str.replace(/[ùúụủũưừứựửữ]/g, 'u');
443
- str = str.replace(/[ỳýỵỷỹ]/g, 'y');
444
- str = str.replace(/đ/g, 'd');
445
- str = str.replace(/[ÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴ]/g, 'A');
446
- str = str.replace(/[ÈÉẸẺẼÊỀẾỆỂỄ]/g, 'E');
447
- str = str.replace(/[ÌÍỊỈĨ]/g, 'I');
448
- str = str.replace(/[ÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠ]/g, 'O');
449
- str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');
450
- str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');
451
- str = str.replace(/Đ/g, 'D');
452
- return str;
453
- };
454
- /** Remove all accents and convert string to lower case, remove leading and trailing white space */
455
- export const simplifyString = (str) => removeAccent(`${str || ''}`.toLowerCase().trim()) || '';
440
+ function normalizeStringForSearch(str) {
441
+ if (!str) {
442
+ return ''; // Handle null, undefined, or empty string inputs
443
+ }
444
+ return str
445
+ .normalize('NFD') // Decompose accented characters (e.g., "á" -> "a" + "´")
446
+ .replace(/[\u0300-\u036f]/g, '') // Remove diacritical marks
447
+ .toLowerCase() // Convert to lowercase
448
+ .replace(/\s+/g, ''); // Remove all whitespace
449
+ }
456
450
  /**
451
+ * Checks string matching based on a query, supporting fuzzy matching,
452
+ * where the query characters must appear in order within the target string.
453
+ * Allows for missing characters in the query relative to the target,
454
+ * and ignores case, diacritics, and spaces.
455
+ *
457
456
  * @param str target string
458
457
  * @param queryStr search query
459
458
  * @returns true if target string includes search query
460
459
  */
461
- export const searchStringQuery = (str, queryStr) => simplifyString(str).includes(simplifyString(queryStr || ''));
460
+ export const searchStringQuery = (str, queryStr) => {
461
+ const normalizedQuery = normalizeStringForSearch(queryStr);
462
+ const normalizedItem = normalizeStringForSearch(str);
463
+ // Optimization: if normalized query is longer than normalized item,
464
+ // it cannot be a subsequence.
465
+ if (normalizedQuery.length > normalizedItem.length) {
466
+ return false;
467
+ }
468
+ // Subsequence check:
469
+ // Iterate through both normalized strings.
470
+ // If characters match, advance the query pointer.
471
+ // Always advance the item pointer.
472
+ let queryIndex = 0;
473
+ let itemIndex = 0;
474
+ while (queryIndex < normalizedQuery.length && itemIndex < normalizedItem.length) {
475
+ if (normalizedQuery[queryIndex] === normalizedItem[itemIndex]) {
476
+ queryIndex++;
477
+ }
478
+ itemIndex++;
479
+ }
480
+ // If queryIndex reached the end of normalizedQuery, all its characters were found in order.
481
+ return queryIndex === normalizedQuery.length;
482
+ };
462
483
  /**
463
484
  * Checks if any of the provided values match the search value.
464
485
  *
@@ -9,3 +9,4 @@ export * from './actionButtons';
9
9
  export * from './dataTable';
10
10
  export * from './cookie';
11
11
  export * from './attribute';
12
+ export * from './web';
package/es/utils/index.js CHANGED
@@ -9,3 +9,4 @@ export * from './actionButtons';
9
9
  export * from './dataTable';
10
10
  export * from './cookie';
11
11
  export * from './attribute';
12
+ export * from './web';