mirror of
https://github.com/romancm/gamebrary
synced 2024-11-10 05:34:15 +00:00
Add notes wysiwyg editor
This commit is contained in:
parent
6c90bde3c6
commit
bdd6848131
13 changed files with 400 additions and 197 deletions
|
@ -21,6 +21,8 @@
|
|||
"@milkdown/preset-commonmark": "^6.4.2",
|
||||
"@milkdown/prose": "^6.4.1",
|
||||
"@milkdown/theme-nord": "^6.4.1",
|
||||
"@tiptap/starter-kit": "^2.0.0-beta.204",
|
||||
"@tiptap/vue-2": "^2.0.0-beta.204",
|
||||
"@vue-stripe/vue-stripe": "^4.4.2",
|
||||
"axios": "^0.21.1",
|
||||
"bootstrap": "^4.5.2",
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<!-- TODO: load genres const response = await this.$store.dispatch('IGDB', { path: 'genres', data: 'fields *; limit 25;' }); -->
|
||||
<!-- TODO: use https://github.com/twitchtv/igdb-api-node -->
|
||||
<!-- TODO: create button component that handles loading and showing feedback -->
|
||||
<!-- TODO: create tag component and standardize all instances -->
|
||||
<!-- TODO: auto scroll to bottom after adding product -->
|
||||
<!-- TODO: add markdown wysiwyg -->
|
||||
<!-- TODO: add help section -->
|
||||
<template>
|
||||
<main
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<portal to="pageTitle">{{ company.name }}</portal>
|
||||
<p>{{ company.description }}</p>
|
||||
<img
|
||||
v-if="company.logo"
|
||||
v-if="company.logo && company.logo.image_id"
|
||||
:src="$options.getImageUrl(company.logo.image_id)"
|
||||
alt="company.name"
|
||||
width="100"
|
||||
|
@ -25,7 +25,13 @@
|
|||
lg="2"
|
||||
>
|
||||
<router-link :to="{ name: 'game', params: { id: game.id, slug: game.slug }}">
|
||||
<b-img :src="$options.getImageUrl(game.cover.image_id)" alt="" fluid class="rounded" />
|
||||
<b-img
|
||||
v-if="game.cover && game.cover.image_id"
|
||||
:src="$options.getImageUrl(game.cover.image_id)"
|
||||
alt=""
|
||||
fluid
|
||||
class="rounded"
|
||||
/>
|
||||
<br />
|
||||
<small>{{ game.name }}</small>
|
||||
</router-link>
|
||||
|
@ -44,7 +50,7 @@
|
|||
lg="2"
|
||||
>
|
||||
<router-link :to="{ name: 'game', params: { id: game.id, slug: game.slug }}">
|
||||
<b-img :src="$options.getImageUrl(game.cover.image_id)" alt="" fluid class="rounded" />
|
||||
<b-img v-if="game.cover" :src="$options.getImageUrl(game.cover.image_id)" alt="" fluid class="rounded" />
|
||||
<br />
|
||||
<small>{{ game.name }}</small>
|
||||
</router-link>
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
</span>
|
||||
</div>
|
||||
|
||||
<!-- TODO: merge release Dates and platforms -->
|
||||
<!-- TODO: restore release dates -->
|
||||
<!-- <div class="pr-2 pb-2">
|
||||
<strong>{{ $t('board.gameModal.releaseDate') }}</strong>
|
||||
<ol v-if="releaseDates" class="list-unstyled mb-0">
|
||||
|
|
|
@ -5,15 +5,16 @@
|
|||
v-for="({ imageUrl, isVideo, isCover }, index) in gameMedia"
|
||||
:key="index"
|
||||
>
|
||||
<div
|
||||
class="mr-2 align-items-center text-center mb-2 rounded cursor-pointer position-relative"
|
||||
>
|
||||
<div class="mr-2 align-items-center text-center mb-2 rounded cursor-pointer position-relative">
|
||||
<i
|
||||
v-if="isVideo"
|
||||
class="fa-solid fa-play video-indicator position-absolute text-white"
|
||||
/>
|
||||
|
||||
<div v-if="isCover" class="position-absolute cover-indicator text-light small w-100 bg-dark rounded-bottom">
|
||||
<div
|
||||
v-if="isCover"
|
||||
class="position-absolute cover-indicator text-light small w-100 bg-dark rounded-bottom"
|
||||
>
|
||||
Cover
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template lang="html">
|
||||
<section v-if="similarGames.length" class="my-5 bg-secondary rounded p-3">
|
||||
<h2 class="text-center mb-3">You may also like</h2>
|
||||
<section v-if="similarGames.length" class="my-5 bg-light p-3">
|
||||
<h4 class="text-center mb-3">You may also like</h4>
|
||||
|
||||
<div class="similar-games">
|
||||
<router-link
|
||||
|
@ -11,7 +11,7 @@
|
|||
<b-img
|
||||
fluid
|
||||
rounded
|
||||
:src="$options.getImageUrl(game.cover.image_id, 't_cover_small_2x')"
|
||||
:src="$options.getImageUrl(game.cover.image_id, 't_cover_big_2x')"
|
||||
:alt="game.name"
|
||||
img-top
|
||||
/>
|
||||
|
@ -58,9 +58,13 @@ export default {
|
|||
<style lang="scss" rel="stylesheet/scss" scoped>
|
||||
.similar-games {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-template-columns: repeat(10, 1fr);
|
||||
grid-gap: 1rem;
|
||||
|
||||
@media(max-width: 1024px) {
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
}
|
||||
|
||||
@media(max-width: 780px) {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
|
|
|
@ -55,8 +55,6 @@
|
|||
<small>{{ name }}</small>
|
||||
</b-badge>
|
||||
</template>
|
||||
|
||||
<!-- TODO: show release dates -->
|
||||
</b-card-body>
|
||||
</b-col>
|
||||
</b-form-row>
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
<template lang="html">
|
||||
<div class="note mb-3 rounded" role="main">
|
||||
<header />
|
||||
|
||||
<div
|
||||
class="note-content"
|
||||
v-html="formattedNote"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { marked } from 'marked';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
note: {
|
||||
type: [Object, String],
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
formattedNote() {
|
||||
const note = this.note?.note || this.note;
|
||||
|
||||
return typeof note === 'object'
|
||||
? marked(note.note)
|
||||
: marked(note);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" rel="stylesheet/scss" scoped>
|
||||
.note {
|
||||
font-family: 'Gochi Hand', cursive;
|
||||
max-width: 100%;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
background-color: #fdf5ad;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-bottom: 2px solid #d5cb74;
|
||||
}
|
||||
|
||||
header {
|
||||
background-image: linear-gradient(90deg, transparent 30px, #ec7063 30px, #ec7063 33px, transparent 33px);
|
||||
background-size: 100% 1.2em;
|
||||
padding-left: 2.5rem;
|
||||
padding-right: 1rem;
|
||||
padding-top: 1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.note-content {
|
||||
background-image: linear-gradient(90deg, transparent 30px, #ec7063 30px, #ec7063 33px, transparent 33px), linear-gradient(#85c1e9 .1em, transparent .1em);
|
||||
background-size: 100% 1.2em;
|
||||
padding-bottom: 1rem;
|
||||
flex-grow: 8;
|
||||
padding-top: .2rem;
|
||||
padding-left: 3rem;
|
||||
line-height: 1.3;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" rel="stylesheet/scss">
|
||||
.note-content {
|
||||
img {
|
||||
max-width: calc(100% - 16px);
|
||||
border-radius: .25rem;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -29,73 +29,130 @@
|
|||
</b-button>
|
||||
</portal>
|
||||
|
||||
<b-col cols="12" sm="6">
|
||||
<div ref="editor" />
|
||||
|
||||
<game-note
|
||||
v-if="showPreview"
|
||||
:note="{ note }"
|
||||
class="mt-3 mt-sm-0"
|
||||
/>
|
||||
|
||||
<b-col cols="12" sm="3">
|
||||
<router-link
|
||||
v-else-if="game"
|
||||
:to="{ name: 'game', params: { id: game.id, slug: game.slug }}"
|
||||
class="float-right"
|
||||
>
|
||||
<b-img :src="$options.getImageUrl(game.cover.image_id, 't_cover_small_2x')" fluid rounded />
|
||||
<b-img
|
||||
:src="$options.getImageUrl(game.cover.image_id, 't_cover_big_2x')"
|
||||
fluid
|
||||
rounded
|
||||
/>
|
||||
</router-link>
|
||||
</b-col>
|
||||
|
||||
<b-col cols="12" sm="6">
|
||||
<form class="mt-3 mt-sm-0 mb-3 field">
|
||||
<b-form-textarea
|
||||
v-model.trim="note"
|
||||
placeholder="Type note here"
|
||||
rows="3"
|
||||
max-rows="20"
|
||||
/>
|
||||
<b-col cols="12" sm="9">
|
||||
<b-button-toolbar
|
||||
v-if="editor"
|
||||
key-nav
|
||||
class="mb-3"
|
||||
aria-label="Toolbar with button groups"
|
||||
>
|
||||
<b-button-group>
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleHeading({ level: 1 }).run()"
|
||||
v-b-tooltip.hover
|
||||
title="1"
|
||||
:variant="editor.isActive('heading', { level: 1 }) ? 'dark' : 'light'"
|
||||
>
|
||||
<span class="fa-layers fa-fw">
|
||||
<i class="fa-solid fa-heading fa-fw" />
|
||||
<i class="fa-solid fa-1" />
|
||||
</span>
|
||||
</b-button>
|
||||
|
||||
<b-link
|
||||
class="small"
|
||||
variant="link"
|
||||
v-b-modal.markdown-cheatsheet
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
|
||||
v-b-tooltip.hover
|
||||
title="2"
|
||||
:variant="editor.isActive('heading', { level: 2 }) ? 'dark' : 'light'"
|
||||
>
|
||||
<span class="fa-layers fa-fw">
|
||||
<i class="fa-solid fa-heading fa-fw" />
|
||||
<i class="fa-solid fa-2" />
|
||||
</span>
|
||||
</b-button>
|
||||
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
|
||||
v-b-tooltip.hover
|
||||
title="3"
|
||||
:variant="editor.isActive('heading', { level: 3 }) ? 'dark' : 'light'"
|
||||
>
|
||||
<span class="fa-layers fa-fw">
|
||||
<i class="fa-solid fa-heading fa-fw" />
|
||||
<i class="fa-solid fa-3" />
|
||||
</span>
|
||||
</b-button>
|
||||
</b-button-group>
|
||||
<b-button-group class="mx-1">
|
||||
<b-button
|
||||
@click="editor.chain().focus().setParagraph().run()"
|
||||
v-b-tooltip.hover
|
||||
title="Paragraph"
|
||||
:class="{ 'is-active': editor.isActive('paragraph') }"
|
||||
>
|
||||
<i class="fa-solid fa-paragraph fa-fw" />
|
||||
</b-button>
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleBold().run()"
|
||||
v-b-tooltip.hover
|
||||
title="Bold"
|
||||
:variant="editor.isActive('bold') ? 'dark' : 'light'"
|
||||
>
|
||||
<i class="fa-solid fa-bold fa-fw" />
|
||||
</b-button>
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleItalic().run()"
|
||||
v-b-tooltip.hover
|
||||
title="Italic"
|
||||
:variant="editor.isActive('italic') ? 'dark' : 'light'"
|
||||
>
|
||||
<i class="fa-solid fa-italic fa-fw" />
|
||||
</b-button>
|
||||
<b-button
|
||||
@click="editor.chain().focus().toggleStrike().run()"
|
||||
v-b-tooltip.hover
|
||||
title="Strikethrough"
|
||||
:variant="editor.isActive('strike') ? 'dark' : 'light'"
|
||||
>
|
||||
<i class="fa-solid fa-strikethrough fa-fw" />
|
||||
</b-button>
|
||||
</b-button-group>
|
||||
</b-button-toolbar>
|
||||
|
||||
<editor-content :editor="editor" />
|
||||
|
||||
<b-link
|
||||
class="small"
|
||||
variant="link"
|
||||
v-b-modal.markdown-cheatsheet
|
||||
>
|
||||
<i class="fab fa-markdown fa-fw" />
|
||||
Markdown supported
|
||||
</b-link>
|
||||
|
||||
<footer class="mt-2 d-flex">
|
||||
<b-button
|
||||
variant="primary"
|
||||
:disabled="saving"
|
||||
@click="saveNote"
|
||||
>
|
||||
<i class="fab fa-markdown fa-fw" />
|
||||
Markdown supported
|
||||
</b-link>
|
||||
<b-spinner small v-if="saving" />
|
||||
<span v-else>{{ $t('global.save') }}</span>
|
||||
</b-button>
|
||||
|
||||
<footer class="mt-2 d-flex">
|
||||
<b-button
|
||||
variant="primary"
|
||||
:disabled="saving"
|
||||
@click="saveNote"
|
||||
>
|
||||
<b-spinner small v-if="saving" />
|
||||
<span v-else>{{ $t('global.save') }}</span>
|
||||
</b-button>
|
||||
|
||||
<b-button
|
||||
variant="danger"
|
||||
class="ml-2"
|
||||
v-if="!saving"
|
||||
:disabled="deleting"
|
||||
@click="deleteNote"
|
||||
>
|
||||
<b-spinner small v-if="deleting" />
|
||||
<i v-else class="fas fa-trash fa-fw" aria-hidden />
|
||||
</b-button>
|
||||
|
||||
<b-button
|
||||
variant="light"
|
||||
class="ml-auto"
|
||||
@click="showPreview = !showPreview"
|
||||
>
|
||||
<i class="fas fa-eye fa-fw" aria-hidden />
|
||||
Toggle preview
|
||||
</b-button>
|
||||
</footer>
|
||||
</form>
|
||||
<b-button
|
||||
variant="danger"
|
||||
class="ml-2"
|
||||
v-if="!saving"
|
||||
:disabled="deleting"
|
||||
@click="deleteNote"
|
||||
>
|
||||
<b-spinner small v-if="deleting" />
|
||||
<i v-else class="fas fa-trash fa-fw" aria-hidden />
|
||||
</b-button>
|
||||
</footer>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-container>
|
||||
|
@ -105,14 +162,15 @@
|
|||
<script>
|
||||
import { mapState } from 'vuex';
|
||||
|
||||
import GameNote from '@/components/GameNote';
|
||||
import { getImageUrl } from '@/utils';
|
||||
import { Editor, EditorContent } from '@tiptap/vue-2';
|
||||
import StarterKit from '@tiptap/starter-kit';
|
||||
|
||||
export default {
|
||||
getImageUrl,
|
||||
|
||||
components: {
|
||||
GameNote,
|
||||
EditorContent,
|
||||
},
|
||||
|
||||
data() {
|
||||
|
@ -121,7 +179,7 @@ export default {
|
|||
note: '',
|
||||
loading: false,
|
||||
deleting: false,
|
||||
showPreview: false,
|
||||
editor: null,
|
||||
};
|
||||
},
|
||||
|
||||
|
@ -133,6 +191,10 @@ export default {
|
|||
this.loadGame();
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.editor.destroy()
|
||||
},
|
||||
|
||||
methods: {
|
||||
async loadGame() {
|
||||
const gameCached = this.game?.id == this.$route?.params?.id;
|
||||
|
@ -155,6 +217,20 @@ export default {
|
|||
|
||||
setNote() {
|
||||
this.note = this.notes[this.$route.params?.id] || '';
|
||||
|
||||
this.editor = new Editor({
|
||||
content: this.note,
|
||||
extensions: [StarterKit],
|
||||
editorProps: {
|
||||
attributes: {
|
||||
class: 'border rounded p-3',
|
||||
},
|
||||
},
|
||||
onUpdate: () => {
|
||||
this.note = this.editor.getHTML();
|
||||
},
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
async saveNote() {
|
||||
|
@ -193,3 +269,9 @@ export default {
|
|||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.ProseMirror {
|
||||
min-height: 50vh;
|
||||
}
|
||||
</style>
|
|
@ -1,3 +1,6 @@
|
|||
<!-- TODO: add ports -->
|
||||
<!-- TODO: add franchises -->
|
||||
<!-- TODO: add bundles -->
|
||||
<!-- TODO: improve text contrast when dark theme or bg is on -->
|
||||
<!-- TODO: load game franchises -->
|
||||
<!-- TODO: integrate with twitch -->
|
||||
|
@ -10,12 +13,12 @@
|
|||
<!-- TODO: optimize backdrop styling -->
|
||||
<template lang="html">
|
||||
<section>
|
||||
<div v-if="backdrop" class="backdrop d-none d-sm-block" :style="`background-image: url('${backdrop.url}'); height: 500px; margin-top: -54px`" />
|
||||
<b-spinner v-if="loading" class="spinner-centered" />
|
||||
|
||||
<b-container>
|
||||
<b-spinner v-if="loading" class="spinner-centered" />
|
||||
<template v-else-if="game">
|
||||
<div v-if="backdrop" class="backdrop d-none d-sm-block" :style="`background-image: url('${backdrop.url}'); height: 500px; margin-top: -54px`" />
|
||||
|
||||
<template v-else-if="game">
|
||||
<b-container>
|
||||
<portal to="pageTitle">
|
||||
<span
|
||||
v-if="showHeaderTitle"
|
||||
|
@ -107,16 +110,6 @@
|
|||
xl="9"
|
||||
>
|
||||
<article :class="darkTheme || hasWallpaper ? 'text-light' : ''">
|
||||
<aside class="supplemental-info field float-right ml-5 pb-2">
|
||||
<game-details />
|
||||
|
||||
<game-note
|
||||
v-if="note"
|
||||
:note="note"
|
||||
class="cursor-pointer mt-3 d-none d-md-block"
|
||||
@click.native="$router.push({ name: 'game.notes', params: { id: game.id, slug: game.slug } })"
|
||||
/>
|
||||
</aside>
|
||||
|
||||
<div class="d-flex justify-content-between" v-b-visible="visibleHandler">
|
||||
<h2 :class="{ 'mt-3': backdrop }">{{ game.name }}</h2>
|
||||
|
@ -124,6 +117,16 @@
|
|||
|
||||
<game-description />
|
||||
|
||||
<b-alert
|
||||
v-if="note"
|
||||
v-html="note"
|
||||
show
|
||||
class="cursor-pointer"
|
||||
variant="warning"
|
||||
@click.native="$router.push({ name: 'game.notes', params: { id: game.id, slug: game.slug } })"
|
||||
/>
|
||||
|
||||
<game-details />
|
||||
<p>Alternative names:</p>
|
||||
|
||||
<div
|
||||
|
@ -154,26 +157,26 @@
|
|||
</b-row>
|
||||
|
||||
<game-media />
|
||||
<similar-games />
|
||||
</template>
|
||||
<!-- <timeline
|
||||
v-if="twitterHandle"
|
||||
:id="twitterHandle"
|
||||
sourceType="profile"
|
||||
>
|
||||
loading...
|
||||
</timeline> -->
|
||||
</b-container>
|
||||
|
||||
<div class="pt-5" v-else>
|
||||
<div class="d-flex justify-content-center align-items-center" id="main">
|
||||
<h1 class="mr-3 pr-3 align-top border-right inline-block align-content-center">404</h1>
|
||||
<div class="inline-block align-middle">
|
||||
<h2 class="font-weight-normal lead" id="desc">Game was not found.</h2>
|
||||
</div>
|
||||
<similar-games />
|
||||
</template>
|
||||
|
||||
<div class="pt-5" v-else>
|
||||
<div class="d-flex justify-content-center align-items-center" id="main">
|
||||
<h1 class="mr-3 pr-3 align-top border-right inline-block align-content-center">404</h1>
|
||||
<div class="inline-block align-middle">
|
||||
<h2 class="font-weight-normal lead" id="desc">Game was not found.</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <timeline
|
||||
v-if="twitterHandle"
|
||||
:id="twitterHandle"
|
||||
sourceType="profile"
|
||||
>
|
||||
loading...
|
||||
</timeline> -->
|
||||
</b-container>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
|
@ -188,7 +191,6 @@ import GameRatings from '@/components/Game/GameRatings';
|
|||
import GameDescription from '@/components/Game/GameDescription';
|
||||
import SimilarGames from '@/components/Game/SimilarGames';
|
||||
// import GameSpeedruns from '@/components/Game/GameSpeedruns';
|
||||
import GameNote from '@/components/GameNote';
|
||||
import { STEAM_CATEGORY_ID, GOG_CATEGORY_ID, TWITTER_CATEGORY_ID } from '@/constants';
|
||||
import { getImageUrl } from '@/utils';
|
||||
|
||||
|
@ -197,7 +199,6 @@ export default {
|
|||
|
||||
components: {
|
||||
// AmazonLinks,
|
||||
GameNote,
|
||||
GameDescription,
|
||||
GameDetails,
|
||||
GameMedia,
|
||||
|
@ -404,14 +405,6 @@ export default {
|
|||
top: calc(50% - 25px);
|
||||
}
|
||||
|
||||
.supplemental-info {
|
||||
width: 40%;
|
||||
|
||||
@media(max-width: 780px) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.backdrop {
|
||||
height: 300px;
|
||||
background-size: cover;
|
||||
|
|
|
@ -30,7 +30,7 @@ Object.defineProperties(Vue.prototype, {
|
|||
},
|
||||
});
|
||||
|
||||
Vue.use(VueShortKey, { prevent: ['input', 'textarea'] });
|
||||
Vue.use(VueShortKey, { prevent: ['input', 'textarea', '.ProseMirror'] });
|
||||
Vue.use(PortalVue);
|
||||
Vue.use(BootstrapVue, bootstrapSettings);
|
||||
Vue.use(VueAnalytics, { id: 'UA-120053966-1', router });
|
||||
|
|
|
@ -76,9 +76,7 @@
|
|||
</div>
|
||||
</b-button>
|
||||
|
||||
<p class="note-text text-muted small" v-if="note">
|
||||
{{ note }}
|
||||
</p>
|
||||
<p class="note-text text-muted small" v-if="note" v-html="note" />
|
||||
</b-card-text>
|
||||
</b-card>
|
||||
</b-card-group>
|
||||
|
|
195
yarn.lock
195
yarn.lock
|
@ -1984,6 +1984,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
|
||||
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
|
||||
|
||||
"@popperjs/core@^2.9.0":
|
||||
version "2.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45"
|
||||
integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
|
||||
|
||||
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
|
||||
|
@ -2135,6 +2140,171 @@
|
|||
magic-string "^0.25.0"
|
||||
string.prototype.matchall "^4.0.6"
|
||||
|
||||
"@tiptap/core@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.0.0-beta.204.tgz#ec37e333718ed21b399e394cea06b7ab4653bbd3"
|
||||
integrity sha512-MH4LQE6rvX+DAy83tZH5E6gaA/hO5A6F/w5ZM6En5PcRhNsgpfQl+kjRfeVQYahxouc1mzetayhRe4XQ8PAwng==
|
||||
dependencies:
|
||||
prosemirror-commands "^1.3.1"
|
||||
prosemirror-keymap "^1.2.0"
|
||||
prosemirror-model "^1.18.1"
|
||||
prosemirror-schema-list "^1.2.2"
|
||||
prosemirror-state "^1.4.1"
|
||||
prosemirror-transform "^1.7.0"
|
||||
prosemirror-view "^1.28.2"
|
||||
|
||||
"@tiptap/extension-blockquote@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.204.tgz#afded2b41c7385a2cbbc01fd68bc9daa75f66289"
|
||||
integrity sha512-B26qM1rChbanQ4PwCpT8M1OKH27ZDFr2vUwQZosWZMRe9W5ivj9zhMGfWKDmIuKI5KwQ87y7sjcqmNEB61v81w==
|
||||
|
||||
"@tiptap/extension-bold@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.204.tgz#6ac7f931c5478afc30f2e203f967e47ee71c6fca"
|
||||
integrity sha512-IZh7BXM6we4zwEwsjsyVdb2q/Op/IOAvBBxvD6lhuE/Fmm2tWprRt2Tb9YB+IMLlH5ouiqKG1Jtk7D520ijoFg==
|
||||
|
||||
"@tiptap/extension-bubble-menu@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.204.tgz#481209921e360cfc53215f3539b7f9e9ba54356f"
|
||||
integrity sha512-rDBId9MePh5vuxStCfBQTXMvRy2kaadl76xL5jscqpOlCRVJO77IEZLNI8I/zyguDKdClw1x/zdEXBcBV3YuZQ==
|
||||
dependencies:
|
||||
prosemirror-state "^1.4.1"
|
||||
prosemirror-view "^1.28.2"
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-bullet-list@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.204.tgz#6f96a1fcb7131f5f55c60633b2deb3d6ff7271c7"
|
||||
integrity sha512-q8TtC+6wHG5bJ4Fj6h+7rIB5aL+G5214woEKRZNmRpcW4y4ZI2tTwNgxLy9cgEHgV31FwL6j6wpzYxRWwJwbeQ==
|
||||
|
||||
"@tiptap/extension-code-block@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.204.tgz#7609190a42534b30c0c3c041edcbd72bd1427d5d"
|
||||
integrity sha512-IIkZsBT7rxhK7yHnM2LRQfS6i+HNQxU+E6tRtPYF40YSg1xMZSC/xDy0k+NEU/xM6ZVesRofW3voB6svFPPDtw==
|
||||
dependencies:
|
||||
prosemirror-state "^1.4.1"
|
||||
|
||||
"@tiptap/extension-code@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.0-beta.204.tgz#886e68a618b7a11a4d4f79734b4720c4c72e162e"
|
||||
integrity sha512-uEirc6xaSRikYFrVPfqIc/q9eSx9ULmHeFIqeFtIb9omX4NSDdEQpiu6D4yylaZV1p+ZsCeBq9tE3zupCKTdlw==
|
||||
|
||||
"@tiptap/extension-document@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.204.tgz#746d1b84ae3d47b6b4073fd3378dde4ff93434ce"
|
||||
integrity sha512-1WrL8MWGJ8CCHIg6wZNI6mZ44BNiJYfiZnNPZia/dZlp+B/XxvBHoFuPOGWl7kw0Ow135NUaS8kxfEewtSJUDA==
|
||||
|
||||
"@tiptap/extension-dropcursor@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.204.tgz#ace4b43135b3593aff7f41011644223f41cc308c"
|
||||
integrity sha512-M5XT+JhxYylqYL27Tldtun8RNDa0rrLYlPeMNQECWOl9iOBNM1y37/CnX8X7YGfJu5cXKCpIZ4fuKbmnN4Ekeg==
|
||||
dependencies:
|
||||
prosemirror-dropcursor "1.5.0"
|
||||
|
||||
"@tiptap/extension-floating-menu@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.204.tgz#45913d5ddd9b01cfd0104e762736e3e175e1a2ad"
|
||||
integrity sha512-8CycAaQd3nNq251YO7kmFXDXTjlga0vU+W42K33VzscaiVzowrdfZZ3IN9Ezn3Q5v25sWbu2b9b+yVv2McNm/A==
|
||||
dependencies:
|
||||
prosemirror-state "^1.4.1"
|
||||
prosemirror-view "^1.28.2"
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-gapcursor@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.204.tgz#23b6a4eb1d21bd039599b5c38f6bc917b85c35a2"
|
||||
integrity sha512-gqnpGFkMXeFOvmyPy8kJ/i2DrzwdSm1Mwjustl/cASIRcu1Gp4l6pImdW+Gdh6gwhSEsuPctK/L5hSQvKGGKZg==
|
||||
dependencies:
|
||||
prosemirror-gapcursor "^1.3.1"
|
||||
|
||||
"@tiptap/extension-hard-break@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.204.tgz#d0cf4957249652afbfbe380c81793ca1b22d698c"
|
||||
integrity sha512-UIrIlEgcwlPcku6f4QCQZRPjAMwiPyWPT0wnL4QowoX3ddrmmzOW2WCttGulpCCcFSvD/9Vgxd3QGQ0AbjyB4g==
|
||||
|
||||
"@tiptap/extension-heading@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.204.tgz#788b05538c5e3ab9e2431cf64d80046f73c18ef3"
|
||||
integrity sha512-myb3O/IvdZ3E6aQhFUI4NkO8no4jXZGRFqjtPYwX6Vw72iHcy2ubY7EMR4k5hHxAvRbjbccpq8yAkvRHVmh/BQ==
|
||||
|
||||
"@tiptap/extension-history@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.0-beta.204.tgz#4de0a951d5e8f350a1d07f88ea625cb953478c74"
|
||||
integrity sha512-Dk64Nu2bnPutLV0Fd2H1c5ffGE+bQ2eVyWUrAGodAhZJINouN8EF7T0pZLSo0YaIlLMWsl23fImGtBEyVYQUKw==
|
||||
dependencies:
|
||||
prosemirror-history "^1.3.0"
|
||||
|
||||
"@tiptap/extension-horizontal-rule@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.204.tgz#4b88c5ddb1baa0c83bf2d3a95008d149defca424"
|
||||
integrity sha512-nluilG/AwPENvZMlCWDYFAI6ZNhKZ9eivItYFt5uKD388rIuXHyhU8N2lqIvVDZWADHyRcTm2Gs2cTM+wV5V7A==
|
||||
dependencies:
|
||||
prosemirror-state "^1.4.1"
|
||||
|
||||
"@tiptap/extension-italic@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.204.tgz#42aa3c7e08211e3d0b9587fef9bdb0dd0c9fff85"
|
||||
integrity sha512-aGKJNNbiDc9HGwCgSW4KMWjPPoI4L6RTUqzaGLbetO6WGShaSSPhGE8HiD0kLSfr6H+/cvuX3iwHjWUbgIbbcw==
|
||||
|
||||
"@tiptap/extension-list-item@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.204.tgz#c7ee6954794e963d578d6e1cf96599d184b25b33"
|
||||
integrity sha512-L4blRuqQJCwwkqnB0We5SQsWVCIFAFqZyGXuRNLaKYQgxNDkvsq/xpgFf5qyX2jONK32Ke29DKURnrTy/SHDCQ==
|
||||
|
||||
"@tiptap/extension-ordered-list@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.204.tgz#ca1f98aea9fff881e6ca5e49a54c7fac32eabd81"
|
||||
integrity sha512-5oySkWZq/Qf62Vde6KLGiW0pNnhIShKhvT1W796Hg4BxN6jvr9WT8iQQyrLNqth9ljo00wXd7V5P9qm9YWVmQw==
|
||||
|
||||
"@tiptap/extension-paragraph@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.204.tgz#e5b86793752223054e0b1768315c213e1c1937cd"
|
||||
integrity sha512-Vdo0qKsD3TjgiJlVUqyV/lkFH2MlmMPt3q0+qHqoQhG/Rirm4vzrStHfZmX6nASbXSiQJvKEVoQ18+Nk739jsA==
|
||||
|
||||
"@tiptap/extension-strike@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.204.tgz#65277e131b417959c1006b236e0976d74fc1bb55"
|
||||
integrity sha512-KwcKmpl4IIiKMlmvxc9+120tTtICwDDI20ExcFfoT0cCjrM8TA88H/xdw9Paj5Eofs7ODa75zPudKwoL3qhRZg==
|
||||
|
||||
"@tiptap/extension-text@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.0-beta.204.tgz#07dc68c02402eac3b3d580bae278d3d3630ad705"
|
||||
integrity sha512-YTUlmhdiaTRvsbxTa1VUZ2BNgsaud1OF2nSC6a3kEplREoVzJW+pbJxc1sdM5yhOW3JdXMJVTl56H30Cos4tAA==
|
||||
|
||||
"@tiptap/starter-kit@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.204.tgz#12fb0701d7c37f022b94042f430f1518beeea072"
|
||||
integrity sha512-VTjQFKyByBpCXk6k8s/o/xO5m98oJ/raLvDt3XLCehjMgqyePfv0tKjIg2MlPKe/Bbog1RgEix1O1RJy9vL4xw==
|
||||
dependencies:
|
||||
"@tiptap/core" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-blockquote" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-bold" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-bullet-list" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-code" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-code-block" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-document" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-dropcursor" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-gapcursor" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-hard-break" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-heading" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-history" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-horizontal-rule" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-italic" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-list-item" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-ordered-list" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-paragraph" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-strike" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-text" "^2.0.0-beta.204"
|
||||
|
||||
"@tiptap/vue-2@^2.0.0-beta.204":
|
||||
version "2.0.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/vue-2/-/vue-2-2.0.0-beta.204.tgz#0eb899e309878cf6a721b350b5dd1ccf4099698c"
|
||||
integrity sha512-1J7L7MV9d/R3i93y11Rstf7e4nMi8gmDZa88TyTmrjpLT7HqyuiDGM2bYrTY2JdaD4ispjmdoiF7Y0oW5pg93g==
|
||||
dependencies:
|
||||
"@tiptap/extension-bubble-menu" "^2.0.0-beta.204"
|
||||
"@tiptap/extension-floating-menu" "^2.0.0-beta.204"
|
||||
prosemirror-view "^1.28.2"
|
||||
|
||||
"@tootallnate/once@1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||
|
@ -8983,6 +9153,15 @@ prosemirror-commands@^1.3.1:
|
|||
prosemirror-state "^1.0.0"
|
||||
prosemirror-transform "^1.0.0"
|
||||
|
||||
prosemirror-dropcursor@1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.5.0.tgz#edbc61d6f71f9f924130eec8e85b0861357957c9"
|
||||
integrity sha512-vy7i77ddKyXlu8kKBB3nlxLBnsWyKUmQIPB5x8RkYNh01QNp/qqGmdd5yZefJs0s3rtv5r7Izfu2qbtr+tYAMQ==
|
||||
dependencies:
|
||||
prosemirror-state "^1.0.0"
|
||||
prosemirror-transform "^1.1.0"
|
||||
prosemirror-view "^1.1.0"
|
||||
|
||||
prosemirror-dropcursor@^1.5.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/prosemirror-dropcursor/-/prosemirror-dropcursor-1.6.0.tgz#35b891224f79319755cadbec0e075bba8e95a0a3"
|
||||
|
@ -9067,6 +9246,15 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.28.0:
|
|||
prosemirror-state "^1.0.0"
|
||||
prosemirror-transform "^1.1.0"
|
||||
|
||||
prosemirror-view@^1.28.2:
|
||||
version "1.29.1"
|
||||
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.29.1.tgz#9a4938d1a863ca76e23c6573d30e3ece2b17d9a0"
|
||||
integrity sha512-OhujVZSDsh0l0PyHNdfaBj6DBkbhYaCfbaxmTeFrMKd/eWS+G6IC+OAbmR9IsLC8Se1HSbphMaXnsXjupHL3UQ==
|
||||
dependencies:
|
||||
prosemirror-model "^1.16.0"
|
||||
prosemirror-state "^1.0.0"
|
||||
prosemirror-transform "^1.1.0"
|
||||
|
||||
proto-list@~1.2.1:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
|
||||
|
@ -10398,6 +10586,13 @@ thunky@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
|
||||
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
|
||||
|
||||
tippy.js@^6.3.7:
|
||||
version "6.3.7"
|
||||
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c"
|
||||
integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==
|
||||
dependencies:
|
||||
"@popperjs/core" "^2.9.0"
|
||||
|
||||
tmp@~0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
|
||||
|
|
Loading…
Reference in a new issue