react-native-richify 1.0.1 → 1.0.3

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 (159) hide show
  1. package/lib/commonjs/components/OverlayText.d.js +6 -0
  2. package/lib/commonjs/components/OverlayText.d.js.map +1 -0
  3. package/lib/commonjs/components/OverlayText.js +51 -0
  4. package/lib/commonjs/components/OverlayText.js.map +1 -0
  5. package/lib/commonjs/components/RichTextInput.d.js +6 -0
  6. package/lib/commonjs/components/RichTextInput.d.js.map +1 -0
  7. package/lib/commonjs/components/RichTextInput.js +163 -0
  8. package/lib/commonjs/components/RichTextInput.js.map +1 -0
  9. package/lib/commonjs/components/Toolbar.d.js +6 -0
  10. package/lib/commonjs/components/Toolbar.d.js.map +1 -0
  11. package/lib/commonjs/components/Toolbar.js +96 -0
  12. package/lib/commonjs/components/Toolbar.js.map +1 -0
  13. package/lib/commonjs/components/ToolbarButton.d.js +6 -0
  14. package/lib/commonjs/components/ToolbarButton.d.js.map +1 -0
  15. package/lib/commonjs/components/ToolbarButton.js +63 -0
  16. package/lib/commonjs/components/ToolbarButton.js.map +1 -0
  17. package/lib/commonjs/constants/defaultStyles.d.js +6 -0
  18. package/lib/commonjs/constants/defaultStyles.d.js.map +1 -0
  19. package/lib/commonjs/constants/defaultStyles.js +172 -0
  20. package/lib/commonjs/constants/defaultStyles.js.map +1 -0
  21. package/lib/commonjs/context/RichTextContext.d.js +6 -0
  22. package/lib/commonjs/context/RichTextContext.d.js.map +1 -0
  23. package/lib/commonjs/context/RichTextContext.js +61 -0
  24. package/lib/commonjs/context/RichTextContext.js.map +1 -0
  25. package/lib/commonjs/hooks/useFormatting.d.js +6 -0
  26. package/lib/commonjs/hooks/useFormatting.d.js.map +1 -0
  27. package/lib/commonjs/hooks/useFormatting.js +82 -0
  28. package/lib/commonjs/hooks/useFormatting.js.map +1 -0
  29. package/lib/commonjs/hooks/useRichText.d.js +6 -0
  30. package/lib/commonjs/hooks/useRichText.d.js.map +1 -0
  31. package/lib/commonjs/hooks/useRichText.js +142 -0
  32. package/lib/commonjs/hooks/useRichText.js.map +1 -0
  33. package/lib/commonjs/hooks/useSelection.d.js +6 -0
  34. package/lib/commonjs/hooks/useSelection.d.js.map +1 -0
  35. package/lib/commonjs/hooks/useSelection.js +39 -0
  36. package/lib/commonjs/hooks/useSelection.js.map +1 -0
  37. package/lib/commonjs/index.d.js +186 -0
  38. package/lib/commonjs/index.d.js.map +1 -0
  39. package/lib/commonjs/index.js +186 -0
  40. package/lib/commonjs/index.js.map +1 -0
  41. package/lib/commonjs/package.json +1 -0
  42. package/lib/commonjs/types/index.d.js +6 -0
  43. package/lib/commonjs/types/index.d.js.map +1 -0
  44. package/lib/commonjs/types/index.js +6 -0
  45. package/lib/commonjs/types/index.js.map +1 -0
  46. package/lib/commonjs/utils/formatter.d.js +13 -0
  47. package/lib/commonjs/utils/formatter.d.js.map +1 -0
  48. package/lib/commonjs/utils/formatter.js +229 -0
  49. package/lib/commonjs/utils/formatter.js.map +1 -0
  50. package/lib/commonjs/utils/parser.d.js +6 -0
  51. package/lib/commonjs/utils/parser.d.js.map +1 -0
  52. package/lib/commonjs/utils/parser.js +221 -0
  53. package/lib/commonjs/utils/parser.js.map +1 -0
  54. package/lib/commonjs/utils/styleMapper.d.js +6 -0
  55. package/lib/commonjs/utils/styleMapper.d.js.map +1 -0
  56. package/lib/commonjs/utils/styleMapper.js +87 -0
  57. package/lib/commonjs/utils/styleMapper.js.map +1 -0
  58. package/lib/module/components/OverlayText.d.js +4 -0
  59. package/lib/module/components/OverlayText.d.js.map +1 -0
  60. package/lib/module/components/OverlayText.js +47 -0
  61. package/lib/module/components/OverlayText.js.map +1 -0
  62. package/lib/module/components/RichTextInput.d.js +4 -0
  63. package/lib/module/components/RichTextInput.d.js.map +1 -0
  64. package/lib/module/components/RichTextInput.js +158 -0
  65. package/lib/module/components/RichTextInput.js.map +1 -0
  66. package/lib/module/components/Toolbar.d.js +4 -0
  67. package/lib/module/components/Toolbar.d.js.map +1 -0
  68. package/lib/module/components/Toolbar.js +92 -0
  69. package/lib/module/components/Toolbar.js.map +1 -0
  70. package/lib/module/components/ToolbarButton.d.js +4 -0
  71. package/lib/module/components/ToolbarButton.d.js.map +1 -0
  72. package/lib/module/components/ToolbarButton.js +59 -0
  73. package/lib/module/components/ToolbarButton.js.map +1 -0
  74. package/lib/module/constants/defaultStyles.d.js +4 -0
  75. package/lib/module/constants/defaultStyles.d.js.map +1 -0
  76. package/lib/module/constants/defaultStyles.js +168 -0
  77. package/lib/module/constants/defaultStyles.js.map +1 -0
  78. package/lib/module/context/RichTextContext.d.js +4 -0
  79. package/lib/module/context/RichTextContext.d.js.map +1 -0
  80. package/lib/module/context/RichTextContext.js +55 -0
  81. package/lib/module/context/RichTextContext.js.map +1 -0
  82. package/lib/module/hooks/useFormatting.d.js +11 -0
  83. package/lib/module/hooks/useFormatting.d.js.map +1 -0
  84. package/lib/module/hooks/useFormatting.js +78 -0
  85. package/lib/module/hooks/useFormatting.js.map +1 -0
  86. package/lib/module/hooks/useRichText.d.js +4 -0
  87. package/lib/module/hooks/useRichText.d.js.map +1 -0
  88. package/lib/module/hooks/useRichText.js +138 -0
  89. package/lib/module/hooks/useRichText.js.map +1 -0
  90. package/lib/module/hooks/useSelection.d.js +4 -0
  91. package/lib/module/hooks/useSelection.d.js.map +1 -0
  92. package/lib/module/hooks/useSelection.js +35 -0
  93. package/lib/module/hooks/useSelection.js.map +1 -0
  94. package/lib/module/index.d.js +15 -0
  95. package/lib/module/index.d.js.map +1 -0
  96. package/lib/module/index.js +25 -0
  97. package/lib/module/index.js.map +1 -0
  98. package/lib/module/types/index.d.js +4 -0
  99. package/lib/module/types/index.d.js.map +1 -0
  100. package/lib/module/types/index.js +4 -0
  101. package/lib/module/types/index.js.map +1 -0
  102. package/lib/module/utils/formatter.d.js +30 -0
  103. package/lib/module/utils/formatter.d.js.map +1 -0
  104. package/lib/module/utils/formatter.js +217 -0
  105. package/lib/module/utils/formatter.js.map +1 -0
  106. package/lib/module/utils/parser.d.js +4 -0
  107. package/lib/module/utils/parser.d.js.map +1 -0
  108. package/lib/module/utils/parser.js +211 -0
  109. package/lib/module/utils/parser.js.map +1 -0
  110. package/lib/module/utils/styleMapper.d.js +4 -0
  111. package/lib/module/utils/styleMapper.d.js.map +1 -0
  112. package/lib/module/utils/styleMapper.js +82 -0
  113. package/lib/module/utils/styleMapper.js.map +1 -0
  114. package/lib/typescript/src/components/OverlayText.d.ts +11 -0
  115. package/lib/typescript/src/components/OverlayText.d.ts.map +1 -0
  116. package/lib/typescript/src/components/RichTextInput.d.ts +21 -0
  117. package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -0
  118. package/lib/typescript/src/components/Toolbar.d.ts +13 -0
  119. package/lib/typescript/src/components/Toolbar.d.ts.map +1 -0
  120. package/lib/typescript/src/components/ToolbarButton.d.ts +8 -0
  121. package/lib/typescript/src/components/ToolbarButton.d.ts.map +1 -0
  122. package/lib/typescript/src/constants/defaultStyles.d.ts +46 -0
  123. package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -0
  124. package/lib/typescript/src/context/RichTextContext.d.ts +31 -0
  125. package/lib/typescript/src/context/RichTextContext.d.ts.map +1 -0
  126. package/lib/typescript/src/hooks/useFormatting.d.ts +26 -0
  127. package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -0
  128. package/lib/typescript/src/hooks/useRichText.d.ts +17 -0
  129. package/lib/typescript/src/hooks/useRichText.d.ts.map +1 -0
  130. package/lib/typescript/src/hooks/useSelection.d.ts +14 -0
  131. package/lib/typescript/src/hooks/useSelection.d.ts.map +1 -0
  132. package/lib/typescript/src/index.d.ts +16 -0
  133. package/lib/typescript/src/index.d.ts.map +1 -0
  134. package/lib/typescript/src/types/index.d.ts +257 -0
  135. package/lib/typescript/src/types/index.d.ts.map +1 -0
  136. package/lib/typescript/src/utils/formatter.d.ts +29 -0
  137. package/lib/typescript/src/utils/formatter.d.ts.map +1 -0
  138. package/lib/typescript/src/utils/parser.d.ts +46 -0
  139. package/lib/typescript/src/utils/parser.d.ts.map +1 -0
  140. package/lib/typescript/src/utils/styleMapper.d.ts +16 -0
  141. package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -0
  142. package/package.json +1 -1
  143. package/src/components/OverlayText.tsx +11 -3
  144. package/src/components/RichTextInput.tsx +11 -5
  145. package/src/components/Toolbar.d.ts +1 -1
  146. package/src/components/Toolbar.tsx +5 -5
  147. package/src/components/ToolbarButton.d.ts +1 -1
  148. package/src/constants/defaultStyles.d.ts +1 -1
  149. package/src/hooks/useRichText.ts +11 -4
  150. package/src/index.d.ts +1 -1
  151. package/src/index.ts +2 -0
  152. package/src/types/index.d.ts +22 -10
  153. package/src/types/index.ts +24 -10
  154. package/src/utils/formatter.d.ts +2 -2
  155. package/src/utils/formatter.ts +4 -4
  156. package/src/utils/parser.d.ts +1 -1
  157. package/src/utils/parser.ts +2 -2
  158. package/src/utils/styleMapper.d.ts +1 -1
  159. package/src/utils/styleMapper.ts +2 -2
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import { useState, useCallback, useRef } from 'react';
4
+ import { EMPTY_FORMAT_STYLE } from '../constants/defaultStyles';
5
+ import { createSegment, segmentsToPlainText, reconcileTextChange, findPositionInSegments } from '../utils/parser';
6
+ import { getSelectionStyle } from '../utils/formatter';
7
+ import { useSelection } from '../hooks/useSelection';
8
+ import { useFormatting } from '../hooks/useFormatting';
9
+ /**
10
+ * Main hook for the rich text editor.
11
+ *
12
+ * Manages the complete editor state (segments, selection, active styles)
13
+ * and exposes all actions needed to build a rich text UI.
14
+ */
15
+ export function useRichText(options = {}) {
16
+ const {
17
+ initialSegments,
18
+ onChangeSegments,
19
+ onChangeText
20
+ } = options;
21
+
22
+ // ─── State ───────────────────────────────────────────────────────────────
23
+
24
+ const [segments, setSegments] = useState(() => {
25
+ if (initialSegments && initialSegments.length > 0) {
26
+ return initialSegments;
27
+ }
28
+ return [createSegment('')];
29
+ });
30
+ const [activeStyles, setActiveStyles] = useState({
31
+ ...EMPTY_FORMAT_STYLE
32
+ });
33
+ const {
34
+ selection,
35
+ handleSelectionChange
36
+ } = useSelection();
37
+
38
+ // Refs for stable access in callbacks
39
+ const segmentsRef = useRef(segments);
40
+ segmentsRef.current = segments;
41
+ const selectionRef = useRef(selection);
42
+ selectionRef.current = selection;
43
+ const activeStylesRef = useRef(activeStyles);
44
+ activeStylesRef.current = activeStyles;
45
+
46
+ // ─── Segment Change Handler ──────────────────────────────────────────────
47
+
48
+ const updateSegments = useCallback(newSegments => {
49
+ setSegments(newSegments);
50
+ onChangeSegments?.(newSegments);
51
+ onChangeText?.(segmentsToPlainText(newSegments));
52
+ }, [onChangeSegments, onChangeText]);
53
+
54
+ // ─── Formatting ──────────────────────────────────────────────────────────
55
+
56
+ const formatting = useFormatting({
57
+ segments,
58
+ selection,
59
+ activeStyles,
60
+ onSegmentsChange: updateSegments,
61
+ onActiveStylesChange: setActiveStyles
62
+ });
63
+
64
+ // ─── Text Change Handler ─────────────────────────────────────────────────
65
+
66
+ const handleTextChange = useCallback(newText => {
67
+ const currentSegments = segmentsRef.current;
68
+ const currentSelection = selectionRef.current;
69
+ const currentActiveStyles = currentSelection.start === currentSelection.end ? activeStylesRef.current : getSelectionStyle(currentSegments, currentSelection);
70
+ const newSegments = reconcileTextChange(currentSegments, newText, currentActiveStyles);
71
+ updateSegments(newSegments);
72
+ }, [updateSegments]);
73
+
74
+ // ─── Selection Change Handler ────────────────────────────────────────────
75
+
76
+ const onSelectionChange = useCallback(newSelection => {
77
+ handleSelectionChange(newSelection);
78
+
79
+ // Update active styles based on cursor position
80
+ if (newSelection.start === newSelection.end) {
81
+ const pos = findPositionInSegments(segmentsRef.current, newSelection.start);
82
+ if (segmentsRef.current.length > 0) {
83
+ const seg = segmentsRef.current[pos.segmentIndex];
84
+ setActiveStyles({
85
+ ...seg.styles
86
+ });
87
+ }
88
+ }
89
+ }, [handleSelectionChange]);
90
+
91
+ // ─── Export / Import ─────────────────────────────────────────────────────
92
+
93
+ const getPlainText = useCallback(() => {
94
+ return segmentsToPlainText(segmentsRef.current);
95
+ }, []);
96
+ const exportJSON = useCallback(() => {
97
+ return JSON.parse(JSON.stringify(segmentsRef.current));
98
+ }, []);
99
+ const importJSON = useCallback(newSegments => {
100
+ const safeSegments = newSegments.length > 0 ? newSegments : [createSegment('')];
101
+ updateSegments(safeSegments);
102
+ }, [updateSegments]);
103
+ const clear = useCallback(() => {
104
+ updateSegments([createSegment('')]);
105
+ setActiveStyles({
106
+ ...EMPTY_FORMAT_STYLE
107
+ });
108
+ }, [updateSegments]);
109
+
110
+ // ─── Build Return Value ──────────────────────────────────────────────────
111
+
112
+ const state = {
113
+ segments,
114
+ selection,
115
+ activeStyles
116
+ };
117
+ const actions = {
118
+ toggleFormat: formatting.toggleFormat,
119
+ setStyleProperty: formatting.setStyleProperty,
120
+ setHeading: formatting.setHeading,
121
+ setColor: formatting.setColor,
122
+ setBackgroundColor: formatting.setBackgroundColor,
123
+ setFontSize: formatting.setFontSize,
124
+ handleTextChange,
125
+ handleSelectionChange: onSelectionChange,
126
+ isFormatActive: formatting.isFormatActive,
127
+ getSelectionStyle: formatting.currentSelectionStyle,
128
+ getPlainText,
129
+ exportJSON,
130
+ importJSON,
131
+ clear
132
+ };
133
+ return {
134
+ state,
135
+ actions
136
+ };
137
+ }
138
+ //# sourceMappingURL=useRichText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useCallback","useRef","EMPTY_FORMAT_STYLE","createSegment","segmentsToPlainText","reconcileTextChange","findPositionInSegments","getSelectionStyle","useSelection","useFormatting","useRichText","options","initialSegments","onChangeSegments","onChangeText","segments","setSegments","length","activeStyles","setActiveStyles","selection","handleSelectionChange","segmentsRef","current","selectionRef","activeStylesRef","updateSegments","newSegments","formatting","onSegmentsChange","onActiveStylesChange","handleTextChange","newText","currentSegments","currentSelection","currentActiveStyles","start","end","onSelectionChange","newSelection","pos","seg","segmentIndex","styles","getPlainText","exportJSON","JSON","parse","stringify","importJSON","safeSegments","clear","state","actions","toggleFormat","setStyleProperty","setHeading","setColor","setBackgroundColor","setFontSize","isFormatActive","currentSelectionStyle"],"sourceRoot":"../../../src","sources":["hooks/useRichText.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=useSelection.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/useSelection.d.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import { useState, useCallback, useRef } from 'react';
4
+ /**
5
+ * Hook for tracking TextInput selection state.
6
+ *
7
+ * Returns the current selection and a handler to update it.
8
+ */
9
+ export function useSelection(initialSelection) {
10
+ const [selection, setSelection] = useState(initialSelection ?? {
11
+ start: 0,
12
+ end: 0
13
+ });
14
+
15
+ // Use a ref to avoid stale closures in callbacks
16
+ const selectionRef = useRef(selection);
17
+ selectionRef.current = selection;
18
+ const handleSelectionChange = useCallback(newSelection => {
19
+ setSelection(newSelection);
20
+ }, []);
21
+ const getSelection = useCallback(() => {
22
+ return selectionRef.current;
23
+ }, []);
24
+ const hasSelection = useCallback(() => {
25
+ return selectionRef.current.start !== selectionRef.current.end;
26
+ }, []);
27
+ return {
28
+ selection,
29
+ setSelection,
30
+ handleSelectionChange,
31
+ getSelection,
32
+ hasSelection
33
+ };
34
+ }
35
+ //# sourceMappingURL=useSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useCallback","useRef","useSelection","initialSelection","selection","setSelection","start","end","selectionRef","current","handleSelectionChange","newSelection","getSelection","hasSelection"],"sourceRoot":"../../../src","sources":["hooks/useSelection.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAGrD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,gBAAiC,EAAE;EAC9D,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGN,QAAQ,CACxCI,gBAAgB,IAAI;IAAEG,KAAK,EAAE,CAAC;IAAEC,GAAG,EAAE;EAAE,CACzC,CAAC;;EAED;EACA,MAAMC,YAAY,GAAGP,MAAM,CAACG,SAAS,CAAC;EACtCI,YAAY,CAACC,OAAO,GAAGL,SAAS;EAEhC,MAAMM,qBAAqB,GAAGV,WAAW,CACtCW,YAA4B,IAAK;IAChCN,YAAY,CAACM,YAAY,CAAC;EAC5B,CAAC,EACD,EACF,CAAC;EAED,MAAMC,YAAY,GAAGZ,WAAW,CAAC,MAAsB;IACrD,OAAOQ,YAAY,CAACC,OAAO;EAC7B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,YAAY,GAAGb,WAAW,CAAC,MAAe;IAC9C,OAAOQ,YAAY,CAACC,OAAO,CAACH,KAAK,KAAKE,YAAY,CAACC,OAAO,CAACF,GAAG;EAChE,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLH,SAAS;IACTC,YAAY;IACZK,qBAAqB;IACrBE,YAAY;IACZC;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ export { RichTextInput } from './components/RichTextInput';
4
+ export { OverlayText } from './components/OverlayText';
5
+ export { Toolbar } from './components/Toolbar';
6
+ export { ToolbarButton } from './components/ToolbarButton';
7
+ export { useRichText } from './hooks/useRichText';
8
+ export { useSelection } from './hooks/useSelection';
9
+ export { useFormatting } from './hooks/useFormatting';
10
+ export { RichTextProvider, useRichTextContext } from './context/RichTextContext';
11
+ export { createSegment, segmentsToPlainText, getTotalLength, mergeAdjacentSegments, reconcileTextChange } from './utils/parser';
12
+ export { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isFormatActiveInSelection, getSelectionStyle } from './utils/formatter';
13
+ export { formatStyleToTextStyle, segmentToTextStyle, segmentsToTextStyles } from './utils/styleMapper';
14
+ export { DEFAULT_COLORS, DEFAULT_THEME, DEFAULT_TOOLBAR_ITEMS, DEFAULT_BASE_TEXT_STYLE, HEADING_FONT_SIZES, EMPTY_FORMAT_STYLE } from './constants/defaultStyles';
15
+ //# sourceMappingURL=index.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RichTextInput","OverlayText","Toolbar","ToolbarButton","useRichText","useSelection","useFormatting","RichTextProvider","useRichTextContext","createSegment","segmentsToPlainText","getTotalLength","mergeAdjacentSegments","reconcileTextChange","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","isFormatActiveInSelection","getSelectionStyle","formatStyleToTextStyle","segmentToTextStyle","segmentsToTextStyles","DEFAULT_COLORS","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","DEFAULT_BASE_TEXT_STYLE","HEADING_FONT_SIZES","EMPTY_FORMAT_STYLE"],"sourceRoot":"../../src","sources":["index.d.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,WAAW,QAAQ,qBAAqB;AAEjD,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,aAAa,QAAQ,uBAAuB;AACrD,SAASC,gBAAgB,EAAEC,kBAAkB,QAAS,2BAA2B;AAEjF,SAASC,aAAa,EAAEC,mBAAmB,EAAEC,cAAc,EAAEC,qBAAqB,EAAEC,mBAAmB,QAAS,gBAAgB;AAChI,SAASC,uBAAuB,EAAEC,mBAAmB,EAAEC,gBAAgB,EAAEC,yBAAyB,EAAEC,iBAAiB,QAAS,mBAAmB;AACjJ,SAASC,sBAAsB,EAAEC,kBAAkB,EAAEC,oBAAoB,QAAS,qBAAqB;AACvG,SAASC,cAAc,EAAEC,aAAa,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAEC,kBAAkB,EAAEC,kBAAkB,QAAS,2BAA2B","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ // ─── Components ──────────────────────────────────────────────────────────────
4
+ export { RichTextInput } from './components/RichTextInput';
5
+ export { OverlayText } from './components/OverlayText';
6
+ export { Toolbar } from './components/Toolbar';
7
+ export { ToolbarButton } from './components/ToolbarButton';
8
+
9
+ // ─── Hooks ───────────────────────────────────────────────────────────────────
10
+ export { useRichText } from './hooks/useRichText';
11
+ export { useSelection } from './hooks/useSelection';
12
+ export { useFormatting } from './hooks/useFormatting';
13
+
14
+ // ─── Context ─────────────────────────────────────────────────────────────────
15
+ export { RichTextProvider, useRichTextContext } from './context/RichTextContext';
16
+ // ─── Utilities ───────────────────────────────────────────────────────────────
17
+ export { createSegment, segmentsToPlainText, getTotalLength, mergeAdjacentSegments, reconcileTextChange } from './utils/parser';
18
+ export { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isFormatActiveInSelection, getSelectionStyle } from './utils/formatter';
19
+ export { formatStyleToTextStyle, segmentToTextStyle, segmentsToTextStyles } from './utils/styleMapper';
20
+
21
+ // ─── Constants ───────────────────────────────────────────────────────────────
22
+ export { DEFAULT_COLORS, DEFAULT_THEME, DEFAULT_TOOLBAR_ITEMS, DEFAULT_BASE_TEXT_STYLE, HEADING_FONT_SIZES, EMPTY_FORMAT_STYLE } from './constants/defaultStyles';
23
+
24
+ // ─── Types ───────────────────────────────────────────────────────────────────
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RichTextInput","OverlayText","Toolbar","ToolbarButton","useRichText","useSelection","useFormatting","RichTextProvider","useRichTextContext","createSegment","segmentsToPlainText","getTotalLength","mergeAdjacentSegments","reconcileTextChange","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","isFormatActiveInSelection","getSelectionStyle","formatStyleToTextStyle","segmentToTextStyle","segmentsToTextStyles","DEFAULT_COLORS","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","DEFAULT_BASE_TEXT_STYLE","HEADING_FONT_SIZES","EMPTY_FORMAT_STYLE"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,SAASA,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,aAAa,QAAQ,4BAA4B;;AAE1D;AACA,SAASC,WAAW,QAAQ,qBAAqB;AAEjD,SAASC,YAAY,QAAQ,sBAAsB;AACnD,SAASC,aAAa,QAAQ,uBAAuB;;AAErD;AACA,SACEC,gBAAgB,EAChBC,kBAAkB,QACb,2BAA2B;AAGlC;AACA,SACEC,aAAa,EACbC,mBAAmB,EACnBC,cAAc,EACdC,qBAAqB,EACrBC,mBAAmB,QACd,gBAAgB;AACvB,SACEC,uBAAuB,EACvBC,mBAAmB,EACnBC,gBAAgB,EAChBC,yBAAyB,EACzBC,iBAAiB,QACZ,mBAAmB;AAC1B,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,oBAAoB,QACf,qBAAqB;;AAE5B;AACA,SACEC,cAAc,EACdC,aAAa,EACbC,qBAAqB,EACrBC,uBAAuB,EACvBC,kBAAkB,EAClBC,kBAAkB,QACb,2BAA2B;;AAElC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=index.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.d.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Toggle an inline format (bold, italic, etc.) on the selected range.
5
+ *
6
+ * If the entire selection already has the format, it is removed.
7
+ * Otherwise, it is applied to the entire selection.
8
+ *
9
+ * Returns the new segments array.
10
+ */
11
+
12
+ /**
13
+ * Set a specific style property on the selected range.
14
+ */
15
+
16
+ /**
17
+ * Apply a heading level to the line containing the cursor/selection.
18
+ */
19
+
20
+ /**
21
+ * Checks whether the given format is active across the entire selection.
22
+ */
23
+
24
+ /**
25
+ * Gets the format style that is common across the entire selection.
26
+ * For properties where segments disagree, the value is undefined.
27
+ */
28
+
29
+ export { createSegment } from '../utils/parser';
30
+ //# sourceMappingURL=formatter.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSegment"],"sourceRoot":"../../../src","sources":["utils/formatter.d.ts"],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAASA,aAAa,QAAQ,iBAAiB","ignoreList":[]}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+
3
+ import { createSegment, findPositionInSegments, mergeAdjacentSegments, segmentsToPlainText } from '../utils/parser';
4
+ import { HEADING_FONT_SIZES } from '../constants/defaultStyles';
5
+
6
+ /**
7
+ * Toggle an inline format (bold, italic, etc.) on the selected range.
8
+ *
9
+ * If the entire selection already has the format, it is removed.
10
+ * Otherwise, it is applied to the entire selection.
11
+ *
12
+ * Returns the new segments array.
13
+ */
14
+ export function toggleFormatOnSelection(segments, selection, format) {
15
+ if (selection.start === selection.end) {
16
+ // No selection — return unchanged (active styles handle this case)
17
+ return segments;
18
+ }
19
+ const {
20
+ start,
21
+ end
22
+ } = normalizeSelection(selection);
23
+
24
+ // Extract the selected segments to check current state
25
+ const selectedSegments = extractSegmentsInRange(segments, start, end);
26
+ const allHaveFormat = selectedSegments.every(s => !!s.styles[format]);
27
+
28
+ // Apply or remove the format
29
+ return applyStyleToRange(segments, start, end, {
30
+ [format]: !allHaveFormat
31
+ });
32
+ }
33
+
34
+ /**
35
+ * Set a specific style property on the selected range.
36
+ */
37
+ export function setStyleOnSelection(segments, selection, key, value) {
38
+ if (selection.start === selection.end) {
39
+ return segments;
40
+ }
41
+ const {
42
+ start,
43
+ end
44
+ } = normalizeSelection(selection);
45
+ return applyStyleToRange(segments, start, end, {
46
+ [key]: value
47
+ });
48
+ }
49
+
50
+ /**
51
+ * Apply a heading level to the line containing the cursor/selection.
52
+ */
53
+ export function setHeadingOnLine(segments, selection, level) {
54
+ const plainText = segmentsToPlainText(segments);
55
+ const {
56
+ lineStart,
57
+ lineEnd
58
+ } = getLineRange(plainText, selection.start);
59
+ const headingStyle = {
60
+ heading: level,
61
+ fontSize: HEADING_FONT_SIZES[level],
62
+ bold: level !== 'none' ? true : undefined
63
+ };
64
+ return applyStyleToRange(segments, lineStart, lineEnd, headingStyle);
65
+ }
66
+
67
+ /**
68
+ * Checks whether the given format is active across the entire selection.
69
+ */
70
+ export function isFormatActiveInSelection(segments, selection, format) {
71
+ if (selection.start === selection.end) {
72
+ return false;
73
+ }
74
+ const {
75
+ start,
76
+ end
77
+ } = normalizeSelection(selection);
78
+ const selected = extractSegmentsInRange(segments, start, end);
79
+ return selected.length > 0 && selected.every(s => !!s.styles[format]);
80
+ }
81
+
82
+ /**
83
+ * Gets the format style that is common across the entire selection.
84
+ * For properties where segments disagree, the value is undefined.
85
+ */
86
+ export function getSelectionStyle(segments, selection) {
87
+ if (selection.start === selection.end) {
88
+ // Return style at cursor position
89
+ const pos = findPositionInSegments(segments, selection.start);
90
+ if (segments.length > 0) {
91
+ return {
92
+ ...segments[pos.segmentIndex].styles
93
+ };
94
+ }
95
+ return {};
96
+ }
97
+ const {
98
+ start,
99
+ end
100
+ } = normalizeSelection(selection);
101
+ const selected = extractSegmentsInRange(segments, start, end);
102
+ if (selected.length === 0) return {};
103
+ const result = {
104
+ ...selected[0].styles
105
+ };
106
+ for (let i = 1; i < selected.length; i++) {
107
+ const s = selected[i].styles;
108
+ if (result.bold !== undefined && result.bold !== !!s.bold) result.bold = undefined;
109
+ if (result.italic !== undefined && result.italic !== !!s.italic) result.italic = undefined;
110
+ if (result.underline !== undefined && result.underline !== !!s.underline) result.underline = undefined;
111
+ if (result.strikethrough !== undefined && result.strikethrough !== !!s.strikethrough) result.strikethrough = undefined;
112
+ if (result.code !== undefined && result.code !== !!s.code) result.code = undefined;
113
+ if (result.color !== s.color) result.color = undefined;
114
+ if (result.backgroundColor !== s.backgroundColor) result.backgroundColor = undefined;
115
+ if (result.fontSize !== s.fontSize) result.fontSize = undefined;
116
+ if (result.heading !== s.heading) result.heading = undefined;
117
+ }
118
+ return result;
119
+ }
120
+
121
+ // ─── Internal Helpers ────────────────────────────────────────────────────────
122
+
123
+ /**
124
+ * Normalize selection so start <= end.
125
+ */
126
+ function normalizeSelection(selection) {
127
+ return {
128
+ start: Math.min(selection.start, selection.end),
129
+ end: Math.max(selection.start, selection.end)
130
+ };
131
+ }
132
+
133
+ /**
134
+ * Extract the text segments that fall within [start, end) of the global text.
135
+ */
136
+ function extractSegmentsInRange(segments, start, end) {
137
+ const result = [];
138
+ let pos = 0;
139
+ for (const seg of segments) {
140
+ const segStart = pos;
141
+ const segEnd = pos + seg.text.length;
142
+ if (segEnd <= start) {
143
+ pos = segEnd;
144
+ continue;
145
+ }
146
+ if (segStart >= end) {
147
+ break;
148
+ }
149
+
150
+ // This segment overlaps with [start, end)
151
+ const overlapStart = Math.max(segStart, start);
152
+ const overlapEnd = Math.min(segEnd, end);
153
+ result.push(createSegment(seg.text.slice(overlapStart - segStart, overlapEnd - segStart), seg.styles));
154
+ pos = segEnd;
155
+ }
156
+ return result;
157
+ }
158
+
159
+ /**
160
+ * Apply a partial style to a character range within the segments array.
161
+ * Splits segments at boundaries and applies the style delta to all segments in range.
162
+ */
163
+ function applyStyleToRange(segments, start, end, styleDelta) {
164
+ const result = [];
165
+ let pos = 0;
166
+ for (const seg of segments) {
167
+ const segStart = pos;
168
+ const segEnd = pos + seg.text.length;
169
+ if (segEnd <= start || segStart >= end) {
170
+ // Outside the range — keep as-is
171
+ result.push(createSegment(seg.text, seg.styles));
172
+ } else {
173
+ // Overlaps with range — may need to split
174
+ if (segStart < start) {
175
+ // Portion before the range
176
+ result.push(createSegment(seg.text.slice(0, start - segStart), seg.styles));
177
+ }
178
+
179
+ // The overlapping portion — apply style delta
180
+ const overlapStart = Math.max(segStart, start);
181
+ const overlapEnd = Math.min(segEnd, end);
182
+ const newStyles = {
183
+ ...seg.styles,
184
+ ...styleDelta
185
+ };
186
+ result.push(createSegment(seg.text.slice(overlapStart - segStart, overlapEnd - segStart), newStyles));
187
+ if (segEnd > end) {
188
+ // Portion after the range
189
+ result.push(createSegment(seg.text.slice(end - segStart), seg.styles));
190
+ }
191
+ }
192
+ pos = segEnd;
193
+ }
194
+ return mergeAdjacentSegments(result);
195
+ }
196
+
197
+ /**
198
+ * Get the line start and end positions for the line containing the given position.
199
+ */
200
+ function getLineRange(text, position) {
201
+ let lineStart = position;
202
+ while (lineStart > 0 && text[lineStart - 1] !== '\n') {
203
+ lineStart--;
204
+ }
205
+ let lineEnd = position;
206
+ while (lineEnd < text.length && text[lineEnd] !== '\n') {
207
+ lineEnd++;
208
+ }
209
+ return {
210
+ lineStart,
211
+ lineEnd
212
+ };
213
+ }
214
+
215
+ // Re-export for convenience
216
+ export { createSegment } from '../utils/parser';
217
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSegment","findPositionInSegments","mergeAdjacentSegments","segmentsToPlainText","HEADING_FONT_SIZES","toggleFormatOnSelection","segments","selection","format","start","end","normalizeSelection","selectedSegments","extractSegmentsInRange","allHaveFormat","every","s","styles","applyStyleToRange","setStyleOnSelection","key","value","setHeadingOnLine","level","plainText","lineStart","lineEnd","getLineRange","headingStyle","heading","fontSize","bold","undefined","isFormatActiveInSelection","selected","length","getSelectionStyle","pos","segmentIndex","result","i","italic","underline","strikethrough","code","color","backgroundColor","Math","min","max","seg","segStart","segEnd","text","overlapStart","overlapEnd","push","slice","styleDelta","newStyles","position"],"sourceRoot":"../../../src","sources":["utils/formatter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=parser.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/parser.d.ts"],"mappings":"","ignoreList":[]}