From 578022b8c5163ffaf8db5870ed5ec9d5d9536477 Mon Sep 17 00:00:00 2001 From: Yassine Doghri Date: Tue, 10 Aug 2021 14:25:13 +0000 Subject: [PATCH] feat: replace slug field with interactive permalink component - create permalink-edit web component with slug editing and permalink copy functionalities - add @github/clipboard-copy-element - update npm packages - replace vscode extension lit-html with lit-plugin to get css intellisense --- .devcontainer/devcontainer.json | 2 +- app/Helpers/page_helper.php | 6 +- app/Language/en/Common.php | 3 + app/Language/en/Episode.php | 3 +- app/Language/en/Page.php | 2 +- app/Language/fr/Common.php | 3 + app/Language/fr/Episode.php | 5 +- app/Language/fr/Page.php | 2 +- app/Resources/icons/clipboard.svg | 6 + app/Resources/js/admin.ts | 1 + app/Resources/js/modules/Slugify.ts | 1 + app/Resources/js/modules/permalink-edit.ts | 215 +++++++++++++++++++++ app/Views/admin/episode/create.php | 13 +- app/Views/admin/episode/edit.php | 13 +- app/Views/admin/page/create.php | 12 +- app/Views/admin/page/edit.php | 12 +- package-lock.json | 103 +++------- package.json | 17 +- 18 files changed, 306 insertions(+), 113 deletions(-) create mode 100644 app/Resources/icons/clipboard.svg create mode 100644 app/Resources/js/modules/permalink-edit.ts diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5f66164a..ec4a6d06 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -25,7 +25,6 @@ } }, "extensions": [ - "bierner.lit-html", "bmewburn.vscode-intelephense-client", "bradlc.vscode-tailwindcss", "breezelin.phpstan", @@ -37,6 +36,7 @@ "kasik96.latte", "mikestead.dotenv", "naumovs.color-highlight", + "runem.lit-plugin", "streetsidesoftware.code-spell-checker", "stylelint.vscode-stylelint", "wayou.vscode-todo-highlight" diff --git a/app/Helpers/page_helper.php b/app/Helpers/page_helper.php index 2c9519a0..002e6ae0 100644 --- a/app/Helpers/page_helper.php +++ b/app/Helpers/page_helper.php @@ -20,17 +20,17 @@ if (! function_exists('render_page_links')) { { $pages = (new PageModel())->findAll(); $links = anchor(route_to('home'), lang('Common.home'), [ - 'class' => 'px-2 underline hover:no-underline', + 'class' => 'px-2 py-1 underline hover:no-underline', ]); $links .= anchor(route_to('credits'), lang('Person.credits'), [ - 'class' => 'px-2 underline hover:no-underline', + 'class' => 'px-2 py-1 underline hover:no-underline', ]); $links .= anchor(route_to('map'), lang('Page.map'), [ 'class' => 'px-2 underline hover:no-underline', ]); foreach ($pages as $page) { $links .= anchor($page->link, $page->title, [ - 'class' => 'px-2 underline hover:no-underline', + 'class' => 'px-2 py-1 underline hover:no-underline', ]); } diff --git a/app/Language/en/Common.php b/app/Language/en/Common.php index 28afa799..f05e5d6a 100644 --- a/app/Language/en/Common.php +++ b/app/Language/en/Common.php @@ -16,6 +16,9 @@ return [ 'more' => 'More', 'no_data' => 'No data found!', 'close' => 'Close', + 'edit' => 'Edit', + 'copy' => 'Copy', + 'copied' => 'Copied!', 'home' => 'Home', 'explicit' => 'Explicit', 'mediumDate' => '{0,date,medium}', diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php index 94f5fc16..7749b06a 100644 --- a/app/Language/en/Episode.php +++ b/app/Language/en/Episode.php @@ -67,8 +67,7 @@ return [ 'title' => 'Title', 'title_hint' => 'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.', - 'slug' => 'Slug', - 'slug_hint' => 'Used for generating the episode URL.', + 'permalink' => 'Permalink', 'season_number' => 'Season', 'episode_number' => 'Episode', 'type' => [ diff --git a/app/Language/en/Page.php b/app/Language/en/Page.php index 86eb345d..592b8784 100644 --- a/app/Language/en/Page.php +++ b/app/Language/en/Page.php @@ -18,7 +18,7 @@ return [ 'delete' => 'Delete page', 'form' => [ 'title' => 'Title', - 'slug' => 'Slug', + 'permalink' => 'Permalink', 'content' => 'Content', 'submit_create' => 'Create page', 'submit_edit' => 'Save', diff --git a/app/Language/fr/Common.php b/app/Language/fr/Common.php index 64997463..2ab2171c 100644 --- a/app/Language/fr/Common.php +++ b/app/Language/fr/Common.php @@ -16,6 +16,9 @@ return [ 'more' => 'Plus', 'no_data' => 'Aucune donnée trouvée !', 'close' => 'Fermer', + 'edit' => 'Modifier', + 'copy' => 'Copier', + 'copied' => 'Copié !', 'home' => 'Accueil', 'explicit' => 'Explicite', 'mediumDate' => '{0,date,medium}', diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php index 3a655787..678ed65b 100644 --- a/app/Language/fr/Episode.php +++ b/app/Language/fr/Episode.php @@ -67,8 +67,7 @@ return [ 'title' => 'Titre', 'title_hint' => 'Doit contenir un titre d’épisode clair et concis. Ne précisez ici aucun numéro de saison ou d’épisode.', - 'slug' => 'Identifiant', - 'slug_hint' => 'Utilisé pour générer l’adresse de l’épisode.', + 'permalink' => 'Lien permanent', 'season_number' => 'Saison', 'episode_number' => 'Épisode', 'type' => [ @@ -144,7 +143,7 @@ return [ 'submit' => 'Publier', 'submit_edit' => 'Modifier la publication', 'cancel_publication' => 'Annuler la publication', - 'message_warning' => 'Vous n’avez pas saisi de message pour l’annonce de votre épisode !', + 'message_warning' => 'Vous n’avez pas saisi de message pour l’annonce de votre épisode !', 'message_warning_hint' => 'Ajouter un message augmente l’engagement social, menant à une meilleure visibilité pour votre épisode.', 'message_warning_submit' => 'Publish quand même', ], diff --git a/app/Language/fr/Page.php b/app/Language/fr/Page.php index 8bb2ac2d..220b1a73 100644 --- a/app/Language/fr/Page.php +++ b/app/Language/fr/Page.php @@ -18,7 +18,7 @@ return [ 'delete' => 'Supprimer la page', 'form' => [ 'title' => 'Titre', - 'slug' => 'Identifiant', + 'permalink' => 'Lien permanent', 'content' => 'Contenu', 'submit_create' => 'Créer la page', 'submit_edit' => 'Enregistrer', diff --git a/app/Resources/icons/clipboard.svg b/app/Resources/icons/clipboard.svg new file mode 100644 index 00000000..4e4214b2 --- /dev/null +++ b/app/Resources/icons/clipboard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/Resources/js/admin.ts b/app/Resources/js/admin.ts index 9f9522cb..ac1ea070 100644 --- a/app/Resources/js/admin.ts +++ b/app/Resources/js/admin.ts @@ -7,6 +7,7 @@ import Dropdown from "./modules/Dropdown"; import "./modules/markdown-preview"; import "./modules/markdown-write-preview"; import MultiSelect from "./modules/MultiSelect"; +import "./modules/permalink-edit"; import PublishMessageWarning from "./modules/PublishMessageWarning"; import Select from "./modules/Select"; import SidebarToggler from "./modules/SidebarToggler"; diff --git a/app/Resources/js/modules/Slugify.ts b/app/Resources/js/modules/Slugify.ts index 0a84ac3f..41251722 100644 --- a/app/Resources/js/modules/Slugify.ts +++ b/app/Resources/js/modules/Slugify.ts @@ -29,6 +29,7 @@ const Slugify = (): void => { if (title && slug) { title.addEventListener("input", () => { slug.value = slugify(title.value); + slug.dispatchEvent(new Event("change")); }); } }; diff --git a/app/Resources/js/modules/permalink-edit.ts b/app/Resources/js/modules/permalink-edit.ts new file mode 100644 index 00000000..0dff845e --- /dev/null +++ b/app/Resources/js/modules/permalink-edit.ts @@ -0,0 +1,215 @@ +import "@github/clipboard-copy-element"; +import { css, html, LitElement, TemplateResult } from "lit"; +import { + customElement, + property, + query, + queryAssignedNodes, + state, +} from "lit/decorators.js"; + +@customElement("permalink-edit") +export class PermalinkEdit extends LitElement { + @queryAssignedNodes("domain", true) + _domain!: NodeListOf; + + @queryAssignedNodes("slug-input", true) + _slugInput!: NodeListOf; + + @query("clipboard-copy") + _clipboardCopy!: any; + + @property({ attribute: "edit-label" }) + editLabel = "Edit"; + + @property({ attribute: "copy-label" }) + copyLabel = "Copy"; + + @state() + isEditable = false; + + @state() + permalink = ""; + + @state() + slugInputEvents = [ + { + name: "change", + onEvent: (): void => { + this.setPermalink(); + }, + }, + { + name: "focus", + onEvent: (): void => { + this.editSlug(); + }, + }, + { + name: "focusin", + onEvent: (event: Event): void => { + setTimeout(() => { + (event.target as HTMLInputElement).selectionStart = ( + event.target as HTMLInputElement + ).selectionEnd = 10000; + }, 0); + }, + }, + { + name: "focusout", + onEvent: (): void => { + this.stopEdit(); + }, + }, + ]; + + connectedCallback(): void { + super.connectedCallback(); + } + + firstUpdated(): void { + // set permalink value + this.setPermalink(); + + this._clipboardCopy.addEventListener("clipboard-copy", (event: Event) => { + const notice = (event.target as HTMLDivElement).querySelector( + ".notice" + ) as HTMLSpanElement; + if (notice) { + notice.hidden = false; + setTimeout(() => { + notice.hidden = true; + }, 1000); + } + }); + + this._slugInput[0].readOnly = !this.isEditable; + this.slugInputEvents.forEach((slugInputEvent) => { + this._slugInput[0].addEventListener( + slugInputEvent.name, + slugInputEvent.onEvent + ); + }); + } + + disconnectedCallback(): void { + super.disconnectedCallback(); + + this.slugInputEvents.forEach((slugInputEvent) => { + this._slugInput[0].removeEventListener( + slugInputEvent.name, + slugInputEvent.onEvent + ); + }); + + this._clipboardCopy.removeEventListener( + "clipboard-copy", + (event: Event) => { + const notice = (event.target as HTMLDivElement).querySelector( + ".notice" + ) as HTMLSpanElement; + if (notice) { + notice.hidden = false; + setTimeout(() => { + notice.hidden = true; + }, 1000); + } + } + ); + } + + editSlug(): void { + this.isEditable = true; + this._slugInput[0].readOnly = !this.isEditable; + this._slugInput[0].focus(); + } + + stopEdit(): void { + this.isEditable = false; + this._slugInput[0].readOnly = !this.isEditable; + } + + setPermalink(): void { + this.permalink = this._domain[0].innerHTML + this._slugInput[0].value; + } + + static styles = css` + ::slotted(input[slot="slug-input"][readonly]) { + background-color: transparent !important; + border-color: transparent !important; + padding-left: 0 !important; + margin-left: -0.25rem !important; + font-weight: 600; + } + + ::slotted([slot="domain"]) { + margin-right: 0.25rem; + } + + button, + clipboard-copy { + background: transparent; + border: none; + padding: 0.25rem; + cursor: pointer; + } + + button svg, + clipboard-copy svg { + opacity: 0.6; + font-size: 1.25rem; + } + + button:hover svg, + clipboard-copy:hover svg { + opacity: 1; + } + + clipboard-copy { + position: relative; + } + + .notice { + position: absolute; + background-color: black; + color: #ffffff; + bottom: -1rem; + right: 0; + font-size: 0.75rem; + padding: 0 0.25rem; + } + `; + + render(): TemplateResult<1> { + return html`${this + .isEditable + ? "" + : html` `} + + + + + + `; + } +} diff --git a/app/Views/admin/episode/create.php b/app/Views/admin/episode/create.php index ef7e2a7d..7602c1c8 100644 --- a/app/Views/admin/episode/create.php +++ b/app/Views/admin/episode/create.php @@ -77,19 +77,22 @@ ]) ?> -" copy-label="" copied-label=""> + handle . '/episodes' ) . '/' ?> + 'slug', 'name' => 'slug', - 'class' => 'form-input mb-4', + 'class' => 'form-input flex-1 w-0 text-xs', 'value' => old('slug'), 'required' => 'required', 'data-slugify' => 'slug', -]) ?> + 'slot' => 'slug-input' + ]) ?> +
diff --git a/app/Views/admin/episode/edit.php b/app/Views/admin/episode/edit.php index 1373b351..16bb381e 100644 --- a/app/Views/admin/episode/edit.php +++ b/app/Views/admin/episode/edit.php @@ -84,19 +84,22 @@ ]) ?> -" copy-label="" copied-label=""> + handle . '/episodes' ) . '/' ?> + 'slug', 'name' => 'slug', - 'class' => 'form-input mb-4', + 'class' => 'form-input flex-1 w-0 text-xs', 'value' => old('slug', $episode->slug), 'required' => 'required', 'data-slugify' => 'slug', -]) ?> + 'slot' => 'slug-input' + ]) ?> +
diff --git a/app/Views/admin/page/create.php b/app/Views/admin/page/create.php index 75a1ef7f..087b0805 100644 --- a/app/Views/admin/page/create.php +++ b/app/Views/admin/page/create.php @@ -26,15 +26,23 @@ 'data-slugify' => 'title', ]) ?> - 'max-w-sm']) ?> + + + 'slug', 'name' => 'slug', - 'class' => 'form-input mb-4 max-w-sm', + 'class' => 'form-input flex-1 w-0 text-xs', 'value' => old('slug'), 'required' => 'required', 'data-slugify' => 'slug', + 'slot' => 'slug-input', ]) ?> +
diff --git a/app/Views/admin/page/edit.php b/app/Views/admin/page/edit.php index 7a2a581a..4f74d2c3 100644 --- a/app/Views/admin/page/edit.php +++ b/app/Views/admin/page/edit.php @@ -24,17 +24,25 @@ 'value' => old('title', $page->title), 'required' => 'required', 'data-slugify' => 'title', + 'slot' => 'slug-input', ]) ?> - 'max-w-sm']) ?> + + + 'slug', 'name' => 'slug', - 'class' => 'form-input mb-4 max-w-sm', + 'class' => 'form-input flex-1 w-0 text-xs', 'value' => old('slug', $page->slug), 'required' => 'required', 'data-slugify' => 'slug', ]) ?> +
diff --git a/package-lock.json b/package-lock.json index 605508c7..4ad9004a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,12 @@ "version": "1.0.0-alpha.80", "license": "AGPL-3.0-or-later", "dependencies": { - "@amcharts/amcharts4": "^4.10.20", + "@amcharts/amcharts4": "^4.10.21", "@amcharts/amcharts4-geodata": "^4.1.21", + "@github/clipboard-copy-element": "^1.1.2", "@github/markdown-toolbar-element": "^1.5.1", "@github/time-elements": "^3.1.2", - "@popperjs/core": "^2.9.2", + "@popperjs/core": "^2.9.3", "@vime/core": "^5.0.33", "choices.js": "^9.0.1", "flatpickr": "^4.6.9", @@ -28,25 +29,23 @@ "@semantic-release/changelog": "^5.0.1", "@semantic-release/exec": "^5.0.0", "@semantic-release/git": "^9.0.0", - "@semantic-release/gitlab": "^6.2.1", + "@semantic-release/gitlab": "^6.2.2", "@tailwindcss/forms": "^0.3.3", "@tailwindcss/line-clamp": "^0.2.1", "@tailwindcss/typography": "^0.4.1", "@types/leaflet": "^1.7.5", "@types/marked": "^2.0.4", - "@types/prosemirror-markdown": "^1.5.2", - "@types/prosemirror-view": "^1.18.0", - "@typescript-eslint/eslint-plugin": "^4.28.5", - "@typescript-eslint/parser": "^4.28.5", + "@typescript-eslint/eslint-plugin": "^4.29.1", + "@typescript-eslint/parser": "^4.29.1", "cross-env": "^7.0.3", "cssnano": "^5.0.7", "cz-conventional-changelog": "^3.3.0", - "eslint": "^7.31.0", + "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", "husky": "^7.0.1", "is-ci": "^3.0.0", - "lint-staged": "^11.1.1", + "lint-staged": "^11.1.2", "lit": "^2.0.0-rc.2", "postcss-import": "^14.0.2", "postcss-preset-env": "^6.7.0", @@ -1035,6 +1034,11 @@ "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==" }, + "node_modules/@github/clipboard-copy-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@github/clipboard-copy-element/-/clipboard-copy-element-1.1.2.tgz", + "integrity": "sha512-L6CMrcA5we0udafvoSuRCE/Ci/3xrLWKYRGup2IlhxF771bQYsQ2EB1of182pI8ZWM4oxgwzu37+igMeoZjN/A==" + }, "node_modules/@github/markdown-toolbar-element": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@github/markdown-toolbar-element/-/markdown-toolbar-element-1.5.3.tgz", @@ -1941,12 +1945,6 @@ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", "dev": true }, - "node_modules/@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -1977,23 +1975,6 @@ "@types/geojson": "*" } }, - "node_modules/@types/linkify-it": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.0.tgz", - "integrity": "sha512-x9OaQQTb1N2hPZ/LWJsqushexDvz7NgzuZxiRmZio44WPuolTZNHDBCrOxCzRVOMwamJRO2dWax5NbygOf1OTQ==", - "dev": true - }, - "node_modules/@types/markdown-it": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", - "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", - "dev": true, - "dependencies": { - "@types/highlight.js": "^9.7.0", - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, "node_modules/@types/marked": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", @@ -2009,12 +1990,6 @@ "@types/unist": "*" } }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, "node_modules/@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -2033,18 +2008,13 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "node_modules/@types/orderedmap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", - "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==", - "dev": true - }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, +<<<<<<< HEAD "node_modules/@types/prosemirror-markdown": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.4.tgz", @@ -2095,6 +2065,8 @@ "@types/prosemirror-transform": "*" } }, +======= +>>>>>>> c94a163 (feat: replace slug field with interactive permalink component) "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -20247,6 +20219,11 @@ "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==" }, + "@github/clipboard-copy-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@github/clipboard-copy-element/-/clipboard-copy-element-1.1.2.tgz", + "integrity": "sha512-L6CMrcA5we0udafvoSuRCE/Ci/3xrLWKYRGup2IlhxF771bQYsQ2EB1of182pI8ZWM4oxgwzu37+igMeoZjN/A==" + }, "@github/markdown-toolbar-element": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/@github/markdown-toolbar-element/-/markdown-toolbar-element-1.5.3.tgz", @@ -20975,12 +20952,6 @@ "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", "dev": true }, - "@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true - }, "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -21011,23 +20982,6 @@ "@types/geojson": "*" } }, - "@types/linkify-it": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.0.tgz", - "integrity": "sha512-x9OaQQTb1N2hPZ/LWJsqushexDvz7NgzuZxiRmZio44WPuolTZNHDBCrOxCzRVOMwamJRO2dWax5NbygOf1OTQ==", - "dev": true - }, - "@types/markdown-it": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz", - "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==", - "dev": true, - "requires": { - "@types/highlight.js": "^9.7.0", - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, "@types/marked": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", @@ -21043,12 +20997,6 @@ "@types/unist": "*" } }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, "@types/minimist": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", @@ -21067,18 +21015,13 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "@types/orderedmap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz", - "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw==", - "dev": true - }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, +<<<<<<< HEAD "@types/prosemirror-markdown": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/prosemirror-markdown/-/prosemirror-markdown-1.5.4.tgz", @@ -21129,6 +21072,8 @@ "@types/prosemirror-transform": "*" } }, +======= +>>>>>>> c94a163 (feat: replace slug field with interactive permalink component) "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", diff --git a/package.json b/package.json index 005821c7..b69dcc70 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,11 @@ }, "dependencies": { "@amcharts/amcharts4-geodata": "^4.1.21", - "@amcharts/amcharts4": "^4.10.20", + "@amcharts/amcharts4": "^4.10.21", + "@github/clipboard-copy-element": "^1.1.2", "@github/markdown-toolbar-element": "^1.5.1", "@github/time-elements": "^3.1.2", - "@popperjs/core": "^2.9.2", + "@popperjs/core": "^2.9.3", "@vime/core": "^5.0.33", "choices.js": "^9.0.1", "flatpickr": "^4.6.9", @@ -46,25 +47,23 @@ "@semantic-release/changelog": "^5.0.1", "@semantic-release/exec": "^5.0.0", "@semantic-release/git": "^9.0.0", - "@semantic-release/gitlab": "^6.2.1", + "@semantic-release/gitlab": "^6.2.2", "@tailwindcss/forms": "^0.3.3", "@tailwindcss/line-clamp": "^0.2.1", "@tailwindcss/typography": "^0.4.1", "@types/leaflet": "^1.7.5", "@types/marked": "^2.0.4", - "@types/prosemirror-markdown": "^1.5.2", - "@types/prosemirror-view": "^1.18.0", - "@typescript-eslint/eslint-plugin": "^4.28.5", - "@typescript-eslint/parser": "^4.28.5", + "@typescript-eslint/eslint-plugin": "^4.29.1", + "@typescript-eslint/parser": "^4.29.1", "cross-env": "^7.0.3", "cssnano": "^5.0.7", "cz-conventional-changelog": "^3.3.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", - "eslint": "^7.31.0", + "eslint": "^7.32.0", "husky": "^7.0.1", "is-ci": "^3.0.0", - "lint-staged": "^11.1.1", + "lint-staged": "^11.1.2", "lit": "^2.0.0-rc.2", "postcss-import": "^14.0.2", "postcss-preset-env": "^6.7.0",