@gravity-ui/markdown-editor 15.22.2 → 15.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/bundle/ToolbarView.js +2 -1
- package/build/cjs/bundle/ToolbarView.js.map +1 -1
- package/build/cjs/bundle/settings/index.d.ts +2 -1
- package/build/cjs/bundle/settings/index.js +6 -2
- package/build/cjs/bundle/settings/index.js.map +1 -1
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
- package/build/cjs/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/cjs/common/layout.d.ts +3 -0
- package/build/cjs/common/layout.js +7 -0
- package/build/cjs/common/layout.js.map +1 -0
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +2 -2
- package/build/cjs/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Table/commands.d.ts +2 -0
- package/build/cjs/extensions/markdown/Table/commands.js +73 -0
- package/build/cjs/extensions/markdown/Table/commands.js.map +1 -0
- package/build/cjs/extensions/markdown/Table/helpers.d.ts +7 -2
- package/build/cjs/extensions/markdown/Table/helpers.js +22 -9
- package/build/cjs/extensions/markdown/Table/helpers.js.map +1 -1
- package/build/cjs/extensions/markdown/Table/index.js +3 -0
- package/build/cjs/extensions/markdown/Table/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +35 -0
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +6 -0
- package/build/cjs/extensions/yfm/ImgSize/utils.js +25 -0
- package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js +6 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js +2 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +6 -6
- package/build/cjs/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js +6 -6
- package/build/cjs/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/const.d.ts +9 -1
- package/build/cjs/extensions/yfm/YfmCut/const.js +13 -6
- package/build/cjs/extensions/yfm/YfmCut/const.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/index.css +0 -3
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.js +6 -7
- package/build/cjs/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js +8 -9
- package/build/cjs/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.js +61 -84
- package/build/cjs/extensions/yfm/YfmTable/commands/backspace.js.map +1 -1
- package/build/cjs/i18n/search/en.json +5 -2
- package/build/cjs/i18n/search/index.d.ts +4 -1
- package/build/cjs/i18n/search/ru.json +5 -2
- package/build/cjs/markup/codemirror/search-plugin/plugin.d.ts +2 -0
- package/build/cjs/markup/codemirror/search-plugin/plugin.js +13 -0
- package/build/cjs/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +3 -0
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js +9 -0
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +1 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +1 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.d.ts +2 -0
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js +12 -2
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js.map +1 -1
- package/build/cjs/react-utils/index.d.ts +1 -0
- package/build/cjs/react-utils/index.js +1 -0
- package/build/cjs/react-utils/index.js.map +1 -1
- package/build/cjs/react-utils/useSticky.js +13 -2
- package/build/cjs/react-utils/useSticky.js.map +1 -1
- package/build/cjs/react-utils/useTargetZIndex.d.ts +1 -0
- package/build/cjs/react-utils/useTargetZIndex.js +50 -0
- package/build/cjs/react-utils/useTargetZIndex.js.map +1 -0
- package/build/cjs/toolbar/ToolbarListButton.js +4 -1
- package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
- package/build/cjs/utils/get-target-z-index.d.ts +1 -0
- package/build/cjs/utils/get-target-z-index.js +17 -0
- package/build/cjs/utils/get-target-z-index.js.map +1 -0
- package/build/cjs/utils/inputrules.d.ts +1 -0
- package/build/cjs/utils/inputrules.js +8 -3
- package/build/cjs/utils/inputrules.js.map +1 -1
- package/build/cjs/utils/rulebuilders.js +2 -0
- package/build/cjs/utils/rulebuilders.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/ToolbarView.js +2 -1
- package/build/esm/bundle/ToolbarView.js.map +1 -1
- package/build/esm/bundle/settings/index.d.ts +2 -1
- package/build/esm/bundle/settings/index.js +6 -2
- package/build/esm/bundle/settings/index.js.map +1 -1
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js +4 -1
- package/build/esm/bundle/toolbar/ToolbarButtonWithPopupMenu.js.map +1 -1
- package/build/esm/common/layout.d.ts +3 -0
- package/build/esm/common/layout.js +4 -0
- package/build/esm/common/layout.js.map +1 -0
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.d.ts +1 -1
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js +1 -1
- package/build/esm/extensions/base/BaseSchema/BaseSchemaSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Table/commands.d.ts +2 -0
- package/build/esm/extensions/markdown/Table/commands.js +69 -0
- package/build/esm/extensions/markdown/Table/commands.js.map +1 -0
- package/build/esm/extensions/markdown/Table/helpers.d.ts +7 -2
- package/build/esm/extensions/markdown/Table/helpers.js +9 -3
- package/build/esm/extensions/markdown/Table/helpers.js.map +1 -1
- package/build/esm/extensions/markdown/Table/index.js +3 -0
- package/build/esm/extensions/markdown/Table/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +36 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -0
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/utils.d.ts +6 -0
- package/build/esm/extensions/yfm/ImgSize/utils.js +22 -0
- package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.d.ts +5 -0
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js +5 -0
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js +7 -7
- package/build/esm/extensions/yfm/YfmCut/YfmCutSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js +5 -5
- package/build/esm/extensions/yfm/YfmCut/actions/toYfmCut.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/const.d.ts +9 -1
- package/build/esm/extensions/yfm/YfmCut/const.js +8 -1
- package/build/esm/extensions/yfm/YfmCut/const.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/index.css +0 -3
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +6 -5
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.d.ts +5 -2
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js +26 -9
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/active.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/active.js +4 -5
- package/build/esm/extensions/yfm/YfmCut/plugins/active.js.map +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js +6 -7
- package/build/esm/extensions/yfm/YfmCut/plugins/auto-open.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.js +60 -83
- package/build/esm/extensions/yfm/YfmTable/commands/backspace.js.map +1 -1
- package/build/esm/i18n/search/en.json +5 -2
- package/build/esm/i18n/search/index.d.ts +4 -1
- package/build/esm/i18n/search/ru.json +5 -2
- package/build/esm/markup/codemirror/search-plugin/plugin.d.ts +2 -0
- package/build/esm/markup/codemirror/search-plugin/plugin.js +14 -1
- package/build/esm/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +3 -0
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js +4 -0
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +1 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +1 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.d.ts +2 -0
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js +12 -2
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js.map +1 -1
- package/build/esm/react-utils/index.d.ts +1 -0
- package/build/esm/react-utils/index.js +1 -0
- package/build/esm/react-utils/index.js.map +1 -1
- package/build/esm/react-utils/useSticky.js +13 -2
- package/build/esm/react-utils/useSticky.js.map +1 -1
- package/build/esm/react-utils/useTargetZIndex.d.ts +1 -0
- package/build/esm/react-utils/useTargetZIndex.js +47 -0
- package/build/esm/react-utils/useTargetZIndex.js.map +1 -0
- package/build/esm/toolbar/ToolbarListButton.js +4 -1
- package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
- package/build/esm/utils/get-target-z-index.d.ts +1 -0
- package/build/esm/utils/get-target-z-index.js +14 -0
- package/build/esm/utils/get-target-z-index.js.map +1 -0
- package/build/esm/utils/inputrules.d.ts +1 -0
- package/build/esm/utils/inputrules.js +5 -1
- package/build/esm/utils/inputrules.js.map +1 -1
- package/build/esm/utils/rulebuilders.js +3 -1
- package/build/esm/utils/rulebuilders.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/styles.css +7 -8
- package/package.json +2 -2
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplaceAllIcon = exports.ReplaceIcon = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ReplaceIcon = (props) => ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", width: 14, height: 14, ...props, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3.221 3.739l2.261 2.269L7.7 3.784l-.7-.7-1.012 1.007-.008-1.6a.523.523 0 0 1 .5-.526H8V1H6.48A1.482 1.482 0 0 0 5 2.489V4.1L3.927 3.033l-.706.706zm6.67 1.794h.01c.183.311.451.467.806.467.393 0 .706-.168.94-.503.236-.335.353-.78.353-1.333 0-.511-.1-.913-.301-1.207-.201-.295-.488-.442-.86-.442-.405 0-.718.194-.938.581h-.01V1H9v4.919h.89v-.386zm-.015-1.061v-.34c0-.248.058-.448.175-.601a.54.54 0 0 1 .445-.23.49.49 0 0 1 .436.233c.104.154.155.368.155.643 0 .33-.056.587-.169.768a.524.524 0 0 1-.47.27.495.495 0 0 1-.411-.211.853.853 0 0 1-.16-.532zM9 12.769c-.256.154-.625.231-1.108.231-.563 0-1.02-.178-1.369-.533-.349-.355-.523-.813-.523-1.374 0-.648.186-1.158.56-1.53.374-.376.875-.563 1.5-.563.433 0 .746.06.94.179v.998a1.26 1.26 0 0 0-.792-.276c-.325 0-.583.1-.774.298-.19.196-.283.468-.283.816 0 .338.09.603.272.797.182.191.431.287.749.287.282 0 .558-.092.828-.276v.946zM4 7L3 8v6l1 1h7l1-1V8l-1-1H4zm0 1h7v6H4V8z" }) }));
|
|
6
|
+
exports.ReplaceIcon = ReplaceIcon;
|
|
7
|
+
const ReplaceAllIcon = (props) => ((0, jsx_runtime_1.jsx)("svg", { viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", width: 14, height: 14, ...props, children: (0, jsx_runtime_1.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.6 2.677c.147-.31.356-.465.626-.465.248 0 .44.118.573.353.134.236.201.557.201.966 0 .443-.078.798-.235 1.067-.156.268-.365.402-.627.402-.237 0-.416-.125-.537-.374h-.008v.31H11V1h.593v1.677h.008zm-.016 1.1a.78.78 0 0 0 .107.426c.071.113.163.169.274.169.136 0 .24-.072.314-.216.075-.145.113-.35.113-.615 0-.22-.035-.39-.104-.514-.067-.124-.164-.187-.29-.187-.12 0-.219.062-.297.185a.886.886 0 0 0-.117.48v.272zM4.12 7.695L2 5.568l.662-.662 1.006 1v-1.51A1.39 1.39 0 0 1 5.055 3H7.4v.905H5.055a.49.49 0 0 0-.468.493l.007 1.5.949-.944.656.656-2.08 2.085zM9.356 4.93H10V3.22C10 2.408 9.685 2 9.056 2c-.135 0-.285.024-.45.073a1.444 1.444 0 0 0-.388.167v.665c.237-.203.487-.304.75-.304.261 0 .392.156.392.469l-.6.103c-.506.086-.76.406-.76.961 0 .263.061.473.183.631A.61.61 0 0 0 8.69 5c.29 0 .509-.16.657-.48h.009v.41zm.004-1.355v.193a.75.75 0 0 1-.12.436.368.368 0 0 1-.313.17.276.276 0 0 1-.22-.095.38.38 0 0 1-.08-.248c0-.222.11-.351.332-.389l.4-.067zM7 12.93h-.644v-.41h-.009c-.148.32-.367.48-.657.48a.61.61 0 0 1-.507-.235c-.122-.158-.183-.368-.183-.63 0-.556.254-.876.76-.962l.6-.103c0-.313-.13-.47-.392-.47-.263 0-.513.102-.75.305v-.665c.095-.063.224-.119.388-.167.165-.049.315-.073.45-.073.63 0 .944.407.944 1.22v1.71zm-.64-1.162v-.193l-.4.068c-.222.037-.333.166-.333.388 0 .1.027.183.08.248a.276.276 0 0 0 .22.095.368.368 0 0 0 .312-.17c.08-.116.12-.26.12-.436zM9.262 13c.321 0 .568-.058.738-.173v-.71a.9.9 0 0 1-.552.207.619.619 0 0 1-.5-.215c-.12-.145-.181-.345-.181-.598 0-.26.063-.464.189-.612a.644.644 0 0 1 .516-.223c.194 0 .37.069.528.207v-.749c-.129-.09-.338-.134-.626-.134-.417 0-.751.14-1.001.422-.249.28-.373.662-.373 1.148 0 .42.116.764.349 1.03.232.267.537.4.913.4zM2 9l1-1h9l1 1v5l-1 1H3l-1-1V9zm1 0v5h9V9H3zm3-2l1-1h7l1 1v5l-1 1V7H6z" }) }));
|
|
8
|
+
exports.ReplaceAllIcon = ReplaceAllIcon;
|
|
9
|
+
//# sourceMappingURL=ReplaceIcons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReplaceIcons.js","sourceRoot":"../../../../../../src","sources":["markup/codemirror/search-plugin/view/ReplaceIcons.tsx"],"names":[],"mappings":";;;;AAEO,MAAM,WAAW,GAA4C,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3E,gCACI,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,cAAc,EACnB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,KACN,KAAK,YAET,iCACI,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,y5BAAy5B,GAC75B,GACA,CACT,CAAC;AAfW,QAAA,WAAW,eAetB;AAEK,MAAM,cAAc,GAA4C,CAAC,KAAK,EAAE,EAAE,CAAC,CAC9E,gCACI,OAAO,EAAC,WAAW,EACnB,KAAK,EAAC,4BAA4B,EAClC,IAAI,EAAC,cAAc,EACnB,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,KACN,KAAK,YAET,iCACI,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,2tDAA2tD,GAC/tD,GACA,CACT,CAAC;AAfW,QAAA,cAAc,kBAezB","sourcesContent":["import type React from 'react';\n\nexport const ReplaceIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n width={14}\n height={14}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.221 3.739l2.261 2.269L7.7 3.784l-.7-.7-1.012 1.007-.008-1.6a.523.523 0 0 1 .5-.526H8V1H6.48A1.482 1.482 0 0 0 5 2.489V4.1L3.927 3.033l-.706.706zm6.67 1.794h.01c.183.311.451.467.806.467.393 0 .706-.168.94-.503.236-.335.353-.78.353-1.333 0-.511-.1-.913-.301-1.207-.201-.295-.488-.442-.86-.442-.405 0-.718.194-.938.581h-.01V1H9v4.919h.89v-.386zm-.015-1.061v-.34c0-.248.058-.448.175-.601a.54.54 0 0 1 .445-.23.49.49 0 0 1 .436.233c.104.154.155.368.155.643 0 .33-.056.587-.169.768a.524.524 0 0 1-.47.27.495.495 0 0 1-.411-.211.853.853 0 0 1-.16-.532zM9 12.769c-.256.154-.625.231-1.108.231-.563 0-1.02-.178-1.369-.533-.349-.355-.523-.813-.523-1.374 0-.648.186-1.158.56-1.53.374-.376.875-.563 1.5-.563.433 0 .746.06.94.179v.998a1.26 1.26 0 0 0-.792-.276c-.325 0-.583.1-.774.298-.19.196-.283.468-.283.816 0 .338.09.603.272.797.182.191.431.287.749.287.282 0 .558-.092.828-.276v.946zM4 7L3 8v6l1 1h7l1-1V8l-1-1H4zm0 1h7v6H4V8z\"\n />\n </svg>\n);\n\nexport const ReplaceAllIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n width={14}\n height={14}\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M11.6 2.677c.147-.31.356-.465.626-.465.248 0 .44.118.573.353.134.236.201.557.201.966 0 .443-.078.798-.235 1.067-.156.268-.365.402-.627.402-.237 0-.416-.125-.537-.374h-.008v.31H11V1h.593v1.677h.008zm-.016 1.1a.78.78 0 0 0 .107.426c.071.113.163.169.274.169.136 0 .24-.072.314-.216.075-.145.113-.35.113-.615 0-.22-.035-.39-.104-.514-.067-.124-.164-.187-.29-.187-.12 0-.219.062-.297.185a.886.886 0 0 0-.117.48v.272zM4.12 7.695L2 5.568l.662-.662 1.006 1v-1.51A1.39 1.39 0 0 1 5.055 3H7.4v.905H5.055a.49.49 0 0 0-.468.493l.007 1.5.949-.944.656.656-2.08 2.085zM9.356 4.93H10V3.22C10 2.408 9.685 2 9.056 2c-.135 0-.285.024-.45.073a1.444 1.444 0 0 0-.388.167v.665c.237-.203.487-.304.75-.304.261 0 .392.156.392.469l-.6.103c-.506.086-.76.406-.76.961 0 .263.061.473.183.631A.61.61 0 0 0 8.69 5c.29 0 .509-.16.657-.48h.009v.41zm.004-1.355v.193a.75.75 0 0 1-.12.436.368.368 0 0 1-.313.17.276.276 0 0 1-.22-.095.38.38 0 0 1-.08-.248c0-.222.11-.351.332-.389l.4-.067zM7 12.93h-.644v-.41h-.009c-.148.32-.367.48-.657.48a.61.61 0 0 1-.507-.235c-.122-.158-.183-.368-.183-.63 0-.556.254-.876.76-.962l.6-.103c0-.313-.13-.47-.392-.47-.263 0-.513.102-.75.305v-.665c.095-.063.224-.119.388-.167.165-.049.315-.073.45-.073.63 0 .944.407.944 1.22v1.71zm-.64-1.162v-.193l-.4.068c-.222.037-.333.166-.333.388 0 .1.027.183.08.248a.276.276 0 0 0 .22.095.368.368 0 0 0 .312-.17c.08-.116.12-.26.12-.436zM9.262 13c.321 0 .568-.058.738-.173v-.71a.9.9 0 0 1-.552.207.619.619 0 0 1-.5-.215c-.12-.145-.181-.345-.181-.598 0-.26.063-.464.189-.612a.644.644 0 0 1 .516-.223c.194 0 .37.069.528.207v-.749c-.129-.09-.338-.134-.626-.134-.417 0-.751.14-1.001.422-.249.28-.373.662-.373 1.148 0 .42.116.764.349 1.03.232.267.537.4.913.4zM2 9l1-1h9l1 1v5l-1 1H3l-1-1V9zm1 0v5h9V9H3zm3-2l1-1h7l1 1v5l-1 1V7H6z\"\n />\n </svg>\n);\n"]}
|
|
@@ -9,6 +9,8 @@ interface SearchCardProps {
|
|
|
9
9
|
onClose?: (query: string) => void;
|
|
10
10
|
onSearchPrev?: (query: string) => void;
|
|
11
11
|
onSearchNext?: (query: string) => void;
|
|
12
|
+
onReplaceNext?: (query: string, replacement: string) => void;
|
|
13
|
+
onReplaceAll?: (query: string, replacement: string) => void;
|
|
12
14
|
onConfigChange?: (config: SearchConfig) => void;
|
|
13
15
|
}
|
|
14
16
|
export declare const SearchCard: React.FC<SearchCardProps>;
|
|
@@ -9,14 +9,16 @@ const uikit_1 = require("@gravity-ui/uikit");
|
|
|
9
9
|
const classname_1 = require("../../../../classname.js");
|
|
10
10
|
const search_1 = require("../../../../i18n/search/index.js");
|
|
11
11
|
const handlers_1 = require("../../../../utils/handlers.js");
|
|
12
|
+
const ReplaceIcons_1 = require("./ReplaceIcons.js");
|
|
12
13
|
require("./SearchPopup.css");
|
|
13
14
|
const b = (0, classname_1.cn)('search-card');
|
|
14
15
|
const noop = () => { };
|
|
15
16
|
const inverse = (val) => !val;
|
|
16
|
-
const SearchCard = ({ initial, onChange = noop, onClose = noop, onSearchPrev = noop, onSearchNext = noop, onConfigChange = noop, }) => {
|
|
17
|
+
const SearchCard = ({ initial, onChange = noop, onClose = noop, onSearchPrev = noop, onSearchNext = noop, onReplaceNext = noop, onReplaceAll = noop, onConfigChange = noop, }) => {
|
|
17
18
|
const [query, setQuery] = (0, react_1.useState)(initial.search);
|
|
18
19
|
const [isCaseSensitive, setIsCaseSensitive] = (0, react_1.useState)(initial.caseSensitive);
|
|
19
20
|
const [isWholeWord, setIsWholeWord] = (0, react_1.useState)(initial.wholeWord);
|
|
21
|
+
const [replacement, setReplacement] = (0, react_1.useState)('');
|
|
20
22
|
const textInputRef = (0, react_1.useRef)(null);
|
|
21
23
|
const setInputFocus = () => {
|
|
22
24
|
textInputRef.current?.focus();
|
|
@@ -38,6 +40,14 @@ const SearchCard = ({ initial, onChange = noop, onClose = noop, onSearchPrev = n
|
|
|
38
40
|
onSearchNext(query);
|
|
39
41
|
setInputFocus();
|
|
40
42
|
};
|
|
43
|
+
const handleReplace = () => {
|
|
44
|
+
onReplaceNext(query, replacement);
|
|
45
|
+
setInputFocus();
|
|
46
|
+
};
|
|
47
|
+
const handleReplaceAll = () => {
|
|
48
|
+
onReplaceAll(query, replacement);
|
|
49
|
+
setInputFocus();
|
|
50
|
+
};
|
|
41
51
|
const handleIsCaseSensitive = () => {
|
|
42
52
|
onConfigChange({
|
|
43
53
|
caseSensitive: !isCaseSensitive,
|
|
@@ -55,7 +65,7 @@ const SearchCard = ({ initial, onChange = noop, onClose = noop, onSearchPrev = n
|
|
|
55
65
|
setInputFocus();
|
|
56
66
|
};
|
|
57
67
|
const handleSearchKeyPress = (0, handlers_1.enterKeyHandler)(handleNext);
|
|
58
|
-
return ((0, jsx_runtime_1.jsxs)(uikit_1.Card, { className: b(), children: [(0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsxs)("span", { className: b('title'), children: [" ", (0, search_1.i18n)('title')] }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handleClose, size: "s", view: "flat", children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Xmark, size: 14 }) })] }), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, { controlRef: textInputRef, className: (0, uikit_1.sp)({ mb: 2 }), size: "s", autoFocus: true, onKeyPress: handleSearchKeyPress, onUpdate: handleInputChange, value: query, endContent: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handlePrev, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronUp, size: 12 }) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handleNext, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronDown, size: 12 }) })] }) }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", onUpdate: handleIsCaseSensitive, checked: isCaseSensitive, className: (0, uikit_1.sp)({ mr: 4 }), children: (0, search_1.i18n)('label_case-sensitive') }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", onUpdate: handleIsWholeWord, checked: isWholeWord, children: (0, search_1.i18n)('label_whole-word') })] }));
|
|
68
|
+
return ((0, jsx_runtime_1.jsxs)(uikit_1.Card, { className: b(), children: [(0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsxs)("span", { className: b('title'), children: [" ", (0, search_1.i18n)('title')] }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handleClose, size: "s", view: "flat", children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Xmark, size: 14 }) })] }), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, { controlRef: textInputRef, className: (0, uikit_1.sp)({ mb: 2 }), size: "s", autoFocus: true, onKeyPress: handleSearchKeyPress, onUpdate: handleInputChange, value: query, endContent: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handlePrev, pin: "round-brick", children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronUp, size: 12 }) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { onClick: handleNext, pin: "brick-round", children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronDown, size: 12 }) })] }) }), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, { placeholder: (0, search_1.i18n)('replace_placeholder'), className: (0, uikit_1.sp)({ mb: 2 }), size: "s", onUpdate: setReplacement, value: replacement, endContent: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { size: "s", onClick: handleReplace, pin: "round-brick", disabled: !query, title: (0, search_1.i18n)('action_replace'), children: (0, jsx_runtime_1.jsx)(ReplaceIcons_1.ReplaceIcon, { width: 12, height: 12 }) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { size: "s", onClick: handleReplaceAll, pin: "brick-round", disabled: !query, title: (0, search_1.i18n)('action_replace_all'), children: (0, jsx_runtime_1.jsx)(ReplaceIcons_1.ReplaceAllIcon, { width: 12, height: 12 }) })] }) }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", onUpdate: handleIsCaseSensitive, checked: isCaseSensitive, className: (0, uikit_1.sp)({ mr: 4 }), children: (0, search_1.i18n)('label_case-sensitive') }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", onUpdate: handleIsWholeWord, checked: isWholeWord, children: (0, search_1.i18n)('label_whole-word') })] }));
|
|
59
69
|
};
|
|
60
70
|
exports.SearchCard = SearchCard;
|
|
61
71
|
const SearchPopup = ({ open, anchor, ...props }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchPopup.js","sourceRoot":"../../../../../../src","sources":["markup/codemirror/search-plugin/view/SearchPopup.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useRef, useState} from 'react';\n\nimport type {SearchQuery} from '@codemirror/search';\nimport {ChevronDown, ChevronUp, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n Card,\n Checkbox,\n Icon,\n Popup,\n TextInput,\n type TextInputProps,\n sp,\n} from '@gravity-ui/uikit';\n\nimport {cn} from '../../../../classname';\nimport {i18n} from '../../../../i18n/search';\nimport {enterKeyHandler} from '../../../../utils/handlers';\n\nimport './SearchPopup.scss';\n\ntype SearchInitial = Pick<SearchQuery, 'search' | 'caseSensitive' | 'wholeWord'>;\ntype SearchConfig = Pick<SearchInitial, 'caseSensitive' | 'wholeWord'>;\n\ninterface SearchCardProps {\n initial: SearchInitial;\n onSearchKeyDown?: (query: string) => void;\n onChange?: (query: string) => void;\n onClose?: (query: string) => void;\n onSearchPrev?: (query: string) => void;\n onSearchNext?: (query: string) => void;\n onConfigChange?: (config: SearchConfig) => void;\n}\n\nconst b = cn('search-card');\n\nconst noop = () => {};\nconst inverse = (val: boolean) => !val;\n\nexport const SearchCard: React.FC<SearchCardProps> = ({\n initial,\n onChange = noop,\n onClose = noop,\n onSearchPrev = noop,\n onSearchNext = noop,\n onConfigChange = noop,\n}) => {\n const [query, setQuery] = useState<string>(initial.search);\n const [isCaseSensitive, setIsCaseSensitive] = useState<boolean>(initial.caseSensitive);\n const [isWholeWord, setIsWholeWord] = useState<boolean>(initial.wholeWord);\n const textInputRef = useRef<HTMLInputElement>(null);\n\n const setInputFocus = () => {\n textInputRef.current?.focus();\n };\n\n const handleInputChange = (value: string) => {\n setQuery(value);\n onChange(value);\n };\n\n const handleClose = () => {\n setQuery('');\n onClose(query);\n setInputFocus();\n };\n\n const handlePrev = () => {\n onSearchPrev(query);\n setInputFocus();\n };\n\n const handleNext = () => {\n onSearchNext(query);\n setInputFocus();\n };\n\n const handleIsCaseSensitive = () => {\n onConfigChange({\n caseSensitive: !isCaseSensitive,\n wholeWord: isWholeWord,\n });\n setIsCaseSensitive(inverse);\n setInputFocus();\n };\n\n const handleIsWholeWord = () => {\n onConfigChange({\n caseSensitive: isCaseSensitive,\n wholeWord: !isWholeWord,\n });\n setIsWholeWord(inverse);\n setInputFocus();\n };\n\n const handleSearchKeyPress: TextInputProps['onKeyPress'] = enterKeyHandler(handleNext);\n\n return (\n <Card className={b()}>\n <div className={b('header')}>\n <span className={b('title')}> {i18n('title')}</span>\n <Button onClick={handleClose} size=\"s\" view=\"flat\">\n <Icon data={Xmark} size={14} />\n </Button>\n </div>\n <TextInput\n controlRef={textInputRef}\n className={sp({mb: 2})}\n size=\"s\"\n autoFocus\n onKeyPress={handleSearchKeyPress}\n onUpdate={handleInputChange}\n value={query}\n endContent={\n <>\n <Button onClick={handlePrev}>\n <Icon data={ChevronUp} size={12} />\n </Button>\n <Button onClick={handleNext}>\n <Icon data={ChevronDown} size={12} />\n </Button>\n </>\n }\n />\n <Checkbox\n size=\"m\"\n onUpdate={handleIsCaseSensitive}\n checked={isCaseSensitive}\n className={sp({mr: 4})}\n >\n {i18n('label_case-sensitive')}\n </Checkbox>\n <Checkbox size=\"m\" onUpdate={handleIsWholeWord} checked={isWholeWord}>\n {i18n('label_whole-word')}\n </Checkbox>\n </Card>\n );\n};\n\nexport interface SearchPopupProps extends SearchCardProps {\n open: boolean;\n anchor: HTMLElement;\n onClose: () => void;\n}\n\nexport const SearchPopup: React.FC<SearchPopupProps> = ({open, anchor, ...props}) => {\n return (\n <Popup\n open={open}\n anchorElement={anchor}\n placement=\"bottom-end\"\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n props.onClose();\n }\n }}\n >\n <SearchCard {...props} />\n </Popup>\n );\n};\n\nSearchPopup.displayName = 'SearchPopup';\n\ninterface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {\n anchor: HTMLElement | null;\n}\n\nexport function renderSearchPopup({anchor, ...props}: SearchPopupWithRefProps) {\n return <>{anchor && <SearchPopup anchor={anchor} {...props} />}</>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SearchPopup.js","sourceRoot":"../../../../../../src","sources":["markup/codemirror/search-plugin/view/SearchPopup.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useRef, useState} from 'react';\n\nimport type {SearchQuery} from '@codemirror/search';\nimport {ChevronDown, ChevronUp, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n Card,\n Checkbox,\n Icon,\n Popup,\n TextInput,\n type TextInputProps,\n sp,\n} from '@gravity-ui/uikit';\n\nimport {cn} from '../../../../classname';\nimport {i18n} from '../../../../i18n/search';\nimport {enterKeyHandler} from '../../../../utils/handlers';\n\nimport {ReplaceAllIcon, ReplaceIcon} from './ReplaceIcons';\n\nimport './SearchPopup.scss';\n\ntype SearchInitial = Pick<SearchQuery, 'search' | 'caseSensitive' | 'wholeWord'>;\ntype SearchConfig = Pick<SearchInitial, 'caseSensitive' | 'wholeWord'>;\n\ninterface SearchCardProps {\n initial: SearchInitial;\n onSearchKeyDown?: (query: string) => void;\n onChange?: (query: string) => void;\n onClose?: (query: string) => void;\n onSearchPrev?: (query: string) => void;\n onSearchNext?: (query: string) => void;\n onReplaceNext?: (query: string, replacement: string) => void;\n onReplaceAll?: (query: string, replacement: string) => void;\n onConfigChange?: (config: SearchConfig) => void;\n}\n\nconst b = cn('search-card');\n\nconst noop = () => {};\nconst inverse = (val: boolean) => !val;\n\nexport const SearchCard: React.FC<SearchCardProps> = ({\n initial,\n onChange = noop,\n onClose = noop,\n onSearchPrev = noop,\n onSearchNext = noop,\n onReplaceNext = noop,\n onReplaceAll = noop,\n onConfigChange = noop,\n}) => {\n const [query, setQuery] = useState<string>(initial.search);\n const [isCaseSensitive, setIsCaseSensitive] = useState<boolean>(initial.caseSensitive);\n const [isWholeWord, setIsWholeWord] = useState<boolean>(initial.wholeWord);\n const [replacement, setReplacement] = useState<string>('');\n const textInputRef = useRef<HTMLInputElement>(null);\n\n const setInputFocus = () => {\n textInputRef.current?.focus();\n };\n\n const handleInputChange = (value: string) => {\n setQuery(value);\n onChange(value);\n };\n\n const handleClose = () => {\n setQuery('');\n onClose(query);\n setInputFocus();\n };\n\n const handlePrev = () => {\n onSearchPrev(query);\n setInputFocus();\n };\n\n const handleNext = () => {\n onSearchNext(query);\n setInputFocus();\n };\n\n const handleReplace = () => {\n onReplaceNext(query, replacement);\n setInputFocus();\n };\n\n const handleReplaceAll = () => {\n onReplaceAll(query, replacement);\n setInputFocus();\n };\n\n const handleIsCaseSensitive = () => {\n onConfigChange({\n caseSensitive: !isCaseSensitive,\n wholeWord: isWholeWord,\n });\n setIsCaseSensitive(inverse);\n setInputFocus();\n };\n\n const handleIsWholeWord = () => {\n onConfigChange({\n caseSensitive: isCaseSensitive,\n wholeWord: !isWholeWord,\n });\n setIsWholeWord(inverse);\n setInputFocus();\n };\n\n const handleSearchKeyPress: TextInputProps['onKeyPress'] = enterKeyHandler(handleNext);\n\n return (\n <Card className={b()}>\n <div className={b('header')}>\n <span className={b('title')}> {i18n('title')}</span>\n <Button onClick={handleClose} size=\"s\" view=\"flat\">\n <Icon data={Xmark} size={14} />\n </Button>\n </div>\n <TextInput\n controlRef={textInputRef}\n className={sp({mb: 2})}\n size=\"s\"\n autoFocus\n onKeyPress={handleSearchKeyPress}\n onUpdate={handleInputChange}\n value={query}\n endContent={\n <>\n <Button onClick={handlePrev} pin=\"round-brick\">\n <Icon data={ChevronUp} size={12} />\n </Button>\n <Button onClick={handleNext} pin=\"brick-round\">\n <Icon data={ChevronDown} size={12} />\n </Button>\n </>\n }\n />\n <TextInput\n placeholder={i18n('replace_placeholder')}\n className={sp({mb: 2})}\n size=\"s\"\n onUpdate={setReplacement}\n value={replacement}\n endContent={\n <>\n <Button\n size=\"s\"\n onClick={handleReplace}\n pin=\"round-brick\"\n disabled={!query}\n title={i18n('action_replace')}\n >\n <ReplaceIcon width={12} height={12} />\n </Button>\n <Button\n size=\"s\"\n onClick={handleReplaceAll}\n pin=\"brick-round\"\n disabled={!query}\n title={i18n('action_replace_all')}\n >\n <ReplaceAllIcon width={12} height={12} />\n </Button>\n </>\n }\n />\n <Checkbox\n size=\"m\"\n onUpdate={handleIsCaseSensitive}\n checked={isCaseSensitive}\n className={sp({mr: 4})}\n >\n {i18n('label_case-sensitive')}\n </Checkbox>\n <Checkbox size=\"m\" onUpdate={handleIsWholeWord} checked={isWholeWord}>\n {i18n('label_whole-word')}\n </Checkbox>\n </Card>\n );\n};\n\nexport interface SearchPopupProps extends SearchCardProps {\n open: boolean;\n anchor: HTMLElement;\n onClose: () => void;\n}\n\nexport const SearchPopup: React.FC<SearchPopupProps> = ({open, anchor, ...props}) => {\n return (\n <Popup\n open={open}\n anchorElement={anchor}\n placement=\"bottom-end\"\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n props.onClose();\n }\n }}\n >\n <SearchCard {...props} />\n </Popup>\n );\n};\n\nSearchPopup.displayName = 'SearchPopup';\n\ninterface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {\n anchor: HTMLElement | null;\n}\n\nexport function renderSearchPopup({anchor, ...props}: SearchPopupWithRefProps) {\n return <>{anchor && <SearchPopup anchor={anchor} {...props} />}</>;\n}\n"]}
|
|
@@ -8,4 +8,5 @@ tslib_1.__exportStar(require("./useNodeEditing.js"), exports);
|
|
|
8
8
|
tslib_1.__exportStar(require("./useNodeHovered.js"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./useSharedEditingState.js"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./useSticky.js"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./useTargetZIndex.js"), exports);
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["react-utils/index.ts"],"names":[],"mappings":";;;AAAA,6DAAgC;AAChC,qDAAwB;AACxB,+DAAkC;AAClC,8DAAiC;AACjC,8DAAiC;AACjC,qEAAwC;AACxC,yDAA4B","sourcesContent":["export * from './ErrorBoundary';\nexport * from './hooks';\nexport * from './react-node-view';\nexport * from './useNodeEditing';\nexport * from './useNodeHovered';\nexport * from './useSharedEditingState';\nexport * from './useSticky';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["react-utils/index.ts"],"names":[],"mappings":";;;AAAA,6DAAgC;AAChC,qDAAwB;AACxB,+DAAkC;AAClC,8DAAiC;AACjC,8DAAiC;AACjC,qEAAwC;AACxC,yDAA4B;AAC5B,+DAAkC","sourcesContent":["export * from './ErrorBoundary';\nexport * from './hooks';\nexport * from './react-node-view';\nexport * from './useNodeEditing';\nexport * from './useNodeHovered';\nexport * from './useSharedEditingState';\nexport * from './useSticky';\nexport * from './useTargetZIndex';\n"]}
|
|
@@ -17,16 +17,27 @@ function useSticky(elemRef) {
|
|
|
17
17
|
const [sticky, setSticky] = (0, react_1.useState)(false);
|
|
18
18
|
const stickyRef = (0, react_use_1.useLatest)(sticky);
|
|
19
19
|
(0, react_use_1.useEffectOnce)(() => {
|
|
20
|
+
let rafId = null;
|
|
20
21
|
observe();
|
|
21
22
|
for (const eventName of events) {
|
|
22
|
-
window.addEventListener(eventName,
|
|
23
|
+
window.addEventListener(eventName, scheduleObserve, true);
|
|
23
24
|
}
|
|
24
25
|
return () => {
|
|
26
|
+
if (rafId !== null) {
|
|
27
|
+
cancelAnimationFrame(rafId);
|
|
28
|
+
}
|
|
25
29
|
for (const eventName of events) {
|
|
26
|
-
window.removeEventListener(eventName,
|
|
30
|
+
window.removeEventListener(eventName, scheduleObserve, true);
|
|
27
31
|
}
|
|
28
32
|
};
|
|
33
|
+
function scheduleObserve() {
|
|
34
|
+
if (rafId !== null) {
|
|
35
|
+
cancelAnimationFrame(rafId);
|
|
36
|
+
}
|
|
37
|
+
rafId = requestAnimationFrame(observe);
|
|
38
|
+
}
|
|
29
39
|
function observe() {
|
|
40
|
+
rafId = null;
|
|
30
41
|
if (!elemRef.current)
|
|
31
42
|
return;
|
|
32
43
|
const refPageOffset = elemRef.current.getBoundingClientRect().top;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSticky.js","sourceRoot":"../../../src","sources":["react-utils/useSticky.ts"],"names":[],"mappings":";;AAeA,
|
|
1
|
+
{"version":3,"file":"useSticky.js","sourceRoot":"../../../src","sources":["react-utils/useSticky.ts"],"names":[],"mappings":";;AAeA,8BA0CC;AAzDD,iCAA+B;AAE/B,yCAAmD;AAEnD,MAAM,MAAM,GAAsC,IAAI,GAAG,CAAuB;IAC5E,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,UAAU;IACV,UAAU;IACV,MAAM;IACN,mBAAmB;CACtB,CAAC,CAAC;AAEH,SAAgB,SAAS,CAAwB,OAA2B;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IAEpC,IAAA,yBAAa,EAAC,GAAG,EAAE;QACf,IAAI,KAAK,GAAkB,IAAI,CAAC;QAEhC,OAAO,EAAE,CAAC;QAEV,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,GAAG,EAAE;YACR,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;gBAC7B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;YACjE,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,eAAe;YACpB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,SAAS,OAAO;YACZ,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO;YAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;YAClE,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,aAAa,IAAI,YAAY,CAAC;YAEnD,IAAI,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,CAAC;iBACnD,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,OAAO;gBAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["import {useState} from 'react';\n\nimport {useEffectOnce, useLatest} from 'react-use';\n\nconst events: ReadonlySet<keyof WindowEventMap> = new Set<keyof WindowEventMap>([\n 'resize',\n 'scroll',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'pageshow',\n 'load',\n 'orientationchange',\n]);\n\nexport function useSticky<T extends HTMLElement>(elemRef: React.RefObject<T>) {\n const [sticky, setSticky] = useState(false);\n const stickyRef = useLatest(sticky);\n\n useEffectOnce(() => {\n let rafId: number | null = null;\n\n observe();\n\n for (const eventName of events) {\n window.addEventListener(eventName, scheduleObserve, true);\n }\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n for (const eventName of events) {\n window.removeEventListener(eventName, scheduleObserve, true);\n }\n };\n\n function scheduleObserve() {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n rafId = requestAnimationFrame(observe);\n }\n\n function observe() {\n rafId = null;\n if (!elemRef.current) return;\n const refPageOffset = elemRef.current.getBoundingClientRect().top;\n const stickyOffset = parseInt(getComputedStyle(elemRef.current).top, 10);\n const stickyActive = refPageOffset <= stickyOffset;\n\n if (stickyActive && !stickyRef.current) setSticky(true);\n else if (!stickyActive && stickyRef.current) setSticky(false);\n }\n });\n\n return sticky;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useTargetZIndex(dataLayoutSelector: string, offset?: number): number | undefined;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useTargetZIndex = useTargetZIndex;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const react_use_1 = require("react-use");
|
|
6
|
+
const get_target_z_index_1 = require("../utils/get-target-z-index.js");
|
|
7
|
+
const events = new Set([
|
|
8
|
+
'resize',
|
|
9
|
+
'scroll',
|
|
10
|
+
'touchstart',
|
|
11
|
+
'touchmove',
|
|
12
|
+
'touchend',
|
|
13
|
+
'pageshow',
|
|
14
|
+
'load',
|
|
15
|
+
'orientationchange',
|
|
16
|
+
]);
|
|
17
|
+
function useTargetZIndex(dataLayoutSelector, offset = 10) {
|
|
18
|
+
const [zIndex, setZIndex] = (0, react_1.useState)(() => (0, get_target_z_index_1.getTargetZIndex)(dataLayoutSelector, offset));
|
|
19
|
+
const zIndexRef = (0, react_use_1.useLatest)(zIndex);
|
|
20
|
+
(0, react_use_1.useEffectOnce)(() => {
|
|
21
|
+
let rafId = null;
|
|
22
|
+
recalculate();
|
|
23
|
+
for (const eventName of events) {
|
|
24
|
+
window.addEventListener(eventName, scheduleRecalculate, true);
|
|
25
|
+
}
|
|
26
|
+
return () => {
|
|
27
|
+
if (rafId !== null) {
|
|
28
|
+
cancelAnimationFrame(rafId);
|
|
29
|
+
}
|
|
30
|
+
for (const eventName of events) {
|
|
31
|
+
window.removeEventListener(eventName, scheduleRecalculate, true);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
function scheduleRecalculate() {
|
|
35
|
+
if (rafId !== null) {
|
|
36
|
+
cancelAnimationFrame(rafId);
|
|
37
|
+
}
|
|
38
|
+
rafId = requestAnimationFrame(recalculate);
|
|
39
|
+
}
|
|
40
|
+
function recalculate() {
|
|
41
|
+
rafId = null;
|
|
42
|
+
const newZIndex = (0, get_target_z_index_1.getTargetZIndex)(dataLayoutSelector, offset);
|
|
43
|
+
if (newZIndex !== zIndexRef.current) {
|
|
44
|
+
setZIndex(newZIndex);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return zIndex;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useTargetZIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTargetZIndex.js","sourceRoot":"../../../src","sources":["react-utils/useTargetZIndex.ts"],"names":[],"mappings":";;AAiBA,0CAyCC;AA1DD,iCAA+B;AAE/B,yCAAmD;AAEnD,uEAA4D;AAE5D,MAAM,MAAM,GAAsC,IAAI,GAAG,CAAuB;IAC5E,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,UAAU;IACV,UAAU;IACV,MAAM;IACN,mBAAmB;CACtB,CAAC,CAAC;AAEH,SAAgB,eAAe,CAAC,kBAA0B,EAAE,MAAM,GAAG,EAAE;IACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAqB,GAAG,EAAE,CAC1D,IAAA,oCAAe,EAAC,kBAAkB,EAAE,MAAM,CAAC,CAC9C,CAAC;IACF,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC;IAEpC,IAAA,yBAAa,EAAC,GAAG,EAAE;QACf,IAAI,KAAK,GAAkB,IAAI,CAAC;QAEhC,WAAW,EAAE,CAAC;QAEd,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,GAAG,EAAE;YACR,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;gBAC7B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;YACrE,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,mBAAmB;YACxB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,SAAS,WAAW;YAChB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,SAAS,GAAG,IAAA,oCAAe,EAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,SAAS,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;gBAClC,SAAS,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["import {useState} from 'react';\n\nimport {useEffectOnce, useLatest} from 'react-use';\n\nimport {getTargetZIndex} from '../utils/get-target-z-index';\n\nconst events: ReadonlySet<keyof WindowEventMap> = new Set<keyof WindowEventMap>([\n 'resize',\n 'scroll',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'pageshow',\n 'load',\n 'orientationchange',\n]);\n\nexport function useTargetZIndex(dataLayoutSelector: string, offset = 10): number | undefined {\n const [zIndex, setZIndex] = useState<number | undefined>(() =>\n getTargetZIndex(dataLayoutSelector, offset),\n );\n const zIndexRef = useLatest(zIndex);\n\n useEffectOnce(() => {\n let rafId: number | null = null;\n\n recalculate();\n\n for (const eventName of events) {\n window.addEventListener(eventName, scheduleRecalculate, true);\n }\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n for (const eventName of events) {\n window.removeEventListener(eventName, scheduleRecalculate, true);\n }\n };\n\n function scheduleRecalculate() {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n rafId = requestAnimationFrame(recalculate);\n }\n\n function recalculate() {\n rafId = null;\n const newZIndex = getTargetZIndex(dataLayoutSelector, offset);\n if (newZIndex !== zIndexRef.current) {\n setZIndex(newZIndex);\n }\n }\n });\n\n return zIndex;\n}\n"]}
|
|
@@ -5,9 +5,11 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const icons_1 = require("@gravity-ui/icons");
|
|
7
7
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
+
const layout_1 = require("../common/layout.js");
|
|
8
9
|
const classname_1 = require("../classname.js");
|
|
9
10
|
const common_1 = require("../i18n/common/index.js");
|
|
10
11
|
const lodash_1 = require("../lodash.js");
|
|
12
|
+
const react_utils_1 = require("../react-utils/index.js");
|
|
11
13
|
const hooks_1 = require("../react-utils/hooks.js");
|
|
12
14
|
const PreviewTooltip_1 = require("./PreviewTooltip.js");
|
|
13
15
|
const ToolbarButton_1 = require("./ToolbarButton.js");
|
|
@@ -17,6 +19,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
|
|
|
17
19
|
const [anchorElement, setAnchorElement] = (0, hooks_1.useElementState)();
|
|
18
20
|
const [open, , hide, toggleOpen] = (0, hooks_1.useBooleanState)(false);
|
|
19
21
|
const [popupItem, setPopupItem] = (0, react_1.useState)();
|
|
22
|
+
const zIndex = (0, react_utils_1.useTargetZIndex)(layout_1.LAYOUT.STICKY_TOOLBAR);
|
|
20
23
|
const everyDisabled = alwaysActive ? false : data.every((item) => !item.isEnable(editor));
|
|
21
24
|
const popupOpen = everyDisabled ? false : open;
|
|
22
25
|
const shouldForceHide = open && !popupOpen;
|
|
@@ -43,7 +46,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
|
|
|
43
46
|
setPopupItem(undefined);
|
|
44
47
|
else
|
|
45
48
|
toggleOpen();
|
|
46
|
-
}, disableTooltip: disableTooltip || popupOpen, 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, "data-toolbar-menu-for": titleText, children: data
|
|
49
|
+
}, disableTooltip: disableTooltip || popupOpen, children: buttonContent }), (0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorElement: anchorElement, open: popupOpen, onOpenChange: hide, zIndex: typeof zIndex === 'number' ? zIndex : undefined, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu, { size: "l", className: b('menu'), qa: qaMenu, "data-toolbar-menu-for": titleText, children: data
|
|
47
50
|
.map((data) => {
|
|
48
51
|
const { id, title, icon, hotkey, isActive, isEnable, exec, hint, hintWhenDisabled, preview, } = data;
|
|
49
52
|
const titleText = (0, lodash_1.isFunction)(title) ? title() : title;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarListButton.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarListButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Fragment, useEffect, useState} from 'react';\n\nimport {ChevronDown} from '@gravity-ui/icons';\nimport {HelpMark, Hotkey, Icon, Menu, Popover, Popup} from '@gravity-ui/uikit';\n\nimport {cn} from '../classname';\nimport {i18n} from '../i18n/common';\nimport {isFunction} from '../lodash';\nimport {useBooleanState, useElementState} from '../react-utils/hooks';\n\nimport {PreviewTooltip} from './PreviewTooltip';\nimport {ToolbarButtonView} from './ToolbarButton';\nimport type {\n ToolbarBaseProps,\n ToolbarButtonPopupData,\n ToolbarItemData,\n ToolbarListButtonData,\n} from './types';\n\nimport './ToolbarListButton.scss';\n\nconst b = cn('toolbar-list-button');\n\nexport type {ToolbarListButtonData};\n\nexport type ToolbarListButtonProps<E> = ToolbarBaseProps<E> &\n ToolbarListButtonData<E> & {\n qaMenu?: string;\n qaActionDisabledPopover?: string;\n };\n\nexport function ToolbarListButton<E>({\n className,\n editor,\n focus,\n onClick,\n icon,\n title,\n withArrow,\n data,\n alwaysActive,\n replaceActiveIcon,\n qa,\n qaMenu,\n qaActionDisabledPopover = 'g-md-toolbar-action-disabled-hint',\n disableHotkey,\n disablePreview,\n disableTooltip,\n}: ToolbarListButtonProps<E>) {\n const [anchorElement, setAnchorElement] = useElementState();\n const [open, , hide, toggleOpen] = useBooleanState(false);\n const [popupItem, setPopupItem] = useState<ToolbarButtonPopupData<E>>();\n\n const everyDisabled = alwaysActive ? false : data.every((item) => !item.isEnable(editor));\n const popupOpen = everyDisabled ? false : open;\n const shouldForceHide = open && !popupOpen;\n\n useEffect(() => {\n if (shouldForceHide) {\n hide();\n }\n }, [hide, shouldForceHide]);\n\n if (data.length === 0) return null;\n\n const activeItem = data.find((item) => item.isActive(editor) && !item.doNotActivateList);\n const someActive = alwaysActive ? false : Boolean(activeItem);\n\n if (replaceActiveIcon && someActive && activeItem) {\n icon = activeItem.icon;\n }\n\n const buttonContent = [<Icon key={1} data={icon.data} size={icon.size ?? 16} />];\n if (withArrow) {\n buttonContent.push(<Fragment key={2}>{''}</Fragment>);\n buttonContent.push(<Icon key={3} data={ChevronDown} size={16} />);\n }\n const titleText: string = isFunction(title) ? title() : title;\n\n return (\n <>\n <ToolbarButtonView\n qa={qa}\n ref={setAnchorElement}\n active={someActive}\n enabled={!everyDisabled}\n title={title}\n className={b({arrow: withArrow}, [className])}\n onClick={() => {\n if (popupItem) setPopupItem(undefined);\n else toggleOpen();\n }}\n disableTooltip={disableTooltip || popupOpen}\n >\n {buttonContent}\n </ToolbarButtonView>\n <Popup anchorElement={anchorElement} open={popupOpen} onOpenChange={hide}>\n <Menu size=\"l\" className={b('menu')} qa={qaMenu} data-toolbar-menu-for={titleText}>\n {data\n .map((data) => {\n const {\n id,\n title,\n icon,\n hotkey,\n isActive,\n isEnable,\n exec,\n hint,\n hintWhenDisabled,\n preview,\n } = data;\n\n const titleText = isFunction(title) ? title() : title;\n const hintText = isFunction(hint) ? hint() : hint;\n\n const disabled = !isEnable(editor);\n\n const hideHintWhenDisabled = hintWhenDisabled === false || !disabled;\n const hintWhenDisabledText =\n typeof hintWhenDisabled === 'string'\n ? hintWhenDisabled\n : typeof hintWhenDisabled === 'function'\n ? hintWhenDisabled()\n : i18n('toolbar_action_disabled');\n\n const handleClick = () => {\n hide();\n\n if (isPopupItem(data)) {\n setPopupItem(data);\n } else {\n setPopupItem(undefined);\n focus();\n exec(editor);\n onClick?.(id);\n }\n };\n\n return (\n <Popover\n className={b('action-disabled-popover')}\n content={\n <div className={b('action-disabled-tooltip')}>\n {hintWhenDisabledText}\n </div>\n }\n placement=\"left\"\n modal={false}\n disabled={hideHintWhenDisabled}\n qa={qaActionDisabledPopover}\n key={id}\n >\n {(props, ref) => (\n <PreviewTooltip preview={preview} disabled={disablePreview}>\n <Menu.Item\n key={id}\n ref={ref}\n active={isActive(editor)}\n disabled={!isEnable(editor)}\n onClick={handleClick}\n iconStart={\n <Icon data={icon.data} size={icon.size ?? 16} />\n }\n extraProps={{\n ...props,\n 'aria-label': titleText,\n }}\n >\n <div className={b('item')}>\n {titleText}\n {!disableHotkey && (\n <div className={b('extra')}>\n {hotkey && <Hotkey value={hotkey} />}\n {hintText && (\n <HelpMark\n className={b('hint')}\n popoverProps={{modal: false}}\n >\n {hintText}\n </HelpMark>\n )}\n </div>\n )}\n </div>\n </Menu.Item>\n </PreviewTooltip>\n )}\n </Popover>\n );\n })\n .filter(Boolean)}\n </Menu>\n </Popup>\n {popupItem\n ? popupItem.renderPopup({\n ...popupItem,\n editor,\n focus,\n onClick,\n anchorElement,\n hide: () => setPopupItem(undefined),\n })\n : null}\n </>\n );\n}\n\nfunction isPopupItem<E>(item: ToolbarItemData<E>): item is ToolbarButtonPopupData<E> {\n return Boolean((item as ToolbarButtonPopupData<E>).renderPopup);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ToolbarListButton.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarListButton.tsx"],"names":[],"mappings":";;AAkCA,8CAqLC;;AAvND,iCAAoD;AAEpD,6CAA8C;AAC9C,6CAA+E;AAE/E,gDAAyC;AAEzC,+CAAgC;AAChC,oDAAoC;AACpC,yCAAqC;AACrC,yDAA+C;AAC/C,mDAAsE;AAEtE,wDAAgD;AAChD,sDAAkD;AAQlD,mCAAkC;AAElC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,qBAAqB,CAAC,CAAC;AAUpC,SAAgB,iBAAiB,CAAI,EACjC,SAAS,EACT,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,EAAE,EACF,MAAM,EACN,uBAAuB,GAAG,mCAAmC,EAC7D,aAAa,EACb,cAAc,EACd,cAAc,GACU;IACxB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,uBAAe,GAAE,CAAC;IAC5D,MAAM,CAAC,IAAI,EAAE,AAAD,EAAG,IAAI,EAAE,UAAU,CAAC,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,GAA6B,CAAC;IACxE,MAAM,MAAM,GAAG,IAAA,6BAAe,EAAC,eAAM,CAAC,cAAc,CAAC,CAAC;IAEtD,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;IAE3C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,eAAe,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC;QACX,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,iBAAiB,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;QAChD,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,uBAAC,YAAI,IAAS,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,IAAzC,CAAC,CAA4C,CAAC,CAAC;IACjF,IAAI,SAAS,EAAE,CAAC;QACZ,aAAa,CAAC,IAAI,CAAC,uBAAC,gBAAQ,cAAU,EAAE,IAAN,CAAC,CAAiB,CAAC,CAAC;QACtD,aAAa,CAAC,IAAI,CAAC,uBAAC,YAAI,IAAS,IAAI,EAAE,mBAAW,EAAE,IAAI,EAAE,EAAE,IAA9B,CAAC,CAAiC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,SAAS,GAAW,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9D,OAAO,CACH,6DACI,uBAAC,iCAAiB,IACd,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,CAAC,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAC7C,OAAO,EAAE,GAAG,EAAE;oBACV,IAAI,SAAS;wBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;;wBAClC,UAAU,EAAE,CAAC;gBACtB,CAAC,EACD,cAAc,EAAE,cAAc,IAAI,SAAS,YAE1C,aAAa,GACE,EACpB,uBAAC,aAAK,IACF,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,IAAI,EAClB,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAEvD,uBAAC,YAAI,IAAC,IAAI,EAAC,GAAG,EAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,2BAAyB,SAAS,YAC5E,IAAI;yBACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBACV,MAAM,EACF,EAAE,EACF,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,gBAAgB,EAChB,OAAO,GACV,GAAG,IAAI,CAAC;wBAET,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;wBACtD,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;wBAElD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAEnC,MAAM,oBAAoB,GAAG,gBAAgB,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC;wBACrE,MAAM,oBAAoB,GACtB,OAAO,gBAAgB,KAAK,QAAQ;4BAChC,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,OAAO,gBAAgB,KAAK,UAAU;gCACtC,CAAC,CAAC,gBAAgB,EAAE;gCACpB,CAAC,CAAC,IAAA,aAAI,EAAC,yBAAyB,CAAC,CAAC;wBAE5C,MAAM,WAAW,GAAG,GAAG,EAAE;4BACrB,IAAI,EAAE,CAAC;4BAEP,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gCACpB,YAAY,CAAC,IAAI,CAAC,CAAC;4BACvB,CAAC;iCAAM,CAAC;gCACJ,YAAY,CAAC,SAAS,CAAC,CAAC;gCACxB,KAAK,EAAE,CAAC;gCACR,IAAI,CAAC,MAAM,CAAC,CAAC;gCACb,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;4BAClB,CAAC;wBACL,CAAC,CAAC;wBAEF,OAAO,CACH,uBAAC,eAAO,IACJ,SAAS,EAAE,CAAC,CAAC,yBAAyB,CAAC,EACvC,OAAO,EACH,gCAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,CAAC,YACvC,oBAAoB,GACnB,EAEV,SAAS,EAAC,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,oBAAoB,EAC9B,EAAE,EAAE,uBAAuB,YAG1B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACb,uBAAC,+BAAc,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,YACtD,uBAAC,YAAI,CAAC,IAAI,IAEN,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,WAAW,EACpB,SAAS,EACL,uBAAC,YAAI,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,GAAI,EAEpD,UAAU,EAAE;wCACR,GAAG,KAAK;wCACR,YAAY,EAAE,SAAS;qCAC1B,YAED,iCAAK,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,aACpB,SAAS,EACT,CAAC,aAAa,IAAI,CACf,iCAAK,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,aACrB,MAAM,IAAI,uBAAC,cAAM,IAAC,KAAK,EAAE,MAAM,GAAI,EACnC,QAAQ,IAAI,CACT,uBAAC,gBAAQ,IACL,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC,YAE3B,QAAQ,GACF,CACd,IACC,CACT,IACC,IA5BD,EAAE,CA6BC,GACC,CACpB,IApCI,EAAE,CAqCD,CACb,CAAC;oBACN,CAAC,CAAC;yBACD,MAAM,CAAC,OAAO,CAAC,GACjB,GACH,EACP,SAAS;gBACN,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;oBAClB,GAAG,SAAS;oBACZ,MAAM;oBACN,KAAK;oBACL,OAAO;oBACP,aAAa;oBACb,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC;iBACtC,CAAC;gBACJ,CAAC,CAAC,IAAI,IACX,CACN,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAI,IAAwB;IAC5C,OAAO,OAAO,CAAE,IAAkC,CAAC,WAAW,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import {Fragment, useEffect, useState} from 'react';\n\nimport {ChevronDown} from '@gravity-ui/icons';\nimport {HelpMark, Hotkey, Icon, Menu, Popover, Popup} from '@gravity-ui/uikit';\n\nimport {LAYOUT} from 'src/common/layout';\n\nimport {cn} from '../classname';\nimport {i18n} from '../i18n/common';\nimport {isFunction} from '../lodash';\nimport {useTargetZIndex} from '../react-utils';\nimport {useBooleanState, useElementState} from '../react-utils/hooks';\n\nimport {PreviewTooltip} from './PreviewTooltip';\nimport {ToolbarButtonView} from './ToolbarButton';\nimport type {\n ToolbarBaseProps,\n ToolbarButtonPopupData,\n ToolbarItemData,\n ToolbarListButtonData,\n} from './types';\n\nimport './ToolbarListButton.scss';\n\nconst b = cn('toolbar-list-button');\n\nexport type {ToolbarListButtonData};\n\nexport type ToolbarListButtonProps<E> = ToolbarBaseProps<E> &\n ToolbarListButtonData<E> & {\n qaMenu?: string;\n qaActionDisabledPopover?: string;\n };\n\nexport function ToolbarListButton<E>({\n className,\n editor,\n focus,\n onClick,\n icon,\n title,\n withArrow,\n data,\n alwaysActive,\n replaceActiveIcon,\n qa,\n qaMenu,\n qaActionDisabledPopover = 'g-md-toolbar-action-disabled-hint',\n disableHotkey,\n disablePreview,\n disableTooltip,\n}: ToolbarListButtonProps<E>) {\n const [anchorElement, setAnchorElement] = useElementState();\n const [open, , hide, toggleOpen] = useBooleanState(false);\n const [popupItem, setPopupItem] = useState<ToolbarButtonPopupData<E>>();\n const zIndex = useTargetZIndex(LAYOUT.STICKY_TOOLBAR);\n\n const everyDisabled = alwaysActive ? false : data.every((item) => !item.isEnable(editor));\n const popupOpen = everyDisabled ? false : open;\n const shouldForceHide = open && !popupOpen;\n\n useEffect(() => {\n if (shouldForceHide) {\n hide();\n }\n }, [hide, shouldForceHide]);\n\n if (data.length === 0) return null;\n\n const activeItem = data.find((item) => item.isActive(editor) && !item.doNotActivateList);\n const someActive = alwaysActive ? false : Boolean(activeItem);\n\n if (replaceActiveIcon && someActive && activeItem) {\n icon = activeItem.icon;\n }\n\n const buttonContent = [<Icon key={1} data={icon.data} size={icon.size ?? 16} />];\n if (withArrow) {\n buttonContent.push(<Fragment key={2}>{''}</Fragment>);\n buttonContent.push(<Icon key={3} data={ChevronDown} size={16} />);\n }\n const titleText: string = isFunction(title) ? title() : title;\n\n return (\n <>\n <ToolbarButtonView\n qa={qa}\n ref={setAnchorElement}\n active={someActive}\n enabled={!everyDisabled}\n title={title}\n className={b({arrow: withArrow}, [className])}\n onClick={() => {\n if (popupItem) setPopupItem(undefined);\n else toggleOpen();\n }}\n disableTooltip={disableTooltip || popupOpen}\n >\n {buttonContent}\n </ToolbarButtonView>\n <Popup\n anchorElement={anchorElement}\n open={popupOpen}\n onOpenChange={hide}\n zIndex={typeof zIndex === 'number' ? zIndex : undefined}\n >\n <Menu size=\"l\" className={b('menu')} qa={qaMenu} data-toolbar-menu-for={titleText}>\n {data\n .map((data) => {\n const {\n id,\n title,\n icon,\n hotkey,\n isActive,\n isEnable,\n exec,\n hint,\n hintWhenDisabled,\n preview,\n } = data;\n\n const titleText = isFunction(title) ? title() : title;\n const hintText = isFunction(hint) ? hint() : hint;\n\n const disabled = !isEnable(editor);\n\n const hideHintWhenDisabled = hintWhenDisabled === false || !disabled;\n const hintWhenDisabledText =\n typeof hintWhenDisabled === 'string'\n ? hintWhenDisabled\n : typeof hintWhenDisabled === 'function'\n ? hintWhenDisabled()\n : i18n('toolbar_action_disabled');\n\n const handleClick = () => {\n hide();\n\n if (isPopupItem(data)) {\n setPopupItem(data);\n } else {\n setPopupItem(undefined);\n focus();\n exec(editor);\n onClick?.(id);\n }\n };\n\n return (\n <Popover\n className={b('action-disabled-popover')}\n content={\n <div className={b('action-disabled-tooltip')}>\n {hintWhenDisabledText}\n </div>\n }\n placement=\"left\"\n modal={false}\n disabled={hideHintWhenDisabled}\n qa={qaActionDisabledPopover}\n key={id}\n >\n {(props, ref) => (\n <PreviewTooltip preview={preview} disabled={disablePreview}>\n <Menu.Item\n key={id}\n ref={ref}\n active={isActive(editor)}\n disabled={!isEnable(editor)}\n onClick={handleClick}\n iconStart={\n <Icon data={icon.data} size={icon.size ?? 16} />\n }\n extraProps={{\n ...props,\n 'aria-label': titleText,\n }}\n >\n <div className={b('item')}>\n {titleText}\n {!disableHotkey && (\n <div className={b('extra')}>\n {hotkey && <Hotkey value={hotkey} />}\n {hintText && (\n <HelpMark\n className={b('hint')}\n popoverProps={{modal: false}}\n >\n {hintText}\n </HelpMark>\n )}\n </div>\n )}\n </div>\n </Menu.Item>\n </PreviewTooltip>\n )}\n </Popover>\n );\n })\n .filter(Boolean)}\n </Menu>\n </Popup>\n {popupItem\n ? popupItem.renderPopup({\n ...popupItem,\n editor,\n focus,\n onClick,\n anchorElement,\n hide: () => setPopupItem(undefined),\n })\n : null}\n </>\n );\n}\n\nfunction isPopupItem<E>(item: ToolbarItemData<E>): item is ToolbarButtonPopupData<E> {\n return Boolean((item as ToolbarButtonPopupData<E>).renderPopup);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getTargetZIndex(dataLayoutSelector: string, offset?: number): number | undefined;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTargetZIndex = getTargetZIndex;
|
|
4
|
+
const DEFAULT_OFFSET = 10;
|
|
5
|
+
function getTargetZIndex(dataLayoutSelector, offset = DEFAULT_OFFSET) {
|
|
6
|
+
const targetLayerElement = document.querySelector(`[data-layout="${dataLayoutSelector}"]`);
|
|
7
|
+
if (!targetLayerElement) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const computedStyle = window.getComputedStyle(targetLayerElement);
|
|
11
|
+
const targetZIndex = parseInt(computedStyle.zIndex, 10);
|
|
12
|
+
if (!Number.isFinite(targetZIndex) || targetZIndex <= 0) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return targetZIndex + offset;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-target-z-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-target-z-index.js","sourceRoot":"../../../src","sources":["utils/get-target-z-index.ts"],"names":[],"mappings":";;AAEA,0CAkBC;AApBD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,SAAgB,eAAe,CAC3B,kBAA0B,EAC1B,MAAM,GAAG,cAAc;IAEvB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,kBAAkB,IAAI,CAAC,CAAC;IAE3F,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAExD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,YAAY,GAAG,MAAM,CAAC;AACjC,CAAC","sourcesContent":["const DEFAULT_OFFSET = 10;\n\nexport function getTargetZIndex(\n dataLayoutSelector: string,\n offset = DEFAULT_OFFSET,\n): number | undefined {\n const targetLayerElement = document.querySelector(`[data-layout=\"${dataLayoutSelector}\"]`);\n\n if (!targetLayerElement) {\n return undefined;\n }\n\n const computedStyle = window.getComputedStyle(targetLayerElement);\n const targetZIndex = parseInt(computedStyle.zIndex, 10);\n\n if (!Number.isFinite(targetZIndex) || targetZIndex <= 0) {\n return undefined;\n }\n\n return targetZIndex + offset;\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import { InputRule } from 'prosemirror-inputrules';
|
|
|
2
2
|
import { Fragment, type MarkType, type Node } from 'prosemirror-model';
|
|
3
3
|
import { type EditorState } from 'prosemirror-state';
|
|
4
4
|
export declare function hasCodeMark(state: EditorState, _match: RegExpMatchArray, start: number, end: number): boolean;
|
|
5
|
+
export declare function inDefaultTextblock(state: EditorState, _match: RegExpMatchArray, start: number, _end: number): boolean;
|
|
5
6
|
export { textblockTypeInputRule, wrappingInputRule } from "./rulebuilders.js";
|
|
6
7
|
export declare function markInputRule(rule: RegExp | {
|
|
7
8
|
open: string;
|
|
@@ -2,25 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wrappingInputRule = exports.textblockTypeInputRule = void 0;
|
|
4
4
|
exports.hasCodeMark = hasCodeMark;
|
|
5
|
+
exports.inDefaultTextblock = inDefaultTextblock;
|
|
5
6
|
exports.markInputRule = markInputRule;
|
|
6
7
|
exports.nodeInputRule = nodeInputRule;
|
|
7
8
|
exports.inlineNodeInputRule = inlineNodeInputRule;
|
|
8
9
|
const prosemirror_inputrules_1 = require("prosemirror-inputrules");
|
|
9
10
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
10
11
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
11
|
-
|
|
12
|
+
// TODO: remove explicit import from base and code extensions
|
|
13
|
+
const specs_1 = require("../extensions/base/specs.js");
|
|
14
|
+
const specs_2 = require("../extensions/markdown/specs.js");
|
|
12
15
|
const lodash_1 = require("../lodash.js");
|
|
13
16
|
const marks_1 = require("./marks.js");
|
|
14
|
-
// TODO: remove explicit import from code extension
|
|
15
17
|
function hasCodeMark(state, _match, start, end) {
|
|
16
18
|
// TODO: remove explicit import from code extension
|
|
17
|
-
const codeMarkType = (0,
|
|
19
|
+
const codeMarkType = (0, specs_2.codeType)(state.schema);
|
|
18
20
|
if ((0, marks_1.isMarkActive)(state, codeMarkType))
|
|
19
21
|
return true;
|
|
20
22
|
if (state.doc.rangeHasMark(start, end, codeMarkType))
|
|
21
23
|
return true;
|
|
22
24
|
return false;
|
|
23
25
|
}
|
|
26
|
+
function inDefaultTextblock(state, _match, start, _end) {
|
|
27
|
+
return state.doc.resolve(start).parent.type === (0, specs_1.pType)(state.schema);
|
|
28
|
+
}
|
|
24
29
|
var rulebuilders_1 = require("./rulebuilders.js");
|
|
25
30
|
Object.defineProperty(exports, "textblockTypeInputRule", { enumerable: true, get: function () { return rulebuilders_1.textblockTypeInputRule; } });
|
|
26
31
|
Object.defineProperty(exports, "wrappingInputRule", { enumerable: true, get: function () { return rulebuilders_1.wrappingInputRule; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputrules.js","sourceRoot":"../../../src","sources":["utils/inputrules.ts"],"names":[],"mappings":";;;AASA,kCAWC;AA2BD,sCA8DC;AAID,sCAuBC;AAED,kDAkBC;AA5JD,mEAAiD;AACjD,yDAAgF;AAChF,yDAAkE;AAElE,2DAAsD;AACtD,yCAAqC;AACrC,sCAA4C;AAC5C,mDAAmD;AAEnD,SAAgB,WAAW,CACvB,KAAkB,EAClB,MAAwB,EACxB,KAAa,EACb,GAAW;IAEX,mDAAmD;IACnD,MAAM,YAAY,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,IAAA,oBAAY,EAAC,KAAK,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,kDAAyE;AAAjE,sHAAA,sBAAsB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAEjD,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW,EAAE,KAAkB;IACnE,IAAI,KAAK,GAA+C,EAAE,CAAC;IAE3D,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC7C,KAAK,GAAG;YACJ,GAAG,KAAK;YACR,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ;gBACxB,IAAI;aACP,CAAC,CAAC;SACN,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IAC/B,6CAA6C;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,uEAAuE;AACvE,SAAgB,aAAa,CACzB,IAAoE,EACpE,QAAkB,EAClB,QAAkD;IAElD,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,GAAG,IAAI,MAAM,CACf,MAAM,IAAI,GAAG;YACT,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,aAAa,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1D,MAAM,KAAK,OAAO,CACzB,CAAC;IACN,CAAC;IACD,OAAO,IAAI,kCAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,qFAAqF;QACrF,IAAK,KAA0B,CAAC,KAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,KAAyB,CAAC;YACrC,IAAI,EAAE,CAAC,KAAM,CAAC,EAAE,CAAC,KAAM,GAAG,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;QACtD,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,KAAK,GAAG,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxE,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAE5C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,YAAY;iBAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACnD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;YAE7C,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;gBACrB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;gBACzB,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;YACD,SAAS,GAAG,UAAU,CAAC;YACvB,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1C,CAAC;QAED,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAID,SAAgB,aAAa,CACzB,MAAc,EACd,QAA0F,EAC1F,eAAe,GAAG,CAAC;IAEnB,OAAO,IAAI,kCAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,EAAE,CAAC,WAAW,CACV,KAAK,GAAG,CAAC,EACT,GAAG,EACH,IAAA,mBAAU,EAAC,QAAQ,CAAC;gBAChB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,4BAAQ,CAAC,KAAK;gBACtC,CAAC,CAAC,QAAQ,IAAI,4BAAQ,CAAC,KAAK,CACnC,CAAC,YAAY,CAAC,IAAI,iCAAa,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,mBAAmB,CAC/B,MAAc,EACd,QAAyD;IAEzD,OAAO,IAAI,kCAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtD,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACzB,MAAM,EAAC,EAAE,EAAC,GAAG,KAAK,CAAC;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACX,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,4BAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CACzE,IAAI,iCAAa,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACzC,CAAC;QACN,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import {InputRule} from 'prosemirror-inputrules';\nimport {Fragment, type Mark, type MarkType, type Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n\nimport {codeType} from '../extensions/markdown/specs';\nimport {isFunction} from '../lodash';\nimport {isMarkActive} from '../utils/marks';\n// TODO: remove explicit import from code extension\n\nexport function hasCodeMark(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n end: number,\n): boolean {\n // TODO: remove explicit import from code extension\n const codeMarkType = codeType(state.schema);\n if (isMarkActive(state, codeMarkType)) return true;\n if (state.doc.rangeHasMark(start, end, codeMarkType)) return true;\n return false;\n}\n\nexport {textblockTypeInputRule, wrappingInputRule} from './rulebuilders';\n\nfunction getMarksBetween(start: number, end: number, state: EditorState) {\n let marks: {start: number; end: number; mark: Mark}[] = [];\n\n state.doc.nodesBetween(start, end, (node, pos) => {\n marks = [\n ...marks,\n ...node.marks.map((mark) => ({\n start: pos,\n end: pos + node.nodeSize,\n mark,\n })),\n ];\n });\n\n return marks;\n}\n\nfunction escapeRegex(string: string) {\n // eslint-disable-next-line no-useless-escape\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\n// TODO: link has a custom input rule handler, think about generalizing\nexport function markInputRule(\n rule: RegExp | {open: string; close: string; ignoreBetween?: string},\n markType: MarkType,\n getAttrs?: (match: any) => Record<string, unknown>,\n): InputRule {\n let regexp;\n if (rule instanceof RegExp) {\n regexp = rule;\n } else {\n const open = escapeRegex(rule.open);\n const close = escapeRegex(rule.close);\n const ignoreBetween = escapeRegex(rule.ignoreBetween || '');\n regexp = new RegExp(\n `(?:${open})` +\n (ignoreBetween ? `([^\\\\s${ignoreBetween}]+)` : `([\\\\S]+)`) +\n `(?:${close})\\\\s$`,\n );\n }\n return new InputRule(regexp, (state, match, start, end) => {\n // handle the rule only if is start of line or there is a space before \"open\" symbols\n if ((match as RegExpMatchArray).index! > 0) {\n const re = match as RegExpMatchArray;\n if (re.input![re.index! - 1] !== ' ') return null;\n }\n\n if (hasCodeMark(state, match, start, end)) return null;\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const {tr} = state;\n const m = match.length - 1;\n let markEnd = end;\n let markStart = start;\n\n if (match[m]) {\n const matchStart = start + match[0].indexOf(match[m - 1]);\n const matchEnd = matchStart + match[m - 1].length - 1;\n const textStart = matchStart + match[m - 1].lastIndexOf(match[m]);\n const textEnd = textStart + match[m].length;\n\n const marksBetween = getMarksBetween(start, end, state);\n const excludedMarks = marksBetween\n .filter((item) => item.mark.type.excludes(markType))\n .filter((item) => item.end > matchStart);\n\n if (excludedMarks.length) {\n return null;\n }\n\n if (textEnd < matchEnd) {\n tr.delete(textEnd, matchEnd);\n }\n if (textStart > matchStart) {\n tr.delete(matchStart, textStart);\n }\n markStart = matchStart;\n markEnd = markStart + match[m].length;\n }\n\n tr.addMark(markStart, markEnd, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\ntype NodeInputRuleReplaceFragment = Node | Fragment | readonly Node[] | null | undefined;\n\nexport function nodeInputRule(\n regexp: RegExp,\n fragment: NodeInputRuleReplaceFragment | ((match: string) => NodeInputRuleReplaceFragment),\n selectionOffset = 0,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(\n start - 1,\n end,\n isFunction(fragment)\n ? fragment(matchStr) ?? Fragment.empty\n : fragment ?? Fragment.empty,\n ).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));\n }\n\n return tr;\n });\n}\n\nexport function inlineNodeInputRule(\n regexp: RegExp,\n fragment: (match: string) => NodeInputRuleReplaceFragment,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(start, end, fragment(matchStr) ?? Fragment.empty).setSelection(\n new TextSelection(tr.doc.resolve(end)),\n );\n }\n\n return tr;\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inputrules.js","sourceRoot":"../../../src","sources":["utils/inputrules.ts"],"names":[],"mappings":"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","sourcesContent":["import {InputRule} from 'prosemirror-inputrules';\nimport {Fragment, type Mark, type MarkType, type Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n\n// TODO: remove explicit import from base and code extensions\nimport {pType} from 'src/extensions/base/specs';\nimport {codeType} from 'src/extensions/markdown/specs';\nimport {isFunction} from 'src/lodash';\nimport {isMarkActive} from 'src/utils/marks';\n\nexport function hasCodeMark(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n end: number,\n): boolean {\n // TODO: remove explicit import from code extension\n const codeMarkType = codeType(state.schema);\n if (isMarkActive(state, codeMarkType)) return true;\n if (state.doc.rangeHasMark(start, end, codeMarkType)) return true;\n return false;\n}\n\nexport function inDefaultTextblock(\n state: EditorState,\n _match: RegExpMatchArray,\n start: number,\n _end: number,\n): boolean {\n return state.doc.resolve(start).parent.type === pType(state.schema);\n}\n\nexport {textblockTypeInputRule, wrappingInputRule} from './rulebuilders';\n\nfunction getMarksBetween(start: number, end: number, state: EditorState) {\n let marks: {start: number; end: number; mark: Mark}[] = [];\n\n state.doc.nodesBetween(start, end, (node, pos) => {\n marks = [\n ...marks,\n ...node.marks.map((mark) => ({\n start: pos,\n end: pos + node.nodeSize,\n mark,\n })),\n ];\n });\n\n return marks;\n}\n\nfunction escapeRegex(string: string) {\n // eslint-disable-next-line no-useless-escape\n return string.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\n// TODO: link has a custom input rule handler, think about generalizing\nexport function markInputRule(\n rule: RegExp | {open: string; close: string; ignoreBetween?: string},\n markType: MarkType,\n getAttrs?: (match: any) => Record<string, unknown>,\n): InputRule {\n let regexp;\n if (rule instanceof RegExp) {\n regexp = rule;\n } else {\n const open = escapeRegex(rule.open);\n const close = escapeRegex(rule.close);\n const ignoreBetween = escapeRegex(rule.ignoreBetween || '');\n regexp = new RegExp(\n `(?:${open})` +\n (ignoreBetween ? `([^\\\\s${ignoreBetween}]+)` : `([\\\\S]+)`) +\n `(?:${close})\\\\s$`,\n );\n }\n return new InputRule(regexp, (state, match, start, end) => {\n // handle the rule only if is start of line or there is a space before \"open\" symbols\n if ((match as RegExpMatchArray).index! > 0) {\n const re = match as RegExpMatchArray;\n if (re.input![re.index! - 1] !== ' ') return null;\n }\n\n if (hasCodeMark(state, match, start, end)) return null;\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const {tr} = state;\n const m = match.length - 1;\n let markEnd = end;\n let markStart = start;\n\n if (match[m]) {\n const matchStart = start + match[0].indexOf(match[m - 1]);\n const matchEnd = matchStart + match[m - 1].length - 1;\n const textStart = matchStart + match[m - 1].lastIndexOf(match[m]);\n const textEnd = textStart + match[m].length;\n\n const marksBetween = getMarksBetween(start, end, state);\n const excludedMarks = marksBetween\n .filter((item) => item.mark.type.excludes(markType))\n .filter((item) => item.end > matchStart);\n\n if (excludedMarks.length) {\n return null;\n }\n\n if (textEnd < matchEnd) {\n tr.delete(textEnd, matchEnd);\n }\n if (textStart > matchStart) {\n tr.delete(matchStart, textStart);\n }\n markStart = matchStart;\n markEnd = markStart + match[m].length;\n }\n\n tr.addMark(markStart, markEnd, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\ntype NodeInputRuleReplaceFragment = Node | Fragment | readonly Node[] | null | undefined;\n\nexport function nodeInputRule(\n regexp: RegExp,\n fragment: NodeInputRuleReplaceFragment | ((match: string) => NodeInputRuleReplaceFragment),\n selectionOffset = 0,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(\n start - 1,\n end,\n isFunction(fragment)\n ? fragment(matchStr) ?? Fragment.empty\n : fragment ?? Fragment.empty,\n ).setSelection(new TextSelection(tr.doc.resolve(start + selectionOffset)));\n }\n\n return tr;\n });\n}\n\nexport function inlineNodeInputRule(\n regexp: RegExp,\n fragment: (match: string) => NodeInputRuleReplaceFragment,\n): InputRule {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const [matchStr] = match;\n const {tr} = state;\n\n if (matchStr) {\n tr.replaceWith(start, end, fragment(matchStr) ?? Fragment.empty).setSelection(\n new TextSelection(tr.doc.resolve(end)),\n );\n }\n\n return tr;\n });\n}\n"]}
|
|
@@ -28,6 +28,8 @@ function wrappingInputRule(regexp, nodeType, getAttrs = null, joinPredicate) {
|
|
|
28
28
|
return new prosemirror_inputrules_1.InputRule(regexp, (state, match, start, end) => {
|
|
29
29
|
if ((0, inputrules_1.hasCodeMark)(state, match, start, end))
|
|
30
30
|
return null;
|
|
31
|
+
if (!(0, inputrules_1.inDefaultTextblock)(state, match, start, end))
|
|
32
|
+
return null;
|
|
31
33
|
const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;
|
|
32
34
|
const tr = state.tr.delete(start, end);
|
|
33
35
|
const $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && (0, prosemirror_transform_1.findWrapping)(range, nodeType, attrs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rulebuilders.js","sourceRoot":"../../../src","sources":["utils/rulebuilders.ts"],"names":[],"mappings":";AAAA,GAAG;AACH,gGAAgG;AAChG,iDAAiD;AACjD,GAAG;;AAuBH,
|
|
1
|
+
{"version":3,"file":"rulebuilders.js","sourceRoot":"../../../src","sources":["utils/rulebuilders.ts"],"names":[],"mappings":"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","sourcesContent":["///\n/// Copy of https://github.com/ProseMirror/prosemirror-inputrules/blob/1.4.0/src/rulebuilders.ts\n/// Added a check for the presence of a code mark\n///\n\nimport {InputRule} from 'prosemirror-inputrules';\nimport type {Attrs, Node, NodeType} from 'prosemirror-model';\nimport {canJoin, findWrapping} from 'prosemirror-transform';\n\nimport {hasCodeMark, inDefaultTextblock} from './inputrules';\n\n/// Build an input rule for automatically wrapping a textblock when a\n/// given string is typed. The `regexp` argument is\n/// directly passed through to the `InputRule` constructor. You'll\n/// probably want the regexp to start with `^`, so that the pattern can\n/// only occur at the start of a textblock.\n///\n/// `nodeType` is the type of node to wrap in. If it needs attributes,\n/// you can either pass them directly, or pass a function that will\n/// compute them from the regular expression match.\n///\n/// By default, if there's a node with the same type above the newly\n/// wrapped node, the rule will try to [join](#transform.Transform.join) those\n/// two nodes. You can pass a join predicate, which takes a regular\n/// expression match and the node before the wrapped node, and can\n/// return a boolean to indicate whether a join should happen.\nexport function wrappingInputRule(\n regexp: RegExp,\n nodeType: NodeType,\n getAttrs: Attrs | null | ((matches: RegExpMatchArray) => Attrs | null) = null,\n joinPredicate?: (match: RegExpMatchArray, node: Node) => boolean,\n) {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n if (!inDefaultTextblock(state, match, start, end)) return null;\n\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr.delete(start, end);\n const $start = tr.doc.resolve(start),\n range = $start.blockRange(),\n wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping) return null;\n tr.wrap(range!, wrapping);\n const before = tr.doc.resolve(start - 1).nodeBefore;\n if (\n before &&\n before.type == nodeType &&\n canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before))\n )\n tr.join(start - 1);\n return tr;\n });\n}\n\n/// Build an input rule that changes the type of a textblock when the\n/// matched text is typed into it. You'll usually want to start your\n/// regexp with `^` to that it is only matched at the start of a\n/// textblock. The optional `getAttrs` parameter can be used to compute\n/// the new node's attributes, and works the same as in the\n/// `wrappingInputRule` function.\nexport function textblockTypeInputRule(\n regexp: RegExp,\n nodeType: NodeType,\n getAttrs: Attrs | null | ((match: RegExpMatchArray) => Attrs | null) = null,\n) {\n return new InputRule(regexp, (state, match, start, end) => {\n if (hasCodeMark(state, match, start, end)) return null;\n\n const $start = state.doc.resolve(start);\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))\n return null;\n return state.tr.delete(start, end).setBlockType(start, start, nodeType, attrs);\n });\n}\n"]}
|
package/build/cjs/version.js
CHANGED
|
@@ -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.
|
|
5
|
+
exports.VERSION = typeof '15.24.0' !== 'undefined' ? '15.24.0' : 'unknown';
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
package/build/cjs/version.js.map
CHANGED
|
@@ -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.
|
|
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.24.0' !== 'undefined' ? '15.24.0' : 'unknown';\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useLayoutEffect, useRef } from 'react';
|
|
3
3
|
import { useUpdate } from 'react-use';
|
|
4
|
+
import { LAYOUT } from "../common/layout.js";
|
|
4
5
|
import { i18n } from "../i18n/menubar/index.js";
|
|
5
6
|
import { useSticky } from "../react-utils/useSticky.js";
|
|
6
7
|
import { FlexToolbar } from "../toolbar/index.js";
|
|
@@ -20,6 +21,6 @@ export function ToolbarView({ editor, editorMode, toolbarEditor, toolbarFocus, t
|
|
|
20
21
|
withSettings: settingsVisible,
|
|
21
22
|
stickyActive: isStickyActive,
|
|
22
23
|
isSticky: stickyToolbar,
|
|
23
|
-
}, [className]), children: [_jsx(FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: i18n('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }), display: toolbarDisplay, disableTooltip: mobile, disableHotkey: mobile, disablePreview: mobile }), children] }));
|
|
24
|
+
}, [className]), "data-layout": LAYOUT.STICKY_TOOLBAR, children: [_jsx(FlexToolbar, { data: toolbarConfig, hiddenActions: hiddenActionsConfig, editor: toolbarEditor, focus: toolbarFocus, dotsTitle: i18n('more_action'), onClick: (id, attrs) => editor.emit('toolbar-action', { id, attrs, editorMode }), display: toolbarDisplay, disableTooltip: mobile, disableHotkey: mobile, disablePreview: mobile }), children] }));
|
|
24
25
|
}
|
|
25
26
|
//# sourceMappingURL=ToolbarView.js.map
|