Demo editor!

This commit is contained in:
Jade Ellis 2024-03-06 20:46:15 +00:00
parent ec7d880c39
commit ee705b2c34
25 changed files with 1988 additions and 127 deletions

12
packages/loro-demo/.gitignore vendored Normal file
View file

@ -0,0 +1,12 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
.vercel
.output
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

View file

@ -0,0 +1 @@
engine-strict=true

View file

@ -0,0 +1,29 @@
# build the sapper app
FROM node AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
COPY ./../.. /app/
WORKDIR /app
# FROM base AS prod-deps
# RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
FROM base AS build
ENV CI=1
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
# RUN cd packages/website; --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN cd packages/website; pnpm run build
# copy node_modules/ and other build files over
FROM node:alpine
WORKDIR /app
COPY --from=build /app/packages/website/build .
COPY --from=build /app/packages/website/package.json ./package.json
EXPOSE 3000
CMD ["node", "."]

View file

@ -0,0 +1,44 @@
{
"name": "website",
"version": "0.0.1",
"scripts": {
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
},
"devDependencies": {
"@fontsource/fira-mono": "^4.5.10",
"@neoconfetti/svelte": "^1.0.0",
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/adapter-node": "^4.0.1",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
"@types/quill": "^2.0.14",
"svelte": "^4.2.7",
"svelte-check": "^3.6.0",
"tslib": "^2.4.1",
"typescript": "^5.0.0",
"vite": "^5.0.3",
"vite-plugin-top-level-await": "^1.4.1",
"vite-plugin-wasm": "^3.3.0"
},
"type": "module",
"dependencies": {
"@steeze-ui/svelte-icon": "^1.5.0",
"loro-crdt": "^0.11.1",
"prosemirror-commands": "^1.5.2",
"prosemirror-dropcursor": "^1.8.1",
"prosemirror-gapcursor": "^1.3.2",
"prosemirror-history": "^1.3.2",
"prosemirror-inputrules": "^1.4.0",
"prosemirror-keymap": "^1.2.2",
"prosemirror-model": "^1.19.4",
"prosemirror-schema-basic": "^1.2.2",
"prosemirror-schema-list": "^1.3.0",
"prosemirror-state": "^1.4.3",
"prosemirror-view": "^1.33.1",
"quill": "^1.3.7"
}
}

13
packages/loro-demo/src/app.d.ts vendored Normal file
View file

@ -0,0 +1,13 @@
// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
namespace App {
// interface Error {}
// interface Locals {}
// interface PageData {}
// interface PageState {}
// interface Platform {}
}
}
export {};

View file

@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<!-- <link rel="icon" href="%sveltekit.assets%/favicon.png" /> -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>

View file

@ -0,0 +1,60 @@
<script lang="ts">
import url from "./logo.svg?url";
</script>
<div class="hero card edge">
<div class="logo">
<img src={url} alt="Logo" />
</div>
<div class="content">
<h1 class="title">JadedBlueEyes</h1>
<div class="description">Finally, a website!</div>
</div>
</div>
<style>
.hero {
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
gap: var(--spacing);
margin: 48px auto;
max-width: 320px;
padding: 3rem 0;
}
.logo {
width: 160px;
height: 160px;
flex-shrink: 0;
}
.content {
display: flex;
flex-direction: column;
gap: calc(var(--spacing) / 2);
}
.title {
text-align: center;
font-size: 32px;
margin: 0;
}
.description {
text-align: center;
}
@media screen and (min-width: 540px) {
.hero {
flex-direction: row;
margin: 96px auto;
max-width: 520px;
}
.title,
.description {
text-align: left;
}
}
</style>

View file

@ -0,0 +1,108 @@
<script lang="ts">
import type { Loro, LoroText } from "loro-crdt";
import { onMount } from "svelte";
import { EditorView } from "prosemirror-view";
import { EditorState, TextSelection, Plugin } from "prosemirror-state";
import { DOMParser, DOMSerializer, Node, Schema } from "prosemirror-model";
import { richTextSchema, EXPAND_CONFIG } from "./prosemirror/schema";
import { keymap } from "prosemirror-keymap";
import { baseKeymap } from "prosemirror-commands";
import { history, redo, undo } from "prosemirror-history";
import { dropCursor } from "prosemirror-dropcursor"
import { gapCursor } from "prosemirror-gapcursor"
import { richTextKeyMapPlugin } from "./prosemirror/keymap";
import menu from "./menu";
// import Hero from "$lib/Hero.svelte";
let editorNode: Element;
let loroState: Loro | null = null;
onMount(() => {
let view: EditorView;
(async () => {
let b = import(`loro-crdt`);
const Loro = (await b).Loro
loroState = new Loro();
let state = EditorState.create({
schema: richTextSchema,
// doc,
// selection,
plugins: [
// history(),
keymap({}), // {"Mod-z": undo, "Mod-y": redo, "Mod-Shift-z": redo}
keymap(baseKeymap),
dropCursor(),
gapCursor(),
richTextKeyMapPlugin,
menu
// ...plugins
]});
view = new EditorView(editorNode, {
state,
nodeViews: {
// image(node, view, getPos) {
// return new ImageView(node, view, getPos);
// }
}
});
})();
return () => {
if (view) {
view.destroy()
}
};
});
</script>
<div class="content card edge">
<!-- <div>Test</div> -->
<!-- {#if state}
<Editor state={state} document={document}/>
{/if} -->
<div bind:this={editorNode}></div>
</div>
<style>
.content {
margin: 48px auto;
max-width: calc(100% - 2*var(--spacing));
width: 520px;
padding: var(--spacing);
}
@media screen and (min-width: 540px) {
.content {
margin: 96px auto;
}
}
:global(.ProseMirror) {
margin: auto;
outline: none;
}
:global(.ProseMirror h1) {
font-size: 2em;
}
:global(.ProseMirror p) {
font-size: 1em;
line-height: 1.5em;
}
</style>

View file

@ -0,0 +1,387 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
version="1.1"
id="svg212793"
sodipodi:docname="geode.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
inkscape:export-filename="geode.png"
inkscape:export-xdpi="192.75"
inkscape:export-ydpi="192.75"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs212797" />
<sodipodi:namedview
id="namedview212795"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="168"
inkscape:cy="183.5"
inkscape:current-layer="layer2" />
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="shell"
style="display:inline">
<path
style="fill:#eff3fc;stroke:none"
d="m 358,28.5687 c -22.314,4.8151 -43.362,14.3332 -66,18.6273 -11.712,2.2216 -30.505,1.1445 -40.826,6.9823 -6.227,3.5216 -27.27989,-2.040724 -31.63089,3.556176 -10.544,13.5633 -15.24118,50.652094 -27.71418,62.513094 -13.649,12.98 -34.91579,7.93112 -48.74379,19.95912 -6.883,5.987 -36.50301,-1.20092 -41.84801,6.14808 -11.013003,15.14 -6.895308,27.95394 -17.97371,46.95347 C 70.34622,208.81524 73.2506,235.732 59,250 c -5.553,5.56 -16.1838,13.147 -18.3966,21.001 -1.5853,5.626 2.7806,10.998 4.5617,16 5.404,15.173 11.93,30.04 17.9128,44.999 4.0708,10.178 7.3728,21.969 13.7608,30.985 20.9293,29.54 54.9253,45.673 84.1613,65.182 18.197,12.143 37.211,30.728 57.424,39.015 5.772,2.366 14.418,0.818 20.576,0.818 13.272,0 29.046,4.44 41.999,1.61 6.483,-1.417 11.961,-7.069 17.172,-10.879 10.382,-7.593 21.227,-14.68 31.999,-21.696 11.03,-7.184 23.027,-13.844 34.83,-19.662 6.434,-3.171 15.141,-5.108 20.502,-10.072 8.001,-7.411 11.871,-22.704 16.767,-32.286 7.719,-15.109 19.713,-33.516 23.213,-50.015 1.635,-7.706 0.214,-16.164 0.557,-24 1.103,-25.185 -0.972,-52.031 2.146,-77 1.925,-15.411 14.007,-28.63 19,-43 1.786,-5.139 0.815,-11.628 0.815,-17 0,-16.952 0.978,-36.37 -2.275,-52.999 C 443.726,100.776 431.165,91.317 425.275,83 417.613,72.1811 414.021,54.6241 404.606,45.6096 398.169,39.4451 385.299,36.75 377,33.6813 c -5.618,-2.0771 -12.876,-6.434 -19,-5.1126 z"
id="path212571"
sodipodi:nodetypes="cscscscccccccccsccscccccccsccccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Inner crystals"
style="display:inline">
<path
style="fill:#0050dc;stroke:none"
d="m 255.99582,136.24692 c -13.28325,3.13564 -23.96249,17.05477 -29.45978,29.55285 -7.83152,9.21825 -20.73659,12.69624 -27.22374,23.30923 -7.80712,9.56771 -12.45139,22.61213 -24.40613,27.99813 -8.9165,6.50572 -15.18475,16.83023 -24.31444,23.15662 -7.49933,8.7785 -9.79295,20.66701 -11.86171,32.15178 -0.59871,14.13299 11.03896,24.47538 19.01228,34.79576 7.83515,8.18656 10.53435,19.15916 11.78624,29.97498 3.91648,14.32454 21.0672,9.27785 29.0169,18.13391 1.93155,2.63536 10.71773,12.96393 10.48045,7.51081 -4.24181,-9.98405 -17.28154,-13.36069 -23.69493,-18.55586 -1.70966,-9.77325 8.86086,-22.42721 18.04466,-15.38059 10.56155,3.99802 23.1208,11.06031 34.00268,4.10733 7.22764,-9.33734 -12.89517,-12.85673 -9.05407,-24.00526 -0.64439,-12.19441 -0.2895,-26.63161 -7.9351,-37.06001 -4.70022,-13.18538 16.96154,-22.6174 26.14203,-26.51669 12.48137,-4.27105 6.25379,-13.33803 0.77433,-22.76358 -3.65216,-10.86026 -9.59206,-20.57054 -15.1732,-30.4357 -4.75347,-9.6475 6.26105,-14.53668 13.62472,-16.75571 8.99759,-3.04339 19.27257,-9.58524 18.4482,-20.44754 -0.35505,-5.59721 -4.3945,-15.53456 -8.20939,-18.77046 z"
id="path212631"
sodipodi:nodetypes="ccscccccccccscccccccc" />
<path
style="fill:#0054dc;stroke:none"
d="M 253.59191,137.06128 339,125 c 0.122,5.912 3.474,13.406 1.015,19 -9.879,22.469 -35.14666,28.31496 -35.22166,55.70896 l 25.60833,-5.84021 23.05008,-7.01621 8.87739,27.72018 c 2.86536,6.57179 7.94269,-2.34106 14.12384,-4.87639 l 1.07777,-19.96429 c 14.592,-26.006 7.75436,-63.6374 -10.36964,-86.5754 -3.456,-4.374003 -12.3457,-7.344649 -17.3887,-10.094649 -6.827,-3.7233 -23.69013,-0.244866 -30.93413,0.742134 -25.862,3.522 -56.79537,14.010155 -65.24637,43.257155 z"
id="path212609"
sodipodi:nodetypes="cccccccccsccc" />
<path
style="fill:#0074e4;stroke:none"
d="M 255.046,135.4849 C 255.049,159.3279 273.804,178.62 279,201 l 25.45709,0.43085 c 0.17019,-7.40966 5.04158,-16.16319 9.84958,-22.43119 C 322.84967,167.86566 335.678,158.011 340.412,144 342.405,138.101 339.259,131.021 339,125 Z"
id="path212629"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#007ce8;stroke:none"
d="M 263.62659,146.57473 231.08439,165.24947 218.01385,180.9759 232.986,193.996 245,219 c 5.406,0 17.29,2.245 21,-2 h 1 l 1,3 c 3.736,-5.355 10.6287,-12.48173 10.9277,-19.18773 0.414,-9.284 -10.02411,-46.85654 -15.30111,-54.23754 z"
id="path212649"
sodipodi:nodetypes="ccccccccsc" />
<path
style="fill:#0064e0;stroke:none"
d="m 305,197 -1.09282,4.03029 3.14539,69.16759 6.72751,1.76179 L 311,267 l 64.49588,5.76923 2.25403,-93.17752 C 362.02991,183.18671 334.828,187.02 320,193.333 c -4,1.702 -11.874,8.261 -15,3.667 z"
id="path212655"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#00b8f8;stroke:none"
d="M 267.45004,216.08795 246,219 l 7,22 c 5.144,-4.201 17.21204,-18.05905 14.45004,-24.91205 z"
id="path212665"
sodipodi:nodetypes="cccc" />
<path
style="fill:#35417e;stroke:none;fill-opacity:1"
d="m 267,220 c -2.972,7.065 -8.917,16.331 -15,21 l -1,3 v 1 c 6.242,12.633 2.772,39.998 21,40 3.111,9.036 21.132,13.081 29,17.004 2.955,1.473 8.192,6.301 11,3.996 h 1 l -2,6 c 5.31,-3.752 2.23934,-12.84635 1.57334,-18.40635 -2.121,-17.713 -3.53239,-35.8557 -6.64639,-53.4727 -0.753,-4.261 -0.11166,-14.21085 -1.07687,-18.97632 C 304.22987,218.08252 294.91,220 292,220 Z"
id="path212667"
sodipodi:nodetypes="cccccccccccssc" />
<path
style="fill:#1e2a55;stroke:none;fill-opacity:1"
d="m 315.78816,312.98257 0.62063,-2.67144 -2.55738,-3.77842 L 313,306 h -1 c -3.72,0.509 -7.617,-2.839 -11,-4.489 -8.764,-4.275 -23.943,-7.535 -29,-16.511 L 265.26361,282.34063 259.91,273.001 256.63164,255.49069 251.92177,245.33226 251,244 l 2,-2 c -8.932,2.627 -16.67357,6.7997 -24.67757,11.4487 -2.872,1.668 -7.69643,5.4703 -9.11043,8.7363 -2.642,6.106 6.02994,30.74744 8.05194,36.70444 3.853,11.352 5.05252,22.32956 12.84252,31.32456 5.744,6.631 25.46054,11.601 33.89354,13.724 5.678,1.429 9.766,-2.889 14,-6.065 8.982,-6.735 30.09016,-12.29043 27.78816,-24.89043 z"
id="path212669"
sodipodi:nodetypes="cccccccccccccccccccc" />
<path
style="fill:#0064e0;stroke:none"
d="M 309.172,264.26212 313.155,302 l 0.897,14.671 -9.882,8.304 -30.9445,18.90698 c 5.566,10.009 6.6495,29.20102 5.1985,40.11802 -0.609,4.585 0.839,10.237 -3.424,13 l -0.69209,2.5109 c 4.1,0.326 9.65209,0.7801 13.69209,-0.3029 9.122,-2.447 20.71,-16.98 28.039,-23.352 4.019,-3.494 15.73936,-3.33123 16.75436,-8.66723 8.768,-3.949 21.73564,-16.47077 27.35364,-24.27877 13.524,-18.799 10.90262,-54.02665 10.90262,-75.61065 z"
id="path212683"
sodipodi:nodetypes="cccccccccccccc" />
<path
style="fill:#0074e4;stroke:none"
d="m 144.0889,281.90094 c 3.881,10.475 10.56629,12.35841 14.92929,22.87041 3.967,9.555 6.67243,29.10544 13.23243,37.39344 1.893,2.391 14.46034,5.01371 17.08434,6.01971 4.785,1.833 14.8396,10.71061 22.66504,14.8155 l -0.72168,2.64874 C 218.79332,368.14274 234.136,377.144 238,384 h 1 l 3.907,-19 -0.9053,-32.78526 L 227.13508,298.50099 211.685,326 188.399,303 176,288 Z"
id="path212691"
sodipodi:nodetypes="ccccccccccccccc" />
<path
style="fill:#191f58;stroke:none;fill-opacity:1"
d="m 266.84546,220.3284 38.02813,0.96688 L 304,201 c -6.741,-0.817 -20.02581,-4.14237 -25.78481,0.27663 -4.482,3.439 -8.87973,13.96677 -11.36973,19.05177 z"
id="path212663"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#0088e8;stroke:none"
d="m 239.26322,332.35036 c 0,0 4.234,22.307 2.816,34 -1.112,9.169 -7.751,18.644 1.061,26.397 5.832,5.131 27.35697,6.64431 35.08997,6.80431 0,-12.407 1.03303,-25.76431 1.03303,-38.20131 0,-3.686 1.232,-10.193 -1.028,-13.351 -6.674,-9.327 -36.694,-16.615 -36.694,-16.615 z"
id="path1905"
sodipodi:nodetypes="csccsccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Inner filler"
style="display:inline">
<path
style="fill:#88acce;stroke:none"
d="m 352.667,48.3333 0.666,0.3334 z"
id="path212573" />
<path
style="fill:#1a417c;stroke:none"
d="m 273.98523,64.014313 1.021,3.60001 c -0.44929,0.994654 -2.89038,14.235152 2.6033,22.390425 l -0.27106,1.134885 c 5.372,0.0595 8.99733,-4.011724 13.96633,-5.069059 5.204,-0.599 6.14478,-19.332186 0.79979,-23.454313 -3.47202,0.06783 -13.75636,1.053651 -18.11936,1.398052 z"
id="path212595"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#28528e;stroke:none"
d="m 292.04892,62.610936 0.51145,0.794689 c 3.51816,5.61039 1.97342,8.942019 0.0608,10.537622 0.74047,1.521032 3.16211,0.514251 1.45362,6.785381 l -5,5 v 1 l 8,-2 c 8.478,1.837 14.799,-4.5504 23,-5.517 8.352,-0.9844 16.829,3.3142 26,2.2315 5.579,-0.6586 17.591,-3.9679 21,1.2855 l 3,1 h 1 c 2.618,-7.9158 11.368,-18.0951 18,-23 l 1,-4 c -10.259,-3.3382 -24.149,-10.4603 -35,-9.787 -8.667,0.5377 -16.964,5.2542 -25,8.0879 -12.04,4.2456 -25.2259,7.546208 -38.0259,7.581408 z"
id="path212575"
sodipodi:nodetypes="cccccccssccccccsc" />
<path
style="display:inline;fill:#28528e;stroke:none"
d="m 275.48062,66.706137 -0.21755,-0.909933 -1.08163,-1.791685 c -4.164,-0.9055 -21.47348,1.181002 -25.85357,3.800654 2.60896,21.335702 0.35407,32.231387 13.89257,28.548146 l 15.357,-5.2863 0.604,-8.0625 c -2.99545,-9.36264 -5.16506,-5.353006 -2.70082,-16.298382 z"
id="path212575-6"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#819ab9;stroke:none"
d="m 332.667,55.3333 0.666,0.3334 z"
id="path212577" />
<path
style="fill:#7390b2;stroke:none"
d="m 329.667,56.3333 0.666,0.3334 z"
id="path212579" />
<path
style="fill:#7b99bb;stroke:none"
d="m 326.667,57.3333 0.666,0.3334 z"
id="path212581" />
<path
style="fill:#184179;stroke:none"
d="m 389.97471,56.755293 -1.22446,3.868314 c -3.811,1.8705 -7.72578,4.895807 -10.30878,8.200807 -2.884,3.6919 -8.83296,9.05098 -7.98529,14.504652 7.28197,8.102816 18.51182,21.645934 23.01082,29.955934 4.126,7.623 0.944,15.952 6.533,23.715 l 10,-5 c 3.251,-5.438 6.311,-5.803 5,-13 l 15.19714,-7.72329 C 425.85529,105.38499 422.657,103.599 418,98.9962 410.065,91.1522 404.866,82.5122 399.201,73 396.314,68.1523 395.01571,59.595093 389.97471,56.755293 Z"
id="path212583"
sodipodi:nodetypes="ccccccccccsc" />
<path
style="fill:#83a3ba;stroke:none"
d="m 304.667,62.3333 0.666,0.3334 z"
id="path212587" />
<path
style="fill:#768baa;stroke:none"
d="m 299.667,63.3333 0.666,0.3334 z"
id="path212589" />
<path
style="fill:#9db9de;stroke:none"
d="m 290.667,64.3333 0.666,0.3334 z"
id="path212591" />
<path
style="fill:#133773;stroke:none"
d="m 221.72724,93.508349 4.76138,4.1377 c 7.60069,9.607861 4.56733,17.501811 10.19927,8.741731 l 5.80073,-5.74173 5.15506,0.12113 3.2439,-3.800466 c 3.2915,-0.41015 1.45314,-0.281562 4.64714,-0.268062 l -7.0461,-29.052603 c -3.9935,2.0403 -13.07061,1.659981 -17.54024,7.565244 -4.46962,5.905262 -8.22578,14.401369 -9.22114,18.297056 z"
id="path212603"
sodipodi:nodetypes="ccccccccsc" />
<path
style="fill:#284893;stroke:none"
d="m 299.667,102.333 0.666,0.334 z"
id="path212611" />
<path
style="fill:#0e2d66;stroke:none"
d="m 221.7552,93.376736 c -1.54044,5.73816 -6.36069,11.552144 -9.09249,18.903624 l 3.83532,9.36018 c -2.857,4.296 1.40843,13.69436 5.66143,14.59436 1.311,6.409 13.99482,-2.48016 17.36527,-6.24709 l -3.0267,-25.34727 -3,1 v -4 l -6,-4.000004 z"
id="path212613"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#3f71b0;stroke:none"
d="m 238.43464,129.03125 c -4.02998,7.52189 -11.11005,7.32511 -15.67741,9.59018 -5.224,6.865 -4.83707,16.90784 -14.49907,19.41084 l -2.88673,3.72391 -2.47008,3.69304 -3.83488,1.54533 c -8.53345,-0.61946 -37.80397,11.31994 -40.24297,20.00794 l 5.63643,25.7116 15.34953,-9.62083 23.9476,-26.37143 12.96012,-8.12176 8.26559,-4.02232 -3.85325,-4.27751 L 234,152 v -1 c -3.92,-8.108 8.897,-9.239 14,-9 -0.932,-7.572 1.95,-9.595 5,-16 l -4,2 4,-15 6,2 -1,-5 4,-1 -2,-3 3,-1 -7.52726,-8.34891 -4.47354,-0.973144 -3.59353,4.357484 -4.76169,0.41133 -5.95859,5.92131 z"
id="path212615"
sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
<path
style="fill:#5181c1;stroke:none"
d="m 297.93373,84.809341 c -1.23292,-0.578554 -0.44396,-0.256304 -1.12947,-0.144816 l -7.7128,2.038247 -3.09509,0.853057 c -6.56804,3.222197 -19.93753,7.591632 -30.51419,9.206613 l 3.96846,11.273508 -2.31287,1.43474 0.65142,3.87462 -5.29282,-1.31816 -4.61878,15.04443 2.08343,1.67705 c -4.117,5.906 -14.76691,13.58403 -14.76691,13.58403 l -2.53938,5.89627 L 234,152 l -14,8 -2,5 h 6 l 1,-4 10,2 c 7.81,-11.422 17.509,-21.599 25.481,-32.961 4.64,-6.613 9.77,-16.587 16.562,-21.044 10.969,-7.199 30.199,-8.118 42.957,-10.4194 7.838,-1.4141 23.594,-7.1644 31,-3.544 9.299,4.5463 14.434,17.4464 21,24.9684 7.58,-12.434 13.974,-1.605 14,8 l -5,4 -2,-2 4.315,17 -2.241,17 0.926,8 c -0.703,6.416 -6.019,23.094 0,27 0.68879,0.49568 1.77385,1.11569 0.87012,2.01056 l 0.40364,0.85349 L 380,201 c 0.385,6.327 -0.095,16.672 6,20 1.425,-11.269 7.51189,-27.36842 9.59875,-37.72392 l 4.79221,-20.42487 2.51396,-19.49455 c -3.65922,-5.19082 -6.24637,-18.83229 -7.49852,-28.9525 l -20.08831,-28.133706 -4.51582,-2.586635 c -3.99631,-4.474522 -13.19294,-4.235434 -17.67194,-3.789634 -5.138,0.5114 -10.79238,1.685055 -15.97838,1.108855 -4.285,-0.4761 -10.73318,-2.834322 -15.30218,-2.506422 -8.604,0.6174 -15.25504,7.804723 -23.91604,6.312723 z"
id="path212605"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccsscc" />
<path
style="fill:#768ba8;stroke:none"
d="m 224,110 1,1 z"
id="path212617" />
<path
style="fill:#92a1b6;stroke:none"
d="m 223,111 1,1 z"
id="path212619" />
<path
style="fill:#305e99;stroke:none"
d="m 430,111 -15,8 -5,13 -10,5 c 4.11,9.716 -1.105,24.064 -3.525,34 -0.997,4.093 -0.902,8.621 -3.475,12 L 385.94846,218.08282 385,280 l 24.11713,-9.37845 1.13709,-3.37441 1.7085,-2.33943 2.96593,-0.72917 C 415.95248,260.31763 415.97547,251.82111 416,249 c 0,-9.983 -1.95,-22.352 0.789,-32 3.847,-13.555 14.588,-24.491 18.422,-38 2.651,-9.338 -0.142,-20.553 -1.041,-30 -0.978,-10.279 3.737,-30.257 -4.17,-38 z"
id="path212621"
sodipodi:nodetypes="ccccccccccccccccc" />
<path
style="fill:#5daaf0;stroke:none"
d="m 378.37917,130.26341 3.26734,5.89182 L 386,128 c -0.003,-3.79 -1.03582,-22.11649 -5.10783,-22.76325 -4.41248,-0.70083 -19.42154,-7.241684 -19.82254,-2.32168 -0.342,4.198 15.45054,23.78834 17.30954,27.34834 z"
id="path212623"
sodipodi:nodetypes="cccscc" />
<path
style="fill:#224b8b;stroke:none"
d="m 212.73348,112.10637 c 0,0 -8.42095,13.24142 -14.11262,17.39516 -5.69168,4.15374 -20.28251,9.81654 -20.28251,9.81654 l -0.11184,7.08987 10.07635,11.72158 5.30268,6.61997 3.33204,3.00603 c 4.19844,-0.49879 6.43501,-3.15249 10.16483,-2.89714 l 2.04788,-5.37844 c 12.07682,-2.33041 6.98729,-16.91942 15.78729,-21.72442 l -1.03204,-1.52424 -1.11714,-5.49279 c -2.41719,-2.63399 -4.54365,-4.35987 -3.21265,-8.81587 l -2.63817,-4.1671 z"
id="path212625"
sodipodi:nodetypes="csccccccccccccc" />
<path
style="fill:#3367a0;stroke:none"
d="m 158.14877,185.96042 -25.28848,19.34864 c 0,0 -8.12052,7.9095 -13.52431,16.7002 -2.7019,4.39535 -8.14015,12.17729 -9.04867,21.82613 -0.90852,9.64885 2.29516,22.83022 2.29516,22.83022 1.168,10.454 1.1233,17.77286 8.32306,25.55027 l 5.78047,-9.04588 -3.369,-14.131 0.75077,-18.40667 0.0472,-5.68032 2.61459,-3.93204 1.37653,-10.17197 c 7.41,-0.179 13.44385,-8.38474 14.34685,-16.29374 h 1 v 3 c 10.145,-3.244 27.01079,-23.14484 14.69579,-31.59384 z"
id="path212659"
sodipodi:nodetypes="ccsscccccccccccc" />
<path
style="fill:#12326d;stroke:none"
d="m 80.67469,258.37719 c 10.138915,-1.55942 20.38011,-7.7734 30.14958,-8.90056 -2.25984,-17.44558 18.43205,-40.47728 32.23905,-51.64628 18.275,-14.784 32.98328,-18.47872 54.11428,-30.27572 -6.30524,-6.77022 -10.37614,-10.24453 -9.99433,-16.39914 l -8.77936,-11.86052 c -11.784,3.395 -22.44982,2.28678 -31.14747,11.94431 -14.0268,5.27547 -31.12869,4.05138 -36.87556,9.52967 -10.781002,15.085 -5.14539,38.92029 -17.206342,49.20882 -7.367949,6.28518 -8.995531,27.4032 -15.766031,34.3172 -1.6899,1.726 -7.197383,5.68771 -5.647783,8.59771 2.2995,4.319 8.745766,6.94551 8.913966,5.48451 z"
id="path212635"
sodipodi:nodetypes="ccccccccsccc" />
<path
style="fill:#467cba;stroke:none"
d="m 162.0298,196.90064 -11.70098,5.68908 -12.34038,16.2625 -9.88701,6.13801 -2.53148,11.58503 -3.11383,8.72599 0.82862,23.49053 30.04177,-35.75633 8,5 c -2.643,-9.795 8.74551,-29.11357 0.70329,-41.13481 z"
id="path1604"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#5598dc;stroke:none"
d="M 224.29593,160.54433 224,165 l -5,2 h -1 -1 l -4,-2 -33.07772,35.15003 c -0.95276,4.12631 0.55622,5.85655 5.339,12.11246 C 189.6261,207.25302 195.668,202.324 200,198.001 c 10.169,-10.149 28.01107,-22.79739 35.20283,-35.31608 L 233,161 Z"
id="path212645"
sodipodi:nodetypes="cccccccccccc" />
<path
style="fill:#829dba;stroke:none"
d="m 157,162 1,1 z"
id="path212647" />
<path
style="fill:#7b92b2;stroke:none"
d="m 133,196 1,1 z"
id="path212657" />
<path
style="fill:#336aa3;stroke:none"
d="m 139.71309,305.30651 -8,7 c 4.02861,9.73272 -2.81239,20.8819 10.46361,18.0099 0,8.429 7.42868,14.73926 18.25668,16.32626 -5.383,-12.685 -2.84029,-37.57916 -20.72029,-41.33616 z"
id="path212703"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#1f4c87;stroke:none"
d="m 92.957688,249.35342 c -10.635604,3.32616 -11.133231,2.77842 -21.434114,1.62832 -2.415644,15.61032 -2.857801,6.96596 -8.356857,26.7974 -1.1853,11.523 7.596683,24.43486 11.328683,35.22086 3.0705,8.874 4.6271,19.962 9.51,28 5.3241,8.765 14.4195,15.845 20.7636,24.015 5.553,7.152 10.616,16.491 17.415,22.456 13.329,11.692 31.55,18.921 45.816,29.764 10.401,7.905 20.845,15.75 31,23.962 4.899,3.962 9.972,9.911 16,12.075 9.595,3.446 23.861,2.721 34,2.728 v -1 c 9.47218,-8.98608 16.17423,-26.62337 -2.05771,-25.61063 L 252,416 c -6.71,0 -17.101,1.957 -22.985,-1.742 -8.28354,-1.43843 -2.47107,-4.6419 -7.26043,-6.02943 C 207.62057,412.74757 182.13,417.848 170,406 c -3.32684,-6.77705 -7.37401,-5.2969 -15,-5 l 3,-3 -4,-1 c 1.55552,-3.53261 4.48683,-5.27457 -0.41151,-4.55361 l -3.87437,-0.0692 L 149,377 l 5,-2 3,4 -9,-23 4.79499,-1.98934 c 3.67425,-9.7943 4.09101,-0.92676 2.456,-9.16546 -10.12,-2.641 -10.64688,-9.10556 -10.64688,-17.63656 L 139,324 138.25798,322.88131 C 138.06111,321.20774 137.55128,322.94132 137,320 l -22.954,-42 -2.24082,-21.68635 c -1.03167,-4.84381 -0.67751,-3.5193 -1.00609,-7.05892 -3.0973,0.25842 -7.80683,1.66094 -17.841402,0.0987 z"
id="path212671"
sodipodi:nodetypes="cccscccccccccccccccccccccccccccccccc" />
<path
style="fill:#6e8bad;stroke:none"
d="m 70,263 1,1 z"
id="path212675" />
<path
style="fill:#163d78;stroke:none"
d="M 410.02119,266.15303 409,269 c -7.409,0.219 -18.59579,10.41276 -23.99355,9.64883 -2.071,4.329 -1.40445,13.84517 -1.09645,18.35117 0.625,9.126 1.672,21.133 -0.674,30 -2.321,8.773 -7.275,21.05 -13.171,27.957 -5.645,6.612 -21.07143,21.04934 -21.07143,21.04934 0,0 3.45199,9.80011 2.18699,15.47211 1.45477,4.74079 4.1322,7.63283 4.1322,12.69684 l 1.35059,4.96573 C 379.29235,406.82302 383.624,388.662 392.245,371 c 4.516,-9.252 8.16,-18.935 13.064,-28 3.25,-6.009 8.401,-12.289 10.014,-19 C 416.602,318.68 415,311.544 415,306 v -42 h -1 c -2.5449,-1.52206 -3.60892,0.10423 -3.97881,2.15303 z"
id="path212679"
sodipodi:nodetypes="ccccccccccsccsccc" />
<path
style="fill:#6a7d9d;stroke:none"
d="m 67,266 1,1 z"
id="path212681" />
<path
style="fill:#2c75d1;stroke:none"
d="m 372,271 c -5.367,7.717 -3,19.931 -3,29 h 3 l 1.27992,5.73088 c 4.289,-1.423 2.74304,-7.79538 3.71004,-11.79438 C 370.46696,289.7075 374.557,277.869 372,271 Z"
id="path212685"
sodipodi:nodetypes="cccccc" />
<path
style="fill:#467cba;stroke:none"
d="m 125,288 -1.11077,-0.5972 -2.52377,3.96769 L 132,312 l 9,-5 8,5 c -2.643,-9.795 -14.587,-24.048 -24,-24 z"
id="path212693"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#94b1c3;stroke:none"
d="m 65.3333,288.667 0.3334,0.666 z"
id="path212695" />
<path
style="fill:#9aaecf;stroke:none"
d="m 68.3333,296.667 0.3334,0.666 z"
id="path212697" />
<path
style="fill:#58a6ee;stroke:none"
d="m 253.28483,394.10231 c -1.94103,13.00448 30.38287,20.47826 40.44772,7.9704 l 11.01919,-4.25964 13.75012,-11.77317 c 2.312,-8 11.52899,-11.27271 18.98699,-10.90271 L 362.139,351.972 369,346 h 1 l 5,-21 -4,-4 c -4.969,1.633 -5.326,7.485 -6.95,12 -2.448,6.809 -5.108,11.234 -11.051,15.575 -12.367,9.034 -26.535,17.129 -37.909,27.281 -7.895,7.045 -16.825,19.497 -27.09,22.884 -9.839,3.246 -23.10875,-4.29127 -34.71517,-4.63769 z"
id="path212713"
sodipodi:nodetypes="ccccccccccccccc" />
<path
style="fill:#3d98e7;stroke:none"
d="m 180,200 c -4.538,8.395 -10.5675,5.9359 -16.8105,13.2379 -1.704,1.992 -4.08049,2.82905 -10.1895,12.7621 h -1 c -5.11269,13.2298 -9.38838,6.49987 -16.36209,16.88961 l -5.39326,5.89475 c 0,0 -5.37726,14.95456 -7.09665,20.25464 l 0.60666,20.29756 c 9.052,-2.063 9.31534,3.56744 14.43434,8.77944 6.387,6.502 13.32122,16.38948 16.57622,25.05248 2.817,7.498 0.67712,16.75204 6.35012,23.11204 6.561,7.355 22.42166,7.12848 30.84066,11.48448 5.999,3.104 10.96861,14.47445 14.83861,20.04045 4.019,5.78 9.10639,5.28755 14.28539,9.24955 4.93,3.771 7.548,9.2 11.974,13.311 2.341,2.173 4.751,3.106 6.946,0.634 h 1 c 3.912,4.546 19.39669,8.14357 24.55969,5.36557 L 254,397 l 0.18923,-2.83638 -2.5691,-0.93187 L 245.376,391.973 235.621,379.63 213.285,363.2 196.829,347.136 176,344 c -0.458,-19.571 -10.935,-34.459 -21.14,-50 -4.137,-6.301 -13.866,-16.982 -13.037,-25 1.962,-18.993 21.396,-30.961 32.892,-44 4.079,-4.628 11.011,-9.563 11.285,-16 -5.835,-0.135 -5.403,-4.394 -4,-9 z"
id="path212661"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" />
<path
style="fill:#288fdc;stroke:none"
d="M 369,300 366.14137,326.08159 371,321 l 4,4 c 0.269,-5.343 6.34202,-18.70989 -1.10898,-20.29789 L 372,300 Z"
id="path212699"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#95aac7;stroke:none"
d="m 71.3333,304.667 0.3334,0.666 z"
id="path212701" />
<path
style="fill:#889fbe;stroke:none"
d="m 74.3333,312.667 0.3334,0.666 z"
id="path212705" />
<path
style="fill:#869fc7;stroke:none"
d="m 76.3333,318.667 0.3334,0.666 z"
id="path212709" />
<path
style="fill:#447dc4;stroke:none"
d="m 373.01678,326.31308 -2.87591,10.32042 0.68644,7.40302 -1.69035,-1.32581 -17,20 5,1 c 7.184,-10.842 24.22987,-24.40675 15.87982,-37.39763 z"
id="path212715"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:#99b1dd;stroke:none"
d="m 81.3333,334.667 0.3334,0.666 z"
id="path212717" />
<path
style="fill:#4d5ed4;stroke:none"
d="m 260.667,338.333 0.666,0.334 z"
id="path212719" />
<path
style="fill:#3a4dc3;stroke:none"
d="m 262.667,339.333 0.666,0.334 z"
id="path212721" />
<path
style="fill:#4d7eb9;stroke:none"
d="m 163.49042,346.98048 c -1.77498,-1.75773 -2.36661,-3.19958 -8.53261,-2.20758 l -2.22909,8.92201 L 148,356 c 0.128,10.95 10.041,22.296 15,32 9.709,-2.3 21.97045,-6.44548 31.99845,-2.62848 4.644,1.768 7.91857,7.95374 12.51457,10.06574 L 208,388 c 6.139,-3.995 -1.399,-12.712 -4.531,-16.914 -2.664,-3.575 -6.12,-10.37 -9.697,-12.808 -8.66,-5.904 -20.95058,-6.10352 -30.28158,-11.29752 z"
id="path212725"
sodipodi:nodetypes="ccccccccccc" />
<path
style="fill:#528fd0;stroke:none"
d="M 337.67122,374.67242 C 330.43722,373.45342 318.301,376.815 317,385 l -6.27062,8.12985 -0.92768,2.40553 4.48003,0.90664 6.26123,-1.21932 2.08135,-2.04569 c 3.166,-6.208 8.47375,-8.26648 16.29149,-12.79583 l 21.34723,-27.16167 z"
id="path212729"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#3664a0;stroke:none"
d="m 152,375 -3.5288,1.78499 L 149,393 l 5.48694,2.06978 c 1.613,-4.815 4.08369,-6.16852 8.81369,-7.64352 L 158,376 c -2.89337,-0.86806 -1.93606,1.75192 -4,-1 z"
id="path212731"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#204a84;stroke:none"
d="m 349,376 c -4.169,7.738 -12.905,8.825 -19.715,12.995 -9.907,6.068 -27.55262,20.15708 -37.20862,22.42732 l 4.92884,1.58713 c 4.485,3.373 16.28716,9.62385 17.64016,0.41885 l 3.25415,-0.76988 c -2.055,3.757 -3.51823,5.24623 1.52477,6.92723 l -0.59938,4.72726 c -4.042,-2.03 -5.51809,-1.84154 -9.37909,0.27046 -3.322,-3.443 -4.59965,-1.5067 -7.30565,0.5483 l -2.89519,1.37918 -7.99033,11.49286 0.29424,2.89433 c -2.504,2.193 -2.00781,8.51194 -0.59681,11.23194 L 357,409 l 0.56143,-3.30039 -0.99905,-2.21786 -1.97398,-4.69298 c 2.18793,-5.23849 0.1237,-4.99419 -0.89991,-9.45723 C 351.58593,383.95439 351.825,381.483 349,376 Z"
id="path212733"
sodipodi:nodetypes="cccccccccccccccccccc" />
<path
style="fill:#153d7a;stroke:none"
d="m 154,397 1.3869,1.72614 L 155,401 l 2.55685,0.22154 c 6.44333,1.9104 4.22496,0.79936 11.18086,5.54002 3.619,5.226 12.09844,5.77886 17.96144,6.28886 12.283,1.071 22.60678,0.56425 34.67478,-4.62875 l -2.10658,-3.04401 -1.20355,-1.8516 -1.19242,-3.05785 C 210.68488,395.51869 211.53464,397.39542 203,390 c -7.88,-10.479 -24.933,-6.498 -36,-3.511 -3.192,0.862 -7.499,0.473 -10.107,2.79 -2.048,1.82 -2.263,5.215 -2.893,7.721 z"
id="path212735"
sodipodi:nodetypes="cccccccccccccc" />
<path
style="fill:#518ecd;stroke:none"
d="m 209.59503,380.52295 -3.8759,9.297 C 206.54613,396.51495 210.431,398.26 217,401 c 1.36409,2.71133 2.04267,1.72613 2,0 h 2 v -4 l 3,2 6.05388,-3.88682 c -4.298,-7.349 -12.57385,-12.68023 -20.45885,-14.59023 z"
id="path212737"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#2351c9;stroke:none"
d="m 297,393 9,-9 z"
id="path212739" />
<path
style="fill:#3a6aaa;stroke:none"
d="m 311.63336,391.68993 -25.46217,20.59968 c 15.992,0 19.906,-9.025 33,-16 v -1 l -5,-1 v -1 l 9.2e-4,-1.83229 z"
id="path212741"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:#4172ac;stroke:none"
d="M 226.27901,397.35978 220.94279,396.891 217,399 c -0.279,5.985 5.998,13.533 11.158,16.169 4.794,2.449 12.50587,1.41116 17.72487,1.53916 2.9941,1.86618 13.41402,0.71643 17.11713,0.29184 l 1,-5 5,1 c -3.781,-10.545 -20.779,-6.445 -28,-12 h -1 c -4.489,2.973 -8.22,-1.995 -10,-6 z"
id="path212743"
sodipodi:nodetypes="cccscccccccc" />
<path
style="fill:#5592d5;stroke:none"
d="m 292,399 c 0.38,13.477 -25.403,6.2 -34,6 v 1 l 11,7 -5,-1 -1,5 7.80935,-1.03827 c 17.1474,1.92365 25.171,-11.28537 34.33253,-19.05345 C 300.96988,394.09028 296.406,397.879 292,399 Z"
id="path212745"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#123473;stroke:none"
d="m 314.69895,411.71511 c -5.26779,1.95345 -7.52695,0.95789 -12.73795,-0.39711 -4.279,-1.112 -13.0984,0.41096 -17.80353,1.34998 -0.91604,23.56279 -15.92812,31.38793 1.77627,41.66923 C 298.8701,450.23509 289.162,447.582 293,442 l 5.34265,-4.13795 C 298.31079,435.5539 298.90819,433.92398 300,432 l 10,-6 10,-1 1,-6 c -4.185,-2.397 -3.18419,-4.58946 -1.69819,-8.50546 z"
id="path212747"
sodipodi:nodetypes="cccccccccccc" />
<path
style="fill:#2f609b;stroke:none"
d="m 274.69766,414.3416 -5.42085,1.69039 c -5.039,-0.014 -5.93819,0.40048 -12.33528,0.44246 -4.09625,0.21244 -4.86223,-1.30591 -10.7581,0.5024 L 246,437 c -0.15389,3.51505 1.95277,4.82411 1,8 h 1 c -1.5651,3.28925 -1.4506,6.78475 -1.67203,10.34725 13.007,3.441 27.88243,3.31378 40.67203,-1.34725 l -7,-5 7,-16 0.32383,-3.17335 L 285,428 l 3,-16 z"
id="path212749"
sodipodi:nodetypes="ccccccccccccccc" />
<path
style="display:inline;fill:#3e70af;stroke:none"
d="m 381.08533,164.02236 c -2.78685,7.86875 -4.35917,21.97964 -5.31517,28.86664 -2.045,14.72 -2.778,30.135 -2.778,45 0,8.961 1.407,19.309 -0.806,28 -1.253,4.923 -2.246,26.917 2.806,28 l -2.706,46.907 -17.294,22.093 c -7.601,-1.894 -14.31056,9.88224 -17.94256,16.20624 -9.97699,2.10285 -17.27019,10.88882 -18.67519,17.43982 28.19093,-9.09138 59.76234,-42.16689 66.04034,-71.11289 2.903,-13.383 -0.54821,-27.68366 0.53479,-41.04466 0.898,-11.071 0.13145,-22.92515 0.89145,-34.02015 0.634,-9.265 1.87073,-19.12336 0.39373,-28.37836 -1.9536,-7.59077 -0.31948,-10.02848 -1.31548,-18.24848 3.84883,-4.71372 -2.41932,-5.81138 -3.92708,-6.84152 -4.90987,-4.84814 4.10296,-23.508 0.0932,-32.86664 z"
id="path212653"
sodipodi:nodetypes="ccsccccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -0,0 +1,46 @@
<script lang="ts">
import MenuIcon from "./MenuIcon.svelte";
import type { Command } from "prosemirror-state";
export let items: { command: Command; name: string; text: string }[];
export let onCommand: Function;
</script>
<div class="menubar">
{#each items as item}
<button on:click|preventDefault={(e) => onCommand(item.command)}>
<MenuIcon name={item.name} text={item.text} />
</button>
{/each}
</div>
<style>
@import "../styles.css";
.menubar {
max-width: 480px;
margin: auto;
padding: 0.5em;
margin: 1em auto;
background-color: var(--surface-color);
border: 0.15em var(--shadow-color) solid;
border-radius: 0.25em;
display: flex;
gap: 0.25em;
}
.menubar button {
background-color: var(--background-color);
/* border: black 1px solid; */
border: none;
border-radius: 0.25em;
width: 2.5em;
padding: 0.25em 0.5em;
font-size: 1em;
}
.menubar button:hover {
background-color: #444;
color: white;
border: black 1px solid;
}
</style>

View file

@ -0,0 +1,8 @@
<script lang="ts">
export let name: string;
export let text: string;
</script>
<span class={`menuicon-${name}`} title={name}>
{text}
</span>

View file

@ -0,0 +1,67 @@
import { Plugin, type Command } from "prosemirror-state";
import { setBlockType, toggleMark } from "prosemirror-commands";
import { richTextSchema as schema } from "../prosemirror/schema";
import Menu from "./Menu.svelte";
import type { EditorView } from "prosemirror-view";
class MenuView {
items: { command: Command; text: string; name: string; }[];
editorView: EditorView;
dom: HTMLDivElement;
menu: Menu;
constructor(items: { command: Command; text: string; name: string; }[], editorView: EditorView) {
this.items = items;
this.editorView = editorView;
this.update();
const onCommand = (command: (arg0: any, arg1: any, arg2: any) => void) => {
editorView.focus();
command(editorView.state, editorView.dispatch, editorView);
};
this.dom = document.createElement("div");
this.menu = new Menu({
target: this.dom,
props: {
items,
onCommand
}
});
}
update() {
// this.items.forEach(({ command, dom }) => {
// let active = command(this.editorView.state, null, this.editorView);
// dom.style.display = active ? "" : "none";
// });
}
destroy() {
this.dom.remove();
}
}
function menuPlugin(items: { command: Command; text: string; name: string; }[]) {
return new Plugin({
view(editorView) {
let menuView = new MenuView(items, editorView);
editorView.dom?.parentNode?.insertBefore(menuView.dom, editorView.dom);
return menuView;
}
});
}
let menu = menuPlugin([
{ command: toggleMark(schema.marks.strong), text: "B", name: "strong" },
{ command: toggleMark(schema.marks.em), text: "i", name: "em" },
{ command: toggleMark(schema.marks.code), text: "</", name: "code" },
{ command: setBlockType(schema.nodes.heading), text: "H", name: "heading" },
{ command: setBlockType(schema.nodes.paragraph), text: "p", name: "paragraph" },
// {
// command: setBlockType(schema.nodes.paragraph),
// dom: icon("p", "paragraph")
// },
]);
export default menu;

View file

@ -0,0 +1,216 @@
<!-- <script lang="ts">
import { onMount, onDestroy, createEventDispatcher } from 'svelte'
// import { createSingleLineEditor } from './state'
import { EditorView } from "prosemirror-view"
import { EditorState } from "prosemirror-state"
import { createRichTextEditor } from './editor';
import type { LoroText } from 'loro-crdt';
const dispatch = createEventDispatcher()
/** @type string */
export let className = "ui-editor"
/** @type Loro */
export let state;
/** @type string */
export let document;
/** @type EditorState */
export let editorState = createRichTextEditor(document, state)
/** @type string */
export let placeholder = ''
/** Reference to the editor view
* @type EditorView|null */
export let view: EditorView | null = null
/** Debounce change events (set to zero for immediate updates) */
export let debounceChangeEventsInterval = 50
/** Reference to the editor component
* @type HTMLDivElement | null */
export let editor: HTMLDivElement | null = null
/** Initial EditorView props */
export let editorViewProps = {}
/** Focus the content-editable div */
export function focus() {
view && view.focus()
}
/** Blur the content-editable div */
export function blur() {
editor && editor.blur()
}
/**
* Tracks the timeout id of the last time the change event was dispatched
* @type {number | undefined}
*/
let dispatchLastEditTimeout: number | undefined
/** Tracks whether changes to editor state were not yet dispatched */
let isDirty = false
// @ts-ignore
$: if (view && editorState && !isDirty) {
view.updateState(editorState) // necessary to keep the DOM in sync with the editor state on external updates
}
/**
* Tracks whether the editor is empty (i.e. has a content size of 0)
* @type {boolean}
*/
let editorIsEmpty: boolean
// @ts-ignore
$: editorIsEmpty = editorState ? editorState.doc.content.size === 0
|| (editorState.doc.textContent === "" && editorState.doc.content.size < 3) : true
/** Dispatches a change event and resets whether the editor state is dirty */
const dispatchChangeEvent = () => {
if (isDirty) {
dispatch('change', {editorState})
isDirty = false
}
}
/**
* Captures custom events from plugins and dispatches them with a new event type (based on event.detail.type)
* @param event {CustomEvent}
*/
const onCustomEvent = (event: CustomEvent) => {
if (event.detail) {
const {type, ...detail} = event.detail
dispatch(type || 'custom', detail)
}
}
onMount(() => {
// @ts-ignore
view = new EditorView({mount: editor}, {
...editorViewProps,
state: editorState,
dispatchTransaction: (transaction) => {
// @ts-ignore
editorState = view.state.apply(transaction)
// @ts-ignore
const contentHasChanged = !editorState.doc.eq(view.state.doc)
if (contentHasChanged) {
isDirty = true
if (debounceChangeEventsInterval > 0) {
if (dispatchLastEditTimeout) clearTimeout(dispatchLastEditTimeout)
dispatchLastEditTimeout = setTimeout(dispatchChangeEvent, 50)
} else {
setTimeout(dispatchChangeEvent, 0)
}
}
// @ts-ignore
view.updateState(editorState)
dispatch('transaction', {view, editorState, isDirty, contentHasChanged})
},
})
})
onDestroy(() => {
// @ts-ignore
if (view)
view.destroy()
})
</script> -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<!-- @ts-ignore -->
<!-- <div class={className}
class:ProseMirror={true}
class:editor_empty={editorIsEmpty}
data-placeholder={placeholder}
bind:this={editor}
on:focus
on:blur
on:keydown
></div> -->
<style>
:global(body) {
--ui-color-placeholder: #AAAAAA;
}
:global(.ProseMirror) {
position: relative;
}
:global(.ProseMirror) {
word-wrap: break-word;
white-space: pre-wrap;
-webkit-font-variant-ligatures: none;
font-variant-ligatures: none;
}
:global(.ProseMirror) pre {
white-space: pre-wrap;
}
:global(.ProseMirror) li {
position: relative;
}
:global(.ProseMirror-hideselection *::selection) {
background: transparent;
}
:global(.ProseMirror-hideselection *::-moz-selection) {
background: transparent;
}
:global(.ProseMirror-hideselection) {
caret-color: transparent;
}
:global(.ProseMirror-selectednode) {
outline: 2px solid #8cf;
}
/* Make sure li selections wrap around markers */
:global(li.ProseMirror-selectednode) {
outline: none;
}
:global(li.ProseMirror-selectednode:after) {
content: "";
position: absolute;
left: -32px;
right: -2px;
top: -2px;
bottom: -2px;
border: 2px solid #8cf;
pointer-events: none;
}
:global(.ProseMirror .empty-node::before) {
position: absolute;
color: #aaa;
cursor: text;
}
:global(.ProseMirror .empty-node:hover::before) {
color: #777;
}
:global(.ProseMirror.editor_empty::before) {
position: absolute;
content: attr(data-placeholder);
pointer-events: none;
color: var(--ui-color-placeholder);
}
</style>

View file

@ -0,0 +1,100 @@
// import type { Delta, Loro, LoroText } from "loro-crdt";
// import { EditorState, TextSelection, Plugin } from "prosemirror-state";
// import { DOMParser, DOMSerializer, Node, Schema } from "prosemirror-model";
// import { richTextSchema, EXPAND_CONFIG } from "./schema";
// import { keymap } from "prosemirror-keymap";
// import { baseKeymap } from "prosemirror-commands";
// import { history, redo, undo } from "prosemirror-history";
// import { dropCursor } from "prosemirror-dropcursor"
// import { gapCursor } from "prosemirror-gapcursor"
// import { richTextKeyMapPlugin } from "./keymap";
// import { PluginKey } from 'prosemirror-state'
// const syncPluginKey = new PluginKey('loro-sync')
// /**
// * Create an empty editor state with rich text editing capabilities
// * @param html {string}
// * @param plugins {array<Plugin>}
// * @return {EditorState}
// */
// export const createRichTextEditor = (document: string, state: Loro, plugins = []) => {
// state.configTextStyle(EXPAND_CONFIG)
// const syncPlugin = new Plugin({
// key: syncPluginKey,
// state: {
// init(config, instance) {
// let richtext = state.getText(document);
// richtext.
// instance.doc = new Node()
// richtext.subscribe(state, (event) => {
// for (const change of event.events) {
// console.log(change)
// }
// // if (!event.local && event.diff.type == "text") {
// // console.log(state.peerId, "CRDT_EVENT", event);
// // const eventDelta = event.diff.diff;
// // const delta: Delta<string>[] = [];
// // let index = 0;
// // for (let i = 0; i < eventDelta.length; i++) {
// // const d = eventDelta[i];
// // const length = d.delete || d.retain || d.insert!.length;
// // // skip the last newline that quill automatically appends
// // if (
// // d.insert &&
// // d.insert === "\n" &&
// // // index === quill.getLength() - 1 &&
// // i === eventDelta.length - 1 &&
// // d.attributes != null &&
// // Object.keys(d.attributes).length > 0
// // ) {
// // delta.push({
// // retain: 1,
// // attributes: d.attributes,
// // });
// // index += length;
// // continue;
// // }
// // delta.push(d);
// // index += length;
// // }
// // // quill.updateContents(new Delta(delta), "this" as any);
// // // const a = this.richtext.toDelta();
// // // const b = this.quill.getContents().ops;
// // // console.log(this.doc.peerId, "COMPARE AFTER CRDT_EVENT");
// // // if (!assertEqual(a, b as any)) {
// // // quill.setContents(new Delta(a), "this" as any);
// // // }
// // }
// });
// },
// apply(tr, value, oldState, newState) {
// console.log(tr, value, oldState, newState)
// },
// }
// });
// return EditorState.create({
// schema: richTextSchema,
// // doc,
// // selection,
// plugins: [
// // history(),
// keymap({}), // {"Mod-z": undo, "Mod-y": redo, "Mod-Shift-z": redo}
// keymap(baseKeymap),
// dropCursor(),
// gapCursor(),
// syncPlugin,
// richTextKeyMapPlugin,
// ...plugins
// ]
// });
// }

View file

@ -0,0 +1,111 @@
import {
wrapIn, setBlockType, chainCommands, toggleMark, exitCode,
joinUp, joinDown, lift, selectParentNode
} from "prosemirror-commands";
import { wrapInList, splitListItem, liftListItem, sinkListItem } from "prosemirror-schema-list";
import { undo, redo } from "prosemirror-history";
import { undoInputRule } from "prosemirror-inputrules";
import { richTextSchema } from "./schema";
import { keymap } from "prosemirror-keymap"
import type { Command, EditorState, Transaction } from "prosemirror-state";
import type { EditorView } from "prosemirror-view";
import type { Schema } from "prosemirror-model";
const mac = typeof navigator != "undefined" ? /Mac/.test(navigator.platform) : false;
type keyMap = { [x: string]: { combo: string, command: Command }[] };
const addKey = (keyMap: keyMap, name: string, combo: string, command: Command) => {
if (!keyMap[name]) keyMap[name] = [];
keyMap[name].push({ combo, command });
}
const createKeyMapConfiguration = (schema: Schema) => {
let config: keyMap = {}
addKey(config, 'undo', "Mod-z", undo)
addKey(config, "redo", "Shift-Mod-z", redo);
addKey(config, "undoInputRule", "Backspace", undoInputRule);
if (!mac) addKey(config, "redo", "Mod-y", redo);
addKey(config, "joinUp", "Alt-ArrowUp", joinUp);
addKey(config, "joinDown", "Alt-ArrowDown", joinDown);
addKey(config, "lift", "Mod-BracketLeft", lift);
addKey(config, "selectParentNode", "Escape", selectParentNode);
if (!!schema.marks.strong) {
addKey(config, "toggleMarkStrong", "Mod-b", toggleMark(schema.marks.strong));
addKey(config, "toggleMarkStrong", "Mod-B", toggleMark(schema.marks.strong));
}
if (!!schema.marks.em) {
addKey(config, "toggleMarkEm", "Mod-i", toggleMark(schema.marks.em));
addKey(config, "toggleMarkEm", "Mod-I", toggleMark(schema.marks.em));
}
if (!!schema.marks.code)
addKey(config, "toggleMarkCode", "Mod-`", toggleMark(schema.marks.code));
if (!!schema.nodes.bullet_list)
addKey(config, "wrapInListUnordered", "Shift-Ctrl-8", wrapInList(schema.nodes.bullet_list));
if (!!schema.nodes.ordered_list)
addKey(config, "wrapInListOrdered", "Shift-Ctrl-9", wrapInList(schema.nodes.ordered_list));
if (!!schema.nodes.blockquote)
addKey(config, "wrapInBlockquote", "Ctrl->", wrapIn(schema.nodes.blockquote));
if (!!schema.nodes.hard_break) {
let br = schema.nodes.hard_break
const cmd = chainCommands(exitCode, (state, dispatch) => {
if (dispatch)
dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView())
return true
})
addKey(config, "hardBreak", "Mod-Enter", cmd);
addKey(config, "hardBreak", "Shift-Enter", cmd);
if (mac) addKey(config, "hardBreak", "Ctrl-Enter", cmd);
}
if (!!schema.nodes.list_item) {
addKey(config, "splitListItem", "Enter", splitListItem(schema.nodes.list_item));
addKey(config, "liftListItem", "Mod-[", liftListItem(schema.nodes.list_item));
addKey(config, "sinkListItem", "Mod-]", sinkListItem(schema.nodes.list_item));
}
if (!!schema.nodes.paragraph)
addKey(config, "setBlockTypeParagraph", "Shift-Ctrl-0", setBlockType(schema.nodes.paragraph));
if (!!schema.nodes.code_block)
addKey(config, "setBlockTypeCode", "Shift-Ctrl-\\", setBlockType(schema.nodes.code_block));
if (!!schema.nodes.heading)
for (let i = 1; i <= 6; i++) {
addKey(config, `setHeading${i}`, `Shift-Ctrl-${i}`, setBlockType(schema.nodes.heading, { level: i }));
}
if (!!schema.nodes.horizontal_rule) {
addKey(config, "insertHorizontalRuler", "Mod-_", (state, dispatch) => {
let hr = schema.nodes.horizontal_rule;
if (dispatch)
dispatch(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());
return true;
})
}
return config
}
const getKeyMapFromConfig = (config: keyMap) => {
const keys = Object.keys(config);
let bindings: { [ combo: string]: Command} = {};
keys.forEach(key => {
config[key].forEach(entry => {
bindings[entry.combo] = entry.command;
})
})
return keymap(bindings);
}
const richTextKeyMapConfiguration = createKeyMapConfiguration(richTextSchema);
export const richTextKeyMapPlugin = getKeyMapFromConfig(richTextKeyMapConfiguration);

View file

@ -0,0 +1,14 @@
import { dev } from '$app/environment';
export const SITE_TITLE = 'JadedBlueEyes';
export const SITE_URL = dev ? "http://localhost:5173" : "https://jade.ellis.link"
export const SITE_DOMAIN = 'jade.ellis.link';
export const SITE_DEFAULT_DESCRIPTION =
"Jade's website.";
export const RSS_DEFAULT_POSTS_PER_PAGE = 15;

View file

@ -0,0 +1,24 @@
import { Schema } from 'prosemirror-model';
import { nodes, marks } from 'prosemirror-schema-basic';
export const EXPAND_CONFIG: { [key in string]: { expand: "before" | "after" | "both" | "none"; } } = {
bold: { expand: "after" },
italic: { expand: "after" },
underline: { expand: "after" },
link: { expand: "none" },
heading: { expand: "none" },
}
/**
* Schema to represent rich text
* @type {Schema}
*/
export const richTextSchema = new Schema({
nodes,
marks
});
// richTextSchema.nodes.heading

View file

@ -0,0 +1,80 @@
:root {
color-scheme: light;
--spacing: 24px;
--theme: #242424;
--background-color: #f8f8f8;
--surface-color: #fff;
--backdrop-color: rgba(247, 247, 247, .54);
--shadow-color: rgba(0, 0, 0, .12);
--font-color: rgba(0, 0, 0, .87);
--font-color-contrast: rgba(255, 255, 255, 1);
--font-color-secondary: rgba(0, 0, 0, .6);
--font-family-base: Roboto, sans-serif;
--font-family-heading: "Sen", Roboto, sans-serif;
--border-radius: 8px;
--shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
}
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--theme: #eee;
--background-color: #141414;
--backdrop-color: rgba(20, 20, 20, .54);
--shadow-color: rgba(255, 255, 255, .12);
--surface-color: #242424;
--font-color: rgba(255, 255, 255, .87);
--font-color-contrast: rgba(0, 0, 0, .87);
--font-color-secondary: rgba(255, 255, 255, .6)
}
}
html {
font-family: var(--font-family-base);
background-color: var(--background-color);
color: var(--font-color);
font-size: 16px;
line-height: 1.5
}
body {
padding: 0;
margin: 0
}
iframe,
img,
svg {
width: 100%;
height: 100%;
display: block;
}
.main {
max-width: 1056px;
margin: 0 auto;
padding: 0 var(--spacing);
--edge-border-radius: var(--border-radius);
}
@media screen and (max-width: 320px) {
.main {
padding: 0 0;
--edge-border-radius: 0;
}
}
.card {
border-radius: var(--border-radius);
box-shadow: var(--shadow);
background-color: var(--surface-color);
}
.edge {
border-radius: var(--edge-border-radius);
}

View file

@ -0,0 +1,8 @@
<script lang="ts">
import "$lib/styles.css";
</script>
<main class="main">
<slot />
</main>

View file

@ -0,0 +1,9 @@
<script lang="ts">
// import { editor } from "$lib/editor";
// import Editor from "$lib/prosemirror/Editor.svelte";
import LiveEditor from "$lib/LiveEditor.svelte";
</script>
<LiveEditor />
<!-- <Hero /> -->

View file

@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

View file

@ -0,0 +1,16 @@
import adapter from '@sveltejs/adapter-node';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
// for more information about preprocessors
preprocess: vitePreprocess(),
kit: {
adapter: adapter(),
}
};
export default config;

View file

@ -0,0 +1,18 @@
{
"extends": "./.svelte-kit/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"moduleResolution": "bundler"
}
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
//
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
// from the referenced tsconfig.json - TypeScript does not merge them in
}

View file

@ -0,0 +1,9 @@
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import wasm from "vite-plugin-wasm";
import topLevelAwait from "vite-plugin-top-level-await";
export default defineConfig({
plugins: [wasm(), topLevelAwait(), sveltekit()]
});

720
pnpm-lock.yaml generated
View file

@ -8,6 +8,94 @@ importers:
.: {}
packages/loro-demo:
dependencies:
'@steeze-ui/svelte-icon':
specifier: ^1.5.0
version: 1.5.0(svelte@4.2.8)
loro-crdt:
specifier: ^0.11.1
version: 0.11.1
prosemirror-commands:
specifier: ^1.5.2
version: 1.5.2
prosemirror-dropcursor:
specifier: ^1.8.1
version: 1.8.1
prosemirror-gapcursor:
specifier: ^1.3.2
version: 1.3.2
prosemirror-history:
specifier: ^1.3.2
version: 1.3.2
prosemirror-inputrules:
specifier: ^1.4.0
version: 1.4.0
prosemirror-keymap:
specifier: ^1.2.2
version: 1.2.2
prosemirror-model:
specifier: ^1.19.4
version: 1.19.4
prosemirror-schema-basic:
specifier: ^1.2.2
version: 1.2.2
prosemirror-schema-list:
specifier: ^1.3.0
version: 1.3.0
prosemirror-state:
specifier: ^1.4.3
version: 1.4.3
prosemirror-view:
specifier: ^1.33.1
version: 1.33.1
quill:
specifier: ^1.3.7
version: 1.3.7
devDependencies:
'@fontsource/fira-mono':
specifier: ^4.5.10
version: 4.5.10
'@neoconfetti/svelte':
specifier: ^1.0.0
version: 1.0.0
'@sveltejs/adapter-auto':
specifier: ^3.0.0
version: 3.1.1(@sveltejs/kit@2.5.0)
'@sveltejs/adapter-node':
specifier: ^4.0.1
version: 4.0.1(@sveltejs/kit@2.5.0)
'@sveltejs/kit':
specifier: ^2.0.0
version: 2.5.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@4.2.8)(vite@5.0.10)
'@sveltejs/vite-plugin-svelte':
specifier: ^3.0.0
version: 3.0.1(svelte@4.2.8)(vite@5.0.10)
'@types/quill':
specifier: ^2.0.14
version: 2.0.14
svelte:
specifier: ^4.2.7
version: 4.2.8
svelte-check:
specifier: ^3.6.0
version: 3.6.2(svelte@4.2.8)
tslib:
specifier: ^2.4.1
version: 2.6.2
typescript:
specifier: ^5.0.0
version: 5.3.3
vite:
specifier: ^5.0.3
version: 5.0.10
vite-plugin-top-level-await:
specifier: ^1.4.1
version: 1.4.1(vite@5.0.10)
vite-plugin-wasm:
specifier: ^3.3.0
version: 3.3.0(vite@5.0.10)
packages/website:
dependencies:
'@steeze-ui/svelte-icon':
@ -403,6 +491,16 @@ packages:
rollup: 4.10.0
dev: true
/@rollup/plugin-virtual@3.0.2:
resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
dev: true
/@rollup/pluginutils@5.1.0(rollup@4.10.0):
resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
engines: {node: '>=14.0.0'}
@ -426,14 +524,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-android-arm-eabi@4.9.1:
resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm64@4.10.0:
resolution: {integrity: sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==}
cpu: [arm64]
@ -442,14 +532,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-android-arm64@4.9.1:
resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.10.0:
resolution: {integrity: sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==}
cpu: [arm64]
@ -458,14 +540,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.9.1:
resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.10.0:
resolution: {integrity: sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==}
cpu: [x64]
@ -474,14 +548,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.9.1:
resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.10.0:
resolution: {integrity: sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==}
cpu: [arm]
@ -490,14 +556,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.9.1:
resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.10.0:
resolution: {integrity: sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==}
cpu: [arm64]
@ -506,14 +564,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.9.1:
resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.10.0:
resolution: {integrity: sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==}
cpu: [arm64]
@ -522,14 +572,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.9.1:
resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.10.0:
resolution: {integrity: sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==}
cpu: [riscv64]
@ -538,14 +580,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.9.1:
resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.10.0:
resolution: {integrity: sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==}
cpu: [x64]
@ -554,14 +588,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.9.1:
resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.10.0:
resolution: {integrity: sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==}
cpu: [x64]
@ -570,14 +596,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.9.1:
resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.10.0:
resolution: {integrity: sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==}
cpu: [arm64]
@ -586,14 +604,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.9.1:
resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.10.0:
resolution: {integrity: sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==}
cpu: [ia32]
@ -602,14 +612,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.9.1:
resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.10.0:
resolution: {integrity: sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==}
cpu: [x64]
@ -618,14 +620,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.9.1:
resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@steeze-ui/svelte-icon@1.5.0(svelte@4.2.8):
resolution: {integrity: sha512-Y0S7Qk2kO6byzOlD5SQGbOF2ZaKXJgfTkH78QUPcq579wiWMQJ5H14zL4XwtsPJ0DfkoL5qa3WaIdYkWb9A6AA==}
peerDependencies:
@ -718,6 +712,129 @@ packages:
- supports-color
dev: true
/@swc/core-darwin-arm64@1.4.2:
resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-darwin-x64@1.4.2:
resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm-gnueabihf@1.4.2:
resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-gnu@1.4.2:
resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-arm64-musl@1.4.2:
resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-gnu@1.4.2:
resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-linux-x64-musl@1.4.2:
resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-arm64-msvc@1.4.2:
resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-ia32-msvc@1.4.2:
resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core-win32-x64-msvc@1.4.2:
resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@swc/core@1.4.2:
resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
'@swc/helpers': ^0.5.0
peerDependenciesMeta:
'@swc/helpers':
optional: true
dependencies:
'@swc/counter': 0.1.3
'@swc/types': 0.1.5
optionalDependencies:
'@swc/core-darwin-arm64': 1.4.2
'@swc/core-darwin-x64': 1.4.2
'@swc/core-linux-arm-gnueabihf': 1.4.2
'@swc/core-linux-arm64-gnu': 1.4.2
'@swc/core-linux-arm64-musl': 1.4.2
'@swc/core-linux-x64-gnu': 1.4.2
'@swc/core-linux-x64-musl': 1.4.2
'@swc/core-win32-arm64-msvc': 1.4.2
'@swc/core-win32-ia32-msvc': 1.4.2
'@swc/core-win32-x64-msvc': 1.4.2
dev: true
/@swc/counter@0.1.3:
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
dev: true
/@swc/types@0.1.5:
resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==}
dev: true
/@types/cookie@0.6.0:
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
dev: true
@ -729,6 +846,13 @@ packages:
resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
dev: true
/@types/quill@2.0.14:
resolution: {integrity: sha512-zvoXCRnc2Dl8g+7/9VSAmRWPN6oH+MVhTPizmCR+GJCITplZ5VRVzMs4+a/nOE3yzNwEZqylJJrMB07bwbM1/g==}
dependencies:
parchment: 1.1.4
quill-delta: 5.1.0
dev: true
/@types/resolve@1.20.2:
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
dev: true
@ -800,6 +924,17 @@ packages:
engines: {node: '>=6'}
dev: true
/call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
set-function-length: 1.2.1
dev: false
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
@ -820,6 +955,11 @@ packages:
fsevents: 2.3.3
dev: true
/clone@2.1.2:
resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
engines: {node: '>=0.8'}
dev: false
/code-red@1.0.4:
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
dependencies:
@ -861,11 +1001,41 @@ packages:
ms: 2.1.2
dev: true
/deep-equal@1.1.2:
resolution: {integrity: sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==}
engines: {node: '>= 0.4'}
dependencies:
is-arguments: 1.1.1
is-date-object: 1.0.5
is-regex: 1.1.4
object-is: 1.1.5
object-keys: 1.1.1
regexp.prototype.flags: 1.5.2
dev: false
/deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
dev: true
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
dependencies:
es-define-property: 1.0.0
es-errors: 1.3.0
gopd: 1.0.1
dev: false
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
dev: false
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@ -879,6 +1049,18 @@ packages:
resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
dev: true
/es-define-property@1.0.0:
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
dev: false
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
dev: false
/es6-promise@3.3.1:
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
dev: true
@ -933,6 +1115,22 @@ packages:
dependencies:
'@types/estree': 1.0.5
/eventemitter3@2.0.3:
resolution: {integrity: sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==}
dev: false
/extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
dev: false
/fast-diff@1.1.2:
resolution: {integrity: sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==}
dev: false
/fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
dev: true
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@ -971,7 +1169,21 @@ packages:
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
dev: true
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: false
/get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
has-proto: 1.0.3
has-symbols: 1.0.3
hasown: 2.0.1
dev: false
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
@ -1010,16 +1222,44 @@ packages:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
dev: true
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
get-intrinsic: 1.2.4
dev: false
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
/has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
es-define-property: 1.0.0
dev: false
/has-proto@1.0.3:
resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
engines: {node: '>= 0.4'}
dev: false
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
dev: false
/has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
dependencies:
has-symbols: 1.0.3
dev: false
/hasown@2.0.1:
resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
dev: true
/import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
@ -1044,6 +1284,14 @@ packages:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
/is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
has-tostringtag: 1.0.2
dev: false
/is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
@ -1064,6 +1312,13 @@ packages:
hasown: 2.0.1
dev: true
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
engines: {node: '>= 0.4'}
dependencies:
has-tostringtag: 1.0.2
dev: false
/is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@ -1096,6 +1351,14 @@ packages:
dependencies:
'@types/estree': 1.0.5
/is-regex@1.1.4:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
has-tostringtag: 1.0.2
dev: false
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
@ -1112,6 +1375,24 @@ packages:
/locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
/lodash.clonedeep@4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
dev: true
/lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
dev: true
/loro-crdt@0.11.1:
resolution: {integrity: sha512-C4+lryPZUDqUiLqX0mVp9wRb6+MPvhNngJNQhQxwIDqzn3oP/7Qra8XgY37M4d4Yvx2ZgG+1nYnR+43/xRwq7g==}
dependencies:
loro-wasm: 0.11.1
dev: false
/loro-wasm@0.11.1:
resolution: {integrity: sha512-/AkU2uXDRrKf6iu2WeaFIXjWzcwLgn3aWZFDW5yrIZGxc/0lB60b8F5cjyU+HqGzeXqGy0KnMrio+mTRDy1W0w==}
dev: false
/magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
engines: {node: '>=12'}
@ -1188,12 +1469,32 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/object-is@1.1.5:
resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
dev: false
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: true
/orderedmap@2.1.1:
resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
dev: false
/parchment@1.1.4:
resolution: {integrity: sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==}
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@ -1235,10 +1536,129 @@ packages:
source-map-js: 1.0.2
dev: true
/prosemirror-commands@1.5.2:
resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==}
dependencies:
prosemirror-model: 1.19.4
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
dev: false
/prosemirror-dropcursor@1.8.1:
resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==}
dependencies:
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
prosemirror-view: 1.33.1
dev: false
/prosemirror-gapcursor@1.3.2:
resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==}
dependencies:
prosemirror-keymap: 1.2.2
prosemirror-model: 1.19.4
prosemirror-state: 1.4.3
prosemirror-view: 1.33.1
dev: false
/prosemirror-history@1.3.2:
resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==}
dependencies:
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
prosemirror-view: 1.33.1
rope-sequence: 1.3.4
dev: false
/prosemirror-inputrules@1.4.0:
resolution: {integrity: sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==}
dependencies:
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
dev: false
/prosemirror-keymap@1.2.2:
resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==}
dependencies:
prosemirror-state: 1.4.3
w3c-keyname: 2.2.8
dev: false
/prosemirror-model@1.19.4:
resolution: {integrity: sha512-RPmVXxUfOhyFdayHawjuZCxiROsm9L4FCUA6pWI+l7n2yCBsWy9VpdE1hpDHUS8Vad661YLY9AzqfjLhAKQ4iQ==}
dependencies:
orderedmap: 2.1.1
dev: false
/prosemirror-schema-basic@1.2.2:
resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==}
dependencies:
prosemirror-model: 1.19.4
dev: false
/prosemirror-schema-list@1.3.0:
resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==}
dependencies:
prosemirror-model: 1.19.4
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
dev: false
/prosemirror-state@1.4.3:
resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==}
dependencies:
prosemirror-model: 1.19.4
prosemirror-transform: 1.8.0
prosemirror-view: 1.33.1
dev: false
/prosemirror-transform@1.8.0:
resolution: {integrity: sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==}
dependencies:
prosemirror-model: 1.19.4
dev: false
/prosemirror-view@1.33.1:
resolution: {integrity: sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==}
dependencies:
prosemirror-model: 1.19.4
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
dev: false
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
/quill-delta@3.6.3:
resolution: {integrity: sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==}
engines: {node: '>=0.10'}
dependencies:
deep-equal: 1.1.2
extend: 3.0.2
fast-diff: 1.1.2
dev: false
/quill-delta@5.1.0:
resolution: {integrity: sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==}
engines: {node: '>= 12.0.0'}
dependencies:
fast-diff: 1.3.0
lodash.clonedeep: 4.5.0
lodash.isequal: 4.5.0
dev: true
/quill@1.3.7:
resolution: {integrity: sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==}
dependencies:
clone: 2.1.2
deep-equal: 1.1.2
eventemitter3: 2.0.3
extend: 3.0.2
parchment: 1.1.4
quill-delta: 3.6.3
dev: false
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@ -1246,6 +1666,16 @@ packages:
picomatch: 2.3.1
dev: true
/regexp.prototype.flags@1.5.2:
resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-errors: 1.3.0
set-function-name: 2.0.2
dev: false
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@ -1295,26 +1725,9 @@ packages:
fsevents: 2.3.3
dev: true
/rollup@4.9.1:
resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.9.1
'@rollup/rollup-android-arm64': 4.9.1
'@rollup/rollup-darwin-arm64': 4.9.1
'@rollup/rollup-darwin-x64': 4.9.1
'@rollup/rollup-linux-arm-gnueabihf': 4.9.1
'@rollup/rollup-linux-arm64-gnu': 4.9.1
'@rollup/rollup-linux-arm64-musl': 4.9.1
'@rollup/rollup-linux-riscv64-gnu': 4.9.1
'@rollup/rollup-linux-x64-gnu': 4.9.1
'@rollup/rollup-linux-x64-musl': 4.9.1
'@rollup/rollup-win32-arm64-msvc': 4.9.1
'@rollup/rollup-win32-ia32-msvc': 4.9.1
'@rollup/rollup-win32-x64-msvc': 4.9.1
fsevents: 2.3.3
dev: true
/rope-sequence@1.3.4:
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
dev: false
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@ -1342,6 +1755,28 @@ packages:
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
dev: true
/set-function-length@1.2.1:
resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
dev: false
/set-function-name@2.0.2:
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
dev: false
/sirv@2.0.4:
resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
@ -1511,6 +1946,33 @@ packages:
hasBin: true
dev: true
/uuid@9.0.1:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
dev: true
/vite-plugin-top-level-await@1.4.1(vite@5.0.10):
resolution: {integrity: sha512-hogbZ6yT7+AqBaV6lK9JRNvJDn4/IJvHLu6ET06arNfo0t2IsyCaon7el9Xa8OumH+ESuq//SDf8xscZFE0rWw==}
peerDependencies:
vite: '>=2.8'
dependencies:
'@rollup/plugin-virtual': 3.0.2
'@swc/core': 1.4.2
uuid: 9.0.1
vite: 5.0.10
transitivePeerDependencies:
- '@swc/helpers'
- rollup
dev: true
/vite-plugin-wasm@3.3.0(vite@5.0.10):
resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==}
peerDependencies:
vite: ^2 || ^3 || ^4 || ^5
dependencies:
vite: 5.0.10
dev: true
/vite@5.0.10:
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
engines: {node: ^18.0.0 || >=20.0.0}
@ -1541,7 +2003,7 @@ packages:
dependencies:
esbuild: 0.19.10
postcss: 8.4.32
rollup: 4.9.1
rollup: 4.10.0
optionalDependencies:
fsevents: 2.3.3
dev: true
@ -1557,6 +2019,10 @@ packages:
vite: 5.0.10
dev: true
/w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true