@forgedevstack/ink 1.1.9 → 1.2.0

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 (247) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/dist/common-components/Box/Box.cjs +1 -1
  3. package/dist/common-components/Box/Box.js +7 -6
  4. package/dist/common-components/Button/Button.cjs +1 -1
  5. package/dist/common-components/Button/Button.js +9 -8
  6. package/dist/common-components/Canvas/Canvas.cjs +1 -1
  7. package/dist/common-components/Canvas/Canvas.js +3 -2
  8. package/dist/common-components/ContextMenu/ContextMenu.cjs +1 -1
  9. package/dist/common-components/ContextMenu/ContextMenu.js +3 -2
  10. package/dist/common-components/Field/Field.cjs +1 -1
  11. package/dist/common-components/Field/Field.js +11 -10
  12. package/dist/common-components/icons/GripIcon.cjs +1 -1
  13. package/dist/common-components/icons/GripIcon.js +3 -2
  14. package/dist/components/InkEditor/InkEditor.cjs +1 -1
  15. package/dist/components/InkEditor/InkEditor.d.ts.map +1 -1
  16. package/dist/components/InkEditor/InkEditor.js +1308 -1028
  17. package/dist/components/InkEditor/components/AiPanel/AiPanel.cjs +1 -1
  18. package/dist/components/InkEditor/components/AiPanel/AiPanel.js +13 -12
  19. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.cjs +1 -0
  20. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.const.cjs +1 -0
  21. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.const.d.ts +20 -0
  22. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.const.d.ts.map +1 -0
  23. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.const.js +25 -0
  24. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.d.ts +4 -0
  25. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.d.ts.map +1 -0
  26. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.js +61 -0
  27. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.types.d.ts +11 -0
  28. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.types.d.ts.map +1 -0
  29. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.cjs +1 -0
  30. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.d.ts +19 -0
  31. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.d.ts.map +1 -0
  32. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.js +30 -0
  33. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.test.d.ts +2 -0
  34. package/dist/components/InkEditor/components/AiSelectionBubble/AiSelectionBubble.utils.test.d.ts.map +1 -0
  35. package/dist/components/InkEditor/components/AiSelectionBubble/index.d.ts +4 -0
  36. package/dist/components/InkEditor/components/AiSelectionBubble/index.d.ts.map +1 -0
  37. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.cjs +1 -1
  38. package/dist/components/InkEditor/components/BlockHandles/BlockHandles.js +7 -6
  39. package/dist/components/InkEditor/components/CommentsPanel/CommentsPanel.cjs +1 -1
  40. package/dist/components/InkEditor/components/CommentsPanel/CommentsPanel.d.ts +2 -0
  41. package/dist/components/InkEditor/components/CommentsPanel/CommentsPanel.d.ts.map +1 -1
  42. package/dist/components/InkEditor/components/CommentsPanel/CommentsPanel.js +16 -15
  43. package/dist/components/InkEditor/components/ExcelSheetPanel/ExcelSheetPanel.cjs +1 -1
  44. package/dist/components/InkEditor/components/ExcelSheetPanel/ExcelSheetPanel.d.ts.map +1 -1
  45. package/dist/components/InkEditor/components/ExcelSheetPanel/ExcelSheetPanel.js +84 -97
  46. package/dist/components/InkEditor/components/FindReplace/FindReplace.cjs +1 -1
  47. package/dist/components/InkEditor/components/FindReplace/FindReplace.js +21 -20
  48. package/dist/components/InkEditor/components/GraphEditModal/GraphEditModal.cjs +1 -1
  49. package/dist/components/InkEditor/components/GraphEditModal/GraphEditModal.js +17 -16
  50. package/dist/components/InkEditor/components/GraphPicker/GraphPicker.cjs +1 -1
  51. package/dist/components/InkEditor/components/GraphPicker/GraphPicker.js +3 -2
  52. package/dist/components/InkEditor/components/HtmlSourcePanel/HtmlSourcePanel.cjs +1 -1
  53. package/dist/components/InkEditor/components/HtmlSourcePanel/HtmlSourcePanel.js +7 -6
  54. package/dist/components/InkEditor/components/ImageFrame/ImageFrame.cjs +1 -0
  55. package/dist/components/InkEditor/components/ImageFrame/ImageFrame.d.ts +8 -0
  56. package/dist/components/InkEditor/components/ImageFrame/ImageFrame.d.ts.map +1 -0
  57. package/dist/components/InkEditor/components/ImageFrame/ImageFrame.js +54 -0
  58. package/dist/components/InkEditor/components/ImageFrame/index.d.ts +3 -0
  59. package/dist/components/InkEditor/components/ImageFrame/index.d.ts.map +1 -0
  60. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.cjs +1 -1
  61. package/dist/components/InkEditor/components/InlineToolbar/InlineToolbar.js +11 -10
  62. package/dist/components/InkEditor/components/MentionMenu/MentionMenu.cjs +1 -0
  63. package/dist/components/InkEditor/components/MentionMenu/MentionMenu.d.ts +16 -0
  64. package/dist/components/InkEditor/components/MentionMenu/MentionMenu.d.ts.map +1 -0
  65. package/dist/components/InkEditor/components/MentionMenu/MentionMenu.js +21 -0
  66. package/dist/components/InkEditor/components/MentionMenu/index.d.ts +3 -0
  67. package/dist/components/InkEditor/components/MentionMenu/index.d.ts.map +1 -0
  68. package/dist/components/InkEditor/components/OutlineRail/OutlineRail.cjs +1 -1
  69. package/dist/components/InkEditor/components/OutlineRail/OutlineRail.js +11 -10
  70. package/dist/components/InkEditor/components/PresenceStack/PresenceStack.cjs +1 -1
  71. package/dist/components/InkEditor/components/PresenceStack/PresenceStack.js +3 -2
  72. package/dist/components/InkEditor/components/RemoteCursors/RemoteCursors.cjs +1 -1
  73. package/dist/components/InkEditor/components/RemoteCursors/RemoteCursors.js +6 -5
  74. package/dist/components/InkEditor/components/SignPad/SignPad.cjs +1 -1
  75. package/dist/components/InkEditor/components/SignPad/SignPad.js +7 -6
  76. package/dist/components/InkEditor/components/SlashMenu/SlashMenu.cjs +1 -1
  77. package/dist/components/InkEditor/components/SlashMenu/SlashMenu.js +7 -6
  78. package/dist/components/InkEditor/components/TableSizePicker/TableSizePicker.cjs +1 -1
  79. package/dist/components/InkEditor/components/TableSizePicker/TableSizePicker.const.cjs +1 -1
  80. package/dist/components/InkEditor/components/TableSizePicker/TableSizePicker.const.js +8 -7
  81. package/dist/components/InkEditor/components/TableSizePicker/TableSizePicker.js +38 -38
  82. package/dist/components/InkEditor/components/ThemePicker/ThemePicker.cjs +1 -1
  83. package/dist/components/InkEditor/components/ThemePicker/ThemePicker.d.ts.map +1 -1
  84. package/dist/components/InkEditor/components/ThemePicker/ThemePicker.js +56 -39
  85. package/dist/components/InkEditor/components/TitleGallery/TitleGallery.cjs +1 -1
  86. package/dist/components/InkEditor/components/TitleGallery/TitleGallery.js +3 -2
  87. package/dist/components/InkEditor/components/ToolbarButton/ToolbarButton.cjs +1 -1
  88. package/dist/components/InkEditor/components/ToolbarButton/ToolbarButton.js +13 -12
  89. package/dist/components/InkEditor/components/ToolbarColorPicker/ToolbarColorPicker.cjs +1 -1
  90. package/dist/components/InkEditor/components/ToolbarColorPicker/ToolbarColorPicker.js +9 -8
  91. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.cjs +1 -1
  92. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.cjs +1 -1
  93. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.const.js +9 -8
  94. package/dist/components/InkEditor/components/ToolbarCustomize/ToolbarCustomize.js +9 -8
  95. package/dist/components/InkEditor/components/ToolbarDropdown/ToolbarDropdown.cjs +1 -1
  96. package/dist/components/InkEditor/components/ToolbarDropdown/ToolbarDropdown.js +19 -18
  97. package/dist/components/InkEditor/components/ToolbarDropdown/ToolbarDropdown.utils.cjs +1 -1
  98. package/dist/components/InkEditor/components/ToolbarDropdown/ToolbarDropdown.utils.js +6 -5
  99. package/dist/components/InkEditor/components/VersionHistory/VersionHistory.cjs +1 -0
  100. package/dist/components/InkEditor/components/VersionHistory/VersionHistory.d.ts +11 -0
  101. package/dist/components/InkEditor/components/VersionHistory/VersionHistory.d.ts.map +1 -0
  102. package/dist/components/InkEditor/components/VersionHistory/VersionHistory.js +22 -0
  103. package/dist/components/InkEditor/components/VersionHistory/index.d.ts +3 -0
  104. package/dist/components/InkEditor/components/VersionHistory/index.d.ts.map +1 -0
  105. package/dist/components/InkEditor/components/index.d.ts +7 -0
  106. package/dist/components/InkEditor/components/index.d.ts.map +1 -1
  107. package/dist/components/InkEditor/helpers/format.utils.cjs +3 -2
  108. package/dist/components/InkEditor/helpers/format.utils.d.ts +1 -0
  109. package/dist/components/InkEditor/helpers/format.utils.d.ts.map +1 -1
  110. package/dist/components/InkEditor/helpers/format.utils.js +106 -84
  111. package/dist/components/InkEditor/helpers/index.d.ts +1 -1
  112. package/dist/components/InkEditor/helpers/index.d.ts.map +1 -1
  113. package/dist/components/InkWorkspace/InkWorkspace.cjs +1 -1
  114. package/dist/components/InkWorkspace/InkWorkspace.d.ts.map +1 -1
  115. package/dist/components/InkWorkspace/InkWorkspace.js +136 -144
  116. package/dist/components/InkWorkspace/hooks/useInkWorkspace.cjs +1 -1
  117. package/dist/components/InkWorkspace/hooks/useInkWorkspace.js +8 -7
  118. package/dist/constants/contextMenu.const.cjs +1 -1
  119. package/dist/constants/contextMenu.const.d.ts +8 -0
  120. package/dist/constants/contextMenu.const.d.ts.map +1 -1
  121. package/dist/constants/contextMenu.const.js +30 -22
  122. package/dist/constants/defaultIcons.cjs +1 -1
  123. package/dist/constants/defaultIcons.js +6 -5
  124. package/dist/constants/defaults.const.cjs +1 -1
  125. package/dist/constants/defaults.const.d.ts.map +1 -1
  126. package/dist/constants/defaults.const.js +150 -138
  127. package/dist/constants/numbers.cjs +1 -1
  128. package/dist/constants/numbers.js +28 -27
  129. package/dist/constants/toolbar.const.cjs +1 -1
  130. package/dist/constants/toolbar.const.d.ts +7 -0
  131. package/dist/constants/toolbar.const.d.ts.map +1 -1
  132. package/dist/constants/toolbar.const.js +16 -9
  133. package/dist/constants/toolbarMenu.const.cjs +1 -1
  134. package/dist/constants/toolbarMenu.const.d.ts.map +1 -1
  135. package/dist/constants/toolbarMenu.const.js +25 -11
  136. package/dist/hooks/useInkCollaboration.cjs +1 -1
  137. package/dist/hooks/useInkCollaboration.js +15 -14
  138. package/dist/hooks/useToolbarOverflow.cjs +1 -1
  139. package/dist/hooks/useToolbarOverflow.js +12 -11
  140. package/dist/index.cjs +1 -1
  141. package/dist/index.js +145 -144
  142. package/dist/plugins/ai/demoProvider.cjs +1 -1
  143. package/dist/plugins/ai/demoProvider.js +3 -2
  144. package/dist/plugins/ai/index.cjs +1 -1
  145. package/dist/plugins/ai/index.js +25 -24
  146. package/dist/plugins/excel/excel.utils.cjs +1 -1
  147. package/dist/plugins/excel/excel.utils.js +17 -16
  148. package/dist/plugins/graph/graph.utils.cjs +1 -1
  149. package/dist/plugins/graph/graph.utils.js +7 -6
  150. package/dist/plugins/theme/inkTheme.cjs +1 -1
  151. package/dist/plugins/theme/inkTheme.js +22 -19
  152. package/dist/plugins/titles/titles.const.cjs +1 -1
  153. package/dist/plugins/titles/titles.const.js +9 -8
  154. package/dist/plugins/titles/titles.utils.cjs +1 -1
  155. package/dist/plugins/titles/titles.utils.js +3 -2
  156. package/dist/styles.css +1 -1
  157. package/dist/types/collab.types.d.ts +0 -1
  158. package/dist/types/collab.types.d.ts.map +1 -1
  159. package/dist/types/features.types.d.ts +1 -1
  160. package/dist/types/features.types.d.ts.map +1 -1
  161. package/dist/types/ink.types.d.ts +1 -3
  162. package/dist/types/ink.types.d.ts.map +1 -1
  163. package/dist/utils/blocks.utils.cjs +1 -1
  164. package/dist/utils/blocks.utils.js +19 -18
  165. package/dist/utils/collab.utils.cjs +1 -1
  166. package/dist/utils/collab.utils.js +7 -6
  167. package/dist/utils/comments.utils.cjs +1 -1
  168. package/dist/utils/comments.utils.d.ts +4 -0
  169. package/dist/utils/comments.utils.d.ts.map +1 -1
  170. package/dist/utils/comments.utils.js +26 -18
  171. package/dist/utils/comments.utils.test.d.ts +2 -0
  172. package/dist/utils/comments.utils.test.d.ts.map +1 -0
  173. package/dist/utils/exportDocument.utils.cjs +2 -0
  174. package/dist/utils/exportDocument.utils.d.ts +16 -0
  175. package/dist/utils/exportDocument.utils.d.ts.map +1 -0
  176. package/dist/utils/exportDocument.utils.js +85 -0
  177. package/dist/utils/exportDocument.utils.test.d.ts +2 -0
  178. package/dist/utils/exportDocument.utils.test.d.ts.map +1 -0
  179. package/dist/utils/formatPainter.utils.cjs +1 -0
  180. package/dist/utils/formatPainter.utils.d.ts +11 -0
  181. package/dist/utils/formatPainter.utils.d.ts.map +1 -0
  182. package/dist/utils/formatPainter.utils.js +20 -0
  183. package/dist/utils/formatPainter.utils.test.d.ts +2 -0
  184. package/dist/utils/formatPainter.utils.test.d.ts.map +1 -0
  185. package/dist/utils/history.utils.cjs +1 -1
  186. package/dist/utils/history.utils.js +3 -2
  187. package/dist/utils/image.utils.cjs +1 -0
  188. package/dist/utils/image.utils.d.ts +14 -0
  189. package/dist/utils/image.utils.d.ts.map +1 -0
  190. package/dist/utils/image.utils.js +33 -0
  191. package/dist/utils/image.utils.test.d.ts +2 -0
  192. package/dist/utils/image.utils.test.d.ts.map +1 -0
  193. package/dist/utils/index.d.ts +10 -3
  194. package/dist/utils/index.d.ts.map +1 -1
  195. package/dist/utils/license.utils.cjs +1 -1
  196. package/dist/utils/license.utils.js +8 -7
  197. package/dist/utils/markdown.utils.cjs +11 -0
  198. package/dist/utils/markdown.utils.d.ts +7 -0
  199. package/dist/utils/markdown.utils.d.ts.map +1 -0
  200. package/dist/utils/markdown.utils.js +87 -0
  201. package/dist/utils/markdown.utils.test.d.ts +2 -0
  202. package/dist/utils/markdown.utils.test.d.ts.map +1 -0
  203. package/dist/utils/mentions.utils.cjs +1 -0
  204. package/dist/utils/mentions.utils.d.ts +13 -0
  205. package/dist/utils/mentions.utils.d.ts.map +1 -0
  206. package/dist/utils/mentions.utils.js +23 -0
  207. package/dist/utils/mentions.utils.test.d.ts +2 -0
  208. package/dist/utils/mentions.utils.test.d.ts.map +1 -0
  209. package/dist/utils/outline.utils.cjs +1 -1
  210. package/dist/utils/outline.utils.js +9 -8
  211. package/dist/utils/paste.utils.cjs +1 -1
  212. package/dist/utils/paste.utils.d.ts +2 -0
  213. package/dist/utils/paste.utils.d.ts.map +1 -1
  214. package/dist/utils/paste.utils.js +53 -19
  215. package/dist/utils/paste.utils.test.d.ts +2 -0
  216. package/dist/utils/paste.utils.test.d.ts.map +1 -0
  217. package/dist/utils/premium.utils.cjs +1 -1
  218. package/dist/utils/premium.utils.js +12 -11
  219. package/dist/utils/selection.utils.cjs +1 -1
  220. package/dist/utils/selection.utils.js +3 -2
  221. package/dist/utils/slash.utils.cjs +1 -1
  222. package/dist/utils/slash.utils.js +10 -9
  223. package/dist/utils/table.utils.cjs +1 -1
  224. package/dist/utils/table.utils.d.ts +8 -0
  225. package/dist/utils/table.utils.d.ts.map +1 -1
  226. package/dist/utils/table.utils.js +78 -54
  227. package/dist/utils/toolbarStorage.utils.cjs +1 -1
  228. package/dist/utils/toolbarStorage.utils.js +15 -14
  229. package/dist/utils/trackChanges.utils.cjs +1 -1
  230. package/dist/utils/trackChanges.utils.js +9 -8
  231. package/dist/utils/typo.utils.cjs +1 -1
  232. package/dist/utils/typo.utils.js +8 -7
  233. package/dist/utils/versions.utils.cjs +1 -0
  234. package/dist/utils/versions.utils.d.ts +11 -0
  235. package/dist/utils/versions.utils.d.ts.map +1 -0
  236. package/dist/utils/versions.utils.js +36 -0
  237. package/dist/utils/versions.utils.test.d.ts +2 -0
  238. package/dist/utils/versions.utils.test.d.ts.map +1 -0
  239. package/dist/utils/words.utils.cjs +1 -1
  240. package/dist/utils/words.utils.js +3 -2
  241. package/package.json +1 -1
  242. package/dist/components/InkEditor/components/ThemePicker/hooks/index.d.ts +0 -3
  243. package/dist/components/InkEditor/components/ThemePicker/hooks/index.d.ts.map +0 -1
  244. package/dist/components/InkEditor/components/ThemePicker/hooks/useThemePickerMenu.cjs +0 -1
  245. package/dist/components/InkEditor/components/ThemePicker/hooks/useThemePickerMenu.d.ts +0 -13
  246. package/dist/components/InkEditor/components/ThemePicker/hooks/useThemePickerMenu.d.ts.map +0 -1
  247. package/dist/components/InkEditor/components/ThemePicker/hooks/useThemePickerMenu.js +0 -39
@@ -4,10 +4,11 @@ import { TOOLBAR_OPTION_DIVIDER as e, TOOLBAR_STORAGE_KEY_ITEMS as u, TOOLBAR_ST
4
4
  import "../constants/openai.const.js";
5
5
  import "react/jsx-runtime";
6
6
  import "./paste.utils.js";
7
- import { isLocalStorageAvailable as T } from "./storage.utils.js";
7
+ import { isLocalStorageAvailable as p } from "./storage.utils.js";
8
+ import "./exportDocument.utils.js";
8
9
  import "react";
9
10
  import "react-dom";
10
- const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r, l = (r) => r ? T() ? localStorage : null : p() ? sessionStorage : null, y = (r, t) => {
11
+ const T = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r, l = (r) => r ? p() ? localStorage : null : T() ? sessionStorage : null, B = (r, t) => {
11
12
  const o = l(r);
12
13
  if (!o) return null;
13
14
  try {
@@ -16,7 +17,7 @@ const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r,
16
17
  } catch {
17
18
  return null;
18
19
  }
19
- }, B = (r, t, o) => {
20
+ }, N = (r, t, o) => {
20
21
  const n = l(t);
21
22
  if (n)
22
23
  try {
@@ -37,7 +38,7 @@ const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r,
37
38
  } catch {
38
39
  return null;
39
40
  }
40
- }, N = (r, t) => {
41
+ }, G = (r, t) => {
41
42
  const o = l(r);
42
43
  if (!o) return null;
43
44
  try {
@@ -46,7 +47,7 @@ const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r,
46
47
  } catch {
47
48
  return null;
48
49
  }
49
- }, G = (r, t, o) => {
50
+ }, w = (r, t, o) => {
50
51
  const n = l(t);
51
52
  if (n)
52
53
  try {
@@ -70,9 +71,9 @@ const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r,
70
71
  for (; t.length > s && t[t.length - 1] === e; )
71
72
  t.pop();
72
73
  return t;
73
- }, w = (r, t) => S(
74
+ }, D = (r, t) => S(
74
75
  r.filter((o) => o === e || t.has(o))
75
- ), D = (r) => {
76
+ ), U = (r) => {
76
77
  const t = /* @__PURE__ */ new Set(), o = [];
77
78
  for (const n of r)
78
79
  n !== e && (t.has(n) || (t.add(n), o.push(n)));
@@ -80,13 +81,13 @@ const p = () => typeof sessionStorage < "u", i = (r, t) => t ? `${r}:${t}` : r,
80
81
  };
81
82
  export {
82
83
  i as buildToolbarStorageKey,
83
- w as buildVisibleToolbarItems,
84
- p as isSessionStorageAvailable,
85
- D as listCustomizableToolbarOptions,
84
+ D as buildVisibleToolbarItems,
85
+ T as isSessionStorageAvailable,
86
+ U as listCustomizableToolbarOptions,
86
87
  S as normalizeToolbarItems,
87
88
  O as parseToolbarItems,
88
- y as readToolbarHidden,
89
- N as readToolbarItems,
90
- B as writeToolbarHidden,
91
- G as writeToolbarItems
89
+ B as readToolbarHidden,
90
+ G as readToolbarItems,
91
+ N as writeToolbarHidden,
92
+ w as writeToolbarItems
92
93
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../constants/defaults.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");const s=require("./id.utils.cjs");require("./paste.utils.cjs");require("react");require("react-dom");const l=(e,t)=>`<ins class="${n.INK_CLASS_TC_INSERT}" data-ink-tc="${t}">${e}</ins>`,o=(e,t)=>`<del class="${n.INK_CLASS_TC_DELETE}" data-ink-tc="${t}">${e}</del>`,m=(e,t,c)=>({id:s.createInkId("tc"),type:e,html:t,author:c,timestamp:Date.now()}),d=(e,t)=>{const a=new DOMParser().parseFromString(`<div>${e}</div>`,"text/html").body.firstElementChild;return a?(a.querySelectorAll(`[data-ink-tc="${t}"]`).forEach(r=>{if(r.tagName==="INS"){r.replaceWith(...Array.from(r.childNodes));return}r.tagName==="DEL"&&r.remove()}),a.innerHTML):e},u=(e,t)=>{const a=new DOMParser().parseFromString(`<div>${e}</div>`,"text/html").body.firstElementChild;return a?(a.querySelectorAll(`[data-ink-tc="${t}"]`).forEach(r=>{if(r.tagName==="INS"){r.remove();return}r.tagName==="DEL"&&r.replaceWith(...Array.from(r.childNodes))}),a.innerHTML):e};exports.acceptTrackChangeInHtml=d;exports.createTrackChange=m;exports.rejectTrackChangeInHtml=u;exports.wrapDeleteHtml=o;exports.wrapInsertHtml=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../constants/defaults.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");const s=require("./id.utils.cjs");require("./paste.utils.cjs");require("./exportDocument.utils.cjs");require("react");require("react-dom");const l=(e,t)=>`<ins class="${n.INK_CLASS_TC_INSERT}" data-ink-tc="${t}">${e}</ins>`,o=(e,t)=>`<del class="${n.INK_CLASS_TC_DELETE}" data-ink-tc="${t}">${e}</del>`,m=(e,t,c)=>({id:s.createInkId("tc"),type:e,html:t,author:c,timestamp:Date.now()}),u=(e,t)=>{const a=new DOMParser().parseFromString(`<div>${e}</div>`,"text/html").body.firstElementChild;return a?(a.querySelectorAll(`[data-ink-tc="${t}"]`).forEach(r=>{if(r.tagName==="INS"){r.replaceWith(...Array.from(r.childNodes));return}r.tagName==="DEL"&&r.remove()}),a.innerHTML):e},d=(e,t)=>{const a=new DOMParser().parseFromString(`<div>${e}</div>`,"text/html").body.firstElementChild;return a?(a.querySelectorAll(`[data-ink-tc="${t}"]`).forEach(r=>{if(r.tagName==="INS"){r.remove();return}r.tagName==="DEL"&&r.replaceWith(...Array.from(r.childNodes))}),a.innerHTML):e};exports.acceptTrackChangeInHtml=u;exports.createTrackChange=m;exports.rejectTrackChangeInHtml=d;exports.wrapDeleteHtml=o;exports.wrapInsertHtml=l;
@@ -3,15 +3,16 @@ import "../constants/openai.const.js";
3
3
  import "react/jsx-runtime";
4
4
  import { createInkId as s } from "./id.utils.js";
5
5
  import "./paste.utils.js";
6
+ import "./exportDocument.utils.js";
6
7
  import "react";
7
8
  import "react-dom";
8
- const S = (r, e) => `<ins class="${o}" data-ink-tc="${e}">${r}</ins>`, E = (r, e) => `<del class="${n}" data-ink-tc="${e}">${r}</del>`, I = (r, e, c) => ({
9
+ const E = (r, e) => `<ins class="${o}" data-ink-tc="${e}">${r}</ins>`, I = (r, e) => `<del class="${n}" data-ink-tc="${e}">${r}</del>`, $ = (r, e, c) => ({
9
10
  id: s("tc"),
10
11
  type: r,
11
12
  html: e,
12
13
  author: c,
13
14
  timestamp: Date.now()
14
- }), $ = (r, e) => {
15
+ }), g = (r, e) => {
15
16
  const a = new DOMParser().parseFromString(`<div>${r}</div>`, "text/html").body.firstElementChild;
16
17
  return a ? (a.querySelectorAll(`[data-ink-tc="${e}"]`).forEach((t) => {
17
18
  if (t.tagName === "INS") {
@@ -20,7 +21,7 @@ const S = (r, e) => `<ins class="${o}" data-ink-tc="${e}">${r}</ins>`, E = (r, e
20
21
  }
21
22
  t.tagName === "DEL" && t.remove();
22
23
  }), a.innerHTML) : r;
23
- }, g = (r, e) => {
24
+ }, C = (r, e) => {
24
25
  const a = new DOMParser().parseFromString(`<div>${r}</div>`, "text/html").body.firstElementChild;
25
26
  return a ? (a.querySelectorAll(`[data-ink-tc="${e}"]`).forEach((t) => {
26
27
  if (t.tagName === "INS") {
@@ -31,9 +32,9 @@ const S = (r, e) => `<ins class="${o}" data-ink-tc="${e}">${r}</ins>`, E = (r, e
31
32
  }), a.innerHTML) : r;
32
33
  };
33
34
  export {
34
- $ as acceptTrackChangeInHtml,
35
- I as createTrackChange,
36
- g as rejectTrackChangeInHtml,
37
- E as wrapDeleteHtml,
38
- S as wrapInsertHtml
35
+ g as acceptTrackChangeInHtml,
36
+ $ as createTrackChange,
37
+ C as rejectTrackChangeInHtml,
38
+ I as wrapDeleteHtml,
39
+ E as wrapInsertHtml
39
40
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../constants/typos.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");require("./paste.utils.cjs");require("react");require("react-dom");const p=e=>{var i;const r=e.toLowerCase(),t=u.TYPO_DICTIONARY[r];return t?e===e.toUpperCase()?t.toUpperCase():e[0]===((i=e[0])==null?void 0:i.toUpperCase())?t.charAt(0).toUpperCase()+t.slice(1):t:e},c=e=>{let r=0;return{html:e.split(/(<[^>]+>)/g).map(n=>!n||n.startsWith("<")?n:n.replace(u.TYPO_WORD_BOUNDARY,o=>{const s=p(o);return s!==o&&(r+=1),s})).join(""),fixedCount:r}};exports.applyTypoAutoFix=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../constants/typos.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");require("./paste.utils.cjs");require("./exportDocument.utils.cjs");require("react");require("react-dom");const p=e=>{var n;const r=e.toLowerCase(),t=u.TYPO_DICTIONARY[r];return t?e===e.toUpperCase()?t.toUpperCase():e[0]===((n=e[0])==null?void 0:n.toUpperCase())?t.charAt(0).toUpperCase()+t.slice(1):t:e},c=e=>{let r=0;return{html:e.split(/(<[^>]+>)/g).map(i=>!i||i.startsWith("<")?i:i.replace(u.TYPO_WORD_BOUNDARY,o=>{const s=p(o);return s!==o&&(r+=1),s})).join(""),fixedCount:r}};exports.applyTypoAutoFix=c;
@@ -2,19 +2,20 @@ import { TYPO_WORD_BOUNDARY as s, TYPO_DICTIONARY as m } from "../constants/typo
2
2
  import "../constants/openai.const.js";
3
3
  import "react/jsx-runtime";
4
4
  import "./paste.utils.js";
5
+ import "./exportDocument.utils.js";
5
6
  import "react";
6
7
  import "react-dom";
7
8
  const c = (t) => {
8
- var n;
9
+ var i;
9
10
  const r = t.toLowerCase(), e = m[r];
10
- return e ? t === t.toUpperCase() ? e.toUpperCase() : t[0] === ((n = t[0]) == null ? void 0 : n.toUpperCase()) ? e.charAt(0).toUpperCase() + e.slice(1) : e : t;
11
- }, O = (t) => {
11
+ return e ? t === t.toUpperCase() ? e.toUpperCase() : t[0] === ((i = t[0]) == null ? void 0 : i.toUpperCase()) ? e.charAt(0).toUpperCase() + e.slice(1) : e : t;
12
+ }, U = (t) => {
12
13
  let r = 0;
13
- return { html: t.split(/(<[^>]+>)/g).map((o) => !o || o.startsWith("<") ? o : o.replace(s, (i) => {
14
- const p = c(i);
15
- return p !== i && (r += 1), p;
14
+ return { html: t.split(/(<[^>]+>)/g).map((o) => !o || o.startsWith("<") ? o : o.replace(s, (n) => {
15
+ const p = c(n);
16
+ return p !== n && (r += 1), p;
16
17
  })).join(""), fixedCount: r };
17
18
  };
18
19
  export {
19
- O as applyTypoAutoFix
20
+ U as applyTypoAutoFix
20
21
  };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../constants/generals.const.cjs"),S=require("../constants/numbers.cjs"),n=require("./storage.utils.cjs"),I=require("./id.utils.cjs"),o="ink-versions:",i=S.NUMBER_TWENTY,a=e=>`${o}${e||u.DEFAULT_MEMORY_KEY}`,c=e=>{if(!n.isLocalStorageAvailable())return[];try{const t=localStorage.getItem(a(e));if(!t)return[];const r=JSON.parse(t);return Array.isArray(r)?r:[]}catch{return[]}},_=(e,t)=>{if(n.isLocalStorageAvailable())try{localStorage.setItem(a(e),JSON.stringify(t))}catch{return}},E=(e,t,r)=>{const s={id:I.createInkId("ver"),name:new Date().toLocaleString(),html:t,savedAt:Date.now()},l=[s,...c(e)].slice(0,i);return _(e,l),s};exports.VERSION_HISTORY_LIMIT=i;exports.VERSION_STORAGE_PREFIX=o;exports.listVersions=c;exports.saveVersion=E;
@@ -0,0 +1,11 @@
1
+ export declare const VERSION_STORAGE_PREFIX = "ink-versions:";
2
+ export declare const VERSION_HISTORY_LIMIT = 20;
3
+ export interface InkDocumentVersion {
4
+ id: string;
5
+ name: string;
6
+ html: string;
7
+ savedAt: number;
8
+ }
9
+ export declare const listVersions: (memoryKey?: string) => InkDocumentVersion[];
10
+ export declare const saveVersion: (memoryKey: string | undefined, html: string, name?: string) => InkDocumentVersion;
11
+ //# sourceMappingURL=versions.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.utils.d.ts","sourceRoot":"","sources":["../../src/utils/versions.utils.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,qBAAqB,KAAgB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,KAAG,kBAAkB,EAUnE,CAAC;AAWF,eAAO,MAAM,WAAW,GACtB,WAAW,MAAM,GAAG,SAAS,EAC7B,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,kBAUF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { DEFAULT_MEMORY_KEY as i } from "../constants/generals.const.js";
2
+ import { NUMBER_TWENTY as c } from "../constants/numbers.js";
3
+ import { isLocalStorageAvailable as n } from "./storage.utils.js";
4
+ import { createInkId as l } from "./id.utils.js";
5
+ const m = "ink-versions:", I = c, s = (r) => `${m}${r || i}`, S = (r) => {
6
+ if (!n()) return [];
7
+ try {
8
+ const t = localStorage.getItem(s(r));
9
+ if (!t) return [];
10
+ const e = JSON.parse(t);
11
+ return Array.isArray(e) ? e : [];
12
+ } catch {
13
+ return [];
14
+ }
15
+ }, E = (r, t) => {
16
+ if (n())
17
+ try {
18
+ localStorage.setItem(s(r), JSON.stringify(t));
19
+ } catch {
20
+ return;
21
+ }
22
+ }, O = (r, t, e) => {
23
+ const o = {
24
+ id: l("ver"),
25
+ name: (/* @__PURE__ */ new Date()).toLocaleString(),
26
+ html: t,
27
+ savedAt: Date.now()
28
+ }, a = [o, ...S(r)].slice(0, I);
29
+ return E(r, a), o;
30
+ };
31
+ export {
32
+ I as VERSION_HISTORY_LIMIT,
33
+ m as VERSION_STORAGE_PREFIX,
34
+ S as listVersions,
35
+ O as saveVersion
36
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=versions.utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.utils.test.d.ts","sourceRoot":"","sources":["../../src/utils/versions.utils.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../constants/numbers.cjs"),i=require("../constants/generals.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");require("./paste.utils.cjs");require("react");require("react-dom");const n=r=>{const e=r.trim();return e?e.split(i.INK_WORD_SPLIT).filter(Boolean).length:t.NUMBER_ZERO};exports.countWords=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../constants/numbers.cjs"),i=require("../constants/generals.const.cjs");require("../constants/openai.const.cjs");require("react/jsx-runtime");require("./paste.utils.cjs");require("./exportDocument.utils.cjs");require("react");require("react-dom");const u=r=>{const e=r.trim();return e?e.split(i.INK_WORD_SPLIT).filter(Boolean).length:t.NUMBER_ZERO};exports.countWords=u;
@@ -3,12 +3,13 @@ import { INK_WORD_SPLIT as i } from "../constants/generals.const.js";
3
3
  import "../constants/openai.const.js";
4
4
  import "react/jsx-runtime";
5
5
  import "./paste.utils.js";
6
+ import "./exportDocument.utils.js";
6
7
  import "react";
7
8
  import "react-dom";
8
- const c = (t) => {
9
+ const u = (t) => {
9
10
  const r = t.trim();
10
11
  return r ? r.split(i).filter(Boolean).length : o;
11
12
  };
12
13
  export {
13
- c as countWords
14
+ u as countWords
14
15
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgedevstack/ink",
3
- "version": "1.1.9",
3
+ "version": "1.2.0",
4
4
  "description": "ForgeStack rich text editor for React — WYSIWYG with tables, track changes, comments, block handles, sign pad, and pluggable Ink AI (BYO LLM). The writing layer of ForgeStack.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1,3 +0,0 @@
1
- export { useThemePickerMenu } from './useThemePickerMenu';
2
- export type { UseThemePickerMenuReturn } from './useThemePickerMenu';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/InkEditor/components/ThemePicker/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),m=require("../../../../../constants/numbers.cjs"),w=require("../../../../../constants/keyboard.const.cjs");require("../../../../../constants/openai.const.cjs");require("react/jsx-runtime");require("../../../../../utils/paste.utils.cjs");require("react-dom");const R=require("../../ToolbarDropdown/ToolbarDropdown.utils.cjs"),p=()=>{const[o,r]=t.useState(!1),[E,v]=t.useState({top:m.NUMBER_ZERO,left:m.NUMBER_ZERO}),s=t.useRef(null),u=t.useRef(null),i=t.useRef(null);return t.useEffect(()=>{if(!o)return;const n=()=>{const e=R.getToolbarDropdownMenuPosition(u.current);v({top:e.top,left:e.left})};n();const c=e=>{var a,f;const l=e.target;(a=s.current)!=null&&a.contains(l)||(f=i.current)!=null&&f.contains(l)||r(!1)},d=e=>{e.key===w.KEY_ESCAPE&&r(!1)};return document.addEventListener("mousedown",c),document.addEventListener("keydown",d),window.addEventListener("resize",n),window.addEventListener("scroll",n,!0),()=>{document.removeEventListener("mousedown",c),document.removeEventListener("keydown",d),window.removeEventListener("resize",n),window.removeEventListener("scroll",n,!0)}},[o]),{open:o,setOpen:r,menuPosition:E,rootRef:s,triggerRef:u,menuRef:i}};exports.useThemePickerMenu=p;
@@ -1,13 +0,0 @@
1
- export interface UseThemePickerMenuReturn {
2
- open: boolean;
3
- setOpen: React.Dispatch<React.SetStateAction<boolean>>;
4
- menuPosition: {
5
- top: number;
6
- left: number;
7
- };
8
- rootRef: React.RefObject<HTMLDivElement>;
9
- triggerRef: React.RefObject<HTMLDivElement>;
10
- menuRef: React.RefObject<HTMLDivElement>;
11
- }
12
- export declare const useThemePickerMenu: () => UseThemePickerMenuReturn;
13
- //# sourceMappingURL=useThemePickerMenu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useThemePickerMenu.d.ts","sourceRoot":"","sources":["../../../../../../src/components/InkEditor/components/ThemePicker/hooks/useThemePickerMenu.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;CAC1C;AAED,eAAO,MAAM,kBAAkB,QAAO,wBA0CrC,CAAC"}
@@ -1,39 +0,0 @@
1
- import { useState as p, useRef as r, useEffect as w } from "react";
2
- import { NUMBER_ZERO as a } from "../../../../../constants/numbers.js";
3
- import { KEY_ESCAPE as L } from "../../../../../constants/keyboard.const.js";
4
- import "../../../../../constants/openai.const.js";
5
- import "react/jsx-runtime";
6
- import "../../../../../utils/paste.utils.js";
7
- import "react-dom";
8
- import { getToolbarDropdownMenuPosition as P } from "../../ToolbarDropdown/ToolbarDropdown.utils.js";
9
- const O = () => {
10
- const [n, o] = p(!1), [E, v] = p({ top: a, left: a }), s = r(null), i = r(null), u = r(null);
11
- return w(() => {
12
- if (!n) return;
13
- const t = () => {
14
- const e = P(i.current);
15
- v({ top: e.top, left: e.left });
16
- };
17
- t();
18
- const c = (e) => {
19
- var f, l;
20
- const d = e.target;
21
- (f = s.current) != null && f.contains(d) || (l = u.current) != null && l.contains(d) || o(!1);
22
- }, m = (e) => {
23
- e.key === L && o(!1);
24
- };
25
- return document.addEventListener("mousedown", c), document.addEventListener("keydown", m), window.addEventListener("resize", t), window.addEventListener("scroll", t, !0), () => {
26
- document.removeEventListener("mousedown", c), document.removeEventListener("keydown", m), window.removeEventListener("resize", t), window.removeEventListener("scroll", t, !0);
27
- };
28
- }, [n]), {
29
- open: n,
30
- setOpen: o,
31
- menuPosition: E,
32
- rootRef: s,
33
- triggerRef: i,
34
- menuRef: u
35
- };
36
- };
37
- export {
38
- O as useThemePickerMenu
39
- };