react-native-richify 1.0.3 → 1.0.5

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 (90) hide show
  1. package/lib/commonjs/components/RenderedOutput.js +168 -0
  2. package/lib/commonjs/components/RenderedOutput.js.map +1 -0
  3. package/lib/commonjs/components/RichTextInput.js +196 -52
  4. package/lib/commonjs/components/RichTextInput.js.map +1 -1
  5. package/lib/commonjs/components/Toolbar.js +41 -2
  6. package/lib/commonjs/components/Toolbar.js.map +1 -1
  7. package/lib/commonjs/constants/defaultStyles.js +81 -2
  8. package/lib/commonjs/constants/defaultStyles.js.map +1 -1
  9. package/lib/commonjs/hooks/useFormatting.js +46 -2
  10. package/lib/commonjs/hooks/useFormatting.js.map +1 -1
  11. package/lib/commonjs/hooks/useRichText.js +130 -12
  12. package/lib/commonjs/hooks/useRichText.js.map +1 -1
  13. package/lib/commonjs/index.d.js +19 -0
  14. package/lib/commonjs/index.d.js.map +1 -1
  15. package/lib/commonjs/index.js +19 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/utils/formatter.js +48 -12
  18. package/lib/commonjs/utils/formatter.js.map +1 -1
  19. package/lib/commonjs/utils/parser.js +1 -1
  20. package/lib/commonjs/utils/parser.js.map +1 -1
  21. package/lib/commonjs/utils/serializer.d.js +6 -0
  22. package/lib/commonjs/utils/serializer.d.js.map +1 -0
  23. package/lib/commonjs/utils/serializer.js +259 -0
  24. package/lib/commonjs/utils/serializer.js.map +1 -0
  25. package/lib/commonjs/utils/styleMapper.js +11 -0
  26. package/lib/commonjs/utils/styleMapper.js.map +1 -1
  27. package/lib/module/components/RenderedOutput.js +163 -0
  28. package/lib/module/components/RenderedOutput.js.map +1 -0
  29. package/lib/module/components/RichTextInput.js +198 -55
  30. package/lib/module/components/RichTextInput.js.map +1 -1
  31. package/lib/module/components/Toolbar.js +41 -2
  32. package/lib/module/components/Toolbar.js.map +1 -1
  33. package/lib/module/constants/defaultStyles.js +81 -2
  34. package/lib/module/constants/defaultStyles.js.map +1 -1
  35. package/lib/module/hooks/useFormatting.js +47 -3
  36. package/lib/module/hooks/useFormatting.js.map +1 -1
  37. package/lib/module/hooks/useRichText.js +130 -12
  38. package/lib/module/hooks/useRichText.js.map +1 -1
  39. package/lib/module/index.d.js +1 -0
  40. package/lib/module/index.d.js.map +1 -1
  41. package/lib/module/index.js +1 -0
  42. package/lib/module/index.js.map +1 -1
  43. package/lib/module/utils/formatter.js +46 -12
  44. package/lib/module/utils/formatter.js.map +1 -1
  45. package/lib/module/utils/parser.js +1 -1
  46. package/lib/module/utils/parser.js.map +1 -1
  47. package/lib/module/utils/serializer.d.js +4 -0
  48. package/lib/module/utils/serializer.d.js.map +1 -0
  49. package/lib/module/utils/serializer.js +253 -0
  50. package/lib/module/utils/serializer.js.map +1 -0
  51. package/lib/module/utils/styleMapper.js +11 -0
  52. package/lib/module/utils/styleMapper.js.map +1 -1
  53. package/lib/typescript/src/components/RenderedOutput.d.ts +9 -0
  54. package/lib/typescript/src/components/RenderedOutput.d.ts.map +1 -0
  55. package/lib/typescript/src/components/RichTextInput.d.ts +2 -13
  56. package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
  57. package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
  58. package/lib/typescript/src/constants/defaultStyles.d.ts +3 -0
  59. package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
  60. package/lib/typescript/src/hooks/useFormatting.d.ts +4 -1
  61. package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -1
  62. package/lib/typescript/src/hooks/useRichText.d.ts.map +1 -1
  63. package/lib/typescript/src/index.d.ts +2 -1
  64. package/lib/typescript/src/index.d.ts.map +1 -1
  65. package/lib/typescript/src/types/index.d.ts +112 -1
  66. package/lib/typescript/src/types/index.d.ts.map +1 -1
  67. package/lib/typescript/src/utils/formatter.d.ts +9 -1
  68. package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
  69. package/lib/typescript/src/utils/parser.d.ts.map +1 -1
  70. package/lib/typescript/src/utils/serializer.d.ts +14 -0
  71. package/lib/typescript/src/utils/serializer.d.ts.map +1 -0
  72. package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/RenderedOutput.tsx +231 -0
  75. package/src/components/RichTextInput.d.ts +3 -14
  76. package/src/components/RichTextInput.tsx +291 -56
  77. package/src/components/Toolbar.tsx +54 -2
  78. package/src/constants/defaultStyles.d.ts +3 -0
  79. package/src/constants/defaultStyles.ts +47 -1
  80. package/src/hooks/useFormatting.ts +89 -2
  81. package/src/hooks/useRichText.ts +193 -11
  82. package/src/index.d.ts +2 -1
  83. package/src/index.ts +10 -0
  84. package/src/types/index.d.ts +112 -1
  85. package/src/types/index.ts +123 -1
  86. package/src/utils/formatter.ts +60 -10
  87. package/src/utils/parser.ts +6 -1
  88. package/src/utils/serializer.d.ts +13 -0
  89. package/src/utils/serializer.ts +365 -0
  90. package/src/utils/styleMapper.ts +21 -0
@@ -10,6 +10,9 @@ export const DEFAULT_COLORS = {
10
10
  placeholder: '#9CA3AF',
11
11
  toolbarBackground: '#F9FAFB',
12
12
  toolbarBorder: '#E5E7EB',
13
+ outputBackground: '#F8FAFC',
14
+ outputLabel: '#475569',
15
+ link: '#2563EB',
13
16
  cursor: '#6366F1',
14
17
  activeButtonBg: '#EEF2FF',
15
18
  codeBackground: '#F3F4F6'
@@ -47,7 +50,12 @@ export const EMPTY_FORMAT_STYLE = {
47
50
  color: undefined,
48
51
  backgroundColor: undefined,
49
52
  fontSize: undefined,
50
- heading: undefined
53
+ heading: undefined,
54
+ listType: undefined,
55
+ textAlign: undefined,
56
+ link: undefined,
57
+ imageSrc: undefined,
58
+ imageAlt: undefined
51
59
  };
52
60
 
53
61
  /**
@@ -64,7 +72,7 @@ export const DEFAULT_THEME = {
64
72
  inputStyle: {
65
73
  fontSize: DEFAULT_BASE_TEXT_STYLE.fontSize,
66
74
  lineHeight: DEFAULT_BASE_TEXT_STYLE.lineHeight,
67
- color: 'transparent',
75
+ color: DEFAULT_COLORS.text,
68
76
  paddingHorizontal: 16,
69
77
  paddingVertical: 12,
70
78
  textAlignVertical: 'top'
@@ -83,6 +91,32 @@ export const DEFAULT_THEME = {
83
91
  lineHeight: DEFAULT_BASE_TEXT_STYLE.lineHeight,
84
92
  color: DEFAULT_COLORS.text
85
93
  },
94
+ outputContainerStyle: {
95
+ marginHorizontal: 12,
96
+ marginBottom: 12,
97
+ padding: 12,
98
+ borderRadius: 10,
99
+ borderWidth: 1,
100
+ borderColor: DEFAULT_COLORS.toolbarBorder,
101
+ backgroundColor: DEFAULT_COLORS.outputBackground
102
+ },
103
+ outputLabelStyle: {
104
+ marginBottom: 8,
105
+ fontSize: 12,
106
+ fontWeight: '700',
107
+ letterSpacing: 0.4,
108
+ color: DEFAULT_COLORS.outputLabel,
109
+ textTransform: 'uppercase'
110
+ },
111
+ outputTextStyle: {
112
+ fontSize: 14,
113
+ lineHeight: 20,
114
+ color: DEFAULT_COLORS.text,
115
+ fontFamily: 'monospace'
116
+ },
117
+ renderedOutputStyle: {
118
+ gap: 10
119
+ },
86
120
  toolbarStyle: {
87
121
  flexDirection: 'row',
88
122
  alignItems: 'center',
@@ -125,6 +159,7 @@ export const DEFAULT_THEME = {
125
159
  placeholder: DEFAULT_COLORS.placeholder,
126
160
  toolbarBackground: DEFAULT_COLORS.toolbarBackground,
127
161
  toolbarBorder: DEFAULT_COLORS.toolbarBorder,
162
+ link: DEFAULT_COLORS.link,
128
163
  cursor: DEFAULT_COLORS.cursor
129
164
  }
130
165
  };
@@ -164,5 +199,49 @@ export const DEFAULT_TOOLBAR_ITEMS = [{
164
199
  id: 'h3',
165
200
  label: 'H3',
166
201
  heading: 'h3'
202
+ }, {
203
+ id: 'bullet',
204
+ label: '\u2022',
205
+ listType: 'bullet'
206
+ }, {
207
+ id: 'ordered',
208
+ label: '1.',
209
+ listType: 'ordered'
210
+ }, {
211
+ id: 'link',
212
+ label: 'Link',
213
+ actionType: 'link'
214
+ }, {
215
+ id: 'image',
216
+ label: 'Img',
217
+ actionType: 'image'
218
+ }, {
219
+ id: 'align-left',
220
+ label: 'L',
221
+ textAlign: 'left'
222
+ }, {
223
+ id: 'align-center',
224
+ label: 'C',
225
+ textAlign: 'center'
226
+ }, {
227
+ id: 'align-right',
228
+ label: 'R',
229
+ textAlign: 'right'
230
+ }, {
231
+ id: 'format-markdown',
232
+ label: 'MD',
233
+ outputFormat: 'markdown'
234
+ }, {
235
+ id: 'format-html',
236
+ label: 'HTML',
237
+ outputFormat: 'html'
238
+ }, {
239
+ id: 'preview-literal',
240
+ label: 'Raw',
241
+ outputPreviewMode: 'literal'
242
+ }, {
243
+ id: 'preview-rendered',
244
+ label: 'View',
245
+ outputPreviewMode: 'rendered'
167
246
  }];
168
247
  //# sourceMappingURL=defaultStyles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_COLORS","primary","background","text","placeholder","toolbarBackground","toolbarBorder","cursor","activeButtonBg","codeBackground","HEADING_FONT_SIZES","h1","h2","h3","none","DEFAULT_BASE_TEXT_STYLE","fontSize","lineHeight","color","fontFamily","undefined","EMPTY_FORMAT_STYLE","bold","italic","underline","strikethrough","code","backgroundColor","heading","DEFAULT_THEME","containerStyle","borderWidth","borderColor","borderRadius","overflow","inputStyle","paddingHorizontal","paddingVertical","textAlignVertical","overlayContainerStyle","position","top","left","right","bottom","baseTextStyle","toolbarStyle","flexDirection","alignItems","gap","toolbarButtonStyle","minWidth","justifyContent","toolbarButtonActiveStyle","toolbarButtonTextStyle","fontWeight","toolbarButtonActiveTextStyle","codeStyle","colors","DEFAULT_TOOLBAR_ITEMS","id","label","format"],"sourceRoot":"../../../src","sources":["constants/defaultStyles.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_COLORS","primary","background","text","placeholder","toolbarBackground","toolbarBorder","outputBackground","outputLabel","link","cursor","activeButtonBg","codeBackground","HEADING_FONT_SIZES","h1","h2","h3","none","DEFAULT_BASE_TEXT_STYLE","fontSize","lineHeight","color","fontFamily","undefined","EMPTY_FORMAT_STYLE","bold","italic","underline","strikethrough","code","backgroundColor","heading","listType","textAlign","imageSrc","imageAlt","DEFAULT_THEME","containerStyle","borderWidth","borderColor","borderRadius","overflow","inputStyle","paddingHorizontal","paddingVertical","textAlignVertical","overlayContainerStyle","position","top","left","right","bottom","baseTextStyle","outputContainerStyle","marginHorizontal","marginBottom","padding","outputLabelStyle","fontWeight","letterSpacing","textTransform","outputTextStyle","renderedOutputStyle","gap","toolbarStyle","flexDirection","alignItems","toolbarButtonStyle","minWidth","justifyContent","toolbarButtonActiveStyle","toolbarButtonTextStyle","toolbarButtonActiveTextStyle","codeStyle","colors","DEFAULT_TOOLBAR_ITEMS","id","label","format","actionType","outputFormat","outputPreviewMode"],"sourceRoot":"../../../src","sources":["constants/defaultStyles.ts"],"mappings":";;AAEA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,GAAG;EAC5BC,OAAO,EAAE,SAAS;EAClBC,UAAU,EAAE,SAAS;EACrBC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,SAAS;EACtBC,iBAAiB,EAAE,SAAS;EAC5BC,aAAa,EAAE,SAAS;EACxBC,gBAAgB,EAAE,SAAS;EAC3BC,WAAW,EAAE,SAAS;EACtBC,IAAI,EAAE,SAAS;EACfC,MAAM,EAAE,SAAS;EACjBC,cAAc,EAAE,SAAS;EACzBC,cAAc,EAAE;AAClB,CAAU;;AAEV;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAG;EAChCC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACNC,EAAE,EAAE,EAAE;EACNC,IAAI,EAAE;AACR,CAAU;;AAEV;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAG;EACrCC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,KAAK,EAAErB,cAAc,CAACG,IAAI;EAC1BmB,UAAU,EAAEC,SAAS,CAAE;AACzB,CAAU;;AAEV;AACA;AACA;AACA,OAAO,MAAMC,kBAA+B,GAAG;EAC7CC,IAAI,EAAE,KAAK;EACXC,MAAM,EAAE,KAAK;EACbC,SAAS,EAAE,KAAK;EAChBC,aAAa,EAAE,KAAK;EACpBC,IAAI,EAAE,KAAK;EACXR,KAAK,EAAEE,SAAS;EAChBO,eAAe,EAAEP,SAAS;EAC1BJ,QAAQ,EAAEI,SAAS;EACnBQ,OAAO,EAAER,SAAS;EAClBS,QAAQ,EAAET,SAAS;EACnBU,SAAS,EAAEV,SAAS;EACpBd,IAAI,EAAEc,SAAS;EACfW,QAAQ,EAAEX,SAAS;EACnBY,QAAQ,EAAEZ;AACZ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMa,aAA4B,GAAG;EAC1CC,cAAc,EAAE;IACdC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEvC,cAAc,CAACM,aAAa;IACzCkC,YAAY,EAAE,EAAE;IAChBV,eAAe,EAAE9B,cAAc,CAACE,UAAU;IAC1CuC,QAAQ,EAAE;EACZ,CAAC;EACDC,UAAU,EAAE;IACVvB,QAAQ,EAAED,uBAAuB,CAACC,QAAQ;IAC1CC,UAAU,EAAEF,uBAAuB,CAACE,UAAU;IAC9CC,KAAK,EAAErB,cAAc,CAACG,IAAI;IAC1BwC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE;EACrB,CAAC;EACDC,qBAAqB,EAAE;IACrBC,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTR,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EACnB,CAAC;EACDQ,aAAa,EAAE;IACbjC,QAAQ,EAAED,uBAAuB,CAACC,QAAQ;IAC1CC,UAAU,EAAEF,uBAAuB,CAACE,UAAU;IAC9CC,KAAK,EAAErB,cAAc,CAACG;EACxB,CAAC;EACDkD,oBAAoB,EAAE;IACpBC,gBAAgB,EAAE,EAAE;IACpBC,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE,EAAE;IACXhB,YAAY,EAAE,EAAE;IAChBF,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEvC,cAAc,CAACM,aAAa;IACzCwB,eAAe,EAAE9B,cAAc,CAACO;EAClC,CAAC;EACDkD,gBAAgB,EAAE;IAChBF,YAAY,EAAE,CAAC;IACfpC,QAAQ,EAAE,EAAE;IACZuC,UAAU,EAAE,KAAK;IACjBC,aAAa,EAAE,GAAG;IAClBtC,KAAK,EAAErB,cAAc,CAACQ,WAAW;IACjCoD,aAAa,EAAE;EACjB,CAAC;EACDC,eAAe,EAAE;IACf1C,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,EAAE;IACdC,KAAK,EAAErB,cAAc,CAACG,IAAI;IAC1BmB,UAAU,EAAE;EACd,CAAC;EACDwC,mBAAmB,EAAE;IACnBC,GAAG,EAAE;EACP,CAAC;EACDC,YAAY,EAAE;IACZC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBvB,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE,CAAC;IAClBd,eAAe,EAAE9B,cAAc,CAACK,iBAAiB;IACjDkC,WAAW,EAAEvC,cAAc,CAACM,aAAa;IACzCyD,GAAG,EAAE;EACP,CAAC;EACDI,kBAAkB,EAAE;IAClBxB,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,CAAC;IAClBJ,YAAY,EAAE,CAAC;IACf4B,QAAQ,EAAE,EAAE;IACZF,UAAU,EAAE,QAAQ;IACpBG,cAAc,EAAE;EAClB,CAAC;EACDC,wBAAwB,EAAE;IACxBxC,eAAe,EAAE9B,cAAc,CAACW;EAClC,CAAC;EACD4D,sBAAsB,EAAE;IACtBpD,QAAQ,EAAE,EAAE;IACZuC,UAAU,EAAE,KAAK;IACjBrC,KAAK,EAAErB,cAAc,CAACG;EACxB,CAAC;EACDqE,4BAA4B,EAAE;IAC5BnD,KAAK,EAAErB,cAAc,CAACC;EACxB,CAAC;EACDwE,SAAS,EAAE;IACTnD,UAAU,EAAE,WAAW;IACvBQ,eAAe,EAAE9B,cAAc,CAACY,cAAc;IAC9C+B,iBAAiB,EAAE,CAAC;IACpBH,YAAY,EAAE,CAAC;IACfrB,QAAQ,EAAE;EACZ,CAAC;EACDuD,MAAM,EAAE;IACNzE,OAAO,EAAED,cAAc,CAACC,OAAO;IAC/BC,UAAU,EAAEF,cAAc,CAACE,UAAU;IACrCC,IAAI,EAAEH,cAAc,CAACG,IAAI;IACzBC,WAAW,EAAEJ,cAAc,CAACI,WAAW;IACvCC,iBAAiB,EAAEL,cAAc,CAACK,iBAAiB;IACnDC,aAAa,EAAEN,cAAc,CAACM,aAAa;IAC3CG,IAAI,EAAET,cAAc,CAACS,IAAI;IACzBC,MAAM,EAAEV,cAAc,CAACU;EACzB;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMiE,qBAAoC,GAAG,CAClD;EAAEC,EAAE,EAAE,MAAM;EAAEC,KAAK,EAAE,GAAG;EAAEC,MAAM,EAAE;AAAO,CAAC,EAC1C;EAAEF,EAAE,EAAE,QAAQ;EAAEC,KAAK,EAAE,GAAG;EAAEC,MAAM,EAAE;AAAS,CAAC,EAC9C;EAAEF,EAAE,EAAE,WAAW;EAAEC,KAAK,EAAE,GAAG;EAAEC,MAAM,EAAE;AAAY,CAAC,EACpD;EAAEF,EAAE,EAAE,eAAe;EAAEC,KAAK,EAAE,GAAG;EAAEC,MAAM,EAAE;AAAgB,CAAC,EAC5D;EAAEF,EAAE,EAAE,MAAM;EAAEC,KAAK,EAAE,IAAI;EAAEC,MAAM,EAAE;AAAO,CAAC,EAC3C;EAAEF,EAAE,EAAE,IAAI;EAAEC,KAAK,EAAE,IAAI;EAAE9C,OAAO,EAAE;AAAK,CAAC,EACxC;EAAE6C,EAAE,EAAE,IAAI;EAAEC,KAAK,EAAE,IAAI;EAAE9C,OAAO,EAAE;AAAK,CAAC,EACxC;EAAE6C,EAAE,EAAE,IAAI;EAAEC,KAAK,EAAE,IAAI;EAAE9C,OAAO,EAAE;AAAK,CAAC,EACxC;EAAE6C,EAAE,EAAE,QAAQ;EAAEC,KAAK,EAAE,QAAQ;EAAE7C,QAAQ,EAAE;AAAS,CAAC,EACrD;EAAE4C,EAAE,EAAE,SAAS;EAAEC,KAAK,EAAE,IAAI;EAAE7C,QAAQ,EAAE;AAAU,CAAC,EACnD;EAAE4C,EAAE,EAAE,MAAM;EAAEC,KAAK,EAAE,MAAM;EAAEE,UAAU,EAAE;AAAO,CAAC,EACjD;EAAEH,EAAE,EAAE,OAAO;EAAEC,KAAK,EAAE,KAAK;EAAEE,UAAU,EAAE;AAAQ,CAAC,EAClD;EAAEH,EAAE,EAAE,YAAY;EAAEC,KAAK,EAAE,GAAG;EAAE5C,SAAS,EAAE;AAAO,CAAC,EACnD;EAAE2C,EAAE,EAAE,cAAc;EAAEC,KAAK,EAAE,GAAG;EAAE5C,SAAS,EAAE;AAAS,CAAC,EACvD;EAAE2C,EAAE,EAAE,aAAa;EAAEC,KAAK,EAAE,GAAG;EAAE5C,SAAS,EAAE;AAAQ,CAAC,EACrD;EAAE2C,EAAE,EAAE,iBAAiB;EAAEC,KAAK,EAAE,IAAI;EAAEG,YAAY,EAAE;AAAW,CAAC,EAChE;EAAEJ,EAAE,EAAE,aAAa;EAAEC,KAAK,EAAE,MAAM;EAAEG,YAAY,EAAE;AAAO,CAAC,EAC1D;EAAEJ,EAAE,EAAE,iBAAiB;EAAEC,KAAK,EAAE,KAAK;EAAEI,iBAAiB,EAAE;AAAU,CAAC,EACrE;EAAEL,EAAE,EAAE,kBAAkB;EAAEC,KAAK,EAAE,MAAM;EAAEI,iBAAiB,EAAE;AAAW,CAAC,CACzE","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useCallback } from 'react';
4
- import { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isFormatActiveInSelection, getSelectionStyle } from '../utils/formatter';
4
+ import { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, setListTypeOnLine, setTextAlignOnLine, isFormatActiveInSelection, getSelectionStyle } from '../utils/formatter';
5
5
  /**
6
6
  * Hook that provides formatting commands for the rich text editor.
7
7
  *
@@ -40,9 +40,50 @@ export function useFormatting({
40
40
  }
41
41
  }, [segments, selection, activeStyles, onSegmentsChange, onActiveStylesChange]);
42
42
  const setHeading = useCallback(level => {
43
- const newSegments = setHeadingOnLine(segments, selection, level);
43
+ const currentHeading = selection.start === selection.end ? getSelectionStyle(segments, selection).heading ?? activeStyles.heading : getSelectionStyle(segments, selection).heading;
44
+ const nextHeading = currentHeading === level ? 'none' : level;
45
+ if (selection.start === selection.end) {
46
+ onActiveStylesChange({
47
+ ...activeStyles,
48
+ heading: nextHeading === 'none' ? undefined : nextHeading,
49
+ listType: nextHeading === 'none' ? activeStyles.listType : undefined
50
+ });
51
+ }
52
+ const newSegments = setHeadingOnLine(segments, selection, nextHeading);
44
53
  onSegmentsChange(newSegments);
45
- }, [segments, selection, onSegmentsChange]);
54
+ }, [activeStyles, onActiveStylesChange, onSegmentsChange, segments, selection]);
55
+ const setListType = useCallback(listType => {
56
+ if (selection.start === selection.end) {
57
+ onActiveStylesChange({
58
+ ...activeStyles,
59
+ listType: listType === 'none' ? undefined : listType,
60
+ heading: listType === 'none' ? activeStyles.heading : undefined
61
+ });
62
+ }
63
+ const newSegments = setListTypeOnLine(segments, selection, listType);
64
+ onSegmentsChange(newSegments);
65
+ }, [activeStyles, onActiveStylesChange, onSegmentsChange, segments, selection]);
66
+ const setTextAlign = useCallback(textAlign => {
67
+ if (selection.start === selection.end) {
68
+ onActiveStylesChange({
69
+ ...activeStyles,
70
+ textAlign
71
+ });
72
+ }
73
+ const newSegments = setTextAlignOnLine(segments, selection, textAlign);
74
+ onSegmentsChange(newSegments);
75
+ }, [activeStyles, onActiveStylesChange, onSegmentsChange, segments, selection]);
76
+ const setLink = useCallback(url => {
77
+ if (selection.start === selection.end) {
78
+ onActiveStylesChange({
79
+ ...activeStyles,
80
+ link: url
81
+ });
82
+ } else {
83
+ const newSegments = setStyleOnSelection(segments, selection, 'link', url);
84
+ onSegmentsChange(newSegments);
85
+ }
86
+ }, [segments, selection, activeStyles, onSegmentsChange, onActiveStylesChange]);
46
87
  const setColor = useCallback(color => {
47
88
  setStyleProperty('color', color);
48
89
  }, [setStyleProperty]);
@@ -68,6 +109,9 @@ export function useFormatting({
68
109
  toggleFormat,
69
110
  setStyleProperty,
70
111
  setHeading,
112
+ setListType,
113
+ setTextAlign,
114
+ setLink,
71
115
  setColor,
72
116
  setBackgroundColor,
73
117
  setFontSize,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","isFormatActiveInSelection","getSelectionStyle","useFormatting","segments","selection","activeStyles","onSegmentsChange","onActiveStylesChange","toggleFormat","format","start","end","newSegments","setStyleProperty","key","value","setHeading","level","setColor","color","setBackgroundColor","setFontSize","size","isFormatActive","currentSelectionStyle"],"sourceRoot":"../../../src","sources":["hooks/useFormatting.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","toggleFormatOnSelection","setStyleOnSelection","setHeadingOnLine","setListTypeOnLine","setTextAlignOnLine","isFormatActiveInSelection","getSelectionStyle","useFormatting","segments","selection","activeStyles","onSegmentsChange","onActiveStylesChange","toggleFormat","format","start","end","newSegments","setStyleProperty","key","value","setHeading","level","currentHeading","heading","nextHeading","undefined","listType","setListType","setTextAlign","textAlign","setLink","url","link","setColor","color","setBackgroundColor","setFontSize","size","isFormatActive","currentSelectionStyle"],"sourceRoot":"../../../src","sources":["hooks/useFormatting.ts"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ import { useState, useCallback, useRef } from 'react';
4
4
  import { EMPTY_FORMAT_STYLE } from '../constants/defaultStyles';
5
5
  import { createSegment, segmentsToPlainText, reconcileTextChange, findPositionInSegments } from '../utils/parser';
6
6
  import { getSelectionStyle } from '../utils/formatter';
7
+ import { serializeSegments } from '../utils/serializer';
7
8
  import { useSelection } from '../hooks/useSelection';
8
9
  import { useFormatting } from '../hooks/useFormatting';
9
10
  /**
@@ -42,6 +43,7 @@ export function useRichText(options = {}) {
42
43
  selectionRef.current = selection;
43
44
  const activeStylesRef = useRef(activeStyles);
44
45
  activeStylesRef.current = activeStyles;
46
+ const preserveActiveStylesRef = useRef(false);
45
47
 
46
48
  // ─── Segment Change Handler ──────────────────────────────────────────────
47
49
 
@@ -66,7 +68,7 @@ export function useRichText(options = {}) {
66
68
  const handleTextChange = useCallback(newText => {
67
69
  const currentSegments = segmentsRef.current;
68
70
  const currentSelection = selectionRef.current;
69
- const currentActiveStyles = currentSelection.start === currentSelection.end ? activeStylesRef.current : getSelectionStyle(currentSegments, currentSelection);
71
+ const currentActiveStyles = sanitizeTypingStyles(currentSelection.start === currentSelection.end ? activeStylesRef.current : getSelectionStyle(currentSegments, currentSelection));
70
72
  const newSegments = reconcileTextChange(currentSegments, newText, currentActiveStyles);
71
73
  updateSegments(newSegments);
72
74
  }, [updateSegments]);
@@ -74,16 +76,20 @@ export function useRichText(options = {}) {
74
76
  // ─── Selection Change Handler ────────────────────────────────────────────
75
77
 
76
78
  const onSelectionChange = useCallback(newSelection => {
79
+ const previousSelection = selectionRef.current;
77
80
  handleSelectionChange(newSelection);
81
+ const shouldPreserveActiveStyles = preserveActiveStylesRef.current && previousSelection.start === previousSelection.end && newSelection.start === newSelection.end && newSelection.start >= previousSelection.start && newSelection.start - previousSelection.start <= 1;
82
+ if (shouldPreserveActiveStyles) {
83
+ return;
84
+ }
85
+ preserveActiveStylesRef.current = false;
78
86
 
79
87
  // Update active styles based on cursor position
80
88
  if (newSelection.start === newSelection.end) {
81
89
  const pos = findPositionInSegments(segmentsRef.current, newSelection.start);
82
90
  if (segmentsRef.current.length > 0) {
83
91
  const seg = segmentsRef.current[pos.segmentIndex];
84
- setActiveStyles({
85
- ...seg.styles
86
- });
92
+ setActiveStyles(sanitizeTypingStyles(seg.styles));
87
93
  }
88
94
  }
89
95
  }, [handleSelectionChange]);
@@ -93,19 +99,109 @@ export function useRichText(options = {}) {
93
99
  const getPlainText = useCallback(() => {
94
100
  return segmentsToPlainText(segmentsRef.current);
95
101
  }, []);
102
+ const getOutput = useCallback((format = 'markdown') => {
103
+ return serializeSegments(segmentsRef.current, format);
104
+ }, []);
96
105
  const exportJSON = useCallback(() => {
97
106
  return JSON.parse(JSON.stringify(segmentsRef.current));
98
107
  }, []);
99
108
  const importJSON = useCallback(newSegments => {
100
109
  const safeSegments = newSegments.length > 0 ? newSegments : [createSegment('')];
101
110
  updateSegments(safeSegments);
102
- }, [updateSegments]);
111
+ handleSelectionChange({
112
+ start: 0,
113
+ end: 0
114
+ });
115
+ setActiveStyles({
116
+ ...EMPTY_FORMAT_STYLE
117
+ });
118
+ }, [handleSelectionChange, updateSegments]);
103
119
  const clear = useCallback(() => {
104
120
  updateSegments([createSegment('')]);
121
+ handleSelectionChange({
122
+ start: 0,
123
+ end: 0
124
+ });
105
125
  setActiveStyles({
106
126
  ...EMPTY_FORMAT_STYLE
107
127
  });
108
- }, [updateSegments]);
128
+ preserveActiveStylesRef.current = false;
129
+ }, [handleSelectionChange, updateSegments]);
130
+ const toggleFormat = useCallback(format => {
131
+ if (selectionRef.current.start === selectionRef.current.end) {
132
+ preserveActiveStylesRef.current = true;
133
+ }
134
+ formatting.toggleFormat(format);
135
+ }, [formatting]);
136
+ const setStyleProperty = useCallback((key, value) => {
137
+ if (selectionRef.current.start === selectionRef.current.end) {
138
+ preserveActiveStylesRef.current = true;
139
+ }
140
+ formatting.setStyleProperty(key, value);
141
+ }, [formatting]);
142
+ const setHeading = useCallback(level => {
143
+ if (selectionRef.current.start === selectionRef.current.end) {
144
+ preserveActiveStylesRef.current = true;
145
+ }
146
+ formatting.setHeading(level);
147
+ }, [formatting]);
148
+ const setListType = useCallback(type => {
149
+ if (selectionRef.current.start === selectionRef.current.end) {
150
+ preserveActiveStylesRef.current = true;
151
+ }
152
+ formatting.setListType(type);
153
+ }, [formatting]);
154
+ const setTextAlign = useCallback(align => {
155
+ if (selectionRef.current.start === selectionRef.current.end) {
156
+ preserveActiveStylesRef.current = true;
157
+ }
158
+ formatting.setTextAlign(align);
159
+ }, [formatting]);
160
+ const setLink = useCallback(url => {
161
+ if (selectionRef.current.start === selectionRef.current.end) {
162
+ preserveActiveStylesRef.current = true;
163
+ }
164
+ formatting.setLink(url);
165
+ }, [formatting]);
166
+ const setColor = useCallback(color => {
167
+ if (selectionRef.current.start === selectionRef.current.end) {
168
+ preserveActiveStylesRef.current = true;
169
+ }
170
+ formatting.setColor(color);
171
+ }, [formatting]);
172
+ const setBackgroundColor = useCallback(color => {
173
+ if (selectionRef.current.start === selectionRef.current.end) {
174
+ preserveActiveStylesRef.current = true;
175
+ }
176
+ formatting.setBackgroundColor(color);
177
+ }, [formatting]);
178
+ const setFontSize = useCallback(size => {
179
+ if (selectionRef.current.start === selectionRef.current.end) {
180
+ preserveActiveStylesRef.current = true;
181
+ }
182
+ formatting.setFontSize(size);
183
+ }, [formatting]);
184
+ const insertImage = useCallback((source, options) => {
185
+ const currentSegments = segmentsRef.current;
186
+ const currentSelection = selectionRef.current;
187
+ const plainText = segmentsToPlainText(currentSegments);
188
+ const start = Math.min(currentSelection.start, currentSelection.end);
189
+ const end = Math.max(currentSelection.start, currentSelection.end);
190
+ const placeholder = options?.placeholder ?? buildImagePlaceholder(source, options?.alt);
191
+ const nextText = `${plainText.slice(0, start)}${placeholder}${plainText.slice(end)}`;
192
+ const insertionStyles = sanitizeTypingStyles(start === end ? activeStylesRef.current : getSelectionStyle(currentSegments, currentSelection));
193
+ const nextSegments = reconcileTextChange(currentSegments, nextText, {
194
+ ...insertionStyles,
195
+ imageSrc: source,
196
+ imageAlt: options?.alt
197
+ });
198
+ updateSegments(nextSegments);
199
+ handleSelectionChange({
200
+ start: start + placeholder.length,
201
+ end: start + placeholder.length
202
+ });
203
+ preserveActiveStylesRef.current = false;
204
+ }, [handleSelectionChange, updateSegments]);
109
205
 
110
206
  // ─── Build Return Value ──────────────────────────────────────────────────
111
207
 
@@ -115,16 +211,21 @@ export function useRichText(options = {}) {
115
211
  activeStyles
116
212
  };
117
213
  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,
214
+ toggleFormat,
215
+ setStyleProperty,
216
+ setHeading,
217
+ setListType,
218
+ setTextAlign,
219
+ setLink,
220
+ insertImage,
221
+ setColor,
222
+ setBackgroundColor,
223
+ setFontSize,
124
224
  handleTextChange,
125
225
  handleSelectionChange: onSelectionChange,
126
226
  isFormatActive: formatting.isFormatActive,
127
227
  getSelectionStyle: formatting.currentSelectionStyle,
228
+ getOutput,
128
229
  getPlainText,
129
230
  exportJSON,
130
231
  importJSON,
@@ -135,4 +236,21 @@ export function useRichText(options = {}) {
135
236
  actions
136
237
  };
137
238
  }
239
+ function sanitizeTypingStyles(style) {
240
+ return {
241
+ ...style,
242
+ imageSrc: undefined,
243
+ imageAlt: undefined
244
+ };
245
+ }
246
+ function buildImagePlaceholder(source, alt) {
247
+ if (alt && alt.trim().length > 0) {
248
+ return `[Image: ${alt.trim()}]`;
249
+ }
250
+ const fileName = source.split('/').pop()?.split('?')[0]?.trim();
251
+ if (fileName) {
252
+ return `[Image: ${fileName}]`;
253
+ }
254
+ return '[Image]';
255
+ }
138
256
  //# sourceMappingURL=useRichText.js.map
@@ -1 +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":[]}
1
+ {"version":3,"names":["useState","useCallback","useRef","EMPTY_FORMAT_STYLE","createSegment","segmentsToPlainText","reconcileTextChange","findPositionInSegments","getSelectionStyle","serializeSegments","useSelection","useFormatting","useRichText","options","initialSegments","onChangeSegments","onChangeText","segments","setSegments","length","activeStyles","setActiveStyles","selection","handleSelectionChange","segmentsRef","current","selectionRef","activeStylesRef","preserveActiveStylesRef","updateSegments","newSegments","formatting","onSegmentsChange","onActiveStylesChange","handleTextChange","newText","currentSegments","currentSelection","currentActiveStyles","sanitizeTypingStyles","start","end","onSelectionChange","newSelection","previousSelection","shouldPreserveActiveStyles","pos","seg","segmentIndex","styles","getPlainText","getOutput","format","exportJSON","JSON","parse","stringify","importJSON","safeSegments","clear","toggleFormat","setStyleProperty","key","value","setHeading","level","setListType","type","setTextAlign","align","setLink","url","setColor","color","setBackgroundColor","setFontSize","size","insertImage","source","plainText","Math","min","max","placeholder","buildImagePlaceholder","alt","nextText","slice","insertionStyles","nextSegments","imageSrc","imageAlt","state","actions","isFormatActive","currentSelectionStyle","style","undefined","trim","fileName","split","pop"],"sourceRoot":"../../../src","sources":["hooks/useRichText.ts"],"mappings":"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","ignoreList":[]}
@@ -11,5 +11,6 @@ export { RichTextProvider, useRichTextContext } from './context/RichTextContext'
11
11
  export { createSegment, segmentsToPlainText, getTotalLength, mergeAdjacentSegments, reconcileTextChange } from './utils/parser';
12
12
  export { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isFormatActiveInSelection, getSelectionStyle } from './utils/formatter';
13
13
  export { formatStyleToTextStyle, segmentToTextStyle, segmentsToTextStyles } from './utils/styleMapper';
14
+ export { serializeSegments, segmentsToMarkdown, segmentsToHTML } from './utils/serializer';
14
15
  export { DEFAULT_COLORS, DEFAULT_THEME, DEFAULT_TOOLBAR_ITEMS, DEFAULT_BASE_TEXT_STYLE, HEADING_FONT_SIZES, EMPTY_FORMAT_STYLE } from './constants/defaultStyles';
15
16
  //# sourceMappingURL=index.d.js.map
@@ -1 +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":[]}
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","serializeSegments","segmentsToMarkdown","segmentsToHTML","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,iBAAiB,EAAEC,kBAAkB,EAAEC,cAAc,QAAS,oBAAoB;AAC3F,SAASC,cAAc,EAAEC,aAAa,EAAEC,qBAAqB,EAAEC,uBAAuB,EAAEC,kBAAkB,EAAEC,kBAAkB,QAAS,2BAA2B","ignoreList":[]}
@@ -17,6 +17,7 @@ export { RichTextProvider, useRichTextContext } from './context/RichTextContext'
17
17
  export { createSegment, segmentsToPlainText, getTotalLength, mergeAdjacentSegments, reconcileTextChange } from './utils/parser';
18
18
  export { toggleFormatOnSelection, setStyleOnSelection, setHeadingOnLine, isFormatActiveInSelection, getSelectionStyle } from './utils/formatter';
19
19
  export { formatStyleToTextStyle, segmentToTextStyle, segmentsToTextStyles } from './utils/styleMapper';
20
+ export { serializeSegments, segmentsToMarkdown, segmentsToHTML } from './utils/serializer';
20
21
 
21
22
  // ─── Constants ───────────────────────────────────────────────────────────────
22
23
  export { DEFAULT_COLORS, DEFAULT_THEME, DEFAULT_TOOLBAR_ITEMS, DEFAULT_BASE_TEXT_STYLE, HEADING_FONT_SIZES, EMPTY_FORMAT_STYLE } from './constants/defaultStyles';
@@ -1 +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":[]}
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","serializeSegments","segmentsToMarkdown","segmentsToHTML","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;AAC5B,SACEC,iBAAiB,EACjBC,kBAAkB,EAClBC,cAAc,QACT,oBAAoB;;AAE3B;AACA,SACEC,cAAc,EACdC,aAAa,EACbC,qBAAqB,EACrBC,uBAAuB,EACvBC,kBAAkB,EAClBC,kBAAkB,QACb,2BAA2B;;AAElC","ignoreList":[]}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  import { createSegment, findPositionInSegments, mergeAdjacentSegments, segmentsToPlainText } from '../utils/parser';
4
- import { HEADING_FONT_SIZES } from '../constants/defaultStyles';
5
4
 
6
5
  /**
7
6
  * Toggle an inline format (bold, italic, etc.) on the selected range.
@@ -51,17 +50,29 @@ export function setStyleOnSelection(segments, selection, key, value) {
51
50
  * Apply a heading level to the line containing the cursor/selection.
52
51
  */
53
52
  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);
53
+ return setLineStyleOnSelection(segments, selection, {
54
+ heading: level === 'none' ? undefined : level,
55
+ listType: level === 'none' ? undefined : undefined
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Apply a list type to the lines containing the cursor/selection.
61
+ */
62
+ export function setListTypeOnLine(segments, selection, listType) {
63
+ return setLineStyleOnSelection(segments, selection, {
64
+ listType: listType === 'none' ? undefined : listType,
65
+ heading: listType === 'none' ? undefined : undefined
66
+ });
67
+ }
68
+
69
+ /**
70
+ * Apply text alignment to the lines containing the cursor/selection.
71
+ */
72
+ export function setTextAlignOnLine(segments, selection, textAlign) {
73
+ return setLineStyleOnSelection(segments, selection, {
74
+ textAlign
75
+ });
65
76
  }
66
77
 
67
78
  /**
@@ -114,6 +125,11 @@ export function getSelectionStyle(segments, selection) {
114
125
  if (result.backgroundColor !== s.backgroundColor) result.backgroundColor = undefined;
115
126
  if (result.fontSize !== s.fontSize) result.fontSize = undefined;
116
127
  if (result.heading !== s.heading) result.heading = undefined;
128
+ if (result.listType !== s.listType) result.listType = undefined;
129
+ if (result.textAlign !== s.textAlign) result.textAlign = undefined;
130
+ if (result.link !== s.link) result.link = undefined;
131
+ if (result.imageSrc !== s.imageSrc) result.imageSrc = undefined;
132
+ if (result.imageAlt !== s.imageAlt) result.imageAlt = undefined;
117
133
  }
118
134
  return result;
119
135
  }
@@ -193,6 +209,14 @@ function applyStyleToRange(segments, start, end, styleDelta) {
193
209
  }
194
210
  return mergeAdjacentSegments(result);
195
211
  }
212
+ function setLineStyleOnSelection(segments, selection, styleDelta) {
213
+ const plainText = segmentsToPlainText(segments);
214
+ const {
215
+ lineStart,
216
+ lineEnd
217
+ } = getSelectionLineRange(plainText, selection);
218
+ return applyStyleToRange(segments, lineStart, lineEnd, styleDelta);
219
+ }
196
220
 
197
221
  /**
198
222
  * Get the line start and end positions for the line containing the given position.
@@ -211,6 +235,16 @@ function getLineRange(text, position) {
211
235
  lineEnd
212
236
  };
213
237
  }
238
+ function getSelectionLineRange(text, selection) {
239
+ const normalized = normalizeSelection(selection);
240
+ const lineStart = getLineRange(text, normalized.start).lineStart;
241
+ const effectiveEnd = normalized.end > normalized.start ? normalized.end - 1 : normalized.end;
242
+ const lineEnd = getLineRange(text, effectiveEnd).lineEnd;
243
+ return {
244
+ lineStart,
245
+ lineEnd
246
+ };
247
+ }
214
248
 
215
249
  // Re-export for convenience
216
250
  export { createSegment } from '../utils/parser';