@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.
@@ -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, SafeAreaView, ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
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
- // Remove HTML tags untuk hitung karakter
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- document.execCommand('${command}', false, null);
327
- const formats = [];
328
- if (document.queryCommandState('bold')) formats.push('bold');
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
- // Get selected text first
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
- }, 300);
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
- const linkData = ${linkData};
372
- const editor = document.getElementById('editor');
373
- editor.focus();
374
- const selection = window.getSelection();
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
- // If editing existing link
380
- if (linkData.isExisting) {
381
- let linkElement = null;
382
- let node = range.startContainer;
399
+ if (selection && selection.rangeCount > 0) {
400
+ const range = selection.getRangeAt(0);
383
401
 
384
- while (node && node !== editor) {
385
- if (node.nodeName === 'A') {
386
- linkElement = node;
387
- break;
388
- }
389
- node = node.parentNode;
390
- }
402
+ if (linkData.isExisting) {
403
+ let linkElement = null;
404
+ let node = range.startContainer;
391
405
 
392
- if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
393
- linkElement = range.commonAncestorContainer.querySelector('a');
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
- if (linkElement) {
397
- linkElement.href = linkData.url;
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
- // Create new link
410
- const link = document.createElement('a');
411
- link.href = linkData.url;
412
- link.textContent = linkData.text;
413
- link.target = '_blank';
414
- range.deleteContents();
415
- range.insertNode(link);
416
- const space = document.createTextNode(' ');
417
- link.parentNode.insertBefore(space, link.nextSibling);
418
- range.setStartAfter(space);
419
- range.collapse(true);
420
- selection.removeAllRanges();
421
- selection.addRange(range);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
424
- true;
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
- setActiveFormats(new Set(parsed.formats));
479
+ requestAnimationFrame(() => {
480
+ setActiveFormats(new Set(parsed.formats));
481
+ });
447
482
  } else if (parsed.type === 'focus') {
448
- onFocus?.();
483
+ requestAnimationFrame(() => {
484
+ onFocus?.();
485
+ });
449
486
  } else if (parsed.type === 'blur') {
450
- onBlur?.();
487
+ requestAnimationFrame(() => {
488
+ onBlur?.();
489
+ });
451
490
  } else if (parsed.type === 'selectedText') {
452
- setLinkText(parsed.text);
453
- // Clean URL (remove protocol prefix for editing)
454
- const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
455
- setLinkUrl(cleanUrl);
456
- setIsEditingLink(parsed.isExisting || false);
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
- // Jika bukan JSON, berarti itu HTML content
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;AA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","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,SAASC,YAAY,EAAEC,UAAU,QAAwB,cAAc;AACvE,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
+ {"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,kHAgoBf,CAAC;AAIF,eAAe,UAAU,CAAC"}
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,EAA4B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAKxE,UAAU,WAAW;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgBjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herca/rn-kit",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -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
- // Remove HTML tags untuk hitung karakter
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
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
- document.execCommand('${command}', false, null);
393
- const formats = [];
394
- if (document.queryCommandState('bold')) formats.push('bold');
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
- // Get selected text first
434
+ setShowLinkModal(true);
412
435
  if (webviewRef.current) {
413
436
  webviewRef.current.postMessage('getSelectedText');
414
437
  }
415
- setShowLinkModal(true);
438
+
416
439
  setTimeout(() => {
417
440
  inputUrlRef.current?.focus();
418
- }, 300);
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
- const linkData = ${linkData};
443
- const editor = document.getElementById('editor');
444
- editor.focus();
445
- const selection = window.getSelection();
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
- // If editing existing link
451
- if (linkData.isExisting) {
452
- let linkElement = null;
453
- let node = range.startContainer;
469
+ if (selection && selection.rangeCount > 0) {
470
+ const range = selection.getRangeAt(0);
454
471
 
455
- while (node && node !== editor) {
456
- if (node.nodeName === 'A') {
457
- linkElement = node;
458
- break;
459
- }
460
- node = node.parentNode;
461
- }
472
+ if (linkData.isExisting) {
473
+ let linkElement = null;
474
+ let node = range.startContainer;
462
475
 
463
- if (!linkElement && range.commonAncestorContainer.nodeType === 1) {
464
- linkElement = range.commonAncestorContainer.querySelector('a');
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
- if (linkElement) {
468
- linkElement.href = linkData.url;
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
- // Create new link
481
- const link = document.createElement('a');
482
- link.href = linkData.url;
483
- link.textContent = linkData.text;
484
- link.target = '_blank';
485
- range.deleteContents();
486
- range.insertNode(link);
487
- const space = document.createTextNode(' ');
488
- link.parentNode.insertBefore(space, link.nextSibling);
489
- range.setStartAfter(space);
490
- range.collapse(true);
491
- selection.removeAllRanges();
492
- selection.addRange(range);
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
- window.ReactNativeWebView.postMessage(editor.innerHTML);
495
- true;
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
- setActiveFormats(new Set(parsed.formats));
555
+ requestAnimationFrame(() => {
556
+ setActiveFormats(new Set(parsed.formats));
557
+ });
523
558
  } else if (parsed.type === 'focus') {
524
- onFocus?.();
559
+ requestAnimationFrame(() => {
560
+ onFocus?.();
561
+ });
525
562
  } else if (parsed.type === 'blur') {
526
- onBlur?.();
563
+ requestAnimationFrame(() => {
564
+ onBlur?.();
565
+ });
527
566
  } else if (parsed.type === 'selectedText') {
528
- setLinkText(parsed.text);
529
- // Clean URL (remove protocol prefix for editing)
530
- const cleanUrl = parsed.url.replace(/^https?:\/\//, '');
531
- setLinkUrl(cleanUrl);
532
- setIsEditingLink(parsed.isExisting || false);
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
- // Jika bukan JSON, berarti itu HTML content
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 { SafeAreaView, StyleSheet, type ViewStyle } from 'react-native';
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 }) => {