@contentful/field-editor-markdown 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/MarkdownActions.js +235 -0
- package/dist/cjs/MarkdownEditor.js +180 -0
- package/dist/cjs/__fixtures__/FakeSdk.js +183 -0
- package/dist/cjs/__fixtures__/asset/index.js +37 -0
- package/dist/cjs/__fixtures__/content-type/index.js +16 -0
- package/dist/cjs/__fixtures__/entry/index.js +33 -0
- package/dist/cjs/__fixtures__/fixtures.js +71 -0
- package/dist/cjs/__fixtures__/locale/index.js +40 -0
- package/dist/cjs/__fixtures__/space/index.js +16 -0
- package/dist/cjs/codemirrorImports.js +9 -0
- package/dist/cjs/components/HeadingSelector.js +66 -0
- package/dist/cjs/components/InsertLinkSelector.js +86 -0
- package/dist/cjs/components/MarkdownBottomBar.js +111 -0
- package/dist/cjs/components/MarkdownConstraints.js +79 -0
- package/dist/cjs/components/MarkdownPreview.js +249 -0
- package/dist/cjs/components/MarkdownTabs.js +128 -0
- package/dist/cjs/components/MarkdownTextarea/CodeMirrorWrapper.js +383 -0
- package/dist/cjs/components/MarkdownTextarea/MarkdownCommands.js +233 -0
- package/dist/cjs/components/MarkdownTextarea/MarkdownTextarea.js +190 -0
- package/dist/cjs/components/MarkdownTextarea/createMarkdownEditor.js +101 -0
- package/dist/cjs/components/MarkdownToolbar.js +367 -0
- package/dist/cjs/components/icons.js +193 -0
- package/dist/cjs/dialogs/CheatsheetModalDialog.js +239 -0
- package/dist/cjs/dialogs/ConfirmInsertAssetModalDialog.js +94 -0
- package/dist/cjs/dialogs/EmdebExternalContentDialog.js +202 -0
- package/dist/cjs/dialogs/InsertLinkModalDialog.js +149 -0
- package/dist/cjs/dialogs/InsertTableModalDialog.js +140 -0
- package/dist/cjs/dialogs/SpecialCharacterModalDialog.js +146 -0
- package/dist/cjs/dialogs/ZenModeModalDialog.js +257 -0
- package/dist/cjs/dialogs/openMarkdownDialog.js +121 -0
- package/dist/cjs/dialogs/renderMarkdownDialog.js +108 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/types.js +20 -0
- package/dist/cjs/utils/insertAssetLinks.js +122 -0
- package/dist/cjs/utils/insertAssetLinks.spec.js +22 -0
- package/dist/cjs/utils/isValidUrl.js +22 -0
- package/dist/cjs/utils/linkOrganizer.js +187 -0
- package/dist/cjs/utils/linkOrganizer.spec.js +96 -0
- package/dist/cjs/utils/replaceMailtoAmp.js +15 -0
- package/dist/cjs/utils/replaceMailtoAmp.spec.js +22 -0
- package/dist/cjs/utils/specialCharacters.js +228 -0
- package/dist/cjs/utils/userAgent.js +28 -0
- package/dist/esm/MarkdownActions.js +186 -0
- package/dist/esm/MarkdownEditor.js +118 -0
- package/dist/esm/__fixtures__/FakeSdk.js +173 -0
- package/dist/esm/__fixtures__/asset/index.js +6 -0
- package/dist/esm/__fixtures__/content-type/index.js +2 -0
- package/dist/esm/__fixtures__/entry/index.js +5 -0
- package/dist/esm/__fixtures__/fixtures.js +6 -0
- package/dist/esm/__fixtures__/locale/index.js +15 -0
- package/dist/esm/__fixtures__/space/index.js +2 -0
- package/dist/esm/codemirrorImports.js +5 -0
- package/dist/esm/components/HeadingSelector.js +17 -0
- package/dist/esm/components/InsertLinkSelector.js +37 -0
- package/dist/esm/components/MarkdownBottomBar.js +46 -0
- package/dist/esm/components/MarkdownConstraints.js +25 -0
- package/dist/esm/components/MarkdownPreview.js +195 -0
- package/dist/esm/components/MarkdownTabs.js +74 -0
- package/dist/esm/components/MarkdownTextarea/CodeMirrorWrapper.js +329 -0
- package/dist/esm/components/MarkdownTextarea/MarkdownCommands.js +218 -0
- package/dist/esm/components/MarkdownTextarea/MarkdownTextarea.js +136 -0
- package/dist/esm/components/MarkdownTextarea/createMarkdownEditor.js +52 -0
- package/dist/esm/components/MarkdownToolbar.js +302 -0
- package/dist/esm/components/icons.js +112 -0
- package/dist/esm/dialogs/CheatsheetModalDialog.js +177 -0
- package/dist/esm/dialogs/ConfirmInsertAssetModalDialog.js +37 -0
- package/dist/esm/dialogs/EmdebExternalContentDialog.js +140 -0
- package/dist/esm/dialogs/InsertLinkModalDialog.js +92 -0
- package/dist/esm/dialogs/InsertTableModalDialog.js +78 -0
- package/dist/esm/dialogs/SpecialCharacterModalDialog.js +84 -0
- package/dist/esm/dialogs/ZenModeModalDialog.js +195 -0
- package/dist/esm/dialogs/openMarkdownDialog.js +72 -0
- package/dist/esm/dialogs/renderMarkdownDialog.js +59 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/types.js +10 -0
- package/dist/esm/utils/insertAssetLinks.js +99 -0
- package/dist/esm/utils/insertAssetLinks.spec.js +18 -0
- package/dist/esm/utils/isValidUrl.js +4 -0
- package/dist/esm/utils/linkOrganizer.js +152 -0
- package/dist/esm/utils/linkOrganizer.spec.js +53 -0
- package/dist/esm/utils/replaceMailtoAmp.js +5 -0
- package/dist/esm/utils/replaceMailtoAmp.spec.js +18 -0
- package/dist/esm/utils/specialCharacters.js +218 -0
- package/dist/esm/utils/userAgent.js +13 -0
- package/dist/{MarkdownActions.d.ts → types/MarkdownActions.d.ts} +38 -38
- package/dist/{MarkdownEditor.d.ts → types/MarkdownEditor.d.ts} +22 -22
- package/dist/types/__fixtures__/FakeSdk.d.ts +8 -0
- package/dist/types/__fixtures__/asset/index.d.ts +6 -0
- package/dist/types/__fixtures__/content-type/index.d.ts +2 -0
- package/dist/types/__fixtures__/entry/index.d.ts +5 -0
- package/dist/types/__fixtures__/fixtures.d.ts +6 -0
- package/dist/types/__fixtures__/locale/index.d.ts +42 -0
- package/dist/types/__fixtures__/space/index.d.ts +2 -0
- package/dist/{codemirrorImports.d.ts → types/codemirrorImports.d.ts} +5 -5
- package/dist/{components → types/components}/HeadingSelector.d.ts +7 -7
- package/dist/{components → types/components}/InsertLinkSelector.d.ts +9 -9
- package/dist/{components → types/components}/MarkdownBottomBar.d.ts +11 -11
- package/dist/{components → types/components}/MarkdownConstraints.d.ts +6 -6
- package/dist/{components → types/components}/MarkdownPreview.d.ts +14 -14
- package/dist/{components → types/components}/MarkdownTabs.d.ts +8 -8
- package/dist/{components → types/components}/MarkdownTextarea/CodeMirrorWrapper.d.ts +58 -58
- package/dist/{components → types/components}/MarkdownTextarea/MarkdownCommands.d.ts +33 -33
- package/dist/{components → types/components}/MarkdownTextarea/MarkdownTextarea.d.ts +17 -17
- package/dist/{components → types/components}/MarkdownTextarea/createMarkdownEditor.d.ts +55 -55
- package/dist/{components → types/components}/MarkdownToolbar.d.ts +12 -12
- package/dist/types/components/icons.d.ts +18 -0
- package/dist/{dialogs → types/dialogs}/CheatsheetModalDialog.d.ts +4 -4
- package/dist/{dialogs → types/dialogs}/ConfirmInsertAssetModalDialog.d.ts +23 -23
- package/dist/{dialogs → types/dialogs}/EmdebExternalContentDialog.d.ts +9 -9
- package/dist/{dialogs → types/dialogs}/InsertLinkModalDialog.d.ts +17 -17
- package/dist/{dialogs → types/dialogs}/InsertTableModalDialog.d.ts +13 -13
- package/dist/{dialogs → types/dialogs}/SpecialCharacterModalDialog.d.ts +9 -9
- package/dist/{dialogs → types/dialogs}/ZenModeModalDialog.d.ts +24 -24
- package/dist/{dialogs → types/dialogs}/openMarkdownDialog.d.ts +5 -5
- package/dist/{dialogs → types/dialogs}/renderMarkdownDialog.d.ts +8 -8
- package/dist/{index.d.ts → types/index.d.ts} +5 -5
- package/dist/{types.d.ts → types/types.d.ts} +75 -75
- package/dist/{utils → types/utils}/insertAssetLinks.d.ts +29 -29
- package/dist/types/utils/insertAssetLinks.spec.d.ts +1 -0
- package/dist/{utils → types/utils}/isValidUrl.d.ts +2 -2
- package/dist/{utils → types/utils}/linkOrganizer.d.ts +6 -6
- package/dist/types/utils/linkOrganizer.spec.d.ts +1 -0
- package/dist/{utils → types/utils}/replaceMailtoAmp.d.ts +1 -1
- package/dist/types/utils/replaceMailtoAmp.spec.d.ts +1 -0
- package/dist/{utils → types/utils}/specialCharacters.d.ts +4 -4
- package/dist/{utils → types/utils}/userAgent.d.ts +1 -1
- package/package.json +25 -12
- package/CHANGELOG.md +0 -314
- package/dist/components/icons.d.ts +0 -18
- package/dist/field-editor-markdown.cjs.development.js +0 -3609
- package/dist/field-editor-markdown.cjs.development.js.map +0 -1
- package/dist/field-editor-markdown.cjs.production.min.js +0 -216
- package/dist/field-editor-markdown.cjs.production.min.js.map +0 -1
- package/dist/field-editor-markdown.esm.js +0 -3599
- package/dist/field-editor-markdown.esm.js.map +0 -1
- package/dist/index.js +0 -8
|
@@ -0,0 +1,202 @@
|
|
|
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
|
+
EmbedExternalContentModal: function() {
|
|
13
|
+
return EmbedExternalContentModal;
|
|
14
|
+
},
|
|
15
|
+
openEmbedExternalContentDialog: function() {
|
|
16
|
+
return openEmbedExternalContentDialog;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
20
|
+
const _f36components = require("@contentful/f36-components");
|
|
21
|
+
const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
|
|
22
|
+
const _emotion = require("emotion");
|
|
23
|
+
const _types = require("../types");
|
|
24
|
+
const _isValidUrl = require("../utils/isValidUrl");
|
|
25
|
+
function _interop_require_default(obj) {
|
|
26
|
+
return obj && obj.__esModule ? obj : {
|
|
27
|
+
default: obj
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
31
|
+
if (typeof WeakMap !== "function") return null;
|
|
32
|
+
var cacheBabelInterop = new WeakMap();
|
|
33
|
+
var cacheNodeInterop = new WeakMap();
|
|
34
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
35
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
36
|
+
})(nodeInterop);
|
|
37
|
+
}
|
|
38
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
39
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
43
|
+
return {
|
|
44
|
+
default: obj
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
48
|
+
if (cache && cache.has(obj)) {
|
|
49
|
+
return cache.get(obj);
|
|
50
|
+
}
|
|
51
|
+
var newObj = {};
|
|
52
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
53
|
+
for(var key in obj){
|
|
54
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
55
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
56
|
+
if (desc && (desc.get || desc.set)) {
|
|
57
|
+
Object.defineProperty(newObj, key, desc);
|
|
58
|
+
} else {
|
|
59
|
+
newObj[key] = obj[key];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
newObj.default = obj;
|
|
64
|
+
if (cache) {
|
|
65
|
+
cache.set(obj, newObj);
|
|
66
|
+
}
|
|
67
|
+
return newObj;
|
|
68
|
+
}
|
|
69
|
+
const styles = {
|
|
70
|
+
widthFiledGroup: (0, _emotion.css)({
|
|
71
|
+
display: 'flex',
|
|
72
|
+
flexWrap: 'nowrap',
|
|
73
|
+
alignItems: 'flex-start'
|
|
74
|
+
}),
|
|
75
|
+
radioButtonGroup: (0, _emotion.css)({
|
|
76
|
+
display: 'inline-flex',
|
|
77
|
+
alignItems: 'flex-start',
|
|
78
|
+
paddingTop: _f36tokens.default.spacingXl
|
|
79
|
+
}),
|
|
80
|
+
radioButton: (0, _emotion.css)({
|
|
81
|
+
marginLeft: _f36tokens.default.spacingM
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
const makeEmbedlyLink = ({ url , width , selectedUnit , attachSocial })=>{
|
|
85
|
+
const s = {
|
|
86
|
+
percent: '%',
|
|
87
|
+
px: 'px'
|
|
88
|
+
};
|
|
89
|
+
return [
|
|
90
|
+
'<a href="' + url + '" class="embedly-card" ',
|
|
91
|
+
'data-card-width="' + width + s[selectedUnit] + '" ',
|
|
92
|
+
'data-card-controls="' + (attachSocial ? '1' : '0') + '"',
|
|
93
|
+
'>Embedded content: ' + url + '</a>'
|
|
94
|
+
].join('');
|
|
95
|
+
};
|
|
96
|
+
const isWidthValid = (width, unit)=>unit === 'percent' ? width <= 100 : true;
|
|
97
|
+
const EmbedExternalContentModal = ({ onClose })=>{
|
|
98
|
+
const mainInputRef = (0, _react.useRef)(null);
|
|
99
|
+
const [url, setUrl] = (0, _react.useState)('https://');
|
|
100
|
+
const [selectedUnit, setUnit] = (0, _react.useState)('percent');
|
|
101
|
+
const [urlIsValid, setUrlValidity] = (0, _react.useState)(true);
|
|
102
|
+
const [width, setWidth] = (0, _react.useState)('100');
|
|
103
|
+
const [attachSocial, setAttachSocial] = (0, _react.useState)(false);
|
|
104
|
+
(0, _react.useEffect)(()=>{
|
|
105
|
+
if (mainInputRef.current?.focus) {
|
|
106
|
+
mainInputRef.current.focus();
|
|
107
|
+
}
|
|
108
|
+
}, [
|
|
109
|
+
mainInputRef
|
|
110
|
+
]);
|
|
111
|
+
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_f36components.ModalContent, {
|
|
112
|
+
testId: "embed-external-dialog"
|
|
113
|
+
}, _react.default.createElement(_f36components.Form, null, _react.default.createElement(_f36components.FormControl, {
|
|
114
|
+
id: "external-link-url-field",
|
|
115
|
+
isRequired: true,
|
|
116
|
+
isInvalid: !urlIsValid
|
|
117
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Content URL"), _react.default.createElement(_f36components.TextInput, {
|
|
118
|
+
name: "external-link-url",
|
|
119
|
+
value: url,
|
|
120
|
+
onChange: (e)=>{
|
|
121
|
+
const value = e.target.value;
|
|
122
|
+
setUrl(value);
|
|
123
|
+
setUrlValidity((0, _isValidUrl.isValidUrl)(value));
|
|
124
|
+
},
|
|
125
|
+
testId: "external-link-url-field",
|
|
126
|
+
placeholder: "https://example.com",
|
|
127
|
+
ref: mainInputRef
|
|
128
|
+
}), _react.default.createElement(_f36components.FormControl.HelpText, null, "Include protocol (e.g. https://)"), !urlIsValid && _react.default.createElement(_f36components.FormControl.ValidationMessage, null, "URL is invalid")), _react.default.createElement(_f36components.TextLink, {
|
|
129
|
+
href: "http://embed.ly/providers",
|
|
130
|
+
target: "_blank",
|
|
131
|
+
rel: "noopener noreferrer"
|
|
132
|
+
}, "Supported sources"), _react.default.createElement("div", {
|
|
133
|
+
className: styles.widthFiledGroup
|
|
134
|
+
}, _react.default.createElement(_f36components.FormControl, {
|
|
135
|
+
id: "embedded-content-width",
|
|
136
|
+
isRequired: true,
|
|
137
|
+
isInvalid: !isWidthValid(Number(width), selectedUnit)
|
|
138
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Width"), _react.default.createElement(_f36components.TextInput, {
|
|
139
|
+
value: width,
|
|
140
|
+
name: "embedded-content-width",
|
|
141
|
+
testId: "embedded-content-width",
|
|
142
|
+
type: "number",
|
|
143
|
+
width: "small",
|
|
144
|
+
onChange: (e)=>setWidth(e.target.value)
|
|
145
|
+
}), !isWidthValid(Number(width), selectedUnit) && _react.default.createElement(_f36components.FormControl.ValidationMessage, null, "Should be equal or less then 100")), _react.default.createElement("div", {
|
|
146
|
+
className: styles.radioButtonGroup
|
|
147
|
+
}, _react.default.createElement(_f36components.Radio, {
|
|
148
|
+
id: "unit-option-percent",
|
|
149
|
+
value: "percent",
|
|
150
|
+
isChecked: selectedUnit === 'percent',
|
|
151
|
+
onChange: ()=>setUnit('percent'),
|
|
152
|
+
className: styles.radioButton
|
|
153
|
+
}, "percent"), _react.default.createElement(_f36components.Radio, {
|
|
154
|
+
id: "unit-option-pixels",
|
|
155
|
+
value: "pixels",
|
|
156
|
+
isChecked: selectedUnit === 'px',
|
|
157
|
+
onChange: ()=>setUnit('px'),
|
|
158
|
+
className: styles.radioButton
|
|
159
|
+
}, "pixels"))), _react.default.createElement(_f36components.Checkbox, {
|
|
160
|
+
id: "attach-social-checkbox",
|
|
161
|
+
name: "attach-social-checkbox",
|
|
162
|
+
value: "Yes",
|
|
163
|
+
isChecked: attachSocial,
|
|
164
|
+
onChange: ()=>setAttachSocial(!attachSocial),
|
|
165
|
+
testId: "attach-social-checkbox"
|
|
166
|
+
}, "Attach social sharing links to this element"), _react.default.createElement(_f36components.Text, {
|
|
167
|
+
as: "p",
|
|
168
|
+
fontColor: "gray500",
|
|
169
|
+
marginTop: "spacingXs"
|
|
170
|
+
}, "To enable this embedded content in your application make sure to add the\xa0", _react.default.createElement(_f36components.TextLink, {
|
|
171
|
+
href: "http://embed.ly/docs/products/cards",
|
|
172
|
+
target: "_blank",
|
|
173
|
+
rel: "noopener noreferrer"
|
|
174
|
+
}, "Embedly's platform.js"), "\xa0on your development environment"))), _react.default.createElement(_f36components.ModalControls, null, _react.default.createElement(_f36components.Button, {
|
|
175
|
+
testId: "emded-external-cancel",
|
|
176
|
+
onClick: ()=>onClose(false),
|
|
177
|
+
variant: "secondary",
|
|
178
|
+
size: "small"
|
|
179
|
+
}, "Cancel"), _react.default.createElement(_f36components.Button, {
|
|
180
|
+
testId: "embed-external-confirm",
|
|
181
|
+
onClick: ()=>onClose(makeEmbedlyLink({
|
|
182
|
+
url,
|
|
183
|
+
width: Number(width),
|
|
184
|
+
selectedUnit,
|
|
185
|
+
attachSocial
|
|
186
|
+
})),
|
|
187
|
+
variant: "positive",
|
|
188
|
+
size: "small"
|
|
189
|
+
}, "Insert")));
|
|
190
|
+
};
|
|
191
|
+
const openEmbedExternalContentDialog = (dialogs)=>{
|
|
192
|
+
return dialogs.openCurrent({
|
|
193
|
+
title: 'Embed external content',
|
|
194
|
+
width: 'large',
|
|
195
|
+
minHeight: '435px',
|
|
196
|
+
shouldCloseOnEscapePress: true,
|
|
197
|
+
shouldCloseOnOverlayClick: true,
|
|
198
|
+
parameters: {
|
|
199
|
+
type: _types.MarkdownDialogType.embedExternalContent
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
};
|
|
@@ -0,0 +1,149 @@
|
|
|
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
|
+
InsertLinkModal: function() {
|
|
13
|
+
return InsertLinkModal;
|
|
14
|
+
},
|
|
15
|
+
openInsertLinkDialog: function() {
|
|
16
|
+
return openInsertLinkDialog;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
20
|
+
const _f36components = require("@contentful/f36-components");
|
|
21
|
+
const _types = require("../types");
|
|
22
|
+
const _isValidUrl = require("../utils/isValidUrl");
|
|
23
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
24
|
+
if (typeof WeakMap !== "function") return null;
|
|
25
|
+
var cacheBabelInterop = new WeakMap();
|
|
26
|
+
var cacheNodeInterop = new WeakMap();
|
|
27
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
28
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
29
|
+
})(nodeInterop);
|
|
30
|
+
}
|
|
31
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
32
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
35
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
36
|
+
return {
|
|
37
|
+
default: obj
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
41
|
+
if (cache && cache.has(obj)) {
|
|
42
|
+
return cache.get(obj);
|
|
43
|
+
}
|
|
44
|
+
var newObj = {};
|
|
45
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
46
|
+
for(var key in obj){
|
|
47
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
48
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
49
|
+
if (desc && (desc.get || desc.set)) {
|
|
50
|
+
Object.defineProperty(newObj, key, desc);
|
|
51
|
+
} else {
|
|
52
|
+
newObj[key] = obj[key];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
newObj.default = obj;
|
|
57
|
+
if (cache) {
|
|
58
|
+
cache.set(obj, newObj);
|
|
59
|
+
}
|
|
60
|
+
return newObj;
|
|
61
|
+
}
|
|
62
|
+
const InsertLinkModal = ({ selectedText , onClose })=>{
|
|
63
|
+
const mainInputRef = (0, _react.useRef)(null);
|
|
64
|
+
const [text, setText] = (0, _react.useState)(selectedText || '');
|
|
65
|
+
const [url, setUrl] = (0, _react.useState)('');
|
|
66
|
+
const [touched, setTouched] = (0, _react.useState)(false);
|
|
67
|
+
const [title, setTitle] = (0, _react.useState)('');
|
|
68
|
+
const onInsert = (values)=>onClose(values);
|
|
69
|
+
const urlIsValid = (0, _isValidUrl.isValidUrl)(url);
|
|
70
|
+
(0, _react.useEffect)(()=>{
|
|
71
|
+
if (mainInputRef?.current?.focus) {
|
|
72
|
+
mainInputRef.current.focus();
|
|
73
|
+
}
|
|
74
|
+
}, [
|
|
75
|
+
mainInputRef
|
|
76
|
+
]);
|
|
77
|
+
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_f36components.ModalContent, {
|
|
78
|
+
testId: "insert-link-modal"
|
|
79
|
+
}, _react.default.createElement(_f36components.Form, {
|
|
80
|
+
onSubmit: ()=>onInsert({
|
|
81
|
+
url,
|
|
82
|
+
text,
|
|
83
|
+
title
|
|
84
|
+
})
|
|
85
|
+
}, _react.default.createElement(_f36components.FormControl, {
|
|
86
|
+
id: "link-text-field",
|
|
87
|
+
isDisabled: Boolean(selectedText)
|
|
88
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Link text"), _react.default.createElement(_f36components.TextInput, {
|
|
89
|
+
name: "link-text",
|
|
90
|
+
value: text,
|
|
91
|
+
onChange: (e)=>{
|
|
92
|
+
setText(e.target.value);
|
|
93
|
+
},
|
|
94
|
+
testId: "link-text-field"
|
|
95
|
+
})), _react.default.createElement(_f36components.FormControl, {
|
|
96
|
+
id: "target-url-field",
|
|
97
|
+
isInvalid: touched && !urlIsValid
|
|
98
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Target URL"), _react.default.createElement(_f36components.TextInput, {
|
|
99
|
+
name: "target-url",
|
|
100
|
+
value: url,
|
|
101
|
+
onChange: (e)=>{
|
|
102
|
+
setUrl(e.target.value);
|
|
103
|
+
setTouched(true);
|
|
104
|
+
},
|
|
105
|
+
placeholder: "https://",
|
|
106
|
+
maxLength: 2100,
|
|
107
|
+
testId: "target-url-field",
|
|
108
|
+
ref: mainInputRef
|
|
109
|
+
}), _react.default.createElement(_f36components.FormControl.HelpText, null, "Include protocol (e.g. https://)"), touched && !urlIsValid && _react.default.createElement(_f36components.FormControl.ValidationMessage, null, "Invalid URL")), _react.default.createElement(_f36components.FormControl, {
|
|
110
|
+
id: "link-title-field"
|
|
111
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Link title"), _react.default.createElement(_f36components.TextInput, {
|
|
112
|
+
name: "link-title",
|
|
113
|
+
value: title,
|
|
114
|
+
onChange: (e)=>{
|
|
115
|
+
setTitle(e.target.value);
|
|
116
|
+
},
|
|
117
|
+
testId: "link-title-field"
|
|
118
|
+
}), _react.default.createElement(_f36components.FormControl.HelpText, null, "Extra link information, usually shown as a tooltip on mouse hover")))), _react.default.createElement(_f36components.ModalControls, null, _react.default.createElement(_f36components.Button, {
|
|
119
|
+
testId: "insert-link-cancel",
|
|
120
|
+
onClick: ()=>onClose(false),
|
|
121
|
+
variant: "secondary",
|
|
122
|
+
size: "small"
|
|
123
|
+
}, "Cancel"), _react.default.createElement(_f36components.Button, {
|
|
124
|
+
testId: "insert-link-confirm",
|
|
125
|
+
onClick: ()=>{
|
|
126
|
+
onInsert({
|
|
127
|
+
url,
|
|
128
|
+
text,
|
|
129
|
+
title
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
isDisabled: !urlIsValid,
|
|
133
|
+
variant: "positive",
|
|
134
|
+
size: "small"
|
|
135
|
+
}, "Insert")));
|
|
136
|
+
};
|
|
137
|
+
const openInsertLinkDialog = (dialogs, params)=>{
|
|
138
|
+
return dialogs.openCurrent({
|
|
139
|
+
title: 'Insert link',
|
|
140
|
+
width: 'large',
|
|
141
|
+
minHeight: '410px',
|
|
142
|
+
shouldCloseOnEscapePress: true,
|
|
143
|
+
shouldCloseOnOverlayClick: true,
|
|
144
|
+
parameters: {
|
|
145
|
+
type: _types.MarkdownDialogType.insertLink,
|
|
146
|
+
...params
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
};
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
InsertTableModal: function() {
|
|
13
|
+
return InsertTableModal;
|
|
14
|
+
},
|
|
15
|
+
openInsertTableDialog: function() {
|
|
16
|
+
return openInsertTableDialog;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
20
|
+
const _f36components = require("@contentful/f36-components");
|
|
21
|
+
const _inRange = _interop_require_default(require("lodash/inRange"));
|
|
22
|
+
const _types = require("../types");
|
|
23
|
+
function _interop_require_default(obj) {
|
|
24
|
+
return obj && obj.__esModule ? obj : {
|
|
25
|
+
default: obj
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
29
|
+
if (typeof WeakMap !== "function") return null;
|
|
30
|
+
var cacheBabelInterop = new WeakMap();
|
|
31
|
+
var cacheNodeInterop = new WeakMap();
|
|
32
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
33
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
34
|
+
})(nodeInterop);
|
|
35
|
+
}
|
|
36
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
37
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
38
|
+
return obj;
|
|
39
|
+
}
|
|
40
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
41
|
+
return {
|
|
42
|
+
default: obj
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
46
|
+
if (cache && cache.has(obj)) {
|
|
47
|
+
return cache.get(obj);
|
|
48
|
+
}
|
|
49
|
+
var newObj = {};
|
|
50
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
51
|
+
for(var key in obj){
|
|
52
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
53
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
54
|
+
if (desc && (desc.get || desc.set)) {
|
|
55
|
+
Object.defineProperty(newObj, key, desc);
|
|
56
|
+
} else {
|
|
57
|
+
newObj[key] = obj[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
newObj.default = obj;
|
|
62
|
+
if (cache) {
|
|
63
|
+
cache.set(obj, newObj);
|
|
64
|
+
}
|
|
65
|
+
return newObj;
|
|
66
|
+
}
|
|
67
|
+
const InsertTableModal = ({ onClose })=>{
|
|
68
|
+
const mainInputRef = (0, _react.useRef)(null);
|
|
69
|
+
const [rows, setRows] = (0, _react.useState)(2);
|
|
70
|
+
const [cols, setColumns] = (0, _react.useState)(1);
|
|
71
|
+
const rowsAreValid = (0, _inRange.default)(rows, 2, 100);
|
|
72
|
+
const colsAreValid = (0, _inRange.default)(cols, 1, 100);
|
|
73
|
+
(0, _react.useEffect)(()=>{
|
|
74
|
+
if (mainInputRef.current?.focus) {
|
|
75
|
+
mainInputRef.current.focus();
|
|
76
|
+
}
|
|
77
|
+
}, [
|
|
78
|
+
mainInputRef
|
|
79
|
+
]);
|
|
80
|
+
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_f36components.ModalContent, {
|
|
81
|
+
testId: "insert-table-modal"
|
|
82
|
+
}, _react.default.createElement(_f36components.Form, null, _react.default.createElement(_f36components.FormControl, {
|
|
83
|
+
id: "insert-table-rows-number-field",
|
|
84
|
+
isRequired: true,
|
|
85
|
+
isInvalid: !rowsAreValid
|
|
86
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Number of rows"), _react.default.createElement(_f36components.TextInput, {
|
|
87
|
+
name: "rows",
|
|
88
|
+
value: rows.toString(),
|
|
89
|
+
onChange: (e)=>setRows(Number(e.target.value)),
|
|
90
|
+
testId: "insert-table-rows-number-field",
|
|
91
|
+
min: 2,
|
|
92
|
+
max: 100,
|
|
93
|
+
pattern: "[1-9][0-9]*",
|
|
94
|
+
type: "number",
|
|
95
|
+
width: "small",
|
|
96
|
+
autoComplete: "off",
|
|
97
|
+
ref: mainInputRef
|
|
98
|
+
}), !rowsAreValid && _react.default.createElement(_f36components.FormControl.ValidationMessage, null, "Should be between 2 and 100")), _react.default.createElement(_f36components.FormControl, {
|
|
99
|
+
id: "insert-table-columns-number-field",
|
|
100
|
+
isRequired: true,
|
|
101
|
+
isInvalid: !colsAreValid
|
|
102
|
+
}, _react.default.createElement(_f36components.FormControl.Label, null, "Number of columns"), _react.default.createElement(_f36components.TextInput, {
|
|
103
|
+
name: "columns",
|
|
104
|
+
value: cols.toString(),
|
|
105
|
+
onChange: (e)=>setColumns(Number(e.target.value)),
|
|
106
|
+
testId: "insert-table-columns-number-field",
|
|
107
|
+
min: 1,
|
|
108
|
+
max: 100,
|
|
109
|
+
pattern: "[1-9][0-9]*",
|
|
110
|
+
type: "number",
|
|
111
|
+
width: "small",
|
|
112
|
+
autoComplete: "off"
|
|
113
|
+
}), !colsAreValid && _react.default.createElement(_f36components.FormControl.ValidationMessage, null, "Should be between 1 and 100")))), _react.default.createElement(_f36components.ModalControls, null, _react.default.createElement(_f36components.Button, {
|
|
114
|
+
testId: "insert-table-cancel",
|
|
115
|
+
onClick: ()=>onClose(false),
|
|
116
|
+
variant: "secondary",
|
|
117
|
+
size: "small"
|
|
118
|
+
}, "Cancel"), _react.default.createElement(_f36components.Button, {
|
|
119
|
+
testId: "insert-table-confirm",
|
|
120
|
+
onClick: ()=>onClose({
|
|
121
|
+
rows,
|
|
122
|
+
cols
|
|
123
|
+
}),
|
|
124
|
+
variant: "positive",
|
|
125
|
+
size: "small",
|
|
126
|
+
isDisabled: !rowsAreValid || !colsAreValid
|
|
127
|
+
}, "Insert")));
|
|
128
|
+
};
|
|
129
|
+
const openInsertTableDialog = (dialogs)=>{
|
|
130
|
+
return dialogs.openCurrent({
|
|
131
|
+
title: 'Insert table',
|
|
132
|
+
width: 'medium',
|
|
133
|
+
minHeight: '260px',
|
|
134
|
+
shouldCloseOnEscapePress: true,
|
|
135
|
+
shouldCloseOnOverlayClick: true,
|
|
136
|
+
parameters: {
|
|
137
|
+
type: _types.MarkdownDialogType.insertTable
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
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
|
+
SpecialCharacterModalDialog: function() {
|
|
13
|
+
return SpecialCharacterModalDialog;
|
|
14
|
+
},
|
|
15
|
+
openInsertSpecialCharacter: function() {
|
|
16
|
+
return openInsertSpecialCharacter;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _react = _interop_require_wildcard(require("react"));
|
|
20
|
+
const _f36components = require("@contentful/f36-components");
|
|
21
|
+
const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
|
|
22
|
+
const _emotion = require("emotion");
|
|
23
|
+
const _types = require("../types");
|
|
24
|
+
const _specialCharacters = require("../utils/specialCharacters");
|
|
25
|
+
function _interop_require_default(obj) {
|
|
26
|
+
return obj && obj.__esModule ? obj : {
|
|
27
|
+
default: obj
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
31
|
+
if (typeof WeakMap !== "function") return null;
|
|
32
|
+
var cacheBabelInterop = new WeakMap();
|
|
33
|
+
var cacheNodeInterop = new WeakMap();
|
|
34
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
35
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
36
|
+
})(nodeInterop);
|
|
37
|
+
}
|
|
38
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
39
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
43
|
+
return {
|
|
44
|
+
default: obj
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
48
|
+
if (cache && cache.has(obj)) {
|
|
49
|
+
return cache.get(obj);
|
|
50
|
+
}
|
|
51
|
+
var newObj = {};
|
|
52
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
53
|
+
for(var key in obj){
|
|
54
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
55
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
56
|
+
if (desc && (desc.get || desc.set)) {
|
|
57
|
+
Object.defineProperty(newObj, key, desc);
|
|
58
|
+
} else {
|
|
59
|
+
newObj[key] = obj[key];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
newObj.default = obj;
|
|
64
|
+
if (cache) {
|
|
65
|
+
cache.set(obj, newObj);
|
|
66
|
+
}
|
|
67
|
+
return newObj;
|
|
68
|
+
}
|
|
69
|
+
const styles = {
|
|
70
|
+
buttonPanel: (0, _emotion.css)({
|
|
71
|
+
display: 'flex',
|
|
72
|
+
flexWrap: 'wrap'
|
|
73
|
+
}),
|
|
74
|
+
charButton: (0, _emotion.css)({
|
|
75
|
+
border: `1px solid ${_f36tokens.default.gray500}`,
|
|
76
|
+
width: '4.1rem',
|
|
77
|
+
height: '4.1rem',
|
|
78
|
+
fontSize: _f36tokens.default.fontSizeXl,
|
|
79
|
+
marginTop: _f36tokens.default.spacing2Xs,
|
|
80
|
+
marginRight: _f36tokens.default.spacing2Xs
|
|
81
|
+
}),
|
|
82
|
+
selectedCharButton: (0, _emotion.css)({
|
|
83
|
+
backgroundColor: _f36tokens.default.gray100
|
|
84
|
+
}),
|
|
85
|
+
tooltip: (0, _emotion.css)({
|
|
86
|
+
zIndex: 1000
|
|
87
|
+
}),
|
|
88
|
+
button: (0, _emotion.css)({
|
|
89
|
+
marginTop: _f36tokens.default.spacingM,
|
|
90
|
+
marginRight: _f36tokens.default.spacingS
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
const SpecialCharacterModalDialog = ({ onClose })=>{
|
|
94
|
+
const [selectedCharacter, setSelectedCharacter] = (0, _react.useState)(_specialCharacters.specialCharacters[0]);
|
|
95
|
+
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_f36components.ModalContent, {
|
|
96
|
+
testId: "insert-special-character-modal"
|
|
97
|
+
}, _react.default.createElement(_f36components.Flex, {
|
|
98
|
+
flexDirection: "column",
|
|
99
|
+
alignItems: "center"
|
|
100
|
+
}, _react.default.createElement(_f36components.Text, {
|
|
101
|
+
as: "div",
|
|
102
|
+
lineHeight: "lineHeight3Xl",
|
|
103
|
+
fontSize: "fontSize3Xl",
|
|
104
|
+
marginBottom: "spacingS"
|
|
105
|
+
}, String.fromCharCode(selectedCharacter.code)), _react.default.createElement(_f36components.Text, {
|
|
106
|
+
as: "div",
|
|
107
|
+
marginBottom: "spacingS"
|
|
108
|
+
}, selectedCharacter.desc)), _react.default.createElement("div", {
|
|
109
|
+
className: styles.buttonPanel
|
|
110
|
+
}, _specialCharacters.specialCharacters.map((char)=>_react.default.createElement("div", {
|
|
111
|
+
key: char.code
|
|
112
|
+
}, _react.default.createElement(_f36components.Tooltip, {
|
|
113
|
+
className: styles.tooltip,
|
|
114
|
+
content: char.desc
|
|
115
|
+
}, _react.default.createElement(_f36components.Button, {
|
|
116
|
+
testId: "special-character-button",
|
|
117
|
+
isActive: char.code === selectedCharacter.code,
|
|
118
|
+
className: styles.charButton,
|
|
119
|
+
variant: "transparent",
|
|
120
|
+
onClick: ()=>setSelectedCharacter(char)
|
|
121
|
+
}, String.fromCharCode(char.code))))))), _react.default.createElement(_f36components.ModalControls, null, _react.default.createElement(_f36components.Button, {
|
|
122
|
+
testId: "insert-character-cancel",
|
|
123
|
+
className: styles.button,
|
|
124
|
+
onClick: ()=>onClose(false),
|
|
125
|
+
variant: "secondary",
|
|
126
|
+
size: "small"
|
|
127
|
+
}, "Cancel"), _react.default.createElement(_f36components.Button, {
|
|
128
|
+
className: styles.button,
|
|
129
|
+
testId: "insert-character-confirm",
|
|
130
|
+
onClick: ()=>onClose(String.fromCharCode(selectedCharacter.code)),
|
|
131
|
+
variant: "positive",
|
|
132
|
+
size: "small"
|
|
133
|
+
}, "Insert selected")));
|
|
134
|
+
};
|
|
135
|
+
const openInsertSpecialCharacter = (dialogs)=>{
|
|
136
|
+
return dialogs.openCurrent({
|
|
137
|
+
title: 'Insert special character',
|
|
138
|
+
width: 'large',
|
|
139
|
+
minHeight: '600px',
|
|
140
|
+
shouldCloseOnEscapePress: true,
|
|
141
|
+
shouldCloseOnOverlayClick: true,
|
|
142
|
+
parameters: {
|
|
143
|
+
type: _types.MarkdownDialogType.insertSpecialCharacter
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
};
|