@botonic/react 0.30.3 → 0.30.5-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/lib/cjs/components/button.d.ts +11 -10
  2. package/lib/cjs/components/button.js +39 -25
  3. package/lib/cjs/components/button.js.map +1 -1
  4. package/lib/cjs/components/index-types.d.ts +4 -15
  5. package/lib/cjs/components/multichannel/multichannel-text.js +4 -4
  6. package/lib/cjs/components/multichannel/multichannel-text.js.map +1 -1
  7. package/lib/cjs/components/multichannel/whatsapp/markdown-meta.d.ts +1 -0
  8. package/lib/cjs/components/multichannel/whatsapp/markdown-meta.js +42 -0
  9. package/lib/cjs/components/multichannel/whatsapp/markdown-meta.js.map +1 -0
  10. package/lib/cjs/components/whatsapp-button-list.js +2 -2
  11. package/lib/cjs/components/whatsapp-button-list.js.map +1 -1
  12. package/lib/cjs/components/whatsapp-cta-url-button.js +2 -2
  13. package/lib/cjs/components/whatsapp-cta-url-button.js.map +1 -1
  14. package/lib/cjs/contexts.js +3 -0
  15. package/lib/cjs/contexts.js.map +1 -1
  16. package/lib/cjs/index-types.d.ts +5 -3
  17. package/lib/cjs/webchat/cover-component/index.d.ts +6 -0
  18. package/lib/cjs/webchat/cover-component/index.js +21 -0
  19. package/lib/cjs/webchat/cover-component/index.js.map +1 -0
  20. package/lib/cjs/webchat/hooks/use-webchat.d.ts +3 -3
  21. package/lib/cjs/webchat/hooks/use-webchat.js.map +1 -1
  22. package/lib/cjs/webchat/webchat.js +8 -15
  23. package/lib/cjs/webchat/webchat.js.map +1 -1
  24. package/lib/esm/components/button.d.ts +11 -10
  25. package/lib/esm/components/button.js +39 -25
  26. package/lib/esm/components/button.js.map +1 -1
  27. package/lib/esm/components/index-types.d.ts +4 -15
  28. package/lib/esm/components/multichannel/multichannel-text.js +4 -4
  29. package/lib/esm/components/multichannel/multichannel-text.js.map +1 -1
  30. package/lib/esm/components/multichannel/whatsapp/markdown-meta.d.ts +1 -0
  31. package/lib/esm/components/multichannel/whatsapp/markdown-meta.js +38 -0
  32. package/lib/esm/components/multichannel/whatsapp/markdown-meta.js.map +1 -0
  33. package/lib/esm/components/whatsapp-button-list.js +2 -2
  34. package/lib/esm/components/whatsapp-button-list.js.map +1 -1
  35. package/lib/esm/components/whatsapp-cta-url-button.js +2 -2
  36. package/lib/esm/components/whatsapp-cta-url-button.js.map +1 -1
  37. package/lib/esm/contexts.js +3 -0
  38. package/lib/esm/contexts.js.map +1 -1
  39. package/lib/esm/index-types.d.ts +5 -3
  40. package/lib/esm/webchat/cover-component/index.d.ts +6 -0
  41. package/lib/esm/webchat/cover-component/index.js +17 -0
  42. package/lib/esm/webchat/cover-component/index.js.map +1 -0
  43. package/lib/esm/webchat/hooks/use-webchat.d.ts +3 -3
  44. package/lib/esm/webchat/hooks/use-webchat.js.map +1 -1
  45. package/lib/esm/webchat/webchat.js +8 -15
  46. package/lib/esm/webchat/webchat.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/components/{button.jsx → button.tsx} +49 -20
  49. package/src/components/index-types.ts +4 -16
  50. package/src/components/multichannel/multichannel-text.jsx +13 -9
  51. package/src/components/multichannel/whatsapp/markdown-meta.ts +66 -0
  52. package/src/components/whatsapp-button-list.tsx +2 -2
  53. package/src/components/whatsapp-cta-url-button.tsx +5 -2
  54. package/src/contexts.tsx +3 -0
  55. package/src/index-types.ts +7 -3
  56. package/src/webchat/cover-component/index.tsx +33 -0
  57. package/src/webchat/hooks/use-webchat.ts +2 -2
  58. package/src/webchat/webchat.jsx +42 -46
  59. package/lib/cjs/components/multichannel/whatsapp/markdown.d.ts +0 -1
  60. package/lib/cjs/components/multichannel/whatsapp/markdown.js +0 -57
  61. package/lib/cjs/components/multichannel/whatsapp/markdown.js.map +0 -1
  62. package/lib/esm/components/multichannel/whatsapp/markdown.d.ts +0 -1
  63. package/lib/esm/components/multichannel/whatsapp/markdown.js +0 -53
  64. package/lib/esm/components/multichannel/whatsapp/markdown.js.map +0 -1
  65. package/src/components/multichannel/whatsapp/markdown.ts +0 -88
@@ -44,6 +44,7 @@ import {
44
44
  import { ChatArea } from './chat-area'
45
45
  import { OpenedPersistentMenu } from './components/opened-persistent-menu'
46
46
  import { BotonicContainerId } from './constants'
47
+ import { CoverComponent } from './cover-component'
47
48
  import { WebchatHeader } from './header'
48
49
  import {
49
50
  useComponentWillMount,
@@ -407,37 +408,17 @@ export const Webchat = forwardRef((props, ref) => {
407
408
  (props.coverComponent.component || props.coverComponent)
408
409
  )
409
410
  }
410
- const CoverComponent = getCoverComponent()
411
-
412
- const closeCoverComponent = () => {
413
- toggleCoverComponent(false)
414
- }
411
+ const coverComponent = getCoverComponent()
415
412
 
416
413
  useEffect(() => {
417
- if (!CoverComponent) return
414
+ if (!coverComponent) return
418
415
  if (
419
416
  !botonicState ||
420
- (botonicState.messages && botonicState.messages.length == 0)
417
+ (botonicState.messages && botonicState.messages.length === 0)
421
418
  )
422
419
  toggleCoverComponent(true)
423
420
  }, [])
424
421
 
425
- const coverComponent = () => {
426
- const coverComponentProps = getThemeProperty(
427
- WEBCHAT.CUSTOM_PROPERTIES.coverComponentProps,
428
- props.coverComponent && props.coverComponent.props
429
- )
430
-
431
- if (CoverComponent && webchatState.isCoverComponentOpen)
432
- return (
433
- <CoverComponent
434
- closeComponent={closeCoverComponent}
435
- {...coverComponentProps}
436
- />
437
- )
438
- return null
439
- }
440
-
441
422
  const messageComponentFromInput = input => {
442
423
  let messageComponent = null
443
424
  if (isText(input)) {
@@ -708,6 +689,7 @@ export const Webchat = forwardRef((props, ref) => {
708
689
  toggleWebchat,
709
690
  toggleEmojiPicker,
710
691
  togglePersistentMenu,
692
+ toggleCoverComponent,
711
693
  updateLatestInput,
712
694
  updateMessage,
713
695
  updateReplies,
@@ -744,36 +726,50 @@ export const Webchat = forwardRef((props, ref) => {
744
726
  toggleWebchat(false)
745
727
  }}
746
728
  />
747
- {webchatState.error.message && (
748
- <ErrorMessageContainer>
749
- <ErrorMessage>{webchatState.error.message}</ErrorMessage>
750
- </ErrorMessageContainer>
751
- )}
752
- <ChatArea />
753
729
 
754
- {webchatState.isPersistentMenuOpen && (
755
- <DarkenBackground component={persistentMenu()} />
756
- )}
757
- {!webchatState.handoff && userInputEnabled && (
758
- <InputPanel
759
- persistentMenu={props.persistentMenu}
760
- enableEmojiPicker={props.enableEmojiPicker}
761
- enableAttachments={props.enableAttachments}
762
- handleAttachment={handleAttachment}
763
- textareaRef={textareaRef}
764
- host={host}
765
- onUserInput={props.onUserInput}
730
+ {webchatState.isCoverComponentOpen ? (
731
+ <CoverComponent
732
+ component={coverComponent}
733
+ componentProps={props.coverComponent.props}
766
734
  />
735
+ ) : (
736
+ <>
737
+ {webchatState.error.message && (
738
+ <ErrorMessageContainer>
739
+ <ErrorMessage>{webchatState.error.message}</ErrorMessage>
740
+ </ErrorMessageContainer>
741
+ )}
742
+
743
+ <ChatArea />
744
+
745
+ {webchatState.isPersistentMenuOpen && (
746
+ <DarkenBackground component={persistentMenu()} />
747
+ )}
748
+
749
+ {!webchatState.handoff && userInputEnabled && (
750
+ <InputPanel
751
+ persistentMenu={props.persistentMenu}
752
+ enableEmojiPicker={props.enableEmojiPicker}
753
+ enableAttachments={props.enableAttachments}
754
+ handleAttachment={handleAttachment}
755
+ textareaRef={textareaRef}
756
+ host={host}
757
+ onUserInput={props.onUserInput}
758
+ />
759
+ )}
760
+
761
+ {webchatState.webview && webchatWebview()}
762
+
763
+ {webchatState.isCustomComponentRendered &&
764
+ customComponent &&
765
+ _renderCustomComponent()}
766
+ </>
767
767
  )}
768
- {webchatState.webview && webchatWebview()}
769
- {webchatState.isCoverComponentOpen && coverComponent()}
770
- {webchatState.isCustomComponentRendered &&
771
- customComponent &&
772
- _renderCustomComponent()}
773
768
  </StyledWebchat>
774
769
  )}
775
770
  </WebchatContext.Provider>
776
771
  )
772
+
777
773
  return props.shadowDOM ? (
778
774
  <StyleSheetManager target={host}>{WebchatComponent}</StyleSheetManager>
779
775
  ) : (
@@ -1 +0,0 @@
1
- export declare function whatsappMarkdown(text: string): string;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.whatsappMarkdown = void 0;
4
- const MARKDOWN_BOLD_OPTION_1 = '**';
5
- const MARKDOWN_BOLD_OPTION_2 = '__';
6
- const MARKDOWN_WHATSAPP_BOLD = '*';
7
- const MARKDOWN_ITALIC_OPTION_1 = '*';
8
- const MARKDOWN_WHATSAPP_ITALIC = '_';
9
- const MARKDOWN_BOLD_OR_ITALIC_REGEX = /(\*\*|__)(.*?)\1|(\*|_)(.*?)\3/g;
10
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN = '**_';
11
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE = '_**';
12
- const MARKDOWN_BOLD_AND_ITALIC_OPTION1 = /(_\*\*)(.*?)(\*\*_)/g;
13
- const MARKDOWN_BOLD_AND_ITALIC_OPTION2 = /(\*__)(.*?)(__\*)/g;
14
- const MARKDOWN_BOLD_AND_ITALIC_OPTION3 = /(__\*)(.*?)(\*__)/g;
15
- function whatsappMarkdown(text) {
16
- const textNormalized = normalizeMarkdown(text);
17
- const matches = textNormalized.match(MARKDOWN_BOLD_OR_ITALIC_REGEX);
18
- if (matches) {
19
- const matchesResult = matches.map(match => {
20
- if (match.startsWith(MARKDOWN_BOLD_OPTION_1)) {
21
- return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_1, MARKDOWN_WHATSAPP_BOLD);
22
- }
23
- if (match.startsWith(MARKDOWN_BOLD_OPTION_2)) {
24
- return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_2, MARKDOWN_WHATSAPP_BOLD);
25
- }
26
- if (match.startsWith(MARKDOWN_ITALIC_OPTION_1)) {
27
- return replaceAllOccurrences(match, MARKDOWN_ITALIC_OPTION_1, MARKDOWN_WHATSAPP_ITALIC);
28
- }
29
- return match;
30
- });
31
- let textWhatsapp = textNormalized;
32
- for (let i = 0; i < matches.length; i++) {
33
- textWhatsapp = replaceAllOccurrences(textWhatsapp, matches[i], matchesResult[i]);
34
- }
35
- return textWhatsapp;
36
- }
37
- return text;
38
- }
39
- exports.whatsappMarkdown = whatsappMarkdown;
40
- function normalizeMarkdown(text) {
41
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION1);
42
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION2);
43
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION3);
44
- return text;
45
- }
46
- function replaceBoldItalic(text, regex) {
47
- return text.replace(regex, (match, markdownOpen, textInsideMarkdown, markdownClose) => {
48
- if (match.startsWith(markdownOpen) && match.endsWith(markdownClose)) {
49
- return `${MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN}${textInsideMarkdown}${MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE}`;
50
- }
51
- return match;
52
- });
53
- }
54
- function replaceAllOccurrences(text, searchValue, replaceValue) {
55
- return text.split(searchValue).join(replaceValue);
56
- }
57
- //# sourceMappingURL=markdown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../../src/components/multichannel/whatsapp/markdown.ts"],"names":[],"mappings":";;;AAAA,MAAM,sBAAsB,GAAG,IAAI,CAAA;AACnC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAElC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AACpC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAEpC,MAAM,6BAA6B,GAAG,iCAAiC,CAAA;AAEvE,MAAM,oCAAoC,GAAG,KAAK,CAAA;AAClD,MAAM,qCAAqC,GAAG,KAAK,CAAA;AAEnD,MAAM,gCAAgC,GAAG,sBAAsB,CAAA;AAC/D,MAAM,gCAAgC,GAAG,oBAAoB,CAAA;AAC7D,MAAM,gCAAgC,GAAG,oBAAoB,CAAA;AAE7D,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACnE,IAAI,OAAO,EAAE;QACX,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxC,IAAI,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,OAAO,qBAAqB,CAC1B,KAAK,EACL,sBAAsB,EACtB,sBAAsB,CACvB,CAAA;aACF;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,OAAO,qBAAqB,CAC1B,KAAK,EACL,sBAAsB,EACtB,sBAAsB,CACvB,CAAA;aACF;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;gBAC9C,OAAO,qBAAqB,CAC1B,KAAK,EACL,wBAAwB,EACxB,wBAAwB,CACzB,CAAA;aACF;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,IAAI,YAAY,GAAG,cAAc,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,YAAY,GAAG,qBAAqB,CAClC,YAAY,EACZ,OAAO,CAAC,CAAC,CAAC,EACV,aAAa,CAAC,CAAC,CAAC,CACjB,CAAA;SACF;QACD,OAAO,YAAY,CAAA;KACpB;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAvCD,4CAuCC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa;IACpD,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EACL,CACE,KAAa,EACb,YAAoB,EACpB,kBAA0B,EAC1B,aAAqB,EACrB,EAAE;QACF,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACnE,OAAO,GAAG,oCAAoC,GAAG,kBAAkB,GAAG,qCAAqC,EAAE,CAAA;SAC9G;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,WAAmB,EACnB,YAAoB;IAEpB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AACnD,CAAC"}
@@ -1 +0,0 @@
1
- export declare function whatsappMarkdown(text: string): string;
@@ -1,53 +0,0 @@
1
- const MARKDOWN_BOLD_OPTION_1 = '**';
2
- const MARKDOWN_BOLD_OPTION_2 = '__';
3
- const MARKDOWN_WHATSAPP_BOLD = '*';
4
- const MARKDOWN_ITALIC_OPTION_1 = '*';
5
- const MARKDOWN_WHATSAPP_ITALIC = '_';
6
- const MARKDOWN_BOLD_OR_ITALIC_REGEX = /(\*\*|__)(.*?)\1|(\*|_)(.*?)\3/g;
7
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN = '**_';
8
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE = '_**';
9
- const MARKDOWN_BOLD_AND_ITALIC_OPTION1 = /(_\*\*)(.*?)(\*\*_)/g;
10
- const MARKDOWN_BOLD_AND_ITALIC_OPTION2 = /(\*__)(.*?)(__\*)/g;
11
- const MARKDOWN_BOLD_AND_ITALIC_OPTION3 = /(__\*)(.*?)(\*__)/g;
12
- export function whatsappMarkdown(text) {
13
- const textNormalized = normalizeMarkdown(text);
14
- const matches = textNormalized.match(MARKDOWN_BOLD_OR_ITALIC_REGEX);
15
- if (matches) {
16
- const matchesResult = matches.map(match => {
17
- if (match.startsWith(MARKDOWN_BOLD_OPTION_1)) {
18
- return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_1, MARKDOWN_WHATSAPP_BOLD);
19
- }
20
- if (match.startsWith(MARKDOWN_BOLD_OPTION_2)) {
21
- return replaceAllOccurrences(match, MARKDOWN_BOLD_OPTION_2, MARKDOWN_WHATSAPP_BOLD);
22
- }
23
- if (match.startsWith(MARKDOWN_ITALIC_OPTION_1)) {
24
- return replaceAllOccurrences(match, MARKDOWN_ITALIC_OPTION_1, MARKDOWN_WHATSAPP_ITALIC);
25
- }
26
- return match;
27
- });
28
- let textWhatsapp = textNormalized;
29
- for (let i = 0; i < matches.length; i++) {
30
- textWhatsapp = replaceAllOccurrences(textWhatsapp, matches[i], matchesResult[i]);
31
- }
32
- return textWhatsapp;
33
- }
34
- return text;
35
- }
36
- function normalizeMarkdown(text) {
37
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION1);
38
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION2);
39
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION3);
40
- return text;
41
- }
42
- function replaceBoldItalic(text, regex) {
43
- return text.replace(regex, (match, markdownOpen, textInsideMarkdown, markdownClose) => {
44
- if (match.startsWith(markdownOpen) && match.endsWith(markdownClose)) {
45
- return `${MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN}${textInsideMarkdown}${MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE}`;
46
- }
47
- return match;
48
- });
49
- }
50
- function replaceAllOccurrences(text, searchValue, replaceValue) {
51
- return text.split(searchValue).join(replaceValue);
52
- }
53
- //# sourceMappingURL=markdown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../../src/components/multichannel/whatsapp/markdown.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,IAAI,CAAA;AACnC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AACnC,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAElC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AACpC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAEpC,MAAM,6BAA6B,GAAG,iCAAiC,CAAA;AAEvE,MAAM,oCAAoC,GAAG,KAAK,CAAA;AAClD,MAAM,qCAAqC,GAAG,KAAK,CAAA;AAEnD,MAAM,gCAAgC,GAAG,sBAAsB,CAAA;AAC/D,MAAM,gCAAgC,GAAG,oBAAoB,CAAA;AAC7D,MAAM,gCAAgC,GAAG,oBAAoB,CAAA;AAE7D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IACnE,IAAI,OAAO,EAAE;QACX,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACxC,IAAI,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,OAAO,qBAAqB,CAC1B,KAAK,EACL,sBAAsB,EACtB,sBAAsB,CACvB,CAAA;aACF;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE;gBAC5C,OAAO,qBAAqB,CAC1B,KAAK,EACL,sBAAsB,EACtB,sBAAsB,CACvB,CAAA;aACF;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;gBAC9C,OAAO,qBAAqB,CAC1B,KAAK,EACL,wBAAwB,EACxB,wBAAwB,CACzB,CAAA;aACF;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,IAAI,YAAY,GAAG,cAAc,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,YAAY,GAAG,qBAAqB,CAClC,YAAY,EACZ,OAAO,CAAC,CAAC,CAAC,EACV,aAAa,CAAC,CAAC,CAAC,CACjB,CAAA;SACF;QACD,OAAO,YAAY,CAAA;KACpB;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAA;IAChE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa;IACpD,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EACL,CACE,KAAa,EACb,YAAoB,EACpB,kBAA0B,EAC1B,aAAqB,EACrB,EAAE;QACF,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACnE,OAAO,GAAG,oCAAoC,GAAG,kBAAkB,GAAG,qCAAqC,EAAE,CAAA;SAC9G;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,WAAmB,EACnB,YAAoB;IAEpB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AACnD,CAAC"}
@@ -1,88 +0,0 @@
1
- const MARKDOWN_BOLD_OPTION_1 = '**'
2
- const MARKDOWN_BOLD_OPTION_2 = '__'
3
- const MARKDOWN_WHATSAPP_BOLD = '*'
4
-
5
- const MARKDOWN_ITALIC_OPTION_1 = '*'
6
- const MARKDOWN_WHATSAPP_ITALIC = '_'
7
-
8
- const MARKDOWN_BOLD_OR_ITALIC_REGEX = /(\*\*|__)(.*?)\1|(\*|_)(.*?)\3/g
9
-
10
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN = '**_'
11
- const MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE = '_**'
12
-
13
- const MARKDOWN_BOLD_AND_ITALIC_OPTION1 = /(_\*\*)(.*?)(\*\*_)/g
14
- const MARKDOWN_BOLD_AND_ITALIC_OPTION2 = /(\*__)(.*?)(__\*)/g
15
- const MARKDOWN_BOLD_AND_ITALIC_OPTION3 = /(__\*)(.*?)(\*__)/g
16
-
17
- export function whatsappMarkdown(text: string) {
18
- const textNormalized = normalizeMarkdown(text)
19
- const matches = textNormalized.match(MARKDOWN_BOLD_OR_ITALIC_REGEX)
20
- if (matches) {
21
- const matchesResult = matches.map(match => {
22
- if (match.startsWith(MARKDOWN_BOLD_OPTION_1)) {
23
- return replaceAllOccurrences(
24
- match,
25
- MARKDOWN_BOLD_OPTION_1,
26
- MARKDOWN_WHATSAPP_BOLD
27
- )
28
- }
29
- if (match.startsWith(MARKDOWN_BOLD_OPTION_2)) {
30
- return replaceAllOccurrences(
31
- match,
32
- MARKDOWN_BOLD_OPTION_2,
33
- MARKDOWN_WHATSAPP_BOLD
34
- )
35
- }
36
- if (match.startsWith(MARKDOWN_ITALIC_OPTION_1)) {
37
- return replaceAllOccurrences(
38
- match,
39
- MARKDOWN_ITALIC_OPTION_1,
40
- MARKDOWN_WHATSAPP_ITALIC
41
- )
42
- }
43
- return match
44
- })
45
- let textWhatsapp = textNormalized
46
- for (let i = 0; i < matches.length; i++) {
47
- textWhatsapp = replaceAllOccurrences(
48
- textWhatsapp,
49
- matches[i],
50
- matchesResult[i]
51
- )
52
- }
53
- return textWhatsapp
54
- }
55
- return text
56
- }
57
-
58
- function normalizeMarkdown(text: string) {
59
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION1)
60
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION2)
61
- text = replaceBoldItalic(text, MARKDOWN_BOLD_AND_ITALIC_OPTION3)
62
- return text
63
- }
64
-
65
- function replaceBoldItalic(text: string, regex: RegExp) {
66
- return text.replace(
67
- regex,
68
- (
69
- match: string,
70
- markdownOpen: string,
71
- textInsideMarkdown: string,
72
- markdownClose: string
73
- ) => {
74
- if (match.startsWith(markdownOpen) && match.endsWith(markdownClose)) {
75
- return `${MARKDOWN_NORMALIZED_BOLD_ITALIC_OPEN}${textInsideMarkdown}${MARKDOWN_NORMALIZED_BOLD_ITALIC_CLOSE}`
76
- }
77
- return match
78
- }
79
- )
80
- }
81
-
82
- function replaceAllOccurrences(
83
- text: string,
84
- searchValue: string,
85
- replaceValue: string
86
- ) {
87
- return text.split(searchValue).join(replaceValue)
88
- }