From 9bb9e1fd5dcc6d8be89264e28415ccadba328a26 Mon Sep 17 00:00:00 2001 From: sawka Date: Tue, 21 Feb 2023 14:05:34 -0800 Subject: [PATCH] making progress on bookmarks page. styling markdown. external link handler --- package.json | 1 + src/emain.ts | 8 ++- src/main.tsx | 83 ++++++++++++++++++++++++++++-- src/model.ts | 60 +++++++++++++++++++++- src/sh2.less | 142 +++++++++++++++++++++++++++++++++++++++++++++++---- yarn.lock | 140 ++++++++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 414 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 7e25a7687..66b18b7c5 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "node-fetch": "^3.2.10", "react": "^18.1.0", "react-dom": "^18.1.0", + "react-markdown": "^8.0.5", "remark": "^14.0.2", "remark-gfm": "^3.0.1", "sprintf-js": "^1.1.2", diff --git a/src/emain.ts b/src/emain.ts index 09df91b55..542718f67 100644 --- a/src/emain.ts +++ b/src/emain.ts @@ -282,9 +282,15 @@ function createMainWindow(clientData) { if (url.startsWith("https://docs.getprompt.dev/")) { electron.shell.openExternal(url); } - if (url.startsWith("https://discord.gg/")) { + else if (url.startsWith("https://discord.gg/")) { electron.shell.openExternal(url); } + else if (url.startsWith("https://extern/?")) { + let qmark = url.indexOf("?"); + let param = url.substr(qmark+1); + let newUrl = decodeURIComponent(param); + electron.shell.openExternal(newUrl); + } }); return win; } diff --git a/src/main.tsx b/src/main.tsx index d4f109f99..ec9c86456 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -14,6 +14,8 @@ import localizedFormat from 'dayjs/plugin/localizedFormat'; import {GlobalModel, GlobalCommandRunner, Session, Cmd, Window, Screen, ScreenWindow, riToRPtr, windowWidthToCols, windowHeightToRows, termHeightFromRows, termWidthFromCols} from "./model"; import {isModKeyPress} from "./util"; import {ImageRendererModel} from "./imagerenderer"; +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' dayjs.extend(localizedFormat) @@ -2775,17 +2777,72 @@ class HistoryView extends React.Component<{}, {}> { } } +function LinkRenderer(props : any) : any { + let newUrl = "https://extern?" + encodeURIComponent(props.href); + return {props.children} +} + +function HeaderRenderer(props : any, hnum : number) : any { + return ( +
{props.children}
+ ); +} + +function CodeRenderer(props : any) : any { + return ( + {props.children} + ); +} + @mobxReact.observer class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> { + @boundMethod + handleDeleteClick() : void { + let {bookmark} = this.props; + let model = GlobalModel.bookmarksModel; + model.handleDeleteBookmark(bookmark.bookmarkid); + } + + @boundMethod + handleEditClick() : void { + console.log("do edit"); + } + render() { let bm = this.props.bookmark; - let isSelected = false; + let model = GlobalModel.bookmarksModel; + let isSelected = (model.activeBookmark.get() == bm.bookmarkid); + let markdown = bm.description ?? ""; + let markdownComponents = { + a: LinkRenderer, + h1: (props) => HeaderRenderer(props, 1), + h2: (props) => HeaderRenderer(props, 2), + h3: (props) => HeaderRenderer(props, 3), + h4: (props) => HeaderRenderer(props, 4), + h5: (props) => HeaderRenderer(props, 5), + h6: (props) => HeaderRenderer(props, 6), + code: CodeRenderer, + }; + if (bm.cmdstr.startsWith("git")) { + markdown = "Use to modify the code repo\n1. git pull\n2. git push\n3. git commit\n\n> one\n> more blockquote\n>\n> more"; + } + let hasDesc = markdown != ""; return ( -
+
-
bookmark - {bm.bookmarkid}
-
- {bm.cmdstr} +
+ +
+ +
+
+
+ {bm.cmdstr} +
+
+
+
+
); @@ -2809,7 +2866,23 @@ class BookmarksView extends React.Component<{}, {}> { + +
+ No Bookmarks.
+ Use the icon on commands to add your first bookmark. +
+
+ 0}> +
+
+ [Enter] to Select
+ [Arrow Up] / [Arrow Down] to Move in List
+ [Backspace/Delete]x2 or to Delete
+ [e] or to Edit
+
+
+
); } diff --git a/src/model.ts b/src/model.ts index 7d61f907b..aab2041bf 100644 --- a/src/model.ts +++ b/src/model.ts @@ -1585,6 +1585,55 @@ type LineFocusType = { class BookmarksModel { bookmarks : OArr = mobx.observable.array([], {name: "Bookmarks"}); + activeBookmark : OV = mobx.observable.box(null, {name: "activeBookmark"}); + editingBookmark : OV = mobx.observable.box(null, {name: "editingBookmark"}); + pendingDelete : OV = mobx.observable.box(false, {name: "pendingDelete"}); + + closeView() : void { + mobx.action(() => { + GlobalModel.activeMainView.set("session"); + })(); + } + + @boundMethod + clearPendingDelete() : void { + mobx.action(() => this.pendingDelete.set(null))(); + } + + handleDeleteBookmark(bookmarkId : string) : void { + if (this.pendingDelete.get() == null || this.pendingDelete.get() != this.activeBookmark.get()) { + mobx.action(() => this.pendingDelete.set(this.activeBookmark.get()))(); + setTimeout(this.clearPendingDelete, 2000); + return; + } + console.log("delete", bookmarkId); + } + + handleDocKeyDown(e : any) : void { + if (e.code == "Escape") { + e.preventDefault(); + this.closeView(); + return; + } + if (this.editingBookmark.get() != null) { + return; + } + if (e.code == "Backspace" || e.code == "Delete") { + if (this.activeBookmark.get() == null) { + return; + } + e.preventDefault(); + this.handleDeleteBookmark(this.activeBookmark.get()); + return; + } + if (e.code == "ArrowUp") { + } + if (e.code == "ArrowDown") { + } + if (e.code == "Enter") { + } + } + return; } class Model { @@ -1660,6 +1709,10 @@ class Model { if (isModKeyPress(e)) { return; } + if (this.activeMainView.get() == "bookmarks") { + this.bookmarksModel.handleDocKeyDown(e); + return; + } if (e.code == "Escape") { e.preventDefault(); let inputModel = this.inputModel; @@ -1943,7 +1996,12 @@ class Model { showBookmarksView(bmview : BookmarksViewType) : void { mobx.action(() => { this.activeMainView.set("bookmarks"); - this.bookmarksModel.bookmarks.replace(bmview.bookmarks || []); + let bmArr = bmview.bookmarks ?? []; + this.bookmarksModel.bookmarks.replace(bmArr); + this.bookmarksModel.activeBookmark.set(null); + if (bmArr.length > 0) { + this.bookmarksModel.activeBookmark.set(bmArr[0].bookmarkid); + } })(); } diff --git a/src/sh2.less b/src/sh2.less index 0541e2011..28ba7db78 100644 --- a/src/sh2.less +++ b/src/sh2.less @@ -118,8 +118,12 @@ html, body, #main { } .bookmarks-view { + background-color: #222; + overflow-y: auto; + .bookmarks-title { - margin: 20px 10px 10px 15px; + margin: 20px 10px 0px 5px; + padding-left: 10px; padding-bottom: 12px; .mono-font(1.5rem); color: @term-bright-white; @@ -128,17 +132,135 @@ html, body, #main { .bookmarks-list { color: white; - margin-left: 20px; + margin: 4px 10px 5px 5px; + + .no-bookmarks { + color: @term-white; + padding: 30px 10px 35px 10px; + border-bottom: 1px solid white; + } + } + + .bookmarks-help { + color: @term-white; + margin-top: 20px; + display: flex; + flex-direction: row; + align-items: center; + font-size: 12px; + + .help-entry { + margin-left: 20px; + } } .bookmark { - border-top: 1px solid #ccc; - padding: 5px 5px 5px 0; - margin-bottom: 5px; + border-bottom: 1px solid #777; + padding: 4px 5px 8px 15px; + margin-bottom: 4px; + position: relative; + display: flex; + flex-direction: row; + + .focus-indicator { + top: 0; + height: calc(100% - 4px); + } + + &.pending-delete { + background-color: #522; + } + + .bookmark-content { + flex-grow: 1; + } + + .bookmark-controls { + display: flex; + flex-direction: row; + font-size: 16px; + visibility: hidden; + color: @term-white; + + .bookmark-control:first-child { + margin-left: 0; + } + + .bookmark-control { + margin-left: 10px; + cursor: pointer; + padding: 2px; + + &:hover { + color: @term-bright-white; + } + } + } + + &:hover .bookmark-controls { + visibility: visible; + } } - .bookmark:first-child { - border-top: 0; + .bookmark-code { + code { + color: white; + .mono-font(); + background-color: black; + } + padding: 4px 10px 4px 0; + margin-top: 10px; + + &.no-desc { + margin-top: 0; + } + } + + .markdown { + color: @term-white; + + code { + background-color: black; + color: white; + .mono-font(); + padding: 5px; + } + + code.inline { + padding-top: 0; + padding-bottom: 0; + } + + .title { + color: white; + margin-bottom: 0; + } + + strong { + color: white; + } + + a { + color: #32afff; + } + + ul { + list-style-type: disc; + list-style-position: outside; + margin-left: 16px; + } + + ol { + list-style-position: outside; + margin-left: 19px; + } + + blockquote { + margin: 4px 10px 4px 10px; + border-radius: 3px; + background-color: #444; + padding: 2px 4px 2px 6px; + } } } @@ -1726,17 +1848,17 @@ input[type=checkbox] { &.selected { display: block; - background-color: #666; + background-color: #666 !important; } &.active, &.active.selected { display: block; - background-color: @tab-blue; + background-color: @tab-blue !important; } &.active.selected.fg-focus { display: block; - background-color: @tab-green; + background-color: @tab-green !important; } } diff --git a/yarn.lock b/yarn.lock index bfe7aee53..117828fd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1790,6 +1790,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" @@ -1851,7 +1858,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== -"@types/prop-types@*": +"@types/prop-types@*", "@types/prop-types@^15.0.0": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== @@ -2744,6 +2751,11 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4036,6 +4048,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hast-util-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -4267,6 +4284,11 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -4706,7 +4728,7 @@ longest-streak@^3.0.0: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -loose-envify@^1.1.0: +loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -4807,6 +4829,15 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" +mdast-util-definitions@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + mdast-util-find-and-replace@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1" @@ -4901,6 +4932,20 @@ mdast-util-phrasing@^3.0.0: "@types/mdast" "^3.0.0" unist-util-is "^5.0.0" +mdast-util-to-hast@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-definitions "^5.0.0" + micromark-util-sanitize-uri "^1.1.0" + trim-lines "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" @@ -5186,7 +5231,7 @@ micromark-util-resolve-all@^1.0.0: dependencies: micromark-util-types "^1.0.0" -micromark-util-sanitize-uri@^1.0.0: +micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee" integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg== @@ -5596,6 +5641,11 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -5973,6 +6023,20 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" +prop-types@^15.0.0: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" + integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6065,6 +6129,37 @@ react-dom@^18.1.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-markdown@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.5.tgz#c9a70a33ca9aeeafb769c6582e7e38843b9d70ad" + integrity sha512-jGJolWWmOWAvzf+xMdB9zwStViODyyFQhNB/bwCerbBKmrTmgmA599CGiOlP58OId1IMoIRsA8UdI1Lod4zb5A== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.4.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + react@^18.1.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -6199,6 +6294,16 @@ remark-parse@^10.0.0: mdast-util-from-markdown "^1.0.0" unified "^10.0.0" +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + remark-stringify@^10.0.0: version "10.0.2" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-10.0.2.tgz#50414a6983f5008eb9e72eed05f980582d1f69d7" @@ -6676,6 +6781,11 @@ source-map@^0.6.0, source-map@~0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -6809,6 +6919,13 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== +style-to-object@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37" + integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw== + dependencies: + inline-style-parser "0.1.1" + sudo-prompt@^9.1.1: version "9.2.1" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" @@ -6964,6 +7081,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" @@ -7086,11 +7208,23 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" +unist-util-generated@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + unist-util-is@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.0.tgz#37eed0617b76c114fd34d44c201aa96fd928b309" integrity sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ== +unist-util-position@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d"