@contentful/field-editor-markdown 1.2.1 → 1.3.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 (136) hide show
  1. package/dist/cjs/MarkdownActions.js +235 -0
  2. package/dist/cjs/MarkdownEditor.js +180 -0
  3. package/dist/cjs/__fixtures__/FakeSdk.js +183 -0
  4. package/dist/cjs/__fixtures__/asset/index.js +37 -0
  5. package/dist/cjs/__fixtures__/content-type/index.js +16 -0
  6. package/dist/cjs/__fixtures__/entry/index.js +33 -0
  7. package/dist/cjs/__fixtures__/fixtures.js +71 -0
  8. package/dist/cjs/__fixtures__/locale/index.js +40 -0
  9. package/dist/cjs/__fixtures__/space/index.js +16 -0
  10. package/dist/cjs/codemirrorImports.js +9 -0
  11. package/dist/cjs/components/HeadingSelector.js +66 -0
  12. package/dist/cjs/components/InsertLinkSelector.js +86 -0
  13. package/dist/cjs/components/MarkdownBottomBar.js +111 -0
  14. package/dist/cjs/components/MarkdownConstraints.js +79 -0
  15. package/dist/cjs/components/MarkdownPreview.js +249 -0
  16. package/dist/cjs/components/MarkdownTabs.js +128 -0
  17. package/dist/cjs/components/MarkdownTextarea/CodeMirrorWrapper.js +383 -0
  18. package/dist/cjs/components/MarkdownTextarea/MarkdownCommands.js +233 -0
  19. package/dist/cjs/components/MarkdownTextarea/MarkdownTextarea.js +190 -0
  20. package/dist/cjs/components/MarkdownTextarea/createMarkdownEditor.js +101 -0
  21. package/dist/cjs/components/MarkdownToolbar.js +367 -0
  22. package/dist/cjs/components/icons.js +193 -0
  23. package/dist/cjs/dialogs/CheatsheetModalDialog.js +239 -0
  24. package/dist/cjs/dialogs/ConfirmInsertAssetModalDialog.js +94 -0
  25. package/dist/cjs/dialogs/EmdebExternalContentDialog.js +202 -0
  26. package/dist/cjs/dialogs/InsertLinkModalDialog.js +149 -0
  27. package/dist/cjs/dialogs/InsertTableModalDialog.js +140 -0
  28. package/dist/cjs/dialogs/SpecialCharacterModalDialog.js +146 -0
  29. package/dist/cjs/dialogs/ZenModeModalDialog.js +257 -0
  30. package/dist/cjs/dialogs/openMarkdownDialog.js +121 -0
  31. package/dist/cjs/dialogs/renderMarkdownDialog.js +108 -0
  32. package/dist/cjs/index.js +29 -0
  33. package/dist/cjs/types.js +20 -0
  34. package/dist/cjs/utils/insertAssetLinks.js +122 -0
  35. package/dist/cjs/utils/insertAssetLinks.spec.js +22 -0
  36. package/dist/cjs/utils/isValidUrl.js +22 -0
  37. package/dist/cjs/utils/linkOrganizer.js +187 -0
  38. package/dist/cjs/utils/linkOrganizer.spec.js +96 -0
  39. package/dist/cjs/utils/replaceMailtoAmp.js +15 -0
  40. package/dist/cjs/utils/replaceMailtoAmp.spec.js +22 -0
  41. package/dist/cjs/utils/specialCharacters.js +228 -0
  42. package/dist/cjs/utils/userAgent.js +28 -0
  43. package/dist/esm/MarkdownActions.js +186 -0
  44. package/dist/esm/MarkdownEditor.js +118 -0
  45. package/dist/esm/__fixtures__/FakeSdk.js +173 -0
  46. package/dist/esm/__fixtures__/asset/index.js +6 -0
  47. package/dist/esm/__fixtures__/content-type/index.js +2 -0
  48. package/dist/esm/__fixtures__/entry/index.js +5 -0
  49. package/dist/esm/__fixtures__/fixtures.js +6 -0
  50. package/dist/esm/__fixtures__/locale/index.js +15 -0
  51. package/dist/esm/__fixtures__/space/index.js +2 -0
  52. package/dist/esm/codemirrorImports.js +5 -0
  53. package/dist/esm/components/HeadingSelector.js +17 -0
  54. package/dist/esm/components/InsertLinkSelector.js +37 -0
  55. package/dist/esm/components/MarkdownBottomBar.js +46 -0
  56. package/dist/esm/components/MarkdownConstraints.js +25 -0
  57. package/dist/esm/components/MarkdownPreview.js +195 -0
  58. package/dist/esm/components/MarkdownTabs.js +74 -0
  59. package/dist/esm/components/MarkdownTextarea/CodeMirrorWrapper.js +329 -0
  60. package/dist/esm/components/MarkdownTextarea/MarkdownCommands.js +218 -0
  61. package/dist/esm/components/MarkdownTextarea/MarkdownTextarea.js +136 -0
  62. package/dist/esm/components/MarkdownTextarea/createMarkdownEditor.js +52 -0
  63. package/dist/esm/components/MarkdownToolbar.js +302 -0
  64. package/dist/esm/components/icons.js +112 -0
  65. package/dist/esm/dialogs/CheatsheetModalDialog.js +177 -0
  66. package/dist/esm/dialogs/ConfirmInsertAssetModalDialog.js +37 -0
  67. package/dist/esm/dialogs/EmdebExternalContentDialog.js +140 -0
  68. package/dist/esm/dialogs/InsertLinkModalDialog.js +92 -0
  69. package/dist/esm/dialogs/InsertTableModalDialog.js +78 -0
  70. package/dist/esm/dialogs/SpecialCharacterModalDialog.js +84 -0
  71. package/dist/esm/dialogs/ZenModeModalDialog.js +195 -0
  72. package/dist/esm/dialogs/openMarkdownDialog.js +72 -0
  73. package/dist/esm/dialogs/renderMarkdownDialog.js +59 -0
  74. package/dist/esm/index.js +5 -0
  75. package/dist/esm/types.js +10 -0
  76. package/dist/esm/utils/insertAssetLinks.js +99 -0
  77. package/dist/esm/utils/insertAssetLinks.spec.js +18 -0
  78. package/dist/esm/utils/isValidUrl.js +4 -0
  79. package/dist/esm/utils/linkOrganizer.js +152 -0
  80. package/dist/esm/utils/linkOrganizer.spec.js +53 -0
  81. package/dist/esm/utils/replaceMailtoAmp.js +5 -0
  82. package/dist/esm/utils/replaceMailtoAmp.spec.js +18 -0
  83. package/dist/esm/utils/specialCharacters.js +218 -0
  84. package/dist/esm/utils/userAgent.js +13 -0
  85. package/dist/{MarkdownActions.d.ts → types/MarkdownActions.d.ts} +38 -38
  86. package/dist/{MarkdownEditor.d.ts → types/MarkdownEditor.d.ts} +22 -22
  87. package/dist/types/__fixtures__/FakeSdk.d.ts +8 -0
  88. package/dist/types/__fixtures__/asset/index.d.ts +6 -0
  89. package/dist/types/__fixtures__/content-type/index.d.ts +2 -0
  90. package/dist/types/__fixtures__/entry/index.d.ts +5 -0
  91. package/dist/types/__fixtures__/fixtures.d.ts +6 -0
  92. package/dist/types/__fixtures__/locale/index.d.ts +42 -0
  93. package/dist/types/__fixtures__/space/index.d.ts +2 -0
  94. package/dist/{codemirrorImports.d.ts → types/codemirrorImports.d.ts} +5 -5
  95. package/dist/{components → types/components}/HeadingSelector.d.ts +7 -7
  96. package/dist/{components → types/components}/InsertLinkSelector.d.ts +9 -9
  97. package/dist/{components → types/components}/MarkdownBottomBar.d.ts +11 -11
  98. package/dist/{components → types/components}/MarkdownConstraints.d.ts +6 -6
  99. package/dist/{components → types/components}/MarkdownPreview.d.ts +14 -14
  100. package/dist/{components → types/components}/MarkdownTabs.d.ts +8 -8
  101. package/dist/{components → types/components}/MarkdownTextarea/CodeMirrorWrapper.d.ts +58 -58
  102. package/dist/{components → types/components}/MarkdownTextarea/MarkdownCommands.d.ts +33 -33
  103. package/dist/{components → types/components}/MarkdownTextarea/MarkdownTextarea.d.ts +17 -17
  104. package/dist/{components → types/components}/MarkdownTextarea/createMarkdownEditor.d.ts +55 -55
  105. package/dist/{components → types/components}/MarkdownToolbar.d.ts +12 -12
  106. package/dist/types/components/icons.d.ts +18 -0
  107. package/dist/{dialogs → types/dialogs}/CheatsheetModalDialog.d.ts +4 -4
  108. package/dist/{dialogs → types/dialogs}/ConfirmInsertAssetModalDialog.d.ts +23 -23
  109. package/dist/{dialogs → types/dialogs}/EmdebExternalContentDialog.d.ts +9 -9
  110. package/dist/{dialogs → types/dialogs}/InsertLinkModalDialog.d.ts +17 -17
  111. package/dist/{dialogs → types/dialogs}/InsertTableModalDialog.d.ts +13 -13
  112. package/dist/{dialogs → types/dialogs}/SpecialCharacterModalDialog.d.ts +9 -9
  113. package/dist/{dialogs → types/dialogs}/ZenModeModalDialog.d.ts +24 -24
  114. package/dist/{dialogs → types/dialogs}/openMarkdownDialog.d.ts +5 -5
  115. package/dist/{dialogs → types/dialogs}/renderMarkdownDialog.d.ts +8 -8
  116. package/dist/{index.d.ts → types/index.d.ts} +5 -5
  117. package/dist/{types.d.ts → types/types.d.ts} +75 -75
  118. package/dist/{utils → types/utils}/insertAssetLinks.d.ts +29 -29
  119. package/dist/types/utils/insertAssetLinks.spec.d.ts +1 -0
  120. package/dist/{utils → types/utils}/isValidUrl.d.ts +2 -2
  121. package/dist/{utils → types/utils}/linkOrganizer.d.ts +6 -6
  122. package/dist/types/utils/linkOrganizer.spec.d.ts +1 -0
  123. package/dist/{utils → types/utils}/replaceMailtoAmp.d.ts +1 -1
  124. package/dist/types/utils/replaceMailtoAmp.spec.d.ts +1 -0
  125. package/dist/{utils → types/utils}/specialCharacters.d.ts +4 -4
  126. package/dist/{utils → types/utils}/userAgent.d.ts +1 -1
  127. package/package.json +25 -11
  128. package/CHANGELOG.md +0 -314
  129. package/dist/components/icons.d.ts +0 -18
  130. package/dist/field-editor-markdown.cjs.development.js +0 -3609
  131. package/dist/field-editor-markdown.cjs.development.js.map +0 -1
  132. package/dist/field-editor-markdown.cjs.production.min.js +0 -216
  133. package/dist/field-editor-markdown.cjs.production.min.js.map +0 -1
  134. package/dist/field-editor-markdown.esm.js +0 -3599
  135. package/dist/field-editor-markdown.esm.js.map +0 -1
  136. package/dist/index.js +0 -8
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ ZenModeModalDialog: function() {
13
+ return ZenModeModalDialog;
14
+ },
15
+ openZenMode: function() {
16
+ return openZenMode;
17
+ }
18
+ });
19
+ const _react = _interop_require_wildcard(require("react"));
20
+ const _f36icons = require("@contentful/f36-icons");
21
+ const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
22
+ const _emotion = require("emotion");
23
+ const _MarkdownBottomBar = require("../components/MarkdownBottomBar");
24
+ const _MarkdownPreview = require("../components/MarkdownPreview");
25
+ const _MarkdownTextarea = require("../components/MarkdownTextarea/MarkdownTextarea");
26
+ const _MarkdownToolbar = require("../components/MarkdownToolbar");
27
+ const _CheatsheetModalDialog = require("../dialogs/CheatsheetModalDialog");
28
+ const _MarkdownActions = require("../MarkdownActions");
29
+ const _types = require("../types");
30
+ function _interop_require_default(obj) {
31
+ return obj && obj.__esModule ? obj : {
32
+ default: obj
33
+ };
34
+ }
35
+ function _getRequireWildcardCache(nodeInterop) {
36
+ if (typeof WeakMap !== "function") return null;
37
+ var cacheBabelInterop = new WeakMap();
38
+ var cacheNodeInterop = new WeakMap();
39
+ return (_getRequireWildcardCache = function(nodeInterop) {
40
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
41
+ })(nodeInterop);
42
+ }
43
+ function _interop_require_wildcard(obj, nodeInterop) {
44
+ if (!nodeInterop && obj && obj.__esModule) {
45
+ return obj;
46
+ }
47
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
48
+ return {
49
+ default: obj
50
+ };
51
+ }
52
+ var cache = _getRequireWildcardCache(nodeInterop);
53
+ if (cache && cache.has(obj)) {
54
+ return cache.get(obj);
55
+ }
56
+ var newObj = {};
57
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
58
+ for(var key in obj){
59
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
60
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
61
+ if (desc && (desc.get || desc.set)) {
62
+ Object.defineProperty(newObj, key, desc);
63
+ } else {
64
+ newObj[key] = obj[key];
65
+ }
66
+ }
67
+ }
68
+ newObj.default = obj;
69
+ if (cache) {
70
+ cache.set(obj, newObj);
71
+ }
72
+ return newObj;
73
+ }
74
+ const styles = {
75
+ root: (0, _emotion.css)({
76
+ position: 'fixed',
77
+ left: 0,
78
+ right: 0,
79
+ top: 0,
80
+ bottom: 0
81
+ }),
82
+ topSplit: (0, _emotion.css)({
83
+ position: 'fixed',
84
+ top: 0,
85
+ height: '48px',
86
+ left: 0,
87
+ right: 0
88
+ }),
89
+ bottomSplit: (0, _emotion.css)({
90
+ position: 'fixed',
91
+ bottom: 0,
92
+ left: 0,
93
+ right: 0,
94
+ height: '36px'
95
+ }),
96
+ editorSplit: (0, _emotion.css)({
97
+ width: '50%',
98
+ position: 'fixed',
99
+ top: '48px',
100
+ left: 0,
101
+ bottom: '36px',
102
+ overflowX: 'hidden',
103
+ overflowY: 'scroll'
104
+ }),
105
+ editorSplitFullscreen: (0, _emotion.css)({
106
+ left: 0,
107
+ right: 0,
108
+ width: '100%'
109
+ }),
110
+ previewSplit: (0, _emotion.css)({
111
+ width: '50%',
112
+ position: 'fixed',
113
+ top: '48px',
114
+ right: 0,
115
+ bottom: '36px',
116
+ overflowX: 'hidden',
117
+ overflowY: 'scroll'
118
+ }),
119
+ separator: (0, _emotion.css)({
120
+ position: 'fixed',
121
+ top: '48px',
122
+ bottom: '36px',
123
+ width: '1px',
124
+ background: _f36tokens.default.gray400,
125
+ left: '50%'
126
+ }),
127
+ button: (0, _emotion.css)({
128
+ position: 'fixed',
129
+ cursor: 'pointer',
130
+ zIndex: 105,
131
+ top: '49%',
132
+ height: '30px',
133
+ backgroundColor: _f36tokens.default.gray100,
134
+ border: `1px solid ${_f36tokens.default.gray400}`,
135
+ padding: 0
136
+ }),
137
+ hideButton: (0, _emotion.css)({
138
+ left: '50%'
139
+ }),
140
+ showButton: (0, _emotion.css)({
141
+ right: 0,
142
+ borderRightWidth: 0
143
+ }),
144
+ icon: (0, _emotion.css)({
145
+ verticalAlign: 'middle'
146
+ })
147
+ };
148
+ const ZenModeModalDialog = (props)=>{
149
+ const [currentValue, setCurrentValue] = _react.useState(props.initialValue ?? '');
150
+ const [showPreview, setShowPreview] = _react.useState(true);
151
+ const [editor, setEditor] = _react.useState(null);
152
+ _react.useEffect(()=>{
153
+ props.sdk?.window?.updateHeight('100%');
154
+ }, []);
155
+ _react.useEffect(()=>{
156
+ setTimeout(()=>{
157
+ editor?.setFullsize();
158
+ editor?.refresh();
159
+ }, 150);
160
+ }, [
161
+ editor
162
+ ]);
163
+ const actions = _react.useMemo(()=>{
164
+ return (0, _MarkdownActions.createMarkdownActions)({
165
+ sdk: props.sdk,
166
+ editor,
167
+ locale: props.locale
168
+ });
169
+ }, [
170
+ editor
171
+ ]);
172
+ actions.closeZenMode = ()=>{
173
+ props.onClose({
174
+ value: currentValue,
175
+ cursor: editor?.getCursor()
176
+ });
177
+ };
178
+ const direction = props.sdk.locales.direction[props.locale] ?? 'ltr';
179
+ return _react.createElement("div", {
180
+ className: styles.root,
181
+ "data-test-id": "zen-mode-markdown-editor"
182
+ }, _react.createElement("div", {
183
+ className: styles.topSplit
184
+ }, _react.createElement(_MarkdownToolbar.MarkdownToolbar, {
185
+ mode: "zen",
186
+ disabled: false,
187
+ canUploadAssets: false,
188
+ actions: actions
189
+ })), _react.createElement("div", {
190
+ className: (0, _emotion.cx)(styles.editorSplit, {
191
+ [styles.editorSplitFullscreen]: showPreview === false
192
+ })
193
+ }, _react.createElement(_MarkdownTextarea.MarkdownTextarea, {
194
+ mode: "zen",
195
+ visible: true,
196
+ disabled: false,
197
+ direction: direction,
198
+ onReady: (editor)=>{
199
+ editor.setContent(props.initialValue ?? '');
200
+ editor.setReadOnly(false);
201
+ setEditor(editor);
202
+ editor.focus();
203
+ editor.events.onChange((value)=>{
204
+ setCurrentValue(value);
205
+ props.saveValueToSDK(value);
206
+ });
207
+ }
208
+ })), showPreview && _react.createElement("div", {
209
+ className: styles.previewSplit
210
+ }, _react.createElement(_MarkdownPreview.MarkdownPreview, {
211
+ direction: direction,
212
+ mode: "zen",
213
+ value: currentValue,
214
+ previewComponents: props.previewComponents
215
+ })), showPreview && _react.createElement("div", {
216
+ className: styles.separator
217
+ }), showPreview && _react.createElement("button", {
218
+ className: (0, _emotion.cx)(styles.button, styles.hideButton),
219
+ "aria-label": "Hide preview",
220
+ onClick: ()=>{
221
+ setShowPreview(false);
222
+ }
223
+ }, _react.createElement(_f36icons.ChevronRightIcon, {
224
+ variant: "muted",
225
+ size: "tiny",
226
+ className: styles.icon
227
+ })), !showPreview && _react.createElement("button", {
228
+ className: (0, _emotion.cx)(styles.button, styles.showButton),
229
+ "aria-label": "Show preview",
230
+ onClick: ()=>{
231
+ setShowPreview(true);
232
+ }
233
+ }, _react.createElement(_f36icons.ChevronLeftIcon, {
234
+ variant: "muted",
235
+ size: "tiny",
236
+ className: styles.icon
237
+ })), _react.createElement("div", {
238
+ className: styles.bottomSplit
239
+ }, _react.createElement(_MarkdownBottomBar.MarkdownBottomBar, null, _react.createElement(_MarkdownBottomBar.MarkdownHelp, {
240
+ onClick: ()=>{
241
+ (0, _CheatsheetModalDialog.openCheatsheetModal)(props.sdk.dialogs);
242
+ }
243
+ }))));
244
+ };
245
+ const openZenMode = (dialogs, options)=>{
246
+ return dialogs.openCurrent({
247
+ width: 'zen',
248
+ shouldCloseOnEscapePress: false,
249
+ minHeight: '100vh',
250
+ shouldCloseOnOverlayClick: false,
251
+ parameters: {
252
+ type: _types.MarkdownDialogType.zenMode,
253
+ initialValue: options.initialValue,
254
+ locale: options.locale
255
+ }
256
+ });
257
+ };
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "openMarkdownDialog", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return openMarkdownDialog;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _fieldeditorshared = require("@contentful/field-editor-shared");
13
+ const _types = require("../types");
14
+ const _CheatsheetModalDialog = require("./CheatsheetModalDialog");
15
+ const _ConfirmInsertAssetModalDialog = require("./ConfirmInsertAssetModalDialog");
16
+ const _EmdebExternalContentDialog = require("./EmdebExternalContentDialog");
17
+ const _InsertLinkModalDialog = require("./InsertLinkModalDialog");
18
+ const _InsertTableModalDialog = require("./InsertTableModalDialog");
19
+ const _SpecialCharacterModalDialog = require("./SpecialCharacterModalDialog");
20
+ const _ZenModeModalDialog = require("./ZenModeModalDialog");
21
+ function _getRequireWildcardCache(nodeInterop) {
22
+ if (typeof WeakMap !== "function") return null;
23
+ var cacheBabelInterop = new WeakMap();
24
+ var cacheNodeInterop = new WeakMap();
25
+ return (_getRequireWildcardCache = function(nodeInterop) {
26
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
27
+ })(nodeInterop);
28
+ }
29
+ function _interop_require_wildcard(obj, nodeInterop) {
30
+ if (!nodeInterop && obj && obj.__esModule) {
31
+ return obj;
32
+ }
33
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
34
+ return {
35
+ default: obj
36
+ };
37
+ }
38
+ var cache = _getRequireWildcardCache(nodeInterop);
39
+ if (cache && cache.has(obj)) {
40
+ return cache.get(obj);
41
+ }
42
+ var newObj = {};
43
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
44
+ for(var key in obj){
45
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
46
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
47
+ if (desc && (desc.get || desc.set)) {
48
+ Object.defineProperty(newObj, key, desc);
49
+ } else {
50
+ newObj[key] = obj[key];
51
+ }
52
+ }
53
+ }
54
+ newObj.default = obj;
55
+ if (cache) {
56
+ cache.set(obj, newObj);
57
+ }
58
+ return newObj;
59
+ }
60
+ const openMarkdownDialog = (sdk, previewComponents)=>(options)=>{
61
+ if (options.parameters?.type === _types.MarkdownDialogType.cheatsheet) {
62
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ()=>{
63
+ return _react.createElement(_CheatsheetModalDialog.CheatsheetModalDialog, null);
64
+ });
65
+ } else if (options.parameters?.type === _types.MarkdownDialogType.insertLink) {
66
+ const selectedText = options.parameters.selectedText;
67
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
68
+ return _react.createElement(_InsertLinkModalDialog.InsertLinkModal, {
69
+ selectedText: selectedText,
70
+ onClose: onClose
71
+ });
72
+ });
73
+ } else if (options.parameters?.type === _types.MarkdownDialogType.insertSpecialCharacter) {
74
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
75
+ return _react.createElement(_SpecialCharacterModalDialog.SpecialCharacterModalDialog, {
76
+ onClose: onClose
77
+ });
78
+ });
79
+ } else if (options.parameters?.type === _types.MarkdownDialogType.insertTable) {
80
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
81
+ return _react.createElement(_InsertTableModalDialog.InsertTableModal, {
82
+ onClose: onClose
83
+ });
84
+ });
85
+ } else if (options.parameters?.type === _types.MarkdownDialogType.embedExternalContent) {
86
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
87
+ return _react.createElement(_EmdebExternalContentDialog.EmbedExternalContentModal, {
88
+ onClose: onClose
89
+ });
90
+ });
91
+ } else if (options.parameters?.type === _types.MarkdownDialogType.confirmInsertAsset) {
92
+ const locale = options.parameters.locale;
93
+ const assets = options.parameters.assets;
94
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
95
+ return _react.createElement(_ConfirmInsertAssetModalDialog.ConfirmInsertAssetModalDialog, {
96
+ onClose: onClose,
97
+ locale: locale,
98
+ assets: assets
99
+ });
100
+ });
101
+ } else if (options.parameters?.type === _types.MarkdownDialogType.zenMode) {
102
+ const initialValue = options.parameters.initialValue;
103
+ const locale = options.parameters.locale;
104
+ return _fieldeditorshared.ModalDialogLauncher.openDialog(options, ({ onClose })=>{
105
+ return _react.createElement(_ZenModeModalDialog.ZenModeModalDialog, {
106
+ saveValueToSDK: (value)=>{
107
+ if (value) {
108
+ return sdk?.field?.setValue(value);
109
+ }
110
+ return sdk?.field?.removeValue();
111
+ },
112
+ onClose: onClose,
113
+ initialValue: initialValue,
114
+ locale: locale,
115
+ sdk: sdk,
116
+ previewComponents: previewComponents
117
+ });
118
+ });
119
+ }
120
+ return Promise.reject();
121
+ };
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "renderMarkdownDialog", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return renderMarkdownDialog;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _types = require("../types");
13
+ const _CheatsheetModalDialog = require("./CheatsheetModalDialog");
14
+ const _ConfirmInsertAssetModalDialog = require("./ConfirmInsertAssetModalDialog");
15
+ const _EmdebExternalContentDialog = require("./EmdebExternalContentDialog");
16
+ const _InsertLinkModalDialog = require("./InsertLinkModalDialog");
17
+ const _InsertTableModalDialog = require("./InsertTableModalDialog");
18
+ const _SpecialCharacterModalDialog = require("./SpecialCharacterModalDialog");
19
+ const _ZenModeModalDialog = require("./ZenModeModalDialog");
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {};
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
59
+ const renderMarkdownDialog = (sdk)=>{
60
+ const parameters = sdk.parameters.invocation;
61
+ if (parameters.type === _types.MarkdownDialogType.cheatsheet) {
62
+ sdk.window.startAutoResizer();
63
+ return _react.createElement(_CheatsheetModalDialog.CheatsheetModalDialog, null);
64
+ } else if (parameters.type === _types.MarkdownDialogType.insertLink) {
65
+ const selectedText = parameters.selectedText;
66
+ sdk.window.startAutoResizer();
67
+ return _react.createElement(_InsertLinkModalDialog.InsertLinkModal, {
68
+ selectedText: selectedText,
69
+ onClose: sdk.close
70
+ });
71
+ } else if (parameters.type === _types.MarkdownDialogType.insertSpecialCharacter) {
72
+ sdk.window.startAutoResizer();
73
+ return _react.createElement(_SpecialCharacterModalDialog.SpecialCharacterModalDialog, {
74
+ onClose: sdk.close
75
+ });
76
+ } else if (parameters.type === _types.MarkdownDialogType.insertTable) {
77
+ sdk.window.startAutoResizer();
78
+ return _react.createElement(_InsertTableModalDialog.InsertTableModal, {
79
+ onClose: sdk.close
80
+ });
81
+ } else if (parameters.type === _types.MarkdownDialogType.embedExternalContent) {
82
+ sdk.window.startAutoResizer();
83
+ return _react.createElement(_EmdebExternalContentDialog.EmbedExternalContentModal, {
84
+ onClose: sdk.close
85
+ });
86
+ } else if (parameters.type === _types.MarkdownDialogType.confirmInsertAsset) {
87
+ const locale = parameters.locale;
88
+ const assets = parameters.assets;
89
+ sdk.window.startAutoResizer();
90
+ return _react.createElement(_ConfirmInsertAssetModalDialog.ConfirmInsertAssetModalDialog, {
91
+ onClose: sdk.close,
92
+ locale: locale,
93
+ assets: assets
94
+ });
95
+ } else if (parameters.type === _types.MarkdownDialogType.zenMode) {
96
+ const locale = parameters.locale;
97
+ const initialValue = parameters.initialValue;
98
+ sdk.window.updateHeight('100%');
99
+ return _react.createElement(_ZenModeModalDialog.ZenModeModalDialog, {
100
+ onClose: sdk.close,
101
+ saveValueToSDK: ()=>{},
102
+ initialValue: initialValue,
103
+ locale: locale,
104
+ sdk: sdk
105
+ });
106
+ }
107
+ return _react.createElement("div", null);
108
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ MarkdownEditor: function() {
13
+ return _MarkdownEditor.MarkdownEditorConnected;
14
+ },
15
+ MarkdownPreview: function() {
16
+ return _MarkdownPreview.MarkdownPreview;
17
+ },
18
+ openMarkdownDialog: function() {
19
+ return _openMarkdownDialog.openMarkdownDialog;
20
+ },
21
+ renderMarkdownDialog: function() {
22
+ return _renderMarkdownDialog.renderMarkdownDialog;
23
+ }
24
+ });
25
+ require("./codemirrorImports");
26
+ const _MarkdownEditor = require("./MarkdownEditor");
27
+ const _MarkdownPreview = require("./components/MarkdownPreview");
28
+ const _openMarkdownDialog = require("./dialogs/openMarkdownDialog");
29
+ const _renderMarkdownDialog = require("./dialogs/renderMarkdownDialog");
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MarkdownDialogType", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MarkdownDialogType;
9
+ }
10
+ });
11
+ var MarkdownDialogType;
12
+ (function(MarkdownDialogType) {
13
+ MarkdownDialogType["cheatsheet"] = 'markdown-cheatsheet';
14
+ MarkdownDialogType["insertLink"] = 'markdown-insertLink';
15
+ MarkdownDialogType["insertSpecialCharacter"] = 'markdown-insertSpecialCharacter';
16
+ MarkdownDialogType["insertTable"] = 'markdown-insertTable';
17
+ MarkdownDialogType["embedExternalContent"] = 'markdown-embedExternalContent';
18
+ MarkdownDialogType["confirmInsertAsset"] = 'markdown-confirmInsertAsset';
19
+ MarkdownDialogType["zenMode"] = 'markdown-zenMode';
20
+ })(MarkdownDialogType || (MarkdownDialogType = {}));
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ replaceAssetDomain: function() {
13
+ return replaceAssetDomain;
14
+ },
15
+ insertAssetLinks: function() {
16
+ return insertAssetLinks;
17
+ }
18
+ });
19
+ const _get = _interop_require_default(require("lodash/get"));
20
+ const _isObject = _interop_require_default(require("lodash/isObject"));
21
+ function _interop_require_default(obj) {
22
+ return obj && obj.__esModule ? obj : {
23
+ default: obj
24
+ };
25
+ }
26
+ function normalizeWhiteSpace(str) {
27
+ if (str) {
28
+ return str.trim().replace(/\s{2,}/g, ' ');
29
+ } else {
30
+ return str;
31
+ }
32
+ }
33
+ function removeExtension(str) {
34
+ return str.replace(/\.\w+$/g, '');
35
+ }
36
+ function fileNameToTitle(str) {
37
+ return normalizeWhiteSpace(removeExtension(str).replace(/_/g, ' '));
38
+ }
39
+ function replaceAssetDomain(fileUrl) {
40
+ const assetDomainMap = {
41
+ images: 'images.ctfassets.net',
42
+ assets: 'assets.ctfassets.net',
43
+ downloads: 'downloads.ctfassets.net',
44
+ videos: 'videos.ctfassets.net'
45
+ };
46
+ return fileUrl.replace(/(images|assets|downloads|videos).contentful.com/, (_, p1)=>{
47
+ return assetDomainMap[p1];
48
+ });
49
+ }
50
+ function makeAssetLink(asset, { localeCode , fallbackCode , defaultLocaleCode }) {
51
+ const localizedFile = (0, _get.default)(asset, [
52
+ 'fields',
53
+ 'file',
54
+ localeCode
55
+ ]);
56
+ const fallbackFile = fallbackCode ? (0, _get.default)(asset, [
57
+ 'fields',
58
+ 'file',
59
+ fallbackCode
60
+ ]) : null;
61
+ const defaultFile = (0, _get.default)(asset, [
62
+ 'fields',
63
+ 'file',
64
+ defaultLocaleCode
65
+ ]);
66
+ const file = localizedFile || fallbackFile || defaultFile;
67
+ if ((0, _isObject.default)(file) && file.url) {
68
+ const title = (0, _get.default)(asset, [
69
+ 'fields',
70
+ 'title',
71
+ localeCode
72
+ ]) || (0, _get.default)(asset, [
73
+ 'fields',
74
+ 'title',
75
+ fallbackCode || ''
76
+ ]) || (0, _get.default)(asset, [
77
+ 'fields',
78
+ 'title',
79
+ defaultLocaleCode
80
+ ]) || fileNameToTitle(file.fileName);
81
+ const fileUrl = replaceAssetDomain(file.url);
82
+ return {
83
+ title,
84
+ asset,
85
+ url: fileUrl,
86
+ isLocalized: Boolean(localizedFile),
87
+ isFallback: Boolean(fallbackFile),
88
+ asMarkdown: `![${title}](${fileUrl})`
89
+ };
90
+ } else {
91
+ return null;
92
+ }
93
+ }
94
+ async function insertAssetLinks(assets, locales) {
95
+ const otherLocales = assets.filter((asset)=>{
96
+ return !(0, _get.default)(asset, [
97
+ 'fields',
98
+ 'file',
99
+ locales.localeCode
100
+ ]);
101
+ });
102
+ const linksWithMeta = assets.map((asset)=>makeAssetLink(asset, locales)).filter((asset)=>asset !== null);
103
+ if (otherLocales.length > 0) {
104
+ const fallbackAssets = linksWithMeta.filter(({ isLocalized })=>!isLocalized).map(({ title , isFallback , asset })=>{
105
+ const code = isFallback ? locales.fallbackCode : locales.defaultLocaleCode;
106
+ return {
107
+ title,
108
+ thumbnailUrl: asset.fields.file[code].url,
109
+ thumbnailAltText: title,
110
+ description: isFallback ? `Fallback locale (${code})` : `Default locale (${code})`,
111
+ asset: asset
112
+ };
113
+ });
114
+ return {
115
+ fallbacks: fallbackAssets,
116
+ links: linksWithMeta
117
+ };
118
+ }
119
+ return {
120
+ links: linksWithMeta
121
+ };
122
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _insertAssetLinks = require("./insertAssetLinks");
6
+ describe('replaceAssetDomain', ()=>{
7
+ it('should replace contentful.com domains to ctfassets.net', ()=>{
8
+ expect((0, _insertAssetLinks.replaceAssetDomain)('//images.contentful.com/image.jpg')).toBe('//images.ctfassets.net/image.jpg');
9
+ expect((0, _insertAssetLinks.replaceAssetDomain)('//videos.contentful.com/video.mp4')).toBe('//videos.ctfassets.net/video.mp4');
10
+ expect((0, _insertAssetLinks.replaceAssetDomain)('//downloads.contentful.com/file.doc')).toBe('//downloads.ctfassets.net/file.doc');
11
+ expect((0, _insertAssetLinks.replaceAssetDomain)('//assets.contentful.com/file.doc')).toBe('//assets.ctfassets.net/file.doc');
12
+ expect((0, _insertAssetLinks.replaceAssetDomain)('https://images.contentful.com/image.jpg')).toBe('https://images.ctfassets.net/image.jpg');
13
+ expect((0, _insertAssetLinks.replaceAssetDomain)('https://videos.contentful.com/video.mp4')).toBe('https://videos.ctfassets.net/video.mp4');
14
+ expect((0, _insertAssetLinks.replaceAssetDomain)('https://downloads.contentful.com/file.doc')).toBe('https://downloads.ctfassets.net/file.doc');
15
+ expect((0, _insertAssetLinks.replaceAssetDomain)('https://assets.contentful.com/file.doc')).toBe('https://assets.ctfassets.net/file.doc');
16
+ });
17
+ it('should not replace domains not listed on the map', ()=>{
18
+ expect((0, _insertAssetLinks.replaceAssetDomain)('//documents.contentful.com/image.jpg')).toBe('//documents.contentful.com/image.jpg');
19
+ expect((0, _insertAssetLinks.replaceAssetDomain)('anyotherdomain.com/file.doc')).toBe('anyotherdomain.com/file.doc');
20
+ expect((0, _insertAssetLinks.replaceAssetDomain)('https://anyotherdomain.com/file.doc')).toBe('https://anyotherdomain.com/file.doc');
21
+ });
22
+ });