This commit is contained in:
Martin Kleinschrodt 2022-07-15 18:58:26 +02:00
parent 23d524127c
commit be067e5008
12 changed files with 1051 additions and 73 deletions

View File

@ -11,6 +11,8 @@
"dependencies": {
"@simplewebauthn/browser": "4.0.0",
"@simplewebauthn/typescript-types": "4.0.0",
"@tiptap/core": "2.0.0-beta.182",
"@tiptap/starter-kit": "2.0.0-beta.191",
"@types/dompurify": "2.3.1",
"@types/marked": "4.0.3",
"@types/papaparse": "5.2.5",
@ -101,6 +103,285 @@
"version": "4.0.0",
"license": "MIT"
},
"node_modules/@tiptap/core": {
"version": "2.0.0-beta.182",
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.182.tgz",
"integrity": "sha512-MZGkMGnVnWhBzjvpBNwQ9zBz38ndi3Irbf90uCTSArR0kaCVkW4vmyuPuOXd+0SO8Yv/l5oyDdOCpaG3rnQYfw==",
"dependencies": {
"prosemirror-commands": "1.3.0",
"prosemirror-keymap": "1.2.0",
"prosemirror-model": "1.18.1",
"prosemirror-schema-list": "1.2.0",
"prosemirror-state": "1.4.1",
"prosemirror-transform": "1.6.0",
"prosemirror-view": "1.26.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
}
},
"node_modules/@tiptap/extension-blockquote": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.29.tgz",
"integrity": "sha512-zMYT5TtpKWav9VhTn4JLyMvXmhEdbD6on0MdhcTjRm0I5ugyR4ZbJwh2aelM7G9DZVYzB8jZU18OSDJmo7Af7w==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-bold": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.28.tgz",
"integrity": "sha512-DY8GOzw9xjmTFrnvTbgHUNxTnDfKrkDgrhe0SUvdkT2udntWp8umPdhPiD3vczLgHOJw6tX68qMRjbsR1ZPcHQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-bullet-list": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.29.tgz",
"integrity": "sha512-R8VB2l1ZB6VeGWx/t/04nBS5Wg3qjIDEZCpPihj2fccJOw99Lu0Ub2UJg/SfdGmeNNpBh4ZYYFv1g/XjyzlXKg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-code": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.28.tgz",
"integrity": "sha512-QPJ2Gwb1+3NgcC1ZIhvVcb+FsnWWDu5VZXTKXM4mz892i9V2x48uHg5anPiUV6pcolXsW1F5VNbXIHGTUUO6CQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-code-block": {
"version": "2.0.0-beta.42",
"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.42.tgz",
"integrity": "sha512-4wzLup4mI8w9ypIceekUV/8g41cQIPn31qs1iC9u1/JuTkjMj/tA+TFUyp6IMugLxoI/P2DlTztU6/6m7n9DyQ==",
"dependencies": {
"prosemirror-state": "1.4.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-document": {
"version": "2.0.0-beta.17",
"resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.17.tgz",
"integrity": "sha512-L6sg0FNchbtIpQkCSjMmItVGs3/vep8Fq56WRtDc1wBSGUSmtHaxQG7F2FZLnNIUMuvzVMRD81m2vYG73WkY6A==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-dropcursor": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.29.tgz",
"integrity": "sha512-I+joyoFB8pfdXUPLMqdNO08nlB5m2lbu0VQ5dpqdi/HzgVThMZPZA1cW0X8vAUvrALs5/JFRiFoR9hrLN5R5ng==",
"dependencies": {
"prosemirror-dropcursor": "1.5.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-gapcursor": {
"version": "2.0.0-beta.39",
"resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.39.tgz",
"integrity": "sha512-oCyz5WEeQXrEIoa1WXaD52yf1EwMFCXaK1cVzFgUj8lkXJ+nJj+O/Zp0Mg+9/MVR0LYu/kifqVorKNXM4AFA/g==",
"dependencies": {
"prosemirror-gapcursor": "1.3.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-hard-break": {
"version": "2.0.0-beta.33",
"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.33.tgz",
"integrity": "sha512-41xf0vSV9hcyTFd01ItLq/CjhjgmOFLCrO3UWN/P2E/cIxuDTyXcvjTE/KXeqRCOV3OYd9fVr0wO91hc8Ij1Yg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-heading": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.29.tgz",
"integrity": "sha512-q92jYcsT5bPhvuQaB0h44Z9r+Ii22tDYo082KMVnR4+tknHT/3xx+p4JC8KHjh+/5W8Quyafqy6mS8L8VX0zsQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-history": {
"version": "2.0.0-beta.26",
"resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.26.tgz",
"integrity": "sha512-ly19uwvdmXG8Fw1KcavXIHi3Qx6JBASOR7394zghOEpW3atpY8nd/8I373rZ8eDUcGOClfaF7bCx2xvIotAAnw==",
"dependencies": {
"prosemirror-history": "1.3.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-horizontal-rule": {
"version": "2.0.0-beta.36",
"resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.36.tgz",
"integrity": "sha512-o+Zp7dcn3zAQhtlhZiFB69mTHuH3ZRbGEF7Cbf1D3uX1izotni5zIZbPaFFUT4r6OmVe/vDDt/nopfcGc10ktQ==",
"dependencies": {
"prosemirror-state": "1.4.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-italic": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.28.tgz",
"integrity": "sha512-/pKRiCfewh7nqiXRD3N4hQHfGrGNOiWPFYZfY35bSpvTms7PDb/MF7xT1CWW23hSpY31BBS+R/a66vlR/gqu7Q==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-list-item": {
"version": "2.0.0-beta.23",
"resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.23.tgz",
"integrity": "sha512-AkzvdELz3ZnrlZM0r9+ritBDOnAjXHR/8zCZhW0ZlWx4zyKPMsNG5ygivY+xr4QT65NEGRT8P8b2zOhXrMjjMQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-ordered-list": {
"version": "2.0.0-beta.30",
"resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.30.tgz",
"integrity": "sha512-GRxGQdq1u0Rp5N8TjthCqoZ//460m343A0HCN7UwfQOnX7Ipv0UJemwNkSHWrl7Pexym9vy3yPWgrn7oRRmgEw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-paragraph": {
"version": "2.0.0-beta.26",
"resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.26.tgz",
"integrity": "sha512-WcYsuUa7LLfk0vi7I1dVjdMRu53B52FMMqd+UL1qPdDKVkU3DBsZVwPj+yyfQyqN8Mc/xyg9VacGaiKFLmWNDg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-strike": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.29.tgz",
"integrity": "sha512-zqFuY7GfNmZ/KClt6kxQ+msGo3syqucP/Xnlihxi+/h/G+oTvEwyOIXCtDOltvxcsWH/TUsdr5vzLp0j+Mdc6Q==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/extension-text": {
"version": "2.0.0-beta.17",
"resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.17.tgz",
"integrity": "sha512-OyKL+pqWJEtjyd9/mrsuY1kZh2b3LWpOQDWKtd4aWR4EA0efmQG+7FPwcIeAVEh7ZoqM+/ABCnPjN6IjzIrSfg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
"@tiptap/core": "^2.0.0-beta.1"
}
},
"node_modules/@tiptap/starter-kit": {
"version": "2.0.0-beta.191",
"resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.191.tgz",
"integrity": "sha512-YRrBCi9W4jiH/xLTJJOCdD7pL4Wb98Ip8qCJ94RElShDj0O1i5tT9wWlgVWoGIU+CRAds5XENRwZ97sJ+YfYyg==",
"dependencies": {
"@tiptap/core": "^2.0.0-beta.182",
"@tiptap/extension-blockquote": "^2.0.0-beta.29",
"@tiptap/extension-bold": "^2.0.0-beta.28",
"@tiptap/extension-bullet-list": "^2.0.0-beta.29",
"@tiptap/extension-code": "^2.0.0-beta.28",
"@tiptap/extension-code-block": "^2.0.0-beta.42",
"@tiptap/extension-document": "^2.0.0-beta.17",
"@tiptap/extension-dropcursor": "^2.0.0-beta.29",
"@tiptap/extension-gapcursor": "^2.0.0-beta.39",
"@tiptap/extension-hard-break": "^2.0.0-beta.33",
"@tiptap/extension-heading": "^2.0.0-beta.29",
"@tiptap/extension-history": "^2.0.0-beta.26",
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.36",
"@tiptap/extension-italic": "^2.0.0-beta.28",
"@tiptap/extension-list-item": "^2.0.0-beta.23",
"@tiptap/extension-ordered-list": "^2.0.0-beta.30",
"@tiptap/extension-paragraph": "^2.0.0-beta.26",
"@tiptap/extension-strike": "^2.0.0-beta.29",
"@tiptap/extension-text": "^2.0.0-beta.17"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
}
},
"node_modules/@types/chai": {
"version": "4.2.18",
"dev": true,
@ -1226,6 +1507,11 @@
"opener": "bin/opener-bin.js"
}
},
"node_modules/orderedmap": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.0.0.tgz",
"integrity": "sha512-buf4PoAMlh45b8a8gsGy/X6w279TSqkyAS0C0wdTSJwFSU+ljQFJON5I8NfjLHoCXwpSROIo2wr0g33T+kQshQ=="
},
"node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
@ -1339,6 +1625,101 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/prosemirror-commands": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.3.0.tgz",
"integrity": "sha512-BwBbZ5OAScPcm0x7H8SPbqjuEJnCU2RJT9LDyOiiIl/3NbL1nJZI4SFNHwU2e/tRr2Xe7JsptpzseqvZvToLBQ==",
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"node_modules/prosemirror-dropcursor": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.5.0.tgz",
"integrity": "sha512-vy7i77ddKyXlu8kKBB3nlxLBnsWyKUmQIPB5x8RkYNh01QNp/qqGmdd5yZefJs0s3rtv5r7Izfu2qbtr+tYAMQ==",
"dependencies": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0",
"prosemirror-view": "^1.1.0"
}
},
"node_modules/prosemirror-gapcursor": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.0.tgz",
"integrity": "sha512-9Tdx83xB2W4Oqchm12FtCkSizbqvi64cjs1I9TRPblqdA5TUWoVZ4ZI+t71Jh6HSEh4cDMPzx3UwfryJtKlb/w==",
"dependencies": {
"prosemirror-keymap": "^1.0.0",
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-view": "^1.0.0"
}
},
"node_modules/prosemirror-history": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.0.tgz",
"integrity": "sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==",
"dependencies": {
"prosemirror-state": "^1.2.2",
"prosemirror-transform": "^1.0.0",
"rope-sequence": "^1.3.0"
}
},
"node_modules/prosemirror-keymap": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.0.tgz",
"integrity": "sha512-TdSfu+YyLDd54ufN/ZeD1VtBRYpgZnTPnnbY+4R08DDgs84KrIPEPbJL8t1Lm2dkljFx6xeBE26YWH3aIzkPKg==",
"dependencies": {
"prosemirror-state": "^1.0.0",
"w3c-keyname": "^2.2.0"
}
},
"node_modules/prosemirror-model": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.18.1.tgz",
"integrity": "sha512-IxSVBKAEMjD7s3n8cgtwMlxAXZrC7Mlag7zYsAKDndAqnDScvSmp/UdnRTV/B33lTCVU3CCm7dyAn/rVVD0mcw==",
"dependencies": {
"orderedmap": "^2.0.0"
}
},
"node_modules/prosemirror-schema-list": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.0.tgz",
"integrity": "sha512-8PT/9xOx1HHdC7fDNNfhQ50Z8Mzu7nKyA1KCDltSpcZVZIbB0k7KtsHrnXyuIhbLlScoymBiLZ00c5MH6wdFsA==",
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"node_modules/prosemirror-state": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.1.tgz",
"integrity": "sha512-U/LBDW2gNmVa07sz/D229XigSdDQ5CLFwVB1Vb32MJbAHHhWe/6pOc721faI17tqw4pZ49i1xfY/jEZ9tbIhPg==",
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"node_modules/prosemirror-transform": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.6.0.tgz",
"integrity": "sha512-MAp7AjsjEGEqQY0sSMufNIUuEyB1ZR9Fqlm8dTwwWwpEJRv/plsKjWXBbx52q3Ml8MtaMcd7ic14zAHVB3WaMw==",
"dependencies": {
"prosemirror-model": "^1.0.0"
}
},
"node_modules/prosemirror-view": {
"version": "1.26.2",
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.26.2.tgz",
"integrity": "sha512-CGKw+GadkfSBEwRAJTHCEKJ4DlV6/3IhAdjpwGyZHUHtbP7jX4Ol4zmi7xa2c6GOabDlIJLYXJydoNYLX7lNeQ==",
"dependencies": {
"prosemirror-model": "^1.16.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0"
}
},
"node_modules/qrcode": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz",
@ -1554,6 +1935,11 @@
"version": "1.0.0",
"license": "MIT"
},
"node_modules/rope-sequence": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz",
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q=="
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@ -1723,6 +2109,11 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/w3c-keyname": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz",
"integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw=="
},
"node_modules/whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
@ -1894,6 +2285,164 @@
"@simplewebauthn/typescript-types": {
"version": "4.0.0"
},
"@tiptap/core": {
"version": "2.0.0-beta.182",
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.182.tgz",
"integrity": "sha512-MZGkMGnVnWhBzjvpBNwQ9zBz38ndi3Irbf90uCTSArR0kaCVkW4vmyuPuOXd+0SO8Yv/l5oyDdOCpaG3rnQYfw==",
"requires": {
"prosemirror-commands": "1.3.0",
"prosemirror-keymap": "1.2.0",
"prosemirror-model": "1.18.1",
"prosemirror-schema-list": "1.2.0",
"prosemirror-state": "1.4.1",
"prosemirror-transform": "1.6.0",
"prosemirror-view": "1.26.2"
}
},
"@tiptap/extension-blockquote": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.29.tgz",
"integrity": "sha512-zMYT5TtpKWav9VhTn4JLyMvXmhEdbD6on0MdhcTjRm0I5ugyR4ZbJwh2aelM7G9DZVYzB8jZU18OSDJmo7Af7w==",
"requires": {}
},
"@tiptap/extension-bold": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.28.tgz",
"integrity": "sha512-DY8GOzw9xjmTFrnvTbgHUNxTnDfKrkDgrhe0SUvdkT2udntWp8umPdhPiD3vczLgHOJw6tX68qMRjbsR1ZPcHQ==",
"requires": {}
},
"@tiptap/extension-bullet-list": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.29.tgz",
"integrity": "sha512-R8VB2l1ZB6VeGWx/t/04nBS5Wg3qjIDEZCpPihj2fccJOw99Lu0Ub2UJg/SfdGmeNNpBh4ZYYFv1g/XjyzlXKg==",
"requires": {}
},
"@tiptap/extension-code": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.28.tgz",
"integrity": "sha512-QPJ2Gwb1+3NgcC1ZIhvVcb+FsnWWDu5VZXTKXM4mz892i9V2x48uHg5anPiUV6pcolXsW1F5VNbXIHGTUUO6CQ==",
"requires": {}
},
"@tiptap/extension-code-block": {
"version": "2.0.0-beta.42",
"resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.42.tgz",
"integrity": "sha512-4wzLup4mI8w9ypIceekUV/8g41cQIPn31qs1iC9u1/JuTkjMj/tA+TFUyp6IMugLxoI/P2DlTztU6/6m7n9DyQ==",
"requires": {
"prosemirror-state": "1.4.1"
}
},
"@tiptap/extension-document": {
"version": "2.0.0-beta.17",
"resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.0.0-beta.17.tgz",
"integrity": "sha512-L6sg0FNchbtIpQkCSjMmItVGs3/vep8Fq56WRtDc1wBSGUSmtHaxQG7F2FZLnNIUMuvzVMRD81m2vYG73WkY6A==",
"requires": {}
},
"@tiptap/extension-dropcursor": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.29.tgz",
"integrity": "sha512-I+joyoFB8pfdXUPLMqdNO08nlB5m2lbu0VQ5dpqdi/HzgVThMZPZA1cW0X8vAUvrALs5/JFRiFoR9hrLN5R5ng==",
"requires": {
"prosemirror-dropcursor": "1.5.0"
}
},
"@tiptap/extension-gapcursor": {
"version": "2.0.0-beta.39",
"resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.39.tgz",
"integrity": "sha512-oCyz5WEeQXrEIoa1WXaD52yf1EwMFCXaK1cVzFgUj8lkXJ+nJj+O/Zp0Mg+9/MVR0LYu/kifqVorKNXM4AFA/g==",
"requires": {
"prosemirror-gapcursor": "1.3.0"
}
},
"@tiptap/extension-hard-break": {
"version": "2.0.0-beta.33",
"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.33.tgz",
"integrity": "sha512-41xf0vSV9hcyTFd01ItLq/CjhjgmOFLCrO3UWN/P2E/cIxuDTyXcvjTE/KXeqRCOV3OYd9fVr0wO91hc8Ij1Yg==",
"requires": {}
},
"@tiptap/extension-heading": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.29.tgz",
"integrity": "sha512-q92jYcsT5bPhvuQaB0h44Z9r+Ii22tDYo082KMVnR4+tknHT/3xx+p4JC8KHjh+/5W8Quyafqy6mS8L8VX0zsQ==",
"requires": {}
},
"@tiptap/extension-history": {
"version": "2.0.0-beta.26",
"resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.26.tgz",
"integrity": "sha512-ly19uwvdmXG8Fw1KcavXIHi3Qx6JBASOR7394zghOEpW3atpY8nd/8I373rZ8eDUcGOClfaF7bCx2xvIotAAnw==",
"requires": {
"prosemirror-history": "1.3.0"
}
},
"@tiptap/extension-horizontal-rule": {
"version": "2.0.0-beta.36",
"resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.36.tgz",
"integrity": "sha512-o+Zp7dcn3zAQhtlhZiFB69mTHuH3ZRbGEF7Cbf1D3uX1izotni5zIZbPaFFUT4r6OmVe/vDDt/nopfcGc10ktQ==",
"requires": {
"prosemirror-state": "1.4.1"
}
},
"@tiptap/extension-italic": {
"version": "2.0.0-beta.28",
"resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.28.tgz",
"integrity": "sha512-/pKRiCfewh7nqiXRD3N4hQHfGrGNOiWPFYZfY35bSpvTms7PDb/MF7xT1CWW23hSpY31BBS+R/a66vlR/gqu7Q==",
"requires": {}
},
"@tiptap/extension-list-item": {
"version": "2.0.0-beta.23",
"resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.23.tgz",
"integrity": "sha512-AkzvdELz3ZnrlZM0r9+ritBDOnAjXHR/8zCZhW0ZlWx4zyKPMsNG5ygivY+xr4QT65NEGRT8P8b2zOhXrMjjMQ==",
"requires": {}
},
"@tiptap/extension-ordered-list": {
"version": "2.0.0-beta.30",
"resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.30.tgz",
"integrity": "sha512-GRxGQdq1u0Rp5N8TjthCqoZ//460m343A0HCN7UwfQOnX7Ipv0UJemwNkSHWrl7Pexym9vy3yPWgrn7oRRmgEw==",
"requires": {}
},
"@tiptap/extension-paragraph": {
"version": "2.0.0-beta.26",
"resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.26.tgz",
"integrity": "sha512-WcYsuUa7LLfk0vi7I1dVjdMRu53B52FMMqd+UL1qPdDKVkU3DBsZVwPj+yyfQyqN8Mc/xyg9VacGaiKFLmWNDg==",
"requires": {}
},
"@tiptap/extension-strike": {
"version": "2.0.0-beta.29",
"resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.29.tgz",
"integrity": "sha512-zqFuY7GfNmZ/KClt6kxQ+msGo3syqucP/Xnlihxi+/h/G+oTvEwyOIXCtDOltvxcsWH/TUsdr5vzLp0j+Mdc6Q==",
"requires": {}
},
"@tiptap/extension-text": {
"version": "2.0.0-beta.17",
"resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.17.tgz",
"integrity": "sha512-OyKL+pqWJEtjyd9/mrsuY1kZh2b3LWpOQDWKtd4aWR4EA0efmQG+7FPwcIeAVEh7ZoqM+/ABCnPjN6IjzIrSfg==",
"requires": {}
},
"@tiptap/starter-kit": {
"version": "2.0.0-beta.191",
"resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.0.0-beta.191.tgz",
"integrity": "sha512-YRrBCi9W4jiH/xLTJJOCdD7pL4Wb98Ip8qCJ94RElShDj0O1i5tT9wWlgVWoGIU+CRAds5XENRwZ97sJ+YfYyg==",
"requires": {
"@tiptap/core": "^2.0.0-beta.182",
"@tiptap/extension-blockquote": "^2.0.0-beta.29",
"@tiptap/extension-bold": "^2.0.0-beta.28",
"@tiptap/extension-bullet-list": "^2.0.0-beta.29",
"@tiptap/extension-code": "^2.0.0-beta.28",
"@tiptap/extension-code-block": "^2.0.0-beta.42",
"@tiptap/extension-document": "^2.0.0-beta.17",
"@tiptap/extension-dropcursor": "^2.0.0-beta.29",
"@tiptap/extension-gapcursor": "^2.0.0-beta.39",
"@tiptap/extension-hard-break": "^2.0.0-beta.33",
"@tiptap/extension-heading": "^2.0.0-beta.29",
"@tiptap/extension-history": "^2.0.0-beta.26",
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.36",
"@tiptap/extension-italic": "^2.0.0-beta.28",
"@tiptap/extension-list-item": "^2.0.0-beta.23",
"@tiptap/extension-ordered-list": "^2.0.0-beta.30",
"@tiptap/extension-paragraph": "^2.0.0-beta.26",
"@tiptap/extension-strike": "^2.0.0-beta.29",
"@tiptap/extension-text": "^2.0.0-beta.17"
}
},
"@types/chai": {
"version": "4.2.18",
"dev": true
@ -2672,6 +3221,11 @@
"opener": {
"version": "1.5.2"
},
"orderedmap": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.0.0.tgz",
"integrity": "sha512-buf4PoAMlh45b8a8gsGy/X6w279TSqkyAS0C0wdTSJwFSU+ljQFJON5I8NfjLHoCXwpSROIo2wr0g33T+kQshQ=="
},
"p-limit": {
"version": "3.1.0",
"dev": true,
@ -2744,6 +3298,101 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"prosemirror-commands": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.3.0.tgz",
"integrity": "sha512-BwBbZ5OAScPcm0x7H8SPbqjuEJnCU2RJT9LDyOiiIl/3NbL1nJZI4SFNHwU2e/tRr2Xe7JsptpzseqvZvToLBQ==",
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"prosemirror-dropcursor": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.5.0.tgz",
"integrity": "sha512-vy7i77ddKyXlu8kKBB3nlxLBnsWyKUmQIPB5x8RkYNh01QNp/qqGmdd5yZefJs0s3rtv5r7Izfu2qbtr+tYAMQ==",
"requires": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0",
"prosemirror-view": "^1.1.0"
}
},
"prosemirror-gapcursor": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.0.tgz",
"integrity": "sha512-9Tdx83xB2W4Oqchm12FtCkSizbqvi64cjs1I9TRPblqdA5TUWoVZ4ZI+t71Jh6HSEh4cDMPzx3UwfryJtKlb/w==",
"requires": {
"prosemirror-keymap": "^1.0.0",
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-view": "^1.0.0"
}
},
"prosemirror-history": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.0.tgz",
"integrity": "sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==",
"requires": {
"prosemirror-state": "^1.2.2",
"prosemirror-transform": "^1.0.0",
"rope-sequence": "^1.3.0"
}
},
"prosemirror-keymap": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.0.tgz",
"integrity": "sha512-TdSfu+YyLDd54ufN/ZeD1VtBRYpgZnTPnnbY+4R08DDgs84KrIPEPbJL8t1Lm2dkljFx6xeBE26YWH3aIzkPKg==",
"requires": {
"prosemirror-state": "^1.0.0",
"w3c-keyname": "^2.2.0"
}
},
"prosemirror-model": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.18.1.tgz",
"integrity": "sha512-IxSVBKAEMjD7s3n8cgtwMlxAXZrC7Mlag7zYsAKDndAqnDScvSmp/UdnRTV/B33lTCVU3CCm7dyAn/rVVD0mcw==",
"requires": {
"orderedmap": "^2.0.0"
}
},
"prosemirror-schema-list": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.0.tgz",
"integrity": "sha512-8PT/9xOx1HHdC7fDNNfhQ50Z8Mzu7nKyA1KCDltSpcZVZIbB0k7KtsHrnXyuIhbLlScoymBiLZ00c5MH6wdFsA==",
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"prosemirror-state": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.1.tgz",
"integrity": "sha512-U/LBDW2gNmVa07sz/D229XigSdDQ5CLFwVB1Vb32MJbAHHhWe/6pOc721faI17tqw4pZ49i1xfY/jEZ9tbIhPg==",
"requires": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0"
}
},
"prosemirror-transform": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.6.0.tgz",
"integrity": "sha512-MAp7AjsjEGEqQY0sSMufNIUuEyB1ZR9Fqlm8dTwwWwpEJRv/plsKjWXBbx52q3Ml8MtaMcd7ic14zAHVB3WaMw==",
"requires": {
"prosemirror-model": "^1.0.0"
}
},
"prosemirror-view": {
"version": "1.26.2",
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.26.2.tgz",
"integrity": "sha512-CGKw+GadkfSBEwRAJTHCEKJ4DlV6/3IhAdjpwGyZHUHtbP7jX4Ol4zmi7xa2c6GOabDlIJLYXJydoNYLX7lNeQ==",
"requires": {
"prosemirror-model": "^1.16.0",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0"
}
},
"qrcode": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz",
@ -2911,6 +3560,11 @@
"requires-port": {
"version": "1.0.0"
},
"rope-sequence": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz",
"integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@ -3023,6 +3677,11 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"w3c-keyname": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz",
"integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw=="
},
"whatwg-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",

View File

@ -24,6 +24,8 @@
"@padloc/locale": "4.0.0",
"@simplewebauthn/browser": "4.0.0",
"@simplewebauthn/typescript-types": "4.0.0",
"@tiptap/core": "2.0.0-beta.182",
"@tiptap/starter-kit": "2.0.0-beta.191",
"@types/dompurify": "2.3.1",
"@types/marked": "4.0.3",
"@types/papaparse": "5.2.5",

View File

@ -16,6 +16,8 @@ import { randomString, charSets } from "@padloc/core/src/util";
import { app } from "../globals";
import { descriptionForAudit, iconForAudit, titleTextForAudit } from "../lib/audit";
import "./popover";
import "./rich-input";
import "./rich-content";
@customElement("pl-field")
export class FieldElement extends LitElement {
@ -214,6 +216,7 @@ export class FieldElement extends LitElement {
}
.value-display {
display: block;
margin: 0 0.4em 0.4em 1.5em;
white-space: pre-wrap;
overflow-wrap: break-word;
@ -221,6 +224,10 @@ export class FieldElement extends LitElement {
cursor: text;
}
.value-display.small {
margin-left: 1.8em;
}
.move-button {
display: flex;
--button-padding: 0 0.5em;
@ -252,6 +259,12 @@ export class FieldElement extends LitElement {
return html` <pre class="value-display mono">${format(this.field.value, this._masked)}</pre> `;
case "totp":
return html` <pl-totp class="mono value-display" .secret=${this.field.value}></pl-totp> `;
case "note":
return html` <pl-rich-content
class="small value-display"
type="html"
.content=${this.field.value}
></pl-rich-content>`;
default:
return html` <pre class="value-display">${format(this.field.value, this._masked)}</pre> `;
}
@ -261,14 +274,12 @@ export class FieldElement extends LitElement {
switch (this.field.type) {
case "note":
return html`
<pl-textarea
class="value-input"
.placeholder=${$l("Enter Notes Here")}
<pl-rich-input
class="small value-input"
@input=${() => (this.field.value = this._valueInput.value)}
autosize
.value=${this.field.value}
>
</pl-textarea>
</pl-rich-input>
`;
case "totp":

View File

@ -423,7 +423,7 @@ export class PlIcon extends LitElement {
}
:host([icon="note"]) > div::before {
content: "\\f036";
content: "\\e1da";
}
:host([icon="custom"]) > div::before {
@ -581,6 +581,62 @@ export class PlIcon extends LitElement {
:host([icon="field"]) > div::before {
content: "\\e211";
}
:host([icon="heading"]) > div::before {
content: "\\f1dc";
}
:host([icon="heading-1"]) > div::before {
content: "\\f313";
}
:host([icon="heading-2"]) > div::before {
content: "\\f314";
}
:host([icon="heading-3"]) > div::before {
content: "\\f315";
}
:host([icon="text"]) > div::before {
content: "\\f893";
}
:host([icon="bold"]) > div::before {
content: "\\f032";
}
:host([icon="italic"]) > div::before {
content: "\\f033";
}
:host([icon="list"]) > div::before {
content: "\\f03a";
}
:host([icon="list-ul"]) > div::before {
content: "\\f0ca";
}
:host([icon="list-ol"]) > div::before {
content: "\\f0cb";
}
:host([icon="list-check"]) > div::before {
content: "\\f0ae";
}
:host([icon="blockquote"]) > div::before {
content: "\\e0b5";
}
:host([icon="line"]) > div::before {
content: "\\f86c";
}
:host([icon="expand"]) > div::before {
content: "\\f320";
}
`,
];

View File

@ -1,10 +1,10 @@
import { openExternalUrl } from "@padloc/core/src/platform";
import { sanitize } from "dompurify";
import { css, html, LitElement } from "lit";
import { html, LitElement } from "lit";
import { customElement, property } from "lit/decorators.js";
import { unsafeHTML } from "lit/directives/unsafe-html.js";
import { mardownToHtml } from "../lib/markdown";
import { mixins, shared } from "../styles";
import { content, shared } from "../styles";
import { icons } from "../styles/icons";
@customElement("pl-rich-content")
@ -12,75 +12,13 @@ export class RichContent extends LitElement {
@property()
content = "";
@property()
type: "plain" | "markdown" | "html" = "markdown";
@property({ type: Boolean })
sanitize = true;
static styles = [
shared,
icons,
css`
h1 {
font-size: var(--font-size-big);
font-weight: 600;
}
h2 {
font-size: var(--font-size-large);
font-weight: bold;
}
h3 {
font-size: var(--font-size-default);
font-weight: bold;
}
p {
margin-bottom: 0.5em;
}
ul {
list-style: disc;
padding-left: 1.5em;
margin-bottom: 0.5em;
}
ul.plain {
list-style: none;
padding: 0;
}
button {
position: relative;
box-sizing: border-box;
padding: var(--button-padding, 0.7em);
background: var(--button-background);
color: var(--button-color, currentColor);
border-width: var(--button-border-width);
border-style: var(--button-border-style);
border-color: var(--button-border-color);
border-radius: var(--button-border-radius, 0.5em);
font-weight: inherit;
text-align: inherit;
transition: transform 0.2s cubic-bezier(0.05, 0.7, 0.03, 3) 0s;
--focus-outline-color: var(--button-focus-outline-color);
box-shadow: var(--button-shadow);
}
button.primary {
background: var(--button-primary-background, var(--button-background));
color: var(--button-primary-color, var(--button-color));
}
a.plain {
text-decoration: none !important;
}
${mixins.click("button")};
${mixins.hover("button")};
`,
];
static styles = [shared, icons, content];
updated() {
for (const anchor of [...this.renderRoot.querySelectorAll("a[href]")] as HTMLAnchorElement[]) {

View File

@ -0,0 +1,187 @@
import { css, customElement, html, LitElement } from "lit-element";
import { Editor } from "@tiptap/core";
import StarterKit from "@tiptap/starter-kit";
import { shared, content } from "../styles";
import "./button";
import "./icon";
import "./list";
import "./popover";
// import { EmojiClickEvent } from "./emoji-picker";
// import "./emoji-picker";
@customElement("pl-rich-input")
export class RichInput extends LitElement {
get value() {
return this._editor.getHTML();
}
set value(content: string) {
this._editor.commands.clearContent();
this._editor.commands.insertContent(content);
}
private _editor = new Editor({
extensions: [StarterKit],
onTransaction: () => this.requestUpdate(),
onFocus: () => this.classList.add("focused"),
onBlur: () => this.classList.remove("focused"),
});
firstUpdated() {
this.renderRoot.querySelector(".container")!.append(this._editor.options.element);
this.addEventListener("click", () => this._editor.commands.focus());
}
focus() {
this._editor.commands.focus();
}
// private _emojiSelected(e: EmojiClickEvent) {
// console.log(e);
// if (e.detail.unicode) {
// this._editor.chain().focus().insertContent(e.detail.unicode).run();
// }
// }
static styles = [
shared,
content,
css`
:host {
position: relative;
cursor: text;
border: solid 1px var(--color-shade-1);
border-radius: 0.5em;
display: flex;
flex-direction: column;
}
:host(.focused) {
border-color: var(--color-highlight);
}
`,
];
render() {
return html`
<div class="small padded half-spacing wrapping horizontal layout border-bottom">
<pl-button class="transparent slim">
${this._editor?.isActive("heading", { level: 1 })
? html` <pl-icon icon="heading-1"></pl-icon> `
: this._editor?.isActive("heading", { level: 2 })
? html` <pl-icon icon="heading-2"></pl-icon> `
: this._editor?.isActive("heading", { level: 3 })
? html` <pl-icon icon="heading-3"></pl-icon> `
: html` <pl-icon icon="text"></pl-icon> `}
<pl-icon class="small" icon="dropdown"></pl-icon>
</pl-button>
<pl-popover hide-on-click>
<pl-list>
<div
class="small double-padded centering horizontal layout list-item hover click"
@click=${() => this._editor.chain().focus().setHeading({ level: 1 }).run()}
>
<pl-icon icon="heading-1"></pl-icon>
</div>
<div
class="small double-padded centering horizontal layout list-item hover click"
@click=${() => this._editor.chain().focus().setHeading({ level: 2 }).run()}
>
<pl-icon icon="heading-2"></pl-icon>
</div>
<div
class="small double-padded centering horizontal layout list-item hover click"
@click=${() => this._editor.chain().focus().setHeading({ level: 3 }).run()}
>
<pl-icon icon="heading-3"></pl-icon>
</div>
<div
class="small double-padded centering horizontal layout list-item hover click"
@click=${() => this._editor.chain().focus().setParagraph().run()}
>
<pl-icon icon="text"></pl-icon>
</div>
</pl-list>
</pl-popover>
<div class="border-left"></div>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("bold")}
@click=${() => this._editor.chain().focus().toggleBold().run()}
>
<pl-icon icon="bold"></pl-icon>
</pl-button>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("italic")}
@click=${() => this._editor.chain().focus().toggleItalic().run()}
>
<pl-icon icon="italic"></pl-icon>
</pl-button>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("strike")}
@click=${() => this._editor.chain().focus().toggleStrike().run()}
>
<pl-icon icon="strikethrough"></pl-icon>
</pl-button>
<div class="border-left"></div>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("bulletList")}
@click=${() => this._editor.chain().focus().toggleBulletList().run()}
>
<pl-icon icon="list"></pl-icon>
</pl-button>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("orderedList")}
@click=${() => this._editor.chain().focus().toggleOrderedList().run()}
>
<pl-icon icon="list-ol"></pl-icon>
</pl-button>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("orderedList")}
@click=${() => this._editor.chain().focus().toggleOrderedList().run()}
>
<pl-icon icon="list-check"></pl-icon>
</pl-button>
<pl-button
class="transparent slim"
.toggled=${this._editor?.isActive("blockquote")}
@click=${() => this._editor.chain().focus().toggleBlockquote().run()}
>
<pl-icon icon="blockquote"></pl-icon>
</pl-button>
<div class="border-left"></div>
<pl-button
class="transparent slim"
@click=${() => this._editor.chain().focus().setHorizontalRule().run()}
>
<pl-icon icon="line"></pl-icon>
</pl-button>
<div class="stretch"></div>
<pl-button class="transparent slim">
<pl-icon icon="expand"></pl-icon>
</pl-button>
</div>
<div class="double-padded container scroller stretch" @click=${(e: Event) => e.stopPropagation()}></div>
`;
}
}

View File

@ -0,0 +1,103 @@
import { css } from "lit";
import { click, hover } from "./mixins";
export const content = css`
h1 {
font-size: var(--font-size-big);
font-weight: bold;
}
h2 {
font-size: var(--font-size-large);
font-weight: bold;
}
h3 {
font-size: var(--font-size-default);
font-weight: bold;
}
h1,
h2,
h3 {
margin-bottom: 0.5em;
}
p:not(:last-child),
blockquote:not(:last-child) {
margin-bottom: 0.5em;
}
ul,
ol {
padding-left: 1.5em;
margin-bottom: 0.5em;
}
ul {
list-style: disc;
}
ol {
list-style: decimal;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin-bottom: 0;
}
ul.plain {
list-style: none;
padding: 0;
}
li p:not(:last-child) {
margin-bottom: 0;
}
button {
position: relative;
box-sizing: border-box;
padding: var(--button-padding, 0.7em);
background: var(--button-background);
color: var(--button-color, currentColor);
border-width: var(--button-border-width);
border-style: var(--button-border-style);
border-color: var(--button-border-color);
border-radius: var(--button-border-radius, 0.5em);
font-weight: inherit;
text-align: inherit;
transition: transform 0.2s cubic-bezier(0.05, 0.7, 0.03, 3) 0s;
--focus-outline-color: var(--button-focus-outline-color);
box-shadow: var(--button-shadow);
}
button.primary {
background: var(--button-primary-background, var(--button-background));
color: var(--button-primary-color, var(--button-color));
}
${click("button")};
${hover("button")};
a.plain {
text-decoration: none !important;
}
em {
font-style: italic;
}
blockquote {
border-left: solid 2px var(--color-shade-3);
padding-left: 0.5em;
}
hr {
border: none;
border-top: solid 1px var(--color-shade-3);
}
`;

View File

@ -7,6 +7,7 @@ import { layout } from "./layout";
import { animation } from "./animation";
import { responsive } from "./responsive";
import { misc } from "./misc";
import { content } from "./content";
export const shared = css`
${reset}
@ -17,4 +18,4 @@ export const shared = css`
${misc}
`;
export { mixins, config, reset, base, layout, animation, responsive, misc };
export { mixins, config, reset, base, layout, animation, responsive, misc, content };

View File

@ -141,6 +141,14 @@ export const misc = css`
border-top: solid 1px var(--border-color);
}
.border-left {
border-left: solid 1px var(--border-color);
}
.border-right {
border-right: solid 1px var(--border-color);
}
:not(:hover) > .reveal-on-parent-hover:not(:focus-within) {
opacity: 0;
}

View File

@ -117,6 +117,10 @@ export class PBES2Container extends BaseContainer {
this.keyParams.salt = await getProvider().randomBytes(16);
}
this._key = await getProvider().deriveKey(stringToBytes(password), this.keyParams);
// If this container has data already, make sure the derived key properly decrypts it.
if (this.encryptedData) {
await this.getData();
}
}
}

View File

@ -189,6 +189,9 @@ export const FIELD_DEFS: { [t in FieldType]: FieldDef } = {
get name() {
return $l("Note");
},
format(value: string) {
return value.replace(/(<([^>]+)>)/gi, " ");
},
},
[FieldType.Text]: {
type: FieldType.Text,

View File

@ -90,6 +90,9 @@ export class AccountFeatures extends Serializable {
@AsSerializable(Feature)
totpField: Feature = new Feature();
@AsSerializable(Feature)
notesField: Feature = new Feature();
}
export class OrgFeatures extends Serializable {
@ -118,6 +121,9 @@ export class OrgFeatures extends Serializable {
@AsSerializable(OrgFeature)
totpField: OrgFeature = new OrgFeature();
@AsSerializable(OrgFeature)
notesField: OrgFeature = new OrgFeature();
}
export class AccountProvisioning extends Storable {