@contentful/field-editor-markdown 1.2.0 → 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 -308
  129. package/dist/components/icons.d.ts +0 -18
  130. package/dist/field-editor-markdown.cjs.development.js +0 -3605
  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 -3595
  135. package/dist/field-editor-markdown.esm.js.map +0 -1
  136. package/dist/index.js +0 -8
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "MarkdownTextarea", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MarkdownTextarea;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
13
+ const _emotion = require("emotion");
14
+ const _createMarkdownEditor = require("./createMarkdownEditor");
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
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 styles = {
60
+ root: (0, _emotion.css)`
61
+ border: 1px solid ${_f36tokens.default.gray400};
62
+ border-width: 0 1px;
63
+ overflow-y: auto;
64
+ height: auto;
65
+ min-height: 300px;
66
+
67
+ .CodeMirror {
68
+ height: auto;
69
+ line-height: ${_f36tokens.default.lineHeightDefault};
70
+ }
71
+ .CodeMirror-lines {
72
+ color: ${_f36tokens.default.gray700};
73
+ padding: ${_f36tokens.default.spacingL};
74
+ }
75
+ .CodeMirror-code {
76
+ font-family: ${_f36tokens.default.fontStackMonospace};
77
+ font-size: ${_f36tokens.default.fontSizeM};
78
+ }
79
+ .CodeMirror-scroll {
80
+ min-height: '6rem';
81
+ }
82
+
83
+ .cm-header {
84
+ color: ${_f36tokens.default.gray900};
85
+ }
86
+ span.cm-variable-2 {
87
+ color: ${_f36tokens.default.gray700};
88
+ }
89
+ .cm-header-1 {
90
+ font-size: 1.9em;
91
+ }
92
+ .cm-header-2 {
93
+ font-size: 1.75em;
94
+ }
95
+ .cm-header-3 {
96
+ font-size: 1.6em;
97
+ }
98
+ .cm-header-4 {
99
+ font-size: 1.45em;
100
+ }
101
+ .cm-header-5 {
102
+ font-size: 1.3em;
103
+ }
104
+ .cm-header-6 {
105
+ font-size: 1.15em;
106
+ }
107
+
108
+ span.cm-tag,
109
+ span.cm-string,
110
+ span.cm-attribute {
111
+ color: ${_f36tokens.default.red600};
112
+ }
113
+ span.cm-string {
114
+ text-decoration: none !important;
115
+ }
116
+ span.cm-quote,
117
+ span.cm-comment {
118
+ color: ${_f36tokens.default.gray600};
119
+ }
120
+ span.cm-link,
121
+ span.cm-url {
122
+ color: ${_f36tokens.default.blue500} !important;
123
+ }
124
+ span.cm-link {
125
+ text-decoration: underline;
126
+ }
127
+ `,
128
+ framed: (0, _emotion.css)({
129
+ '.CodeMirror': {
130
+ maxHeight: '500px'
131
+ }
132
+ }),
133
+ zen: (0, _emotion.css)({
134
+ border: 'none !important',
135
+ '.CodeMirror-lines': {
136
+ maxWidth: '650px',
137
+ margin: '0 auto'
138
+ }
139
+ }),
140
+ disabled: (0, _emotion.css)`
141
+ .CodeMirror {
142
+ background: ${_f36tokens.default.gray100};
143
+ cursor: 'not-allowed';
144
+ }
145
+ .CodeMirror-cursors {
146
+ visibility: hidden !important;
147
+ }
148
+ .CodeMirror-scroll,
149
+ .CodeMirror-sizer,
150
+ .CodeMirror-lines {
151
+ cursor: not-allowed;
152
+ }
153
+ `
154
+ };
155
+ const MarkdownTextarea = _react.default.memo((props)=>{
156
+ const hostRef = (0, _react.useRef)(null);
157
+ const [editor, setEditor] = (0, _react.useState)(null);
158
+ (0, _react.useEffect)(()=>{
159
+ if (hostRef.current) {
160
+ setEditor((0, _createMarkdownEditor.createMarkdownEditor)(hostRef.current, Object.assign({}, {
161
+ direction: props.direction,
162
+ readOnly: true
163
+ }, props.mode === 'zen' ? {
164
+ fixedHeight: true,
165
+ height: '100%'
166
+ } : {}, props.minHeight !== undefined ? {
167
+ height: props.minHeight
168
+ } : {})));
169
+ }
170
+ }, []);
171
+ (0, _react.useEffect)(()=>{
172
+ if (editor) {
173
+ props.onReady(editor);
174
+ }
175
+ }, [
176
+ editor
177
+ ]);
178
+ const className = (0, _emotion.cx)(styles.root, props.minHeight !== undefined ? (0, _emotion.css)({
179
+ minHeight: props.minHeight
180
+ }) : undefined, props.mode === 'default' ? styles.framed : styles.zen, props.disabled && styles.disabled);
181
+ return _react.default.createElement("div", {
182
+ className: className,
183
+ ref: hostRef,
184
+ "data-test-id": "markdown-textarea",
185
+ style: {
186
+ display: props.visible ? 'block' : 'none'
187
+ }
188
+ });
189
+ });
190
+ MarkdownTextarea.displayName = 'MarkdownTextarea';
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createMarkdownEditor", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createMarkdownEditor;
9
+ }
10
+ });
11
+ const _CodeMirrorWrapper = _interop_require_wildcard(require("./CodeMirrorWrapper"));
12
+ const _MarkdownCommands = _interop_require_wildcard(require("./MarkdownCommands"));
13
+ function _getRequireWildcardCache(nodeInterop) {
14
+ if (typeof WeakMap !== "function") return null;
15
+ var cacheBabelInterop = new WeakMap();
16
+ var cacheNodeInterop = new WeakMap();
17
+ return (_getRequireWildcardCache = function(nodeInterop) {
18
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
19
+ })(nodeInterop);
20
+ }
21
+ function _interop_require_wildcard(obj, nodeInterop) {
22
+ if (!nodeInterop && obj && obj.__esModule) {
23
+ return obj;
24
+ }
25
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
26
+ return {
27
+ default: obj
28
+ };
29
+ }
30
+ var cache = _getRequireWildcardCache(nodeInterop);
31
+ if (cache && cache.has(obj)) {
32
+ return cache.get(obj);
33
+ }
34
+ var newObj = {};
35
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
36
+ for(var key in obj){
37
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
38
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
39
+ if (desc && (desc.get || desc.set)) {
40
+ Object.defineProperty(newObj, key, desc);
41
+ } else {
42
+ newObj[key] = obj[key];
43
+ }
44
+ }
45
+ }
46
+ newObj.default = obj;
47
+ if (cache) {
48
+ cache.set(obj, newObj);
49
+ }
50
+ return newObj;
51
+ }
52
+ function createMarkdownEditor(host, options) {
53
+ const editor = _CodeMirrorWrapper.create(host, options);
54
+ function wrapChange(fn) {
55
+ return (e, ch)=>{
56
+ fn(editor.getValue(), e, ch);
57
+ };
58
+ }
59
+ const api = {
60
+ actions: _MarkdownCommands.create(editor),
61
+ history: {
62
+ hasUndo: function() {
63
+ return editor.getHistorySize('undo') > 0;
64
+ },
65
+ hasRedo: function() {
66
+ return editor.getHistorySize('redo') > 0;
67
+ }
68
+ },
69
+ events: {
70
+ onScroll: function(fn) {
71
+ editor.attachEvent('scroll', fn, 150);
72
+ },
73
+ onChange: function(fn) {
74
+ editor.attachEvent('change', wrapChange(fn), 0);
75
+ },
76
+ onPaste: function(fn) {
77
+ editor.attachEvent('paste', fn, 0);
78
+ }
79
+ },
80
+ insert: editor.insertAtCursor,
81
+ focus: editor.focus,
82
+ getContent: editor.getValue,
83
+ destroy: editor.destroy,
84
+ setContent: editor.setValue,
85
+ getSelectedText: editor.getSelectedText,
86
+ usePrimarySelection: editor.usePrimarySelection,
87
+ setReadOnly: editor.setReadOnly,
88
+ selectBackwards: editor.selectBackwards,
89
+ getCursor: editor.getCursor,
90
+ setCursor: editor.setCursor,
91
+ clear: ()=>editor.setValue(''),
92
+ selectAll: editor.selectAll,
93
+ setFullsize: editor.setFullsize,
94
+ refresh: editor.refresh
95
+ };
96
+ editor.addKeyShortcuts({
97
+ B: api.actions.bold,
98
+ I: api.actions.italic
99
+ });
100
+ return api;
101
+ }
@@ -0,0 +1,367 @@
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
+ DefaultMarkdownToolbar: function() {
13
+ return DefaultMarkdownToolbar;
14
+ },
15
+ ZenMarkdownToolbar: function() {
16
+ return ZenMarkdownToolbar;
17
+ },
18
+ MarkdownToolbar: function() {
19
+ return MarkdownToolbar;
20
+ }
21
+ });
22
+ const _react = _interop_require_wildcard(require("react"));
23
+ const _f36components = require("@contentful/f36-components");
24
+ const _f36icons = require("@contentful/f36-icons");
25
+ const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
26
+ const _emotion = require("emotion");
27
+ const _HeadingSelector = require("./HeadingSelector");
28
+ const _icons = _interop_require_wildcard(require("./icons"));
29
+ const _InsertLinkSelector = require("./InsertLinkSelector");
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: 'relative',
77
+ zIndex: Number(_f36tokens.default.zIndexWorkbenchHeader),
78
+ border: `1px solid ${_f36tokens.default.gray400}`,
79
+ backgroundColor: _f36tokens.default.gray100,
80
+ padding: _f36tokens.default.spacingXs,
81
+ borderTopLeftRadius: _f36tokens.default.borderRadiusSmall,
82
+ overflow: 'hidden'
83
+ }),
84
+ button: (0, _emotion.css)({
85
+ height: '30px',
86
+ width: '36px',
87
+ marginLeft: _f36tokens.default.spacing2Xs,
88
+ marginRight: _f36tokens.default.spacing2Xs
89
+ }),
90
+ icon: (0, _emotion.css)({
91
+ fill: _f36tokens.default.gray700,
92
+ verticalAlign: 'middle'
93
+ }),
94
+ zenButton: (0, _emotion.css)({
95
+ marginLeft: _f36tokens.default.spacingXs
96
+ }),
97
+ zenButtonPressed: (0, _emotion.css)({
98
+ backgroundColor: _f36tokens.default.gray400
99
+ }),
100
+ tooltip: (0, _emotion.css)({
101
+ zIndex: Number(_f36tokens.default.zIndexTooltip)
102
+ })
103
+ };
104
+ const ToolbarButton = _react.forwardRef((props, ref)=>{
105
+ const { tooltip , onClick , children , className , variant ='transparent' , tooltipPlace ='top' , isDisabled =false , ...otherProps } = props;
106
+ return _react.createElement(_f36components.Tooltip, {
107
+ className: styles.tooltip,
108
+ placement: tooltipPlace,
109
+ content: tooltip
110
+ }, _react.createElement(_f36components.IconButton, {
111
+ ...otherProps,
112
+ ref: ref,
113
+ className: (0, _emotion.cx)(styles.button, className),
114
+ isDisabled: isDisabled,
115
+ onClick: onClick,
116
+ variant: variant,
117
+ size: "small",
118
+ icon: children,
119
+ "aria-label": tooltip
120
+ }));
121
+ });
122
+ ToolbarButton.displayName = 'ToolbarButton';
123
+ function MainButtons(props) {
124
+ const tooltipPlace = props.mode === 'zen' ? 'bottom' : 'top';
125
+ return _react.createElement(_react.Fragment, null, _react.createElement(_HeadingSelector.HeadingSelector, {
126
+ onSelect: (heading)=>{
127
+ if (heading && props.actions.headings[heading]) {
128
+ props.actions.headings[heading]();
129
+ }
130
+ }
131
+ }, _react.createElement(ToolbarButton, {
132
+ isDisabled: props.disabled,
133
+ testId: "markdown-action-button-heading",
134
+ tooltip: "Headings",
135
+ tooltipPlace: tooltipPlace
136
+ }, _react.createElement(_f36icons.HeadingIcon, {
137
+ "aria-label": "Headings",
138
+ className: styles.icon
139
+ }))), _react.createElement(ToolbarButton, {
140
+ isDisabled: props.disabled,
141
+ testId: "markdown-action-button-bold",
142
+ tooltip: "Bold",
143
+ tooltipPlace: tooltipPlace,
144
+ onClick: props.actions.simple.bold
145
+ }, _react.createElement(_f36icons.FormatBoldIcon, {
146
+ "aria-label": "Bold",
147
+ className: styles.icon
148
+ })), _react.createElement(ToolbarButton, {
149
+ isDisabled: props.disabled,
150
+ testId: "markdown-action-button-italic",
151
+ tooltip: "Italic",
152
+ tooltipPlace: tooltipPlace,
153
+ onClick: props.actions.simple.italic
154
+ }, _react.createElement(_f36icons.FormatItalicIcon, {
155
+ "aria-label": "Italic",
156
+ className: styles.icon
157
+ })), _react.createElement(ToolbarButton, {
158
+ isDisabled: props.disabled,
159
+ testId: "markdown-action-button-quote",
160
+ tooltip: "Quote",
161
+ tooltipPlace: tooltipPlace,
162
+ onClick: props.actions.simple.quote
163
+ }, _react.createElement(_f36icons.QuoteIcon, {
164
+ "aria-label": "Quote",
165
+ className: styles.icon
166
+ })), _react.createElement(ToolbarButton, {
167
+ isDisabled: props.disabled,
168
+ testId: "markdown-action-button-ul",
169
+ tooltip: "Unordered list",
170
+ tooltipPlace: tooltipPlace,
171
+ onClick: props.actions.simple.ul
172
+ }, _react.createElement(_f36icons.ListBulletedIcon, {
173
+ "aria-label": "Unordered list",
174
+ className: styles.icon
175
+ })), _react.createElement(ToolbarButton, {
176
+ isDisabled: props.disabled,
177
+ testId: "markdown-action-button-ol",
178
+ tooltip: "Ordered list",
179
+ tooltipPlace: tooltipPlace,
180
+ onClick: props.actions.simple.ol
181
+ }, _react.createElement(_f36icons.ListNumberedIcon, {
182
+ "aria-label": "Ordered list",
183
+ className: styles.icon
184
+ })), _react.createElement(ToolbarButton, {
185
+ isDisabled: props.disabled,
186
+ testId: "markdown-action-button-link",
187
+ tooltip: "Link",
188
+ tooltipPlace: tooltipPlace,
189
+ onClick: props.actions.insertLink
190
+ }, _react.createElement(_f36icons.LinkIcon, {
191
+ "aria-label": "Link",
192
+ className: styles.icon
193
+ })));
194
+ }
195
+ function AdditionalButtons(props) {
196
+ const tooltipPlace = props.mode === 'zen' ? 'bottom' : 'top';
197
+ return _react.createElement(_react.Fragment, null, _react.createElement(ToolbarButton, {
198
+ isDisabled: props.disabled,
199
+ testId: "markdown-action-button-strike",
200
+ tooltip: "Strike out",
201
+ tooltipPlace: tooltipPlace,
202
+ onClick: props.actions.simple.strike
203
+ }, _react.createElement(_icons.Strikethrough, {
204
+ label: "Strike out",
205
+ className: styles.icon
206
+ })), _react.createElement(ToolbarButton, {
207
+ isDisabled: props.disabled,
208
+ testId: "markdown-action-button-code",
209
+ tooltip: "Code block",
210
+ tooltipPlace: tooltipPlace,
211
+ onClick: props.actions.simple.code
212
+ }, _react.createElement(_f36icons.CodeIcon, {
213
+ "aria-label": "Code block",
214
+ className: styles.icon
215
+ })), _react.createElement(ToolbarButton, {
216
+ isDisabled: props.disabled,
217
+ testId: "markdown-action-button-hr",
218
+ tooltip: "Horizontal rule",
219
+ tooltipPlace: tooltipPlace,
220
+ onClick: props.actions.simple.hr
221
+ }, _react.createElement(_f36icons.HorizontalRuleIcon, {
222
+ "aria-label": "Horizontal rule",
223
+ className: styles.icon
224
+ })), _react.createElement(ToolbarButton, {
225
+ isDisabled: props.disabled,
226
+ testId: "markdown-action-button-indent",
227
+ tooltip: "Increase indentation",
228
+ tooltipPlace: tooltipPlace,
229
+ onClick: props.actions.simple.indent
230
+ }, _react.createElement(_icons.Indent, {
231
+ label: "Increase indentation",
232
+ className: styles.icon
233
+ })), _react.createElement(ToolbarButton, {
234
+ isDisabled: props.disabled,
235
+ testId: "markdown-action-button-dedent",
236
+ tooltip: "Decrease indentation",
237
+ tooltipPlace: tooltipPlace,
238
+ onClick: props.actions.simple.dedent
239
+ }, _react.createElement(_icons.Dedent, {
240
+ label: "Decrease indentation",
241
+ className: styles.icon
242
+ })), _react.createElement(ToolbarButton, {
243
+ isDisabled: props.disabled,
244
+ testId: "markdown-action-button-embed",
245
+ tooltip: "Embed external content",
246
+ tooltipPlace: tooltipPlace,
247
+ onClick: props.actions.embedExternalContent
248
+ }, _react.createElement(_icons.Cubes, {
249
+ label: "Embed external content",
250
+ className: styles.icon
251
+ })), _react.createElement(ToolbarButton, {
252
+ isDisabled: props.disabled,
253
+ testId: "markdown-action-button-table",
254
+ tooltip: "Insert table",
255
+ tooltipPlace: tooltipPlace,
256
+ onClick: props.actions.insertTable
257
+ }, _react.createElement(_icons.Table, {
258
+ label: "Insert table",
259
+ className: styles.icon
260
+ })), _react.createElement(ToolbarButton, {
261
+ isDisabled: props.disabled,
262
+ testId: "markdown-action-button-special",
263
+ tooltip: "Insert special character",
264
+ tooltipPlace: tooltipPlace,
265
+ onClick: props.actions.insertSpecialCharacter
266
+ }, _react.createElement(_icons.SpecialChar, {
267
+ label: "Insert special character",
268
+ className: styles.icon
269
+ })), _react.createElement(ToolbarButton, {
270
+ isDisabled: props.disabled,
271
+ testId: "markdown-action-button-organizeLinks",
272
+ tooltip: "Organize links",
273
+ tooltipPlace: tooltipPlace,
274
+ onClick: props.actions.organizeLinks
275
+ }, _react.createElement(_icons.OrgLinks, {
276
+ label: "Organize links",
277
+ className: styles.icon
278
+ })), _react.createElement(ToolbarButton, {
279
+ isDisabled: props.disabled,
280
+ testId: "markdown-action-button-undo",
281
+ tooltip: "Undo",
282
+ tooltipPlace: tooltipPlace,
283
+ onClick: props.actions.history.undo
284
+ }, _react.createElement(_icons.Undo, {
285
+ label: "Undo",
286
+ className: styles.icon
287
+ })), _react.createElement(ToolbarButton, {
288
+ isDisabled: props.disabled,
289
+ testId: "markdown-action-button-redo",
290
+ tooltip: "Redo",
291
+ tooltipPlace: tooltipPlace,
292
+ onClick: props.actions.history.redo
293
+ }, _react.createElement(_icons.Redo, {
294
+ label: "Redo",
295
+ className: styles.icon
296
+ })));
297
+ }
298
+ function DefaultMarkdownToolbar(props) {
299
+ const [showAdditional, setShowAdditional] = _react.useState(false);
300
+ return _react.createElement("div", {
301
+ className: styles.root
302
+ }, _react.createElement(_f36components.Flex, {
303
+ justifyContent: "space-between",
304
+ flexWrap: "wrap"
305
+ }, _react.createElement(_f36components.Flex, {
306
+ flexWrap: "wrap"
307
+ }, _react.createElement(MainButtons, props), _react.createElement(ToolbarButton, {
308
+ isDisabled: props.disabled,
309
+ testId: "markdown-action-button-toggle-additional",
310
+ tooltip: showAdditional ? 'Hide additional actions' : 'More actions',
311
+ onClick: ()=>{
312
+ setShowAdditional(!showAdditional);
313
+ }
314
+ }, _react.createElement(_f36icons.MoreHorizontalIcon, {
315
+ className: styles.icon
316
+ }))), _react.createElement(_f36components.Flex, null, _react.createElement(_InsertLinkSelector.InsertLinkSelector, {
317
+ disabled: props.disabled,
318
+ onSelectExisting: props.actions.linkExistingMedia,
319
+ onAddNew: props.actions.addNewMedia,
320
+ canAddNew: props.canUploadAssets
321
+ }), _react.createElement(ToolbarButton, {
322
+ isDisabled: props.disabled,
323
+ testId: "markdown-action-button-zen",
324
+ variant: "secondary",
325
+ onClick: props.actions.openZenMode,
326
+ className: styles.zenButton,
327
+ tooltip: "Expand"
328
+ }, _react.createElement(_icons.Zen, {
329
+ label: "Expand",
330
+ className: styles.icon
331
+ })))), showAdditional && _react.createElement(_f36components.Flex, {
332
+ justifyContent: "space-between",
333
+ marginTop: "spacingXs"
334
+ }, _react.createElement(_f36components.Flex, null, _react.createElement(AdditionalButtons, props))));
335
+ }
336
+ function ZenMarkdownToolbar(props) {
337
+ return _react.createElement("div", {
338
+ className: styles.root
339
+ }, _react.createElement(_f36components.Flex, {
340
+ justifyContent: "space-between"
341
+ }, _react.createElement(_f36components.Flex, null, _react.createElement(MainButtons, props), _react.createElement(AdditionalButtons, props)), _react.createElement(_f36components.Flex, null, _react.createElement(_InsertLinkSelector.InsertLinkSelector, {
342
+ disabled: props.disabled,
343
+ onSelectExisting: props.actions.linkExistingMedia,
344
+ onAddNew: props.actions.addNewMedia,
345
+ canAddNew: props.canUploadAssets
346
+ }), _react.createElement(_f36components.IconButton, {
347
+ testId: "markdown-action-button-zen-close",
348
+ variant: "secondary",
349
+ size: "small",
350
+ className: (0, _emotion.cx)(styles.zenButton, styles.zenButtonPressed),
351
+ onClick: ()=>{
352
+ props.actions.closeZenMode();
353
+ },
354
+ icon: _react.createElement(_icons.Zen, {
355
+ label: "Collapse",
356
+ className: styles.icon
357
+ }),
358
+ "aria-label": "Collapse"
359
+ }))));
360
+ }
361
+ const MarkdownToolbar = _react.memo((props)=>{
362
+ if (props.mode === 'zen') {
363
+ return _react.createElement(ZenMarkdownToolbar, props);
364
+ }
365
+ return _react.createElement(DefaultMarkdownToolbar, props);
366
+ });
367
+ MarkdownToolbar.displayName = 'MarkdownToolbar';