@herca/rn-kit 0.1.54 → 0.1.56
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.
- package/lib/module/TextEditor/TextEditor.js +155 -101
- package/lib/module/TextEditor/TextEditor.js.map +1 -1
- package/lib/module/Ui/Footer.js.map +1 -1
- package/lib/typescript/src/TextEditor/TextEditor.d.ts.map +1 -1
- package/lib/typescript/src/Ui/Footer.d.ts +2 -2
- package/lib/typescript/src/Ui/Footer.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TextEditor/TextEditor.tsx +181 -122
- package/src/Ui/Footer.tsx +7 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
4
|
-
import { Alert, Dimensions, Keyboard, KeyboardAvoidingView, Platform,
|
|
4
|
+
import { Alert, Dimensions, Keyboard, KeyboardAvoidingView, Platform, ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
5
5
|
import { WebView } from 'react-native-webview';
|
|
6
6
|
import BottomSheet from "../BottomSheet/BottomSheet.js";
|
|
7
7
|
import Button from "../Button/Button.js";
|
|
@@ -10,6 +10,7 @@ import Icon from "../Icon/index.js";
|
|
|
10
10
|
import Input from "../Input/Input.js";
|
|
11
11
|
import LabelForm from "../LabelForm/LabelForm.js";
|
|
12
12
|
import Typography from "../Typography/Typography.js";
|
|
13
|
+
import Footer from "../Ui/Footer.js";
|
|
13
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
15
|
const TextEditor = /*#__PURE__*/forwardRef(({
|
|
15
16
|
label,
|
|
@@ -29,7 +30,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
29
30
|
saveLinkButtonText = 'Simpan',
|
|
30
31
|
cancelLinkButtonText = 'Batal'
|
|
31
32
|
}, ref) => {
|
|
32
|
-
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
33
33
|
const [showToolbar, setShowToolbar] = useState(false);
|
|
34
34
|
const [activeFormats, setActiveFormats] = useState(new Set());
|
|
35
35
|
const [characterCount, setCharacterCount] = useState(0);
|
|
@@ -39,9 +39,12 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
39
39
|
const [isEditingLink, setIsEditingLink] = useState(false);
|
|
40
40
|
const webviewRef = useRef(null);
|
|
41
41
|
const inputUrlRef = useRef(null);
|
|
42
|
+
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
43
|
+
|
|
44
|
+
// Sekarang handleOnChange hanya dipanggil sebagai fallback
|
|
42
45
|
const handleOnChange = data => {
|
|
43
|
-
//
|
|
44
|
-
const textOnly = data.replace(/<[^>]*>/g, '');
|
|
46
|
+
// Fallback jika message bukan JSON
|
|
47
|
+
const textOnly = data.replace(/<[^>]*>/g, '').trim();
|
|
45
48
|
setCharacterCount(textOnly.length);
|
|
46
49
|
if (maxLength && textOnly.length > maxLength) {
|
|
47
50
|
return;
|
|
@@ -91,6 +94,7 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
91
94
|
width: 99.9%;
|
|
92
95
|
height: 100%;
|
|
93
96
|
overflow-x: hidden;
|
|
97
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
94
98
|
}
|
|
95
99
|
#editor {
|
|
96
100
|
height: 100%;
|
|
@@ -148,13 +152,29 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
148
152
|
editor.classList.remove('placeholder');
|
|
149
153
|
}
|
|
150
154
|
|
|
155
|
+
// Kirim initial character count saat load
|
|
156
|
+
setTimeout(() => {
|
|
157
|
+
const charCount = editor.textContent.trim().length;
|
|
158
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
159
|
+
type: 'initialCount',
|
|
160
|
+
characterCount: charCount
|
|
161
|
+
}));
|
|
162
|
+
}, 100);
|
|
163
|
+
|
|
151
164
|
editor.addEventListener("input", () => {
|
|
152
165
|
if (editor.textContent.trim()) {
|
|
153
166
|
editor.classList.remove('placeholder');
|
|
154
167
|
} else {
|
|
155
168
|
editor.classList.add('placeholder');
|
|
156
169
|
}
|
|
157
|
-
|
|
170
|
+
|
|
171
|
+
// Kirim HTML dan character count
|
|
172
|
+
const charCount = editor.textContent.trim().length;
|
|
173
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
174
|
+
type: 'content',
|
|
175
|
+
html: editor.innerHTML,
|
|
176
|
+
characterCount: charCount
|
|
177
|
+
}));
|
|
158
178
|
});
|
|
159
179
|
|
|
160
180
|
editor.addEventListener("focus", () => {
|
|
@@ -277,7 +297,14 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
277
297
|
range.collapse(true);
|
|
278
298
|
selection.removeAllRanges();
|
|
279
299
|
selection.addRange(range);
|
|
280
|
-
|
|
300
|
+
|
|
301
|
+
// Update content dan character count
|
|
302
|
+
const charCount = editor.textContent.trim().length;
|
|
303
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
304
|
+
type: 'content',
|
|
305
|
+
html: editor.innerHTML,
|
|
306
|
+
characterCount: charCount
|
|
307
|
+
}));
|
|
281
308
|
return;
|
|
282
309
|
}
|
|
283
310
|
}
|
|
@@ -298,7 +325,14 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
298
325
|
selection.removeAllRanges();
|
|
299
326
|
selection.addRange(range);
|
|
300
327
|
}
|
|
301
|
-
|
|
328
|
+
|
|
329
|
+
// Update content dan character count
|
|
330
|
+
const charCount = editor.textContent.trim().length;
|
|
331
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
332
|
+
type: 'content',
|
|
333
|
+
html: editor.innerHTML,
|
|
334
|
+
characterCount: charCount
|
|
335
|
+
}));
|
|
302
336
|
} else {
|
|
303
337
|
editor.focus();
|
|
304
338
|
document.execCommand(command, false, null);
|
|
@@ -323,32 +357,22 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
323
357
|
if (webviewRef.current) {
|
|
324
358
|
if (Platform.OS === 'ios') {
|
|
325
359
|
webviewRef.current.injectJavaScript(`
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
if (document.queryCommandState('italic')) formats.push('italic');
|
|
330
|
-
if (document.queryCommandState('underline')) formats.push('underline');
|
|
331
|
-
if (document.queryCommandState('strikeThrough')) formats.push('strikeThrough');
|
|
332
|
-
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
333
|
-
type: 'formats',
|
|
334
|
-
formats: formats
|
|
335
|
-
}));
|
|
336
|
-
true;
|
|
337
|
-
`);
|
|
360
|
+
document.execCommand('${command}', false, '');
|
|
361
|
+
true; //di ios harus biar berfunsi boldnya
|
|
362
|
+
`);
|
|
338
363
|
} else {
|
|
339
364
|
webviewRef.current.postMessage(command);
|
|
340
365
|
}
|
|
341
366
|
}
|
|
342
367
|
};
|
|
343
368
|
const openLinkModal = () => {
|
|
344
|
-
|
|
369
|
+
setShowLinkModal(true);
|
|
345
370
|
if (webviewRef.current) {
|
|
346
371
|
webviewRef.current.postMessage('getSelectedText');
|
|
347
372
|
}
|
|
348
|
-
setShowLinkModal(true);
|
|
349
373
|
setTimeout(() => {
|
|
350
374
|
inputUrlRef.current?.focus();
|
|
351
|
-
},
|
|
375
|
+
}, 350);
|
|
352
376
|
};
|
|
353
377
|
const insertLink = () => {
|
|
354
378
|
if (!linkUrl.trim()) {
|
|
@@ -356,7 +380,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
356
380
|
return;
|
|
357
381
|
}
|
|
358
382
|
let finalUrl = linkUrl.trim();
|
|
359
|
-
// Add https:// if no protocol
|
|
360
383
|
if (!finalUrl.match(/^https?:\/\//i)) {
|
|
361
384
|
finalUrl = 'https://' + finalUrl;
|
|
362
385
|
}
|
|
@@ -368,61 +391,71 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
368
391
|
if (webviewRef.current) {
|
|
369
392
|
if (Platform.OS === 'ios') {
|
|
370
393
|
webviewRef.current.injectJavaScript(`
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if (selection && selection.rangeCount > 0) {
|
|
377
|
-
const range = selection.getRangeAt(0);
|
|
394
|
+
const linkData = ${linkData};
|
|
395
|
+
const editor = document.getElementById('editor');
|
|
396
|
+
editor.focus();
|
|
397
|
+
const selection = window.getSelection();
|
|
378
398
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
let linkElement = null;
|
|
382
|
-
let node = range.startContainer;
|
|
399
|
+
if (selection && selection.rangeCount > 0) {
|
|
400
|
+
const range = selection.getRangeAt(0);
|
|
383
401
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
break;
|
|
388
|
-
}
|
|
389
|
-
node = node.parentNode;
|
|
390
|
-
}
|
|
402
|
+
if (linkData.isExisting) {
|
|
403
|
+
let linkElement = null;
|
|
404
|
+
let node = range.startContainer;
|
|
391
405
|
|
|
392
|
-
|
|
393
|
-
|
|
406
|
+
while (node && node !== editor) {
|
|
407
|
+
if (node.nodeName === 'A') {
|
|
408
|
+
linkElement = node;
|
|
409
|
+
break;
|
|
394
410
|
}
|
|
411
|
+
node = node.parentNode;
|
|
412
|
+
}
|
|
395
413
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
linkElement.textContent = linkData.text;
|
|
399
|
-
range.setStartAfter(linkElement);
|
|
400
|
-
range.collapse(true);
|
|
401
|
-
selection.removeAllRanges();
|
|
402
|
-
selection.addRange(range);
|
|
403
|
-
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
404
|
-
true;
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
414
|
+
if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
|
|
415
|
+
linkElement = range.commonAncestorContainer.querySelector('a');
|
|
407
416
|
}
|
|
408
417
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
418
|
+
if (linkElement) {
|
|
419
|
+
linkElement.href = linkData.url;
|
|
420
|
+
linkElement.textContent = linkData.text;
|
|
421
|
+
range.setStartAfter(linkElement);
|
|
422
|
+
range.collapse(true);
|
|
423
|
+
selection.removeAllRanges();
|
|
424
|
+
selection.addRange(range);
|
|
425
|
+
|
|
426
|
+
const charCount = editor.textContent.trim().length;
|
|
427
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
428
|
+
type: 'content',
|
|
429
|
+
html: editor.innerHTML,
|
|
430
|
+
characterCount: charCount
|
|
431
|
+
}));
|
|
432
|
+
true;
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
422
435
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
436
|
+
|
|
437
|
+
const link = document.createElement('a');
|
|
438
|
+
link.href = linkData.url;
|
|
439
|
+
link.textContent = linkData.text;
|
|
440
|
+
link.target = '_blank';
|
|
441
|
+
range.deleteContents();
|
|
442
|
+
range.insertNode(link);
|
|
443
|
+
const space = document.createTextNode(' ');
|
|
444
|
+
link.parentNode.insertBefore(space, link.nextSibling);
|
|
445
|
+
range.setStartAfter(space);
|
|
446
|
+
range.collapse(true);
|
|
447
|
+
selection.removeAllRanges();
|
|
448
|
+
selection.addRange(range);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const charCount = editor.textContent.trim().length;
|
|
452
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
453
|
+
type: 'content',
|
|
454
|
+
html: editor.innerHTML,
|
|
455
|
+
characterCount: charCount
|
|
456
|
+
}));
|
|
457
|
+
true;
|
|
458
|
+
`);
|
|
426
459
|
} else {
|
|
427
460
|
webviewRef.current.postMessage('insertLink:' + linkData);
|
|
428
461
|
}
|
|
@@ -443,38 +476,57 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
443
476
|
try {
|
|
444
477
|
const parsed = JSON.parse(data);
|
|
445
478
|
if (parsed.type === 'formats') {
|
|
446
|
-
|
|
479
|
+
requestAnimationFrame(() => {
|
|
480
|
+
setActiveFormats(new Set(parsed.formats));
|
|
481
|
+
});
|
|
447
482
|
} else if (parsed.type === 'focus') {
|
|
448
|
-
|
|
483
|
+
requestAnimationFrame(() => {
|
|
484
|
+
onFocus?.();
|
|
485
|
+
});
|
|
449
486
|
} else if (parsed.type === 'blur') {
|
|
450
|
-
|
|
487
|
+
requestAnimationFrame(() => {
|
|
488
|
+
onBlur?.();
|
|
489
|
+
});
|
|
451
490
|
} else if (parsed.type === 'selectedText') {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
491
|
+
requestAnimationFrame(() => {
|
|
492
|
+
setLinkText(parsed.text);
|
|
493
|
+
const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
|
|
494
|
+
setLinkUrl(cleanUrl);
|
|
495
|
+
setIsEditingLink(parsed.isExisting || false);
|
|
496
|
+
});
|
|
497
|
+
} else if (parsed.type === 'initialCount') {
|
|
498
|
+
// Set initial character count saat pertama load
|
|
499
|
+
setCharacterCount(parsed.characterCount);
|
|
500
|
+
} else if (parsed.type === 'content') {
|
|
501
|
+
// Update character count dari WebView
|
|
502
|
+
setCharacterCount(parsed.characterCount);
|
|
503
|
+
|
|
504
|
+
// Cek maxLength
|
|
505
|
+
if (maxLength && parsed.characterCount > maxLength) {
|
|
506
|
+
// Optional: bisa tambahkan alert atau prevent
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
onChange?.(parsed.html);
|
|
457
510
|
}
|
|
458
511
|
} catch {
|
|
459
|
-
//
|
|
512
|
+
// Fallback ke cara lama jika bukan JSON (untuk backward compatibility)
|
|
460
513
|
handleOnChange(data);
|
|
461
514
|
}
|
|
462
515
|
};
|
|
463
516
|
useEffect(() => {
|
|
464
517
|
const showSub = Keyboard.addListener('keyboardDidShow', e => {
|
|
465
|
-
setKeyboardHeight(e.endCoordinates.height - 35);
|
|
466
518
|
setShowToolbar(true);
|
|
519
|
+
setKeyboardHeight(e.endCoordinates.height);
|
|
467
520
|
});
|
|
468
521
|
const hideSub = Keyboard.addListener('keyboardDidHide', () => {
|
|
469
|
-
setKeyboardHeight(0);
|
|
470
522
|
setShowToolbar(false);
|
|
523
|
+
setKeyboardHeight(0);
|
|
471
524
|
});
|
|
472
525
|
return () => {
|
|
473
526
|
showSub.remove();
|
|
474
527
|
hideSub.remove();
|
|
475
528
|
};
|
|
476
529
|
}, []);
|
|
477
|
-
const gap = Platform.OS === 'ios' ? 200 : 185;
|
|
478
530
|
const isFormatActive = format => activeFormats.has(format);
|
|
479
531
|
const toolbarButtons = [{
|
|
480
532
|
command: 'bold',
|
|
@@ -556,24 +608,6 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
556
608
|
weight: "medium",
|
|
557
609
|
children: [characterCount, "/", maxLength]
|
|
558
610
|
})]
|
|
559
|
-
}) : null, showToolbar ? /*#__PURE__*/_jsx(SafeAreaView, {
|
|
560
|
-
style: [styles.toolbar, {
|
|
561
|
-
top: Dimensions.get('screen').height - keyboardHeight - gap
|
|
562
|
-
}],
|
|
563
|
-
children: /*#__PURE__*/_jsx(ScrollView, {
|
|
564
|
-
horizontal: true,
|
|
565
|
-
showsHorizontalScrollIndicator: false,
|
|
566
|
-
contentContainerStyle: styles.toolbarContent,
|
|
567
|
-
children: toolbarButtons.map(button => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
568
|
-
onPress: () => button.isSpecial ? openLinkModal() : formatText(button.command),
|
|
569
|
-
style: [styles.toolButton, isFormatActive(button.command) && styles.toolButtonActive],
|
|
570
|
-
children: /*#__PURE__*/_jsx(Icon, {
|
|
571
|
-
name: button.icon,
|
|
572
|
-
size: 20,
|
|
573
|
-
color: isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
574
|
-
})
|
|
575
|
-
}, button.command))
|
|
576
|
-
})
|
|
577
611
|
}) : null, /*#__PURE__*/_jsxs(BottomSheet, {
|
|
578
612
|
isOpen: showLinkModal,
|
|
579
613
|
onClose: () => setShowLinkModal(false),
|
|
@@ -613,6 +647,24 @@ const TextEditor = /*#__PURE__*/forwardRef(({
|
|
|
613
647
|
})
|
|
614
648
|
})]
|
|
615
649
|
})]
|
|
650
|
+
}), showToolbar && /*#__PURE__*/_jsx(Footer, {
|
|
651
|
+
style: [styles.toolbar, {
|
|
652
|
+
bottom: Platform.OS === 'android' && Platform.Version < 35 ? keyboardHeight - keyboardHeight : keyboardHeight
|
|
653
|
+
}],
|
|
654
|
+
children: /*#__PURE__*/_jsx(ScrollView, {
|
|
655
|
+
horizontal: true,
|
|
656
|
+
showsHorizontalScrollIndicator: false,
|
|
657
|
+
contentContainerStyle: styles.toolbarContent,
|
|
658
|
+
children: toolbarButtons.map(button => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
659
|
+
onPress: () => button.isSpecial ? openLinkModal() : formatText(button.command),
|
|
660
|
+
style: [styles.toolButton, isFormatActive(button.command) && styles.toolButtonActive],
|
|
661
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
662
|
+
name: button.icon,
|
|
663
|
+
size: 20,
|
|
664
|
+
color: isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
665
|
+
})
|
|
666
|
+
}, button.command))
|
|
667
|
+
})
|
|
616
668
|
})]
|
|
617
669
|
});
|
|
618
670
|
});
|
|
@@ -646,7 +698,6 @@ const styles = StyleSheet.create({
|
|
|
646
698
|
backgroundColor: '#fff',
|
|
647
699
|
paddingVertical: 8,
|
|
648
700
|
position: 'absolute',
|
|
649
|
-
left: -24,
|
|
650
701
|
width: Dimensions.get('screen').width,
|
|
651
702
|
alignItems: 'center'
|
|
652
703
|
},
|
|
@@ -679,6 +730,9 @@ const styles = StyleSheet.create({
|
|
|
679
730
|
},
|
|
680
731
|
flex1: {
|
|
681
732
|
flex: 1
|
|
733
|
+
},
|
|
734
|
+
mt10p: {
|
|
735
|
+
marginTop: '10%'
|
|
682
736
|
}
|
|
683
737
|
});
|
|
684
738
|
//# sourceMappingURL=TextEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Alert","Dimensions","Keyboard","KeyboardAvoidingView","Platform","SafeAreaView","ScrollView","StyleSheet","TouchableOpacity","View","WebView","BottomSheet","Button","Color","Icon","Input","LabelForm","Typography","jsx","_jsx","jsxs","_jsxs","TextEditor","label","hasError","hint","onChange","height","initialValue","placeholder","maxLength","onFocus","onBlur","inputLinkTextPlacholder","inputLinkUrlPlacholder","inputLabelLinkText","inputLabelLinkUrl","saveLinkButtonText","cancelLinkButtonText","ref","keyboardHeight","setKeyboardHeight","showToolbar","setShowToolbar","activeFormats","setActiveFormats","Set","characterCount","setCharacterCount","showLinkModal","setShowLinkModal","linkText","setLinkText","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","webviewRef","inputUrlRef","handleOnChange","data","textOnly","replace","length","getContent","current","postMessage","setContent","html","escapedHtml","injectJavaScript","clearContent","htmlEditor","gray","formatText","command","OS","openLinkModal","setTimeout","focus","insertLink","trim","alert","finalUrl","match","linkData","JSON","stringify","text","url","isExisting","closeLinkModal","handleWebViewMessage","event","nativeEvent","parsed","parse","type","formats","cleanUrl","showSub","addListener","e","endCoordinates","hideSub","remove","gap","isFormatActive","format","has","toolbarButtons","icon","isSpecial","style","styles","container","children","title","editorWrapper","minHeight","behavior","undefined","originWhitelist","source","onMessage","webview","javaScriptEnabled","domStorageEnabled","mixedContentMode","allowUniversalAccessFromFileURLs","allowFileAccess","scrollEnabled","hintContainer","color","danger","variant","weight","toolbar","top","get","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","toolbarContent","map","button","onPress","toolButton","toolButtonActive","name","size","isOpen","onClose","modalBody","value","onChangeText","autoCapitalize","keyboardType","modalActions","flex1","displayName","create","backgroundColor","position","flex","borderWidth","borderColor","borderRadius","overflow","paddingVertical","paddingHorizontal","flexDirection","justifyContent","alignItems","borderTopWidth","left","width","padding","marginHorizontal","minWidth","primary","marginTop"],"sourceRoot":"../../../src","sources":["TextEditor/TextEditor.tsx"],"mappings":"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AACA;AACA;AACA;AACA;AACA,wBAAwB3C,WAAW;AACnC,qBAAqBhB,KAAK,CAAC4D,IAAI,CAAC,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE7C,YAAY;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;EAEC,MAAM8C,UAAU,GAAIC,OAAe,IAAK;IACtC,IAAIlB,UA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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Alert","Dimensions","Keyboard","KeyboardAvoidingView","Platform","ScrollView","StyleSheet","TouchableOpacity","View","WebView","BottomSheet","Button","Color","Icon","Input","LabelForm","Typography","Footer","jsx","_jsx","jsxs","_jsxs","TextEditor","label","hasError","hint","onChange","height","initialValue","placeholder","maxLength","onFocus","onBlur","inputLinkTextPlacholder","inputLinkUrlPlacholder","inputLabelLinkText","inputLabelLinkUrl","saveLinkButtonText","cancelLinkButtonText","ref","showToolbar","setShowToolbar","activeFormats","setActiveFormats","Set","characterCount","setCharacterCount","showLinkModal","setShowLinkModal","linkText","setLinkText","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","webviewRef","inputUrlRef","keyboardHeight","setKeyboardHeight","handleOnChange","data","textOnly","replace","trim","length","getContent","current","postMessage","setContent","html","escapedHtml","injectJavaScript","clearContent","htmlEditor","gray","formatText","command","OS","openLinkModal","setTimeout","focus","insertLink","alert","finalUrl","match","linkData","JSON","stringify","text","url","isExisting","closeLinkModal","handleWebViewMessage","event","nativeEvent","parsed","parse","type","requestAnimationFrame","formats","cleanUrl","showSub","addListener","e","endCoordinates","hideSub","remove","isFormatActive","format","has","toolbarButtons","icon","isSpecial","style","styles","container","children","title","editorWrapper","minHeight","behavior","undefined","originWhitelist","source","onMessage","webview","javaScriptEnabled","domStorageEnabled","mixedContentMode","allowUniversalAccessFromFileURLs","allowFileAccess","scrollEnabled","hintContainer","color","danger","variant","weight","isOpen","onClose","modalBody","value","onChangeText","autoCapitalize","keyboardType","modalActions","flex1","onPress","toolbar","bottom","Version","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","toolbarContent","map","button","toolButton","toolButtonActive","name","size","displayName","create","backgroundColor","gap","position","flex","borderWidth","borderColor","borderRadius","overflow","paddingVertical","paddingHorizontal","flexDirection","justifyContent","alignItems","borderTopWidth","width","get","padding","marginHorizontal","minWidth","primary","marginTop","mt10p"],"sourceRoot":"../../../src","sources":["TextEditor/TextEditor.tsx"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB5C,WAAW;AACnC,qBAAqBjB,KAAK,CAAC8D,IAAI,CAAC,GAAG,CAAC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE9C,YAAY;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;EAEC,MAAM+C,UAAU,GAAIC,OAAe,IAAK;IACtC,IAAIrB,UAAU,CAACW,OAAO,EAAE;MACtB,IAAI9D,QAAQ,CAACyE,EAAE,KAAK,KAAK,EAAE;QACzBtB,UAAU,CAACW,OAAO,CAACK,gBAAgB,CAAC;AAC9C,oCAAoCK,OAAO;AAC3C;AACA,WAAW,CAAC;MACJ,CAAC,MAAM;QACLrB,UAAU,CAACW,OAAO,CAACC,WAAW,CAACS,OAAO,CAAC;MACzC;IACF;EACF,CAAC;EAED,MAAME,aAAa,GAAGA,CAAA,KAAM;IAC1B9B,gBAAgB,CAAC,IAAI,CAAC;IACtB,IAAIO,UAAU,CAACW,OAAO,EAAE;MACtBX,UAAU,CAACW,OAAO,CAACC,WAAW,CAAC,iBAAiB,CAAC;IACnD;IAEAY,UAAU,CAAC,MAAM;MACfvB,WAAW,CAACU,OAAO,EAAEc,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EAED,MAAMC,UAAU,GAAGA,CAAA,KAAM;IACvB,IAAI,CAAC9B,OAAO,CAACY,IAAI,CAAC,CAAC,EAAE;MACnB/D,KAAK,CAACkF,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC;MAC9C;IACF;IAEA,IAAIC,QAAQ,GAAGhC,OAAO,CAACY,IAAI,CAAC,CAAC;IAC7B,IAAI,CAACoB,QAAQ,CAACC,KAAK,CAAC,eAAe,CAAC,EAAE;MACpCD,QAAQ,GAAG,UAAU,GAAGA,QAAQ;IAClC;IAEA,MAAME,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAAC;MAC9BC,IAAI,EAAEvC,QAAQ,CAACc,IAAI,CAAC,CAAC,IAAIoB,QAAQ;MACjCM,GAAG,EAAEN,QAAQ;MACbO,UAAU,EAAErC;IACd,CAAC,CAAC;IAEF,IAAIE,UAAU,CAACW,OAAO,EAAE;MACtB,IAAI9D,QAAQ,CAACyE,EAAE,KAAK,KAAK,EAAE;QACzBtB,UAAU,CAACW,OAAO,CAACK,gBAAgB,CAAC;AAC9C,2BAA2Bc,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,CAAC;MACA,CAAC,MAAM;QACL9B,UAAU,CAACW,OAAO,CAACC,WAAW,CAAC,aAAa,GAAGkB,QAAQ,CAAC;MAC1D;IACF;IAEArC,gBAAgB,CAAC,KAAK,CAAC;IACvBE,WAAW,CAAC,EAAE,CAAC;IACfE,UAAU,CAAC,EAAE,CAAC;IACdE,gBAAgB,CAAC,KAAK,CAAC;EACzB,CAAC;EAED,MAAMqC,cAAc,GAAGA,CAAA,KAAM;IAC3B3C,gBAAgB,CAAC,KAAK,CAAC;IAEvBE,WAAW,CAAC,EAAE,CAAC;IACfE,UAAU,CAAC,EAAE,CAAC;IACdE,gBAAgB,CAAC,KAAK,CAAC;EACzB,CAAC;EAED,MAAMsC,oBAAoB,GAAIC,KAAU,IAAK;IAC3C,MAAMjC,IAAI,GAAGiC,KAAK,CAACC,WAAW,CAAClC,IAAI;IAEnC,IAAI;MACF,MAAMmC,MAAM,GAAGT,IAAI,CAACU,KAAK,CAACpC,IAAI,CAAC;MAE/B,IAAImC,MAAM,CAACE,IAAI,KAAK,SAAS,EAAE;QAC7BC,qBAAqB,CAAC,MAAM;UAC1BvD,gBAAgB,CAAC,IAAIC,GAAG,CAACmD,MAAM,CAACI,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIJ,MAAM,CAACE,IAAI,KAAK,OAAO,EAAE;QAClCC,qBAAqB,CAAC,MAAM;UAC1BnE,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIgE,MAAM,CAACE,IAAI,KAAK,MAAM,EAAE;QACjCC,qBAAqB,CAAC,MAAM;UAC1BlE,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC;MACJ,CAAC,MAAM,IAAI+D,MAAM,CAACE,IAAI,KAAK,cAAc,EAAE;QACzCC,qBAAqB,CAAC,MAAM;UAC1BhD,WAAW,CAAC6C,MAAM,CAACP,IAAI,CAAC;UACxB,MAAMY,QAAQ,GAAGL,MAAM,CAACN,GAAG,CAAC3B,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;UACvDV,UAAU,CAACgD,QAAQ,CAAC;UACpB9C,gBAAgB,CAACyC,MAAM,CAACL,UAAU,IAAI,KAAK,CAAC;QAC9C,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIK,MAAM,CAACE,IAAI,KAAK,cAAc,EAAE;QACzC;QACAnD,iBAAiB,CAACiD,MAAM,CAAClD,cAAc,CAAC;MAC1C,CAAC,MAAM,IAAIkD,MAAM,CAACE,IAAI,KAAK,SAAS,EAAE;QACpC;QACAnD,iBAAiB,CAACiD,MAAM,CAAClD,cAAc,CAAC;;QAExC;QACA,IAAIf,SAAS,IAAIiE,MAAM,CAAClD,cAAc,GAAGf,SAAS,EAAE;UAClD;UACA;QACF;QAEAJ,QAAQ,GAAGqE,MAAM,CAAC1B,IAAI,CAAC;MACzB;IACF,CAAC,CAAC,MAAM;MACN;MACAV,cAAc,CAACC,IAAI,CAAC;IACtB;EACF,CAAC;EAEDhE,SAAS,CAAC,MAAM;IACd,MAAMyG,OAAO,GAAGnG,QAAQ,CAACoG,WAAW,CAClC,iBAAiB,EAChBC,CAAgB,IAAK;MACpB9D,cAAc,CAAC,IAAI,CAAC;MACpBiB,iBAAiB,CAAC6C,CAAC,CAACC,cAAc,CAAC7E,MAAM,CAAC;IAC5C,CACF,CAAC;IACD,MAAM8E,OAAO,GAAGvG,QAAQ,CAACoG,WAAW,CAAC,iBAAiB,EAAE,MAAM;MAC5D7D,cAAc,CAAC,KAAK,CAAC;MACrBiB,iBAAiB,CAAC,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO,MAAM;MACX2C,OAAO,CAACK,MAAM,CAAC,CAAC;MAChBD,OAAO,CAACC,MAAM,CAAC,CAAC;IAClB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,cAAc,GAAIC,MAAc,IAAKlE,aAAa,CAACmE,GAAG,CAACD,MAAM,CAAC;EAEpE,MAAME,cAA+B,GAAG,CACtC;IAAElC,OAAO,EAAE,MAAM;IAAEmC,IAAI,EAAE,MAAM;IAAExF,KAAK,EAAE;EAAO,CAAC,EAChD;IAAEqD,OAAO,EAAE,QAAQ;IAAEmC,IAAI,EAAE,QAAQ;IAAExF,KAAK,EAAE;EAAS,CAAC,EACtD;IAAEqD,OAAO,EAAE,WAAW;IAAEmC,IAAI,EAAE,WAAW;IAAExF,KAAK,EAAE;EAAY,CAAC,EAC/D;IAAEqD,OAAO,EAAE,eAAe;IAAEmC,IAAI,EAAE,gBAAgB;IAAExF,KAAK,EAAE;EAAS,CAAC,EACrE;IAAEqD,OAAO,EAAE,MAAM;IAAEmC,IAAI,EAAE,MAAM;IAAExF,KAAK,EAAE,MAAM;IAAEyF,SAAS,EAAE;EAAK,CAAC,EACjE;IACEpC,OAAO,EAAE,qBAAqB;IAC9BmC,IAAI,EAAE,iBAAiB;IACvBxF,KAAK,EAAE;EACT,CAAC,EACD;IAAEqD,OAAO,EAAE,mBAAmB;IAAEmC,IAAI,EAAE,cAAc;IAAExF,KAAK,EAAE;EAAS,CAAC,EACvE;IAAEqD,OAAO,EAAE,aAAa;IAAEmC,IAAI,EAAE,YAAY;IAAExF,KAAK,EAAE;EAAO,CAAC,EAC7D;IAAEqD,OAAO,EAAE,eAAe;IAAEmC,IAAI,EAAE,cAAc;IAAExF,KAAK,EAAE;EAAS,CAAC,EACnE;IAAEqD,OAAO,EAAE,cAAc;IAAEmC,IAAI,EAAE,aAAa;IAAExF,KAAK,EAAE;EAAQ,CAAC,CACjE;EAED,oBACEF,KAAA,CAACb,IAAI;IAACyG,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,GAC3B7F,KAAK,gBAAGJ,IAAA,CAACJ,SAAS;MAACsG,KAAK,EAAE9F;IAAM,CAAE,CAAC,GAAG,IAAI,eAC3CJ,IAAA,CAAChB,oBAAoB;MACnB8G,KAAK,EAAE,CAACC,MAAM,CAACI,aAAa,EAAE;QAAEC,SAAS,EAAE5F,MAAM;QAAEA,MAAM,EAAEA;MAAO,CAAC,CAAE;MACrE6F,QAAQ,EAAEpH,QAAQ,CAACyE,EAAE,KAAK,KAAK,GAAG,SAAS,GAAG4C,SAAU;MAAAL,QAAA,eAExDjG,IAAA,CAACV,OAAO;QACN8B,GAAG,EAAEgB,UAAW;QAChBmE,eAAe,EAAE,CAAC,GAAG,CAAE;QACvBC,MAAM,EAAE;UAAEtD,IAAI,EAAEI;QAAW,CAAE;QAC7BmD,SAAS,EAAEhC,oBAAqB;QAChCqB,KAAK,EAAEC,MAAM,CAACW,OAAQ;QACtBC,iBAAiB,EAAE,IAAK;QACxBC,iBAAiB,EAAE,IAAK;QACxBC,gBAAgB,EAAC,QAAQ;QACzBC,gCAAgC,EAAE,IAAK;QACvCC,eAAe,EAAE,IAAK;QACtBC,aAAa,EAAE;MAAK,CACrB;IAAC,CACkB,CAAC,EAEtB1G,IAAI,IAAIK,SAAS,gBAChBT,KAAA,CAACb,IAAI;MAACyG,KAAK,EAAEC,MAAM,CAACkB,aAAc;MAAAhB,QAAA,GAC/B3F,IAAI,gBACHN,IAAA,CAACH,UAAU;QACTqH,KAAK,EAAE7G,QAAQ,GAAGZ,KAAK,CAAC0H,MAAM,CAAC,GAAG,CAAC,GAAG1H,KAAK,CAAC8D,IAAI,CAAC,GAAG,CAAE;QACtD6D,OAAO,EAAC,IAAI;QACZC,MAAM,EAAC,QAAQ;QAAApB,QAAA,EAEd3F;MAAI,CACK,CAAC,GACX,IAAI,EACPK,SAAS,iBACRT,KAAA,CAACL,UAAU;QACTqH,KAAK,EACHxF,cAAc,GAAGf,SAAS,GACtBlB,KAAK,CAAC0H,MAAM,CAAC,GAAG,CAAC,GACjB1H,KAAK,CAAC8D,IAAI,CAAC,GAAG,CACnB;QACD6D,OAAO,EAAC,IAAI;QACZC,MAAM,EAAC,QAAQ;QAAApB,QAAA,GAEdvE,cAAc,EAAC,GAAC,EAACf,SAAS;MAAA,CACjB,CACb;IAAA,CACG,CAAC,GACL,IAAI,eAGRT,KAAA,CAACX,WAAW;MACV+H,MAAM,EAAE1F,aAAc;MACtB2F,OAAO,EAAEA,CAAA,KAAM1F,gBAAgB,CAAC,KAAK,CAAE;MAAAoE,QAAA,gBAEvC/F,KAAA,CAACb,IAAI;QAACyG,KAAK,EAAEC,MAAM,CAACyB,SAAU;QAAAvB,QAAA,gBAC5BjG,IAAA,CAACL,KAAK;UACJS,KAAK,EAAEY,kBAAmB;UAC1ByG,KAAK,EAAE3F,QAAS;UAChB4F,YAAY,EAAE3F,WAAY;UAC1BrB,WAAW,EAAEI,uBAAwB;UACrC6G,cAAc,EAAC;QAAM,CACtB,CAAC,eACF3H,IAAA,CAACL,KAAK;UACJyB,GAAG,EAAEiB,WAAY;UACjBuF,YAAY,EAAC,KAAK;UAClBxH,KAAK,EAAEa,iBAAkB;UACzBwG,KAAK,EAAEzF,OAAQ;UACf0F,YAAY,EAAEzF,UAAW;UACzBvB,WAAW,EAAEK,sBAAuB;UACpC4G,cAAc,EAAC;QAAM,CACtB,CAAC;MAAA,CACE,CAAC,eACPzH,KAAA,CAACb,IAAI;QAACyG,KAAK,EAAEC,MAAM,CAAC8B,YAAa;QAAA5B,QAAA,gBAC/BjG,IAAA,CAACX,IAAI;UAACyG,KAAK,EAAEC,MAAM,CAAC+B,KAAM;UAAA7B,QAAA,eACxBjG,IAAA,CAACR,MAAM;YACL0G,KAAK,EAAE/E,oBAAqB;YAC5B+F,KAAK,EAAC,SAAS;YACfa,OAAO,EAAEvD,cAAe;YACxB4C,OAAO,EAAC;UAAS,CAClB;QAAC,CACE,CAAC,eACPpH,IAAA,CAACX,IAAI;UAACyG,KAAK,EAAEC,MAAM,CAAC+B,KAAM;UAAA7B,QAAA,eACxBjG,IAAA,CAACR,MAAM;YACL0G,KAAK,EAAEhF,kBAAmB;YAC1BgG,KAAK,EAAC,SAAS;YACfa,OAAO,EAAEjE;UAAW,CACrB;QAAC,CACE,CAAC;MAAA,CACH,CAAC;IAAA,CACI,CAAC,EAEbzC,WAAW,iBACVrB,IAAA,CAACF,MAAM;MACLgG,KAAK,EAAE,CACLC,MAAM,CAACiC,OAAO,EACd;QACEC,MAAM,EACJhJ,QAAQ,CAACyE,EAAE,KAAK,SAAS,IAAIzE,QAAQ,CAACiJ,OAAO,GAAG,EAAE,GAC9C5F,cAAc,GAAGA,cAAc,GAC/BA;MACR,CAAC,CACD;MAAA2D,QAAA,eAEFjG,IAAA,CAACd,UAAU;QACTiJ,UAAU;QACVC,8BAA8B,EAAE,KAAM;QACtCC,qBAAqB,EAAEtC,MAAM,CAACuC,cAAe;QAAArC,QAAA,EAE5CN,cAAc,CAAC4C,GAAG,CAAEC,MAAM,iBACzBxI,IAAA,CAACZ,gBAAgB;UAEf2I,OAAO,EAAEA,CAAA,KACPS,MAAM,CAAC3C,SAAS,GACZlC,aAAa,CAAC,CAAC,GACfH,UAAU,CAACgF,MAAM,CAAC/E,OAAO,CAC9B;UACDqC,KAAK,EAAE,CACLC,MAAM,CAAC0C,UAAU,EACjBjD,cAAc,CAACgD,MAAM,CAAC/E,OAAO,CAAC,IAAIsC,MAAM,CAAC2C,gBAAgB,CACzD;UAAAzC,QAAA,eAEFjG,IAAA,CAACN,IAAI;YACHiJ,IAAI,EAAEH,MAAM,CAAC5C,IAAK;YAClBgD,IAAI,EAAE,EAAG;YACT1B,KAAK,EACH1B,cAAc,CAACgD,MAAM,CAAC/E,OAAO,CAAC,GAAG,MAAM,GAAGhE,KAAK,CAAC8D,IAAI,CAAC,GAAG;UACzD,CACF;QAAC,GAjBGiF,MAAM,CAAC/E,OAkBI,CACnB;MAAC,CACQ;IAAC,CACP,CACT;EAAA,CACG,CAAC;AAEX,CACF,CAAC;AAEDtD,UAAU,CAAC0I,WAAW,GAAG,YAAY;AAErC,eAAe1I,UAAU;AAEzB,MAAM4F,MAAM,GAAG5G,UAAU,CAAC2J,MAAM,CAAC;EAC/B9C,SAAS,EAAE;IACT+C,eAAe,EAAE,MAAM;IACvBC,GAAG,EAAE,CAAC;IACNC,QAAQ,EAAE;EACZ,CAAC;EACD9C,aAAa,EAAE;IACb+C,IAAI,EAAE,CAAC;IACPC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE3J,KAAK,CAAC8D,IAAI,CAAC,GAAG,CAAC;IAC5B8F,YAAY,EAAE,CAAC;IACfC,QAAQ,EAAE,QAAQ;IAClBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE;EACrB,CAAC;EACDvC,aAAa,EAAE;IACbwC,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,eAAe;IAC/BC,UAAU,EAAE,QAAQ;IACpBH,iBAAiB,EAAE;EACrB,CAAC;EACDxB,OAAO,EAAE;IACPyB,aAAa,EAAE,KAAK;IACpBG,cAAc,EAAE,CAAC;IACjBR,WAAW,EAAE3J,KAAK,CAAC8D,IAAI,CAAC,GAAG,CAAC;IAC5BwF,eAAe,EAAE,MAAM;IACvBQ,eAAe,EAAE,CAAC;IAClBN,QAAQ,EAAE,UAAU;IACpBY,KAAK,EAAE/K,UAAU,CAACgL,GAAG,CAAC,QAAQ,CAAC,CAACD,KAAK;IACrCF,UAAU,EAAE;EACd,CAAC;EACDrB,cAAc,EAAE;IACdkB,iBAAiB,EAAE,CAAC;IACpBR,GAAG,EAAE;EACP,CAAC;EACDP,UAAU,EAAE;IACVsB,OAAO,EAAE,CAAC;IACVC,gBAAgB,EAAE,CAAC;IACnBX,YAAY,EAAE,CAAC;IACfY,QAAQ,EAAE,EAAE;IACZN,UAAU,EAAE,QAAQ;IACpBD,cAAc,EAAE;EAClB,CAAC;EACDhB,gBAAgB,EAAE;IAChBK,eAAe,EAAEtJ,KAAK,CAACyK,OAAO,GAAG,IAAI;EACvC,CAAC;EACDxD,OAAO,EAAE;IACPwC,IAAI,EAAE,CAAC;IACPH,eAAe,EAAE;EACnB,CAAC;EACDvB,SAAS,EAAE;IACTwB,GAAG,EAAE;EACP,CAAC;EACDnB,YAAY,EAAE;IACZ4B,aAAa,EAAE,KAAK;IACpBT,GAAG,EAAE,EAAE;IACPmB,SAAS,EAAE;EACb,CAAC;EACDrC,KAAK,EAAE;IACLoB,IAAI,EAAE;EACR,CAAC;EACDkB,KAAK,EAAE;IACLD,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","SafeAreaView","StyleSheet","useFooter","Color","useOptionalFocusEffect","jsx","_jsx","Footer","children","style","setFooter","footerElement","styles","container","create","backgroundColor","base","white100","position","bottom","left","right","zIndex"],"sourceRoot":"../../../src","sources":["Ui/Footer.tsx"],"mappings":";;AAAA;AACA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,
|
|
1
|
+
{"version":3,"names":["React","useMemo","SafeAreaView","StyleSheet","useFooter","Color","useOptionalFocusEffect","jsx","_jsx","Footer","children","style","setFooter","footerElement","styles","container","create","backgroundColor","base","white100","position","bottom","left","right","zIndex"],"sourceRoot":"../../../src","sources":["Ui/Footer.tsx"],"mappings":";;AAAA;AACA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SACEC,YAAY,EACZC,UAAU,QAGL,cAAc;AACrB,SAASC,SAAS,QAAQ,yBAAsB;AAChD,OAAOC,KAAK,MAAM,mBAAgB;AAClC,SAASC,sBAAsB,QAAQ,oCAAiC;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzE,MAAMC,MAA6B,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAM,CAAC,KAAK;EAC7D,MAAM;IAAEC;EAAU,CAAC,GAAGR,SAAS,CAAC,CAAC;EAEjC,MAAMS,aAAa,GAAGZ,OAAO,CAC3B,mBACEO,IAAA,CAACN,YAAY;IAACS,KAAK,EAAE,CAACG,MAAM,CAACC,SAAS,EAAEJ,KAAK,CAAE;IAAAD,QAAA,EAAEA;EAAQ,CAAe,CACzE,EACD,CAACA,QAAQ,EAAEC,KAAK,CAClB,CAAC;EAEDL,sBAAsB,CAAC,MAAM;IAC3BM,SAAS,CAACC,aAAa,CAAC;IACxB,OAAO,MAAMD,SAAS,CAAC,IAAI,CAAC;EAC9B,CAAC,CAAC;EAEF,OAAO,IAAI;AACb,CAAC;AAED,eAAeH,MAAM;AAErB,MAAMK,MAAM,GAAGX,UAAU,CAACa,MAAM,CAAC;EAC/BD,SAAS,EAAE;IACTE,eAAe,EAAEZ,KAAK,CAACa,IAAI,CAACC,QAAQ;IACpCC,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAqBD,QAAA,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/TextEditor/TextEditor.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAqBD,QAAA,MAAM,UAAU,kHAyrBf,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type ViewStyle } from 'react-native';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
3
|
interface FooterProps {
|
|
4
4
|
children: React.ReactNode;
|
|
5
|
-
style?: ViewStyle
|
|
5
|
+
style?: StyleProp<ViewStyle>;
|
|
6
6
|
}
|
|
7
7
|
declare const Footer: React.FC<FooterProps>;
|
|
8
8
|
export default Footer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/Ui/Footer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/Ui/Footer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAKtB,UAAU,WAAW;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgBjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
Keyboard,
|
|
12
12
|
KeyboardAvoidingView,
|
|
13
13
|
Platform,
|
|
14
|
-
SafeAreaView,
|
|
15
14
|
ScrollView,
|
|
16
15
|
StyleSheet,
|
|
17
16
|
TextInput,
|
|
@@ -27,6 +26,7 @@ import Icon, { type IconNameProps } from '../Icon';
|
|
|
27
26
|
import Input from '../Input/Input';
|
|
28
27
|
import LabelForm from '../LabelForm/LabelForm';
|
|
29
28
|
import Typography from '../Typography/Typography';
|
|
29
|
+
import Footer from '../Ui/Footer';
|
|
30
30
|
import type { TextEditorType } from './types';
|
|
31
31
|
|
|
32
32
|
export interface TextEditorRef {
|
|
@@ -90,7 +90,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
90
90
|
},
|
|
91
91
|
ref
|
|
92
92
|
) => {
|
|
93
|
-
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
94
93
|
const [showToolbar, setShowToolbar] = useState<boolean>(false);
|
|
95
94
|
const [activeFormats, setActiveFormats] = useState<Set<string>>(new Set());
|
|
96
95
|
const [characterCount, setCharacterCount] = useState(0);
|
|
@@ -100,10 +99,12 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
100
99
|
const [isEditingLink, setIsEditingLink] = useState(false);
|
|
101
100
|
const webviewRef = useRef<WebView>(null);
|
|
102
101
|
const inputUrlRef = useRef<TextInput>(null);
|
|
102
|
+
const [keyboardHeight, setKeyboardHeight] = useState(0);
|
|
103
103
|
|
|
104
|
+
// Sekarang handleOnChange hanya dipanggil sebagai fallback
|
|
104
105
|
const handleOnChange = (data: string) => {
|
|
105
|
-
//
|
|
106
|
-
const textOnly = data.replace(/<[^>]*>/g, '');
|
|
106
|
+
// Fallback jika message bukan JSON
|
|
107
|
+
const textOnly = data.replace(/<[^>]*>/g, '').trim();
|
|
107
108
|
setCharacterCount(textOnly.length);
|
|
108
109
|
|
|
109
110
|
if (maxLength && textOnly.length > maxLength) {
|
|
@@ -156,6 +157,7 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
156
157
|
width: 99.9%;
|
|
157
158
|
height: 100%;
|
|
158
159
|
overflow-x: hidden;
|
|
160
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
159
161
|
}
|
|
160
162
|
#editor {
|
|
161
163
|
height: 100%;
|
|
@@ -213,13 +215,29 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
213
215
|
editor.classList.remove('placeholder');
|
|
214
216
|
}
|
|
215
217
|
|
|
218
|
+
// Kirim initial character count saat load
|
|
219
|
+
setTimeout(() => {
|
|
220
|
+
const charCount = editor.textContent.trim().length;
|
|
221
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
222
|
+
type: 'initialCount',
|
|
223
|
+
characterCount: charCount
|
|
224
|
+
}));
|
|
225
|
+
}, 100);
|
|
226
|
+
|
|
216
227
|
editor.addEventListener("input", () => {
|
|
217
228
|
if (editor.textContent.trim()) {
|
|
218
229
|
editor.classList.remove('placeholder');
|
|
219
230
|
} else {
|
|
220
231
|
editor.classList.add('placeholder');
|
|
221
232
|
}
|
|
222
|
-
|
|
233
|
+
|
|
234
|
+
// Kirim HTML dan character count
|
|
235
|
+
const charCount = editor.textContent.trim().length;
|
|
236
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
237
|
+
type: 'content',
|
|
238
|
+
html: editor.innerHTML,
|
|
239
|
+
characterCount: charCount
|
|
240
|
+
}));
|
|
223
241
|
});
|
|
224
242
|
|
|
225
243
|
editor.addEventListener("focus", () => {
|
|
@@ -342,7 +360,14 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
342
360
|
range.collapse(true);
|
|
343
361
|
selection.removeAllRanges();
|
|
344
362
|
selection.addRange(range);
|
|
345
|
-
|
|
363
|
+
|
|
364
|
+
// Update content dan character count
|
|
365
|
+
const charCount = editor.textContent.trim().length;
|
|
366
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
367
|
+
type: 'content',
|
|
368
|
+
html: editor.innerHTML,
|
|
369
|
+
characterCount: charCount
|
|
370
|
+
}));
|
|
346
371
|
return;
|
|
347
372
|
}
|
|
348
373
|
}
|
|
@@ -363,7 +388,14 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
363
388
|
selection.removeAllRanges();
|
|
364
389
|
selection.addRange(range);
|
|
365
390
|
}
|
|
366
|
-
|
|
391
|
+
|
|
392
|
+
// Update content dan character count
|
|
393
|
+
const charCount = editor.textContent.trim().length;
|
|
394
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
395
|
+
type: 'content',
|
|
396
|
+
html: editor.innerHTML,
|
|
397
|
+
characterCount: charCount
|
|
398
|
+
}));
|
|
367
399
|
} else {
|
|
368
400
|
editor.focus();
|
|
369
401
|
document.execCommand(command, false, null);
|
|
@@ -389,18 +421,9 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
389
421
|
if (webviewRef.current) {
|
|
390
422
|
if (Platform.OS === 'ios') {
|
|
391
423
|
webviewRef.current.injectJavaScript(`
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
if (document.queryCommandState('italic')) formats.push('italic');
|
|
396
|
-
if (document.queryCommandState('underline')) formats.push('underline');
|
|
397
|
-
if (document.queryCommandState('strikeThrough')) formats.push('strikeThrough');
|
|
398
|
-
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
399
|
-
type: 'formats',
|
|
400
|
-
formats: formats
|
|
401
|
-
}));
|
|
402
|
-
true;
|
|
403
|
-
`);
|
|
424
|
+
document.execCommand('${command}', false, '');
|
|
425
|
+
true; //di ios harus biar berfunsi boldnya
|
|
426
|
+
`);
|
|
404
427
|
} else {
|
|
405
428
|
webviewRef.current.postMessage(command);
|
|
406
429
|
}
|
|
@@ -408,14 +431,14 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
408
431
|
};
|
|
409
432
|
|
|
410
433
|
const openLinkModal = () => {
|
|
411
|
-
|
|
434
|
+
setShowLinkModal(true);
|
|
412
435
|
if (webviewRef.current) {
|
|
413
436
|
webviewRef.current.postMessage('getSelectedText');
|
|
414
437
|
}
|
|
415
|
-
|
|
438
|
+
|
|
416
439
|
setTimeout(() => {
|
|
417
440
|
inputUrlRef.current?.focus();
|
|
418
|
-
},
|
|
441
|
+
}, 350);
|
|
419
442
|
};
|
|
420
443
|
|
|
421
444
|
const insertLink = () => {
|
|
@@ -425,7 +448,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
425
448
|
}
|
|
426
449
|
|
|
427
450
|
let finalUrl = linkUrl.trim();
|
|
428
|
-
// Add https:// if no protocol
|
|
429
451
|
if (!finalUrl.match(/^https?:\/\//i)) {
|
|
430
452
|
finalUrl = 'https://' + finalUrl;
|
|
431
453
|
}
|
|
@@ -439,61 +461,71 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
439
461
|
if (webviewRef.current) {
|
|
440
462
|
if (Platform.OS === 'ios') {
|
|
441
463
|
webviewRef.current.injectJavaScript(`
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
if (selection && selection.rangeCount > 0) {
|
|
448
|
-
const range = selection.getRangeAt(0);
|
|
464
|
+
const linkData = ${linkData};
|
|
465
|
+
const editor = document.getElementById('editor');
|
|
466
|
+
editor.focus();
|
|
467
|
+
const selection = window.getSelection();
|
|
449
468
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
let linkElement = null;
|
|
453
|
-
let node = range.startContainer;
|
|
469
|
+
if (selection && selection.rangeCount > 0) {
|
|
470
|
+
const range = selection.getRangeAt(0);
|
|
454
471
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
break;
|
|
459
|
-
}
|
|
460
|
-
node = node.parentNode;
|
|
461
|
-
}
|
|
472
|
+
if (linkData.isExisting) {
|
|
473
|
+
let linkElement = null;
|
|
474
|
+
let node = range.startContainer;
|
|
462
475
|
|
|
463
|
-
|
|
464
|
-
|
|
476
|
+
while (node && node !== editor) {
|
|
477
|
+
if (node.nodeName === 'A') {
|
|
478
|
+
linkElement = node;
|
|
479
|
+
break;
|
|
465
480
|
}
|
|
481
|
+
node = node.parentNode;
|
|
482
|
+
}
|
|
466
483
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
linkElement.textContent = linkData.text;
|
|
470
|
-
range.setStartAfter(linkElement);
|
|
471
|
-
range.collapse(true);
|
|
472
|
-
selection.removeAllRanges();
|
|
473
|
-
selection.addRange(range);
|
|
474
|
-
window.ReactNativeWebView.postMessage(editor.innerHTML);
|
|
475
|
-
true;
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
484
|
+
if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
|
|
485
|
+
linkElement = range.commonAncestorContainer.querySelector('a');
|
|
478
486
|
}
|
|
479
487
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
488
|
+
if (linkElement) {
|
|
489
|
+
linkElement.href = linkData.url;
|
|
490
|
+
linkElement.textContent = linkData.text;
|
|
491
|
+
range.setStartAfter(linkElement);
|
|
492
|
+
range.collapse(true);
|
|
493
|
+
selection.removeAllRanges();
|
|
494
|
+
selection.addRange(range);
|
|
495
|
+
|
|
496
|
+
const charCount = editor.textContent.trim().length;
|
|
497
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
498
|
+
type: 'content',
|
|
499
|
+
html: editor.innerHTML,
|
|
500
|
+
characterCount: charCount
|
|
501
|
+
}));
|
|
502
|
+
true;
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
493
505
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
506
|
+
|
|
507
|
+
const link = document.createElement('a');
|
|
508
|
+
link.href = linkData.url;
|
|
509
|
+
link.textContent = linkData.text;
|
|
510
|
+
link.target = '_blank';
|
|
511
|
+
range.deleteContents();
|
|
512
|
+
range.insertNode(link);
|
|
513
|
+
const space = document.createTextNode(' ');
|
|
514
|
+
link.parentNode.insertBefore(space, link.nextSibling);
|
|
515
|
+
range.setStartAfter(space);
|
|
516
|
+
range.collapse(true);
|
|
517
|
+
selection.removeAllRanges();
|
|
518
|
+
selection.addRange(range);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
const charCount = editor.textContent.trim().length;
|
|
522
|
+
window.ReactNativeWebView.postMessage(JSON.stringify({
|
|
523
|
+
type: 'content',
|
|
524
|
+
html: editor.innerHTML,
|
|
525
|
+
characterCount: charCount
|
|
526
|
+
}));
|
|
527
|
+
true;
|
|
528
|
+
`);
|
|
497
529
|
} else {
|
|
498
530
|
webviewRef.current.postMessage('insertLink:' + linkData);
|
|
499
531
|
}
|
|
@@ -507,6 +539,7 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
507
539
|
|
|
508
540
|
const closeLinkModal = () => {
|
|
509
541
|
setShowLinkModal(false);
|
|
542
|
+
|
|
510
543
|
setLinkText('');
|
|
511
544
|
setLinkUrl('');
|
|
512
545
|
setIsEditingLink(false);
|
|
@@ -519,20 +552,41 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
519
552
|
const parsed = JSON.parse(data);
|
|
520
553
|
|
|
521
554
|
if (parsed.type === 'formats') {
|
|
522
|
-
|
|
555
|
+
requestAnimationFrame(() => {
|
|
556
|
+
setActiveFormats(new Set(parsed.formats));
|
|
557
|
+
});
|
|
523
558
|
} else if (parsed.type === 'focus') {
|
|
524
|
-
|
|
559
|
+
requestAnimationFrame(() => {
|
|
560
|
+
onFocus?.();
|
|
561
|
+
});
|
|
525
562
|
} else if (parsed.type === 'blur') {
|
|
526
|
-
|
|
563
|
+
requestAnimationFrame(() => {
|
|
564
|
+
onBlur?.();
|
|
565
|
+
});
|
|
527
566
|
} else if (parsed.type === 'selectedText') {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
567
|
+
requestAnimationFrame(() => {
|
|
568
|
+
setLinkText(parsed.text);
|
|
569
|
+
const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
|
|
570
|
+
setLinkUrl(cleanUrl);
|
|
571
|
+
setIsEditingLink(parsed.isExisting || false);
|
|
572
|
+
});
|
|
573
|
+
} else if (parsed.type === 'initialCount') {
|
|
574
|
+
// Set initial character count saat pertama load
|
|
575
|
+
setCharacterCount(parsed.characterCount);
|
|
576
|
+
} else if (parsed.type === 'content') {
|
|
577
|
+
// Update character count dari WebView
|
|
578
|
+
setCharacterCount(parsed.characterCount);
|
|
579
|
+
|
|
580
|
+
// Cek maxLength
|
|
581
|
+
if (maxLength && parsed.characterCount > maxLength) {
|
|
582
|
+
// Optional: bisa tambahkan alert atau prevent
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
onChange?.(parsed.html);
|
|
533
587
|
}
|
|
534
588
|
} catch {
|
|
535
|
-
//
|
|
589
|
+
// Fallback ke cara lama jika bukan JSON (untuk backward compatibility)
|
|
536
590
|
handleOnChange(data);
|
|
537
591
|
}
|
|
538
592
|
};
|
|
@@ -541,13 +595,13 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
541
595
|
const showSub = Keyboard.addListener(
|
|
542
596
|
'keyboardDidShow',
|
|
543
597
|
(e: KeyboardEvent) => {
|
|
544
|
-
setKeyboardHeight(e.endCoordinates.height - 35);
|
|
545
598
|
setShowToolbar(true);
|
|
599
|
+
setKeyboardHeight(e.endCoordinates.height);
|
|
546
600
|
}
|
|
547
601
|
);
|
|
548
602
|
const hideSub = Keyboard.addListener('keyboardDidHide', () => {
|
|
549
|
-
setKeyboardHeight(0);
|
|
550
603
|
setShowToolbar(false);
|
|
604
|
+
setKeyboardHeight(0);
|
|
551
605
|
});
|
|
552
606
|
|
|
553
607
|
return () => {
|
|
@@ -556,8 +610,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
556
610
|
};
|
|
557
611
|
}, []);
|
|
558
612
|
|
|
559
|
-
const gap = Platform.OS === 'ios' ? 200 : 185;
|
|
560
|
-
|
|
561
613
|
const isFormatActive = (format: string) => activeFormats.has(format);
|
|
562
614
|
|
|
563
615
|
const toolbarButtons: ToolbarButton[] = [
|
|
@@ -626,44 +678,6 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
626
678
|
</View>
|
|
627
679
|
) : null}
|
|
628
680
|
|
|
629
|
-
{showToolbar ? (
|
|
630
|
-
<SafeAreaView
|
|
631
|
-
style={[
|
|
632
|
-
styles.toolbar,
|
|
633
|
-
{ top: Dimensions.get('screen').height - keyboardHeight - gap },
|
|
634
|
-
]}
|
|
635
|
-
>
|
|
636
|
-
<ScrollView
|
|
637
|
-
horizontal
|
|
638
|
-
showsHorizontalScrollIndicator={false}
|
|
639
|
-
contentContainerStyle={styles.toolbarContent}
|
|
640
|
-
>
|
|
641
|
-
{toolbarButtons.map((button) => (
|
|
642
|
-
<TouchableOpacity
|
|
643
|
-
key={button.command}
|
|
644
|
-
onPress={() =>
|
|
645
|
-
button.isSpecial
|
|
646
|
-
? openLinkModal()
|
|
647
|
-
: formatText(button.command)
|
|
648
|
-
}
|
|
649
|
-
style={[
|
|
650
|
-
styles.toolButton,
|
|
651
|
-
isFormatActive(button.command) && styles.toolButtonActive,
|
|
652
|
-
]}
|
|
653
|
-
>
|
|
654
|
-
<Icon
|
|
655
|
-
name={button.icon}
|
|
656
|
-
size={20}
|
|
657
|
-
color={
|
|
658
|
-
isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
659
|
-
}
|
|
660
|
-
/>
|
|
661
|
-
</TouchableOpacity>
|
|
662
|
-
))}
|
|
663
|
-
</ScrollView>
|
|
664
|
-
</SafeAreaView>
|
|
665
|
-
) : null}
|
|
666
|
-
|
|
667
681
|
{/* Link Modal */}
|
|
668
682
|
<BottomSheet
|
|
669
683
|
isOpen={showLinkModal}
|
|
@@ -705,6 +719,49 @@ const TextEditor = forwardRef<TextEditorRef, ExtendedTextEditorType>(
|
|
|
705
719
|
</View>
|
|
706
720
|
</View>
|
|
707
721
|
</BottomSheet>
|
|
722
|
+
|
|
723
|
+
{showToolbar && (
|
|
724
|
+
<Footer
|
|
725
|
+
style={[
|
|
726
|
+
styles.toolbar,
|
|
727
|
+
{
|
|
728
|
+
bottom:
|
|
729
|
+
Platform.OS === 'android' && Platform.Version < 35
|
|
730
|
+
? keyboardHeight - keyboardHeight
|
|
731
|
+
: keyboardHeight,
|
|
732
|
+
},
|
|
733
|
+
]}
|
|
734
|
+
>
|
|
735
|
+
<ScrollView
|
|
736
|
+
horizontal
|
|
737
|
+
showsHorizontalScrollIndicator={false}
|
|
738
|
+
contentContainerStyle={styles.toolbarContent}
|
|
739
|
+
>
|
|
740
|
+
{toolbarButtons.map((button) => (
|
|
741
|
+
<TouchableOpacity
|
|
742
|
+
key={button.command}
|
|
743
|
+
onPress={() =>
|
|
744
|
+
button.isSpecial
|
|
745
|
+
? openLinkModal()
|
|
746
|
+
: formatText(button.command)
|
|
747
|
+
}
|
|
748
|
+
style={[
|
|
749
|
+
styles.toolButton,
|
|
750
|
+
isFormatActive(button.command) && styles.toolButtonActive,
|
|
751
|
+
]}
|
|
752
|
+
>
|
|
753
|
+
<Icon
|
|
754
|
+
name={button.icon}
|
|
755
|
+
size={20}
|
|
756
|
+
color={
|
|
757
|
+
isFormatActive(button.command) ? '#fff' : Color.gray[900]
|
|
758
|
+
}
|
|
759
|
+
/>
|
|
760
|
+
</TouchableOpacity>
|
|
761
|
+
))}
|
|
762
|
+
</ScrollView>
|
|
763
|
+
</Footer>
|
|
764
|
+
)}
|
|
708
765
|
</View>
|
|
709
766
|
);
|
|
710
767
|
}
|
|
@@ -742,7 +799,6 @@ const styles = StyleSheet.create({
|
|
|
742
799
|
backgroundColor: '#fff',
|
|
743
800
|
paddingVertical: 8,
|
|
744
801
|
position: 'absolute',
|
|
745
|
-
left: -24,
|
|
746
802
|
width: Dimensions.get('screen').width,
|
|
747
803
|
alignItems: 'center',
|
|
748
804
|
},
|
|
@@ -776,4 +832,7 @@ const styles = StyleSheet.create({
|
|
|
776
832
|
flex1: {
|
|
777
833
|
flex: 1,
|
|
778
834
|
},
|
|
835
|
+
mt10p: {
|
|
836
|
+
marginTop: '10%',
|
|
837
|
+
},
|
|
779
838
|
});
|
package/src/Ui/Footer.tsx
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
// Footer.tsx
|
|
2
2
|
import React, { useMemo } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
SafeAreaView,
|
|
5
|
+
StyleSheet,
|
|
6
|
+
type StyleProp,
|
|
7
|
+
type ViewStyle,
|
|
8
|
+
} from 'react-native';
|
|
4
9
|
import { useFooter } from '../Provider/Provider';
|
|
5
10
|
import Color from '../Color/Color';
|
|
6
11
|
import { useOptionalFocusEffect } from '../hooks/useOptionalFocusEffect';
|
|
7
12
|
|
|
8
13
|
interface FooterProps {
|
|
9
14
|
children: React.ReactNode;
|
|
10
|
-
style?: ViewStyle
|
|
15
|
+
style?: StyleProp<ViewStyle>;
|
|
11
16
|
}
|
|
12
17
|
|
|
13
18
|
const Footer: React.FC<FooterProps> = ({ children, style }) => {
|