From a70aba1384d9c4ce4735d3a0e855020bab2b5d4f Mon Sep 17 00:00:00 2001 From: kay delaney <45561153+kaydelaney@users.noreply.github.com> Date: Tue, 6 Sep 2022 15:23:48 +0100 Subject: [PATCH] Chore: Update slate and related packages (#54566) * Chore: Update slate and related packages --- .betterer.results | 48 ++---- .github/renovate.json5 | 4 - .gitignore | 1 + ...dev-environment-npm-0.2.5-9aeb7da7b5.patch | 79 ++++++++++ .yarnrc.yml | 55 ++++--- package.json | 15 +- .../src/config/webpack.plugin.config.ts | 2 +- packages/grafana-ui/package.json | 10 +- .../components/DataLinks/DataLinkInput.tsx | 6 +- .../components/QueryField/QueryField.test.tsx | 14 +- .../src/components/QueryField/QueryField.tsx | 10 +- .../src/slate-plugins/braces.test.tsx | 20 +-- .../grafana-ui/src/slate-plugins/braces.ts | 28 ++-- .../src/slate-plugins/clear.test.tsx | 10 +- .../grafana-ui/src/slate-plugins/clear.ts | 11 +- .../grafana-ui/src/slate-plugins/clipboard.ts | 27 ++-- .../src/slate-plugins/indentation.ts | 27 ++-- .../grafana-ui/src/slate-plugins/newline.ts | 11 +- .../src/slate-plugins/runner.test.tsx | 12 +- .../grafana-ui/src/slate-plugins/runner.ts | 17 +- .../src/slate-plugins/selection_shortcuts.ts | 11 +- .../src/slate-plugins/slate-prism/index.ts | 3 +- .../src/slate-plugins/slate-prism/options.tsx | 3 +- .../src/slate-plugins/suggestions.test.tsx | 3 +- .../src/slate-plugins/suggestions.tsx | 42 ++--- packages/grafana-ui/src/types/completion.ts | 5 +- packages/grafana-ui/tsconfig.build.json | 1 - packages/jaeger-ui-components/package.json | 2 +- .../unified/components/Expression.tsx | 2 +- public/app/features/plugins/plugin_loader.ts | 4 +- .../cloudwatch/components/LogsQueryField.tsx | 3 +- .../loki/components/LokiQueryField.tsx | 3 +- .../prometheus/components/PromQueryField.tsx | 3 +- yarn.lock | 145 ++++++++++-------- 34 files changed, 339 insertions(+), 298 deletions(-) create mode 100644 .yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch diff --git a/.betterer.results b/.betterer.results index d38bf49a975..8a34bf22c87 100644 --- a/.betterer.results +++ b/.betterer.results @@ -11,19 +11,19 @@ exports[`no enzyme tests`] = { "packages/grafana-ui/src/components/Logs/LogRowContextProvider.test.tsx:3786619094": [ [0, 17, 13, "RegExp match", "2409514259"] ], - "packages/grafana-ui/src/components/QueryField/QueryField.test.tsx:375894800": [ + "packages/grafana-ui/src/components/QueryField/QueryField.test.tsx:2976628669": [ + [0, 26, 13, "RegExp match", "2409514259"] + ], + "packages/grafana-ui/src/slate-plugins/braces.test.tsx:823049948": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "packages/grafana-ui/src/slate-plugins/braces.test.tsx:4104231341": [ + "packages/grafana-ui/src/slate-plugins/clear.test.tsx:3927593033": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "packages/grafana-ui/src/slate-plugins/clear.test.tsx:1085648664": [ + "packages/grafana-ui/src/slate-plugins/runner.test.tsx:1123710822": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "packages/grafana-ui/src/slate-plugins/runner.test.tsx:446043290": [ - [0, 19, 13, "RegExp match", "2409514259"] - ], - "packages/grafana-ui/src/slate-plugins/suggestions.test.tsx:3654981205": [ + "packages/grafana-ui/src/slate-plugins/suggestions.test.tsx:2682912140": [ [0, 18, 13, "RegExp match", "2409514259"] ], "packages/jaeger-ui-components/src/TracePageHeader/SpanGraph/Scrubber.test.js:4256741694": [ @@ -1296,8 +1296,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "packages/grafana-ui/src/components/DataLinks/SelectionReference.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -1856,42 +1855,16 @@ exports[`better eslint`] = { ], "packages/grafana-ui/src/slate-plugins/braces.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "packages/grafana-ui/src/slate-plugins/clear.test.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "packages/grafana-ui/src/slate-plugins/clear.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "packages/grafana-ui/src/slate-plugins/clipboard.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] - ], - "packages/grafana-ui/src/slate-plugins/indentation.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "packages/grafana-ui/src/slate-plugins/newline.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "packages/grafana-ui/src/slate-plugins/runner.test.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/slate-plugins/runner.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "packages/grafana-ui/src/slate-plugins/slate-prism/index.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -1913,8 +1886,7 @@ exports[`better eslint`] = { "packages/grafana-ui/src/slate-plugins/suggestions.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "packages/grafana-ui/src/themes/ThemeContext.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 23a07ad8eac..6e33a679cda 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -4,12 +4,10 @@ ], "enabledManagers": ["npm"], "ignoreDeps": [ - "@grafana/slate-react", // should be updated when the `slate` package is updated "@types/systemjs", "@types/d3-force", // we should bump this once we move to esm modules "@types/d3-interpolate", // we should bump this once we move to esm modules "@types/d3-scale-chromatic", // we should bump this once we move to esm modules - "@types/grafana__slate-react", // should be updated when the `slate` package is updated "@types/react-icons", // jaeger-ui-components is being refactored to use @grafana/ui icons instead "commander", // we are planning to remove this, so no need to update it "d3", @@ -25,8 +23,6 @@ "react-icons", // jaeger-ui-components is being refactored to use @grafana/ui icons instead "react-redux", // react-beautiful-dnd depends on react-redux 7.x, we need to update that one first "react-router-dom", // we should bump this together with history - "slate", - "slate-plain-serializer", "systemjs", "copy-webpack-plugin", // try to upgrade with newer yarn release. Not working with 3.1.1 "ts-loader", // we should remove ts-loader and use babel-loader instead diff --git a/.gitignore b/.gitignore index c1fc13b8bde..e261c77df42 100644 --- a/.gitignore +++ b/.gitignore @@ -119,6 +119,7 @@ pkg/cmd/grafana-server/__debug_bin /scripts/build/release_publisher/release_publisher *.patch +!.yarn/patches/*.patch # Ignoring frontend packages specifics /packages/**/dist diff --git a/.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch b/.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch new file mode 100644 index 00000000000..8c3e1d23280 --- /dev/null +++ b/.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch @@ -0,0 +1,79 @@ +diff --git a/dist/slate-dev-environment.js b/dist/slate-dev-environment.js +index 54ba8de31d5038ee0e9854dfd77e0d694b31b050..bce0f5aeff05792f442a0f5576ff38aac658e645 100644 +--- a/dist/slate-dev-environment.js ++++ b/dist/slate-dev-environment.js +@@ -147,11 +147,8 @@ var FEATURE_RULES = [['inputeventslevel1', function (window) { + var event = window.InputEvent ? new window.InputEvent('input') : {}; + var support = 'inputType' in event; + return support; +-}], ['inputeventslevel2', function (window) { +- var element = window.document.createElement('div'); +- element.contentEditable = true; +- var support = 'onbeforeinput' in element; +- return support; ++}], ['inputeventslevel2', function (_) { ++ return false; + }]]; + + var features = []; +diff --git a/dist/slate-dev-environment.min.js b/dist/slate-dev-environment.min.js +index d7886c6cecd5df0f82def22eeaddab93b8d5d6c8..45d6bb936c327f476c898a8d3493213b9ba69a57 100644 +--- a/dist/slate-dev-environment.min.js ++++ b/dist/slate-dev-environment.min.js +@@ -1 +1 @@ +-!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.SlateDevEnvironment={})}(this,function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n="object"===("undefined"==typeof window?"undefined":r(window))&&"object"===("undefined"==typeof document?"undefined":r(document))&&9===document.nodeType,t=function(){return function(e,r){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,r){var n=[],t=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(t=(a=u.next()).done)&&(n.push(a.value),!r||n.length!==r);t=!0);}catch(e){o=!0,i=e}finally{try{!t&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=void 0;if(n){var i=!0,a=!1,u=void 0;try{for(var f,l=[["edge",/Edge\/([0-9\._]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["android",/Android\s([0-9\.]+)/],["safari",/Version\/([0-9\._]+).*Safari/]][Symbol.iterator]();!(i=(f=l.next()).done);i=!0){var d=f.value,v=t(d,2),c=v[0];if(v[1].test(window.navigator.userAgent)){o=c;break}}}catch(e){a=!0,u=e}finally{try{!i&&l.return&&l.return()}finally{if(a)throw u}}}var s=void 0;if(n){var y=!0,m=!1,p=void 0;try{for(var S,_=[["ios",/os ([\.\_\d]+) like mac os/i],["macos",/mac os x/i],["android",/android/i],["firefoxos",/mozilla\/[a-z\.\_\d]+ \((?:mobile)|(?:tablet)/i],["windows",/windows\s*(?:nt)?\s*([\.\_\d]+)/i]][Symbol.iterator]();!(y=(S=_.next()).done);y=!0){var w=S.value,I=t(w,2),b=I[0];if(I[1].test(window.navigator.userAgent)){s=b;break}}}catch(e){m=!0,p=e}finally{try{!y&&_.return&&_.return()}finally{if(m)throw p}}}var E=[];if(n){var h=!0,A=!1,x=void 0;try{for(var O,g=[["inputeventslevel1",function(e){return"inputType"in(e.InputEvent?new e.InputEvent("input"):{})}],["inputeventslevel2",function(e){var r=e.document.createElement("div");return r.contentEditable=!0,"onbeforeinput"in r}]][Symbol.iterator]();!(h=(O=g.next()).done);h=!0){var R=O.value,T=t(R,2),N=T[0];(0,T[1])(window)&&E.push(N)}}catch(e){A=!0,x=e}finally{try{!h&&g.return&&g.return()}finally{if(A)throw x}}}var D=[[/^9([.]0|)/,28],[/^8[.]1/,27],[/^8([.]0|)/,26],[/^7[.]1/,25],[/^7([.]0|)/,24],[/^6([.]0|)/,23],[/^5[.]1/,22],[/^5([.]0|)/,21],[/^4[.]4/,20]];var P="chrome"===o,V="opera"===o,$="firefox"===o,j="safari"===o,M="ie"===o,k="edge"===o,C="android"===s,F="ios"===s,L="macos"===s,H="windows"===s,z=function(){if("android"!==s)return null;var e=window.navigator.userAgent.match(/Android\s([0-9\.]+)/);if(null==e)return null;var r=e[1],n=!0,o=!1,i=void 0;try{for(var a,u=D[Symbol.iterator]();!(n=(a=u.next()).done);n=!0){var f=a.value,l=t(f,2),d=l[0],v=l[1];if(r.match(d))return v}}catch(e){o=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}return null}(),G=E.includes("inputeventslevel1"),U=E.includes("inputeventslevel2")||C&&(28===z||null===z);e.IS_CHROME=P,e.IS_OPERA=V,e.IS_FIREFOX=$,e.IS_SAFARI=j,e.IS_IE=M,e.IS_EDGE=k,e.IS_ANDROID=C,e.IS_IOS=F,e.IS_MAC=L,e.IS_WINDOWS=H,e.ANDROID_API_VERSION=z,e.HAS_INPUT_EVENTS_LEVEL_1=G,e.HAS_INPUT_EVENTS_LEVEL_2=U,Object.defineProperty(e,"__esModule",{value:!0})}); ++!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.SlateDevEnvironment={})}(this,function(e){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n="object"===("undefined"==typeof window?"undefined":r(window))&&"object"===("undefined"==typeof document?"undefined":r(document))&&9===document.nodeType,t=function(){return function(e,r){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,r){var n=[],t=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(t=(a=u.next()).done)&&(n.push(a.value),!r||n.length!==r);t=!0);}catch(e){o=!0,i=e}finally{try{!t&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=void 0;if(n){var i=!0,a=!1,u=void 0;try{for(var f,l=[["edge",/Edge\/([0-9\._]+)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)$/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["android",/Android\s([0-9\.]+)/],["safari",/Version\/([0-9\._]+).*Safari/]][Symbol.iterator]();!(i=(f=l.next()).done);i=!0){var d=f.value,v=t(d,2),c=v[0];if(v[1].test(window.navigator.userAgent)){o=c;break}}}catch(e){a=!0,u=e}finally{try{!i&&l.return&&l.return()}finally{if(a)throw u}}}var s=void 0;if(n){var y=!0,m=!1,p=void 0;try{for(var S,_=[["ios",/os ([\.\_\d]+) like mac os/i],["macos",/mac os x/i],["android",/android/i],["firefoxos",/mozilla\/[a-z\.\_\d]+ \((?:mobile)|(?:tablet)/i],["windows",/windows\s*(?:nt)?\s*([\.\_\d]+)/i]][Symbol.iterator]();!(y=(S=_.next()).done);y=!0){var w=S.value,I=t(w,2),b=I[0];if(I[1].test(window.navigator.userAgent)){s=b;break}}}catch(e){m=!0,p=e}finally{try{!y&&_.return&&_.return()}finally{if(m)throw p}}}var E=[];if(n){var h=!0,A=!1,x=void 0;try{for(var O,g=[["inputeventslevel1",function(e){return"inputType"in(e.InputEvent?new e.InputEvent("input"):{})}],["inputeventslevel2",function(_){return false}]][Symbol.iterator]();!(h=(O=g.next()).done);h=!0){var R=O.value,T=t(R,2),N=T[0];(0,T[1])(window)&&E.push(N)}}catch(e){A=!0,x=e}finally{try{!h&&g.return&&g.return()}finally{if(A)throw x}}}var D=[[/^9([.]0|)/,28],[/^8[.]1/,27],[/^8([.]0|)/,26],[/^7[.]1/,25],[/^7([.]0|)/,24],[/^6([.]0|)/,23],[/^5[.]1/,22],[/^5([.]0|)/,21],[/^4[.]4/,20]];var P="chrome"===o,V="opera"===o,$="firefox"===o,j="safari"===o,M="ie"===o,k="edge"===o,C="android"===s,F="ios"===s,L="macos"===s,H="windows"===s,z=function(){if("android"!==s)return null;var e=window.navigator.userAgent.match(/Android\s([0-9\.]+)/);if(null==e)return null;var r=e[1],n=!0,o=!1,i=void 0;try{for(var a,u=D[Symbol.iterator]();!(n=(a=u.next()).done);n=!0){var f=a.value,l=t(f,2),d=l[0],v=l[1];if(r.match(d))return v}}catch(e){o=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}return null}(),G=E.includes("inputeventslevel1"),U=E.includes("inputeventslevel2")||C&&(28===z||null===z);e.IS_CHROME=P,e.IS_OPERA=V,e.IS_FIREFOX=$,e.IS_SAFARI=j,e.IS_IE=M,e.IS_EDGE=k,e.IS_ANDROID=C,e.IS_IOS=F,e.IS_MAC=L,e.IS_WINDOWS=H,e.ANDROID_API_VERSION=z,e.HAS_INPUT_EVENTS_LEVEL_1=G,e.HAS_INPUT_EVENTS_LEVEL_2=U,Object.defineProperty(e,"__esModule",{value:!0})}); +diff --git a/lib/slate-dev-environment.es.js b/lib/slate-dev-environment.es.js +index 91fcf8e4da93f86611a4c2ce854fc56cb9d2713f..0ce6ef502cd08e6b7dbcbd0ccb574d7028d7fe0f 100644 +--- a/lib/slate-dev-environment.es.js ++++ b/lib/slate-dev-environment.es.js +@@ -139,11 +139,8 @@ var FEATURE_RULES = [['inputeventslevel1', function (window) { + var event = window.InputEvent ? new window.InputEvent('input') : {}; + var support = 'inputType' in event; + return support; +-}], ['inputeventslevel2', function (window) { +- var element = window.document.createElement('div'); +- element.contentEditable = true; +- var support = 'onbeforeinput' in element; +- return support; ++}], ['inputeventslevel2', function (_) { ++ return false; + }]]; + + var features = []; +diff --git a/lib/slate-dev-environment.es.js.map b/lib/slate-dev-environment.es.js.map +index 58d22034fabe7cc249ed3df4cc4d659197e556f9..b6feac76cdd689c815377367ed1af74cdec1d82f 100644 +--- a/lib/slate-dev-environment.es.js.map ++++ b/lib/slate-dev-environment.es.js.map +@@ -1 +1 @@ +-{"version":3,"file":"slate-dev-environment.es.js","sources":["../src/index.js"],"sourcesContent":["import isBrowser from 'is-in-browser'\n\n/**\n * Browser matching rules.\n *\n * @type {Array}\n */\n\nconst BROWSER_RULES = [\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n]\n\nlet browser\n\nif (isBrowser) {\n for (const [name, regexp] of BROWSER_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n browser = name\n break\n }\n }\n}\n\n/**\n * Operating system matching rules.\n *\n * @type {Array}\n */\n\nconst OS_RULES = [\n ['ios', /os ([\\.\\_\\d]+) like mac os/i], // must be before the macos rule\n ['macos', /mac os x/i],\n ['android', /android/i],\n ['firefoxos', /mozilla\\/[a-z\\.\\_\\d]+ \\((?:mobile)|(?:tablet)/i],\n ['windows', /windows\\s*(?:nt)?\\s*([\\.\\_\\d]+)/i],\n]\n\nlet os\n\nif (isBrowser) {\n for (const [name, regexp] of OS_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n os = name\n break\n }\n }\n}\n\n/**\n * Feature matching rules.\n *\n * @type {Array}\n */\n\nconst FEATURE_RULES = [\n [\n 'inputeventslevel1',\n window => {\n const event = window.InputEvent ? new window.InputEvent('input') : {}\n const support = 'inputType' in event\n return support\n },\n ],\n [\n 'inputeventslevel2',\n window => {\n const element = window.document.createElement('div')\n element.contentEditable = true\n const support = 'onbeforeinput' in element\n return support\n },\n ],\n]\n\nconst features = []\n\nif (isBrowser) {\n for (const [name, test] of FEATURE_RULES) {\n if (test(window)) {\n features.push(name)\n }\n }\n}\n\n/**\n * Array of regular expression matchers and their API version\n *\n * @type {Array}\n */\n\nconst ANDROID_API_VERSIONS = [\n [/^9([.]0|)/, 28],\n [/^8[.]1/, 27],\n [/^8([.]0|)/, 26],\n [/^7[.]1/, 25],\n [/^7([.]0|)/, 24],\n [/^6([.]0|)/, 23],\n [/^5[.]1/, 22],\n [/^5([.]0|)/, 21],\n [/^4[.]4/, 20],\n]\n\n/**\n * get the Android API version from the userAgent\n *\n * @return {number} version\n */\n\nfunction getAndroidApiVersion() {\n if (os !== 'android') return null\n const { userAgent } = window.navigator\n const matchData = userAgent.match(/Android\\s([0-9\\.]+)/)\n if (matchData == null) return null\n const versionString = matchData[1]\n\n for (const [regex, version] of ANDROID_API_VERSIONS) {\n if (versionString.match(regex)) return version\n }\n return null\n}\n\n/**\n * Export.\n *\n * @type {Boolean}\n */\n\nexport const IS_CHROME = browser === 'chrome'\nexport const IS_OPERA = browser === 'opera'\nexport const IS_FIREFOX = browser === 'firefox'\nexport const IS_SAFARI = browser === 'safari'\nexport const IS_IE = browser === 'ie'\nexport const IS_EDGE = browser === 'edge'\n\nexport const IS_ANDROID = os === 'android'\nexport const IS_IOS = os === 'ios'\nexport const IS_MAC = os === 'macos'\nexport const IS_WINDOWS = os === 'windows'\n\nexport const ANDROID_API_VERSION = getAndroidApiVersion()\n\nexport const HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1')\nexport const HAS_INPUT_EVENTS_LEVEL_2 =\n features.includes('inputeventslevel2') ||\n (IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null))\n"],"names":["BROWSER_RULES","browser","isBrowser","name","regexp","test","window","navigator","userAgent","OS_RULES","os","FEATURE_RULES","event","InputEvent","support","element","document","createElement","contentEditable","features","push","ANDROID_API_VERSIONS","getAndroidApiVersion","matchData","match","versionString","regex","version","IS_CHROME","IS_OPERA","IS_FIREFOX","IS_SAFARI","IS_IE","IS_EDGE","IS_ANDROID","IS_IOS","IS_MAC","IS_WINDOWS","ANDROID_API_VERSION","HAS_INPUT_EVENTS_LEVEL_1","includes","HAS_INPUT_EVENTS_LEVEL_2"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"slate-dev-environment.es.js","sources":["../src/index.js"],"sourcesContent":["import isBrowser from 'is-in-browser'\n\n/**\n * Browser matching rules.\n *\n * @type {Array}\n */\n\nconst BROWSER_RULES = [\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n]\n\nlet browser\n\nif (isBrowser) {\n for (const [name, regexp] of BROWSER_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n browser = name\n break\n }\n }\n}\n\n/**\n * Operating system matching rules.\n *\n * @type {Array}\n */\n\nconst OS_RULES = [\n ['ios', /os ([\\.\\_\\d]+) like mac os/i], // must be before the macos rule\n ['macos', /mac os x/i],\n ['android', /android/i],\n ['firefoxos', /mozilla\\/[a-z\\.\\_\\d]+ \\((?:mobile)|(?:tablet)/i],\n ['windows', /windows\\s*(?:nt)?\\s*([\\.\\_\\d]+)/i],\n]\n\nlet os\n\nif (isBrowser) {\n for (const [name, regexp] of OS_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n os = name\n break\n }\n }\n}\n\n/**\n * Feature matching rules.\n *\n * @type {Array}\n */\n\nconst FEATURE_RULES = [\n [\n 'inputeventslevel1',\n window => {\n const event = window.InputEvent ? new window.InputEvent('input') : {}\n const support = 'inputType' in event\n return support\n },\n ],\n [\n 'inputeventslevel2',\n _ => {\n return false },\n ],\n]\n\nconst features = []\n\nif (isBrowser) {\n for (const [name, test] of FEATURE_RULES) {\n if (test(window)) {\n features.push(name)\n }\n }\n}\n\n/**\n * Array of regular expression matchers and their API version\n *\n * @type {Array}\n */\n\nconst ANDROID_API_VERSIONS = [\n [/^9([.]0|)/, 28],\n [/^8[.]1/, 27],\n [/^8([.]0|)/, 26],\n [/^7[.]1/, 25],\n [/^7([.]0|)/, 24],\n [/^6([.]0|)/, 23],\n [/^5[.]1/, 22],\n [/^5([.]0|)/, 21],\n [/^4[.]4/, 20],\n]\n\n/**\n * get the Android API version from the userAgent\n *\n * @return {number} version\n */\n\nfunction getAndroidApiVersion() {\n if (os !== 'android') return null\n const { userAgent } = window.navigator\n const matchData = userAgent.match(/Android\\s([0-9\\.]+)/)\n if (matchData == null) return null\n const versionString = matchData[1]\n\n for (const [regex, version] of ANDROID_API_VERSIONS) {\n if (versionString.match(regex)) return version\n }\n return null\n}\n\n/**\n * Export.\n *\n * @type {Boolean}\n */\n\nexport const IS_CHROME = browser === 'chrome'\nexport const IS_OPERA = browser === 'opera'\nexport const IS_FIREFOX = browser === 'firefox'\nexport const IS_SAFARI = browser === 'safari'\nexport const IS_IE = browser === 'ie'\nexport const IS_EDGE = browser === 'edge'\n\nexport const IS_ANDROID = os === 'android'\nexport const IS_IOS = os === 'ios'\nexport const IS_MAC = os === 'macos'\nexport const IS_WINDOWS = os === 'windows'\n\nexport const ANDROID_API_VERSION = getAndroidApiVersion()\n\nexport const HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1')\nexport const HAS_INPUT_EVENTS_LEVEL_2 =\n features.includes('inputeventslevel2') ||\n (IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null))\n"],"names":["BROWSER_RULES","browser","isBrowser","name","regexp","test","window","navigator","userAgent","OS_RULES","os","FEATURE_RULES","event","InputEvent","support","element","document","createElement","contentEditable","features","push","ANDROID_API_VERSIONS","getAndroidApiVersion","matchData","match","versionString","regex","version","IS_CHROME","IS_OPERA","IS_FIREFOX","IS_SAFARI","IS_IE","IS_EDGE","IS_ANDROID","IS_IOS","IS_MAC","IS_WINDOWS","ANDROID_API_VERSION","HAS_INPUT_EVENTS_LEVEL_1","includes","HAS_INPUT_EVENTS_LEVEL_2"],"mappings":"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"} +\ No newline at end of file +diff --git a/lib/slate-dev-environment.js b/lib/slate-dev-environment.js +index 4fafbdd2428a68954c10342b25ac206d4c9a25e0..fd4ae1134c4be4cbb516ed464a29d9ec99e87701 100644 +--- a/lib/slate-dev-environment.js ++++ b/lib/slate-dev-environment.js +@@ -145,11 +145,8 @@ var FEATURE_RULES = [['inputeventslevel1', function (window) { + var event = window.InputEvent ? new window.InputEvent('input') : {}; + var support = 'inputType' in event; + return support; +-}], ['inputeventslevel2', function (window) { +- var element = window.document.createElement('div'); +- element.contentEditable = true; +- var support = 'onbeforeinput' in element; +- return support; ++}], ['inputeventslevel2', function (_) { ++ return false; + }]]; + + var features = []; +diff --git a/lib/slate-dev-environment.js.map b/lib/slate-dev-environment.js.map +index 32ae85f6ff65055c6875e84469fa61979c37d7df..6105b7b3385781dbd8c3b2dfd940d17355bfecc0 100644 +--- a/lib/slate-dev-environment.js.map ++++ b/lib/slate-dev-environment.js.map +@@ -1 +1 @@ +-{"version":3,"file":"slate-dev-environment.js","sources":["../src/index.js"],"sourcesContent":["import isBrowser from 'is-in-browser'\n\n/**\n * Browser matching rules.\n *\n * @type {Array}\n */\n\nconst BROWSER_RULES = [\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n]\n\nlet browser\n\nif (isBrowser) {\n for (const [name, regexp] of BROWSER_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n browser = name\n break\n }\n }\n}\n\n/**\n * Operating system matching rules.\n *\n * @type {Array}\n */\n\nconst OS_RULES = [\n ['ios', /os ([\\.\\_\\d]+) like mac os/i], // must be before the macos rule\n ['macos', /mac os x/i],\n ['android', /android/i],\n ['firefoxos', /mozilla\\/[a-z\\.\\_\\d]+ \\((?:mobile)|(?:tablet)/i],\n ['windows', /windows\\s*(?:nt)?\\s*([\\.\\_\\d]+)/i],\n]\n\nlet os\n\nif (isBrowser) {\n for (const [name, regexp] of OS_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n os = name\n break\n }\n }\n}\n\n/**\n * Feature matching rules.\n *\n * @type {Array}\n */\n\nconst FEATURE_RULES = [\n [\n 'inputeventslevel1',\n window => {\n const event = window.InputEvent ? new window.InputEvent('input') : {}\n const support = 'inputType' in event\n return support\n },\n ],\n [\n 'inputeventslevel2',\n window => {\n const element = window.document.createElement('div')\n element.contentEditable = true\n const support = 'onbeforeinput' in element\n return support\n },\n ],\n]\n\nconst features = []\n\nif (isBrowser) {\n for (const [name, test] of FEATURE_RULES) {\n if (test(window)) {\n features.push(name)\n }\n }\n}\n\n/**\n * Array of regular expression matchers and their API version\n *\n * @type {Array}\n */\n\nconst ANDROID_API_VERSIONS = [\n [/^9([.]0|)/, 28],\n [/^8[.]1/, 27],\n [/^8([.]0|)/, 26],\n [/^7[.]1/, 25],\n [/^7([.]0|)/, 24],\n [/^6([.]0|)/, 23],\n [/^5[.]1/, 22],\n [/^5([.]0|)/, 21],\n [/^4[.]4/, 20],\n]\n\n/**\n * get the Android API version from the userAgent\n *\n * @return {number} version\n */\n\nfunction getAndroidApiVersion() {\n if (os !== 'android') return null\n const { userAgent } = window.navigator\n const matchData = userAgent.match(/Android\\s([0-9\\.]+)/)\n if (matchData == null) return null\n const versionString = matchData[1]\n\n for (const [regex, version] of ANDROID_API_VERSIONS) {\n if (versionString.match(regex)) return version\n }\n return null\n}\n\n/**\n * Export.\n *\n * @type {Boolean}\n */\n\nexport const IS_CHROME = browser === 'chrome'\nexport const IS_OPERA = browser === 'opera'\nexport const IS_FIREFOX = browser === 'firefox'\nexport const IS_SAFARI = browser === 'safari'\nexport const IS_IE = browser === 'ie'\nexport const IS_EDGE = browser === 'edge'\n\nexport const IS_ANDROID = os === 'android'\nexport const IS_IOS = os === 'ios'\nexport const IS_MAC = os === 'macos'\nexport const IS_WINDOWS = os === 'windows'\n\nexport const ANDROID_API_VERSION = getAndroidApiVersion()\n\nexport const HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1')\nexport const HAS_INPUT_EVENTS_LEVEL_2 =\n features.includes('inputeventslevel2') ||\n (IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null))\n"],"names":["BROWSER_RULES","browser","isBrowser","name","regexp","test","window","navigator","userAgent","OS_RULES","os","FEATURE_RULES","event","InputEvent","support","element","document","createElement","contentEditable","features","push","ANDROID_API_VERSIONS","getAndroidApiVersion","matchData","match","versionString","regex","version","IS_CHROME","IS_OPERA","IS_FIREFOX","IS_SAFARI","IS_IE","IS_EDGE","IS_ANDROID","IS_IOS","IS_MAC","IS_WINDOWS","ANDROID_API_VERSION","HAS_INPUT_EVENTS_LEVEL_1","includes","HAS_INPUT_EVENTS_LEVEL_2"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"slate-dev-environment.js","sources":["../src/index.js"],"sourcesContent":["import isBrowser from 'is-in-browser'\n\n/**\n * Browser matching rules.\n *\n * @type {Array}\n */\n\nconst BROWSER_RULES = [\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)$/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+)\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n]\n\nlet browser\n\nif (isBrowser) {\n for (const [name, regexp] of BROWSER_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n browser = name\n break\n }\n }\n}\n\n/**\n * Operating system matching rules.\n *\n * @type {Array}\n */\n\nconst OS_RULES = [\n ['ios', /os ([\\.\\_\\d]+) like mac os/i], // must be before the macos rule\n ['macos', /mac os x/i],\n ['android', /android/i],\n ['firefoxos', /mozilla\\/[a-z\\.\\_\\d]+ \\((?:mobile)|(?:tablet)/i],\n ['windows', /windows\\s*(?:nt)?\\s*([\\.\\_\\d]+)/i],\n]\n\nlet os\n\nif (isBrowser) {\n for (const [name, regexp] of OS_RULES) {\n if (regexp.test(window.navigator.userAgent)) {\n os = name\n break\n }\n }\n}\n\n/**\n * Feature matching rules.\n *\n * @type {Array}\n */\n\nconst FEATURE_RULES = [\n [\n 'inputeventslevel1',\n window => {\n const event = window.InputEvent ? new window.InputEvent('input') : {}\n const support = 'inputType' in event\n return support\n },\n ],\n [\n 'inputeventslevel2',\n _ => {\n return false\n },\n ],\n]\n\nconst features = []\n\nif (isBrowser) {\n for (const [name, test] of FEATURE_RULES) {\n if (test(window)) {\n features.push(name)\n }\n }\n}\n\n/**\n * Array of regular expression matchers and their API version\n *\n * @type {Array}\n */\n\nconst ANDROID_API_VERSIONS = [\n [/^9([.]0|)/, 28],\n [/^8[.]1/, 27],\n [/^8([.]0|)/, 26],\n [/^7[.]1/, 25],\n [/^7([.]0|)/, 24],\n [/^6([.]0|)/, 23],\n [/^5[.]1/, 22],\n [/^5([.]0|)/, 21],\n [/^4[.]4/, 20],\n]\n\n/**\n * get the Android API version from the userAgent\n *\n * @return {number} version\n */\n\nfunction getAndroidApiVersion() {\n if (os !== 'android') return null\n const { userAgent } = window.navigator\n const matchData = userAgent.match(/Android\\s([0-9\\.]+)/)\n if (matchData == null) return null\n const versionString = matchData[1]\n\n for (const [regex, version] of ANDROID_API_VERSIONS) {\n if (versionString.match(regex)) return version\n }\n return null\n}\n\n/**\n * Export.\n *\n * @type {Boolean}\n */\n\nexport const IS_CHROME = browser === 'chrome'\nexport const IS_OPERA = browser === 'opera'\nexport const IS_FIREFOX = browser === 'firefox'\nexport const IS_SAFARI = browser === 'safari'\nexport const IS_IE = browser === 'ie'\nexport const IS_EDGE = browser === 'edge'\n\nexport const IS_ANDROID = os === 'android'\nexport const IS_IOS = os === 'ios'\nexport const IS_MAC = os === 'macos'\nexport const IS_WINDOWS = os === 'windows'\n\nexport const ANDROID_API_VERSION = getAndroidApiVersion()\n\nexport const HAS_INPUT_EVENTS_LEVEL_1 = features.includes('inputeventslevel1')\nexport const HAS_INPUT_EVENTS_LEVEL_2 =\n features.includes('inputeventslevel2') ||\n (IS_ANDROID && (ANDROID_API_VERSION === 28 || ANDROID_API_VERSION === null))\n"],"names":["BROWSER_RULES","browser","isBrowser","name","regexp","test","window","navigator","userAgent","OS_RULES","os","FEATURE_RULES","event","InputEvent","support","element","document","createElement","contentEditable","features","push","ANDROID_API_VERSIONS","getAndroidApiVersion","matchData","match","versionString","regex","version","IS_CHROME","IS_OPERA","IS_FIREFOX","IS_SAFARI","IS_IE","IS_EDGE","IS_ANDROID","IS_IOS","IS_MAC","IS_WINDOWS","ANDROID_API_VERSION","HAS_INPUT_EVENTS_LEVEL_1","includes","HAS_INPUT_EVENTS_LEVEL_2"],"mappings":"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"} +\ No newline at end of file diff --git a/.yarnrc.yml b/.yarnrc.yml index a82d41d24fd..d05c2f9d79e 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -3,40 +3,37 @@ enableTelemetry: false nodeLinker: pnp packageExtensions: - "@grafana/slate-react@0.22.10-grafana": - peerDependencies: - slate-react: ">=0.22.0" - "@mdx-js/loader@1.6.22": + '@mdx-js/loader@1.6.22': peerDependencies: react: 17.0.1 - "@storybook/addon-docs@6.4.21": + '@storybook/addon-docs@6.4.21': peerDependencies: - "@storybook/manager-webpack5": 6.4.21 - "@storybook/addon-essentials@6.4.21": + '@storybook/manager-webpack5': 6.4.21 + '@storybook/addon-essentials@6.4.21': peerDependencies: - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/manager-webpack5": 6.4.21 - "@storybook/theming": 6.4.21 - "@storybook/core-server@6.4.21": + '@storybook/components': 6.4.21 + '@storybook/core-events': 6.4.21 + '@storybook/manager-webpack5': 6.4.21 + '@storybook/theming': 6.4.21 + '@storybook/core-server@6.4.21': peerDependencies: - "@babel/core": ^7.0.0 - "@storybook/core@6.4.21": + '@babel/core': ^7.0.0 + '@storybook/core@6.4.21': peerDependencies: - "@babel/core": ^7.0.0 - "@storybook/manager-webpack5": 6.4.21 - "@storybook/csf-tools@6.4.21": + '@babel/core': ^7.0.0 + '@storybook/manager-webpack5': 6.4.21 + '@storybook/csf-tools@6.4.21': peerDependencies: - "@babel/core": ^7.0.0 - "@storybook/react@6.4.21": + '@babel/core': ^7.0.0 + '@storybook/react@6.4.21': peerDependencies: - "@storybook/manager-webpack5": 6.4.21 + '@storybook/manager-webpack5': 6.4.21 doctrine@3.0.0: dependencies: assert: 2.0.0 moveable@0.30.0: dependencies: - "@daybrush/utils": 1.7.0 + '@daybrush/utils': 1.7.0 framework-utils: ^1.1.0 rc-time-picker@3.7.3: peerDependencies: @@ -51,9 +48,9 @@ packageExtensions: react-simple-compat: 1.2.2 react-compat-moveable@0.18.0: dependencies: - "@egjs/agent": ^2.2.1 - "@egjs/children-differ": ^1.0.1 - "@scena/matrix": 1.1.1 + '@egjs/agent': ^2.2.1 + '@egjs/children-differ': ^1.0.1 + '@scena/matrix': 1.1.1 css-to-mat: ^1.0.3 gesto: ^1.9.0 overlap-area: ^1.0.0 @@ -65,20 +62,20 @@ packageExtensions: webpack: 4.41.5 react-icons@2.2.7: peerDependencies: - prop-types: "*" + prop-types: '*' react-resizable@3.0.4: peerDependencies: react-dom: 17.0.1 - "@npmcli/run-script@4.1.3": + '@npmcli/run-script@4.1.3': dependencies: which: ^2.0.2 plugins: - path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs - spec: "@yarnpkg/plugin-typescript" + spec: '@yarnpkg/plugin-typescript' - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs - spec: "@yarnpkg/plugin-interactive-tools" + spec: '@yarnpkg/plugin-interactive-tools' - path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs - spec: "https://mskelton.dev/yarn-outdated/v2" + spec: 'https://mskelton.dev/yarn-outdated/v2' yarnPath: .yarn/releases/yarn-3.2.2.cjs diff --git a/package.json b/package.json index c7caa65c0ec..428aee9cbe0 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,6 @@ "@types/eslint": "8.4.5", "@types/file-saver": "2.0.5", "@types/google.analytics": "^0.0.42", - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5", "@types/history": "4.7.11", "@types/hoist-non-react-statics": "3.3.1", "@types/jest": "28.1.6", @@ -158,8 +157,9 @@ "@types/redux-mock-store": "1.0.3", "@types/reselect": "2.2.0", "@types/semver": "7.3.10", - "@types/slate": "0.47.2", + "@types/slate": "0.47.9", "@types/slate-plain-serializer": "0.7.2", + "@types/slate-react": "0.22.9", "@types/testing-library__jest-dom": "5.14.5", "@types/testing-library__react-hooks": "^3.2.0", "@types/tinycolor2": "1.4.3", @@ -257,7 +257,6 @@ "@grafana/lezer-logql": "0.0.18", "@grafana/runtime": "workspace:*", "@grafana/schema": "workspace:*", - "@grafana/slate-react": "0.22.10-grafana", "@grafana/ui": "workspace:*", "@jaegertracing/jaeger-ui-components": "workspace:*", "@kusto/monaco-kusto": "5.1.8", @@ -387,8 +386,9 @@ "sass": "link:./public/sass", "selecto": "1.19.1", "semver": "7.3.7", - "slate": "0.47.8", - "slate-plain-serializer": "0.7.10", + "slate": "0.47.9", + "slate-plain-serializer": "0.7.11", + "slate-react": "0.22.10", "sql-formatter-plus": "^1.3.6", "symbol-observable": "4.0.0", "test": "link:./public/test", @@ -403,12 +403,13 @@ }, "resolutions": { "underscore": "1.13.4", - "@types/slate": "0.47.2", + "@types/slate": "0.47.9", "@rushstack/node-core-library": "3.49.0", "@rushstack/rig-package": "0.3.13", "@rushstack/ts-command-line": "4.12.1", "@storybook/react/webpack": "5.74.0", - "node-fetch": "2.6.7" + "node-fetch": "2.6.7", + "slate-dev-environment@^0.2.2": "patch:slate-dev-environment@npm:0.2.5#.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch" }, "workspaces": { "packages": [ diff --git a/packages/grafana-toolkit/src/config/webpack.plugin.config.ts b/packages/grafana-toolkit/src/config/webpack.plugin.config.ts index 7bc3897c6a2..7ba2d217d34 100644 --- a/packages/grafana-toolkit/src/config/webpack.plugin.config.ts +++ b/packages/grafana-toolkit/src/config/webpack.plugin.config.ts @@ -174,7 +174,7 @@ const getBaseWebpackConfig: WebpackConfigurationGetter = async (options) => { '@emotion/css', 'prismjs', 'slate-plain-serializer', - '@grafana/slate-react', + 'slate-react', 'react', 'react-dom', 'react-redux', diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index 6693d33a7e4..c3046091456 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -48,7 +48,6 @@ "@grafana/data": "9.2.0-pre", "@grafana/e2e-selectors": "9.2.0-pre", "@grafana/schema": "9.2.0-pre", - "@grafana/slate-react": "0.22.10-grafana", "@monaco-editor/react": "4.4.5", "@popperjs/core": "2.11.5", "@react-aria/button": "3.6.1", @@ -97,8 +96,9 @@ "react-use": "17.4.0", "react-window": "1.8.7", "rxjs": "7.5.6", - "slate": "0.47.8", - "slate-plain-serializer": "0.7.10", + "slate": "0.47.9", + "slate-plain-serializer": "0.7.11", + "slate-react": "0.22.10", "tinycolor2": "1.4.2", "tslib": "2.4.0", "uplot": "1.6.22", @@ -135,7 +135,6 @@ "@types/d3": "7.4.0", "@types/enzyme": "3.10.12", "@types/enzyme-adapter-react-16": "1.0.6", - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5", "@types/hoist-non-react-statics": "3.3.1", "@types/is-hotkey": "0.1.7", "@types/jest": "28.1.6", @@ -155,8 +154,9 @@ "@types/react-test-renderer": "17.0.1", "@types/react-transition-group": "4.4.5", "@types/react-window": "1.8.5", - "@types/slate": "0.47.2", + "@types/slate": "0.47.9", "@types/slate-plain-serializer": "0.7.2", + "@types/slate-react": "0.22.9", "@types/testing-library__jest-dom": "5.14.5", "@types/testing-library__react-hooks": "^3.2.0", "@types/tinycolor2": "1.4.3", diff --git a/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx b/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx index c6d958ed9c0..324fc049624 100644 --- a/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx +++ b/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx @@ -5,9 +5,9 @@ import { Popper as ReactPopper } from 'react-popper'; import usePrevious from 'react-use/lib/usePrevious'; import { Value } from 'slate'; import Plain from 'slate-plain-serializer'; +import { Editor } from 'slate-react'; import { DataLinkBuiltInVars, GrafanaTheme2, VariableOrigin, VariableSuggestion } from '@grafana/data'; -import { Editor } from '@grafana/slate-react'; import { makeValue } from '../../index'; import { SlatePrism } from '../../slate-plugins'; @@ -95,7 +95,7 @@ export const DataLinkInput: React.FC = memo( // SelectionReference is used to position the variables suggestion relatively to current DOM selection const selectionRef = useMemo(() => new SelectionReference(), []); - const onKeyDown = React.useCallback((event: KeyboardEvent, next: () => any) => { + const onKeyDown = React.useCallback((event: React.KeyboardEvent, next: () => any) => { if (!stateRef.current.showingSuggestions) { if (event.key === '=' || event.key === '$' || (event.keyCode === 32 && event.ctrlKey)) { return setShowingSuggestions(true); @@ -208,7 +208,7 @@ export const DataLinkInput: React.FC = memo( placeholder={placeholder} value={stateRef.current.linkUrl} onChange={onUrlChange} - onKeyDown={(event, _editor, next) => onKeyDown(event as KeyboardEvent, next)} + onKeyDown={(event, _editor, next) => onKeyDown(event, next)} plugins={plugins} className={cx( styles.editor, diff --git a/packages/grafana-ui/src/components/QueryField/QueryField.test.tsx b/packages/grafana-ui/src/components/QueryField/QueryField.test.tsx index 0ce32772ca0..b661ed4b312 100644 --- a/packages/grafana-ui/src/components/QueryField/QueryField.test.tsx +++ b/packages/grafana-ui/src/components/QueryField/QueryField.test.tsx @@ -1,6 +1,6 @@ -import { shallow } from 'enzyme'; +import { mount, shallow } from 'enzyme'; import React from 'react'; -import { Editor } from 'slate'; +import { Editor } from 'slate-react'; import { createTheme } from '@grafana/data'; @@ -30,7 +30,7 @@ describe('', () => { it('should execute query on blur', () => { const onRun = jest.fn(); - const wrapper = shallow( + const wrapper = mount( ', () => { /> ); const field = wrapper.instance() as UnThemedQueryField; + const ed = wrapper.find(Editor).instance() as Editor; expect(onRun.mock.calls.length).toBe(0); - field.handleBlur(new Event('bogus'), new Editor({}), () => {}); + field.handleBlur(undefined, ed, () => {}); expect(onRun.mock.calls.length).toBe(1); }); @@ -65,7 +66,7 @@ describe('', () => { it('should run custom on blur, but not necessarily execute query', () => { const onBlur = jest.fn(); const onRun = jest.fn(); - const wrapper = shallow( + const wrapper = mount( ', () => { /> ); const field = wrapper.instance() as UnThemedQueryField; + const ed = wrapper.find(Editor).instance() as Editor; expect(onBlur.mock.calls.length).toBe(0); expect(onRun.mock.calls.length).toBe(0); - field.handleBlur(new Event('bogus'), new Editor({}), () => {}); + field.handleBlur(undefined, ed, () => {}); expect(onBlur.mock.calls.length).toBe(1); expect(onRun.mock.calls.length).toBe(0); }); diff --git a/packages/grafana-ui/src/components/QueryField/QueryField.tsx b/packages/grafana-ui/src/components/QueryField/QueryField.tsx index 9df2ee20682..f543d3597f3 100644 --- a/packages/grafana-ui/src/components/QueryField/QueryField.tsx +++ b/packages/grafana-ui/src/components/QueryField/QueryField.tsx @@ -2,12 +2,12 @@ import { css, cx } from '@emotion/css'; import classnames from 'classnames'; import { debounce } from 'lodash'; import React, { Context, PureComponent } from 'react'; -import { Value, Editor as CoreEditor } from 'slate'; +import { Value } from 'slate'; import Plain from 'slate-plain-serializer'; +import { Editor, Plugin } from 'slate-react'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { Editor, Plugin } from '@grafana/slate-react'; import { makeValue, @@ -42,7 +42,7 @@ export interface QueryFieldProps extends Themeable2 { onBlur?: () => void; onChange?: (value: string) => void; onRichValueChange?: (value: Value) => void; - onClick?: (event: Event, editor: CoreEditor, next: () => any) => any; + onClick?: (event: Event | React.MouseEvent, editor: Editor, next: () => any) => any; onTypeahead?: (typeahead: TypeaheadInput) => Promise; onWillApplySuggestion?: (suggestion: string, state: SuggestionsState) => string; placeholder?: string; @@ -67,7 +67,7 @@ export interface QueryFieldState { * Implement props.onTypeahead to use suggestions, see PromQueryField.tsx as an example. */ export class UnThemedQueryField extends PureComponent { - plugins: Plugin[]; + plugins: Array>; runOnChangeDebounced: Function; lastExecutedValue: Value | null = null; mounted = false; @@ -185,7 +185,7 @@ export class UnThemedQueryField extends PureComponent { + handleBlur = (_: React.FocusEvent | undefined, editor: Editor, next: Function) => { const { onBlur } = this.props; if (onBlur) { diff --git a/packages/grafana-ui/src/slate-plugins/braces.test.tsx b/packages/grafana-ui/src/slate-plugins/braces.test.tsx index 212d6e462dc..566761cad5b 100644 --- a/packages/grafana-ui/src/slate-plugins/braces.test.tsx +++ b/packages/grafana-ui/src/slate-plugins/braces.test.tsx @@ -1,8 +1,7 @@ import { shallow } from 'enzyme'; import React from 'react'; import Plain from 'slate-plain-serializer'; - -import { Editor } from '@grafana/slate-react'; +import { Editor } from 'slate-react'; import { BracesPlugin } from './braces'; @@ -14,7 +13,7 @@ describe('braces', () => { const value = Plain.deserialize(''); const editor = shallow(); const event = new window.KeyboardEvent('keydown', { key: '(' }); - expect(handler(event as Event, editor.instance() as any, nextMock)).toBeTruthy(); + expect(handler(event as any, editor.instance(), nextMock)).toBeTruthy(); expect(Plain.serialize(editor.instance().value)).toEqual('()'); }); @@ -22,7 +21,8 @@ describe('braces', () => { const value = Plain.deserialize('time()'); const editor = shallow(); const event = new window.KeyboardEvent('keydown', { key: 'Backspace' }); - handler(event as Event, editor.instance().moveForward(5) as any, nextMock); + editor.instance().moveForward(5); + handler(event as any, editor.instance(), nextMock); expect(Plain.serialize(editor.instance().value)).toEqual('time'); }); @@ -30,7 +30,8 @@ describe('braces', () => { const value = Plain.deserialize('time(value)'); const editor = shallow(); const event = new window.KeyboardEvent('keydown', { key: 'Backspace' }); - const handled = handler(event as Event, editor.instance().moveForward(5) as any, nextMock); + editor.instance().moveForward(5); + const handled = handler(event as any, editor.instance(), nextMock); expect(handled).toBeFalsy(); }); @@ -38,9 +39,9 @@ describe('braces', () => { const value = Plain.deserialize(''); const editor = shallow(); const opening = new window.KeyboardEvent('keydown', { key: '(' }); - expect(handler(opening as Event, editor.instance() as any, nextMock)).toBeTruthy(); + expect(handler(opening as any, editor.instance(), nextMock)).toBeTruthy(); const closing = new window.KeyboardEvent('keydown', { key: ')' }); - expect(handler(closing as Event, editor.instance() as any, nextMock)).toBeTruthy(); + expect(handler(closing as any, editor.instance(), nextMock)).toBeTruthy(); expect(Plain.serialize(editor.instance().value)).toEqual('()'); }); @@ -48,9 +49,10 @@ describe('braces', () => { const value = Plain.deserialize(''); const editor = shallow(); const event1 = new window.KeyboardEvent('keydown', { key: ')' }); - expect(handler(event1 as Event, editor.instance() as any, nextMock)).toBeFalsy(); + expect(handler(event1 as any, editor.instance(), nextMock)).toBeFalsy(); const event2 = new window.KeyboardEvent('keydown', { key: ')' }); - expect(handler(event2 as Event, editor.instance().moveBackward(1) as any, nextMock)).toBeFalsy(); + editor.instance().moveBackward(1); + expect(handler(event2 as any, editor.instance(), nextMock)).toBeFalsy(); expect(Plain.serialize(editor.instance().value)).toEqual('))'); }); }); diff --git a/packages/grafana-ui/src/slate-plugins/braces.ts b/packages/grafana-ui/src/slate-plugins/braces.ts index a98071c9bf8..7af64918c11 100644 --- a/packages/grafana-ui/src/slate-plugins/braces.ts +++ b/packages/grafana-ui/src/slate-plugins/braces.ts @@ -1,8 +1,7 @@ -import { Editor as CoreEditor, Annotation } from 'slate'; +import { Annotation } from 'slate'; +import { Plugin } from 'slate-react'; import { v4 as uuidv4 } from 'uuid'; -import { Plugin } from '@grafana/slate-react'; - const BRACES: any = { '[': ']', '{': '}', @@ -13,11 +12,10 @@ const MATCH_MARK = 'brace_match'; export function BracesPlugin(): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: Function) { - const keyEvent = event as KeyboardEvent; + onKeyDown(event, editor, next) { const { value } = editor; - switch (keyEvent.key) { + switch (event.key) { case '(': case '{': case '[': { @@ -30,10 +28,10 @@ export function BracesPlugin(): Plugin { // If text is selected, wrap selected text in parens if (value.selection.isExpanded) { - keyEvent.preventDefault(); + event.preventDefault(); editor - .insertTextByKey(startKey, startOffset, keyEvent.key) - .insertTextByKey(endKey, endOffset + 1, BRACES[keyEvent.key]) + .insertTextByKey(startKey, startOffset, event.key) + .insertTextByKey(endKey, endOffset + 1, BRACES[event.key]) .moveEndBackward(1); return true; } else if ( @@ -42,8 +40,8 @@ export function BracesPlugin(): Plugin { text[focusOffset] === ' ' || Object.values(BRACES).includes(text[focusOffset]) ) { - keyEvent.preventDefault(); - const complement = BRACES[keyEvent.key]; + event.preventDefault(); + const complement = BRACES[event.key]; const matchAnnotation = { key: `${MATCH_MARK}-${uuidv4()}`, type: `${MATCH_MARK}-${complement}`, @@ -59,7 +57,7 @@ export function BracesPlugin(): Plugin { }, object: 'annotation', } as Annotation; - editor.insertText(keyEvent.key).insertText(complement).addAnnotation(matchAnnotation).moveBackward(1); + editor.insertText(event.key).insertText(complement).addAnnotation(matchAnnotation).moveBackward(1); return true; } @@ -73,13 +71,13 @@ export function BracesPlugin(): Plugin { const offset = value.selection.anchor.offset; const nextChar = text[offset]; // Handle closing brace when it's already the next character - const complement = keyEvent.key; + const complement = event.key; const annotationType = `${MATCH_MARK}-${complement}`; const annotation = value.annotations.find( (a) => a?.type === annotationType && a.anchor.key === value.anchorText.key ); if (annotation && nextChar === complement && !value.selection.isExpanded) { - keyEvent.preventDefault(); + event.preventDefault(); editor.moveFocusForward(1).removeAnnotation(annotation).moveAnchorForward(1); return true; } @@ -92,7 +90,7 @@ export function BracesPlugin(): Plugin { const previousChar = text[offset - 1]; const nextChar = text[offset]; if (BRACES[previousChar] && BRACES[previousChar] === nextChar) { - keyEvent.preventDefault(); + event.preventDefault(); // Remove closing brace if directly following editor.deleteBackward(1).deleteForward(1).focus(); return true; diff --git a/packages/grafana-ui/src/slate-plugins/clear.test.tsx b/packages/grafana-ui/src/slate-plugins/clear.test.tsx index 20f5bc2893c..3934dbea246 100644 --- a/packages/grafana-ui/src/slate-plugins/clear.test.tsx +++ b/packages/grafana-ui/src/slate-plugins/clear.test.tsx @@ -1,8 +1,7 @@ import { shallow } from 'enzyme'; import React from 'react'; import Plain from 'slate-plain-serializer'; - -import { Editor } from '@grafana/slate-react'; +import { Editor } from 'slate-react'; import { ClearPlugin } from './clear'; @@ -16,7 +15,7 @@ describe('clear', () => { key: 'k', ctrlKey: true, }); - handler(event as Event, editor.instance() as any, () => {}); + handler(event as any, editor.instance(), () => {}); expect(Plain.serialize(editor.instance().value)).toEqual(''); }); @@ -27,7 +26,7 @@ describe('clear', () => { key: 'k', ctrlKey: true, }); - handler(event as Event, editor.instance() as any, () => {}); + handler(event as any, editor.instance(), () => {}); expect(Plain.serialize(editor.instance().value)).toEqual(''); }); @@ -38,7 +37,8 @@ describe('clear', () => { key: 'k', ctrlKey: true, }); - handler(event as Event, editor.instance().moveForward(4) as any, () => {}); + editor.instance().moveForward(4); + handler(event as any, editor.instance(), () => {}); expect(Plain.serialize(editor.instance().value)).toEqual('foo '); }); }); diff --git a/packages/grafana-ui/src/slate-plugins/clear.ts b/packages/grafana-ui/src/slate-plugins/clear.ts index 208aa088e8f..e660fed51e3 100644 --- a/packages/grafana-ui/src/slate-plugins/clear.ts +++ b/packages/grafana-ui/src/slate-plugins/clear.ts @@ -1,20 +1,17 @@ -import { Editor as CoreEditor } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import { Plugin } from 'slate-react'; // Clears the rest of the line after the caret export function ClearPlugin(): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: Function) { - const keyEvent = event as KeyboardEvent; + onKeyDown(event, editor, next) { const value = editor.value; if (value.selection.isExpanded) { return next(); } - if (keyEvent.key === 'k' && keyEvent.ctrlKey) { - keyEvent.preventDefault(); + if (event.key === 'k' && event.ctrlKey) { + event.preventDefault(); const text = value.anchorText.text; const offset = value.selection.anchor.offset; const length = text.length; diff --git a/packages/grafana-ui/src/slate-plugins/clipboard.ts b/packages/grafana-ui/src/slate-plugins/clipboard.ts index 6a20e4d4a5c..6bbc1c3bdc8 100644 --- a/packages/grafana-ui/src/slate-plugins/clipboard.ts +++ b/packages/grafana-ui/src/slate-plugins/clipboard.ts @@ -1,6 +1,4 @@ -import { Editor as CoreEditor } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import { Plugin } from 'slate-react'; const getCopiedText = (textBlocks: string[], startOffset: number, endOffset: number) => { if (!textBlocks.length) { @@ -18,9 +16,8 @@ const removeBom = (str: string | undefined): string | undefined => { export function ClipboardPlugin(): Plugin { const clipboardPlugin: Plugin = { - onCopy(event: Event, editor: CoreEditor, next: () => any) { - const clipEvent = event as ClipboardEvent; - clipEvent.preventDefault(); + onCopy(event, editor, next) { + event.preventDefault(); const { document, selection } = editor.value; const { @@ -33,18 +30,17 @@ export function ClipboardPlugin(): Plugin { .map((block) => block.text); const copiedText = removeBom(getCopiedText(selectedBlocks, startOffset, endOffset)); - if (copiedText && clipEvent.clipboardData) { - clipEvent.clipboardData.setData('Text', copiedText); + if (copiedText && event.clipboardData) { + event.clipboardData.setData('Text', copiedText); } return true; }, - onPaste(event: Event, editor: CoreEditor, next: () => any) { - const clipEvent = event as ClipboardEvent; - clipEvent.preventDefault(); - if (clipEvent.clipboardData) { - const pastedValue = removeBom(clipEvent.clipboardData.getData('Text')); + onPaste(event, editor, next) { + event.preventDefault(); + if (event.clipboardData) { + const pastedValue = removeBom(event.clipboardData.getData('Text')); const lines = pastedValue?.split('\n'); if (lines && lines.length) { @@ -61,9 +57,8 @@ export function ClipboardPlugin(): Plugin { return { ...clipboardPlugin, - onCut(event: Event, editor: CoreEditor, next: () => any) { - const clipEvent = event as ClipboardEvent; - clipboardPlugin.onCopy!(clipEvent, editor, next); + onCut(event, editor, next) { + clipboardPlugin.onCopy!(event, editor, next); editor.deleteAtRange(editor.value.selection); return true; diff --git a/packages/grafana-ui/src/slate-plugins/indentation.ts b/packages/grafana-ui/src/slate-plugins/indentation.ts index 41a941c9ef6..c9266f903af 100644 --- a/packages/grafana-ui/src/slate-plugins/indentation.ts +++ b/packages/grafana-ui/src/slate-plugins/indentation.ts @@ -1,7 +1,7 @@ import { isKeyHotkey } from 'is-hotkey'; -import { RangeJSON, Range as SlateRange, Editor as CoreEditor } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import React from 'react'; +import { RangeJSON, Range as SlateRange } from 'slate'; +import { Editor, Plugin } from 'slate-react'; const isIndentLeftHotkey = isKeyHotkey('mod+['); const isShiftTabHotkey = isKeyHotkey('shift+tab'); @@ -9,7 +9,7 @@ const isIndentRightHotkey = isKeyHotkey('mod+]'); const SLATE_TAB = ' '; -const handleTabKey = (event: KeyboardEvent, editor: CoreEditor, next: Function): void => { +const handleTabKey = (event: React.KeyboardEvent, editor: Editor, next: Function): void => { const { startBlock, endBlock, @@ -31,7 +31,7 @@ const handleTabKey = (event: KeyboardEvent, editor: CoreEditor, next: Function): } }; -const handleIndent = (editor: CoreEditor, indentDirection: 'left' | 'right') => { +const handleIndent = (editor: Editor, indentDirection: 'left' | 'right') => { const curSelection = editor.value.selection; const selectedBlocks = editor.value.document.getLeafBlocksAtRange(curSelection).toArray(); @@ -74,17 +74,16 @@ const handleIndent = (editor: CoreEditor, indentDirection: 'left' | 'right') => // Clears the rest of the line after the caret export function IndentationPlugin(): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: Function) { - const keyEvent = event as KeyboardEvent; - if (isIndentLeftHotkey(keyEvent) || isShiftTabHotkey(keyEvent)) { - keyEvent.preventDefault(); + onKeyDown(event, editor, next) { + if (isIndentLeftHotkey(event) || isShiftTabHotkey(event)) { + event.preventDefault(); handleIndent(editor, 'left'); - } else if (isIndentRightHotkey(keyEvent)) { - keyEvent.preventDefault(); + } else if (isIndentRightHotkey(event)) { + event.preventDefault(); handleIndent(editor, 'right'); - } else if (keyEvent.key === 'Tab') { - keyEvent.preventDefault(); - handleTabKey(keyEvent, editor, next); + } else if (event.key === 'Tab') { + event.preventDefault(); + handleTabKey(event, editor, next); } else { return next(); } diff --git a/packages/grafana-ui/src/slate-plugins/newline.ts b/packages/grafana-ui/src/slate-plugins/newline.ts index 62c1dc1d485..2c7e0a22590 100644 --- a/packages/grafana-ui/src/slate-plugins/newline.ts +++ b/packages/grafana-ui/src/slate-plugins/newline.ts @@ -1,6 +1,4 @@ -import { Editor as CoreEditor } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import { Plugin } from 'slate-react'; function getIndent(text: string) { let offset = text.length - text.trimLeft().length; @@ -16,16 +14,15 @@ function getIndent(text: string) { export function NewlinePlugin(): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: Function) { - const keyEvent = event as KeyboardEvent; + onKeyDown(event, editor, next) { const value = editor.value; if (value.selection.isExpanded) { return next(); } - if (keyEvent.key === 'Enter') { - keyEvent.preventDefault(); + if (event.key === 'Enter') { + event.preventDefault(); const { startBlock } = value; const currentLineText = startBlock.text; diff --git a/packages/grafana-ui/src/slate-plugins/runner.test.tsx b/packages/grafana-ui/src/slate-plugins/runner.test.tsx index aa482f9b1bf..59c47c86b4b 100644 --- a/packages/grafana-ui/src/slate-plugins/runner.test.tsx +++ b/packages/grafana-ui/src/slate-plugins/runner.test.tsx @@ -1,8 +1,7 @@ import { shallow } from 'enzyme'; import React from 'react'; import Plain from 'slate-plain-serializer'; - -import { Editor } from '@grafana/slate-react'; +import { Editor } from 'slate-react'; import { RunnerPlugin } from './runner'; @@ -12,10 +11,13 @@ describe('runner', () => { it('should execute query when enter with shift is pressed', () => { const value = Plain.deserialize(''); - const editor = shallow(); + const editor = shallow(); handler( - { key: 'Enter', shiftKey: true, preventDefault: () => {} } as KeyboardEvent, - editor.instance() as any, + new window.KeyboardEvent('keydown', { + key: 'Enter', + shiftKey: true, + }) as any, + editor.instance() as Editor, () => {} ); expect(mockHandler).toBeCalled(); diff --git a/packages/grafana-ui/src/slate-plugins/runner.ts b/packages/grafana-ui/src/slate-plugins/runner.ts index 9c21f7b466e..1b1c93d3403 100644 --- a/packages/grafana-ui/src/slate-plugins/runner.ts +++ b/packages/grafana-ui/src/slate-plugins/runner.ts @@ -1,17 +1,14 @@ -import { Editor as CoreEditor } from 'slate'; +import React from 'react'; +import { Plugin } from 'slate-react'; -import { Plugin } from '@grafana/slate-react'; - -export function RunnerPlugin({ handler }: any): Plugin { +export function RunnerPlugin({ handler }: { handler?: (e: React.KeyboardEvent) => void }): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: Function) { - const keyEvent = event as KeyboardEvent; - + onKeyDown(event, editor, next) { // Handle enter - if (handler && keyEvent.key === 'Enter' && (keyEvent.shiftKey || keyEvent.ctrlKey)) { + if (handler && event.key === 'Enter' && (event.shiftKey || event.ctrlKey)) { // Submit on Enter - keyEvent.preventDefault(); - handler(keyEvent); + event.preventDefault(); + handler(event); return editor; } diff --git a/packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts b/packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts index 54af62f3a24..3f1a7934dbe 100644 --- a/packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts +++ b/packages/grafana-ui/src/slate-plugins/selection_shortcuts.ts @@ -1,17 +1,14 @@ import { isKeyHotkey } from 'is-hotkey'; -import { Editor as CoreEditor } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import { Plugin } from 'slate-react'; const isSelectLineHotkey = isKeyHotkey('mod+l'); // Clears the rest of the line after the caret export function SelectionShortcutsPlugin(): Plugin { return { - onKeyDown(event: Event, editor: CoreEditor, next: () => any) { - const keyEvent = event as KeyboardEvent; - if (isSelectLineHotkey(keyEvent)) { - keyEvent.preventDefault(); + onKeyDown(event, editor, next) { + if (isSelectLineHotkey(event)) { + event.preventDefault(); const { focusBlock, document } = editor.value; editor.moveAnchorToStartOfBlock(); diff --git a/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts b/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts index 2062d9347f5..2943bd47443 100644 --- a/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts +++ b/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts @@ -1,7 +1,6 @@ import Prism, { LanguageMap } from 'prismjs'; import { Block, Text, Decoration } from 'slate'; - -import { Plugin } from '@grafana/slate-react'; +import { Plugin } from 'slate-react'; import TOKEN_MARK from './TOKEN_MARK'; import Options, { OptionsFormat } from './options'; diff --git a/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx b/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx index c698f29cf42..4964fe5b62d 100644 --- a/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx +++ b/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx @@ -1,8 +1,7 @@ import { Record } from 'immutable'; import React from 'react'; import { Mark, Node, Decoration } from 'slate'; - -import { Editor } from '@grafana/slate-react'; +import { Editor } from 'slate-react'; import TOKEN_MARK from './TOKEN_MARK'; diff --git a/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx b/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx index aed96f1e346..1cbc164950c 100644 --- a/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx +++ b/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx @@ -1,7 +1,6 @@ import { render } from 'enzyme'; import _ from 'lodash'; // eslint-disable-line lodash/import-scope - -import { Plugin as SlatePlugin } from '@grafana/slate-react'; +import { Plugin as SlatePlugin } from 'slate-react'; import { CompletionItemGroup, SuggestionsState } from '../types'; import { SearchFunctionType } from '../utils'; diff --git a/packages/grafana-ui/src/slate-plugins/suggestions.tsx b/packages/grafana-ui/src/slate-plugins/suggestions.tsx index 20ccb852262..c893ad38b94 100644 --- a/packages/grafana-ui/src/slate-plugins/suggestions.tsx +++ b/packages/grafana-ui/src/slate-plugins/suggestions.tsx @@ -1,8 +1,6 @@ import { debounce, sortBy } from 'lodash'; import React from 'react'; -import { Editor as CoreEditor } from 'slate'; - -import { Plugin as SlatePlugin } from '@grafana/slate-react'; +import { Editor, Plugin as SlatePlugin } from 'slate-react'; import { Typeahead } from '../components/Typeahead/Typeahead'; import { CompletionItem, SuggestionsState, TypeaheadInput, TypeaheadOutput } from '../types'; @@ -15,8 +13,8 @@ export const TYPEAHEAD_DEBOUNCE = 250; // Commands added to the editor by this plugin. interface SuggestionsPluginCommands { - selectSuggestion: (suggestion: CompletionItem) => CoreEditor; - applyTypeahead: (suggestion: CompletionItem) => CoreEditor; + selectSuggestion: (suggestion: CompletionItem) => Editor; + applyTypeahead: (suggestion: CompletionItem) => Editor; } export function SuggestionsPlugin({ @@ -65,16 +63,15 @@ export function SuggestionsPlugin({ return next(); }, - onKeyDown: (event: Event, editor, next) => { - const keyEvent = event as KeyboardEvent; + onKeyDown: (event, editor, next) => { const currentSuggestions = state.groupedItems; const hasSuggestions = currentSuggestions.length; - switch (keyEvent.key) { + switch (event.key) { case 'Escape': { if (hasSuggestions) { - keyEvent.preventDefault(); + event.preventDefault(); state = { ...state, @@ -91,16 +88,16 @@ export function SuggestionsPlugin({ case 'ArrowDown': case 'ArrowUp': if (hasSuggestions) { - keyEvent.preventDefault(); - typeaheadRef.moveMenuIndex(keyEvent.key === 'ArrowDown' ? 1 : -1); + event.preventDefault(); + typeaheadRef.moveMenuIndex(event.key === 'ArrowDown' ? 1 : -1); return; } break; case 'Enter': { - if (!(keyEvent.shiftKey || keyEvent.ctrlKey) && hasSuggestions) { - keyEvent.preventDefault(); + if (!(event.shiftKey || event.ctrlKey) && hasSuggestions) { + event.preventDefault(); return typeaheadRef.insertSuggestion(); } @@ -109,7 +106,7 @@ export function SuggestionsPlugin({ case 'Tab': { if (hasSuggestions) { - keyEvent.preventDefault(); + event.preventDefault(); return typeaheadRef.insertSuggestion(); } @@ -118,7 +115,7 @@ export function SuggestionsPlugin({ default: { // Don't react on meta keys - if (keyEvent.key.length === 1) { + if (event.key.length === 1) { handleTypeaheadDebounced(editor, setState, onTypeahead, cleanText); } break; @@ -129,7 +126,7 @@ export function SuggestionsPlugin({ }, commands: { - selectSuggestion: (editor: CoreEditor, suggestion: CompletionItem): CoreEditor => { + selectSuggestion: (editor, suggestion: CompletionItem): Editor => { const suggestions = state.groupedItems; if (!suggestions || !suggestions.length) { return editor; @@ -141,7 +138,7 @@ export function SuggestionsPlugin({ return ed; }, - applyTypeahead: (editor: CoreEditor, suggestion: CompletionItem): CoreEditor => { + applyTypeahead: (editor, suggestion: CompletionItem) => { let suggestionText = suggestion.insertText || suggestion.label; const preserveSuffix = suggestion.kind === 'function'; @@ -169,7 +166,8 @@ export function SuggestionsPlugin({ // If new-lines, apply suggestion as block if (suggestionText.match(/\n/)) { const fragment = makeFragment(suggestionText); - return editor.deleteBackward(backward).deleteForward(forward).insertFragment(fragment).focus(); + editor.deleteBackward(backward).deleteForward(forward).insertFragment(fragment).focus(); + return editor; } state = { @@ -177,13 +175,15 @@ export function SuggestionsPlugin({ groupedItems: [], }; - return editor + editor .snapshotSelection() .deleteBackward(backward) .deleteForward(forward) .insertText(suggestionText) .moveForward(move) .focus(); + + return editor; }, }, @@ -203,7 +203,7 @@ export function SuggestionsPlugin({ prefix={state.typeaheadPrefix} isOpen={!!state.groupedItems.length} groupedItems={state.groupedItems} - onSelectSuggestion={(editor as CoreEditor & SuggestionsPluginCommands).selectSuggestion} + onSelectSuggestion={(editor as Editor & SuggestionsPluginCommands).selectSuggestion} /> ); @@ -212,7 +212,7 @@ export function SuggestionsPlugin({ } const handleTypeahead = async ( - editor: CoreEditor, + editor: Editor, onStateChange: (state: Partial) => void, onTypeahead?: (typeahead: TypeaheadInput) => Promise, cleanText?: (text: string) => string diff --git a/packages/grafana-ui/src/types/completion.ts b/packages/grafana-ui/src/types/completion.ts index f8e012eab81..18f0d9c4d70 100644 --- a/packages/grafana-ui/src/types/completion.ts +++ b/packages/grafana-ui/src/types/completion.ts @@ -1,4 +1,5 @@ -import { Value, Editor as CoreEditor } from 'slate'; +import { Value } from 'slate'; +import { Editor } from 'slate-react'; import { SearchFunctionType } from '../utils'; @@ -133,7 +134,7 @@ export interface TypeaheadInput { wrapperClasses: string[]; labelKey?: string; value?: Value; - editor?: CoreEditor; + editor?: Editor; } export interface SuggestionsState { diff --git a/packages/grafana-ui/tsconfig.build.json b/packages/grafana-ui/tsconfig.build.json index 6452db61646..2ce1fd65c43 100644 --- a/packages/grafana-ui/tsconfig.build.json +++ b/packages/grafana-ui/tsconfig.build.json @@ -2,7 +2,6 @@ "compilerOptions": { "paths": { "@emotion/core": ["./src/types/emotion-core-stub.d.ts"], - "@grafana/slate-react": ["slate-react"], "@grafana/ui": ["."] } }, diff --git a/packages/jaeger-ui-components/package.json b/packages/jaeger-ui-components/package.json index d5d5ba5e7ef..96f3a615750 100644 --- a/packages/jaeger-ui-components/package.json +++ b/packages/jaeger-ui-components/package.json @@ -15,7 +15,6 @@ "@testing-library/user-event": "14.4.3", "@types/classnames": "^2.2.7", "@types/deep-freeze": "^0.1.1", - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5", "@types/hoist-non-react-statics": "^3.3.1", "@types/jest": "28.1.6", "@types/lodash": "4.14.182", @@ -23,6 +22,7 @@ "@types/react": "17.0.42", "@types/react-icons": "2.2.7", "@types/reselect": "2.2.0", + "@types/slate-react": "0.22.9", "@types/testing-library__jest-dom": "5.14.5", "@types/tinycolor2": "1.4.3", "enzyme": "3.11.0", diff --git a/public/app/features/alerting/unified/components/Expression.tsx b/public/app/features/alerting/unified/components/Expression.tsx index 239ea13043d..26d5dcac01e 100644 --- a/public/app/features/alerting/unified/components/Expression.tsx +++ b/public/app/features/alerting/unified/components/Expression.tsx @@ -1,9 +1,9 @@ import { css, cx } from '@emotion/css'; import { LanguageMap, languages as prismLanguages } from 'prismjs'; import React, { FC, useMemo } from 'react'; +import { Editor } from 'slate-react'; import { GrafanaTheme } from '@grafana/data'; -import { Editor } from '@grafana/slate-react'; import { makeValue, SlatePrism, useStyles } from '@grafana/ui'; import LogqlSyntax from 'app/plugins/datasource/loki/syntax'; import PromqlSyntax from 'app/plugins/datasource/prometheus/promql'; diff --git a/public/app/features/plugins/plugin_loader.ts b/public/app/features/plugins/plugin_loader.ts index 50615f1aedf..13325e9ddb0 100644 --- a/public/app/features/plugins/plugin_loader.ts +++ b/public/app/features/plugins/plugin_loader.ts @@ -13,10 +13,10 @@ import * as rxjs from 'rxjs'; import * as rxjsOperators from 'rxjs/operators'; import slate from 'slate'; import slatePlain from 'slate-plain-serializer'; +import slateReact from 'slate-react'; import * as grafanaData from '@grafana/data'; import * as grafanaRuntime from '@grafana/runtime'; -import slateReact from '@grafana/slate-react'; import * as grafanaUIraw from '@grafana/ui'; import TableModel from 'app/core/TableModel'; import config from 'app/core/config'; @@ -85,7 +85,7 @@ exposeToPlugin('react-router-dom', reactRouter); // Experimental modules exposeToPlugin('prismjs', prismjs); exposeToPlugin('slate', slate); -exposeToPlugin('@grafana/slate-react', slateReact); +exposeToPlugin('slate-react', slateReact); exposeToPlugin('slate-plain-serializer', slatePlain); exposeToPlugin('react', react); exposeToPlugin('react-dom', reactDom); diff --git a/public/app/plugins/datasource/cloudwatch/components/LogsQueryField.tsx b/public/app/plugins/datasource/cloudwatch/components/LogsQueryField.tsx index 259b9aeb6b5..1579ce1574f 100644 --- a/public/app/plugins/datasource/cloudwatch/components/LogsQueryField.tsx +++ b/public/app/plugins/datasource/cloudwatch/components/LogsQueryField.tsx @@ -2,6 +2,7 @@ import { css } from '@emotion/css'; import { LanguageMap, languages as prismLanguages } from 'prismjs'; import React, { ReactNode } from 'react'; import { Node, Plugin } from 'slate'; +import { Editor } from 'slate-react'; import { AbsoluteTimeRange, QueryEditorProps } from '@grafana/data'; import { BracesPlugin, LegacyForms, QueryField, SlatePrism, TypeaheadInput, TypeaheadOutput } from '@grafana/ui'; @@ -48,7 +49,7 @@ export class CloudWatchLogsQueryField extends React.PureComponent>; constructor(props: CloudWatchLogsQueryFieldProps, context: React.Context) { super(props, context); diff --git a/public/app/plugins/datasource/loki/components/LokiQueryField.tsx b/public/app/plugins/datasource/loki/components/LokiQueryField.tsx index 5dc121a52bc..6fbdfa768b6 100644 --- a/public/app/plugins/datasource/loki/components/LokiQueryField.tsx +++ b/public/app/plugins/datasource/loki/components/LokiQueryField.tsx @@ -1,6 +1,7 @@ import { LanguageMap, languages as prismLanguages } from 'prismjs'; import React, { ReactNode } from 'react'; import { Plugin, Node } from 'slate'; +import { Editor } from 'slate-react'; import { QueryEditorProps } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime'; @@ -83,7 +84,7 @@ interface LokiQueryFieldState { } export class LokiQueryField extends React.PureComponent { - plugins: Plugin[]; + plugins: Array>; _isMounted = false; constructor(props: LokiQueryFieldProps) { diff --git a/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx b/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx index 06961e3ee36..79a53c3c3b6 100644 --- a/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx @@ -1,6 +1,7 @@ import { LanguageMap, languages as prismLanguages } from 'prismjs'; import React, { ReactNode } from 'react'; import { Plugin } from 'slate'; +import { Editor } from 'slate-react'; import { CoreApp, isDataFrame, QueryEditorProps, QueryHint, TimeRange, toLegacyResponseData } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime/src'; @@ -85,7 +86,7 @@ interface PromQueryFieldState { } class PromQueryField extends React.PureComponent { - plugins: Plugin[]; + plugins: Array>; declare languageProviderInitializationPromise: CancelablePromise; constructor(props: PromQueryFieldProps, context: React.Context) { diff --git a/yarn.lock b/yarn.lock index 11c507cae25..bf57960e9fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5036,35 +5036,6 @@ __metadata: languageName: unknown linkType: soft -"@grafana/slate-react@npm:0.22.10-grafana": - version: 0.22.10-grafana - resolution: "@grafana/slate-react@npm:0.22.10-grafana" - dependencies: - debug: ^3.1.0 - get-window: ^1.1.1 - is-window: ^1.0.2 - lodash: ^4.1.1 - memoize-one: ^4.0.0 - prop-types: ^15.5.8 - react-immutable-proptypes: ^2.1.0 - selection-is-backward: ^1.0.0 - slate-base64-serializer: ^0.2.111 - slate-dev-environment: ^0.2.2 - slate-hotkeys: ^0.2.9 - slate-plain-serializer: ^0.7.10 - slate-prop-types: ^0.5.41 - slate-react-placeholder: ^0.2.8 - tiny-invariant: ^1.0.1 - tiny-warning: ^0.0.3 - peerDependencies: - immutable: ">=3.8.1 || >4.0.0-rc" - react: ">=16.6.0" - react-dom: ">=16.6.0" - slate: ">=0.47.0" - checksum: 3417c53d9d0d2f46d3624037b1094a6786019c52e84d4ed3a91fbac232e67805cb299c3a6af7a1b8fd98cc2c60455103dd1d87eb6e7dd95df3b96b72f94cedd5 - languageName: node - linkType: hard - "@grafana/toolkit@9.2.0-pre, @grafana/toolkit@workspace:*, @grafana/toolkit@workspace:packages/grafana-toolkit": version: 0.0.0-use.local resolution: "@grafana/toolkit@workspace:packages/grafana-toolkit" @@ -5177,7 +5148,6 @@ __metadata: "@grafana/data": 9.2.0-pre "@grafana/e2e-selectors": 9.2.0-pre "@grafana/schema": 9.2.0-pre - "@grafana/slate-react": 0.22.10-grafana "@grafana/tsconfig": ^1.2.0-rc1 "@mdx-js/react": 1.6.22 "@monaco-editor/react": 4.4.5 @@ -5217,7 +5187,6 @@ __metadata: "@types/d3": 7.4.0 "@types/enzyme": 3.10.12 "@types/enzyme-adapter-react-16": 1.0.6 - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5" "@types/hoist-non-react-statics": 3.3.1 "@types/is-hotkey": 0.1.7 "@types/jest": 28.1.6 @@ -5237,8 +5206,9 @@ __metadata: "@types/react-test-renderer": 17.0.1 "@types/react-transition-group": 4.4.5 "@types/react-window": 1.8.5 - "@types/slate": 0.47.2 + "@types/slate": 0.47.9 "@types/slate-plain-serializer": 0.7.2 + "@types/slate-react": 0.22.9 "@types/testing-library__jest-dom": 5.14.5 "@types/testing-library__react-hooks": ^3.2.0 "@types/tinycolor2": 1.4.3 @@ -5306,8 +5276,9 @@ __metadata: rollup-plugin-svg-import: ^1.6.0 rxjs: 7.5.6 sass-loader: 13.0.2 - slate: 0.47.8 - slate-plain-serializer: 0.7.10 + slate: 0.47.9 + slate-plain-serializer: 0.7.11 + slate-react: 0.22.10 storybook-dark-mode: 1.1.0 style-loader: 3.3.1 terser-webpack-plugin: 5.3.3 @@ -5463,7 +5434,6 @@ __metadata: "@testing-library/user-event": 14.4.3 "@types/classnames": ^2.2.7 "@types/deep-freeze": ^0.1.1 - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5" "@types/hoist-non-react-statics": ^3.3.1 "@types/jest": 28.1.6 "@types/lodash": 4.14.182 @@ -5471,6 +5441,7 @@ __metadata: "@types/react": 17.0.42 "@types/react-icons": 2.2.7 "@types/reselect": 2.2.0 + "@types/slate-react": 0.22.9 "@types/testing-library__jest-dom": 5.14.5 "@types/tinycolor2": 1.4.3 chance: ^1.0.10 @@ -11198,17 +11169,6 @@ __metadata: languageName: node linkType: hard -"@types/grafana__slate-react@npm:@types/slate-react@0.22.5": - version: 0.22.5 - resolution: "@types/slate-react@npm:0.22.5" - dependencies: - "@types/react": "*" - "@types/slate": "*" - immutable: ^3.8.2 - checksum: afc83c7f47d19cc6776a8b4c14eb3894b18db2410e8274058133ed53d78ee82976f1318a707597ddc7277b1b857a4baf97b152687679f4e9757bb8c662508164 - languageName: node - linkType: hard - "@types/hast@npm:^2.0.0": version: 2.3.4 resolution: "@types/hast@npm:2.3.4" @@ -12143,13 +12103,24 @@ __metadata: languageName: node linkType: hard -"@types/slate@npm:0.47.2": - version: 0.47.2 - resolution: "@types/slate@npm:0.47.2" +"@types/slate-react@npm:0.22.9": + version: 0.22.9 + resolution: "@types/slate-react@npm:0.22.9" + dependencies: + "@types/react": "*" + "@types/slate": "*" + immutable: ^3.8.2 + checksum: d74812f6bf651c508afb2a4fae4ae919cba992ec920ac017d1bf73b1b469959145793a716d5d114b93d1082683ab7378b5cb5b68f0ff01a6d121c8ddbbb8e2e1 + languageName: node + linkType: hard + +"@types/slate@npm:0.47.9": + version: 0.47.9 + resolution: "@types/slate@npm:0.47.9" dependencies: "@types/react": "*" immutable: ^3.8.2 - checksum: c92350f1ef366b5907356a7f3b7bd41dda548dc1002cc2bd79f6b0ff1356d3189c124a54b363ddbe22cbdeb2a75f9d1b67d4f5b2a1bb6b89b714ecf7cf0c49c2 + checksum: ce88a5c6f502fbfe9a299983766d2eb67e4fbe2f746178b2ef31330b1392b62eca96d8618753ca2af3e858b6aa4ada91a64a3dfc4e70c60785f172c240e06a45 languageName: node linkType: hard @@ -21755,7 +21726,6 @@ __metadata: "@grafana/lezer-logql": 0.0.18 "@grafana/runtime": "workspace:*" "@grafana/schema": "workspace:*" - "@grafana/slate-react": 0.22.10-grafana "@grafana/toolkit": "workspace:*" "@grafana/tsconfig": ^1.2.0-rc1 "@grafana/ui": "workspace:*" @@ -21813,7 +21783,6 @@ __metadata: "@types/eslint": 8.4.5 "@types/file-saver": 2.0.5 "@types/google.analytics": ^0.0.42 - "@types/grafana__slate-react": "npm:@types/slate-react@0.22.5" "@types/history": 4.7.11 "@types/hoist-non-react-statics": 3.3.1 "@types/jest": 28.1.6 @@ -21849,8 +21818,9 @@ __metadata: "@types/redux-mock-store": 1.0.3 "@types/reselect": 2.2.0 "@types/semver": 7.3.10 - "@types/slate": 0.47.2 + "@types/slate": 0.47.9 "@types/slate-plain-serializer": 0.7.2 + "@types/slate-react": 0.22.9 "@types/testing-library__jest-dom": 5.14.5 "@types/testing-library__react-hooks": ^3.2.0 "@types/tinycolor2": 1.4.3 @@ -22015,8 +21985,9 @@ __metadata: selecto: 1.19.1 semver: 7.3.7 sinon: 14.0.0 - slate: 0.47.8 - slate-plain-serializer: 0.7.10 + slate: 0.47.9 + slate-plain-serializer: 0.7.11 + slate-react: 0.22.10 sql-formatter-plus: ^1.3.6 style-loader: 3.3.1 stylelint: 14.9.1 @@ -34352,7 +34323,7 @@ __metadata: languageName: node linkType: hard -"slate-base64-serializer@npm:^0.2.111": +"slate-base64-serializer@npm:^0.2.112": version: 0.2.115 resolution: "slate-base64-serializer@npm:0.2.115" dependencies: @@ -34363,7 +34334,7 @@ __metadata: languageName: node linkType: hard -"slate-dev-environment@npm:^0.2.2": +"slate-dev-environment@npm:0.2.5": version: 0.2.5 resolution: "slate-dev-environment@npm:0.2.5" dependencies: @@ -34372,6 +34343,15 @@ __metadata: languageName: node linkType: hard +"slate-dev-environment@patch:slate-dev-environment@npm:0.2.5#.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch::locator=grafana%40workspace%3A.": + version: 0.2.5 + resolution: "slate-dev-environment@patch:slate-dev-environment@npm%3A0.2.5#.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch::version=0.2.5&hash=13521e&locator=grafana%40workspace%3A." + dependencies: + is-in-browser: ^1.1.3 + checksum: 1be7514ac0b10b0232f3c19e02bf5f9211850e119a235743fd46ab2f182c8b892dc58edf40130308d85d14f755b348b86ab2daea757e8ee0beb74746f653fc03 + languageName: node + linkType: hard + "slate-hotkeys@npm:^0.2.9": version: 0.2.11 resolution: "slate-hotkeys@npm:0.2.11" @@ -34382,17 +34362,17 @@ __metadata: languageName: node linkType: hard -"slate-plain-serializer@npm:0.7.10": - version: 0.7.10 - resolution: "slate-plain-serializer@npm:0.7.10" +"slate-plain-serializer@npm:0.7.11": + version: 0.7.11 + resolution: "slate-plain-serializer@npm:0.7.11" peerDependencies: immutable: ">=3.8.1" slate: ">=0.46.0" - checksum: 0fe3f736cbc48c4b9cf7cf5ec03d9cc51c0f3320e46841de4aef50767a2ef14952660e0e2e5dfe1696e7d5c952408d95144543a9a9a86973e893de840782cd2e + checksum: b8d2989562a140c4c6cada381483aa2f419c3532ebb4ed51abfa5df8128dfd8f3d845ca324d737e3711343d651a95804f91aaa1d2cdd8e96cd9602c747781a5b languageName: node linkType: hard -"slate-plain-serializer@npm:^0.7.10": +"slate-plain-serializer@npm:^0.7.11": version: 0.7.13 resolution: "slate-plain-serializer@npm:0.7.13" peerDependencies: @@ -34402,7 +34382,7 @@ __metadata: languageName: node linkType: hard -"slate-prop-types@npm:^0.5.41": +"slate-prop-types@npm:^0.5.42": version: 0.5.44 resolution: "slate-prop-types@npm:0.5.44" peerDependencies: @@ -34412,7 +34392,7 @@ __metadata: languageName: node linkType: hard -"slate-react-placeholder@npm:^0.2.8": +"slate-react-placeholder@npm:^0.2.9": version: 0.2.9 resolution: "slate-react-placeholder@npm:0.2.9" peerDependencies: @@ -34423,9 +34403,38 @@ __metadata: languageName: node linkType: hard -"slate@npm:0.47.8": - version: 0.47.8 - resolution: "slate@npm:0.47.8" +"slate-react@npm:0.22.10": + version: 0.22.10 + resolution: "slate-react@npm:0.22.10" + dependencies: + debug: ^3.1.0 + get-window: ^1.1.1 + is-window: ^1.0.2 + lodash: ^4.1.1 + memoize-one: ^4.0.0 + prop-types: ^15.5.8 + react-immutable-proptypes: ^2.1.0 + selection-is-backward: ^1.0.0 + slate-base64-serializer: ^0.2.112 + slate-dev-environment: ^0.2.2 + slate-hotkeys: ^0.2.9 + slate-plain-serializer: ^0.7.11 + slate-prop-types: ^0.5.42 + slate-react-placeholder: ^0.2.9 + tiny-invariant: ^1.0.1 + tiny-warning: ^0.0.3 + peerDependencies: + immutable: ">=3.8.1 || >4.0.0-rc" + react: ">=16.6.0" + react-dom: ">=16.6.0" + slate: ">=0.47.0" + checksum: 1ecddaf0f635205249680961d7e772cf25a60179b39ca69a34f874b2797e3c122ef405921fa2787ea0c559af48d1d79f10d7e169749f0f084c6bf366aeffdfc8 + languageName: node + linkType: hard + +"slate@npm:0.47.9": + version: 0.47.9 + resolution: "slate@npm:0.47.9" dependencies: debug: ^3.1.0 direction: ^0.1.5 @@ -34437,7 +34446,7 @@ __metadata: type-of: ^2.0.1 peerDependencies: immutable: ">=3.8.1 || >4.0.0-rc" - checksum: 6d3541abe1a727f498e0835118b98efd1a8ea2cfa9bb1b3fe9f77faf42b4afce4259e765b60bd5b8c2bd34686d5f9bcfb80b9a8807c54fee1e496a92bad563d6 + checksum: a128d1eaa4c203dbb13d197d69758341df485e42e52aea1739d05939b16df42633949f116ae9b75b95b647ec39b18867ca5c8a05dbe97eeb15cf31bc8d2edc7f languageName: node linkType: hard