@gravity-ui/markdown-editor 15.12.1 → 15.13.2
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/build/cjs/core/ExtensionsManager.js +1 -1
- package/build/cjs/core/ExtensionsManager.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownSerializer.d.ts +1 -0
- package/build/cjs/core/markdown/MarkdownSerializer.js +8 -2
- package/build/cjs/core/markdown/MarkdownSerializer.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +6 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.js +8 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
- package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js +22 -5
- package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
- package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js +28 -6
- package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
- package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
- package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js +8 -3
- package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/views.js +1 -0
- package/build/cjs/extensions/yfm/YfmTabs/views.js.map +1 -1
- package/build/cjs/markdown-it/color.d.ts +1 -1
- package/build/cjs/markdown-it/color.js +2 -2
- package/build/cjs/markdown-it/color.js.map +1 -1
- package/build/cjs/toolbar/FlexToolbar.js +1 -1
- package/build/cjs/toolbar/FlexToolbar.js.map +1 -1
- package/build/cjs/toolbar/ToolbarListButton.d.ts +4 -2
- package/build/cjs/toolbar/ToolbarListButton.js +3 -3
- package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/build/esm/core/ExtensionsManager.js +1 -1
- package/build/esm/core/ExtensionsManager.js.map +1 -1
- package/build/esm/core/markdown/MarkdownSerializer.d.ts +1 -0
- package/build/esm/core/markdown/MarkdownSerializer.js +8 -2
- package/build/esm/core/markdown/MarkdownSerializer.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +6 -0
- package/build/esm/extensions/behavior/SelectionContext/index.js +8 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
- package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js +21 -4
- package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
- package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js +27 -5
- package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
- package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
- package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
- package/build/esm/extensions/yfm/Color/ColorSpecs/index.js +8 -3
- package/build/esm/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/views.js +1 -0
- package/build/esm/extensions/yfm/YfmTabs/views.js.map +1 -1
- package/build/esm/markdown-it/color.d.ts +1 -1
- package/build/esm/markdown-it/color.js +1 -1
- package/build/esm/markdown-it/color.js.map +1 -1
- package/build/esm/toolbar/FlexToolbar.js +1 -1
- package/build/esm/toolbar/FlexToolbar.js.map +1 -1
- package/build/esm/toolbar/ToolbarListButton.d.ts +4 -2
- package/build/esm/toolbar/ToolbarListButton.js +3 -3
- package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/build/styles.css +8 -6
- package/package.json +3 -2
|
@@ -1,28 +1,45 @@
|
|
|
1
1
|
import { markTypeFactory } from "../../../../utils/schema.js";
|
|
2
2
|
export const boldMarkName = 'strong';
|
|
3
3
|
export const boldType = markTypeFactory(boldMarkName);
|
|
4
|
+
export const BoldAttrs = {
|
|
5
|
+
Markup: 'data-markup',
|
|
6
|
+
};
|
|
7
|
+
const defaultMarkup = '**';
|
|
4
8
|
export const BoldSpecs = (builder) => {
|
|
5
9
|
builder.addMark(boldMarkName, () => ({
|
|
6
10
|
spec: {
|
|
11
|
+
attrs: { [BoldAttrs.Markup]: { default: defaultMarkup } },
|
|
7
12
|
parseDOM: [
|
|
8
13
|
{ tag: 'b' },
|
|
9
|
-
{
|
|
14
|
+
{
|
|
15
|
+
tag: 'strong',
|
|
16
|
+
getAttrs: (node) => ({
|
|
17
|
+
[BoldAttrs.Markup]: node.getAttribute(BoldAttrs.Markup),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
10
20
|
{
|
|
11
21
|
style: 'font-weight',
|
|
12
22
|
getAttrs: (value) => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null,
|
|
13
23
|
},
|
|
14
24
|
],
|
|
15
|
-
toDOM() {
|
|
16
|
-
return ['strong'];
|
|
25
|
+
toDOM(mark) {
|
|
26
|
+
return ['strong', mark.attrs];
|
|
17
27
|
},
|
|
18
28
|
},
|
|
19
29
|
fromMd: {
|
|
20
30
|
tokenSpec: {
|
|
21
31
|
name: boldMarkName,
|
|
22
32
|
type: 'mark',
|
|
33
|
+
getAttrs: (token) => ({
|
|
34
|
+
[BoldAttrs.Markup]: token.markup,
|
|
35
|
+
}),
|
|
23
36
|
},
|
|
24
37
|
},
|
|
25
|
-
toMd: { open:
|
|
38
|
+
toMd: { open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true },
|
|
26
39
|
}));
|
|
27
40
|
};
|
|
41
|
+
function getMarkup(_, mark) {
|
|
42
|
+
const attr = mark.attrs[BoldAttrs.Markup];
|
|
43
|
+
return attr || defaultMarkup;
|
|
44
|
+
}
|
|
28
45
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Bold/BoldSpecs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Bold/BoldSpecs/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,oCAAyB;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,MAAM,EAAE,aAAa;CACf,CAAC;AACX,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,MAAM,CAAC,MAAM,SAAS,GAAkB,CAAC,OAAO,EAAE,EAAE;IAChD,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAC,OAAO,EAAE,aAAa,EAAC,EAAC;YACrD,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV;oBACI,GAAG,EAAE,QAAQ;oBACb,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACjB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;qBAC1D,CAAC;iBACL;gBACD;oBACI,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAe,CAAC,IAAI,IAAI;iBACjF;aACJ;YACD,KAAK,CAAC,IAAI;gBACN,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM;iBACnC,CAAC;aACL;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;KAC3F,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,CAAU,EAAE,IAAU;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,IAAI,aAAa,CAAC;AACjC,CAAC","sourcesContent":["import type {ExtensionAuto} from '#core';\nimport type {Mark} from '#pm/model';\nimport {markTypeFactory} from 'src/utils/schema';\n\nexport const boldMarkName = 'strong';\nexport const boldType = markTypeFactory(boldMarkName);\nexport const BoldAttrs = {\n Markup: 'data-markup',\n} as const;\nconst defaultMarkup = '**';\n\nexport const BoldSpecs: ExtensionAuto = (builder) => {\n builder.addMark(boldMarkName, () => ({\n spec: {\n attrs: {[BoldAttrs.Markup]: {default: defaultMarkup}},\n parseDOM: [\n {tag: 'b'},\n {\n tag: 'strong',\n getAttrs: (node) => ({\n [BoldAttrs.Markup]: node.getAttribute(BoldAttrs.Markup),\n }),\n },\n {\n style: 'font-weight',\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\n },\n ],\n toDOM(mark) {\n return ['strong', mark.attrs];\n },\n },\n fromMd: {\n tokenSpec: {\n name: boldMarkName,\n type: 'mark',\n getAttrs: (token) => ({\n [BoldAttrs.Markup]: token.markup,\n }),\n },\n },\n toMd: {open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true},\n }));\n};\n\nfunction getMarkup(_: unknown, mark: Mark): string {\n const attr = mark.attrs[BoldAttrs.Markup];\n return attr || defaultMarkup;\n}\n"]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { ExtensionAuto } from "../../../../core/index.js";
|
|
2
2
|
export declare const italicMarkName = "em";
|
|
3
3
|
export declare const italicType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").MarkType;
|
|
4
|
+
export declare const ItalicAttrs: {
|
|
5
|
+
readonly Markup: "data-markup";
|
|
6
|
+
};
|
|
4
7
|
export declare const ItalicSpecs: ExtensionAuto;
|
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
import { markTypeFactory } from "../../../../utils/schema.js";
|
|
2
2
|
export const italicMarkName = 'em';
|
|
3
3
|
export const italicType = markTypeFactory(italicMarkName);
|
|
4
|
+
export const ItalicAttrs = {
|
|
5
|
+
Markup: 'data-markup',
|
|
6
|
+
};
|
|
7
|
+
const defaultMarkup = '*';
|
|
4
8
|
export const ItalicSpecs = (builder) => {
|
|
5
9
|
builder.addMark(italicMarkName, () => ({
|
|
6
10
|
spec: {
|
|
11
|
+
attrs: { [ItalicAttrs.Markup]: { default: defaultMarkup } },
|
|
7
12
|
parseDOM: [
|
|
8
13
|
{ tag: 'i' },
|
|
9
|
-
{
|
|
14
|
+
{
|
|
15
|
+
tag: 'em',
|
|
16
|
+
getAttrs: (node) => ({
|
|
17
|
+
[ItalicAttrs.Markup]: node.getAttribute(ItalicAttrs.Markup),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
10
20
|
{ style: 'font-style', getAttrs: (value) => value === 'italic' && null },
|
|
11
21
|
],
|
|
12
|
-
toDOM() {
|
|
13
|
-
return ['em'];
|
|
22
|
+
toDOM(mark) {
|
|
23
|
+
return ['em', mark.attrs];
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
toMd: { open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true },
|
|
27
|
+
fromMd: {
|
|
28
|
+
tokenSpec: {
|
|
29
|
+
name: italicMarkName,
|
|
30
|
+
type: 'mark',
|
|
31
|
+
getAttrs: (token) => ({
|
|
32
|
+
[ItalicAttrs.Markup]: token.markup,
|
|
33
|
+
}),
|
|
14
34
|
},
|
|
15
35
|
},
|
|
16
|
-
toMd: { open: '*', close: '*', mixable: true, expelEnclosingWhitespace: true },
|
|
17
|
-
fromMd: { tokenSpec: { name: italicMarkName, type: 'mark' } },
|
|
18
36
|
}));
|
|
19
37
|
};
|
|
38
|
+
function getMarkup(_, mark) {
|
|
39
|
+
const attr = mark.attrs[ItalicAttrs.Markup];
|
|
40
|
+
return attr || defaultMarkup;
|
|
41
|
+
}
|
|
20
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Italic/ItalicSpecs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Italic/ItalicSpecs/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,oCAAyB;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,MAAM,EAAE,aAAa;CACf,CAAC;AACX,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAkB,CAAC,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAC,OAAO,EAAE,aAAa,EAAC,EAAC;YACvD,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV;oBACI,GAAG,EAAE,IAAI;oBACT,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACjB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;qBAC9D,CAAC;iBACL;gBACD,EAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAC;aACzE;YACD,KAAK,CAAC,IAAI;gBACN,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;QACxF,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM;iBACrC,CAAC;aACL;SACJ;KACJ,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,CAAU,EAAE,IAAU;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,IAAI,IAAI,aAAa,CAAC;AACjC,CAAC","sourcesContent":["import type {ExtensionAuto} from '#core';\nimport type {Mark} from '#pm/model';\nimport {markTypeFactory} from 'src/utils/schema';\n\nexport const italicMarkName = 'em';\nexport const italicType = markTypeFactory(italicMarkName);\nexport const ItalicAttrs = {\n Markup: 'data-markup',\n} as const;\nconst defaultMarkup = '*';\n\nexport const ItalicSpecs: ExtensionAuto = (builder) => {\n builder.addMark(italicMarkName, () => ({\n spec: {\n attrs: {[ItalicAttrs.Markup]: {default: defaultMarkup}},\n parseDOM: [\n {tag: 'i'},\n {\n tag: 'em',\n getAttrs: (node) => ({\n [ItalicAttrs.Markup]: node.getAttribute(ItalicAttrs.Markup),\n }),\n },\n {style: 'font-style', getAttrs: (value) => value === 'italic' && null},\n ],\n toDOM(mark) {\n return ['em', mark.attrs];\n },\n },\n toMd: {open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true},\n fromMd: {\n tokenSpec: {\n name: italicMarkName,\n type: 'mark',\n getAttrs: (token) => ({\n [ItalicAttrs.Markup]: token.markup,\n }),\n },\n },\n }));\n};\n\nfunction getMarkup(_: unknown, mark: Mark): string {\n const attr = mark.attrs[ItalicAttrs.Markup];\n return attr || defaultMarkup;\n}\n"]}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { toggleMark } from "../../../../pm/commands.js";
|
|
2
|
+
import { linkType } from "../LinkSpecs/index.js";
|
|
1
3
|
import { addPlaceholder } from "./descriptor.js";
|
|
2
4
|
export const addLinkPlaceholder = (deps) => (state, dispatch) => {
|
|
3
5
|
if (!state.selection.empty)
|
|
4
6
|
return false;
|
|
7
|
+
const markType = linkType(state.schema);
|
|
8
|
+
if (markType.isInSet(state.selection.$from.marks()))
|
|
9
|
+
return false;
|
|
10
|
+
if (!toggleMark(markType)(state))
|
|
11
|
+
return false;
|
|
5
12
|
dispatch?.(addPlaceholder(state.tr, deps).scrollIntoView());
|
|
6
13
|
return true;
|
|
7
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Link/PlaceholderWidget/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Link/PlaceholderWidget/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,mCAAqB;AAIxC,OAAO,EAAC,QAAQ,EAAC,8BAAqB;AAEtC,OAAO,EAAC,cAAc,EAAC,wBAAqB;AAE5C,MAAM,CAAC,MAAM,kBAAkB,GAC3B,CAAC,IAAmB,EAAW,EAAE,CACjC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IAChB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,QAAQ,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import {toggleMark} from '#pm/commands';\nimport type {Command} from '#pm/state';\n\nimport type {ExtensionDeps} from '../../../../core';\nimport {linkType} from '../LinkSpecs';\n\nimport {addPlaceholder} from './descriptor';\n\nexport const addLinkPlaceholder =\n (deps: ExtensionDeps): Command =>\n (state, dispatch) => {\n if (!state.selection.empty) return false;\n\n const markType = linkType(state.schema);\n if (markType.isInSet(state.selection.$from.marks())) return false;\n if (!toggleMark(markType)(state)) return false;\n\n dispatch?.(addPlaceholder(state.tr, deps).scrollIntoView());\n return true;\n };\n"]}
|
|
@@ -20,12 +20,14 @@ export const addEmptyLink = (state, dispatch) => {
|
|
|
20
20
|
if ($from.parent !== $to.parent)
|
|
21
21
|
return false;
|
|
22
22
|
let tr = state.tr;
|
|
23
|
-
toggleMark(linkMarkType, {
|
|
23
|
+
const toggleResult = toggleMark(linkMarkType, {
|
|
24
24
|
[LinkAttr.Href]: '',
|
|
25
25
|
[LinkAttr.IsPlaceholder]: true,
|
|
26
26
|
})(state, (_tr) => {
|
|
27
27
|
tr = _tr;
|
|
28
28
|
});
|
|
29
|
+
if (!toggleResult)
|
|
30
|
+
return false;
|
|
29
31
|
tr.scrollIntoView();
|
|
30
32
|
if (selection instanceof NodeSelection) {
|
|
31
33
|
tr.setSelection(NodeSelection.create(tr.doc, $to.pos - 1));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linkEnhanceActions.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Link/actions/linkEnhanceActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAe,aAAa,EAAE,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAC,eAAe,EAAC,mCAA0B;AAClD,OAAO,EAAC,YAAY,EAAC,mCAAgC;AACrD,OAAO,EAA0B,gBAAgB,EAAC,sCAAmC;AACrF,OAAO,EAAC,SAAS,EAAC,wCAA+B;AACjD,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,8BAAqB;AAChD,OAAO,EAAC,kBAAkB,EAAC,yCAAsC;AACjE,OAAO,EAAC,UAAU,EAAC,uBAAoB;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;IACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,EAAC,SAAS,EAAC,GAAG,KAAK,CAAC;IAC1B,MAAM,EAAC,SAAS,EAAC,GAAG,SAAS,CAAC,KAAK,CAAC;IACpC,IACI,SAAS,CAAC,KAAK;QACf,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QAEnE,OAAO,KAAK,CAAC;IACjB,MAAM,EAAC,KAAK,EAAE,GAAG,EAAC,GAAG,SAAS,CAAC;IAC/B,sCAAsC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAClB,UAAU,CAAC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"linkEnhanceActions.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Link/actions/linkEnhanceActions.ts"],"names":[],"mappings":"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","sourcesContent":["import {chainCommands, toggleMark} from 'prosemirror-commands';\nimport {type Command, NodeSelection, TextSelection} from 'prosemirror-state';\n\nimport type {ActionSpec, ExtensionDeps} from '../../../../core';\nimport {isNodeSelection} from '../../../../utils';\nimport {isMarkActive} from '../../../../utils/marks';\nimport {type ImageRendererState, imageRendererKey} from '../../../yfm/ImgSize/const';\nimport {imageType} from '../../Image/ImageSpecs';\nimport {LinkAttr, linkType} from '../LinkSpecs';\nimport {addLinkPlaceholder} from '../PlaceholderWidget/commands';\nimport {removeLink} from '../commands';\n\nexport const addEmptyLink: Command = (state, dispatch) => {\n const linkMarkType = linkType(state.schema);\n const {selection} = state;\n const {nodeAfter} = selection.$from;\n if (\n selection.empty ||\n (isNodeSelection(selection) && selection.node.type !== imageType(state.schema)) ||\n (!(nodeAfter?.isInline && nodeAfter?.isAtom) && !nodeAfter?.isText)\n )\n return false;\n const {$from, $to} = selection;\n // text selection inside one text node\n if ($from.parent !== $to.parent) return false;\n let tr = state.tr;\n const toggleResult = toggleMark(linkMarkType, {\n [LinkAttr.Href]: '',\n [LinkAttr.IsPlaceholder]: true,\n })(state, (_tr) => {\n tr = _tr;\n });\n if (!toggleResult) return false;\n tr.scrollIntoView();\n if (selection instanceof NodeSelection) {\n tr.setSelection(NodeSelection.create(tr.doc, $to.pos - 1));\n\n if (selection.node.type === imageType(state.schema)) {\n const meta: ImageRendererState = {linkAdded: true};\n tr.setMeta(imageRendererKey, meta);\n }\n } else {\n const selectedText = state.doc.textBetween($from.pos, $to.pos);\n const countOfWhitespacesAtEnd = selectedText.length - selectedText.trimEnd().length;\n tr.setSelection(TextSelection.create(tr.doc, $to.pos - countOfWhitespacesAtEnd - 1));\n }\n dispatch?.(tr);\n return true;\n};\n\nexport const addLinkCmd2 = (deps: ExtensionDeps): Command =>\n chainCommands(removeLink, addEmptyLink, addLinkPlaceholder(deps));\n\nexport const linkActionSpec2 = (deps: ExtensionDeps): ActionSpec => ({\n isActive: (state) => Boolean(isMarkActive(state, linkType(state.schema))),\n isEnable: addLinkCmd2(deps),\n run: addLinkCmd2(deps),\n});\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import color from "../../../../markdown-it/color.js";
|
|
2
2
|
import { markTypeFactory } from "../../../../utils/schema.js";
|
|
3
3
|
import { colorClassName, colorMarkName, domColorAttr } from "./const.js";
|
|
4
4
|
export { colorMarkName } from "./const.js";
|
|
@@ -9,6 +9,7 @@ function getColorName(className) {
|
|
|
9
9
|
}
|
|
10
10
|
export const ColorSpecs = (builder, opts) => {
|
|
11
11
|
const { validateClassNameColorName, parseStyleColorValue } = opts;
|
|
12
|
+
const mdPlugin = (md) => md.use(color, { escape: true, defaultClassName: colorClassName });
|
|
12
13
|
builder
|
|
13
14
|
.configureMd((md) => md.use(mdPlugin, { defaultClassName: colorClassName, inline: false }))
|
|
14
15
|
.addMark(colorMarkName, () => ({
|
|
@@ -72,10 +73,14 @@ export const ColorSpecs = (builder, opts) => {
|
|
|
72
73
|
},
|
|
73
74
|
},
|
|
74
75
|
toMd: {
|
|
75
|
-
open: (
|
|
76
|
+
open: (state, mark) => {
|
|
77
|
+
state.escapeCharacters = ['(', ')'];
|
|
76
78
|
return `{${mark.attrs[colorMarkName]}}(`;
|
|
77
79
|
},
|
|
78
|
-
close:
|
|
80
|
+
close: (state) => {
|
|
81
|
+
state.escapeCharacters = undefined;
|
|
82
|
+
return `)`;
|
|
83
|
+
},
|
|
79
84
|
mixable: true,
|
|
80
85
|
expelEnclosingWhitespace: true,
|
|
81
86
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Color/ColorSpecs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Color/ColorSpecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type MarkdownIt from 'markdown-it';\n\nimport color from 'src/markdown-it/color';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nimport {colorClassName, colorMarkName, domColorAttr} from './const';\n\nexport {colorMarkName} from './const';\nexport const colorType = markTypeFactory(colorMarkName);\n\nfunction getColorName(className: string) {\n const regexp = /^(yfm|md)-colorify--(\\w+)$/;\n return className.match(regexp)?.[2];\n}\n\nexport type ColorSpecsOptions = {\n validateClassNameColorName?: (colorName: string) => boolean;\n parseStyleColorValue?: (color: string) => string | null;\n};\n\nexport const ColorSpecs: ExtensionAuto<ColorSpecsOptions> = (builder, opts) => {\n const {validateClassNameColorName, parseStyleColorValue} = opts;\n const mdPlugin = (md: MarkdownIt) =>\n md.use(color, {escape: true, defaultClassName: colorClassName});\n\n builder\n .configureMd((md) => md.use(mdPlugin, {defaultClassName: colorClassName, inline: false}))\n .addMark(colorMarkName, () => ({\n spec: {\n attrs: {[colorMarkName]: {}},\n parseDOM: [\n {\n tag: `span`,\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node === 'string') return false;\n\n for (const className of Array.from(node.classList)) {\n const color = getColorName(className);\n if (color && (validateClassNameColorName?.(color) ?? true)) {\n return {\n [colorMarkName]: color,\n };\n }\n }\n\n return false;\n },\n },\n {\n style: 'color',\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node !== 'string') return false;\n\n const color = parseStyleColorValue?.(node);\n if (color) {\n return {\n [colorMarkName]: color,\n };\n }\n\n return false;\n },\n },\n ],\n toDOM(node) {\n const colorValue = node.attrs[colorMarkName];\n\n return [\n 'span',\n {\n class: [colorClassName, `${colorClassName}--${colorValue}`].join(' '),\n [domColorAttr]: colorValue,\n },\n 0,\n ];\n },\n },\n fromMd: {\n tokenSpec: {\n name: colorMarkName,\n type: 'mark',\n getAttrs(token) {\n return {\n [colorMarkName]: token.info,\n };\n },\n },\n },\n toMd: {\n open: (state, mark) => {\n state.escapeCharacters = ['(', ')'];\n return `{${mark.attrs[colorMarkName]}}(`;\n },\n close: (state) => {\n state.escapeCharacters = undefined;\n return `)`;\n },\n mixable: true,\n expelEnclosingWhitespace: true,\n },\n }));\n};\n"]}
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
margin-bottom: 16px !important;
|
|
16
16
|
}
|
|
17
17
|
.g-md-table-view__buttons-visible .g-md-table-view__plus-button-controls {
|
|
18
|
+
visibility: visible;
|
|
18
19
|
pointer-events: initial;
|
|
19
20
|
opacity: 1;
|
|
20
21
|
}
|
|
21
22
|
.g-md-table-view__plus-button-controls {
|
|
23
|
+
visibility: hidden;
|
|
22
24
|
pointer-events: none;
|
|
23
25
|
opacity: 0;
|
|
24
26
|
transition: opacity 150ms ease 50ms;
|
|
@@ -13,6 +13,7 @@ export const yfmTableView = (node, view, getPos) => {
|
|
|
13
13
|
const actions = bindActions(controlActions)(view);
|
|
14
14
|
const wrapperElem = document.createElement('div');
|
|
15
15
|
wrapperElem.classList.add(wrapperB());
|
|
16
|
+
wrapperElem.dataset.qa = 'g-md-yfm-table-wrapper';
|
|
16
17
|
const tableElem = document.createElement('table');
|
|
17
18
|
tableElem.classList.add(viewB());
|
|
18
19
|
const viewElem = document.createElement('div');
|
|
@@ -30,10 +31,10 @@ export const yfmTableView = (node, view, getPos) => {
|
|
|
30
31
|
const components = [
|
|
31
32
|
_jsx("div", { className: viewB('plus-button-controls', { bottom: true }), children: _jsx(Button, { onClick: () => {
|
|
32
33
|
actions.appendRow.run({ tablePos: getPos() });
|
|
33
|
-
}, className: viewB('plus-button', { bottom: true }), view: 'normal', children: "+" }) }, 1),
|
|
34
|
+
}, className: viewB('plus-button', { bottom: true }), view: 'normal', qa: "g-md-yfm-table-plus-row", children: "+" }) }, 1),
|
|
34
35
|
_jsx("div", { className: viewB('plus-button-controls', { right: true }), children: _jsx(Button, { onClick: () => {
|
|
35
36
|
actions.appendColumn.run({ tablePos: getPos() });
|
|
36
|
-
}, className: viewB('plus-button', { right: true }), view: 'normal', children: "+" }) }, 2),
|
|
37
|
+
}, className: viewB('plus-button', { right: true }), view: 'normal', qa: "g-md-yfm-table-plus-column", children: "+" }) }, 2),
|
|
37
38
|
];
|
|
38
39
|
const renderItem = getReactRendererFromState(view.state).createItem('yfm-table-plus-buttons', () => (_jsx(Portal, { container: controls, children: _jsx(ErrorLoggerBoundary, { children: components }) })));
|
|
39
40
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAC,EAAE,EAAC,oCAAiC;AAC5C,OAAO,EAA2B,WAAW,EAAC,qCAA4B;AAC1E,OAAO,EAAC,mBAAmB,EAAC,oDAAiD;AAC7E,OAAO,EAAC,kBAAkB,EAAC,4CAAmC;AAC9D,OAAO,EAAC,yBAAyB,EAAC,oDAA2C;AAE7E,OAAO,EAAC,cAAc,EAAC,qBAAkB;AAEzC,oBAAqB;AAErB,MAAM,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/view.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Button, Portal} from '@gravity-ui/uikit';\n\nimport {cn} from '../../../../../classname';\nimport {type NodeViewConstructor, bindActions} from '../../../../../core';\nimport {ErrorLoggerBoundary} from '../../../../../react-utils/ErrorBoundary';\nimport {getTableDimensions} from '../../../../../table-utils';\nimport {getReactRendererFromState} from '../../../../behavior/ReactRenderer';\n\nimport {controlActions} from './actions';\n\nimport './view.scss';\n\nconst wrapperB = cn('table-wrapper');\nexport const viewB = cn('table-view');\n\nexport const yfmTableView: NodeViewConstructor = (node, view, getPos) => {\n const actions = bindActions(controlActions)(view);\n\n const wrapperElem = document.createElement('div');\n wrapperElem.classList.add(wrapperB());\n wrapperElem.dataset.qa = 'g-md-yfm-table-wrapper';\n\n const tableElem = document.createElement('table');\n tableElem.classList.add(viewB());\n\n const viewElem = document.createElement('div');\n viewElem.classList.add(viewB('wrapper'));\n\n const controls = document.createElement('div');\n controls.setAttribute('contenteditable', 'false');\n\n const hackStrip = document.createElement('div');\n // this is a strip of a table height. it's a hack so that content of table doesn't get outside of editor borders\n // and thus editing buttons are not cropped\n hackStrip.classList.add(viewB('hack-strip'));\n\n viewElem.appendChild(hackStrip);\n viewElem.appendChild(tableElem);\n viewElem.appendChild(controls);\n wrapperElem.appendChild(viewElem);\n\n const components = [\n <div className={viewB('plus-button-controls', {bottom: true})} key={1}>\n <Button\n onClick={() => {\n actions.appendRow.run({tablePos: getPos()});\n }}\n className={viewB('plus-button', {bottom: true})}\n view={'normal'}\n qa=\"g-md-yfm-table-plus-row\"\n >\n +\n </Button>\n </div>,\n <div className={viewB('plus-button-controls', {right: true})} key={2}>\n <Button\n onClick={() => {\n actions.appendColumn.run({tablePos: getPos()});\n }}\n className={viewB('plus-button', {right: true})}\n view={'normal'}\n qa=\"g-md-yfm-table-plus-column\"\n >\n +\n </Button>\n </div>,\n ];\n\n const renderItem = getReactRendererFromState(view.state).createItem(\n 'yfm-table-plus-buttons',\n () => (\n <Portal container={controls}>\n <ErrorLoggerBoundary>{components}</ErrorLoggerBoundary>\n </Portal>\n ),\n );\n\n return {\n dom: wrapperElem,\n contentDOM: tableElem,\n destroy() {\n renderItem.remove();\n viewElem.remove();\n },\n update(n) {\n const {rows: nRows, cols: nCols} = getTableDimensions(n);\n const {rows, cols} = getTableDimensions(node);\n return !(rows !== nRows || cols !== nCols);\n },\n ignoreMutation(mutation) {\n return (\n mutation.type === 'childList' &&\n (mutation.target === controls || controls.contains(mutation.target))\n );\n },\n };\n};\n"]}
|
|
@@ -3,35 +3,35 @@
|
|
|
3
3
|
z-index: 110;
|
|
4
4
|
top: calc(50% - 14px);
|
|
5
5
|
left: -13px;
|
|
6
|
+
visibility: hidden;
|
|
6
7
|
pointer-events: none;
|
|
7
|
-
opacity: 0;
|
|
8
8
|
border-radius: var(--g-border-radius-s);
|
|
9
9
|
background: var(--g-color-base-background);
|
|
10
10
|
}
|
|
11
11
|
.g-md-table-cell-view__left-button:hover {
|
|
12
|
+
visibility: visible;
|
|
12
13
|
pointer-events: initial;
|
|
13
|
-
opacity: 1;
|
|
14
14
|
}
|
|
15
15
|
.g-md-table-cell-view__upper-button {
|
|
16
16
|
position: absolute;
|
|
17
17
|
z-index: 110;
|
|
18
18
|
top: -13px;
|
|
19
19
|
left: calc(50% - 14px);
|
|
20
|
+
visibility: hidden;
|
|
20
21
|
pointer-events: none;
|
|
21
|
-
opacity: 0;
|
|
22
22
|
border-radius: var(--g-border-radius-s);
|
|
23
23
|
background: var(--g-color-base-background);
|
|
24
24
|
transform: rotate(90deg);
|
|
25
25
|
}
|
|
26
26
|
.g-md-table-cell-view__upper-button:hover {
|
|
27
|
+
visibility: visible;
|
|
27
28
|
pointer-events: initial;
|
|
28
|
-
opacity: 1;
|
|
29
29
|
}
|
|
30
30
|
.g-md-table-cell-view__upper-visible .g-md-table-cell-view__upper-button {
|
|
31
|
+
visibility: visible;
|
|
31
32
|
pointer-events: initial;
|
|
32
|
-
opacity: 1;
|
|
33
33
|
}
|
|
34
34
|
.g-md-table-cell-view__left-visible .g-md-table-cell-view__left-button {
|
|
35
|
+
visibility: visible;
|
|
35
36
|
pointer-events: initial;
|
|
36
|
-
opacity: 1;
|
|
37
37
|
}
|
|
@@ -20,9 +20,10 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
20
20
|
const actions = bindActions(controlActions)(view);
|
|
21
21
|
const controls = [];
|
|
22
22
|
if (isFirstInRow) {
|
|
23
|
-
controls.push(_jsx(DropdownMenu, { switcherWrapperClassName: b('left-button'), renderSwitcher: (props) => (_jsx(Button, { view: 'outlined', size: 's', ...props, children: _jsx(Icon, { data: EllipsisVertical }) })), items: [
|
|
23
|
+
controls.push(_jsx(DropdownMenu, { switcherWrapperClassName: b('left-button'), renderSwitcher: (props) => (_jsx(Button, { view: 'outlined', size: 's', qa: "g-md-yfm-table-row-btn", ...props, children: _jsx(Icon, { data: EllipsisVertical }) })), menuProps: { qa: 'g-md-yfm-table-row-menu' }, items: [
|
|
24
24
|
{
|
|
25
25
|
text: i18n('row.add.before'),
|
|
26
|
+
qa: 'g-md-yfm-table-action-add-row-before',
|
|
26
27
|
action: () => actions.appendRow.run({
|
|
27
28
|
tablePos: getParentTable()?.pos,
|
|
28
29
|
rowNumber,
|
|
@@ -37,6 +38,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
40
|
text: i18n('row.add.after'),
|
|
41
|
+
qa: 'g-md-yfm-table-action-add-row-after',
|
|
40
42
|
action: () => actions.appendRow.run({
|
|
41
43
|
tablePos: getParentTable()?.pos,
|
|
42
44
|
rowNumber,
|
|
@@ -51,6 +53,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
51
53
|
},
|
|
52
54
|
{
|
|
53
55
|
text: i18n('row.remove'),
|
|
56
|
+
qa: 'g-md-yfm-table-action-remove-row',
|
|
54
57
|
action: () => actions.deleteRow.run({
|
|
55
58
|
rowNumber,
|
|
56
59
|
tablePos: getParentTable()?.pos,
|
|
@@ -64,6 +67,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
64
67
|
{
|
|
65
68
|
theme: 'danger',
|
|
66
69
|
text: i18n('table.remove'),
|
|
70
|
+
qa: 'g-md-yfm-table-action-remove-table',
|
|
67
71
|
action: () => actions.deleteTable.run({
|
|
68
72
|
tablePos: getParentTable()?.pos,
|
|
69
73
|
tableNode: getParentTable()?.node,
|
|
@@ -77,9 +81,10 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
77
81
|
] }, 1));
|
|
78
82
|
}
|
|
79
83
|
if (isInFirstRow) {
|
|
80
|
-
controls.push(_jsx(DropdownMenu, { switcherWrapperClassName: b('upper-button'), renderSwitcher: (props) => (_jsx(Button, { view: 'outlined', size: 's', ...props, children: _jsx(Icon, { data: EllipsisVertical }) })), items: [
|
|
84
|
+
controls.push(_jsx(DropdownMenu, { switcherWrapperClassName: b('upper-button'), renderSwitcher: (props) => (_jsx(Button, { view: 'outlined', size: 's', qa: "g-md-yfm-table-column-btn", ...props, children: _jsx(Icon, { data: EllipsisVertical }) })), menuProps: { qa: 'g-md-yfm-table-column-menu' }, items: [
|
|
81
85
|
{
|
|
82
86
|
text: i18n('column.add.before'),
|
|
87
|
+
qa: 'g-md-yfm-table-action-add-column-before',
|
|
83
88
|
action: () => actions.appendColumn.run({
|
|
84
89
|
tablePos: getParentTable()?.pos,
|
|
85
90
|
columnNumber,
|
|
@@ -94,6 +99,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
94
99
|
},
|
|
95
100
|
{
|
|
96
101
|
text: i18n('column.add.after'),
|
|
102
|
+
qa: 'g-md-yfm-table-action-add-column-after',
|
|
97
103
|
action: () => actions.appendColumn.run({
|
|
98
104
|
tablePos: getParentTable()?.pos,
|
|
99
105
|
columnNumber,
|
|
@@ -108,6 +114,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
108
114
|
},
|
|
109
115
|
{
|
|
110
116
|
text: i18n('column.remove'),
|
|
117
|
+
qa: 'g-md-yfm-table-action-remove-column',
|
|
111
118
|
action: () => actions.deleteColumn.run({
|
|
112
119
|
columnNumber,
|
|
113
120
|
tablePos: getParentTable()?.pos,
|
|
@@ -121,6 +128,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
|
|
|
121
128
|
{
|
|
122
129
|
theme: 'danger',
|
|
123
130
|
text: i18n('table.remove'),
|
|
131
|
+
qa: 'g-md-yfm-table-action-remove-table',
|
|
124
132
|
action: () => actions.deleteTable.run({
|
|
125
133
|
tablePos: getParentTable()?.pos,
|
|
126
134
|
tableNode: getParentTable()?.node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yfmTableCellView.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n EllipsisVertical,\n TrashBin,\n Xmark,\n} from '@gravity-ui/icons';\nimport {Button, DropdownMenu, Icon, Portal} from '@gravity-ui/uikit';\nimport type {Node} from 'prosemirror-model';\n// @ts-ignore // TODO: fix cjs build\nimport {type NodeWithPos, findParentNodeClosestToPos} from 'prosemirror-utils';\nimport type {EditorView, NodeView, NodeViewConstructor} from 'prosemirror-view';\n\nimport {cn} from '../../../../../classname';\nimport {bindActions} from '../../../../../core';\nimport {i18n} from '../../../../../i18n/yfm-table';\nimport {ErrorLoggerBoundary} from '../../../../../react-utils/ErrorBoundary';\nimport {getTableDimensions, isTableNode} from '../../../../../table-utils';\nimport {getChildByNode} from '../../../../../utils/node-children';\nimport {getChildrenOfNode} from '../../../../../utils/nodes';\nimport {getReactRendererFromState} from '../../../../behavior/ReactRenderer';\nimport {YfmTableAttr} from '../../const';\n\nimport {controlActions} from './actions';\n\nimport './yfmTableCellView.scss';\n\nexport const yfmTableCellCn = cn('table-cell-view');\nconst b = yfmTableCellCn;\n\ninterface Props {\n columnNumber: number;\n rowNumber: number;\n view: EditorView;\n getParentTable: () => NodeWithPos | undefined;\n isInFirstRow: boolean;\n isFirstInRow: boolean;\n}\n\nconst Controls: React.FC<Props> = function Controls({\n columnNumber,\n rowNumber,\n view,\n getParentTable,\n isInFirstRow,\n isFirstInRow,\n}) {\n const actions = bindActions(controlActions)(view);\n\n const controls: React.ReactElement[] = [];\n\n if (isFirstInRow) {\n controls.push(\n <DropdownMenu\n key={1}\n switcherWrapperClassName={b('left-button')}\n renderSwitcher={(props) => (\n <Button view={'outlined'} size={'s'} {...props}>\n <Icon data={EllipsisVertical} />\n </Button>\n )}\n items={[\n {\n text: i18n('row.add.before'),\n action: () =>\n actions.appendRow.run({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'before',\n }),\n iconStart: <Icon data={ArrowUp} />,\n disabled: !actions.appendRow.isEnable({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'before',\n }),\n },\n {\n text: i18n('row.add.after'),\n action: () =>\n actions.appendRow.run({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'after',\n }),\n iconStart: <Icon data={ArrowDown} />,\n disabled: !actions.appendRow.isEnable({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'after',\n }),\n },\n {\n text: i18n('row.remove'),\n action: () =>\n actions.deleteRow.run({\n rowNumber,\n tablePos: getParentTable()?.pos,\n }),\n iconStart: <Icon data={Xmark} />,\n disabled: !actions.deleteRow.isEnable({\n rowNumber,\n tablePos: getParentTable()?.pos,\n }),\n },\n {\n theme: 'danger',\n text: i18n('table.remove'),\n action: () =>\n actions.deleteTable.run({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n iconStart: <Icon data={TrashBin} />,\n disabled: !actions.deleteTable.isEnable({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n },\n ]}\n />,\n );\n }\n\n if (isInFirstRow) {\n controls.push(\n <DropdownMenu\n key={2}\n switcherWrapperClassName={b('upper-button')}\n renderSwitcher={(props) => (\n <Button view={'outlined'} size={'s'} {...props}>\n <Icon data={EllipsisVertical} />\n </Button>\n )}\n items={[\n {\n text: i18n('column.add.before'),\n action: () =>\n actions.appendColumn.run({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'before',\n }),\n iconStart: <Icon data={ArrowLeft} />,\n disabled: !actions.appendColumn.isEnable({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'before',\n }),\n },\n {\n text: i18n('column.add.after'),\n action: () =>\n actions.appendColumn.run({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'after',\n }),\n iconStart: <Icon data={ArrowRight} />,\n disabled: !actions.appendColumn.isEnable({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'after',\n }),\n },\n {\n text: i18n('column.remove'),\n action: () =>\n actions.deleteColumn.run({\n columnNumber,\n tablePos: getParentTable()?.pos,\n }),\n iconStart: <Icon data={Xmark} />,\n disabled: !actions.deleteColumn.isEnable({\n columnNumber,\n tablePos: getParentTable()?.pos,\n }),\n },\n {\n theme: 'danger',\n text: i18n('table.remove'),\n action: () =>\n actions.deleteTable.run({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n iconStart: <Icon data={TrashBin} />,\n disabled: !actions.deleteTable.isEnable({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n },\n ]}\n />,\n );\n }\n\n return controls.length ? <>{controls}</> : null;\n};\n\nexport const yfmTableCellView: NodeViewConstructor = (node, view, getPos): NodeView => {\n const getParentTable = () =>\n findParentNodeClosestToPos(view.state.doc.resolve(getPos()!), isTableNode);\n\n const parentTable = getParentTable();\n\n const cellCoords = parentTable ? findCellCoords(parentTable.node, node) : null;\n\n // @ts-expect-error\n if (!cellCoords) return {};\n\n const {cellIndex, rowIndex} = cellCoords;\n const isFirstRow = rowIndex === 0;\n const isFirstColumn = cellIndex === 0;\n\n if (!isFirstRow && !isFirstColumn) {\n // in this case, we don't need custom nodeView.\n // @ts-expect-error\n return {};\n }\n\n const dom = document.createElement('td');\n if (node.attrs[YfmTableAttr.Colspan])\n dom.setAttribute('colspan', node.attrs[YfmTableAttr.Colspan]);\n if (node.attrs[YfmTableAttr.Rowspan])\n dom.setAttribute('rowspan', node.attrs[YfmTableAttr.Rowspan]);\n if (node.attrs[YfmTableAttr.CellAlign]) {\n dom.classList.add(node.attrs[YfmTableAttr.CellAlign]);\n dom.setAttribute(YfmTableAttr.CellAlign, node.attrs[YfmTableAttr.Rowspan]);\n }\n\n const contentDOM = document.createElement('div');\n const control = document.createElement('span');\n control.setAttribute('style', 'width: 0; height: 0; float: left;');\n dom.setAttribute('style', 'position: relative; overflow: visible;');\n\n dom.appendChild(contentDOM);\n dom.appendChild(control);\n\n const renderItem = getReactRendererFromState(view.state).createItem(\n 'yfm-table-cell-view',\n () => (\n <Portal container={control}>\n <ErrorLoggerBoundary>\n <Controls\n columnNumber={cellIndex}\n rowNumber={rowIndex}\n isFirstInRow={isFirstColumn}\n isInFirstRow={isFirstRow}\n getParentTable={getParentTable}\n view={view}\n />\n </ErrorLoggerBoundary>\n </Portal>\n ),\n );\n\n return {\n dom,\n contentDOM,\n destroy() {\n renderItem.remove();\n },\n ignoreMutation(mutation) {\n return mutation.target === control || control.contains(mutation.target);\n },\n update(n) {\n const {rows: nRows, cols: nCols} = getTableDimensions(n);\n const {rows, cols} = getTableDimensions(node);\n\n return !(rows !== nRows || cols !== nCols);\n },\n };\n};\n\nfunction findCellCoords(table: Node, cell: Node) {\n if (!table.lastChild) return null;\n const rows = getChildrenOfNode(table.lastChild); // children of tBody\n for (const row of rows) {\n const node = getChildByNode(row.node, cell);\n if (node) {\n return {\n rowIndex: row.index,\n cellIndex: node.index,\n };\n }\n }\n return null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"yfmTableCellView.js","sourceRoot":"../../../../../../../src","sources":["extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n EllipsisVertical,\n TrashBin,\n Xmark,\n} from '@gravity-ui/icons';\nimport {Button, DropdownMenu, Icon, Portal} from '@gravity-ui/uikit';\nimport type {Node} from 'prosemirror-model';\n// @ts-ignore // TODO: fix cjs build\nimport {type NodeWithPos, findParentNodeClosestToPos} from 'prosemirror-utils';\nimport type {EditorView, NodeView, NodeViewConstructor} from 'prosemirror-view';\n\nimport {cn} from '../../../../../classname';\nimport {bindActions} from '../../../../../core';\nimport {i18n} from '../../../../../i18n/yfm-table';\nimport {ErrorLoggerBoundary} from '../../../../../react-utils/ErrorBoundary';\nimport {getTableDimensions, isTableNode} from '../../../../../table-utils';\nimport {getChildByNode} from '../../../../../utils/node-children';\nimport {getChildrenOfNode} from '../../../../../utils/nodes';\nimport {getReactRendererFromState} from '../../../../behavior/ReactRenderer';\nimport {YfmTableAttr} from '../../const';\n\nimport {controlActions} from './actions';\n\nimport './yfmTableCellView.scss';\n\nexport const yfmTableCellCn = cn('table-cell-view');\nconst b = yfmTableCellCn;\n\ninterface Props {\n columnNumber: number;\n rowNumber: number;\n view: EditorView;\n getParentTable: () => NodeWithPos | undefined;\n isInFirstRow: boolean;\n isFirstInRow: boolean;\n}\n\nconst Controls: React.FC<Props> = function Controls({\n columnNumber,\n rowNumber,\n view,\n getParentTable,\n isInFirstRow,\n isFirstInRow,\n}) {\n const actions = bindActions(controlActions)(view);\n\n const controls: React.ReactElement[] = [];\n\n if (isFirstInRow) {\n controls.push(\n <DropdownMenu\n key={1}\n switcherWrapperClassName={b('left-button')}\n renderSwitcher={(props) => (\n <Button view={'outlined'} size={'s'} qa=\"g-md-yfm-table-row-btn\" {...props}>\n <Icon data={EllipsisVertical} />\n </Button>\n )}\n menuProps={{qa: 'g-md-yfm-table-row-menu'}}\n items={[\n {\n text: i18n('row.add.before'),\n qa: 'g-md-yfm-table-action-add-row-before',\n action: () =>\n actions.appendRow.run({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'before',\n }),\n iconStart: <Icon data={ArrowUp} />,\n disabled: !actions.appendRow.isEnable({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'before',\n }),\n },\n {\n text: i18n('row.add.after'),\n qa: 'g-md-yfm-table-action-add-row-after',\n action: () =>\n actions.appendRow.run({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'after',\n }),\n iconStart: <Icon data={ArrowDown} />,\n disabled: !actions.appendRow.isEnable({\n tablePos: getParentTable()?.pos,\n rowNumber,\n direction: 'after',\n }),\n },\n {\n text: i18n('row.remove'),\n qa: 'g-md-yfm-table-action-remove-row',\n action: () =>\n actions.deleteRow.run({\n rowNumber,\n tablePos: getParentTable()?.pos,\n }),\n iconStart: <Icon data={Xmark} />,\n disabled: !actions.deleteRow.isEnable({\n rowNumber,\n tablePos: getParentTable()?.pos,\n }),\n },\n {\n theme: 'danger',\n text: i18n('table.remove'),\n qa: 'g-md-yfm-table-action-remove-table',\n action: () =>\n actions.deleteTable.run({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n iconStart: <Icon data={TrashBin} />,\n disabled: !actions.deleteTable.isEnable({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n },\n ]}\n />,\n );\n }\n\n if (isInFirstRow) {\n controls.push(\n <DropdownMenu\n key={2}\n switcherWrapperClassName={b('upper-button')}\n renderSwitcher={(props) => (\n <Button view={'outlined'} size={'s'} qa=\"g-md-yfm-table-column-btn\" {...props}>\n <Icon data={EllipsisVertical} />\n </Button>\n )}\n menuProps={{qa: 'g-md-yfm-table-column-menu'}}\n items={[\n {\n text: i18n('column.add.before'),\n qa: 'g-md-yfm-table-action-add-column-before',\n action: () =>\n actions.appendColumn.run({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'before',\n }),\n iconStart: <Icon data={ArrowLeft} />,\n disabled: !actions.appendColumn.isEnable({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'before',\n }),\n },\n {\n text: i18n('column.add.after'),\n qa: 'g-md-yfm-table-action-add-column-after',\n action: () =>\n actions.appendColumn.run({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'after',\n }),\n iconStart: <Icon data={ArrowRight} />,\n disabled: !actions.appendColumn.isEnable({\n tablePos: getParentTable()?.pos,\n columnNumber,\n direction: 'after',\n }),\n },\n {\n text: i18n('column.remove'),\n qa: 'g-md-yfm-table-action-remove-column',\n action: () =>\n actions.deleteColumn.run({\n columnNumber,\n tablePos: getParentTable()?.pos,\n }),\n iconStart: <Icon data={Xmark} />,\n disabled: !actions.deleteColumn.isEnable({\n columnNumber,\n tablePos: getParentTable()?.pos,\n }),\n },\n {\n theme: 'danger',\n text: i18n('table.remove'),\n qa: 'g-md-yfm-table-action-remove-table',\n action: () =>\n actions.deleteTable.run({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n iconStart: <Icon data={TrashBin} />,\n disabled: !actions.deleteTable.isEnable({\n tablePos: getParentTable()?.pos,\n tableNode: getParentTable()?.node,\n }),\n },\n ]}\n />,\n );\n }\n\n return controls.length ? <>{controls}</> : null;\n};\n\nexport const yfmTableCellView: NodeViewConstructor = (node, view, getPos): NodeView => {\n const getParentTable = () =>\n findParentNodeClosestToPos(view.state.doc.resolve(getPos()!), isTableNode);\n\n const parentTable = getParentTable();\n\n const cellCoords = parentTable ? findCellCoords(parentTable.node, node) : null;\n\n // @ts-expect-error\n if (!cellCoords) return {};\n\n const {cellIndex, rowIndex} = cellCoords;\n const isFirstRow = rowIndex === 0;\n const isFirstColumn = cellIndex === 0;\n\n if (!isFirstRow && !isFirstColumn) {\n // in this case, we don't need custom nodeView.\n // @ts-expect-error\n return {};\n }\n\n const dom = document.createElement('td');\n if (node.attrs[YfmTableAttr.Colspan])\n dom.setAttribute('colspan', node.attrs[YfmTableAttr.Colspan]);\n if (node.attrs[YfmTableAttr.Rowspan])\n dom.setAttribute('rowspan', node.attrs[YfmTableAttr.Rowspan]);\n if (node.attrs[YfmTableAttr.CellAlign]) {\n dom.classList.add(node.attrs[YfmTableAttr.CellAlign]);\n dom.setAttribute(YfmTableAttr.CellAlign, node.attrs[YfmTableAttr.Rowspan]);\n }\n\n const contentDOM = document.createElement('div');\n const control = document.createElement('span');\n control.setAttribute('style', 'width: 0; height: 0; float: left;');\n dom.setAttribute('style', 'position: relative; overflow: visible;');\n\n dom.appendChild(contentDOM);\n dom.appendChild(control);\n\n const renderItem = getReactRendererFromState(view.state).createItem(\n 'yfm-table-cell-view',\n () => (\n <Portal container={control}>\n <ErrorLoggerBoundary>\n <Controls\n columnNumber={cellIndex}\n rowNumber={rowIndex}\n isFirstInRow={isFirstColumn}\n isInFirstRow={isFirstRow}\n getParentTable={getParentTable}\n view={view}\n />\n </ErrorLoggerBoundary>\n </Portal>\n ),\n );\n\n return {\n dom,\n contentDOM,\n destroy() {\n renderItem.remove();\n },\n ignoreMutation(mutation) {\n return mutation.target === control || control.contains(mutation.target);\n },\n update(n) {\n const {rows: nRows, cols: nCols} = getTableDimensions(n);\n const {rows, cols} = getTableDimensions(node);\n\n return !(rows !== nRows || cols !== nCols);\n },\n };\n};\n\nfunction findCellCoords(table: Node, cell: Node) {\n if (!table.lastChild) return null;\n const rows = getChildrenOfNode(table.lastChild); // children of tBody\n for (const row of rows) {\n const node = getChildByNode(row.node, cell);\n if (node) {\n return {\n rowIndex: row.index,\n cellIndex: node.index,\n };\n }\n }\n return null;\n}\n"]}
|
|
@@ -21,7 +21,7 @@ export const getSchemaSpecs = (opts, placeholder) => ({
|
|
|
21
21
|
group: 'block',
|
|
22
22
|
parseDOM: [{ tag: 'div.yfm-tab' }],
|
|
23
23
|
toDOM(node) {
|
|
24
|
-
return ['div', node.attrs, 0];
|
|
24
|
+
return ['div', { draggable: 'false', ...node.attrs }, 0];
|
|
25
25
|
},
|
|
26
26
|
placeholder: {
|
|
27
27
|
content: placeholder?.[TabsNode.Tab] ??
|
|
@@ -29,6 +29,7 @@ export const getSchemaSpecs = (opts, placeholder) => ({
|
|
|
29
29
|
DEFAULT_PLACEHOLDERS.TabTitle,
|
|
30
30
|
alwaysVisible: true,
|
|
31
31
|
},
|
|
32
|
+
selectionContext: false,
|
|
32
33
|
selectable: false,
|
|
33
34
|
allowSelection: false,
|
|
34
35
|
complex: 'leaf',
|
|
@@ -143,6 +144,7 @@ export const getSchemaSpecs = (opts, placeholder) => ({
|
|
|
143
144
|
content: placeholder?.[TabsNode.RadioTab] ?? DEFAULT_PLACEHOLDERS.RadioTabLabelTitle,
|
|
144
145
|
alwaysVisible: true,
|
|
145
146
|
},
|
|
147
|
+
selectionContext: false,
|
|
146
148
|
selectable: false,
|
|
147
149
|
allowSelection: false,
|
|
148
150
|
complex: 'leaf',
|