@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.
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 -12
  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,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
+ };