@gravity-ui/markdown-editor 15.13.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.
Files changed (30) hide show
  1. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
  2. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js +22 -5
  3. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
  4. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
  5. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js +28 -6
  6. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
  7. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
  8. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
  9. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
  10. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
  11. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
  12. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
  13. package/build/cjs/version.js +1 -1
  14. package/build/cjs/version.js.map +1 -1
  15. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
  16. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js +21 -4
  17. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
  18. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
  19. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js +27 -5
  20. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
  21. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
  22. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
  23. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
  24. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
  25. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
  26. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
  27. package/build/esm/version.js +1 -1
  28. package/build/esm/version.js.map +1 -1
  29. package/build/styles.css +8 -6
  30. package/package.json +1 -1
@@ -1,4 +1,7 @@
1
1
  import type { ExtensionAuto } from "../../../../core/index.js";
2
2
  export declare const boldMarkName = "strong";
3
3
  export declare const boldType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").MarkType;
4
+ export declare const BoldAttrs: {
5
+ readonly Markup: "data-markup";
6
+ };
4
7
  export declare const BoldSpecs: ExtensionAuto;
@@ -1,32 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BoldSpecs = exports.boldType = exports.boldMarkName = void 0;
3
+ exports.BoldSpecs = exports.BoldAttrs = exports.boldType = exports.boldMarkName = void 0;
4
4
  const schema_1 = require("../../../../utils/schema.js");
5
5
  exports.boldMarkName = 'strong';
6
6
  exports.boldType = (0, schema_1.markTypeFactory)(exports.boldMarkName);
7
+ exports.BoldAttrs = {
8
+ Markup: 'data-markup',
9
+ };
10
+ const defaultMarkup = '**';
7
11
  const BoldSpecs = (builder) => {
8
12
  builder.addMark(exports.boldMarkName, () => ({
9
13
  spec: {
14
+ attrs: { [exports.BoldAttrs.Markup]: { default: defaultMarkup } },
10
15
  parseDOM: [
11
16
  { tag: 'b' },
12
- { tag: 'strong' },
17
+ {
18
+ tag: 'strong',
19
+ getAttrs: (node) => ({
20
+ [exports.BoldAttrs.Markup]: node.getAttribute(exports.BoldAttrs.Markup),
21
+ }),
22
+ },
13
23
  {
14
24
  style: 'font-weight',
15
25
  getAttrs: (value) => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null,
16
26
  },
17
27
  ],
18
- toDOM() {
19
- return ['strong'];
28
+ toDOM(mark) {
29
+ return ['strong', mark.attrs];
20
30
  },
21
31
  },
22
32
  fromMd: {
23
33
  tokenSpec: {
24
34
  name: exports.boldMarkName,
25
35
  type: 'mark',
36
+ getAttrs: (token) => ({
37
+ [exports.BoldAttrs.Markup]: token.markup,
38
+ }),
26
39
  },
27
40
  },
28
- toMd: { open: '**', close: '**', mixable: true, expelEnclosingWhitespace: true },
41
+ toMd: { open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true },
29
42
  }));
30
43
  };
31
44
  exports.BoldSpecs = BoldSpecs;
45
+ function getMarkup(_, mark) {
46
+ const attr = mark.attrs[exports.BoldAttrs.Markup];
47
+ return attr || defaultMarkup;
48
+ }
32
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Bold/BoldSpecs/index.ts"],"names":[],"mappings":";;;AACA,wDAAyD;AAE5C,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,GAAG,IAAA,wBAAe,EAAC,oBAAY,CAAC,CAAC;AAE/C,MAAM,SAAS,GAAkB,CAAC,OAAO,EAAE,EAAE;IAChD,OAAO,CAAC,OAAO,CAAC,oBAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV,EAAC,GAAG,EAAE,QAAQ,EAAC;gBACf;oBACI,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAe,CAAC,IAAI,IAAI;iBACjF;aACJ;YACD,KAAK;gBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,oBAAY;gBAClB,IAAI,EAAE,MAAM;aACf;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;KACjF,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAvBW,QAAA,SAAS,aAuBpB","sourcesContent":["import type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const boldMarkName = 'strong';\nexport const boldType = markTypeFactory(boldMarkName);\n\nexport const BoldSpecs: ExtensionAuto = (builder) => {\n builder.addMark(boldMarkName, () => ({\n spec: {\n parseDOM: [\n {tag: 'b'},\n {tag: 'strong'},\n {\n style: 'font-weight',\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\n },\n ],\n toDOM() {\n return ['strong'];\n },\n },\n fromMd: {\n tokenSpec: {\n name: boldMarkName,\n type: 'mark',\n },\n },\n toMd: {open: '**', close: '**', mixable: true, expelEnclosingWhitespace: true},\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Bold/BoldSpecs/index.ts"],"names":[],"mappings":";;;AAEA,wDAAiD;AAEpC,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,GAAG,IAAA,wBAAe,EAAC,oBAAY,CAAC,CAAC;AACzC,QAAA,SAAS,GAAG;IACrB,MAAM,EAAE,aAAa;CACf,CAAC;AACX,MAAM,aAAa,GAAG,IAAI,CAAC;AAEpB,MAAM,SAAS,GAAkB,CAAC,OAAO,EAAE,EAAE;IAChD,OAAO,CAAC,OAAO,CAAC,oBAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,iBAAS,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,iBAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAS,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,oBAAY;gBAClB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,iBAAS,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;AAhCW,QAAA,SAAS,aAgCpB;AAEF,SAAS,SAAS,CAAC,CAAU,EAAE,IAAU;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAS,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,24 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ItalicSpecs = exports.italicType = exports.italicMarkName = void 0;
3
+ exports.ItalicSpecs = exports.ItalicAttrs = exports.italicType = exports.italicMarkName = void 0;
4
4
  const schema_1 = require("../../../../utils/schema.js");
5
5
  exports.italicMarkName = 'em';
6
6
  exports.italicType = (0, schema_1.markTypeFactory)(exports.italicMarkName);
7
+ exports.ItalicAttrs = {
8
+ Markup: 'data-markup',
9
+ };
10
+ const defaultMarkup = '*';
7
11
  const ItalicSpecs = (builder) => {
8
12
  builder.addMark(exports.italicMarkName, () => ({
9
13
  spec: {
14
+ attrs: { [exports.ItalicAttrs.Markup]: { default: defaultMarkup } },
10
15
  parseDOM: [
11
16
  { tag: 'i' },
12
- { tag: 'em' },
17
+ {
18
+ tag: 'em',
19
+ getAttrs: (node) => ({
20
+ [exports.ItalicAttrs.Markup]: node.getAttribute(exports.ItalicAttrs.Markup),
21
+ }),
22
+ },
13
23
  { style: 'font-style', getAttrs: (value) => value === 'italic' && null },
14
24
  ],
15
- toDOM() {
16
- return ['em'];
25
+ toDOM(mark) {
26
+ return ['em', mark.attrs];
27
+ },
28
+ },
29
+ toMd: { open: getMarkup, close: getMarkup, mixable: true, expelEnclosingWhitespace: true },
30
+ fromMd: {
31
+ tokenSpec: {
32
+ name: exports.italicMarkName,
33
+ type: 'mark',
34
+ getAttrs: (token) => ({
35
+ [exports.ItalicAttrs.Markup]: token.markup,
36
+ }),
17
37
  },
18
38
  },
19
- toMd: { open: '*', close: '*', mixable: true, expelEnclosingWhitespace: true },
20
- fromMd: { tokenSpec: { name: exports.italicMarkName, type: 'mark' } },
21
39
  }));
22
40
  };
23
41
  exports.ItalicSpecs = ItalicSpecs;
42
+ function getMarkup(_, mark) {
43
+ const attr = mark.attrs[exports.ItalicAttrs.Markup];
44
+ return attr || defaultMarkup;
45
+ }
24
46
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Italic/ItalicSpecs/index.ts"],"names":[],"mappings":";;;AACA,wDAAyD;AAE5C,QAAA,cAAc,GAAG,IAAI,CAAC;AACtB,QAAA,UAAU,GAAG,IAAA,wBAAe,EAAC,sBAAc,CAAC,CAAC;AAEnD,MAAM,WAAW,GAAkB,CAAC,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,sBAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE;YACF,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV,EAAC,GAAG,EAAE,IAAI,EAAC;gBACX,EAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAC;aACzE;YACD,KAAK;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;QAC5E,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,sBAAc,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC;KAC5D,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB","sourcesContent":["import type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const italicMarkName = 'em';\nexport const italicType = markTypeFactory(italicMarkName);\n\nexport const ItalicSpecs: ExtensionAuto = (builder) => {\n builder.addMark(italicMarkName, () => ({\n spec: {\n parseDOM: [\n {tag: 'i'},\n {tag: 'em'},\n {style: 'font-style', getAttrs: (value) => value === 'italic' && null},\n ],\n toDOM() {\n return ['em'];\n },\n },\n toMd: {open: '*', close: '*', mixable: true, expelEnclosingWhitespace: true},\n fromMd: {tokenSpec: {name: italicMarkName, type: 'mark'}},\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/markdown/Italic/ItalicSpecs/index.ts"],"names":[],"mappings":";;;AAEA,wDAAiD;AAEpC,QAAA,cAAc,GAAG,IAAI,CAAC;AACtB,QAAA,UAAU,GAAG,IAAA,wBAAe,EAAC,sBAAc,CAAC,CAAC;AAC7C,QAAA,WAAW,GAAG;IACvB,MAAM,EAAE,aAAa;CACf,CAAC;AACX,MAAM,aAAa,GAAG,GAAG,CAAC;AAEnB,MAAM,WAAW,GAAkB,CAAC,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,sBAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,mBAAW,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,mBAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAW,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,sBAAc;gBACpB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAClB,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM;iBACrC,CAAC;aACL;SACJ;KACJ,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AA7BW,QAAA,WAAW,eA6BtB;AAEF,SAAS,SAAS,CAAC,CAAU,EAAE,IAAU;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAW,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"]}
@@ -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;
@@ -16,6 +16,7 @@ const yfmTableView = (node, view, getPos) => {
16
16
  const actions = (0, core_1.bindActions)(actions_1.controlActions)(view);
17
17
  const wrapperElem = document.createElement('div');
18
18
  wrapperElem.classList.add(wrapperB());
19
+ wrapperElem.dataset.qa = 'g-md-yfm-table-wrapper';
19
20
  const tableElem = document.createElement('table');
20
21
  tableElem.classList.add((0, exports.viewB)());
21
22
  const viewElem = document.createElement('div');
@@ -33,10 +34,10 @@ const yfmTableView = (node, view, getPos) => {
33
34
  const components = [
34
35
  (0, jsx_runtime_1.jsx)("div", { className: (0, exports.viewB)('plus-button-controls', { bottom: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: () => {
35
36
  actions.appendRow.run({ tablePos: getPos() });
36
- }, className: (0, exports.viewB)('plus-button', { bottom: true }), view: 'normal', children: "+" }) }, 1),
37
+ }, className: (0, exports.viewB)('plus-button', { bottom: true }), view: 'normal', qa: "g-md-yfm-table-plus-row", children: "+" }) }, 1),
37
38
  (0, jsx_runtime_1.jsx)("div", { className: (0, exports.viewB)('plus-button-controls', { right: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: () => {
38
39
  actions.appendColumn.run({ tablePos: getPos() });
39
- }, className: (0, exports.viewB)('plus-button', { right: true }), view: 'normal', children: "+" }) }, 2),
40
+ }, className: (0, exports.viewB)('plus-button', { right: true }), view: 'normal', qa: "g-md-yfm-table-plus-column", children: "+" }) }, 2),
40
41
  ];
41
42
  const renderItem = (0, ReactRenderer_1.getReactRendererFromState)(view.state).createItem('yfm-table-plus-buttons', () => ((0, jsx_runtime_1.jsx)(uikit_1.Portal, { container: controls, children: (0, jsx_runtime_1.jsx)(ErrorBoundary_1.ErrorLoggerBoundary, { children: components }) })));
42
43
  return {
@@ -1 +1 @@
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\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 >\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 >\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"]}
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
  }
@@ -23,9 +23,10 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
23
23
  const actions = (0, core_1.bindActions)(actions_1.controlActions)(view);
24
24
  const controls = [];
25
25
  if (isFirstInRow) {
26
- controls.push((0, jsx_runtime_1.jsx)(uikit_1.DropdownMenu, { switcherWrapperClassName: b('left-button'), renderSwitcher: (props) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { view: 'outlined', size: 's', ...props, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.EllipsisVertical }) })), items: [
26
+ controls.push((0, jsx_runtime_1.jsx)(uikit_1.DropdownMenu, { switcherWrapperClassName: b('left-button'), renderSwitcher: (props) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { view: 'outlined', size: 's', qa: "g-md-yfm-table-row-btn", ...props, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.EllipsisVertical }) })), menuProps: { qa: 'g-md-yfm-table-row-menu' }, items: [
27
27
  {
28
28
  text: (0, yfm_table_1.i18n)('row.add.before'),
29
+ qa: 'g-md-yfm-table-action-add-row-before',
29
30
  action: () => actions.appendRow.run({
30
31
  tablePos: getParentTable()?.pos,
31
32
  rowNumber,
@@ -40,6 +41,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
40
41
  },
41
42
  {
42
43
  text: (0, yfm_table_1.i18n)('row.add.after'),
44
+ qa: 'g-md-yfm-table-action-add-row-after',
43
45
  action: () => actions.appendRow.run({
44
46
  tablePos: getParentTable()?.pos,
45
47
  rowNumber,
@@ -54,6 +56,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
54
56
  },
55
57
  {
56
58
  text: (0, yfm_table_1.i18n)('row.remove'),
59
+ qa: 'g-md-yfm-table-action-remove-row',
57
60
  action: () => actions.deleteRow.run({
58
61
  rowNumber,
59
62
  tablePos: getParentTable()?.pos,
@@ -67,6 +70,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
67
70
  {
68
71
  theme: 'danger',
69
72
  text: (0, yfm_table_1.i18n)('table.remove'),
73
+ qa: 'g-md-yfm-table-action-remove-table',
70
74
  action: () => actions.deleteTable.run({
71
75
  tablePos: getParentTable()?.pos,
72
76
  tableNode: getParentTable()?.node,
@@ -80,9 +84,10 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
80
84
  ] }, 1));
81
85
  }
82
86
  if (isInFirstRow) {
83
- controls.push((0, jsx_runtime_1.jsx)(uikit_1.DropdownMenu, { switcherWrapperClassName: b('upper-button'), renderSwitcher: (props) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { view: 'outlined', size: 's', ...props, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.EllipsisVertical }) })), items: [
87
+ controls.push((0, jsx_runtime_1.jsx)(uikit_1.DropdownMenu, { switcherWrapperClassName: b('upper-button'), renderSwitcher: (props) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { view: 'outlined', size: 's', qa: "g-md-yfm-table-column-btn", ...props, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.EllipsisVertical }) })), menuProps: { qa: 'g-md-yfm-table-column-menu' }, items: [
84
88
  {
85
89
  text: (0, yfm_table_1.i18n)('column.add.before'),
90
+ qa: 'g-md-yfm-table-action-add-column-before',
86
91
  action: () => actions.appendColumn.run({
87
92
  tablePos: getParentTable()?.pos,
88
93
  columnNumber,
@@ -97,6 +102,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
97
102
  },
98
103
  {
99
104
  text: (0, yfm_table_1.i18n)('column.add.after'),
105
+ qa: 'g-md-yfm-table-action-add-column-after',
100
106
  action: () => actions.appendColumn.run({
101
107
  tablePos: getParentTable()?.pos,
102
108
  columnNumber,
@@ -111,6 +117,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
111
117
  },
112
118
  {
113
119
  text: (0, yfm_table_1.i18n)('column.remove'),
120
+ qa: 'g-md-yfm-table-action-remove-column',
114
121
  action: () => actions.deleteColumn.run({
115
122
  columnNumber,
116
123
  tablePos: getParentTable()?.pos,
@@ -124,6 +131,7 @@ const Controls = function Controls({ columnNumber, rowNumber, view, getParentTab
124
131
  {
125
132
  theme: 'danger',
126
133
  text: (0, yfm_table_1.i18n)('table.remove'),
134
+ qa: 'g-md-yfm-table-action-remove-table',
127
135
  action: () => actions.deleteTable.run({
128
136
  tablePos: getParentTable()?.pos,
129
137
  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":";;;;AAAA,6CAQ2B;AAC3B,6CAAqE;AAErE,oCAAoC;AACpC,yDAA+E;AAG/E,2DAA4C;AAC5C,uDAAgD;AAChD,sEAAmD;AACnD,+EAA6E;AAC7E,qEAA2E;AAC3E,yEAAkE;AAClE,yDAA6D;AAC7D,+EAA6E;AAC7E,0CAAyC;AAEzC,0CAAyC;AAEzC,kCAAiC;AAEpB,QAAA,cAAc,GAAG,IAAA,cAAE,EAAC,iBAAiB,CAAC,CAAC;AACpD,MAAM,CAAC,GAAG,sBAAc,CAAC;AAWzB,MAAM,QAAQ,GAAoB,SAAS,QAAQ,CAAC,EAChD,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,YAAY,GACf;IACG,MAAM,OAAO,GAAG,IAAA,kBAAW,EAAC,wBAAc,CAAC,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,IAAI,YAAY,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CACT,uBAAC,oBAAY,IAET,wBAAwB,EAAE,CAAC,CAAC,aAAa,CAAC,EAC1C,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACvB,uBAAC,cAAM,IAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAC,wBAAwB,KAAK,KAAK,YACtE,uBAAC,YAAI,IAAC,IAAI,EAAE,wBAAgB,GAAI,GAC3B,CACZ,EACD,SAAS,EAAE,EAAC,EAAE,EAAE,yBAAyB,EAAC,EAC1C,KAAK,EAAE;gBACH;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,gBAAgB,CAAC;oBAC5B,EAAE,EAAE,sCAAsC;oBAC1C,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;wBAClB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS;wBACT,SAAS,EAAE,QAAQ;qBACtB,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,eAAO,GAAI;oBAClC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAClC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS;wBACT,SAAS,EAAE,QAAQ;qBACtB,CAAC;iBACL;gBACD;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,eAAe,CAAC;oBAC3B,EAAE,EAAE,qCAAqC;oBACzC,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;wBAClB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS;wBACT,SAAS,EAAE,OAAO;qBACrB,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,iBAAS,GAAI;oBACpC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAClC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS;wBACT,SAAS,EAAE,OAAO;qBACrB,CAAC;iBACL;gBACD;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,YAAY,CAAC;oBACxB,EAAE,EAAE,kCAAkC;oBACtC,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;wBAClB,SAAS;wBACT,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;qBAClC,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,aAAK,GAAI;oBAChC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAClC,SAAS;wBACT,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;qBAClC,CAAC;iBACL;gBACD;oBACI,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,IAAA,gBAAI,EAAC,cAAc,CAAC;oBAC1B,EAAE,EAAE,oCAAoC;oBACxC,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;wBACpB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS,EAAE,cAAc,EAAE,EAAE,IAAI;qBACpC,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,gBAAQ,GAAI;oBACnC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;wBACpC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS,EAAE,cAAc,EAAE,EAAE,IAAI;qBACpC,CAAC;iBACL;aACJ,IAtEI,CAAC,CAuER,CACL,CAAC;IACN,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CACT,uBAAC,oBAAY,IAET,wBAAwB,EAAE,CAAC,CAAC,cAAc,CAAC,EAC3C,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CACvB,uBAAC,cAAM,IAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAC,2BAA2B,KAAK,KAAK,YACzE,uBAAC,YAAI,IAAC,IAAI,EAAE,wBAAgB,GAAI,GAC3B,CACZ,EACD,SAAS,EAAE,EAAC,EAAE,EAAE,4BAA4B,EAAC,EAC7C,KAAK,EAAE;gBACH;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,mBAAmB,CAAC;oBAC/B,EAAE,EAAE,yCAAyC;oBAC7C,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;wBACrB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,YAAY;wBACZ,SAAS,EAAE,QAAQ;qBACtB,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,iBAAS,GAAI;oBACpC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;wBACrC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,YAAY;wBACZ,SAAS,EAAE,QAAQ;qBACtB,CAAC;iBACL;gBACD;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,kBAAkB,CAAC;oBAC9B,EAAE,EAAE,wCAAwC;oBAC5C,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;wBACrB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,YAAY;wBACZ,SAAS,EAAE,OAAO;qBACrB,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,kBAAU,GAAI;oBACrC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;wBACrC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,YAAY;wBACZ,SAAS,EAAE,OAAO;qBACrB,CAAC;iBACL;gBACD;oBACI,IAAI,EAAE,IAAA,gBAAI,EAAC,eAAe,CAAC;oBAC3B,EAAE,EAAE,qCAAqC;oBACzC,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;wBACrB,YAAY;wBACZ,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;qBAClC,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,aAAK,GAAI;oBAChC,QAAQ,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;wBACrC,YAAY;wBACZ,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;qBAClC,CAAC;iBACL;gBACD;oBACI,KAAK,EAAE,QAAQ;oBACf,IAAI,EAAE,IAAA,gBAAI,EAAC,cAAc,CAAC;oBAC1B,EAAE,EAAE,oCAAoC;oBACxC,MAAM,EAAE,GAAG,EAAE,CACT,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;wBACpB,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS,EAAE,cAAc,EAAE,EAAE,IAAI;qBACpC,CAAC;oBACN,SAAS,EAAE,uBAAC,YAAI,IAAC,IAAI,EAAE,gBAAQ,GAAI;oBACnC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;wBACpC,QAAQ,EAAE,cAAc,EAAE,EAAE,GAAG;wBAC/B,SAAS,EAAE,cAAc,EAAE,EAAE,IAAI;qBACpC,CAAC;iBACL;aACJ,IAtEI,CAAC,CAuER,CACL,CAAC;IACN,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,2DAAG,QAAQ,GAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAY,EAAE;IAClF,MAAM,cAAc,GAAG,GAAG,EAAE,CACxB,IAAA,8CAA0B,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAG,CAAC,EAAE,yBAAW,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/E,mBAAmB;IACnB,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,EAAC,SAAS,EAAE,QAAQ,EAAC,GAAG,UAAU,CAAC;IACzC,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,SAAS,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,+CAA+C;QAC/C,mBAAmB;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,OAAO,CAAC;QAChC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,OAAO,CAAC;QAChC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,YAAY,CAAC,oBAAY,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;IACnE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAC;IAEpE,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5B,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,IAAA,yCAAyB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAC/D,qBAAqB,EACrB,GAAG,EAAE,CAAC,CACF,uBAAC,cAAM,IAAC,SAAS,EAAE,OAAO,YACtB,uBAAC,mCAAmB,cAChB,uBAAC,QAAQ,IACL,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,QAAQ,EACnB,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,UAAU,EACxB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,IAAI,GACZ,GACgB,GACjB,CACZ,CACJ,CAAC;IAEF,OAAO;QACH,GAAG;QACH,UAAU;QACV,OAAO;YACH,UAAU,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;QACD,cAAc,CAAC,QAAQ;YACnB,OAAO,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,CAAC,CAAC;YACJ,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAC,GAAG,IAAA,gCAAkB,EAAC,CAAC,CAAC,CAAC;YACzD,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,IAAA,gCAAkB,EAAC,IAAI,CAAC,CAAC;YAE9C,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC;QAC/C,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAzEW,QAAA,gBAAgB,oBAyE3B;AAEF,SAAS,cAAc,CAAC,KAAW,EAAE,IAAU;IAC3C,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,IAAA,yBAAiB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,IAAA,8BAAc,EAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACP,OAAO;gBACH,QAAQ,EAAE,GAAG,CAAC,KAAK;gBACnB,SAAS,EAAE,IAAI,CAAC,KAAK;aACxB,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","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"]}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  /** During build process, the current version will be injected here */
5
- exports.VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';
5
+ exports.VERSION = typeof '15.13.2' !== 'undefined' ? '15.13.2' : 'unknown';
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.13.2' !== 'undefined' ? '15.13.2' : 'unknown';\n"]}
@@ -1,4 +1,7 @@
1
1
  import type { ExtensionAuto } from "../../../../core/index.js";
2
2
  export declare const boldMarkName = "strong";
3
3
  export declare const boldType: (schema: import("prosemirror-model").Schema) => import("prosemirror-model").MarkType;
4
+ export declare const BoldAttrs: {
5
+ readonly Markup: "data-markup";
6
+ };
4
7
  export declare const BoldSpecs: ExtensionAuto;
@@ -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
- { tag: 'strong' },
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: '**', close: '**', mixable: true, expelEnclosingWhitespace: true },
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":"AACA,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAkB,CAAC,OAAO,EAAE,EAAE;IAChD,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE;YACF,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV,EAAC,GAAG,EAAE,QAAQ,EAAC;gBACf;oBACI,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAe,CAAC,IAAI,IAAI;iBACjF;aACJ;YACD,KAAK;gBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,MAAM;aACf;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;KACjF,CAAC,CAAC,CAAC;AACR,CAAC,CAAC","sourcesContent":["import type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const boldMarkName = 'strong';\nexport const boldType = markTypeFactory(boldMarkName);\n\nexport const BoldSpecs: ExtensionAuto = (builder) => {\n builder.addMark(boldMarkName, () => ({\n spec: {\n parseDOM: [\n {tag: 'b'},\n {tag: 'strong'},\n {\n style: 'font-weight',\n getAttrs: (value) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\n },\n ],\n toDOM() {\n return ['strong'];\n },\n },\n fromMd: {\n tokenSpec: {\n name: boldMarkName,\n type: 'mark',\n },\n },\n toMd: {open: '**', close: '**', mixable: true, expelEnclosingWhitespace: true},\n }));\n};\n"]}
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
- { tag: 'em' },
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":"AACA,OAAO,EAAC,eAAe,EAAC,oCAAiC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAkB,CAAC,OAAO,EAAE,EAAE;IAClD,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,EAAE;YACF,QAAQ,EAAE;gBACN,EAAC,GAAG,EAAE,GAAG,EAAC;gBACV,EAAC,GAAG,EAAE,IAAI,EAAC;gBACX,EAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAC;aACzE;YACD,KAAK;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;SACJ;QACD,IAAI,EAAE,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAC;QAC5E,MAAM,EAAE,EAAC,SAAS,EAAE,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAC,EAAC;KAC5D,CAAC,CAAC,CAAC;AACR,CAAC,CAAC","sourcesContent":["import type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nexport const italicMarkName = 'em';\nexport const italicType = markTypeFactory(italicMarkName);\n\nexport const ItalicSpecs: ExtensionAuto = (builder) => {\n builder.addMark(italicMarkName, () => ({\n spec: {\n parseDOM: [\n {tag: 'i'},\n {tag: 'em'},\n {style: 'font-style', getAttrs: (value) => value === 'italic' && null},\n ],\n toDOM() {\n return ['em'];\n },\n },\n toMd: {open: '*', close: '*', mixable: true, expelEnclosingWhitespace: true},\n fromMd: {tokenSpec: {name: italicMarkName, type: 'mark'}},\n }));\n};\n"]}
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"]}
@@ -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":"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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\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 >\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 >\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"]}
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"]}
@@ -1,3 +1,3 @@
1
1
  /** During build process, the current version will be injected here */
2
- export const VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';
2
+ export const VERSION = typeof '15.13.2' !== 'undefined' ? '15.13.2' : 'unknown';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.13.2' !== 'undefined' ? '15.13.2' : 'unknown';\n"]}
package/build/styles.css CHANGED
@@ -1772,10 +1772,12 @@ body :has(.g-md-resizable_resizing) {
1772
1772
  margin-bottom: 16px !important;
1773
1773
  }
1774
1774
  .g-md-table-view__buttons-visible .g-md-table-view__plus-button-controls {
1775
+ visibility: visible;
1775
1776
  pointer-events: initial;
1776
1777
  opacity: 1;
1777
1778
  }
1778
1779
  .g-md-table-view__plus-button-controls {
1780
+ visibility: hidden;
1779
1781
  pointer-events: none;
1780
1782
  opacity: 0;
1781
1783
  transition: opacity 150ms ease 50ms;
@@ -1843,37 +1845,37 @@ body :has(.g-md-resizable_resizing) {
1843
1845
  z-index: 110;
1844
1846
  top: calc(50% - 14px);
1845
1847
  left: -13px;
1848
+ visibility: hidden;
1846
1849
  pointer-events: none;
1847
- opacity: 0;
1848
1850
  border-radius: var(--g-border-radius-s);
1849
1851
  background: var(--g-color-base-background);
1850
1852
  }
1851
1853
  .g-md-table-cell-view__left-button:hover {
1854
+ visibility: visible;
1852
1855
  pointer-events: initial;
1853
- opacity: 1;
1854
1856
  }
1855
1857
  .g-md-table-cell-view__upper-button {
1856
1858
  position: absolute;
1857
1859
  z-index: 110;
1858
1860
  top: -13px;
1859
1861
  left: calc(50% - 14px);
1862
+ visibility: hidden;
1860
1863
  pointer-events: none;
1861
- opacity: 0;
1862
1864
  border-radius: var(--g-border-radius-s);
1863
1865
  background: var(--g-color-base-background);
1864
1866
  transform: rotate(90deg);
1865
1867
  }
1866
1868
  .g-md-table-cell-view__upper-button:hover {
1869
+ visibility: visible;
1867
1870
  pointer-events: initial;
1868
- opacity: 1;
1869
1871
  }
1870
1872
  .g-md-table-cell-view__upper-visible .g-md-table-cell-view__upper-button {
1873
+ visibility: visible;
1871
1874
  pointer-events: initial;
1872
- opacity: 1;
1873
1875
  }
1874
1876
  .g-md-table-cell-view__left-visible .g-md-table-cell-view__left-button {
1877
+ visibility: visible;
1875
1878
  pointer-events: initial;
1876
- opacity: 1;
1877
1879
  }
1878
1880
  .g-md-image-tooltip-form__input_type_width, .g-md-image-tooltip-form__input_type_height {
1879
1881
  max-width: 112px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/markdown-editor",
3
- "version": "15.13.1",
3
+ "version": "15.13.2",
4
4
  "description": "Markdown wysiwyg and markup editor",
5
5
  "license": "MIT",
6
6
  "repository": {