@antscorp/antsomi-ui 2.0.110 → 2.0.112

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 (344) hide show
  1. package/es/assets/css/main.scss +2 -0
  2. package/es/components/atoms/Eyedropper/Eyedropper.d.ts +2 -0
  3. package/es/components/atoms/Eyedropper/Eyedropper.js +53 -0
  4. package/es/components/atoms/Eyedropper/index.d.ts +0 -0
  5. package/es/components/atoms/Eyedropper/index.js +1 -0
  6. package/es/components/atoms/Eyedropper/styled.d.ts +9 -0
  7. package/es/components/atoms/Eyedropper/styled.js +45 -0
  8. package/es/components/atoms/Eyedropper/types.d.ts +5 -0
  9. package/es/components/atoms/Eyedropper/types.js +1 -0
  10. package/es/components/icons/ALignRightIcon.d.ts +3 -0
  11. package/es/components/icons/ALignRightIcon.js +7 -0
  12. package/es/components/icons/AlignCenterIcon.d.ts +3 -0
  13. package/es/components/icons/AlignCenterIcon.js +7 -0
  14. package/es/components/icons/AlignJustifyIcon.d.ts +3 -0
  15. package/es/components/icons/AlignJustifyIcon.js +7 -0
  16. package/es/components/icons/AlignLeftIcon.d.ts +3 -0
  17. package/es/components/icons/AlignLeftIcon.js +7 -0
  18. package/es/components/icons/ArrowDropDownIcon.d.ts +3 -0
  19. package/es/components/icons/ArrowDropDownIcon.js +7 -0
  20. package/es/components/icons/ChevronRightIcon.d.ts +3 -0
  21. package/es/components/icons/ChevronRightIcon.js +7 -0
  22. package/es/components/icons/ColorizeIcon.d.ts +3 -0
  23. package/es/components/icons/ColorizeIcon.js +7 -0
  24. package/es/components/icons/LazyIcon/LazyIcon.d.ts +9 -0
  25. package/es/components/icons/LazyIcon/LazyIcon.js +9 -0
  26. package/es/components/icons/LinkOffIcon.d.ts +3 -0
  27. package/es/components/icons/LinkOffIcon.js +7 -0
  28. package/es/components/icons/MinusIcon.d.ts +3 -0
  29. package/es/components/icons/MinusIcon.js +7 -0
  30. package/es/components/icons/index.d.ts +9 -0
  31. package/es/components/icons/index.js +9 -0
  32. package/es/components/index.scss +1 -0
  33. package/es/components/molecules/EmojiCollections/CommonCollection/index.js +2 -2
  34. package/es/components/molecules/EmojiCollections/types.d.ts +1 -0
  35. package/es/components/molecules/EmojiPopover/EmojiPopover.d.ts +2 -0
  36. package/es/components/molecules/EmojiPopover/EmojiPopover.js +10 -6
  37. package/es/components/molecules/EmojiPopover/styled.js +1 -1
  38. package/es/components/molecules/EyedropperButton/EyedropperButton.d.ts +11 -0
  39. package/es/components/molecules/EyedropperButton/EyedropperButton.js +34 -0
  40. package/es/components/molecules/EyedropperButton/index.d.ts +0 -0
  41. package/es/components/molecules/EyedropperButton/index.js +1 -0
  42. package/es/components/molecules/EyedropperButton/styled.d.ts +7 -0
  43. package/es/components/molecules/EyedropperButton/styled.js +23 -0
  44. package/es/components/molecules/FontSizeInput/FontSizeInput.d.ts +3 -0
  45. package/es/components/molecules/FontSizeInput/FontSizeInput.js +134 -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 +21 -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 +39 -0
  56. package/es/components/molecules/FontSizeInput/types.d.ts +23 -0
  57. package/es/components/molecules/FontSizeInput/types.js +1 -0
  58. package/es/components/molecules/FontSizeInput/utils.d.ts +7 -0
  59. package/es/components/molecules/FontSizeInput/utils.js +9 -0
  60. package/es/components/molecules/SearchPopover/SearchPopover.d.ts +2 -1
  61. package/es/components/molecules/SearchPopover/SearchPopover.js +3 -3
  62. package/es/components/molecules/SearchPopover/styled.d.ts +12 -1
  63. package/es/components/molecules/SearchPopover/styled.js +1 -2
  64. package/es/components/molecules/SearchPopover/types.d.ts +4 -3
  65. package/es/components/molecules/VirtualizedMenu/VirtualizedMenu.d.ts +1 -0
  66. package/es/components/molecules/VirtualizedMenu/components/Item/Item.js +6 -8
  67. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.d.ts +10 -10
  68. package/es/components/molecules/VirtualizedMenu/components/MenuInline/MenuInline.js +49 -289
  69. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/index.d.ts +9 -0
  70. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/index.js +5 -0
  71. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useFocusManagement.d.ts +23 -0
  72. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useFocusManagement.js +81 -0
  73. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useItemInteraction.d.ts +24 -0
  74. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useItemInteraction.js +32 -0
  75. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useKeyboardNavigation.d.ts +26 -0
  76. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useKeyboardNavigation.js +93 -0
  77. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useTreeState.d.ts +24 -0
  78. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useTreeState.js +94 -0
  79. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useVisibleItems.d.ts +7 -0
  80. package/es/components/molecules/VirtualizedMenu/components/MenuInline/hooks/useVisibleItems.js +132 -0
  81. package/es/components/molecules/VirtualizedMenu/styled.js +24 -3
  82. package/es/components/molecules/VirtualizedMenu/types.d.ts +2 -0
  83. package/es/components/molecules/VirtualizedMenu/utils.d.ts +2 -0
  84. package/es/components/molecules/VirtualizedMenu/utils.js +2 -0
  85. package/es/components/molecules/index.d.ts +1 -0
  86. package/es/components/molecules/index.js +1 -0
  87. package/es/components/molecules/index.scss +1 -0
  88. package/es/components/organism/TextEditor/TextEditor.d.ts +10 -0
  89. package/es/components/organism/TextEditor/TextEditor.js +403 -0
  90. package/es/components/organism/TextEditor/__mocks__/text-block.settings.json +320 -0
  91. package/es/components/organism/TextEditor/__mocks__/text-contennt.d.ts +1 -0
  92. package/es/components/organism/TextEditor/__mocks__/text-contennt.js +47 -0
  93. package/es/components/organism/TextEditor/constants.d.ts +196 -0
  94. package/es/components/organism/TextEditor/constants.js +398 -0
  95. package/es/components/organism/TextEditor/extensions/BackgroundColor.d.ts +25 -0
  96. package/es/components/organism/TextEditor/extensions/BackgroundColor.js +43 -0
  97. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.d.ts +18 -0
  98. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu-plugin.js +81 -0
  99. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.d.ts +15 -0
  100. package/es/components/organism/TextEditor/extensions/BubbleMenu/bubble-menu.js +35 -0
  101. package/es/components/organism/TextEditor/extensions/BubbleMenu/index.d.ts +2 -0
  102. package/es/components/organism/TextEditor/extensions/BubbleMenu/index.js +2 -0
  103. package/es/components/organism/TextEditor/extensions/ClearFormatting.d.ts +16 -0
  104. package/es/components/organism/TextEditor/extensions/ClearFormatting.js +30 -0
  105. package/es/components/organism/TextEditor/extensions/Color.d.ts +6 -0
  106. package/es/components/organism/TextEditor/extensions/Color.js +34 -0
  107. package/es/components/organism/TextEditor/extensions/Emoji.d.ts +57 -0
  108. package/es/components/organism/TextEditor/extensions/Emoji.js +184 -0
  109. package/es/components/organism/TextEditor/extensions/FontFamily.d.ts +6 -0
  110. package/es/components/organism/TextEditor/extensions/FontFamily.js +36 -0
  111. package/es/components/organism/TextEditor/extensions/FontSize.d.ts +31 -0
  112. package/es/components/organism/TextEditor/extensions/FontSize.js +46 -0
  113. package/es/components/organism/TextEditor/extensions/FontWeight.d.ts +23 -0
  114. package/es/components/organism/TextEditor/extensions/FontWeight.js +41 -0
  115. package/es/components/organism/TextEditor/extensions/Indent.d.ts +21 -0
  116. package/es/components/organism/TextEditor/extensions/Indent.js +63 -0
  117. package/es/components/organism/TextEditor/extensions/LetterSpacing.d.ts +32 -0
  118. package/es/components/organism/TextEditor/extensions/LetterSpacing.js +48 -0
  119. package/es/components/organism/TextEditor/extensions/LineHeight.d.ts +20 -0
  120. package/es/components/organism/TextEditor/extensions/LineHeight.js +101 -0
  121. package/es/components/organism/TextEditor/extensions/Link.d.ts +22 -0
  122. package/es/components/organism/TextEditor/extensions/Link.js +197 -0
  123. package/es/components/organism/TextEditor/extensions/ListItem.d.ts +10 -0
  124. package/es/components/organism/TextEditor/extensions/ListItem.js +93 -0
  125. package/es/components/organism/TextEditor/extensions/ListItemMarker.d.ts +13 -0
  126. package/es/components/organism/TextEditor/extensions/ListItemMarker.js +174 -0
  127. package/es/components/organism/TextEditor/extensions/OrderedList.d.ts +56 -0
  128. package/es/components/organism/TextEditor/extensions/OrderedList.js +187 -0
  129. package/es/components/organism/TextEditor/extensions/SmartTag.d.ts +33 -0
  130. package/es/components/organism/TextEditor/extensions/SmartTag.js +194 -0
  131. package/es/components/organism/TextEditor/extensions/StyleMemory.d.ts +36 -0
  132. package/es/components/organism/TextEditor/extensions/StyleMemory.js +163 -0
  133. package/es/components/organism/TextEditor/extensions/TextTransform.d.ts +30 -0
  134. package/es/components/organism/TextEditor/extensions/TextTransform.js +36 -0
  135. package/es/components/organism/TextEditor/extensions/UnorderedList.d.ts +55 -0
  136. package/es/components/organism/TextEditor/extensions/UnorderedList.js +176 -0
  137. package/es/components/organism/TextEditor/hooks/index.d.ts +6 -0
  138. package/es/components/organism/TextEditor/hooks/index.js +6 -0
  139. package/es/components/organism/TextEditor/hooks/useColorSet.d.ts +4 -0
  140. package/es/components/organism/TextEditor/hooks/useColorSet.js +29 -0
  141. package/es/components/organism/TextEditor/hooks/useDocumentState.d.ts +18 -0
  142. package/es/components/organism/TextEditor/hooks/useDocumentState.js +42 -0
  143. package/es/components/organism/TextEditor/hooks/useMarkTracking.d.ts +26 -0
  144. package/es/components/organism/TextEditor/hooks/useMarkTracking.js +69 -0
  145. package/es/components/organism/TextEditor/hooks/usePersistence.d.ts +31 -0
  146. package/es/components/organism/TextEditor/hooks/usePersistence.js +169 -0
  147. package/es/components/organism/TextEditor/hooks/useStyleMemory.d.ts +6 -0
  148. package/es/components/organism/TextEditor/hooks/useStyleMemory.js +42 -0
  149. package/es/components/organism/TextEditor/hooks/useStylePresets.d.ts +34 -0
  150. package/es/components/organism/TextEditor/hooks/useStylePresets.js +83 -0
  151. package/es/components/organism/TextEditor/index.d.ts +18 -0
  152. package/es/components/organism/TextEditor/index.js +8 -0
  153. package/es/components/organism/TextEditor/index.scss +65 -0
  154. package/es/components/organism/TextEditor/provider.d.ts +15 -0
  155. package/es/components/organism/TextEditor/provider.js +36 -0
  156. package/es/components/organism/TextEditor/store.d.ts +20 -0
  157. package/es/components/organism/TextEditor/store.js +40 -0
  158. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/froala-legacy-format.settings.json +95 -0
  159. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/shared.d.ts +111 -0
  160. package/es/components/organism/TextEditor/stories/WithOldDynAndLink/shared.js +82 -0
  161. package/es/components/organism/TextEditor/stories/shared.d.ts +64 -0
  162. package/es/components/organism/TextEditor/stories/shared.js +57 -0
  163. package/es/components/organism/TextEditor/styled.d.ts +9 -0
  164. package/es/components/organism/TextEditor/styled.js +61 -0
  165. package/es/components/organism/TextEditor/types.d.ts +324 -0
  166. package/es/components/organism/TextEditor/types.js +6 -0
  167. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.d.ts +3 -0
  168. package/es/components/organism/TextEditor/ui/BubbleMenu/BubbleMenu.js +114 -0
  169. package/es/components/organism/TextEditor/ui/BubbleMenu/index.d.ts +1 -0
  170. package/es/components/organism/TextEditor/ui/BubbleMenu/index.js +1 -0
  171. package/es/components/organism/TextEditor/ui/Button/Button.d.ts +9 -0
  172. package/es/components/organism/TextEditor/ui/Button/Button.js +35 -0
  173. package/es/components/organism/TextEditor/ui/Button/index.d.ts +2 -0
  174. package/es/components/organism/TextEditor/ui/Button/index.js +1 -0
  175. package/es/components/organism/TextEditor/ui/Button/types.d.ts +10 -0
  176. package/es/components/organism/TextEditor/ui/Button/types.js +1 -0
  177. package/es/components/organism/TextEditor/ui/ColorPicker/ColorPicker.d.ts +39 -0
  178. package/es/components/organism/TextEditor/ui/ColorPicker/ColorPicker.js +131 -0
  179. package/es/components/organism/TextEditor/ui/ColorPicker/index.d.ts +1 -0
  180. package/es/components/organism/TextEditor/ui/ColorPicker/index.js +1 -0
  181. package/es/components/organism/TextEditor/ui/DropdownButton/DropdownButton.d.ts +17 -0
  182. package/es/components/organism/TextEditor/ui/DropdownButton/DropdownButton.js +51 -0
  183. package/es/components/organism/TextEditor/ui/DropdownButton/index.d.ts +1 -0
  184. package/es/components/organism/TextEditor/ui/DropdownButton/index.js +1 -0
  185. package/es/components/organism/TextEditor/ui/Emoji/EmojiList.d.ts +11 -0
  186. package/es/components/organism/TextEditor/ui/Emoji/EmojiList.js +66 -0
  187. package/es/components/organism/TextEditor/ui/Emoji/index.d.ts +2 -0
  188. package/es/components/organism/TextEditor/ui/Emoji/index.js +2 -0
  189. package/es/components/organism/TextEditor/ui/Emoji/suggestion.d.ts +4 -0
  190. package/es/components/organism/TextEditor/ui/Emoji/suggestion.js +71 -0
  191. package/es/components/organism/TextEditor/ui/FontPopover/FontItem.d.ts +2 -0
  192. package/es/components/organism/TextEditor/ui/FontPopover/FontItem.js +27 -0
  193. package/es/components/organism/TextEditor/ui/FontPopover/FontPopover.d.ts +16 -0
  194. package/es/components/organism/TextEditor/ui/FontPopover/FontPopover.js +102 -0
  195. package/es/components/organism/TextEditor/ui/FontPopover/styled.d.ts +2 -0
  196. package/es/components/organism/TextEditor/ui/FontPopover/styled.js +36 -0
  197. package/es/components/organism/TextEditor/ui/FontPopover/types.d.ts +35 -0
  198. package/es/components/organism/TextEditor/ui/FontPopover/types.js +1 -0
  199. package/es/components/organism/TextEditor/ui/LinkInsertForm/LinkInsertForm.d.ts +16 -0
  200. package/es/components/organism/TextEditor/ui/LinkInsertForm/LinkInsertForm.js +61 -0
  201. package/es/components/organism/TextEditor/ui/LinkInsertForm/index.d.ts +2 -0
  202. package/es/components/organism/TextEditor/ui/LinkInsertForm/index.js +1 -0
  203. package/es/components/organism/TextEditor/ui/LinkPopover/LinkPopover.d.ts +9 -0
  204. package/es/components/organism/TextEditor/ui/LinkPopover/LinkPopover.js +126 -0
  205. package/es/components/organism/TextEditor/ui/LinkPopover/index.d.ts +2 -0
  206. package/es/components/organism/TextEditor/ui/LinkPopover/index.js +1 -0
  207. package/es/components/organism/TextEditor/ui/Popover/Popover.d.ts +6 -0
  208. package/es/components/organism/TextEditor/ui/Popover/Popover.js +9 -0
  209. package/es/components/organism/TextEditor/ui/Popover/index.d.ts +1 -0
  210. package/es/components/organism/TextEditor/ui/Popover/index.js +1 -0
  211. package/es/components/organism/TextEditor/ui/Select/Select.d.ts +4 -0
  212. package/es/components/organism/TextEditor/ui/Select/Select.js +7 -0
  213. package/es/components/organism/TextEditor/ui/Select/index.d.ts +1 -0
  214. package/es/components/organism/TextEditor/ui/Select/index.js +1 -0
  215. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/SplitButtonDropdown.d.ts +2 -0
  216. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/SplitButtonDropdown.js +44 -0
  217. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/index.d.ts +1 -0
  218. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/index.js +1 -0
  219. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/styled.d.ts +2 -0
  220. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/styled.js +58 -0
  221. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/types.d.ts +19 -0
  222. package/es/components/organism/TextEditor/ui/SplitButtonDropdown/types.js +1 -0
  223. package/es/components/organism/TextEditor/ui/TextAlignSelect/TextAlignSelect.d.ts +30 -0
  224. package/es/components/organism/TextEditor/ui/TextAlignSelect/TextAlignSelect.js +75 -0
  225. package/es/components/organism/TextEditor/ui/TextAlignSelect/index.d.ts +1 -0
  226. package/es/components/organism/TextEditor/ui/TextAlignSelect/index.js +1 -0
  227. package/es/components/organism/TextEditor/ui/Toolbar/FormattingToolbar.d.ts +19 -0
  228. package/es/components/organism/TextEditor/ui/Toolbar/FormattingToolbar.js +85 -0
  229. package/es/components/organism/TextEditor/ui/Toolbar/LinkPreviewToolbar.d.ts +10 -0
  230. package/es/components/organism/TextEditor/ui/Toolbar/LinkPreviewToolbar.js +39 -0
  231. package/es/components/organism/TextEditor/ui/Toolbar/actions/BoldAction.d.ts +6 -0
  232. package/es/components/organism/TextEditor/ui/Toolbar/actions/BoldAction.js +19 -0
  233. package/es/components/organism/TextEditor/ui/Toolbar/actions/BulletListAction.d.ts +6 -0
  234. package/es/components/organism/TextEditor/ui/Toolbar/actions/BulletListAction.js +93 -0
  235. package/es/components/organism/TextEditor/ui/Toolbar/actions/ClearFormattingAction.d.ts +5 -0
  236. package/es/components/organism/TextEditor/ui/Toolbar/actions/ClearFormattingAction.js +20 -0
  237. package/es/components/organism/TextEditor/ui/Toolbar/actions/EmojiAction.d.ts +4 -0
  238. package/es/components/organism/TextEditor/ui/Toolbar/actions/EmojiAction.js +32 -0
  239. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.d.ts +19 -0
  240. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontFamilyAction.js +41 -0
  241. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontSizeAction.d.ts +8 -0
  242. package/es/components/organism/TextEditor/ui/Toolbar/actions/FontSizeAction.js +51 -0
  243. package/es/components/organism/TextEditor/ui/Toolbar/actions/HistoryAction.d.ts +5 -0
  244. package/es/components/organism/TextEditor/ui/Toolbar/actions/HistoryAction.js +21 -0
  245. package/es/components/organism/TextEditor/ui/Toolbar/actions/IndentAction.d.ts +5 -0
  246. package/es/components/organism/TextEditor/ui/Toolbar/actions/IndentAction.js +17 -0
  247. package/es/components/organism/TextEditor/ui/Toolbar/actions/ItalicAction.d.ts +5 -0
  248. package/es/components/organism/TextEditor/ui/Toolbar/actions/ItalicAction.js +18 -0
  249. package/es/components/organism/TextEditor/ui/Toolbar/actions/LetterSpacing.d.ts +5 -0
  250. package/es/components/organism/TextEditor/ui/Toolbar/actions/LetterSpacing.js +28 -0
  251. package/es/components/organism/TextEditor/ui/Toolbar/actions/LineSpacingAction.d.ts +10 -0
  252. package/es/components/organism/TextEditor/ui/Toolbar/actions/LineSpacingAction.js +45 -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/StrikeAction.d.ts +5 -0
  262. package/es/components/organism/TextEditor/ui/Toolbar/actions/StrikeAction.js +18 -0
  263. package/es/components/organism/TextEditor/ui/Toolbar/actions/SubscriptAction.d.ts +5 -0
  264. package/es/components/organism/TextEditor/ui/Toolbar/actions/SubscriptAction.js +26 -0
  265. package/es/components/organism/TextEditor/ui/Toolbar/actions/SuperscriptAction.d.ts +5 -0
  266. package/es/components/organism/TextEditor/ui/Toolbar/actions/SuperscriptAction.js +26 -0
  267. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextAlignAction.d.ts +5 -0
  268. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextAlignAction.js +3 -0
  269. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextBackgroundColorAction.d.ts +5 -0
  270. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextBackgroundColorAction.js +29 -0
  271. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextColorAction.d.ts +14 -0
  272. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextColorAction.js +22 -0
  273. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextTransformAction.d.ts +5 -0
  274. package/es/components/organism/TextEditor/ui/Toolbar/actions/TextTransformAction.js +36 -0
  275. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnderlineAction.d.ts +5 -0
  276. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnderlineAction.js +18 -0
  277. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnsetLink.d.ts +7 -0
  278. package/es/components/organism/TextEditor/ui/Toolbar/actions/UnsetLink.js +18 -0
  279. package/es/components/organism/TextEditor/ui/Toolbar/actions/index.d.ts +24 -0
  280. package/es/components/organism/TextEditor/ui/Toolbar/actions/index.js +24 -0
  281. package/es/components/organism/TextEditor/ui/Toolbar/index.d.ts +2 -0
  282. package/es/components/organism/TextEditor/ui/Toolbar/index.js +2 -0
  283. package/es/components/organism/TextEditor/utils/documentState.d.ts +73 -0
  284. package/es/components/organism/TextEditor/utils/documentState.js +149 -0
  285. package/es/components/organism/TextEditor/utils/font.d.ts +74 -0
  286. package/es/components/organism/TextEditor/utils/font.js +147 -0
  287. package/es/components/organism/TextEditor/utils/htmlProcessing.d.ts +87 -0
  288. package/es/components/organism/TextEditor/utils/htmlProcessing.js +460 -0
  289. package/es/components/organism/TextEditor/utils/indent.d.ts +11 -0
  290. package/es/components/organism/TextEditor/utils/indent.js +56 -0
  291. package/es/components/organism/TextEditor/utils/index.d.ts +8 -0
  292. package/es/components/organism/TextEditor/utils/index.js +16 -0
  293. package/es/components/organism/TextEditor/utils/link.d.ts +116 -0
  294. package/es/components/organism/TextEditor/utils/link.js +304 -0
  295. package/es/components/organism/TextEditor/utils/menu.d.ts +134 -0
  296. package/es/components/organism/TextEditor/utils/menu.js +321 -0
  297. package/es/components/organism/TextEditor/utils/selection.d.ts +25 -0
  298. package/es/components/organism/TextEditor/utils/selection.js +58 -0
  299. package/es/components/organism/TextEditor/utils/shared.d.ts +13 -0
  300. package/es/components/organism/TextEditor/utils/shared.js +52 -0
  301. package/es/components/organism/TextEditor/utils/smartTag.d.ts +49 -0
  302. package/es/components/organism/TextEditor/utils/smartTag.js +90 -0
  303. package/es/components/organism/TextEditor/utils/style.d.ts +78 -0
  304. package/es/components/organism/TextEditor/utils/style.js +193 -0
  305. package/es/components/organism/index.d.ts +1 -0
  306. package/es/components/organism/index.js +1 -0
  307. package/es/components/organism/index.scss +1 -0
  308. package/es/constants/index.d.ts +1 -0
  309. package/es/constants/index.js +1 -0
  310. package/es/constants/web.d.ts +8 -0
  311. package/es/constants/web.js +57 -0
  312. package/es/hooks/index.d.ts +4 -0
  313. package/es/hooks/index.js +4 -0
  314. package/es/hooks/useBroadcastedLocalStorage.d.ts +5 -0
  315. package/es/hooks/useBroadcastedLocalStorage.js +71 -0
  316. package/es/hooks/useElementSize.d.ts +7 -0
  317. package/es/hooks/useElementSize.js +56 -0
  318. package/es/hooks/useEyedropper/attach.d.ts +4 -0
  319. package/es/hooks/useEyedropper/attach.js +9 -0
  320. package/es/hooks/useEyedropper/eyedropper.d.ts +69 -0
  321. package/es/hooks/useEyedropper/eyedropper.js +205 -0
  322. package/es/hooks/useEyedropper/index.d.ts +2 -0
  323. package/es/hooks/useEyedropper/index.js +7 -0
  324. package/es/hooks/useEyedropper/support.d.ts +1 -0
  325. package/es/hooks/useEyedropper/support.js +3 -0
  326. package/es/hooks/useEyedropper/types.d.ts +9 -0
  327. package/es/hooks/useEyedropper/types.js +1 -0
  328. package/es/hooks/useEyedropper/useEyedropper.d.ts +8 -0
  329. package/es/hooks/useEyedropper/useEyedropper.js +50 -0
  330. package/es/hooks/useEyedropper/utils.d.ts +11 -0
  331. package/es/hooks/useEyedropper/utils.js +17 -0
  332. package/es/hooks/useIsMounted.d.ts +1 -0
  333. package/es/hooks/useIsMounted.js +11 -0
  334. package/es/index.d.ts +1 -1
  335. package/es/index.js +1 -1
  336. package/es/locales/i18n.d.ts +1 -1
  337. package/es/types/index.d.ts +9 -0
  338. package/es/utils/common.d.ts +15 -9
  339. package/es/utils/common.js +62 -24
  340. package/es/utils/index.d.ts +1 -0
  341. package/es/utils/index.js +1 -0
  342. package/es/utils/web.d.ts +80 -0
  343. package/es/utils/web.js +226 -0
  344. package/package.json +26 -17
@@ -0,0 +1,36 @@
1
+ import { THEME } from '@antscorp/antsomi-ui/es/constants';
2
+ import styled from 'styled-components';
3
+ export const PopoverTrigger = styled.div `
4
+ &.font-popover-trigger {
5
+ width: 100px;
6
+ height: 30px;
7
+ display: flex;
8
+ align-items: center;
9
+ padding: 0 7px;
10
+ cursor: pointer;
11
+ overflow: hidden;
12
+ white-space: nowrap;
13
+ text-overflow: ellipsis;
14
+ font-size: ${THEME.token?.fontSize || 12}px;
15
+ border-bottom: 1px solid ${THEME.token?.blue1};
16
+ flex-shrink: 0;
17
+
18
+ &:hover {
19
+ background-color: ${THEME.token?.blue};
20
+ }
21
+ }
22
+ `;
23
+ export const FontGroupTitle = styled.div `
24
+ color: ${THEME.token?.bw8};
25
+ display: flex;
26
+ align-items: center;
27
+ font-size: 11px;
28
+
29
+ &.font-popover-item {
30
+ cursor: default;
31
+
32
+ &:hover {
33
+ background-color: white;
34
+ }
35
+ }
36
+ `;
@@ -0,0 +1,35 @@
1
+ import { FontConfig, FontGroupingFunction, GroupOrderFunction } from '../../types';
2
+ /**
3
+ * Props for FontPopover component
4
+ */
5
+ export type FontPopoverProps = {
6
+ /** Array of available font configurations */
7
+ fonts?: FontConfig[];
8
+ /** Currently selected font and weight */
9
+ value?: {
10
+ font: FontConfig;
11
+ weight: number;
12
+ };
13
+ /** Callback when font selection changes */
14
+ onChange?: (font: FontConfig, weight: number) => void;
15
+ /** Function to group fonts or false to disable grouping */
16
+ fontGrouping?: FontGroupingFunction | false;
17
+ /** Array of group keys or function to define display order. Groups not in this array will appear after ordered groups */
18
+ groupOrder?: string[] | GroupOrderFunction;
19
+ };
20
+ /**
21
+ * Props for FontItem component
22
+ */
23
+ export type FontItemProps = {
24
+ /** Font configuration to display */
25
+ fontConfig: FontConfig;
26
+ /** Currently active font and weight */
27
+ active?: {
28
+ font: FontConfig;
29
+ weight: number;
30
+ };
31
+ /** Callback when font weight is selected */
32
+ onSelectFont?: (fontweight: number) => void;
33
+ /** Callback when popover open state changes */
34
+ onOpenChange?: (open: boolean) => void;
35
+ };
@@ -0,0 +1,16 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import React from 'react';
3
+ import type { LinkFormData } from '../../types';
4
+ export type LinkInsertFormProps = {
5
+ /** TipTap editor instance */
6
+ editor: Editor;
7
+ /** Form mode: insert or edit */
8
+ mode: 'insert' | 'edit';
9
+ /** Initial form data */
10
+ initialData: LinkFormData;
11
+ /** Callback when form is submitted */
12
+ onSubmit: () => void;
13
+ /** Callback when form is cancelled */
14
+ onCancel: () => void;
15
+ };
16
+ export declare const LinkInsertForm: React.FC<LinkInsertFormProps>;
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Checkbox, Flex, Input } from 'antd';
3
+ import { useState, useCallback, useRef, useEffect } from 'react';
4
+ export const LinkInsertForm = props => {
5
+ const { editor, mode, initialData, onSubmit, onCancel } = props;
6
+ const [url, setUrl] = useState(initialData.url);
7
+ const [text, setText] = useState(initialData.text);
8
+ const [openInNewTab, setOpenInNewTab] = useState(initialData.openInNewTab);
9
+ const urlInputRef = useRef(null);
10
+ // Auto-focus the URL input without scrolling
11
+ useEffect(() => {
12
+ urlInputRef.current?.focus({
13
+ preventScroll: true,
14
+ });
15
+ }, []);
16
+ const handleSubmit = useCallback(() => {
17
+ if (!url.trim()) {
18
+ // Don't submit if URL is empty
19
+ return;
20
+ }
21
+ // If text is different from initial, update the content
22
+ if (text !== initialData.text && text.trim()) {
23
+ editor
24
+ .chain()
25
+ .focus()
26
+ .setCustomLink({
27
+ attrs: {
28
+ href: url,
29
+ target: openInNewTab ? '_blank' : null,
30
+ },
31
+ content: text,
32
+ })
33
+ .run();
34
+ }
35
+ else {
36
+ // Just update the link attributes
37
+ editor
38
+ .chain()
39
+ .focus()
40
+ .setCustomLink({
41
+ attrs: {
42
+ href: url,
43
+ target: openInNewTab ? '_blank' : null,
44
+ },
45
+ })
46
+ .run();
47
+ }
48
+ onSubmit();
49
+ }, [editor, url, text, initialData.text, openInNewTab, onSubmit]);
50
+ const handleKeyDown = useCallback((e) => {
51
+ if (e.key === 'Enter' && !e.shiftKey) {
52
+ e.preventDefault();
53
+ handleSubmit();
54
+ }
55
+ else if (e.key === 'Escape') {
56
+ e.preventDefault();
57
+ onCancel();
58
+ }
59
+ }, [handleSubmit, onCancel]);
60
+ return (_jsxs(Flex, { vertical: true, gap: 8, children: [_jsxs(Flex, { gap: 8, vertical: true, children: [_jsx(Input, { ref: urlInputRef, placeholder: "URL", value: url, onChange: e => setUrl(e.target.value), onKeyDown: handleKeyDown }), _jsx(Input, { placeholder: "Text", value: text, onChange: e => setText(e.target.value), onKeyDown: handleKeyDown })] }), _jsx(Checkbox, { checked: openInNewTab, onChange: e => setOpenInNewTab(e.target.checked), children: "Open in new tab" }), _jsxs(Flex, { justify: "flex-end", gap: 8, children: [_jsx(Button, { onClick: onCancel, children: "Cancel" }), _jsx(Button, { type: "primary", onClick: handleSubmit, disabled: !url.trim(), children: mode === 'insert' ? 'Insert' : 'Update' })] })] }));
61
+ };
@@ -0,0 +1,2 @@
1
+ export { LinkInsertForm } from './LinkInsertForm';
2
+ export type { LinkInsertFormProps } from './LinkInsertForm';
@@ -0,0 +1 @@
1
+ export { LinkInsertForm } from './LinkInsertForm';
@@ -0,0 +1,9 @@
1
+ import { Editor } from '@tiptap/react';
2
+ import React from 'react';
3
+ export type LinkPopoverProps = {
4
+ /** TipTap editor instance */
5
+ editor: Editor;
6
+ /** Optional container to append the popover to. Defaults to document.body */
7
+ container?: HTMLElement | (() => HTMLElement);
8
+ };
9
+ export declare const LinkPopover: React.FC<LinkPopoverProps>;
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { posToDOMRect } from '@tiptap/react';
3
+ import { useEffect, useRef, useCallback, useLayoutEffect } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { computePosition, flip, shift, offset } from '@floating-ui/dom';
6
+ import { useTextEditorStore } from '../../provider';
7
+ import { LinkInsertForm } from '../LinkInsertForm';
8
+ import { COMPONENT_CLS } from '../../constants';
9
+ const updatePosition = (editor, element) => {
10
+ const virtualElement = {
11
+ getBoundingClientRect: () => posToDOMRect(editor.view, editor.state.selection.from, editor.state.selection.to),
12
+ };
13
+ computePosition(virtualElement, element, {
14
+ placement: 'bottom-start',
15
+ strategy: 'fixed',
16
+ middleware: [offset(10), shift(), flip()],
17
+ }).then(({ x, y, strategy }) => {
18
+ element.style.position = strategy;
19
+ element.style.left = `${x}px`;
20
+ element.style.top = `${y}px`;
21
+ });
22
+ };
23
+ export const LinkPopover = props => {
24
+ const { editor, container } = props;
25
+ const popoverRef = useRef(null);
26
+ const savedSelectionRef = useRef(null);
27
+ // Get link form state and actions from store
28
+ const linkFormState = useTextEditorStore(state => state.linkFormState);
29
+ const hideLinkForm = useTextEditorStore(state => state.hideLinkForm);
30
+ const isVisible = linkFormState?.isVisible ?? false;
31
+ // Save initial selection when form becomes visible
32
+ useEffect(() => {
33
+ if (isVisible) {
34
+ savedSelectionRef.current = {
35
+ from: editor.state.selection.from,
36
+ to: editor.state.selection.to,
37
+ };
38
+ }
39
+ else {
40
+ savedSelectionRef.current = null;
41
+ }
42
+ }, [editor, isVisible]);
43
+ // Update position whenever editor state changes or form becomes visible
44
+ useLayoutEffect(() => {
45
+ if (!isVisible || !popoverRef.current)
46
+ return;
47
+ updatePosition(editor, popoverRef.current);
48
+ }, [editor, isVisible, linkFormState]);
49
+ // Effect 1: Close on selection change (only if selection actually changed from saved)
50
+ useEffect(() => {
51
+ if (!isVisible || !savedSelectionRef.current)
52
+ return;
53
+ const handleSelectionUpdate = () => {
54
+ const currentSelection = editor.state.selection;
55
+ const savedSelection = savedSelectionRef.current;
56
+ // Only close if selection moved to a different position
57
+ if (savedSelection &&
58
+ (currentSelection.from !== savedSelection.from || currentSelection.to !== savedSelection.to)) {
59
+ hideLinkForm();
60
+ // Editor already has focus when selection changes, no need to refocus
61
+ }
62
+ };
63
+ editor.on('selectionUpdate', handleSelectionUpdate);
64
+ return () => {
65
+ editor.off('selectionUpdate', handleSelectionUpdate);
66
+ };
67
+ }, [editor, isVisible, hideLinkForm]);
68
+ // Effect 2: Close on click outside
69
+ useEffect(() => {
70
+ if (!isVisible)
71
+ return;
72
+ const handleClickOutside = (event) => {
73
+ if (popoverRef.current && !popoverRef.current.contains(event.target)) {
74
+ hideLinkForm();
75
+ // Check if click was on the editor
76
+ const editorElement = editor.view.dom;
77
+ const clickedOnEditor = editorElement.contains(event.target);
78
+ // If not clicked on editor, focus it after closing
79
+ if (!clickedOnEditor) {
80
+ setTimeout(() => {
81
+ editor.commands.focus();
82
+ }, 0);
83
+ }
84
+ // If clicked on editor, it will auto-focus naturally
85
+ }
86
+ };
87
+ // Use mousedown to catch the event before it propagates
88
+ document.addEventListener('mousedown', handleClickOutside);
89
+ return () => {
90
+ document.removeEventListener('mousedown', handleClickOutside);
91
+ };
92
+ }, [editor, isVisible, hideLinkForm]);
93
+ // Handle form submission
94
+ const handleSubmit = useCallback(() => {
95
+ hideLinkForm();
96
+ // Focus back to editor after closing form
97
+ setTimeout(() => {
98
+ editor.commands.focus();
99
+ }, 0);
100
+ }, [editor, hideLinkForm]);
101
+ // Handle form cancellation (also handles Escape key via LinkInsertForm)
102
+ const handleCancel = useCallback(() => {
103
+ hideLinkForm();
104
+ // Focus back to editor after closing form
105
+ setTimeout(() => {
106
+ editor.commands.focus();
107
+ }, 0);
108
+ }, [editor, hideLinkForm]);
109
+ // Don't render if not visible or no form state
110
+ if (!isVisible || !linkFormState) {
111
+ return null;
112
+ }
113
+ const popoverElement = (_jsx("div", { ref: popoverRef, className: `${COMPONENT_CLS}-link-popover`, style: {
114
+ position: 'absolute',
115
+ zIndex: 1000,
116
+ background: '#fff',
117
+ border: '1px solid #d9d9d9',
118
+ borderRadius: '8px',
119
+ padding: '16px',
120
+ boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
121
+ minWidth: '300px',
122
+ }, children: _jsx(LinkInsertForm, { editor: editor, mode: linkFormState.mode, initialData: linkFormState.data, onSubmit: handleSubmit, onCancel: handleCancel }) }));
123
+ // Use portal to render into container or document.body
124
+ const containerElement = (typeof container === 'function' ? container() : container) || document.body;
125
+ return createPortal(popoverElement, containerElement);
126
+ };
@@ -0,0 +1,2 @@
1
+ export { LinkPopover } from './LinkPopover';
2
+ export type { LinkPopoverProps } from './LinkPopover';
@@ -0,0 +1 @@
1
+ export { LinkPopover } from './LinkPopover';
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { type PopoverProps } from 'antd';
3
+ export interface TextEditorPopoverProps extends PopoverProps {
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const TextEditorPopover: ({ children, ...restProps }: TextEditorPopoverProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Popover } from 'antd';
3
+ import { useTextEditorStore } from '../../provider';
4
+ import { useCallback } from 'react';
5
+ export const TextEditorPopover = ({ children, ...restProps }) => {
6
+ const bubbleMenuContainer = useTextEditorStore(state => state.bubbleMenuContainer);
7
+ const getPopupContainer = useCallback(() => bubbleMenuContainer || document.body, [bubbleMenuContainer]);
8
+ return (_jsx(Popover, { destroyTooltipOnHide: true, trigger: ['click'], ...restProps, getPopupContainer: getPopupContainer, children: children }));
9
+ };
@@ -0,0 +1 @@
1
+ export * from './Popover';
@@ -0,0 +1 @@
1
+ export * from './Popover';
@@ -0,0 +1,4 @@
1
+ import { SelectProps } from 'antd';
2
+ export interface TextEditorSelectProps extends SelectProps {
3
+ }
4
+ export declare const TextEditorSelect: (props: SelectProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Select } from 'antd';
3
+ import { useTextEditorStore } from '../../provider';
4
+ export const TextEditorSelect = (props) => {
5
+ const bubbleMenuContainer = useTextEditorStore(state => state.bubbleMenuContainer);
6
+ return _jsx(Select, { ...props, getPopupContainer: () => bubbleMenuContainer || document.body });
7
+ };
@@ -0,0 +1 @@
1
+ export * from './Select';
@@ -0,0 +1 @@
1
+ export * from './Select';
@@ -0,0 +1,2 @@
1
+ import { SplitButtonDropdownProps } from './types';
2
+ export declare const SplitButtonDropdown: (props: SplitButtonDropdownProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ArrowDropDownIcon } from '@antscorp/antsomi-ui/es/components/icons';
3
+ import { StyledDropdownButton } from './styled';
4
+ import clsx from 'clsx';
5
+ import { useState } from 'react';
6
+ import { Tooltip } from 'antd';
7
+ export const SplitButtonDropdown = (props) => {
8
+ const { children, disabled, value, className = '', tooltipProps, options = [], onClickOption, onClick, } = props;
9
+ const selectedOpt = value ? options.filter(opt => opt.value === value) : [];
10
+ const isSelected = selectedOpt.length > 0;
11
+ const [isOpen, setIsOpen] = useState(false);
12
+ const handleOpenChange = (visible) => {
13
+ if (disabled)
14
+ return;
15
+ setIsOpen(visible);
16
+ };
17
+ return (_jsx(StyledDropdownButton, { disabled: disabled, trigger: ['click'], className: clsx(className, {
18
+ 'is-active': isSelected,
19
+ 'is-open': isOpen,
20
+ }), open: isOpen, onOpenChange: handleOpenChange, placement: "bottomLeft", menu: {
21
+ style: {
22
+ maxHeight: 240,
23
+ overflow: 'auto',
24
+ },
25
+ items: options.map(opt => ({
26
+ key: opt.value,
27
+ label: opt.label,
28
+ disabled: opt.disabled,
29
+ })),
30
+ selectedKeys: selectedOpt.map(opt => opt.value),
31
+ onClick: e => {
32
+ const { key } = e;
33
+ onClickOption?.(key);
34
+ },
35
+ }, onClick: e => {
36
+ onClick?.(e, isSelected);
37
+ }, icon: _jsx(ArrowDropDownIcon, { size: 16 }), type: "text", buttonsRender: buttons => {
38
+ const [fistButton, ...restButton] = buttons;
39
+ return [
40
+ _jsx(Tooltip, { placement: "top", mouseEnterDelay: 0.4, ...tooltipProps, open: disabled ? false : undefined, children: fistButton }),
41
+ ...restButton,
42
+ ];
43
+ }, children: children }));
44
+ };
@@ -0,0 +1 @@
1
+ export { SplitButtonDropdown } from './SplitButtonDropdown';
@@ -0,0 +1 @@
1
+ export { SplitButtonDropdown } from './SplitButtonDropdown';
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const StyledDropdownButton: import("styled-components").StyledComponent<import("react").FC<import("antd/es/dropdown").DropdownButtonProps>, any, {}, never>;
@@ -0,0 +1,58 @@
1
+ import { THEME } from '@antscorp/antsomi-ui/es/constants';
2
+ import { Dropdown } from 'antd';
3
+ import styled from 'styled-components';
4
+ export const StyledDropdownButton = styled(Dropdown.Button) `
5
+ &.antsomi-dropdown-button {
6
+ width: fit-content;
7
+
8
+ .antsomi-btn {
9
+ border-radius: 4px;
10
+ }
11
+
12
+ .antsomi-btn-compact-item:not(.antsomi-btn-compact-last-item).antsomi-btn-compact-first-item {
13
+ width: 24px;
14
+ height: 24px;
15
+ border-start-end-radius: 0;
16
+ border-end-end-radius: 0;
17
+ padding: 0;
18
+ color: ${THEME.token?.bw8};
19
+
20
+ &:hover:not(:disabled, .is-active) {
21
+ background-color: #ebebeb;
22
+ }
23
+ }
24
+
25
+ .antsomi-btn-compact-item:not(.antsomi-btn-compact-first-item).antsomi-btn-compact-last-item {
26
+ width: 16px;
27
+ height: 24px;
28
+ border-start-start-radius: 0;
29
+ border-end-start-radius: 0;
30
+ padding: 0;
31
+
32
+ &:hover:not(:disabled),
33
+ &.antsomi-dropdown-open:not(:disabled) {
34
+ background-color: #ebebeb;
35
+ }
36
+ }
37
+
38
+ &.is-active {
39
+ .antsomi-btn-compact-item:not(.antsomi-btn-compact-last-item).antsomi-btn-compact-first-item {
40
+ :not(:disabled) {
41
+ color: ${THEME.token?.colorPrimary};
42
+ background-color: #e0ebf7;
43
+
44
+ &:hover {
45
+ color: ${THEME.token?.colorPrimary};
46
+ background-color: #e0ebf7;
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ &.is-open {
53
+ .antsomi-btn-icon svg {
54
+ transform: rotate(180deg);
55
+ }
56
+ }
57
+ }
58
+ `;
@@ -0,0 +1,19 @@
1
+ /// <reference types="react" />
2
+ export type SplitButtonDropdownProps = {
3
+ disabled?: boolean;
4
+ style?: React.CSSProperties;
5
+ value?: string;
6
+ options?: {
7
+ value: string;
8
+ label: React.ReactNode;
9
+ disabled?: boolean;
10
+ }[];
11
+ className?: string;
12
+ icon?: React.ReactNode;
13
+ children?: React.ReactNode;
14
+ onClickOption?: (key: string) => void;
15
+ onClick?: (e: React.MouseEvent<HTMLElement>, isSelected: boolean) => void;
16
+ tooltipProps?: {
17
+ title?: string;
18
+ };
19
+ };
@@ -0,0 +1,30 @@
1
+ /// <reference types="react" />
2
+ import { Editor } from '@tiptap/core';
3
+ declare const textAlignOptions: readonly [{
4
+ readonly label: string;
5
+ readonly value: string;
6
+ readonly shortcut: string;
7
+ readonly icon: import("react").ForwardRefExoticComponent<import("../../../../icons/types").IconProps & import("react").RefAttributes<SVGSVGElement>>;
8
+ }, {
9
+ readonly label: string;
10
+ readonly value: string;
11
+ readonly shortcut: string;
12
+ readonly icon: import("react").ForwardRefExoticComponent<import("../../../../icons/types").IconProps & import("react").RefAttributes<SVGSVGElement>>;
13
+ }, {
14
+ readonly label: string;
15
+ readonly value: string;
16
+ readonly shortcut: string;
17
+ readonly icon: import("react").ForwardRefExoticComponent<import("../../../../icons/types").IconProps & import("react").RefAttributes<SVGSVGElement>>;
18
+ }, {
19
+ readonly label: string;
20
+ readonly value: string;
21
+ readonly shortcut: string;
22
+ readonly icon: import("react").ForwardRefExoticComponent<import("../../../../icons/types").IconProps & import("react").RefAttributes<SVGSVGElement>>;
23
+ }];
24
+ type AlignType = (typeof textAlignOptions)[number]['value'];
25
+ interface TextAlignSelectProps {
26
+ editor?: Editor;
27
+ onChange?: (value: AlignType) => void;
28
+ }
29
+ export declare const TextAlignSelect: (props: TextAlignSelectProps) => import("react/jsx-runtime").JSX.Element;
30
+ export {};
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { formatHotkey } from '@antscorp/antsomi-ui/es/utils';
3
+ import { Flex } from 'antd';
4
+ import { useMemo, useState } from 'react';
5
+ import { TEXT_EDITOR_CONSTANTS } from '../../constants';
6
+ import { TextEditorPopover } from '../Popover';
7
+ import { TextEditorButton } from '../Button';
8
+ import { ALignRightIcon, AlignCenterIcon, AlignJustifyIcon, AlignLeftIcon, ArrowDropDownIcon, } from '@antscorp/antsomi-ui/es/components/icons';
9
+ import styled from 'styled-components';
10
+ import { useEditorState } from '@tiptap/react';
11
+ const { TEXT_ALIGN } = TEXT_EDITOR_CONSTANTS;
12
+ const textAlignOptions = [
13
+ {
14
+ label: TEXT_ALIGN.OPTIONS.LEFT.LABEL,
15
+ value: TEXT_ALIGN.OPTIONS.LEFT.VALUE,
16
+ shortcut: formatHotkey('Shift+L'),
17
+ icon: AlignLeftIcon,
18
+ },
19
+ {
20
+ label: TEXT_ALIGN.OPTIONS.CENTER.LABEL,
21
+ value: TEXT_ALIGN.OPTIONS.CENTER.VALUE,
22
+ shortcut: formatHotkey('Shift+E'),
23
+ icon: AlignCenterIcon,
24
+ },
25
+ {
26
+ label: TEXT_ALIGN.OPTIONS.RIGHT.LABEL,
27
+ value: TEXT_ALIGN.OPTIONS.RIGHT.VALUE,
28
+ shortcut: formatHotkey('Shift+R'),
29
+ icon: ALignRightIcon,
30
+ },
31
+ {
32
+ label: TEXT_ALIGN.OPTIONS.JUSTIFY.LABEL,
33
+ value: TEXT_ALIGN.OPTIONS.JUSTIFY.VALUE,
34
+ shortcut: formatHotkey('Shift+J'),
35
+ icon: AlignJustifyIcon,
36
+ },
37
+ ];
38
+ const StyledTriggerButton = styled(TextEditorButton) `
39
+ &.antsomi-btn.antsomi-btn-text {
40
+ width: 40px;
41
+ gap: 0;
42
+
43
+ &.is-active {
44
+ background-color: unset;
45
+ }
46
+ }
47
+ `;
48
+ export const TextAlignSelect = (props) => {
49
+ const { editor, onChange } = props;
50
+ const [isOpen, setIsOpen] = useState(false);
51
+ const { currentAlignment } = useEditorState({
52
+ editor: editor,
53
+ selector: ({ editor: editorInstance }) => {
54
+ const alignment = ['left', 'center', 'right', 'justify'].find(alignment => editorInstance?.isActive({ textAlign: alignment }));
55
+ return { currentAlignment: alignment };
56
+ },
57
+ });
58
+ const selectedOption = useMemo(() => textAlignOptions.find(option => option.value === currentAlignment), [currentAlignment]);
59
+ const handleClickOption = (align) => {
60
+ setIsOpen(false);
61
+ onChange?.(align);
62
+ };
63
+ let AlignIconComponent = textAlignOptions[0].icon;
64
+ if (selectedOption) {
65
+ AlignIconComponent = selectedOption.icon;
66
+ }
67
+ return (_jsx(TextEditorPopover, { destroyTooltipOnHide: true, open: isOpen, arrow: false, overlayInnerStyle: { padding: 8 }, content: _jsx(Flex, { gap: 8, children: textAlignOptions.map(option => (_jsx(TextEditorButton, { icon: _jsx(option.icon, { size: 16 }, option.value), onClick: () => handleClickOption(option.value), isActive: currentAlignment === option.value, tooltipProps: {
68
+ title: `${TEXT_ALIGN.TOOLTIP} ${option.label.toLowerCase()} (${option.shortcut})`,
69
+ } }, option.value))) }), trigger: ['click'], placement: "bottomLeft", onOpenChange: setOpen => setIsOpen(setOpen), children: _jsx(StyledTriggerButton, { icon: _jsx(AlignIconComponent, { size: 18 }), isActive: !!currentAlignment, tooltipProps: { title: TEXT_ALIGN.TITLE }, children: _jsx(ArrowDropDownIcon, { style: {
70
+ flexShrink: 0,
71
+ ...(isOpen && {
72
+ transform: 'rotate(180deg)',
73
+ }),
74
+ }, size: 16 }) }) }));
75
+ };
@@ -0,0 +1 @@
1
+ export { TextAlignSelect } from './TextAlignSelect';
@@ -0,0 +1 @@
1
+ export { TextAlignSelect } from './TextAlignSelect';
@@ -0,0 +1,19 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import React from 'react';
3
+ import { Config, FontConfig, TextStyle } from '../../types';
4
+ export type FormattingToolbarProps = {
5
+ editor: Editor;
6
+ config?: Config;
7
+ defaultTextStyle?: TextStyle;
8
+ smartTagHandler?: {
9
+ onUpsert?: (event: React.MouseEvent) => void;
10
+ };
11
+ linkHanlder?: {
12
+ onUpsert?: () => void;
13
+ };
14
+ onChangeFont?: (args: {
15
+ font: FontConfig;
16
+ weight: number;
17
+ }) => void;
18
+ };
19
+ export declare const FormattingToolbar: (props: FormattingToolbarProps) => import("react/jsx-runtime").JSX.Element | null;