@gravity-ui/markdown-editor 15.12.1 → 15.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/build/cjs/core/ExtensionsManager.js +1 -1
  2. package/build/cjs/core/ExtensionsManager.js.map +1 -1
  3. package/build/cjs/core/markdown/MarkdownSerializer.d.ts +1 -0
  4. package/build/cjs/core/markdown/MarkdownSerializer.js +8 -2
  5. package/build/cjs/core/markdown/MarkdownSerializer.js.map +1 -1
  6. package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +6 -0
  7. package/build/cjs/extensions/behavior/SelectionContext/index.js +8 -2
  8. package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
  9. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
  10. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js +22 -5
  11. package/build/cjs/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
  12. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
  13. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js +28 -6
  14. package/build/cjs/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
  15. package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
  16. package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
  17. package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
  18. package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
  19. package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
  20. package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js +8 -3
  21. package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
  22. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
  23. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
  24. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
  25. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
  26. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
  27. package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
  28. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
  29. package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  30. package/build/cjs/extensions/yfm/YfmTabs/views.js +1 -0
  31. package/build/cjs/extensions/yfm/YfmTabs/views.js.map +1 -1
  32. package/build/cjs/markdown-it/color.d.ts +1 -1
  33. package/build/cjs/markdown-it/color.js +2 -2
  34. package/build/cjs/markdown-it/color.js.map +1 -1
  35. package/build/cjs/toolbar/FlexToolbar.js +1 -1
  36. package/build/cjs/toolbar/FlexToolbar.js.map +1 -1
  37. package/build/cjs/toolbar/ToolbarListButton.d.ts +4 -2
  38. package/build/cjs/toolbar/ToolbarListButton.js +3 -3
  39. package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
  40. package/build/cjs/version.js +1 -1
  41. package/build/cjs/version.js.map +1 -1
  42. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
  43. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
  44. package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  45. package/build/esm/core/ExtensionsManager.js +1 -1
  46. package/build/esm/core/ExtensionsManager.js.map +1 -1
  47. package/build/esm/core/markdown/MarkdownSerializer.d.ts +1 -0
  48. package/build/esm/core/markdown/MarkdownSerializer.js +8 -2
  49. package/build/esm/core/markdown/MarkdownSerializer.js.map +1 -1
  50. package/build/esm/extensions/behavior/SelectionContext/index.d.ts +6 -0
  51. package/build/esm/extensions/behavior/SelectionContext/index.js +8 -2
  52. package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
  53. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.d.ts +3 -0
  54. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js +21 -4
  55. package/build/esm/extensions/markdown/Bold/BoldSpecs/index.js.map +1 -1
  56. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.d.ts +3 -0
  57. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js +27 -5
  58. package/build/esm/extensions/markdown/Italic/ItalicSpecs/index.js.map +1 -1
  59. package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
  60. package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
  61. package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
  62. package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
  63. package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
  64. package/build/esm/extensions/yfm/Color/ColorSpecs/index.js +8 -3
  65. package/build/esm/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
  66. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +2 -0
  67. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js +3 -2
  68. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.js.map +1 -1
  69. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +6 -6
  70. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js +10 -2
  71. package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.js.map +1 -1
  72. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
  73. package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
  74. package/build/esm/extensions/yfm/YfmTabs/views.js +1 -0
  75. package/build/esm/extensions/yfm/YfmTabs/views.js.map +1 -1
  76. package/build/esm/markdown-it/color.d.ts +1 -1
  77. package/build/esm/markdown-it/color.js +1 -1
  78. package/build/esm/markdown-it/color.js.map +1 -1
  79. package/build/esm/toolbar/FlexToolbar.js +1 -1
  80. package/build/esm/toolbar/FlexToolbar.js.map +1 -1
  81. package/build/esm/toolbar/ToolbarListButton.d.ts +4 -2
  82. package/build/esm/toolbar/ToolbarListButton.js +3 -3
  83. package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
  84. package/build/esm/version.js +1 -1
  85. package/build/esm/version.js.map +1 -1
  86. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
  87. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
  88. package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
  89. package/build/styles.css +8 -6
  90. package/package.json +3 -2
@@ -14,8 +14,9 @@ function getColorName(className) {
14
14
  }
15
15
  const ColorSpecs = (builder, opts) => {
16
16
  const { validateClassNameColorName, parseStyleColorValue } = opts;
17
+ const mdPlugin = (md) => md.use(color_1.default, { escape: true, defaultClassName: const_1.colorClassName });
17
18
  builder
18
- .configureMd((md) => md.use(color_1.default, { defaultClassName: const_1.colorClassName, inline: false }))
19
+ .configureMd((md) => md.use(mdPlugin, { defaultClassName: const_1.colorClassName, inline: false }))
19
20
  .addMark(const_1.colorMarkName, () => ({
20
21
  spec: {
21
22
  attrs: { [const_1.colorMarkName]: {} },
@@ -77,10 +78,14 @@ const ColorSpecs = (builder, opts) => {
77
78
  },
78
79
  },
79
80
  toMd: {
80
- open: (_state, mark) => {
81
+ open: (state, mark) => {
82
+ state.escapeCharacters = ['(', ')'];
81
83
  return `{${mark.attrs[const_1.colorMarkName]}}(`;
82
84
  },
83
- close: ')',
85
+ close: (state) => {
86
+ state.escapeCharacters = undefined;
87
+ return `)`;
88
+ },
84
89
  mixable: true,
85
90
  expelEnclosingWhitespace: true,
86
91
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Color/ColorSpecs/index.ts"],"names":[],"mappings":"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","sourcesContent":["import mdPlugin from 'src/markdown-it/color';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nimport {colorClassName, colorMarkName, domColorAttr} from './const';\n\nexport {colorMarkName} from './const';\nexport const colorType = markTypeFactory(colorMarkName);\n\nfunction getColorName(className: string) {\n const regexp = /^(yfm|md)-colorify--(\\w+)$/;\n return className.match(regexp)?.[2];\n}\n\nexport type ColorSpecsOptions = {\n validateClassNameColorName?: (colorName: string) => boolean;\n parseStyleColorValue?: (color: string) => string | null;\n};\n\nexport const ColorSpecs: ExtensionAuto<ColorSpecsOptions> = (builder, opts) => {\n const {validateClassNameColorName, parseStyleColorValue} = opts;\n\n builder\n .configureMd((md) => md.use(mdPlugin, {defaultClassName: colorClassName, inline: false}))\n .addMark(colorMarkName, () => ({\n spec: {\n attrs: {[colorMarkName]: {}},\n parseDOM: [\n {\n tag: `span`,\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node === 'string') return false;\n\n for (const className of Array.from(node.classList)) {\n const color = getColorName(className);\n if (color && (validateClassNameColorName?.(color) ?? true)) {\n return {\n [colorMarkName]: color,\n };\n }\n }\n\n return false;\n },\n },\n {\n style: 'color',\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node !== 'string') return false;\n\n const color = parseStyleColorValue?.(node);\n if (color) {\n return {\n [colorMarkName]: color,\n };\n }\n\n return false;\n },\n },\n ],\n toDOM(node) {\n const colorValue = node.attrs[colorMarkName];\n\n return [\n 'span',\n {\n class: [colorClassName, `${colorClassName}--${colorValue}`].join(' '),\n [domColorAttr]: colorValue,\n },\n 0,\n ];\n },\n },\n fromMd: {\n tokenSpec: {\n name: colorMarkName,\n type: 'mark',\n getAttrs(token) {\n return {\n [colorMarkName]: token.info,\n };\n },\n },\n },\n toMd: {\n open: (_state, mark) => {\n return `{${mark.attrs[colorMarkName]}}(`;\n },\n close: ')',\n mixable: true,\n expelEnclosingWhitespace: true,\n },\n }));\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/Color/ColorSpecs/index.ts"],"names":[],"mappings":";;;;AAEA,qFAA0C;AAG1C,wDAAyD;AAEzD,sCAAoE;AAEpE,oCAAsC;AAA9B,sGAAA,aAAa,OAAA;AACR,QAAA,SAAS,GAAG,IAAA,wBAAe,EAAC,qBAAa,CAAC,CAAC;AAExD,SAAS,YAAY,CAAC,SAAiB;IACnC,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAC5C,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAOM,MAAM,UAAU,GAAqC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAC,0BAA0B,EAAE,oBAAoB,EAAC,GAAG,IAAI,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,EAAc,EAAE,EAAE,CAChC,EAAE,CAAC,GAAG,CAAC,eAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,sBAAc,EAAC,CAAC,CAAC;IAEpE,OAAO;SACF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAC,gBAAgB,EAAE,sBAAc,EAAE,MAAM,EAAE,KAAK,EAAC,CAAC,CAAC;SACxF,OAAO,CAAC,qBAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3B,IAAI,EAAE;YACF,KAAK,EAAE,EAAC,CAAC,qBAAa,CAAC,EAAE,EAAE,EAAC;YAC5B,QAAQ,EAAE;gBACN;oBACI,GAAG,EAAE,MAAM;oBACX,kBAAkB,EAAE,KAAK;oBACzB,QAAQ,CAAC,IAAI;wBACT,IAAI,OAAO,IAAI,KAAK,QAAQ;4BAAE,OAAO,KAAK,CAAC;wBAE3C,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;4BACjD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;4BACtC,IAAI,KAAK,IAAI,CAAC,0BAA0B,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;gCACzD,OAAO;oCACH,CAAC,qBAAa,CAAC,EAAE,KAAK;iCACzB,CAAC;4BACN,CAAC;wBACL,CAAC;wBAED,OAAO,KAAK,CAAC;oBACjB,CAAC;iBACJ;gBACD;oBACI,KAAK,EAAE,OAAO;oBACd,kBAAkB,EAAE,KAAK;oBACzB,QAAQ,CAAC,IAAI;wBACT,IAAI,OAAO,IAAI,KAAK,QAAQ;4BAAE,OAAO,KAAK,CAAC;wBAE3C,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;wBAC3C,IAAI,KAAK,EAAE,CAAC;4BACR,OAAO;gCACH,CAAC,qBAAa,CAAC,EAAE,KAAK;6BACzB,CAAC;wBACN,CAAC;wBAED,OAAO,KAAK,CAAC;oBACjB,CAAC;iBACJ;aACJ;YACD,KAAK,CAAC,IAAI;gBACN,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAa,CAAC,CAAC;gBAE7C,OAAO;oBACH,MAAM;oBACN;wBACI,KAAK,EAAE,CAAC,sBAAc,EAAE,GAAG,sBAAc,KAAK,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACrE,CAAC,oBAAY,CAAC,EAAE,UAAU;qBAC7B;oBACD,CAAC;iBACJ,CAAC;YACN,CAAC;SACJ;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,IAAI,EAAE,qBAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,QAAQ,CAAC,KAAK;oBACV,OAAO;wBACH,CAAC,qBAAa,CAAC,EAAE,KAAK,CAAC,IAAI;qBAC9B,CAAC;gBACN,CAAC;aACJ;SACJ;QACD,IAAI,EAAE;YACF,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAClB,KAAK,CAAC,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACpC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAa,CAAC,IAAI,CAAC;YAC7C,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACb,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBACnC,OAAO,GAAG,CAAC;YACf,CAAC;YACD,OAAO,EAAE,IAAI;YACb,wBAAwB,EAAE,IAAI;SACjC;KACJ,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAnFW,QAAA,UAAU,cAmFrB","sourcesContent":["import type MarkdownIt from 'markdown-it';\n\nimport color from 'src/markdown-it/color';\n\nimport type {ExtensionAuto} from '../../../../core';\nimport {markTypeFactory} from '../../../../utils/schema';\n\nimport {colorClassName, colorMarkName, domColorAttr} from './const';\n\nexport {colorMarkName} from './const';\nexport const colorType = markTypeFactory(colorMarkName);\n\nfunction getColorName(className: string) {\n const regexp = /^(yfm|md)-colorify--(\\w+)$/;\n return className.match(regexp)?.[2];\n}\n\nexport type ColorSpecsOptions = {\n validateClassNameColorName?: (colorName: string) => boolean;\n parseStyleColorValue?: (color: string) => string | null;\n};\n\nexport const ColorSpecs: ExtensionAuto<ColorSpecsOptions> = (builder, opts) => {\n const {validateClassNameColorName, parseStyleColorValue} = opts;\n const mdPlugin = (md: MarkdownIt) =>\n md.use(color, {escape: true, defaultClassName: colorClassName});\n\n builder\n .configureMd((md) => md.use(mdPlugin, {defaultClassName: colorClassName, inline: false}))\n .addMark(colorMarkName, () => ({\n spec: {\n attrs: {[colorMarkName]: {}},\n parseDOM: [\n {\n tag: `span`,\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node === 'string') return false;\n\n for (const className of Array.from(node.classList)) {\n const color = getColorName(className);\n if (color && (validateClassNameColorName?.(color) ?? true)) {\n return {\n [colorMarkName]: color,\n };\n }\n }\n\n return false;\n },\n },\n {\n style: 'color',\n preserveWhitespace: false,\n getAttrs(node) {\n if (typeof node !== 'string') return false;\n\n const color = parseStyleColorValue?.(node);\n if (color) {\n return {\n [colorMarkName]: color,\n };\n }\n\n return false;\n },\n },\n ],\n toDOM(node) {\n const colorValue = node.attrs[colorMarkName];\n\n return [\n 'span',\n {\n class: [colorClassName, `${colorClassName}--${colorValue}`].join(' '),\n [domColorAttr]: colorValue,\n },\n 0,\n ];\n },\n },\n fromMd: {\n tokenSpec: {\n name: colorMarkName,\n type: 'mark',\n getAttrs(token) {\n return {\n [colorMarkName]: token.info,\n };\n },\n },\n },\n toMd: {\n open: (state, mark) => {\n state.escapeCharacters = ['(', ')'];\n return `{${mark.attrs[colorMarkName]}}(`;\n },\n close: (state) => {\n state.escapeCharacters = undefined;\n return `)`;\n },\n mixable: true,\n expelEnclosingWhitespace: true,\n },\n }));\n};\n"]}
@@ -15,10 +15,12 @@
15
15
  margin-bottom: 16px !important;
16
16
  }
17
17
  .g-md-table-view__buttons-visible .g-md-table-view__plus-button-controls {
18
+ visibility: visible;
18
19
  pointer-events: initial;
19
20
  opacity: 1;
20
21
  }
21
22
  .g-md-table-view__plus-button-controls {
23
+ visibility: hidden;
22
24
  pointer-events: none;
23
25
  opacity: 0;
24
26
  transition: opacity 150ms ease 50ms;
@@ -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":"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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"]}
@@ -24,7 +24,7 @@ const getSchemaSpecs = (opts, placeholder) => ({
24
24
  group: 'block',
25
25
  parseDOM: [{ tag: 'div.yfm-tab' }],
26
26
  toDOM(node) {
27
- return ['div', node.attrs, 0];
27
+ return ['div', { draggable: 'false', ...node.attrs }, 0];
28
28
  },
29
29
  placeholder: {
30
30
  content: placeholder?.[const_1.TabsNode.Tab] ??
@@ -32,6 +32,7 @@ const getSchemaSpecs = (opts, placeholder) => ({
32
32
  DEFAULT_PLACEHOLDERS.TabTitle,
33
33
  alwaysVisible: true,
34
34
  },
35
+ selectionContext: false,
35
36
  selectable: false,
36
37
  allowSelection: false,
37
38
  complex: 'leaf',
@@ -146,6 +147,7 @@ const getSchemaSpecs = (opts, placeholder) => ({
146
147
  content: placeholder?.[const_1.TabsNode.RadioTab] ?? DEFAULT_PLACEHOLDERS.RadioTabLabelTitle,
147
148
  alwaysVisible: true,
148
149
  },
150
+ selectionContext: false,
149
151
  selectable: false,
150
152
  allowSelection: false,
151
153
  complex: 'leaf',
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmTabs/YfmTabsSpecs/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import type {NodeSpec} from 'prosemirror-model';\n\nimport type {PlaceholderOptions} from '../../../../utils/placeholder';\n\nimport {TabAttrs, TabPanelAttrs, TabsAttrs, TabsListAttrs, TabsNode} from './const';\n\nconst DEFAULT_PLACEHOLDERS = {\n TabTitle: 'Tab title',\n RadioTabLabelTitle: 'Radio title',\n};\n\nexport type YfmTabsSchemaOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n tabPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nexport const getSchemaSpecs: (\n opts: YfmTabsSchemaOptions,\n placeholder?: PlaceholderOptions,\n) => Record<TabsNode, NodeSpec> = (opts, placeholder) => ({\n [TabsNode.Tab]: {\n attrs: {\n [TabAttrs.id]: {default: 'unknown'},\n [TabAttrs.class]: {default: 'yfm-tab'},\n [TabAttrs.role]: {default: 'unknown'},\n [TabAttrs.ariaControls]: {default: 'unknown'},\n [TabAttrs.ariaSelected]: {default: 'unknown'},\n [TabAttrs.tabindex]: {default: 'unknown'},\n [TabAttrs.dataDiplodocKey]: {default: 'unknown'},\n [TabAttrs.dataDiplodocid]: {default: 'unknown'},\n [TabAttrs.dataDiplodocIsActive]: {default: 'unknown'},\n },\n marks: '',\n content: 'text*',\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n placeholder: {\n content:\n placeholder?.[TabsNode.Tab] ??\n opts?.tabPlaceholder ??\n DEFAULT_PLACEHOLDERS.TabTitle,\n alwaysVisible: true,\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n\n [TabsNode.TabPanel]: {\n attrs: {\n [TabPanelAttrs.id]: {default: 'unknown'},\n [TabPanelAttrs.class]: {default: 'yfm-tab-panel'},\n [TabPanelAttrs.role]: {default: 'unknown'},\n [TabPanelAttrs.dataTitle]: {default: 'unknown'},\n [TabPanelAttrs.ariaLabelledby]: {default: 'unknown'},\n },\n content: '(block | paragraph)+',\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab-panel'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n isolating: true,\n },\n\n [TabsNode.Tabs]: {\n attrs: {\n [TabsAttrs.class]: {default: 'yfm-tabs'},\n [TabsAttrs.dataDiplodocGroup]: {default: 'unknown'},\n [TabsAttrs.dataDiplodocVariant]: {default: 'regular'},\n },\n content: `${TabsNode.TabsList} ${TabsNode.TabPanel}+`,\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tabs'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: true,\n complex: 'root',\n },\n\n [TabsNode.TabsList]: {\n attrs: {\n [TabsListAttrs.class]: {default: 'yfm-tab-list'},\n [TabsListAttrs.role]: {default: 'unknown'},\n },\n content: `${TabsNode.Tab}*`,\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab-list'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'inner',\n },\n\n [TabsNode.RadioTabs]: {\n attrs: {\n [TabsAttrs.class]: {default: 'yfm-tabs yfm-tabs-vertical'},\n [TabsAttrs.dataDiplodocGroup]: {default: 'unknown'},\n [TabsAttrs.dataDiplodocVariant]: {default: 'radio'},\n },\n content: `(${TabsNode.RadioTab} ${TabsNode.TabPanel})+`,\n group: 'block',\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n complex: 'root',\n },\n [TabsNode.RadioTab]: {\n attrs: {\n [TabAttrs.id]: {default: null},\n [TabAttrs.class]: {default: 'yfm-tab yfm-vertical-tab'},\n [TabAttrs.role]: {default: 'unknown'},\n [TabAttrs.ariaControls]: {default: 'unknown'},\n [TabAttrs.ariaSelected]: {default: 'unknown'},\n [TabAttrs.tabindex]: {default: 'unknown'},\n [TabAttrs.dataDiplodocKey]: {default: 'unknown'},\n [TabAttrs.dataDiplodocid]: {default: 'unknown'},\n [TabAttrs.dataDiplodocIsActive]: {default: 'false'},\n [TabAttrs.dataDiplodocVerticalTab]: {default: 'true'},\n },\n content: `${TabsNode.RadioTabInput} ${TabsNode.RadioTabLabel}`,\n group: 'block',\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'inner',\n },\n [TabsNode.RadioTabInput]: {\n attrs: {\n [TabAttrs.class]: {default: 'radio'},\n type: {default: 'radio'},\n checked: {default: null},\n },\n group: 'block',\n toDOM(node) {\n return ['input', node.attrs];\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n [TabsNode.RadioTabLabel]: {\n attrs: {},\n marks: '',\n content: 'text*',\n group: 'block',\n toDOM(node) {\n return ['label', node.attrs, 0];\n },\n placeholder: {\n content: placeholder?.[TabsNode.RadioTab] ?? DEFAULT_PLACEHOLDERS.RadioTabLabelTitle,\n alwaysVisible: true,\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n});\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmTabs/YfmTabsSpecs/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import type {NodeSpec} from 'prosemirror-model';\n\nimport type {PlaceholderOptions} from '../../../../utils/placeholder';\n\nimport {TabAttrs, TabPanelAttrs, TabsAttrs, TabsListAttrs, TabsNode} from './const';\n\nconst DEFAULT_PLACEHOLDERS = {\n TabTitle: 'Tab title',\n RadioTabLabelTitle: 'Radio title',\n};\n\nexport type YfmTabsSchemaOptions = {\n /**\n * @deprecated: use placeholder option in BehaviorPreset instead.\n */\n tabPlaceholder?: NonNullable<NodeSpec['placeholder']>['content'];\n};\n\nexport const getSchemaSpecs: (\n opts: YfmTabsSchemaOptions,\n placeholder?: PlaceholderOptions,\n) => Record<TabsNode, NodeSpec> = (opts, placeholder) => ({\n [TabsNode.Tab]: {\n attrs: {\n [TabAttrs.id]: {default: 'unknown'},\n [TabAttrs.class]: {default: 'yfm-tab'},\n [TabAttrs.role]: {default: 'unknown'},\n [TabAttrs.ariaControls]: {default: 'unknown'},\n [TabAttrs.ariaSelected]: {default: 'unknown'},\n [TabAttrs.tabindex]: {default: 'unknown'},\n [TabAttrs.dataDiplodocKey]: {default: 'unknown'},\n [TabAttrs.dataDiplodocid]: {default: 'unknown'},\n [TabAttrs.dataDiplodocIsActive]: {default: 'unknown'},\n },\n marks: '',\n content: 'text*',\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab'}],\n toDOM(node) {\n return ['div', {draggable: 'false', ...node.attrs}, 0];\n },\n placeholder: {\n content:\n placeholder?.[TabsNode.Tab] ??\n opts?.tabPlaceholder ??\n DEFAULT_PLACEHOLDERS.TabTitle,\n alwaysVisible: true,\n },\n selectionContext: false,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n\n [TabsNode.TabPanel]: {\n attrs: {\n [TabPanelAttrs.id]: {default: 'unknown'},\n [TabPanelAttrs.class]: {default: 'yfm-tab-panel'},\n [TabPanelAttrs.role]: {default: 'unknown'},\n [TabPanelAttrs.dataTitle]: {default: 'unknown'},\n [TabPanelAttrs.ariaLabelledby]: {default: 'unknown'},\n },\n content: '(block | paragraph)+',\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab-panel'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n isolating: true,\n },\n\n [TabsNode.Tabs]: {\n attrs: {\n [TabsAttrs.class]: {default: 'yfm-tabs'},\n [TabsAttrs.dataDiplodocGroup]: {default: 'unknown'},\n [TabsAttrs.dataDiplodocVariant]: {default: 'regular'},\n },\n content: `${TabsNode.TabsList} ${TabsNode.TabPanel}+`,\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tabs'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: true,\n complex: 'root',\n },\n\n [TabsNode.TabsList]: {\n attrs: {\n [TabsListAttrs.class]: {default: 'yfm-tab-list'},\n [TabsListAttrs.role]: {default: 'unknown'},\n },\n content: `${TabsNode.Tab}*`,\n group: 'block',\n parseDOM: [{tag: 'div.yfm-tab-list'}],\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'inner',\n },\n\n [TabsNode.RadioTabs]: {\n attrs: {\n [TabsAttrs.class]: {default: 'yfm-tabs yfm-tabs-vertical'},\n [TabsAttrs.dataDiplodocGroup]: {default: 'unknown'},\n [TabsAttrs.dataDiplodocVariant]: {default: 'radio'},\n },\n content: `(${TabsNode.RadioTab} ${TabsNode.TabPanel})+`,\n group: 'block',\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n complex: 'root',\n },\n [TabsNode.RadioTab]: {\n attrs: {\n [TabAttrs.id]: {default: null},\n [TabAttrs.class]: {default: 'yfm-tab yfm-vertical-tab'},\n [TabAttrs.role]: {default: 'unknown'},\n [TabAttrs.ariaControls]: {default: 'unknown'},\n [TabAttrs.ariaSelected]: {default: 'unknown'},\n [TabAttrs.tabindex]: {default: 'unknown'},\n [TabAttrs.dataDiplodocKey]: {default: 'unknown'},\n [TabAttrs.dataDiplodocid]: {default: 'unknown'},\n [TabAttrs.dataDiplodocIsActive]: {default: 'false'},\n [TabAttrs.dataDiplodocVerticalTab]: {default: 'true'},\n },\n content: `${TabsNode.RadioTabInput} ${TabsNode.RadioTabLabel}`,\n group: 'block',\n toDOM(node) {\n return ['div', node.attrs, 0];\n },\n selectable: false,\n allowSelection: false,\n complex: 'inner',\n },\n [TabsNode.RadioTabInput]: {\n attrs: {\n [TabAttrs.class]: {default: 'radio'},\n type: {default: 'radio'},\n checked: {default: null},\n },\n group: 'block',\n toDOM(node) {\n return ['input', node.attrs];\n },\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n [TabsNode.RadioTabLabel]: {\n attrs: {},\n marks: '',\n content: 'text*',\n group: 'block',\n toDOM(node) {\n return ['label', node.attrs, 0];\n },\n placeholder: {\n content: placeholder?.[TabsNode.RadioTab] ?? DEFAULT_PLACEHOLDERS.RadioTabLabelTitle,\n alwaysVisible: true,\n },\n selectionContext: false,\n selectable: false,\n allowSelection: false,\n complex: 'leaf',\n },\n});\n"]}
@@ -74,6 +74,7 @@ const tabView = (node, view, getPos) => {
74
74
  if (currentTab && tabsParentNode)
75
75
  (0, plugins_1.createTab)(currentTab, tabsParentNode)(state, dispatch, view);
76
76
  });
77
+ tabElem.draggable = false;
77
78
  for (const attr in node.attrs) {
78
79
  if (Object.prototype.hasOwnProperty.call(node.attrs, attr)) {
79
80
  tabElem.setAttribute(attr, node.attrs[attr]);
@@ -1 +1 @@
1
- {"version":3,"file":"views.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/views.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeOfTypeClosestToPos} from 'prosemirror-utils';\nimport type {EditorView, NodeViewConstructor, ViewMutationRecord} from 'prosemirror-view';\n\nimport {cn} from '../../../classname';\n\nimport {tabType, tabsType} from './const';\nimport {crossSvg, plusSvg} from './icons';\nimport {createTab, removeTab} from './plugins';\nimport {execAfterPaint} from './utils';\n\nimport './index.scss';\n\nconst cnYfmTab = cn('yfm-tab');\n\nconst ignoreMutation =\n (_node: Node, _view: EditorView, _getPos: () => number | undefined) =>\n (mutation: ViewMutationRecord) => {\n if (\n mutation instanceof MutationRecord &&\n mutation.type === 'attributes' &&\n mutation.attributeName\n ) {\n return true;\n }\n\n return false;\n };\n\nconst getTabNodes = (state: EditorState, getPos: () => number | undefined) => {\n const currentTab = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()! + 1),\n tabType(state.schema),\n );\n const tabsParentNode = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()!),\n tabsType(state.schema),\n );\n\n return {currentTab, tabsParentNode};\n};\n\nexport const tabView: NodeViewConstructor = (node, view, getPos) => {\n const tabElem = document.createElement('div');\n const wrapperElem = document.createElement('div');\n wrapperElem.setAttribute('class', cnYfmTab('wrapper'));\n\n const viewElem = document.createElement('div');\n viewElem.setAttribute('class', cnYfmTab('view'));\n\n wrapperElem.addEventListener('click', () => {\n // Click on parent node to trigger event listener that selects current tab\n tabElem.click();\n\n {\n /**\n * Hack for empty tabs\n *\n * Problem: when clicking on an empty tab (without text content) it focuses, and selection doesn't move to beginning of tab\n *\n * Temporary fix: manually return focus to pm-view, move text selection to beginning of tab\n */\n\n view.focus();\n\n // tab is empty\n if (node.nodeSize < 3) {\n execAfterPaint(() => {\n const pos = getPos();\n if (pos !== undefined) {\n const {tr} = view.state;\n view.dispatch(\n tr.setSelection(TextSelection.create(tr.doc, pos + 1)).scrollIntoView(),\n );\n }\n });\n }\n }\n });\n\n const removeTabButton = document.createElement('div');\n removeTabButton.setAttribute('class', cnYfmTab('remove-button'));\n removeTabButton.innerHTML = crossSvg;\n removeTabButton.contentEditable = 'false';\n removeTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n removeTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n const createTabButton = document.createElement('div');\n createTabButton.setAttribute('class', cnYfmTab('create-button'));\n createTabButton.innerHTML = plusSvg;\n createTabButton.contentEditable = 'false';\n createTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n createTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n for (const attr in node.attrs) {\n if (Object.prototype.hasOwnProperty.call(node.attrs, attr)) {\n tabElem.setAttribute(attr, node.attrs[attr]);\n }\n }\n\n wrapperElem.appendChild(viewElem);\n wrapperElem.appendChild(removeTabButton);\n\n tabElem.appendChild(wrapperElem);\n tabElem.appendChild(createTabButton);\n\n return {\n dom: tabElem,\n contentDOM: viewElem,\n destroy() {\n tabElem.remove();\n },\n // FIX: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n };\n};\n\n// @ts-expect-error\nexport const tabPanelView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabInputView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n"]}
1
+ {"version":3,"file":"views.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/views.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeOfTypeClosestToPos} from 'prosemirror-utils';\nimport type {EditorView, NodeViewConstructor, ViewMutationRecord} from 'prosemirror-view';\n\nimport {cn} from '../../../classname';\n\nimport {tabType, tabsType} from './const';\nimport {crossSvg, plusSvg} from './icons';\nimport {createTab, removeTab} from './plugins';\nimport {execAfterPaint} from './utils';\n\nimport './index.scss';\n\nconst cnYfmTab = cn('yfm-tab');\n\nconst ignoreMutation =\n (_node: Node, _view: EditorView, _getPos: () => number | undefined) =>\n (mutation: ViewMutationRecord) => {\n if (\n mutation instanceof MutationRecord &&\n mutation.type === 'attributes' &&\n mutation.attributeName\n ) {\n return true;\n }\n\n return false;\n };\n\nconst getTabNodes = (state: EditorState, getPos: () => number | undefined) => {\n const currentTab = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()! + 1),\n tabType(state.schema),\n );\n const tabsParentNode = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()!),\n tabsType(state.schema),\n );\n\n return {currentTab, tabsParentNode};\n};\n\nexport const tabView: NodeViewConstructor = (node, view, getPos) => {\n const tabElem = document.createElement('div');\n const wrapperElem = document.createElement('div');\n wrapperElem.setAttribute('class', cnYfmTab('wrapper'));\n\n const viewElem = document.createElement('div');\n viewElem.setAttribute('class', cnYfmTab('view'));\n\n wrapperElem.addEventListener('click', () => {\n // Click on parent node to trigger event listener that selects current tab\n tabElem.click();\n\n {\n /**\n * Hack for empty tabs\n *\n * Problem: when clicking on an empty tab (without text content) it focuses, and selection doesn't move to beginning of tab\n *\n * Temporary fix: manually return focus to pm-view, move text selection to beginning of tab\n */\n\n view.focus();\n\n // tab is empty\n if (node.nodeSize < 3) {\n execAfterPaint(() => {\n const pos = getPos();\n if (pos !== undefined) {\n const {tr} = view.state;\n view.dispatch(\n tr.setSelection(TextSelection.create(tr.doc, pos + 1)).scrollIntoView(),\n );\n }\n });\n }\n }\n });\n\n const removeTabButton = document.createElement('div');\n removeTabButton.setAttribute('class', cnYfmTab('remove-button'));\n removeTabButton.innerHTML = crossSvg;\n removeTabButton.contentEditable = 'false';\n removeTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n removeTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n const createTabButton = document.createElement('div');\n createTabButton.setAttribute('class', cnYfmTab('create-button'));\n createTabButton.innerHTML = plusSvg;\n createTabButton.contentEditable = 'false';\n createTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n createTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n tabElem.draggable = false;\n for (const attr in node.attrs) {\n if (Object.prototype.hasOwnProperty.call(node.attrs, attr)) {\n tabElem.setAttribute(attr, node.attrs[attr]);\n }\n }\n\n wrapperElem.appendChild(viewElem);\n wrapperElem.appendChild(removeTabButton);\n\n tabElem.appendChild(wrapperElem);\n tabElem.appendChild(createTabButton);\n\n return {\n dom: tabElem,\n contentDOM: viewElem,\n destroy() {\n tabElem.remove();\n },\n // FIX: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n };\n};\n\n// @ts-expect-error\nexport const tabPanelView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabInputView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n"]}
@@ -1,2 +1,2 @@
1
- import { colorPlugin } from 'markdown-it-color';
1
+ import { colorPlugin } from '@diplodoc/color-extension';
2
2
  export default colorPlugin;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const markdown_it_color_1 = require("markdown-it-color");
4
- exports.default = markdown_it_color_1.colorPlugin;
3
+ const color_extension_1 = require("@diplodoc/color-extension");
4
+ exports.default = color_extension_1.colorPlugin;
5
5
  //# sourceMappingURL=color.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","sourceRoot":"../../../src","sources":["markdown-it/color.ts"],"names":[],"mappings":";;AAAA,yDAA8C;AAE9C,kBAAe,+BAAW,CAAC","sourcesContent":["import {colorPlugin} from 'markdown-it-color';\n\nexport default colorPlugin;\n"]}
1
+ {"version":3,"file":"color.js","sourceRoot":"../../../src","sources":["markdown-it/color.ts"],"names":[],"mappings":";;AAAA,+DAAsD;AAEtD,kBAAe,6BAAW,CAAC","sourcesContent":["import {colorPlugin} from '@diplodoc/color-extension';\n\nexport default colorPlugin;\n"]}
@@ -46,6 +46,6 @@ function FlexToolbar(props) {
46
46
  hiddenActions: filteredHiddenAction,
47
47
  });
48
48
  }, [data, width, hiddenActions]);
49
- return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: b(null, [className]), children: (0, jsx_runtime_1.jsxs)("div", { className: b('container'), children: [(0, jsx_runtime_1.jsx)(Toolbar_1.Toolbar, { ...props, data: items, className: b('bar') }), dots?.length && ((0, jsx_runtime_1.jsx)(ToolbarListButton_1.ToolbarListButton, { qa: "g-md-toolbar-more-action", data: dots, icon: { data: icons_1.Ellipsis }, title: props.dotsTitle, editor: props.editor, focus: props.focus, onClick: props.onClick, className: b('dots'), alwaysActive: true }))] }) }));
49
+ return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: b(null, [className]), children: (0, jsx_runtime_1.jsxs)("div", { className: b('container'), children: [(0, jsx_runtime_1.jsx)(Toolbar_1.Toolbar, { ...props, data: items, className: b('bar') }), dots?.length && ((0, jsx_runtime_1.jsx)(ToolbarListButton_1.ToolbarListButton, { qa: "g-md-toolbar-more-action", qaMenu: "g-md-toolbar-more-menu", data: dots, icon: { data: icons_1.Ellipsis }, title: props.dotsTitle, editor: props.editor, focus: props.focus, onClick: props.onClick, className: b('dots'), alwaysActive: true }))] }) }));
50
50
  }
51
51
  //# sourceMappingURL=FlexToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlexToolbar.js","sourceRoot":"../../../src","sources":["toolbar/FlexToolbar.tsx"],"names":[],"mappings":";;AAuBA,kCAwDC;;AA/ED,iCAA8B;AAE9B,6CAA2C;AAC3C,yCAAqC;AAErC,+CAAgC;AAChC,yCAAiC;AACjC,mDAAmD;AAEnD,0CAAqD;AACrD,8DAAsD;AACtD,4CAA6C;AAC7C,sCAA8D;AAE9D,6BAA4B;AAE5B,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,cAAc,CAAC,CAAC;AAO7B,SAAgB,WAAW,CAAI,KAA0B;IACrD,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,eAAM,CAAC,OAAO,CAAC;YACX,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,EAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAC,GAAG,KAAK,CAAC;IAE/C,MAAM,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,CAAC,GAAG,IAAA,sBAAU,GAAkB,CAAC;IACpD,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,EAAE,YAAY,EAAE,EAAE;YAC/D,OAAO;gBACH,GAAG,CAAC;gBACJ,GAAG,YAAY;qBACV,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;oBACnB,IAAI,aAAa,CAAC,IAAI,KAAK,uBAAe,CAAC,UAAU,EAAE,CAAC;wBACpD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,CAAC;oBACD,OAAO,aAAa,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC;qBACD,IAAI,EAAE;aACd,CAAC;QACN,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,sEAAsE;QACtE,MAAM,oBAAoB,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAA,4BAAiB,EAAC;YACrB,IAAI;YACJ,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,oBAAoB;SACtC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjC,OAAO,CACH,gCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,YAC1C,iCAAK,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,aAC1B,uBAAC,iBAAO,OAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAI,EACvD,IAAI,EAAE,MAAM,IAAI,CACb,uBAAC,qCAAiB,IACd,EAAE,EAAC,0BAA0B,EAC7B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,EAAC,IAAI,EAAE,gBAAQ,EAAC,EACtB,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,IAAI,GACpB,CACL,IACC,GACJ,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useMemo} from 'react';\n\nimport {Ellipsis} from '@gravity-ui/icons';\nimport {useMeasure} from 'react-use';\n\nimport {cn} from '../classname';\nimport {logger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport {Toolbar, type ToolbarProps} from './Toolbar';\nimport {ToolbarListButton} from './ToolbarListButton';\nimport {shrinkToolbarData} from './flexible';\nimport {ToolbarDataType, type ToolbarItemData} from './types';\n\nimport './FlexToolbar.scss';\n\nconst b = cn('flex-toolbar');\n\nexport type FlexToolbarProps<E> = ToolbarProps<E> & {\n dotsTitle: string | (() => string);\n hiddenActions?: ToolbarItemData<E>[];\n};\n\nexport function FlexToolbar<E>(props: FlexToolbarProps<E>) {\n useRenderTime((time) => {\n logger.metrics({\n component: 'toolbar',\n event: 'render',\n duration: time,\n });\n });\n\n const {data, className, hiddenActions} = props;\n\n const [ref, {width}] = useMeasure<HTMLDivElement>();\n const {data: items, dots} = useMemo(() => {\n const toolbarButtonIds = data.reduce((a: string[], toolbarGroup) => {\n return [\n ...a,\n ...toolbarGroup\n .map((toolbarButton) => {\n if (toolbarButton.type === ToolbarDataType.ListButton) {\n return toolbarButton.data.map((v) => v.id);\n }\n return toolbarButton.id;\n })\n .flat(),\n ];\n }, []);\n\n // Finding only actions tha are not present in the main toolbar config\n const filteredHiddenAction = hiddenActions?.filter((a) => !toolbarButtonIds.includes(a.id));\n return shrinkToolbarData({\n data,\n availableWidth: width,\n hiddenActions: filteredHiddenAction,\n });\n }, [data, width, hiddenActions]);\n\n return (\n <div ref={ref} className={b(null, [className])}>\n <div className={b('container')}>\n <Toolbar {...props} data={items} className={b('bar')} />\n {dots?.length && (\n <ToolbarListButton\n qa=\"g-md-toolbar-more-action\"\n data={dots}\n icon={{data: Ellipsis}}\n title={props.dotsTitle}\n editor={props.editor}\n focus={props.focus}\n onClick={props.onClick}\n className={b('dots')}\n alwaysActive={true}\n />\n )}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"FlexToolbar.js","sourceRoot":"../../../src","sources":["toolbar/FlexToolbar.tsx"],"names":[],"mappings":";;AAuBA,kCAyDC;;AAhFD,iCAA8B;AAE9B,6CAA2C;AAC3C,yCAAqC;AAErC,+CAAgC;AAChC,yCAAiC;AACjC,mDAAmD;AAEnD,0CAAqD;AACrD,8DAAsD;AACtD,4CAA6C;AAC7C,sCAA8D;AAE9D,6BAA4B;AAE5B,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,cAAc,CAAC,CAAC;AAO7B,SAAgB,WAAW,CAAI,KAA0B;IACrD,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,eAAM,CAAC,OAAO,CAAC;YACX,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,EAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAC,GAAG,KAAK,CAAC;IAE/C,MAAM,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,CAAC,GAAG,IAAA,sBAAU,GAAkB,CAAC;IACpD,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,EAAE,YAAY,EAAE,EAAE;YAC/D,OAAO;gBACH,GAAG,CAAC;gBACJ,GAAG,YAAY;qBACV,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;oBACnB,IAAI,aAAa,CAAC,IAAI,KAAK,uBAAe,CAAC,UAAU,EAAE,CAAC;wBACpD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,CAAC;oBACD,OAAO,aAAa,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC;qBACD,IAAI,EAAE;aACd,CAAC;QACN,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,sEAAsE;QACtE,MAAM,oBAAoB,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAA,4BAAiB,EAAC;YACrB,IAAI;YACJ,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,oBAAoB;SACtC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjC,OAAO,CACH,gCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,YAC1C,iCAAK,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,aAC1B,uBAAC,iBAAO,OAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAI,EACvD,IAAI,EAAE,MAAM,IAAI,CACb,uBAAC,qCAAiB,IACd,EAAE,EAAC,0BAA0B,EAC7B,MAAM,EAAC,wBAAwB,EAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,EAAC,IAAI,EAAE,gBAAQ,EAAC,EACtB,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,IAAI,GACpB,CACL,IACC,GACJ,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useMemo} from 'react';\n\nimport {Ellipsis} from '@gravity-ui/icons';\nimport {useMeasure} from 'react-use';\n\nimport {cn} from '../classname';\nimport {logger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport {Toolbar, type ToolbarProps} from './Toolbar';\nimport {ToolbarListButton} from './ToolbarListButton';\nimport {shrinkToolbarData} from './flexible';\nimport {ToolbarDataType, type ToolbarItemData} from './types';\n\nimport './FlexToolbar.scss';\n\nconst b = cn('flex-toolbar');\n\nexport type FlexToolbarProps<E> = ToolbarProps<E> & {\n dotsTitle: string | (() => string);\n hiddenActions?: ToolbarItemData<E>[];\n};\n\nexport function FlexToolbar<E>(props: FlexToolbarProps<E>) {\n useRenderTime((time) => {\n logger.metrics({\n component: 'toolbar',\n event: 'render',\n duration: time,\n });\n });\n\n const {data, className, hiddenActions} = props;\n\n const [ref, {width}] = useMeasure<HTMLDivElement>();\n const {data: items, dots} = useMemo(() => {\n const toolbarButtonIds = data.reduce((a: string[], toolbarGroup) => {\n return [\n ...a,\n ...toolbarGroup\n .map((toolbarButton) => {\n if (toolbarButton.type === ToolbarDataType.ListButton) {\n return toolbarButton.data.map((v) => v.id);\n }\n return toolbarButton.id;\n })\n .flat(),\n ];\n }, []);\n\n // Finding only actions tha are not present in the main toolbar config\n const filteredHiddenAction = hiddenActions?.filter((a) => !toolbarButtonIds.includes(a.id));\n return shrinkToolbarData({\n data,\n availableWidth: width,\n hiddenActions: filteredHiddenAction,\n });\n }, [data, width, hiddenActions]);\n\n return (\n <div ref={ref} className={b(null, [className])}>\n <div className={b('container')}>\n <Toolbar {...props} data={items} className={b('bar')} />\n {dots?.length && (\n <ToolbarListButton\n qa=\"g-md-toolbar-more-action\"\n qaMenu=\"g-md-toolbar-more-menu\"\n data={dots}\n icon={{data: Ellipsis}}\n title={props.dotsTitle}\n editor={props.editor}\n focus={props.focus}\n onClick={props.onClick}\n className={b('dots')}\n alwaysActive={true}\n />\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  import type { ToolbarBaseProps, ToolbarListButtonData } from "./types.js";
2
2
  import "./ToolbarListButton.css";
3
3
  export type { ToolbarListButtonData };
4
- export type ToolbarListButtonProps<E> = ToolbarBaseProps<E> & ToolbarListButtonData<E>;
5
- export declare function ToolbarListButton<E>({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, }: ToolbarListButtonProps<E>): JSX.Element | null;
4
+ export type ToolbarListButtonProps<E> = ToolbarBaseProps<E> & ToolbarListButtonData<E> & {
5
+ qaMenu?: string;
6
+ };
7
+ export declare function ToolbarListButton<E>({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, qaMenu, }: ToolbarListButtonProps<E>): JSX.Element | null;
@@ -13,7 +13,7 @@ const PreviewTooltip_1 = require("./PreviewTooltip.js");
13
13
  const ToolbarButton_1 = require("./ToolbarButton.js");
14
14
  require("./ToolbarListButton.css");
15
15
  const b = (0, classname_1.cn)('toolbar-list-button');
16
- function ToolbarListButton({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, }) {
16
+ function ToolbarListButton({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, qaMenu, }) {
17
17
  const [anchorElement, setAnchorElement] = (0, hooks_1.useElementState)();
18
18
  const [open, , hide, toggleOpen] = (0, hooks_1.useBooleanState)(false);
19
19
  const [popupItem, setPopupItem] = (0, react_1.useState)();
@@ -42,7 +42,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
42
42
  setPopupItem(undefined);
43
43
  else
44
44
  toggleOpen();
45
- }, children: buttonContent }), (0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorElement: anchorElement, open: popupOpen, onOpenChange: hide, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu, { size: "l", className: b('menu'), children: data
45
+ }, children: buttonContent }), (0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorElement: anchorElement, open: popupOpen, onOpenChange: hide, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu, { size: "l", className: b('menu'), qa: qaMenu, children: data
46
46
  .map((data) => {
47
47
  const { id, title, icon, hotkey, isActive, isEnable, exec, hint, hintWhenDisabled, preview, } = data;
48
48
  const titleText = (0, lodash_1.isFunction)(title) ? title() : title;
@@ -66,7 +66,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
66
66
  onClick?.(id);
67
67
  }
68
68
  };
69
- return ((0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b('action-disabled-popover'), content: (0, jsx_runtime_1.jsx)("div", { className: b('action-disabled-tooltip'), children: hintWhenDisabledText }), placement: "left", modal: false, disabled: hideHintWhenDisabled, children: (props, ref) => ((0, jsx_runtime_1.jsx)(PreviewTooltip_1.PreviewTooltip, { preview: preview, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu.Item, { ref: ref, active: isActive(editor), disabled: !isEnable(editor), onClick: handleClick, iconStart: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon.data, size: icon.size ?? 16 }), extraProps: {
69
+ return ((0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b('action-disabled-popover'), content: (0, jsx_runtime_1.jsx)("div", { className: b('action-disabled-tooltip'), children: hintWhenDisabledText }), placement: "left", modal: false, disabled: hideHintWhenDisabled, qa: "g-md-toolbar-action-disabled-hint", children: (props, ref) => ((0, jsx_runtime_1.jsx)(PreviewTooltip_1.PreviewTooltip, { preview: preview, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu.Item, { ref: ref, active: isActive(editor), disabled: !isEnable(editor), onClick: handleClick, iconStart: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon.data, size: icon.size ?? 16 }), extraProps: {
70
70
  ...props,
71
71
  'aria-label': titleText,
72
72
  }, children: (0, jsx_runtime_1.jsxs)("div", { className: b('item'), children: [titleText, (0, jsx_runtime_1.jsxs)("div", { className: b('extra'), children: [hotkey && (0, jsx_runtime_1.jsx)(uikit_1.Hotkey, { value: hotkey }), hintText && ((0, jsx_runtime_1.jsx)(uikit_1.HelpMark, { className: b('hint'), popoverProps: { modal: false }, children: hintText }))] })] }) }, id) })) }, id));