diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000000..1aa6a702645 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 6c7f73ae134..8840bafdf94 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store -node_modules/ -dist/ -src/public/app-dist/ +code/node_modules/ +code/dist/ +code/src/public/app-dist/ npm-debug.log yarn-error.log *.db @@ -11,5 +11,7 @@ cert.crt server-package.json .idea/httpRequests/ data/ -tmp/ -.eslintcache \ No newline at end of file +code/data/ +code/tmp/ +code/.eslintcache +code/db-data \ No newline at end of file diff --git a/bin/better-sqlite3/linux-desktop-better_sqlite3.node b/bin/better-sqlite3/linux-desktop-better_sqlite3.node deleted file mode 100644 index 18018630773..00000000000 Binary files a/bin/better-sqlite3/linux-desktop-better_sqlite3.node and /dev/null differ diff --git a/bin/better-sqlite3/linux-server-better_sqlite3.node b/bin/better-sqlite3/linux-server-better_sqlite3.node deleted file mode 100644 index ca173a3c63f..00000000000 Binary files a/bin/better-sqlite3/linux-server-better_sqlite3.node and /dev/null differ diff --git a/bin/better-sqlite3/mac-better_sqlite3.node b/bin/better-sqlite3/mac-better_sqlite3.node deleted file mode 100644 index 70835a3f860..00000000000 Binary files a/bin/better-sqlite3/mac-better_sqlite3.node and /dev/null differ diff --git a/bin/better-sqlite3/win-better_sqlite3.node b/bin/better-sqlite3/win-better_sqlite3.node deleted file mode 100644 index b5ced20b542..00000000000 Binary files a/bin/better-sqlite3/win-better_sqlite3.node and /dev/null differ diff --git a/bin/build-debian.sh b/bin/build-debian.sh deleted file mode 100755 index f60b99d196f..00000000000 --- a/bin/build-debian.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -echo "Packaging debian x64 distribution..." - -VERSION=`jq -r ".version" package.json` - -./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64 - - -# hacky stop-gag measure to produce debian compatible XZ compressed debs until this is fixed: https://github.com/electron-userland/electron-installer-debian/issues/272 -cd dist -ar x trilium_${VERSION}_amd64.deb -rm trilium_${VERSION}_amd64.deb -# recompress -< control.tar.zst zstd -d | xz > control.tar.xz -< data.tar.zst zstd -d | xz > data.tar.xz -# create deb archive (I really do not know, what argument "sdsd" is for but something is required for ar to create the archive as desired) -ar -m -c -a sdsd trilium_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz - -rm control* data* debian-binary - -echo "Converted to XZ deb" diff --git a/bin/build-docker.sh b/bin/build-docker.sh deleted file mode 100755 index c77850ebad3..00000000000 --- a/bin/build-docker.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -VERSION=`jq -r ".version" package.json` -SERIES=${VERSION:0:4}-latest - -cat package.json | grep -v electron > server-package.json - -sudo docker build -t zadam/trilium:$VERSION --network host -t zadam/trilium:$SERIES . - -if [[ $VERSION != *"beta"* ]]; then - sudo docker tag zadam/trilium:$VERSION zadam/trilium:latest -fi diff --git a/bin/build-linux-x64.sh b/bin/build-linux-x64.sh deleted file mode 100755 index 5710bba9107..00000000000 --- a/bin/build-linux-x64.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -SRC_DIR=./dist/trilium-linux-x64-src - -if [ "$1" != "DONTCOPY" ] -then - ./bin/copy-trilium.sh $SRC_DIR -fi - -rm -r $SRC_DIR/src/public/app-dist/*.mobile.* - -echo "Copying required linux-x64 binaries" - -cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node - -echo "Packaging linux x64 electron build" - -./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite - -BUILD_DIR=./dist/trilium-linux-x64 -rm -rf $BUILD_DIR - -mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR - -cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png - -cp bin/tpl/anonymize-database.sql $BUILD_DIR/ - -cp -r dump-db $BUILD_DIR/ -rm -rf $BUILD_DIR/dump-db/node_modules - -cp bin/tpl/trilium-portable.sh $BUILD_DIR/ -chmod 755 $BUILD_DIR/trilium-portable.sh - -cp bin/tpl/trilium-safe-mode.sh $BUILD_DIR/ -chmod 755 $BUILD_DIR/trilium-safe-mode.sh - -cp bin/tpl/trilium-no-cert-check.sh $BUILD_DIR/ -chmod 755 $BUILD_DIR/trilium-no-cert-check.sh - -echo "Packaging linux x64 electron distribution..." -VERSION=`jq -r ".version" package.json` - -cd dist - -tar cJf trilium-linux-x64-${VERSION}.tar.xz trilium-linux-x64 - -cd .. - -bin/build-debian.sh diff --git a/bin/build-mac-x64.sh b/bin/build-mac-x64.sh deleted file mode 100755 index 0e63c7fb204..00000000000 --- a/bin/build-mac-x64.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -SRC_DIR=./dist/trilium-mac-x64-src - -if [ "$1" != "DONTCOPY" ] -then - ./bin/copy-trilium.sh $SRC_DIR -fi - -echo "Copying required mac binaries" - -cp -r bin/better-sqlite3/mac-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node - -rm -r $SRC_DIR/src/public/app-dist/*.mobile.* - -echo "Packaging mac x64 electron build" - -./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=images/app-icons/mac/icon.icns - -BUILD_DIR=./dist/trilium-mac-x64 -rm -rf $BUILD_DIR - -# Mac build has by default useless directory level -mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR - -cp bin/tpl/anonymize-database.sql $BUILD_DIR/ - -cp -r dump-db $BUILD_DIR/ -rm -rf $BUILD_DIR/dump-db/node_modules - -echo "Zipping mac x64 electron distribution..." - -VERSION=`jq -r ".version" package.json` - -cd dist - -rm trilium-mac-x64-${VERSION}.zip -zip -r9 --symlinks trilium-mac-x64-${VERSION}.zip trilium-mac-x64 diff --git a/bin/build-server.sh b/bin/build-server.sh deleted file mode 100755 index 74a4896d61b..00000000000 --- a/bin/build-server.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash - -PKG_DIR=dist/trilium-linux-x64-server -NODE_VERSION=18.16.1 - -if [ "$1" != "DONTCOPY" ] -then - ./bin/copy-trilium.sh $PKG_DIR -fi - -cd dist -wget https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz -tar xfJ node-v${NODE_VERSION}-linux-x64.tar.xz -rm node-v${NODE_VERSION}-linux-x64.tar.xz -cd .. - -mv dist/node-v${NODE_VERSION}-linux-x64 $PKG_DIR/node - -rm -r $PKG_DIR/node/lib/node_modules/npm -rm -r $PKG_DIR/node/include/node - -rm -r $PKG_DIR/node_modules/electron* -rm -r $PKG_DIR/webpack* -rm -r $PKG_DIR/electron.js - -cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node - -printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh -chmod 755 $PKG_DIR/trilium.sh - -cp bin/tpl/anonymize-database.sql $PKG_DIR/ - -cp -r dump-db $PKG_DIR/ -rm -rf $PKG_DIR/dump-db/node_modules - -VERSION=`jq -r ".version" package.json` - -cd dist - -tar cJf trilium-linux-x64-server-${VERSION}.tar.xz trilium-linux-x64-server diff --git a/bin/build-win-x64.sh b/bin/build-win-x64.sh deleted file mode 100755 index 37bc2813731..00000000000 --- a/bin/build-win-x64.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash - -SRC_DIR=./dist/trilium-windows-x64-src - -if [ "$1" != "DONTCOPY" ] -then - ./bin/copy-trilium.sh $SRC_DIR -fi - -echo "Copying required windows binaries" - -cp -r bin/better-sqlite3/win-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node - -rm -r $SRC_DIR/src/public/app-dist/*.mobile.* - -echo "Packaging windows x64 electron build" - -./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=win32 --arch=x64 --overwrite --icon=images/app-icons/win/icon.ico - -BUILD_DIR=./dist/trilium-windows-x64 -rm -rf $BUILD_DIR - -mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR - -cp bin/tpl/anonymize-database.sql $BUILD_DIR/ - -cp -r dump-db $BUILD_DIR/ -rm -rf $BUILD_DIR/dump-db/node_modules - -cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/ - -echo "Zipping windows x64 electron distribution..." -VERSION=`jq -r ".version" package.json` - -cd dist - -zip -r9 trilium-windows-x64-${VERSION}.zip trilium-windows-x64 diff --git a/bin/build.sh b/bin/build.sh deleted file mode 100755 index ff90c288d95..00000000000 --- a/bin/build.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -echo "Deleting existing builds" - -rm -rf dist/* - -SRC_DIR=dist/trilium-src - -bin/copy-trilium.sh $SRC_DIR - -# we'll just copy the same SRC dir to all the builds so we don't have to do npm install in each separately -cp -r $SRC_DIR ./dist/trilium-linux-x64-src -cp -r $SRC_DIR ./dist/trilium-linux-x64-server -cp -r $SRC_DIR ./dist/trilium-windows-x64-src -cp -r $SRC_DIR ./dist/trilium-mac-x64-src - -bin/build-win-x64.sh DONTCOPY - -bin/build-mac-x64.sh DONTCOPY - -bin/build-linux-x64.sh DONTCOPY - -bin/build-server.sh DONTCOPY diff --git a/bin/copy-trilium.sh b/bin/copy-trilium.sh deleted file mode 100755 index 2f4053e1574..00000000000 --- a/bin/copy-trilium.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -if [[ $# -eq 0 ]] ; then - echo "Missing argument of target directory" - exit 1 -fi - -n exec 18.16.1 npm run webpack - -DIR=$1 - -rm -rf $DIR -mkdir $DIR - -echo "Copying Trilium to build directory $DIR" - -cp -r images $DIR/ -cp -r libraries $DIR/ -cp -r src $DIR/ -cp -r db $DIR/ -cp -r package.json $DIR/ -cp -r package-lock.json $DIR/ -cp -r README.md $DIR/ -cp -r LICENSE $DIR/ -cp -r config-sample.ini $DIR/ -cp -r electron.js $DIR/ -cp webpack-* $DIR/ - -# run in subshell (so we return to original dir) -(cd $DIR && n exec 18.16.1 npm install --only=prod) - -# cleanup of useless files in dependencies -rm -r $DIR/node_modules/image-q/demo -rm -r $DIR/node_modules/better-sqlite3/Release -rm -r $DIR/node_modules/better-sqlite3/deps/sqlite3.tar.gz -rm -r $DIR/node_modules/@jimp/plugin-print/fonts -rm -r $DIR/node_modules/jimp/browser -rm -r $DIR/node_modules/jimp/fonts - -# delete all tests (there are often large images as test file for jimp etc.) -find $DIR/node_modules -name test -exec rm -rf {} \; -find $DIR/node_modules -name docs -exec rm -rf {} \; -find $DIR/node_modules -name demo -exec rm -rf {} \; - -find $DIR/libraries -name "*.map" -type f -delete - -cp $DIR/src/public/app/share.js $DIR/src/public/app-dist/ -cp -r $DIR/src/public/app/doc_notes $DIR/src/public/app-dist/ - -rm -rf $DIR/src/public/app diff --git a/bin/deb-options.json b/bin/deb-options.json deleted file mode 100644 index e9a02348ba6..00000000000 --- a/bin/deb-options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "src": "dist/trilium-linux-x64", - "dest": "dist/", - "name": "trilium", - "productName": "Trilium Notes", - "genericName": "Note taker", - "description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases.", - "sections": "misc", - "maintainer": "zadam.apps@gmail.com", - "homepage": "https://github.com/zadam/trilium", - "bin": "trilium", - "icon": "dist/trilium-linux-x64/icon.png", - "categories": [ "Office" ] -} \ No newline at end of file diff --git a/bin/export-schema.sh b/bin/export-schema.sh deleted file mode 100755 index ab5de1a8156..00000000000 --- a/bin/export-schema.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -SCHEMA_FILE_PATH=db/schema.sql - -sqlite3 ./data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH" - -echo "DB schema exported to $SCHEMA_FILE_PATH" \ No newline at end of file diff --git a/bin/generate-cert.sh b/bin/generate-cert.sh deleted file mode 100755 index dd208dfe55e..00000000000 --- a/bin/generate-cert.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -# Script generates certificate by default into the ~/trilium-data/cert where it is expected by Trilium -# If directory is given in argument, certificate will be created there. - -if [ $# -eq 0 ] - then - DIR=~/trilium-data/cert -else - DIR=$1 -fi - -mkdir -p "$DIR" -cd "$DIR" - -openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.crt -keyout key.key diff --git a/bin/push-docker-image.sh b/bin/push-docker-image.sh deleted file mode 100755 index 0372143cf14..00000000000 --- a/bin/push-docker-image.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -if [[ $# -eq 0 ]] ; then - echo "Missing argument of new version" - exit 1 -fi - -VERSION=$1 -SERIES=${VERSION:0:4}-latest - -docker push zadam/trilium:$VERSION -docker push zadam/trilium:$SERIES - -if [[ $1 != *"beta"* ]]; then - docker push zadam/trilium:latest -fi diff --git a/bin/release-flatpack.sh b/bin/release-flatpack.sh deleted file mode 100755 index f28ff7adb08..00000000000 --- a/bin/release-flatpack.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash - -if [[ $# -eq 0 ]] ; then - echo "Missing argument of new version" - exit 1 -fi - -VERSION=$1 - -if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ; -then - echo "Version ${VERSION} isn't in format X.Y.Z" - exit 1 -fi - -VERSION_DATE=$(git log -1 --format=%aI "v${VERSION}" | cut -c -10) -VERSION_COMMIT=$(git rev-list -n 1 "v${VERSION}") - -# expecting the directory at a specific path -cd ~/trilium-flathub || exit - -if ! git diff-index --quiet HEAD --; then - echo "There are uncommitted changes" - exit 1 -fi - -BASE_BRANCH=master - -if [[ "$VERSION" == *"beta"* ]]; then - BASE_BRANCH=beta -fi - -git switch "${BASE_BRANCH}" -git pull - -BRANCH=b${VERSION} - -git branch "${BRANCH}" -git switch "${BRANCH}" - -echo "Updating files with version ${VERSION}, date ${VERSION_DATE} and commit ${VERSION_COMMIT}" - -flatpak-node-generator npm ../trilium/package-lock.json - -xmlstarlet ed --inplace --update "/component/releases/release/@version" --value "${VERSION}" --update "/component/releases/release/@date" --value "${VERSION_DATE}" ./com.github.zadam.trilium.metainfo.xml - -yq --inplace "(.modules[0].sources[0].tag = \"v${VERSION}\") | (.modules[0].sources[0].commit = \"${VERSION_COMMIT}\")" ./com.github.zadam.trilium.yml - -git add ./generated-sources.json -git add ./com.github.zadam.trilium.metainfo.xml -git add ./com.github.zadam.trilium.yml - -git commit -m "release $VERSION" -git push --set-upstream origin "${BRANCH}" - -gh pr create --fill -B "${BASE_BRANCH}" -gh pr merge --auto --merge --delete-branch diff --git a/bin/release.sh b/bin/release.sh deleted file mode 100755 index cdaa324d2c9..00000000000 --- a/bin/release.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash - -export GITHUB_REPO=trilium - -if [[ $# -eq 0 ]] ; then - echo "Missing argument of new version" - exit 1 -fi - -VERSION=$1 - -if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ; -then - echo "Version ${VERSION} isn't in format X.Y.Z" - exit 1 -fi - -if ! git diff-index --quiet HEAD --; then - echo "There are uncommitted changes" - exit 1 -fi - -echo "Releasing Trilium $VERSION" - -jq '.version = "'$VERSION'"' package.json|sponge package.json - -git add package.json - -echo 'module.exports = { buildDate:"'`date --iso-8601=seconds`'", buildRevision: "'`git log -1 --format="%H"`'" };' > src/services/build.js - -git add src/services/build.js - -TAG=v$VERSION - -echo "Committing package.json version change" - -git commit -m "release $VERSION" -git push - -echo "Tagging commit with $TAG" - -git tag $TAG -git push origin $TAG - -bin/build.sh - -LINUX_X64_BUILD=trilium-linux-x64-$VERSION.tar.xz -DEBIAN_X64_BUILD=trilium_${VERSION}_amd64.deb -WINDOWS_X64_BUILD=trilium-windows-x64-$VERSION.zip -MAC_X64_BUILD=trilium-mac-x64-$VERSION.zip -SERVER_BUILD=trilium-linux-x64-server-$VERSION.tar.xz - -echo "Creating release in GitHub" - -EXTRA= - -if [[ $TAG == *"beta"* ]]; then - EXTRA=--prerelease -fi - -echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token - -gh release create "$TAG" \ - --title "$TAG release" \ - --notes "" \ - $EXTRA \ - "dist/$DEBIAN_X64_BUILD" \ - "dist/$LINUX_X64_BUILD" \ - "dist/$WINDOWS_X64_BUILD" \ - "dist/$MAC_X64_BUILD" \ - "dist/$SERVER_BUILD" diff --git a/bin/tpl/anonymize-database.sql b/bin/tpl/anonymize-database.sql deleted file mode 100644 index 3e8279eeb6e..00000000000 --- a/bin/tpl/anonymize-database.sql +++ /dev/null @@ -1,165 +0,0 @@ - -UPDATE etapi_tokens SET tokenHash = 'API token hash value'; -UPDATE notes SET title = 'title' WHERE noteId != 'root' AND noteId NOT LIKE '\_%' ESCAPE '\'; -UPDATE blobs SET content = 'text' WHERE content IS NOT NULL; -UPDATE revisions SET title = 'title'; - -UPDATE attributes SET name = 'name', value = 'value' - WHERE type = 'label' - AND name NOT IN ('inbox', - 'disableVersioning', - 'calendarRoot', - 'archived', - 'excludeFromExport', - 'disableInclusion', - 'appCss', - 'appTheme', - 'hidePromotedAttributes', - 'readOnly', - 'autoReadOnlyDisabled', - 'cssClass', - 'iconClass', - 'keyboardShortcut', - 'run', - 'runOnInstance', - 'runAtHour', - 'customRequestHandler', - 'customResourceProvider', - 'widget', - 'noteInfoWidgetDisabled', - 'linkMapWidgetDisabled', - 'revisionsWidgetDisabled', - 'whatLinksHereWidgetDisabled', - 'similarNotesWidgetDisabled', - 'workspace', - 'workspaceIconClass', - 'workspaceTabBackgroundColor', - 'searchHome', - 'workspaceInbox', - 'workspaceSearchHome', - 'sqlConsoleHome', - 'datePattern', - 'pageSize', - 'viewType', - 'mapRootNoteId', - 'bookmarkFolder', - 'sorted', - 'top', - 'fullContentWidth', - 'shareHiddenFromTree', - 'shareAlias', - 'shareOmitDefaultCss', - 'shareRoot', - 'internalLink', - 'imageLink', - 'relationMapLink', - 'includeMapLink', - 'runOnNoteCreation', - 'runOnNoteTitleChange', - 'runOnNoteContentChange', - 'runOnNoteChange', - 'runOnChildNoteCreation', - 'runOnAttributeCreation', - 'runOnAttributeChange', - 'template', - 'inherit', - 'widget', - 'renderNote', - 'shareCss', - 'shareJs', - 'shareFavicon', - 'executeButton', - 'keepCurrentHoisting', - 'color', - 'toc', - 'excludeFromNoteMap', - 'docName', - 'launcherType', - 'builtinWidget', - 'baseSize', - 'growthFactor' - ); - -UPDATE attributes SET name = 'name' - AND name NOT IN ('inbox', - 'disableVersioning', - 'calendarRoot', - 'archived', - 'excludeFromExport', - 'disableInclusion', - 'appCss', - 'appTheme', - 'hidePromotedAttributes', - 'readOnly', - 'autoReadOnlyDisabled', - 'cssClass', - 'iconClass', - 'keyboardShortcut', - 'run', - 'runOnInstance', - 'runAtHour', - 'customRequestHandler', - 'customResourceProvider', - 'widget', - 'noteInfoWidgetDisabled', - 'linkMapWidgetDisabled', - 'revisionsWidgetDisabled', - 'whatLinksHereWidgetDisabled', - 'similarNotesWidgetDisabled', - 'workspace', - 'workspaceIconClass', - 'workspaceTabBackgroundColor', - 'searchHome', - 'workspaceInbox', - 'workspaceSearchHome', - 'sqlConsoleHome', - 'datePattern', - 'pageSize', - 'viewType', - 'mapRootNoteId', - 'bookmarkFolder', - 'sorted', - 'top', - 'fullContentWidth', - 'shareHiddenFromTree', - 'shareAlias', - 'shareOmitDefaultCss', - 'shareRoot', - 'internalLink', - 'imageLink', - 'relationMapLink', - 'includeMapLink', - 'runOnNoteCreation', - 'runOnNoteTitleChange', - 'runOnNoteContentChange', - 'runOnNoteChange', - 'runOnChildNoteCreation', - 'runOnAttributeCreation', - 'runOnAttributeChange', - 'template', - 'inherit', - 'widget', - 'renderNote', - 'shareCss', - 'shareJs', - 'shareFavicon', - 'executeButton', - 'keepCurrentHoisting', - 'color', - 'toc', - 'excludeFromNoteMap', - 'docName', - 'launcherType', - 'builtinWidget', - 'baseSize', - 'growthFactor' - ); - -UPDATE branches SET prefix = 'prefix' WHERE prefix IS NOT NULL AND prefix != 'recovered'; -UPDATE options SET value = 'anonymized' WHERE name IN - ('documentId', 'documentSecret', 'encryptedDataKey', - 'passwordVerificationHash', 'passwordVerificationSalt', - 'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy') - AND value != ''; - -VACUUM; diff --git a/bin/tpl/trilium-no-cert-check.bat b/bin/tpl/trilium-no-cert-check.bat deleted file mode 100644 index 360064bdc4b..00000000000 --- a/bin/tpl/trilium-no-cert-check.bat +++ /dev/null @@ -1,23 +0,0 @@ -@echo off -:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path -:: If there's no powershell available, fallback to unicode enabled command interpreter - -WHERE powershell.exe > NUL 2>&1 -IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL - -:POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe" -GOTO END - -:BATCH -:: Make sure we support UTF-8 characters -chcp 65001 - -:: Get Current Trilium executable directory and compute data directory -SET DIR=%~dp0 -set NODE_TLS_REJECT_UNAUTHORIZED=0 -cd %DIR% -start trilium.exe -GOTO END - -:END diff --git a/bin/tpl/trilium-no-cert-check.sh b/bin/tpl/trilium-no-cert-check.sh deleted file mode 100644 index 42ec8bb81d5..00000000000 --- a/bin/tpl/trilium-no-cert-check.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh - -DIR=`dirname "$0"` -export NODE_TLS_REJECT_UNAUTHORIZED=0 - -"$DIR/trilium" - diff --git a/bin/tpl/trilium-portable.bat b/bin/tpl/trilium-portable.bat deleted file mode 100644 index a89476ae0fc..00000000000 --- a/bin/tpl/trilium-portable.bat +++ /dev/null @@ -1,23 +0,0 @@ -@echo off -:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path -:: If there's no powershell available, fallback to unicode enabled command interpreter - -WHERE powershell.exe > NUL 2>&1 -IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL - -:POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe" -GOTO END - -:BATCH -:: Make sure we support UTF-8 characters -chcp 65001 - -:: Get Current Trilium executable directory and compute data directory -SET DIR=%~dp0 -SET TRILIUM_DATA_DIR=%DIR%\trilium-data -cd %DIR% -start trilium.exe -GOTO END - -:END diff --git a/bin/tpl/trilium-portable.sh b/bin/tpl/trilium-portable.sh deleted file mode 100755 index 04edfde4769..00000000000 --- a/bin/tpl/trilium-portable.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh - -DIR=`dirname "$0"` -export TRILIUM_DATA_DIR="$DIR/trilium-data" - -"$DIR/trilium" - diff --git a/bin/tpl/trilium-safe-mode.bat b/bin/tpl/trilium-safe-mode.bat deleted file mode 100644 index 7692ec7dc33..00000000000 --- a/bin/tpl/trilium-safe-mode.bat +++ /dev/null @@ -1,23 +0,0 @@ -@echo off -:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path -:: If there's no powershell available, fallback to unicode enabled command interpreter - -WHERE powershell.exe > NUL 2>&1 -IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL - -:POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu" -GOTO END - -:BATCH -:: Make sure we support UTF-8 characters -chcp 65001 - -:: Get Current Trilium executable directory and compute data directory -SET DIR=%~dp0 -SET TRILIUM_SAFE_MODE=1 -cd %DIR% -start trilium.exe --disable-gpu -GOTO END - -:END diff --git a/bin/tpl/trilium-safe-mode.sh b/bin/tpl/trilium-safe-mode.sh deleted file mode 100644 index 5221d4d6110..00000000000 --- a/bin/tpl/trilium-safe-mode.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh - -DIR=`dirname "$0"` -export TRILIUM_SAFE_MODE=1 - -"$DIR/trilium" --disable-gpu - diff --git a/build/Dockerfile b/build/Dockerfile new file mode 100644 index 00000000000..b9a90d4d1ca --- /dev/null +++ b/build/Dockerfile @@ -0,0 +1,27 @@ +FROM ubuntu + +ARG DB_PATH=/trilium/code/db-data +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update + +RUN apt-get install -y apt-utils libpng16-16 libpng-dev pkg-config autoconf libtool build-essential nasm libx11-dev libxkbfile-dev git curl iptables-persistent +RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - +RUN apt-get install -y nodejs + +RUN git clone https://github.com/VahidKay/trilium_customized.git /trilium + +WORKDIR /trilium/code + +RUN npm install --force +RUN npm rebuild + +VOLUME $DB_PATH + +ENV TRILIUM_DATA_DIR=$DB_PATH + +EXPOSE 8080 + +ENTRYPOINT [ "tail", "-f", "/dev/null" ] + +#ENTRYPOINT [ "npm", "run", "start-server-no-dir" ] \ No newline at end of file diff --git a/build/backup.sh b/build/backup.sh new file mode 100644 index 00000000000..88fc6772e56 --- /dev/null +++ b/build/backup.sh @@ -0,0 +1,5 @@ +SOURCE="$(dirname "$(readlink -f "$0")")" + +file_name="backup_$(date '+%Y-%m-%d_%H').zip" +zip -r $file_name "$SOURCE/../data/data" +mv $file_name "$SOURCE/../data/backups/" \ No newline at end of file diff --git a/build/build.sh b/build/build.sh new file mode 100755 index 00000000000..dd347884f7a --- /dev/null +++ b/build/build.sh @@ -0,0 +1,10 @@ +CURRENT_DIR="$(pwd)" + +SOURCE="$(dirname "$(readlink -f "$0")")" + +cd "$SOURCE" + +docker build --no-cache -t note_server_bhead . +#docker build -t note_server_bhead . + +cd "$CURRENT_DIR" \ No newline at end of file diff --git a/build/build_local.sh b/build/build_local.sh new file mode 100644 index 00000000000..9a9717fc613 --- /dev/null +++ b/build/build_local.sh @@ -0,0 +1,7 @@ +apt-get update + +apt-get install -y apt-utils libpng16-16 libpng-dev pkg-config autoconf libtool build-essential nasm libx11-dev libxkbfile-dev git curl iptables-persistent +curl -fsSL https://deb.nodesource.com/setup_18.x | bash - +apt-get install -y nodejs + + diff --git a/build/run.sh b/build/run.sh new file mode 100755 index 00000000000..9a923e7ab76 --- /dev/null +++ b/build/run.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +SOURCE="$(dirname "$(readlink -f "$0")")" +if [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]]; then + SOURCE="/$SOURCE" +fi +DATA_DIR="$SOURCE/../data" +CODE_DIR="$SOURCE/../code" + +if [[ $# -eq 0 ]]; then + #sudo docker run -d -t --cap-drop NET_RAW --cap-drop NET_ADMIN -p 8080:8080 -v "$(pwd)/data":/trilium/db-data note_server_bhead + docker run -d -t --cap-drop NET_RAW --cap-drop NET_ADMIN --network intnet -p 8080:8080 --ip 172.21.0.21 -v "$DATA_DIR/data":/trilium/code/db-data note_server_bhead +elif [[ $1 -eq "dev" ]]; then + docker run -d -t --cap-drop NET_RAW --cap-drop NET_ADMIN --network intnet -p 8080:8080 --ip 172.21.0.21 -v "$CODE_DIR/src/":/trilium/code/src -v "$DATA_DIR/data":/trilium/code/db-data -v "$CODE_DIR/libraries/":/trilium/code/libraries note_server_bhead +fi \ No newline at end of file diff --git a/build/setup.sh b/build/setup.sh new file mode 100644 index 00000000000..f0638b86bdb --- /dev/null +++ b/build/setup.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +# Logger Function +log() { + local message="$1" + local type="$2" + local timestamp=$(date '+%Y-%m-%d %H:%M:%S') + local color + local endcolor="\033[0m" + + case "$type" in + "info") color="\033[38;5;79m" ;; + "success") color="\033[1;32m" ;; + "error") color="\033[1;31m" ;; + *) color="\033[1;34m" ;; + esac + + echo -e "${color}${timestamp} - ${message}${endcolor}" +} + +# Error handler function +handle_error() { + local exit_code=$1 + local error_message="$2" + log "Error: $error_message (Exit Code: $exit_code)" "error" + exit $exit_code +} + +# Function to check for command availability +command_exists() { + command -v "$1" &> /dev/null +} + +check_os() { + if ! [ -f "/etc/debian_version" ]; then + echo "Error: This script is only supported on Debian-based systems." + exit 1 + fi +} + +# Function to Install the script pre-requisites +install_pre_reqs() { + log "Installing pre-requisites" "info" + + # Run 'apt-get update' + if ! apt-get update -y; then + handle_error "$?" "Failed to run 'apt-get update'" + fi + + # Run 'apt-get install' + if ! apt-get install -y apt-transport-https ca-certificates curl gnupg; then + handle_error "$?" "Failed to install packages" + fi + + mkdir -p /usr/share/keyrings + rm -f /usr/share/keyrings/nodesource.gpg + rm -f /etc/apt/sources.list.d/nodesource.list + + # Run 'curl' and 'gpg' + if ! curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg; then + handle_error "$?" "Failed to download and import the NodeSource signing key" + fi +} + +# Function to configure the Repo +configure_repo() { + local node_version=$1 + + arch=$(dpkg --print-architecture) + if [ "$arch" != "amd64" ] && [ "$arch" != "arm64" ] && [ "$arch" != "armhf" ]; then + handle_error "1" "Unsupported architecture: $arch. Only amd64, arm64, and armhf are supported." + fi + + echo "deb [arch=$arch signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_version nodistro main" | tee /etc/apt/sources.list.d/nodesource.list > /dev/null + + # N|solid Config + echo "Package: nsolid" | tee /etc/apt/preferences.d/nsolid > /dev/null + echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nsolid > /dev/null + echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nsolid > /dev/null + + # Nodejs Config + echo "Package: nodejs" | tee /etc/apt/preferences.d/nodejs > /dev/null + echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nodejs > /dev/null + echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nodejs > /dev/null + + # Run 'apt-get update' + if ! apt-get update -y; then + handle_error "$?" "Failed to run 'apt-get update'" + else + log "Repository configured successfully. To install Node.js, run: apt-get install nodejs -y" "success" + fi +} + +# Define Node.js version +NODE_VERSION="18.x" + +# Check OS +check_os + +# Main execution +install_pre_reqs || handle_error $? "Failed installing pre-requisites" +configure_repo "$NODE_VERSION" || handle_error $? "Failed configuring repository" diff --git a/.dockerignore b/code/.dockerignore similarity index 100% rename from .dockerignore rename to code/.dockerignore diff --git a/.eslintignore b/code/.eslintignore similarity index 100% rename from .eslintignore rename to code/.eslintignore diff --git a/.eslintrc.js b/code/.eslintrc.js similarity index 100% rename from .eslintrc.js rename to code/.eslintrc.js diff --git a/.prettierrc.js b/code/.prettierrc.js similarity index 100% rename from .prettierrc.js rename to code/.prettierrc.js diff --git a/.vscode/extensions.json b/code/.vscode/extensions.json similarity index 100% rename from .vscode/extensions.json rename to code/.vscode/extensions.json diff --git a/.vscode/launch.json b/code/.vscode/launch.json similarity index 100% rename from .vscode/launch.json rename to code/.vscode/launch.json diff --git a/.vscode/settings.json b/code/.vscode/settings.json similarity index 100% rename from .vscode/settings.json rename to code/.vscode/settings.json diff --git a/CODE_OF_CONDUCT b/code/CODE_OF_CONDUCT similarity index 100% rename from CODE_OF_CONDUCT rename to code/CODE_OF_CONDUCT diff --git a/Dockerfile b/code/Dockerfile similarity index 100% rename from Dockerfile rename to code/Dockerfile diff --git a/LICENSE b/code/LICENSE similarity index 100% rename from LICENSE rename to code/LICENSE diff --git a/README-ZH_CN.md b/code/README-ZH_CN.md similarity index 100% rename from README-ZH_CN.md rename to code/README-ZH_CN.md diff --git a/README.ja.md b/code/README.ja.md similarity index 100% rename from README.ja.md rename to code/README.ja.md diff --git a/README.md b/code/README.md similarity index 100% rename from README.md rename to code/README.md diff --git a/README.ru.md b/code/README.ru.md similarity index 100% rename from README.ru.md rename to code/README.ru.md diff --git a/SECURITY.md b/code/SECURITY.md similarity index 100% rename from SECURITY.md rename to code/SECURITY.md diff --git a/bin/create-anonymization-script.js b/code/bin/create-anonymization-script.js similarity index 67% rename from bin/create-anonymization-script.js rename to code/bin/create-anonymization-script.js index 4c71d607137..8a8c9115b71 100644 --- a/bin/create-anonymization-script.js +++ b/code/bin/create-anonymization-script.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -const anonymizationService = require('../src/services/anonymization'); +const anonymizationService = require('../../git/trilium_customized/src/services/anonymization'); const fs = require('fs'); const path = require('path'); diff --git a/config-sample.ini b/code/config-sample.ini similarity index 100% rename from config-sample.ini rename to code/config-sample.ini diff --git a/db/TODO.txt b/code/db/TODO.txt similarity index 100% rename from db/TODO.txt rename to code/db/TODO.txt diff --git a/db/demo.zip b/code/db/demo.zip similarity index 100% rename from db/demo.zip rename to code/db/demo.zip diff --git a/db/image-deleted.png b/code/db/image-deleted.png similarity index 100% rename from db/image-deleted.png rename to code/db/image-deleted.png diff --git a/db/migrations/0184__NOOP.js b/code/db/migrations/0184__NOOP.js similarity index 100% rename from db/migrations/0184__NOOP.js rename to code/db/migrations/0184__NOOP.js diff --git a/db/migrations/0185__migrate_black_theme_to_dark.sql b/code/db/migrations/0185__migrate_black_theme_to_dark.sql similarity index 100% rename from db/migrations/0185__migrate_black_theme_to_dark.sql rename to code/db/migrations/0185__migrate_black_theme_to_dark.sql diff --git a/db/migrations/0186__drop_branches_options_utcDateCreated.sql b/code/db/migrations/0186__drop_branches_options_utcDateCreated.sql similarity index 100% rename from db/migrations/0186__drop_branches_options_utcDateCreated.sql rename to code/db/migrations/0186__drop_branches_options_utcDateCreated.sql diff --git a/db/migrations/0187__add_changeId_to_entity_changes.sql b/code/db/migrations/0187__add_changeId_to_entity_changes.sql similarity index 100% rename from db/migrations/0187__add_changeId_to_entity_changes.sql rename to code/db/migrations/0187__add_changeId_to_entity_changes.sql diff --git a/db/migrations/0188__set_hidden_branchId.sql b/code/db/migrations/0188__set_hidden_branchId.sql similarity index 100% rename from db/migrations/0188__set_hidden_branchId.sql rename to code/db/migrations/0188__set_hidden_branchId.sql diff --git a/db/migrations/0189__delete_username_option.sql b/code/db/migrations/0189__delete_username_option.sql similarity index 100% rename from db/migrations/0189__delete_username_option.sql rename to code/db/migrations/0189__delete_username_option.sql diff --git a/db/migrations/0190__change_to_etapi_tokens.sql b/code/db/migrations/0190__change_to_etapi_tokens.sql similarity index 100% rename from db/migrations/0190__change_to_etapi_tokens.sql rename to code/db/migrations/0190__change_to_etapi_tokens.sql diff --git a/db/migrations/0191__hash_tokens.js b/code/db/migrations/0191__hash_tokens.js similarity index 100% rename from db/migrations/0191__hash_tokens.js rename to code/db/migrations/0191__hash_tokens.js diff --git a/db/migrations/0192__add_memberId_to_entity_changes.sql b/code/db/migrations/0192__add_memberId_to_entity_changes.sql similarity index 100% rename from db/migrations/0192__add_memberId_to_entity_changes.sql rename to code/db/migrations/0192__add_memberId_to_entity_changes.sql diff --git a/db/migrations/0193__add_index_to_changeId.sql b/code/db/migrations/0193__add_index_to_changeId.sql similarity index 100% rename from db/migrations/0193__add_index_to_changeId.sql rename to code/db/migrations/0193__add_index_to_changeId.sql diff --git a/db/migrations/0194__add_excludeFromNoteMap_to_journal.js b/code/db/migrations/0194__add_excludeFromNoteMap_to_journal.js similarity index 100% rename from db/migrations/0194__add_excludeFromNoteMap_to_journal.js rename to code/db/migrations/0194__add_excludeFromNoteMap_to_journal.js diff --git a/db/migrations/0195__remove_recent_notes_from_entity_changes.sql b/code/db/migrations/0195__remove_recent_notes_from_entity_changes.sql similarity index 100% rename from db/migrations/0195__remove_recent_notes_from_entity_changes.sql rename to code/db/migrations/0195__remove_recent_notes_from_entity_changes.sql diff --git a/db/migrations/0196__rename_bulk_actions.sql b/code/db/migrations/0196__rename_bulk_actions.sql similarity index 100% rename from db/migrations/0196__rename_bulk_actions.sql rename to code/db/migrations/0196__rename_bulk_actions.sql diff --git a/db/migrations/0197__NOOP.js b/code/db/migrations/0197__NOOP.js similarity index 100% rename from db/migrations/0197__NOOP.js rename to code/db/migrations/0197__NOOP.js diff --git a/db/migrations/0198__rename_branchIds.sql b/code/db/migrations/0198__rename_branchIds.sql similarity index 100% rename from db/migrations/0198__rename_branchIds.sql rename to code/db/migrations/0198__rename_branchIds.sql diff --git a/db/migrations/0199__rename_ids.sql b/code/db/migrations/0199__rename_ids.sql similarity index 100% rename from db/migrations/0199__rename_ids.sql rename to code/db/migrations/0199__rename_ids.sql diff --git a/db/migrations/0200__create_hidden_subtree.js b/code/db/migrations/0200__create_hidden_subtree.js similarity index 100% rename from db/migrations/0200__create_hidden_subtree.js rename to code/db/migrations/0200__create_hidden_subtree.js diff --git a/db/migrations/0201__move_share_under_hidden.sql b/code/db/migrations/0201__move_share_under_hidden.sql similarity index 100% rename from db/migrations/0201__move_share_under_hidden.sql rename to code/db/migrations/0201__move_share_under_hidden.sql diff --git a/db/migrations/0202__move_global_note_map_under_hidden.sql b/code/db/migrations/0202__move_global_note_map_under_hidden.sql similarity index 100% rename from db/migrations/0202__move_global_note_map_under_hidden.sql rename to code/db/migrations/0202__move_global_note_map_under_hidden.sql diff --git a/db/migrations/0203__delete_singles_special_note.sql b/code/db/migrations/0203__delete_singles_special_note.sql similarity index 100% rename from db/migrations/0203__delete_singles_special_note.sql rename to code/db/migrations/0203__delete_singles_special_note.sql diff --git a/db/migrations/0204__migrate_bookmarks_to_clones.js b/code/db/migrations/0204__migrate_bookmarks_to_clones.js similarity index 100% rename from db/migrations/0204__migrate_bookmarks_to_clones.js rename to code/db/migrations/0204__migrate_bookmarks_to_clones.js diff --git a/db/migrations/0205__rename_note_types.sql b/code/db/migrations/0205__rename_note_types.sql similarity index 100% rename from db/migrations/0205__rename_note_types.sql rename to code/db/migrations/0205__rename_note_types.sql diff --git a/db/migrations/0206__delete_search_and_sql_console_history.js b/code/db/migrations/0206__delete_search_and_sql_console_history.js similarity index 100% rename from db/migrations/0206__delete_search_and_sql_console_history.js rename to code/db/migrations/0206__delete_search_and_sql_console_history.js diff --git a/db/migrations/0207__rename_search_and_sql_console.sql b/code/db/migrations/0207__rename_search_and_sql_console.sql similarity index 100% rename from db/migrations/0207__rename_search_and_sql_console.sql rename to code/db/migrations/0207__rename_search_and_sql_console.sql diff --git a/db/migrations/0208__remove_archived_from_hidden.js b/code/db/migrations/0208__remove_archived_from_hidden.js similarity index 100% rename from db/migrations/0208__remove_archived_from_hidden.js rename to code/db/migrations/0208__remove_archived_from_hidden.js diff --git a/db/migrations/0209__rename_hoisted_labels.sql b/code/db/migrations/0209__rename_hoisted_labels.sql similarity index 100% rename from db/migrations/0209__rename_hoisted_labels.sql rename to code/db/migrations/0209__rename_hoisted_labels.sql diff --git a/db/migrations/0210__consistency_checks.js b/code/db/migrations/0210__consistency_checks.js similarity index 100% rename from db/migrations/0210__consistency_checks.js rename to code/db/migrations/0210__consistency_checks.js diff --git a/db/migrations/0211__rename_branchIds.sql b/code/db/migrations/0211__rename_branchIds.sql similarity index 100% rename from db/migrations/0211__rename_branchIds.sql rename to code/db/migrations/0211__rename_branchIds.sql diff --git a/db/migrations/0212__delete_all_attributes_of_named_notes.js b/code/db/migrations/0212__delete_all_attributes_of_named_notes.js similarity index 100% rename from db/migrations/0212__delete_all_attributes_of_named_notes.js rename to code/db/migrations/0212__delete_all_attributes_of_named_notes.js diff --git a/db/migrations/0213__migrate_scripts.js b/code/db/migrations/0213__migrate_scripts.js similarity index 100% rename from db/migrations/0213__migrate_scripts.js rename to code/db/migrations/0213__migrate_scripts.js diff --git a/db/migrations/0214__fix_root_children_ordering.sql b/code/db/migrations/0214__fix_root_children_ordering.sql similarity index 100% rename from db/migrations/0214__fix_root_children_ordering.sql rename to code/db/migrations/0214__fix_root_children_ordering.sql diff --git a/db/migrations/0215__content_structure.sql b/code/db/migrations/0215__content_structure.sql similarity index 100% rename from db/migrations/0215__content_structure.sql rename to code/db/migrations/0215__content_structure.sql diff --git a/db/migrations/0216__move_content_into_blobs.js b/code/db/migrations/0216__move_content_into_blobs.js similarity index 100% rename from db/migrations/0216__move_content_into_blobs.js rename to code/db/migrations/0216__move_content_into_blobs.js diff --git a/db/migrations/0217__drop_content_tables.sql b/code/db/migrations/0217__drop_content_tables.sql similarity index 100% rename from db/migrations/0217__drop_content_tables.sql rename to code/db/migrations/0217__drop_content_tables.sql diff --git a/db/migrations/0218__rename_note_revision_to_revision.sql b/code/db/migrations/0218__rename_note_revision_to_revision.sql similarity index 100% rename from db/migrations/0218__rename_note_revision_to_revision.sql rename to code/db/migrations/0218__rename_note_revision_to_revision.sql diff --git a/db/migrations/0219__attachments.sql b/code/db/migrations/0219__attachments.sql similarity index 100% rename from db/migrations/0219__attachments.sql rename to code/db/migrations/0219__attachments.sql diff --git a/db/migrations/0220__migrate_images_to_attachments.js b/code/db/migrations/0220__migrate_images_to_attachments.js similarity index 100% rename from db/migrations/0220__migrate_images_to_attachments.js rename to code/db/migrations/0220__migrate_images_to_attachments.js diff --git a/db/migrations/0221__remove_hideIncludedImages_main_option.sql b/code/db/migrations/0221__remove_hideIncludedImages_main_option.sql similarity index 100% rename from db/migrations/0221__remove_hideIncludedImages_main_option.sql rename to code/db/migrations/0221__remove_hideIncludedImages_main_option.sql diff --git a/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql b/code/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql similarity index 100% rename from db/migrations/0222__rename_openTabs_to_openNoteContexts.sql rename to code/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql diff --git a/db/migrations/0223__NOOP.sql b/code/db/migrations/0223__NOOP.sql similarity index 100% rename from db/migrations/0223__NOOP.sql rename to code/db/migrations/0223__NOOP.sql diff --git a/db/migrations/0224__fix_blobIds.sql b/code/db/migrations/0224__fix_blobIds.sql similarity index 100% rename from db/migrations/0224__fix_blobIds.sql rename to code/db/migrations/0224__fix_blobIds.sql diff --git a/db/migrations/0225__create_blobId_indices.sql b/code/db/migrations/0225__create_blobId_indices.sql similarity index 100% rename from db/migrations/0225__create_blobId_indices.sql rename to code/db/migrations/0225__create_blobId_indices.sql diff --git a/db/schema.sql b/code/db/schema.sql similarity index 100% rename from db/schema.sql rename to code/db/schema.sql diff --git a/docker-compose.yml b/code/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to code/docker-compose.yml diff --git a/docker_healthcheck.js b/code/docker_healthcheck.js similarity index 100% rename from docker_healthcheck.js rename to code/docker_healthcheck.js diff --git a/docs/backend_api/AbstractBeccaEntity.html b/code/docs/backend_api/AbstractBeccaEntity.html similarity index 100% rename from docs/backend_api/AbstractBeccaEntity.html rename to code/docs/backend_api/AbstractBeccaEntity.html diff --git a/docs/backend_api/BAttribute.html b/code/docs/backend_api/BAttribute.html similarity index 100% rename from docs/backend_api/BAttribute.html rename to code/docs/backend_api/BAttribute.html diff --git a/docs/backend_api/BBranch.html b/code/docs/backend_api/BBranch.html similarity index 100% rename from docs/backend_api/BBranch.html rename to code/docs/backend_api/BBranch.html diff --git a/docs/backend_api/BEtapiToken.html b/code/docs/backend_api/BEtapiToken.html similarity index 100% rename from docs/backend_api/BEtapiToken.html rename to code/docs/backend_api/BEtapiToken.html diff --git a/docs/backend_api/BNote.html b/code/docs/backend_api/BNote.html similarity index 100% rename from docs/backend_api/BNote.html rename to code/docs/backend_api/BNote.html diff --git a/docs/backend_api/BOption.html b/code/docs/backend_api/BOption.html similarity index 100% rename from docs/backend_api/BOption.html rename to code/docs/backend_api/BOption.html diff --git a/docs/backend_api/BRecentNote.html b/code/docs/backend_api/BRecentNote.html similarity index 100% rename from docs/backend_api/BRecentNote.html rename to code/docs/backend_api/BRecentNote.html diff --git a/docs/backend_api/BackendScriptApi.html b/code/docs/backend_api/BackendScriptApi.html similarity index 100% rename from docs/backend_api/BackendScriptApi.html rename to code/docs/backend_api/BackendScriptApi.html diff --git a/docs/backend_api/becca_entities_abstract_becca_entity.js.html b/code/docs/backend_api/becca_entities_abstract_becca_entity.js.html similarity index 100% rename from docs/backend_api/becca_entities_abstract_becca_entity.js.html rename to code/docs/backend_api/becca_entities_abstract_becca_entity.js.html diff --git a/docs/backend_api/becca_entities_battribute.js.html b/code/docs/backend_api/becca_entities_battribute.js.html similarity index 99% rename from docs/backend_api/becca_entities_battribute.js.html rename to code/docs/backend_api/becca_entities_battribute.js.html index ace7179e54c..992b5362635 100644 --- a/docs/backend_api/becca_entities_battribute.js.html +++ b/code/docs/backend_api/becca_entities_battribute.js.html @@ -115,7 +115,7 @@

Source: becca/entities/battribute.js

} validate() { - if (!["label", "relation"].includes(this.type)) { + if (!["label", "relation", "taskprop"].includes(this.type)) { throw new Error(`Invalid attribute type '${this.type}' in attribute '${this.attributeId}' of note '${this.noteId}'`); } diff --git a/docs/backend_api/becca_entities_bbranch.js.html b/code/docs/backend_api/becca_entities_bbranch.js.html similarity index 100% rename from docs/backend_api/becca_entities_bbranch.js.html rename to code/docs/backend_api/becca_entities_bbranch.js.html diff --git a/docs/backend_api/becca_entities_betapi_token.js.html b/code/docs/backend_api/becca_entities_betapi_token.js.html similarity index 100% rename from docs/backend_api/becca_entities_betapi_token.js.html rename to code/docs/backend_api/becca_entities_betapi_token.js.html diff --git a/docs/backend_api/becca_entities_bnote.js.html b/code/docs/backend_api/becca_entities_bnote.js.html similarity index 100% rename from docs/backend_api/becca_entities_bnote.js.html rename to code/docs/backend_api/becca_entities_bnote.js.html diff --git a/docs/backend_api/becca_entities_boption.js.html b/code/docs/backend_api/becca_entities_boption.js.html similarity index 100% rename from docs/backend_api/becca_entities_boption.js.html rename to code/docs/backend_api/becca_entities_boption.js.html diff --git a/docs/backend_api/becca_entities_brecent_note.js.html b/code/docs/backend_api/becca_entities_brecent_note.js.html similarity index 100% rename from docs/backend_api/becca_entities_brecent_note.js.html rename to code/docs/backend_api/becca_entities_brecent_note.js.html diff --git a/docs/backend_api/fonts/OpenSans-Bold-webfont.eot b/code/docs/backend_api/fonts/OpenSans-Bold-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-Bold-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-Bold-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-Bold-webfont.svg b/code/docs/backend_api/fonts/OpenSans-Bold-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-Bold-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-Bold-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-Bold-webfont.woff b/code/docs/backend_api/fonts/OpenSans-Bold-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-Bold-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-Bold-webfont.woff diff --git a/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.eot b/code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-BoldItalic-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.svg b/code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-BoldItalic-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.woff b/code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-BoldItalic-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-BoldItalic-webfont.woff diff --git a/docs/backend_api/fonts/OpenSans-Italic-webfont.eot b/code/docs/backend_api/fonts/OpenSans-Italic-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-Italic-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-Italic-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-Italic-webfont.svg b/code/docs/backend_api/fonts/OpenSans-Italic-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-Italic-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-Italic-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-Italic-webfont.woff b/code/docs/backend_api/fonts/OpenSans-Italic-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-Italic-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-Italic-webfont.woff diff --git a/docs/backend_api/fonts/OpenSans-Light-webfont.eot b/code/docs/backend_api/fonts/OpenSans-Light-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-Light-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-Light-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-Light-webfont.svg b/code/docs/backend_api/fonts/OpenSans-Light-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-Light-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-Light-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-Light-webfont.woff b/code/docs/backend_api/fonts/OpenSans-Light-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-Light-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-Light-webfont.woff diff --git a/docs/backend_api/fonts/OpenSans-LightItalic-webfont.eot b/code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-LightItalic-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-LightItalic-webfont.svg b/code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-LightItalic-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-LightItalic-webfont.woff b/code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-LightItalic-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-LightItalic-webfont.woff diff --git a/docs/backend_api/fonts/OpenSans-Regular-webfont.eot b/code/docs/backend_api/fonts/OpenSans-Regular-webfont.eot similarity index 100% rename from docs/backend_api/fonts/OpenSans-Regular-webfont.eot rename to code/docs/backend_api/fonts/OpenSans-Regular-webfont.eot diff --git a/docs/backend_api/fonts/OpenSans-Regular-webfont.svg b/code/docs/backend_api/fonts/OpenSans-Regular-webfont.svg similarity index 100% rename from docs/backend_api/fonts/OpenSans-Regular-webfont.svg rename to code/docs/backend_api/fonts/OpenSans-Regular-webfont.svg diff --git a/docs/backend_api/fonts/OpenSans-Regular-webfont.woff b/code/docs/backend_api/fonts/OpenSans-Regular-webfont.woff similarity index 100% rename from docs/backend_api/fonts/OpenSans-Regular-webfont.woff rename to code/docs/backend_api/fonts/OpenSans-Regular-webfont.woff diff --git a/docs/backend_api/index.html b/code/docs/backend_api/index.html similarity index 100% rename from docs/backend_api/index.html rename to code/docs/backend_api/index.html diff --git a/docs/backend_api/module-sql.html b/code/docs/backend_api/module-sql.html similarity index 100% rename from docs/backend_api/module-sql.html rename to code/docs/backend_api/module-sql.html diff --git a/docs/backend_api/scripts/linenumber.js b/code/docs/backend_api/scripts/linenumber.js similarity index 100% rename from docs/backend_api/scripts/linenumber.js rename to code/docs/backend_api/scripts/linenumber.js diff --git a/docs/backend_api/scripts/prettify/Apache-License-2.0.txt b/code/docs/backend_api/scripts/prettify/Apache-License-2.0.txt similarity index 100% rename from docs/backend_api/scripts/prettify/Apache-License-2.0.txt rename to code/docs/backend_api/scripts/prettify/Apache-License-2.0.txt diff --git a/docs/backend_api/scripts/prettify/lang-css.js b/code/docs/backend_api/scripts/prettify/lang-css.js similarity index 100% rename from docs/backend_api/scripts/prettify/lang-css.js rename to code/docs/backend_api/scripts/prettify/lang-css.js diff --git a/docs/backend_api/scripts/prettify/prettify.js b/code/docs/backend_api/scripts/prettify/prettify.js similarity index 100% rename from docs/backend_api/scripts/prettify/prettify.js rename to code/docs/backend_api/scripts/prettify/prettify.js diff --git a/docs/backend_api/services_backend_script_api.js.html b/code/docs/backend_api/services_backend_script_api.js.html similarity index 100% rename from docs/backend_api/services_backend_script_api.js.html rename to code/docs/backend_api/services_backend_script_api.js.html diff --git a/docs/backend_api/services_sql.js.html b/code/docs/backend_api/services_sql.js.html similarity index 100% rename from docs/backend_api/services_sql.js.html rename to code/docs/backend_api/services_sql.js.html diff --git a/docs/backend_api/styles/jsdoc-default.css b/code/docs/backend_api/styles/jsdoc-default.css similarity index 100% rename from docs/backend_api/styles/jsdoc-default.css rename to code/docs/backend_api/styles/jsdoc-default.css diff --git a/docs/backend_api/styles/prettify-jsdoc.css b/code/docs/backend_api/styles/prettify-jsdoc.css similarity index 100% rename from docs/backend_api/styles/prettify-jsdoc.css rename to code/docs/backend_api/styles/prettify-jsdoc.css diff --git a/docs/backend_api/styles/prettify-tomorrow.css b/code/docs/backend_api/styles/prettify-tomorrow.css similarity index 100% rename from docs/backend_api/styles/prettify-tomorrow.css rename to code/docs/backend_api/styles/prettify-tomorrow.css diff --git a/docs/frontend_api/FAttribute.html b/code/docs/frontend_api/FAttribute.html similarity index 100% rename from docs/frontend_api/FAttribute.html rename to code/docs/frontend_api/FAttribute.html diff --git a/docs/frontend_api/FBranch.html b/code/docs/frontend_api/FBranch.html similarity index 100% rename from docs/frontend_api/FBranch.html rename to code/docs/frontend_api/FBranch.html diff --git a/docs/frontend_api/FNote.html b/code/docs/frontend_api/FNote.html similarity index 100% rename from docs/frontend_api/FNote.html rename to code/docs/frontend_api/FNote.html diff --git a/docs/frontend_api/FrontendScriptApi.html b/code/docs/frontend_api/FrontendScriptApi.html similarity index 100% rename from docs/frontend_api/FrontendScriptApi.html rename to code/docs/frontend_api/FrontendScriptApi.html diff --git a/docs/frontend_api/entities_fattribute.js.html b/code/docs/frontend_api/entities_fattribute.js.html similarity index 100% rename from docs/frontend_api/entities_fattribute.js.html rename to code/docs/frontend_api/entities_fattribute.js.html diff --git a/docs/frontend_api/entities_fbranch.js.html b/code/docs/frontend_api/entities_fbranch.js.html similarity index 100% rename from docs/frontend_api/entities_fbranch.js.html rename to code/docs/frontend_api/entities_fbranch.js.html diff --git a/docs/frontend_api/entities_fnote.js.html b/code/docs/frontend_api/entities_fnote.js.html similarity index 100% rename from docs/frontend_api/entities_fnote.js.html rename to code/docs/frontend_api/entities_fnote.js.html diff --git a/docs/frontend_api/fonts/OpenSans-Bold-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-Bold-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Bold-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-Bold-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-Bold-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-Bold-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Bold-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-Bold-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-Bold-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-Bold-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Bold-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-Bold-webfont.woff diff --git a/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-BoldItalic-webfont.woff diff --git a/docs/frontend_api/fonts/OpenSans-Italic-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-Italic-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Italic-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-Italic-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-Italic-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-Italic-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Italic-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-Italic-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-Italic-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-Italic-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Italic-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-Italic-webfont.woff diff --git a/docs/frontend_api/fonts/OpenSans-Light-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-Light-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Light-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-Light-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-Light-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-Light-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Light-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-Light-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-Light-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-Light-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Light-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-Light-webfont.woff diff --git a/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-LightItalic-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-LightItalic-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-LightItalic-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-LightItalic-webfont.woff diff --git a/docs/frontend_api/fonts/OpenSans-Regular-webfont.eot b/code/docs/frontend_api/fonts/OpenSans-Regular-webfont.eot similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Regular-webfont.eot rename to code/docs/frontend_api/fonts/OpenSans-Regular-webfont.eot diff --git a/docs/frontend_api/fonts/OpenSans-Regular-webfont.svg b/code/docs/frontend_api/fonts/OpenSans-Regular-webfont.svg similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Regular-webfont.svg rename to code/docs/frontend_api/fonts/OpenSans-Regular-webfont.svg diff --git a/docs/frontend_api/fonts/OpenSans-Regular-webfont.woff b/code/docs/frontend_api/fonts/OpenSans-Regular-webfont.woff similarity index 100% rename from docs/frontend_api/fonts/OpenSans-Regular-webfont.woff rename to code/docs/frontend_api/fonts/OpenSans-Regular-webfont.woff diff --git a/docs/frontend_api/index.html b/code/docs/frontend_api/index.html similarity index 100% rename from docs/frontend_api/index.html rename to code/docs/frontend_api/index.html diff --git a/docs/frontend_api/scripts/linenumber.js b/code/docs/frontend_api/scripts/linenumber.js similarity index 100% rename from docs/frontend_api/scripts/linenumber.js rename to code/docs/frontend_api/scripts/linenumber.js diff --git a/docs/frontend_api/scripts/prettify/Apache-License-2.0.txt b/code/docs/frontend_api/scripts/prettify/Apache-License-2.0.txt similarity index 100% rename from docs/frontend_api/scripts/prettify/Apache-License-2.0.txt rename to code/docs/frontend_api/scripts/prettify/Apache-License-2.0.txt diff --git a/docs/frontend_api/scripts/prettify/lang-css.js b/code/docs/frontend_api/scripts/prettify/lang-css.js similarity index 100% rename from docs/frontend_api/scripts/prettify/lang-css.js rename to code/docs/frontend_api/scripts/prettify/lang-css.js diff --git a/docs/frontend_api/scripts/prettify/prettify.js b/code/docs/frontend_api/scripts/prettify/prettify.js similarity index 100% rename from docs/frontend_api/scripts/prettify/prettify.js rename to code/docs/frontend_api/scripts/prettify/prettify.js diff --git a/docs/frontend_api/services_frontend_script_api.js.html b/code/docs/frontend_api/services_frontend_script_api.js.html similarity index 100% rename from docs/frontend_api/services_frontend_script_api.js.html rename to code/docs/frontend_api/services_frontend_script_api.js.html diff --git a/docs/frontend_api/styles/jsdoc-default.css b/code/docs/frontend_api/styles/jsdoc-default.css similarity index 100% rename from docs/frontend_api/styles/jsdoc-default.css rename to code/docs/frontend_api/styles/jsdoc-default.css diff --git a/docs/frontend_api/styles/prettify-jsdoc.css b/code/docs/frontend_api/styles/prettify-jsdoc.css similarity index 100% rename from docs/frontend_api/styles/prettify-jsdoc.css rename to code/docs/frontend_api/styles/prettify-jsdoc.css diff --git a/docs/frontend_api/styles/prettify-tomorrow.css b/code/docs/frontend_api/styles/prettify-tomorrow.css similarity index 100% rename from docs/frontend_api/styles/prettify-tomorrow.css rename to code/docs/frontend_api/styles/prettify-tomorrow.css diff --git a/dump-db/README.md b/code/dump-db/README.md similarity index 100% rename from dump-db/README.md rename to code/dump-db/README.md diff --git a/dump-db/dump-db.js b/code/dump-db/dump-db.js similarity index 100% rename from dump-db/dump-db.js rename to code/dump-db/dump-db.js diff --git a/dump-db/inc/data_key.js b/code/dump-db/inc/data_key.js similarity index 100% rename from dump-db/inc/data_key.js rename to code/dump-db/inc/data_key.js diff --git a/dump-db/inc/decrypt.js b/code/dump-db/inc/decrypt.js similarity index 100% rename from dump-db/inc/decrypt.js rename to code/dump-db/inc/decrypt.js diff --git a/dump-db/inc/dump.js b/code/dump-db/inc/dump.js similarity index 100% rename from dump-db/inc/dump.js rename to code/dump-db/inc/dump.js diff --git a/dump-db/inc/extension.js b/code/dump-db/inc/extension.js similarity index 100% rename from dump-db/inc/extension.js rename to code/dump-db/inc/extension.js diff --git a/dump-db/inc/sql.js b/code/dump-db/inc/sql.js similarity index 100% rename from dump-db/inc/sql.js rename to code/dump-db/inc/sql.js diff --git a/dump-db/package-lock.json b/code/dump-db/package-lock.json similarity index 100% rename from dump-db/package-lock.json rename to code/dump-db/package-lock.json diff --git a/dump-db/package.json b/code/dump-db/package.json similarity index 100% rename from dump-db/package.json rename to code/dump-db/package.json diff --git a/electron.js b/code/electron.js similarity index 100% rename from electron.js rename to code/electron.js diff --git a/images/app-icons/ios/apple-touch-icon.png b/code/images/app-icons/ios/apple-touch-icon.png similarity index 100% rename from images/app-icons/ios/apple-touch-icon.png rename to code/images/app-icons/ios/apple-touch-icon.png diff --git a/images/app-icons/mac/icon.icns b/code/images/app-icons/mac/icon.icns similarity index 100% rename from images/app-icons/mac/icon.icns rename to code/images/app-icons/mac/icon.icns diff --git a/images/app-icons/png/128x128.png b/code/images/app-icons/png/128x128.png similarity index 100% rename from images/app-icons/png/128x128.png rename to code/images/app-icons/png/128x128.png diff --git a/images/app-icons/png/16x16-bw.png b/code/images/app-icons/png/16x16-bw.png similarity index 100% rename from images/app-icons/png/16x16-bw.png rename to code/images/app-icons/png/16x16-bw.png diff --git a/images/app-icons/png/16x16.png b/code/images/app-icons/png/16x16.png similarity index 100% rename from images/app-icons/png/16x16.png rename to code/images/app-icons/png/16x16.png diff --git a/images/app-icons/png/24x24.png b/code/images/app-icons/png/24x24.png similarity index 100% rename from images/app-icons/png/24x24.png rename to code/images/app-icons/png/24x24.png diff --git a/images/app-icons/png/256x256-dev.png b/code/images/app-icons/png/256x256-dev.png similarity index 100% rename from images/app-icons/png/256x256-dev.png rename to code/images/app-icons/png/256x256-dev.png diff --git a/images/app-icons/png/256x256.png b/code/images/app-icons/png/256x256.png similarity index 100% rename from images/app-icons/png/256x256.png rename to code/images/app-icons/png/256x256.png diff --git a/images/app-icons/png/32x32.png b/code/images/app-icons/png/32x32.png similarity index 100% rename from images/app-icons/png/32x32.png rename to code/images/app-icons/png/32x32.png diff --git a/images/app-icons/png/48x48.png b/code/images/app-icons/png/48x48.png similarity index 100% rename from images/app-icons/png/48x48.png rename to code/images/app-icons/png/48x48.png diff --git a/images/app-icons/png/512x512.png b/code/images/app-icons/png/512x512.png similarity index 100% rename from images/app-icons/png/512x512.png rename to code/images/app-icons/png/512x512.png diff --git a/images/app-icons/png/64x64.png b/code/images/app-icons/png/64x64.png similarity index 100% rename from images/app-icons/png/64x64.png rename to code/images/app-icons/png/64x64.png diff --git a/images/app-icons/png/96x96.png b/code/images/app-icons/png/96x96.png similarity index 100% rename from images/app-icons/png/96x96.png rename to code/images/app-icons/png/96x96.png diff --git a/images/app-icons/win/icon.ico b/code/images/app-icons/win/icon.ico similarity index 100% rename from images/app-icons/win/icon.ico rename to code/images/app-icons/win/icon.ico diff --git a/images/icon-black.png b/code/images/icon-black.png similarity index 100% rename from images/icon-black.png rename to code/images/icon-black.png diff --git a/images/icon-black.svg b/code/images/icon-black.svg similarity index 100% rename from images/icon-black.svg rename to code/images/icon-black.svg diff --git a/images/icon-color.png b/code/images/icon-color.png similarity index 100% rename from images/icon-color.png rename to code/images/icon-color.png diff --git a/images/icon-color.svg b/code/images/icon-color.svg similarity index 100% rename from images/icon-color.svg rename to code/images/icon-color.svg diff --git a/images/icon-grey.png b/code/images/icon-grey.png similarity index 100% rename from images/icon-grey.png rename to code/images/icon-grey.png diff --git a/images/icon-grey.svg b/code/images/icon-grey.svg similarity index 100% rename from images/icon-grey.svg rename to code/images/icon-grey.svg diff --git a/images/icon.svg b/code/images/icon.svg similarity index 100% rename from images/icon.svg rename to code/images/icon.svg diff --git a/issue_template.md b/code/issue_template.md similarity index 100% rename from issue_template.md rename to code/issue_template.md diff --git a/jsdoc-conf.json b/code/jsdoc-conf.json similarity index 100% rename from jsdoc-conf.json rename to code/jsdoc-conf.json diff --git a/libraries/autocomplete.jquery.min.js b/code/libraries/autocomplete.jquery.min.js similarity index 100% rename from libraries/autocomplete.jquery.min.js rename to code/libraries/autocomplete.jquery.min.js diff --git a/libraries/bootstrap/css/bootstrap.min.css b/code/libraries/bootstrap/css/bootstrap.min.css similarity index 100% rename from libraries/bootstrap/css/bootstrap.min.css rename to code/libraries/bootstrap/css/bootstrap.min.css diff --git a/libraries/bootstrap/css/bootstrap.min.css.map b/code/libraries/bootstrap/css/bootstrap.min.css.map similarity index 100% rename from libraries/bootstrap/css/bootstrap.min.css.map rename to code/libraries/bootstrap/css/bootstrap.min.css.map diff --git a/libraries/bootstrap/js/bootstrap.bundle.min.js b/code/libraries/bootstrap/js/bootstrap.bundle.min.js similarity index 100% rename from libraries/bootstrap/js/bootstrap.bundle.min.js rename to code/libraries/bootstrap/js/bootstrap.bundle.min.js diff --git a/libraries/bootstrap/js/bootstrap.bundle.min.js.map b/code/libraries/bootstrap/js/bootstrap.bundle.min.js.map similarity index 100% rename from libraries/bootstrap/js/bootstrap.bundle.min.js.map rename to code/libraries/bootstrap/js/bootstrap.bundle.min.js.map diff --git a/libraries/boxicons/LICENSE b/code/libraries/boxicons/LICENSE similarity index 100% rename from libraries/boxicons/LICENSE rename to code/libraries/boxicons/LICENSE diff --git a/libraries/boxicons/css/boxicons.css b/code/libraries/boxicons/css/boxicons.css similarity index 100% rename from libraries/boxicons/css/boxicons.css rename to code/libraries/boxicons/css/boxicons.css diff --git a/libraries/boxicons/css/boxicons.min.css b/code/libraries/boxicons/css/boxicons.min.css similarity index 100% rename from libraries/boxicons/css/boxicons.min.css rename to code/libraries/boxicons/css/boxicons.min.css diff --git a/libraries/boxicons/fonts/boxicons.eot b/code/libraries/boxicons/fonts/boxicons.eot similarity index 100% rename from libraries/boxicons/fonts/boxicons.eot rename to code/libraries/boxicons/fonts/boxicons.eot diff --git a/libraries/boxicons/fonts/boxicons.svg b/code/libraries/boxicons/fonts/boxicons.svg similarity index 100% rename from libraries/boxicons/fonts/boxicons.svg rename to code/libraries/boxicons/fonts/boxicons.svg diff --git a/libraries/boxicons/fonts/boxicons.ttf b/code/libraries/boxicons/fonts/boxicons.ttf similarity index 100% rename from libraries/boxicons/fonts/boxicons.ttf rename to code/libraries/boxicons/fonts/boxicons.ttf diff --git a/libraries/boxicons/fonts/boxicons.woff b/code/libraries/boxicons/fonts/boxicons.woff similarity index 100% rename from libraries/boxicons/fonts/boxicons.woff rename to code/libraries/boxicons/fonts/boxicons.woff diff --git a/libraries/boxicons/fonts/boxicons.woff2 b/code/libraries/boxicons/fonts/boxicons.woff2 similarity index 100% rename from libraries/boxicons/fonts/boxicons.woff2 rename to code/libraries/boxicons/fonts/boxicons.woff2 diff --git a/libraries/ckeditor/ckeditor-content.css b/code/libraries/ckeditor/ckeditor-content.css similarity index 100% rename from libraries/ckeditor/ckeditor-content.css rename to code/libraries/ckeditor/ckeditor-content.css diff --git a/code/libraries/ckeditor/ckeditor.js b/code/libraries/ckeditor/ckeditor.js new file mode 100644 index 00000000000..bfd6ec92796 --- /dev/null +++ b/code/libraries/ckeditor/ckeditor.js @@ -0,0 +1,39207 @@ +! function(t) { + const e = t.en = t.en || {}; + e.dictionary = Object.assign(e.dictionary || {}, { + "%0 of %1": "%0 of %1", + Accept: "Accept", + "Align cell text to the bottom": "Align cell text to the bottom", + "Align cell text to the center": "Align cell text to the center", + "Align cell text to the left": "Align cell text to the left", + "Align cell text to the middle": "Align cell text to the middle", + "Align cell text to the right": "Align cell text to the right", + "Align cell text to the top": "Align cell text to the top", + "Align table to the left": "Align table to the left", + "Align table to the right": "Align table to the right", + Alignment: "Alignment", + Aquamarine: "Aquamarine", + Background: "Background", + Big: "Big", + Black: "Black", + "Block quote": "Block quote", + Blue: "Blue", + Bold: "Bold", + Border: "Border", + "Break text": "Break text", + "Bulleted List": "Bulleted List", + "Bulleted list styles toolbar": "Bulleted list styles toolbar", + Cancel: "Cancel", + "Cannot upload file:": "Cannot upload file:", + "Caption for image: %0": "Caption for image: %0", + "Caption for the image": "Caption for the image", + "Cell properties": "Cell properties", + "Center table": "Center table", + "Centered image": "Centered image", + "Change image text alternative": "Change image text alternative", + "Choose heading": "Choose heading", + Circle: "Circle", + Code: "Code", + Color: "Color", + "Color picker": "Color picker", + Column: "Column", + Dashed: "Dashed", + Decimal: "Decimal", + "Decimal with leading zero": "Decimal with leading zero", + "Decrease indent": "Decrease indent", + Default: "Default", + "Delete column": "Delete column", + "Delete row": "Delete row", + "Dim grey": "Dim grey", + Dimensions: "Dimensions", + Disc: "Disc", + "Document colors": "Document colors", + Dotted: "Dotted", + Double: "Double", + Downloadable: "Downloadable", + "Dropdown toolbar": "Dropdown toolbar", + "Edit block": "Edit block", + "Edit link": "Edit link", + "Editor block content toolbar": "Editor block content toolbar", + "Editor contextual toolbar": "Editor contextual toolbar", + "Editor editing area: %0": "Editor editing area: %0", + "Editor toolbar": "Editor toolbar", + "Enter image caption": "Enter image caption", + "Enter table caption": "Enter table caption", + Find: "Find", + "Find and replace": "Find and replace", + "Find in text…": "Find in text…", + "Font Background Color": "Font Background Color", + "Font Color": "Font Color", + "Font Family": "Font Family", + "Font Size": "Font Size", + "Full size image": "Full size image", + Green: "Green", + Grey: "Grey", + Groove: "Groove", + "Header column": "Header column", + "Header row": "Header row", + Heading: "Heading", + "Heading 1": "Heading 1", + "Heading 2": "Heading 2", + "Heading 3": "Heading 3", + "Heading 4": "Heading 4", + "Heading 5": "Heading 5", + "Heading 6": "Heading 6", + Height: "Height", + HEX: "HEX", + "Horizontal line": "Horizontal line", + "Horizontal text alignment toolbar": "Horizontal text alignment toolbar", + Huge: "Huge", + "Image resize list": "Image resize list", + "Image toolbar": "Image toolbar", + "image widget": "image widget", + "In line": "In line", + "Increase indent": "Increase indent", + Insert: "Insert", + "Insert code block": "Insert code block", + "Insert column left": "Insert column left", + "Insert column right": "Insert column right", + "Insert image": "Insert image", + "Insert image via URL": "Insert image via URL", + "Insert paragraph after block": "Insert paragraph after block", + "Insert paragraph before block": "Insert paragraph before block", + "Insert row above": "Insert row above", + "Insert row below": "Insert row below", + "Insert table": "Insert table", + Inset: "Inset", + Italic: "Italic", + "Justify cell text": "Justify cell text", + "Left aligned image": "Left aligned image", + "Light blue": "Light blue", + "Light green": "Light green", + "Light grey": "Light grey", + Link: "Link", + "Link image": "Link image", + "Link URL": "Link URL", + "List properties": "List properties", + "Lower-latin": "Lower-latin", + "Lower–roman": "Lower–roman", + "Match case": "Match case", + "Merge cell down": "Merge cell down", + "Merge cell left": "Merge cell left", + "Merge cell right": "Merge cell right", + "Merge cell up": "Merge cell up", + "Merge cells": "Merge cells", + Next: "Next", + "Next result": "Next result", + None: "None", + "Numbered List": "Numbered List", + "Numbered list styles toolbar": "Numbered list styles toolbar", + "Open in a new tab": "Open in a new tab", + "Open link in new tab": "Open link in new tab", + Orange: "Orange", + Original: "Original", + Outset: "Outset", + Padding: "Padding", + Paragraph: "Paragraph", + "Plain text": "Plain text", + "Press Enter to type after or press Shift + Enter to type before the widget": "Press Enter to type after or press Shift + Enter to type before the widget", + Previous: "Previous", + "Previous result": "Previous result", + Purple: "Purple", + Red: "Red", + Redo: "Redo", + "Remove color": "Remove color", + "Remove Format": "Remove Format", + Replace: "Replace", + "Replace all": "Replace all", + "Replace with…": "Replace with…", + "Resize image": "Resize image", + "Resize image to %0": "Resize image to %0", + "Resize image to the original size": "Resize image to the original size", + "Restore default": "Restore default", + "Reversed order": "Reversed order", + "Rich Text Editor": "Rich Text Editor", + "Rich Text Editor. Editing area: %0": "Rich Text Editor. Editing area: %0", + Ridge: "Ridge", + "Right aligned image": "Right aligned image", + Row: "Row", + Save: "Save", + "Select all": "Select all", + "Select column": "Select column", + "Select row": "Select row", + "Show more items": "Show more items", + "Show options": "Show options", + "Side image": "Side image", + Small: "Small", + Solid: "Solid", + "Split cell horizontally": "Split cell horizontally", + "Split cell vertically": "Split cell vertically", + Square: "Square", + "Start at": "Start at", + "Start index must be greater than 0.": "Start index must be greater than 0.", + Strikethrough: "Strikethrough", + Style: "Style", + Subscript: "Subscript", + Superscript: "Superscript", + "Table alignment toolbar": "Table alignment toolbar", + "Table cell text alignment": "Table cell text alignment", + "Table properties": "Table properties", + "Table toolbar": "Table toolbar", + "Text alternative": "Text alternative", + "Text to find must not be empty.": "Text to find must not be empty.", + 'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".': 'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".', + 'The value is invalid. Try "10px" or "2em" or simply "2".': 'The value is invalid. Try "10px" or "2em" or simply "2".', + "This link has no URL": "This link has no URL", + Tiny: "Tiny", + "Tip: Find some text first in order to replace it.": "Tip: Find some text first in order to replace it.", + "To-do List": "To-do List", + "Toggle caption off": "Toggle caption off", + "Toggle caption on": "Toggle caption on", + "Toggle the circle list style": "Toggle the circle list style", + "Toggle the decimal list style": "Toggle the decimal list style", + "Toggle the decimal with leading zero list style": "Toggle the decimal with leading zero list style", + "Toggle the disc list style": "Toggle the disc list style", + "Toggle the lower–latin list style": "Toggle the lower–latin list style", + "Toggle the lower–roman list style": "Toggle the lower–roman list style", + "Toggle the square list style": "Toggle the square list style", + "Toggle the upper–latin list style": "Toggle the upper–latin list style", + "Toggle the upper–roman list style": "Toggle the upper–roman list style", + Turquoise: "Turquoise", + "Type or paste your content here.": "Type or paste your content here.", + "Type your title": "Type your title", + Underline: "Underline", + Undo: "Undo", + Unlink: "Unlink", + Update: "Update", + "Update image URL": "Update image URL", + "Upload failed": "Upload failed", + "Upload in progress": "Upload in progress", + "Upper-latin": "Upper-latin", + "Upper-roman": "Upper-roman", + "Vertical text alignment toolbar": "Vertical text alignment toolbar", + White: "White", + "Whole words only": "Whole words only", + "Widget toolbar": "Widget toolbar", + Width: "Width", + "Wrap text": "Wrap text", + Yellow: "Yellow" + }) +}(window.CKEDITOR_TRANSLATIONS || (window.CKEDITOR_TRANSLATIONS = {})), +/*! + * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. + * For licensing, see LICENSE.md. + */ +function(t, e) { + "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.BalloonEditor = e() : t.BalloonEditor = e() +}(self, (() => (() => { + var t = { + 4959: (t, e, n) => { + const o = n(1103), + i = {}; + for (const t of Object.keys(o)) i[o[t]] = t; + const r = { + rgb: { + channels: 3, + labels: "rgb" + }, + hsl: { + channels: 3, + labels: "hsl" + }, + hsv: { + channels: 3, + labels: "hsv" + }, + hwb: { + channels: 3, + labels: "hwb" + }, + cmyk: { + channels: 4, + labels: "cmyk" + }, + xyz: { + channels: 3, + labels: "xyz" + }, + lab: { + channels: 3, + labels: "lab" + }, + lch: { + channels: 3, + labels: "lch" + }, + hex: { + channels: 1, + labels: ["hex"] + }, + keyword: { + channels: 1, + labels: ["keyword"] + }, + ansi16: { + channels: 1, + labels: ["ansi16"] + }, + ansi256: { + channels: 1, + labels: ["ansi256"] + }, + hcg: { + channels: 3, + labels: ["h", "c", "g"] + }, + apple: { + channels: 3, + labels: ["r16", "g16", "b16"] + }, + gray: { + channels: 1, + labels: ["gray"] + } + }; + t.exports = r; + for (const t of Object.keys(r)) { + if (!("channels" in r[t])) throw new Error("missing channels property: " + t); + if (!("labels" in r[t])) throw new Error("missing channel labels property: " + t); + if (r[t].labels.length !== r[t].channels) throw new Error("channel and label counts mismatch: " + t); + const { + channels: e, + labels: n + } = r[t]; + delete r[t].channels, delete r[t].labels, Object.defineProperty(r[t], "channels", { + value: e + }), Object.defineProperty(r[t], "labels", { + value: n + }) + } + r.rgb.hsl = function(t) { + const e = t[0] / 255, + n = t[1] / 255, + o = t[2] / 255, + i = Math.min(e, n, o), + r = Math.max(e, n, o), + s = r - i; + let a, l; + r === i ? a = 0 : e === r ? a = (n - o) / s : n === r ? a = 2 + (o - e) / s : o === r && (a = 4 + (e - n) / s), a = Math.min(60 * a, 360), a < 0 && (a += 360); + const c = (i + r) / 2; + return l = r === i ? 0 : c <= .5 ? s / (r + i) : s / (2 - r - i), [a, 100 * l, 100 * c] + }, r.rgb.hsv = function(t) { + let e, n, o, i, r; + const s = t[0] / 255, + a = t[1] / 255, + l = t[2] / 255, + c = Math.max(s, a, l), + d = c - Math.min(s, a, l), + h = function(t) { + return (c - t) / 6 / d + .5 + }; + return 0 === d ? (i = 0, r = 0) : (r = d / c, e = h(s), n = h(a), o = h(l), s === c ? i = o - n : a === c ? i = 1 / 3 + e - o : l === c && (i = 2 / 3 + n - e), i < 0 ? i += 1 : i > 1 && (i -= 1)), [360 * i, 100 * r, 100 * c] + }, r.rgb.hwb = function(t) { + const e = t[0], + n = t[1]; + let o = t[2]; + const i = r.rgb.hsl(t)[0], + s = 1 / 255 * Math.min(e, Math.min(n, o)); + return o = 1 - 1 / 255 * Math.max(e, Math.max(n, o)), [i, 100 * s, 100 * o] + }, r.rgb.cmyk = function(t) { + const e = t[0] / 255, + n = t[1] / 255, + o = t[2] / 255, + i = Math.min(1 - e, 1 - n, 1 - o); + return [100 * ((1 - e - i) / (1 - i) || 0), 100 * ((1 - n - i) / (1 - i) || 0), 100 * ((1 - o - i) / (1 - i) || 0), 100 * i] + }, r.rgb.keyword = function(t) { + const e = i[t]; + if (e) return e; + let n, r = 1 / 0; + for (const e of Object.keys(o)) { + const i = o[e], + l = (a = i, ((s = t)[0] - a[0]) ** 2 + (s[1] - a[1]) ** 2 + (s[2] - a[2]) ** 2); + l < r && (r = l, n = e) + } + var s, a; + return n + }, r.keyword.rgb = function(t) { + return o[t] + }, r.rgb.xyz = function(t) { + let e = t[0] / 255, + n = t[1] / 255, + o = t[2] / 255; + e = e > .04045 ? ((e + .055) / 1.055) ** 2.4 : e / 12.92, n = n > .04045 ? ((n + .055) / 1.055) ** 2.4 : n / 12.92, o = o > .04045 ? ((o + .055) / 1.055) ** 2.4 : o / 12.92; + return [100 * (.4124 * e + .3576 * n + .1805 * o), 100 * (.2126 * e + .7152 * n + .0722 * o), 100 * (.0193 * e + .1192 * n + .9505 * o)] + }, r.rgb.lab = function(t) { + const e = r.rgb.xyz(t); + let n = e[0], + o = e[1], + i = e[2]; + n /= 95.047, o /= 100, i /= 108.883, n = n > .008856 ? n ** (1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? o ** (1 / 3) : 7.787 * o + 16 / 116, i = i > .008856 ? i ** (1 / 3) : 7.787 * i + 16 / 116; + return [116 * o - 16, 500 * (n - o), 200 * (o - i)] + }, r.hsl.rgb = function(t) { + const e = t[0] / 360, + n = t[1] / 100, + o = t[2] / 100; + let i, r, s; + if (0 === n) return s = 255 * o, [s, s, s]; + i = o < .5 ? o * (1 + n) : o + n - o * n; + const a = 2 * o - i, + l = [0, 0, 0]; + for (let t = 0; t < 3; t++) r = e + 1 / 3 * -(t - 1), r < 0 && r++, r > 1 && r--, s = 6 * r < 1 ? a + 6 * (i - a) * r : 2 * r < 1 ? i : 3 * r < 2 ? a + (i - a) * (2 / 3 - r) * 6 : a, l[t] = 255 * s; + return l + }, r.hsl.hsv = function(t) { + const e = t[0]; + let n = t[1] / 100, + o = t[2] / 100, + i = n; + const r = Math.max(o, .01); + o *= 2, n *= o <= 1 ? o : 2 - o, i *= r <= 1 ? r : 2 - r; + return [e, 100 * (0 === o ? 2 * i / (r + i) : 2 * n / (o + n)), 100 * ((o + n) / 2)] + }, r.hsv.rgb = function(t) { + const e = t[0] / 60, + n = t[1] / 100; + let o = t[2] / 100; + const i = Math.floor(e) % 6, + r = e - Math.floor(e), + s = 255 * o * (1 - n), + a = 255 * o * (1 - n * r), + l = 255 * o * (1 - n * (1 - r)); + switch (o *= 255, i) { + case 0: + return [o, l, s]; + case 1: + return [a, o, s]; + case 2: + return [s, o, l]; + case 3: + return [s, a, o]; + case 4: + return [l, s, o]; + case 5: + return [o, s, a] + } + }, r.hsv.hsl = function(t) { + const e = t[0], + n = t[1] / 100, + o = t[2] / 100, + i = Math.max(o, .01); + let r, s; + s = (2 - n) * o; + const a = (2 - n) * i; + return r = n * i, r /= a <= 1 ? a : 2 - a, r = r || 0, s /= 2, [e, 100 * r, 100 * s] + }, r.hwb.rgb = function(t) { + const e = t[0] / 360; + let n = t[1] / 100, + o = t[2] / 100; + const i = n + o; + let r; + i > 1 && (n /= i, o /= i); + const s = Math.floor(6 * e), + a = 1 - o; + r = 6 * e - s, 0 != (1 & s) && (r = 1 - r); + const l = n + r * (a - n); + let c, d, h; + switch (s) { + default: + case 6: + case 0: + c = a, d = l, h = n; + break; + case 1: + c = l, d = a, h = n; + break; + case 2: + c = n, d = a, h = l; + break; + case 3: + c = n, d = l, h = a; + break; + case 4: + c = l, d = n, h = a; + break; + case 5: + c = a, d = n, h = l + } + return [255 * c, 255 * d, 255 * h] + }, r.cmyk.rgb = function(t) { + const e = t[0] / 100, + n = t[1] / 100, + o = t[2] / 100, + i = t[3] / 100; + return [255 * (1 - Math.min(1, e * (1 - i) + i)), 255 * (1 - Math.min(1, n * (1 - i) + i)), 255 * (1 - Math.min(1, o * (1 - i) + i))] + }, r.xyz.rgb = function(t) { + const e = t[0] / 100, + n = t[1] / 100, + o = t[2] / 100; + let i, r, s; + return i = 3.2406 * e + -1.5372 * n + -.4986 * o, r = -.9689 * e + 1.8758 * n + .0415 * o, s = .0557 * e + -.204 * n + 1.057 * o, i = i > .0031308 ? 1.055 * i ** (1 / 2.4) - .055 : 12.92 * i, r = r > .0031308 ? 1.055 * r ** (1 / 2.4) - .055 : 12.92 * r, s = s > .0031308 ? 1.055 * s ** (1 / 2.4) - .055 : 12.92 * s, i = Math.min(Math.max(0, i), 1), r = Math.min(Math.max(0, r), 1), s = Math.min(Math.max(0, s), 1), [255 * i, 255 * r, 255 * s] + }, r.xyz.lab = function(t) { + let e = t[0], + n = t[1], + o = t[2]; + e /= 95.047, n /= 100, o /= 108.883, e = e > .008856 ? e ** (1 / 3) : 7.787 * e + 16 / 116, n = n > .008856 ? n ** (1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? o ** (1 / 3) : 7.787 * o + 16 / 116; + return [116 * n - 16, 500 * (e - n), 200 * (n - o)] + }, r.lab.xyz = function(t) { + let e, n, o; + n = (t[0] + 16) / 116, e = t[1] / 500 + n, o = n - t[2] / 200; + const i = n ** 3, + r = e ** 3, + s = o ** 3; + return n = i > .008856 ? i : (n - 16 / 116) / 7.787, e = r > .008856 ? r : (e - 16 / 116) / 7.787, o = s > .008856 ? s : (o - 16 / 116) / 7.787, e *= 95.047, n *= 100, o *= 108.883, [e, n, o] + }, r.lab.lch = function(t) { + const e = t[0], + n = t[1], + o = t[2]; + let i; + i = 360 * Math.atan2(o, n) / 2 / Math.PI, i < 0 && (i += 360); + return [e, Math.sqrt(n * n + o * o), i] + }, r.lch.lab = function(t) { + const e = t[0], + n = t[1], + o = t[2] / 360 * 2 * Math.PI; + return [e, n * Math.cos(o), n * Math.sin(o)] + }, r.rgb.ansi16 = function(t, e = null) { + const [n, o, i] = t; + let s = null === e ? r.rgb.hsv(t)[2] : e; + if (s = Math.round(s / 50), 0 === s) return 30; + let a = 30 + (Math.round(i / 255) << 2 | Math.round(o / 255) << 1 | Math.round(n / 255)); + return 2 === s && (a += 60), a + }, r.hsv.ansi16 = function(t) { + return r.rgb.ansi16(r.hsv.rgb(t), t[2]) + }, r.rgb.ansi256 = function(t) { + const e = t[0], + n = t[1], + o = t[2]; + if (e === n && n === o) return e < 8 ? 16 : e > 248 ? 231 : Math.round((e - 8) / 247 * 24) + 232; + return 16 + 36 * Math.round(e / 255 * 5) + 6 * Math.round(n / 255 * 5) + Math.round(o / 255 * 5) + }, r.ansi16.rgb = function(t) { + let e = t % 10; + if (0 === e || 7 === e) return t > 50 && (e += 3.5), e = e / 10.5 * 255, [e, e, e]; + const n = .5 * (1 + ~~(t > 50)); + return [(1 & e) * n * 255, (e >> 1 & 1) * n * 255, (e >> 2 & 1) * n * 255] + }, r.ansi256.rgb = function(t) { + if (t >= 232) { + const e = 10 * (t - 232) + 8; + return [e, e, e] + } + let e; + t -= 16; + return [Math.floor(t / 36) / 5 * 255, Math.floor((e = t % 36) / 6) / 5 * 255, e % 6 / 5 * 255] + }, r.rgb.hex = function(t) { + const e = (((255 & Math.round(t[0])) << 16) + ((255 & Math.round(t[1])) << 8) + (255 & Math.round(t[2]))).toString(16).toUpperCase(); + return "000000".substring(e.length) + e + }, r.hex.rgb = function(t) { + const e = t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!e) return [0, 0, 0]; + let n = e[0]; + 3 === e[0].length && (n = n.split("").map((t => t + t)).join("")); + const o = parseInt(n, 16); + return [o >> 16 & 255, o >> 8 & 255, 255 & o] + }, r.rgb.hcg = function(t) { + const e = t[0] / 255, + n = t[1] / 255, + o = t[2] / 255, + i = Math.max(Math.max(e, n), o), + r = Math.min(Math.min(e, n), o), + s = i - r; + let a, l; + return a = s < 1 ? r / (1 - s) : 0, l = s <= 0 ? 0 : i === e ? (n - o) / s % 6 : i === n ? 2 + (o - e) / s : 4 + (e - n) / s, l /= 6, l %= 1, [360 * l, 100 * s, 100 * a] + }, r.hsl.hcg = function(t) { + const e = t[1] / 100, + n = t[2] / 100, + o = n < .5 ? 2 * e * n : 2 * e * (1 - n); + let i = 0; + return o < 1 && (i = (n - .5 * o) / (1 - o)), [t[0], 100 * o, 100 * i] + }, r.hsv.hcg = function(t) { + const e = t[1] / 100, + n = t[2] / 100, + o = e * n; + let i = 0; + return o < 1 && (i = (n - o) / (1 - o)), [t[0], 100 * o, 100 * i] + }, r.hcg.rgb = function(t) { + const e = t[0] / 360, + n = t[1] / 100, + o = t[2] / 100; + if (0 === n) return [255 * o, 255 * o, 255 * o]; + const i = [0, 0, 0], + r = e % 1 * 6, + s = r % 1, + a = 1 - s; + let l = 0; + switch (Math.floor(r)) { + case 0: + i[0] = 1, i[1] = s, i[2] = 0; + break; + case 1: + i[0] = a, i[1] = 1, i[2] = 0; + break; + case 2: + i[0] = 0, i[1] = 1, i[2] = s; + break; + case 3: + i[0] = 0, i[1] = a, i[2] = 1; + break; + case 4: + i[0] = s, i[1] = 0, i[2] = 1; + break; + default: + i[0] = 1, i[1] = 0, i[2] = a + } + return l = (1 - n) * o, [255 * (n * i[0] + l), 255 * (n * i[1] + l), 255 * (n * i[2] + l)] + }, r.hcg.hsv = function(t) { + const e = t[1] / 100, + n = e + t[2] / 100 * (1 - e); + let o = 0; + return n > 0 && (o = e / n), [t[0], 100 * o, 100 * n] + }, r.hcg.hsl = function(t) { + const e = t[1] / 100, + n = t[2] / 100 * (1 - e) + .5 * e; + let o = 0; + return n > 0 && n < .5 ? o = e / (2 * n) : n >= .5 && n < 1 && (o = e / (2 * (1 - n))), [t[0], 100 * o, 100 * n] + }, r.hcg.hwb = function(t) { + const e = t[1] / 100, + n = e + t[2] / 100 * (1 - e); + return [t[0], 100 * (n - e), 100 * (1 - n)] + }, r.hwb.hcg = function(t) { + const e = t[1] / 100, + n = 1 - t[2] / 100, + o = n - e; + let i = 0; + return o < 1 && (i = (n - o) / (1 - o)), [t[0], 100 * o, 100 * i] + }, r.apple.rgb = function(t) { + return [t[0] / 65535 * 255, t[1] / 65535 * 255, t[2] / 65535 * 255] + }, r.rgb.apple = function(t) { + return [t[0] / 255 * 65535, t[1] / 255 * 65535, t[2] / 255 * 65535] + }, r.gray.rgb = function(t) { + return [t[0] / 100 * 255, t[0] / 100 * 255, t[0] / 100 * 255] + }, r.gray.hsl = function(t) { + return [0, 0, t[0]] + }, r.gray.hsv = r.gray.hsl, r.gray.hwb = function(t) { + return [0, 100, t[0]] + }, r.gray.cmyk = function(t) { + return [0, 0, 0, t[0]] + }, r.gray.lab = function(t) { + return [t[0], 0, 0] + }, r.gray.hex = function(t) { + const e = 255 & Math.round(t[0] / 100 * 255), + n = ((e << 16) + (e << 8) + e).toString(16).toUpperCase(); + return "000000".substring(n.length) + n + }, r.rgb.gray = function(t) { + return [(t[0] + t[1] + t[2]) / 3 / 255 * 100] + } + }, + 841: (t, e, n) => { + const o = n(4959), + i = n(9325), + r = {}; + Object.keys(o).forEach((t => { + r[t] = {}, Object.defineProperty(r[t], "channels", { + value: o[t].channels + }), Object.defineProperty(r[t], "labels", { + value: o[t].labels + }); + const e = i(t); + Object.keys(e).forEach((n => { + const o = e[n]; + r[t][n] = function(t) { + const e = function(...e) { + const n = e[0]; + if (null == n) return n; + n.length > 1 && (e = n); + const o = t(e); + if ("object" == typeof o) + for (let t = o.length, e = 0; e < t; e++) o[e] = Math.round(o[e]); + return o + }; + return "conversion" in t && (e.conversion = t.conversion), e + }(o), r[t][n].raw = function(t) { + const e = function(...e) { + const n = e[0]; + return null == n ? n : (n.length > 1 && (e = n), t(e)) + }; + return "conversion" in t && (e.conversion = t.conversion), e + }(o) + })) + })), t.exports = r + }, + 9325: (t, e, n) => { + const o = n(4959); + + function i(t) { + const e = function() { + const t = {}, + e = Object.keys(o); + for (let n = e.length, o = 0; o < n; o++) t[e[o]] = { + distance: -1, + parent: null + }; + return t + }(), + n = [t]; + for (e[t].distance = 0; n.length;) { + const t = n.pop(), + i = Object.keys(o[t]); + for (let o = i.length, r = 0; r < o; r++) { + const o = i[r], + s = e[o]; - 1 === s.distance && (s.distance = e[t].distance + 1, s.parent = t, n.unshift(o)) + } + } + return e + } + + function r(t, e) { + return function(n) { + return e(t(n)) + } + } + + function s(t, e) { + const n = [e[t].parent, t]; + let i = o[e[t].parent][t], + s = e[t].parent; + for (; e[s].parent;) n.unshift(e[s].parent), i = r(o[e[s].parent][s], i), s = e[s].parent; + return i.conversion = n, i + } + t.exports = function(t) { + const e = i(t), + n = {}, + o = Object.keys(e); + for (let t = o.length, i = 0; i < t; i++) { + const t = o[i]; + null !== e[t].parent && (n[t] = s(t, e)) + } + return n + } + }, + 1103: t => { + "use strict"; + t.exports = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + grey: [128, 128, 128], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + rebeccapurple: [102, 51, 153], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] + } + }, + 6299: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-math-form{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:nowrap}@media screen and (max-width:600px){.ck.ck-math-form{flex-wrap:wrap}.ck.ck-math-form .ck-math-view,.ck.ck-math-form .ck-math-view .ck-label,.ck.ck-math-form .ck-math-view .ck-labeled-view{flex-basis:100%}.ck.ck-math-form .ck-button{flex-basis:50%}}.ck-math-tex.ck-placeholder:before{display:none!important}.ck.ck-toolbar-container{z-index:calc(var(--ck-z-modal) + 2)}.ck.ck-math-form{padding:var(--ck-spacing-standard)}.ck.ck-math-form:focus{outline:none}[dir=ltr] .ck.ck-math-form>:not(:first-child),[dir=rtl] .ck.ck-math-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-math-form{padding:0}.ck.ck-math-form .ck-labeled-input{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-math-form .ck-labeled-input .ck-input-text{min-width:0;width:100%}.ck.ck-math-form .ck-label,.ck.ck-math-form .ck-math-view .ck-button,.ck.ck-math-form .ck-math-view .ck.ck-math-preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-math-form>.ck-button{border:0;border-radius:0;border-top:1px solid var(--ck-color-base-border);margin-top:var(--ck-spacing-standard);padding:var(--ck-spacing-standard)}[dir=ltr] .ck.ck-math-form>.ck-button{margin-left:0}[dir=ltr] .ck.ck-math-form>.ck-button:first-of-type{border-right:1px solid var(--ck-color-base-border)}[dir=rtl] .ck.ck-math-form>.ck-button{margin-left:0}[dir=rtl] .ck.ck-math-form>.ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}}", "", { + version: 3, + sources: ["webpack://./../../node_modules/@isaul32/ckeditor5-math/theme/mathform.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-math/mathform.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css"], + names: [], + mappings: "AAAA,iBAEC,sBAAuB,CADvB,YAAa,CAEb,kBAAmB,CACnB,gBAsBD,CAnBC,oCAPD,iBAQE,cAkBF,CATG,wHACC,eACD,CAGD,4BACC,cACD,CACD,CAGD,mCACC,sBACD,CAEA,yBACC,mCACD,CC/BA,iBACI,kCAsEJ,CApEI,uBAEF,YACD,CASC,2FACC,sCACD,CCdD,oCDHD,iBAqBE,SAkDF,CAhDE,mCACC,8DAMD,CAJC,kDACC,WAAY,CACZ,UACD,CAYA,wHACC,8DACD,CAGD,4BAKC,QAAS,CADT,eAAgB,CAEhB,gDAAiD,CAJjD,qCAAsC,CADtC,kCAsBD,CAvBA,sCASE,aAcF,CAZE,oDACC,kDACD,CAbF,sCAiBE,aAMF,CAJE,mDACC,kDACD,CC9DH", + sourcesContent: [".ck.ck-math-form {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tpadding: var(--ck-spacing-standard);\n\n\t@media screen and (max-width: 600px) {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-math-view {\n\t\t\tflex-basis: 100%;\n\n\t\t\t& .ck-labeled-view {\n\t\t\t\tflex-basis: 100%;\n\t\t\t}\n\n\t\t\t& .ck-label {\n\t\t\t\tflex-basis: 100%;\n\t\t\t}\n\t\t}\n\n\t\t& .ck-button {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n.ck-math-tex.ck-placeholder::before {\n\tdisplay: none !important;\n}\n\n.ck.ck-toolbar-container {\n\tz-index: calc(var(--ck-z-modal) + 2);\n}\n", '@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck.ck-math-form {\n padding: var(--ck-spacing-standard);\n\n &:focus {\n\t\t/* https://github.com/ckeditor/ckeditor5-link/issues/90 */\n\t\toutline: none;\n\t}\n\n @mixin ck-dir ltr {\n\t\t& > :not(:first-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-dir rtl {\n\t\t& > :not(:last-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-media-phone {\n\t\tpadding: 0;\n\n\t\t& .ck-labeled-input {\n\t\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-standard) 0;\n\n\t\t\t& .ck-input-text {\n\t\t\t\tmin-width: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n & .ck-label {\n margin: var(--ck-spacing-standard) var(--ck-spacing-standard) 0;\n }\n\n\t\t& .ck-math-view {\n\t\t\t& .ck-button {\n\t\t\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-standard) 0;\n\t\t\t}\n\n\t\t\t& .ck.ck-math-preview {\n\t\t\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-standard) 0;\n\t\t\t}\n\t\t}\n\n\t\t& > .ck-button {\n\t\t\tpadding: var(--ck-spacing-standard);\n\t\t\tmargin-top: var(--ck-spacing-standard);\n\n\t\t\tborder-radius: 0;\n\t\t\tborder: 0;\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tmargin-left: 0;\n\n\t\t\t\t&:first-of-type {\n\t\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-left: 0;\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 8603: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content code{background-color:hsla(0,0%,78%,.3);border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-basic-styles/theme/code.css"], + names: [], + mappings: "AAKA,iBACC,kCAAuC,CAEvC,iBAAkB,CADlB,aAED,CAEA,0CACC,kCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content code {\n\tbackground-color: hsla(0, 0%, 78%, 0.3);\n\tpadding: .15em;\n\tborder-radius: 2px;\n}\n\n.ck.ck-editor__editable .ck-code_selected {\n\tbackground-color: hsla(0, 0%, 78%, 0.5);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3062: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content blockquote{border-left:5px solid #ccc;font-style:italic;margin-left:0;margin-right:0;overflow:hidden;padding-left:1.5em;padding-right:1.5em}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-block-quote/theme/blockquote.css"], + names: [], + mappings: "AAKA,uBAWC,0BAAsC,CADtC,iBAAkB,CAFlB,aAAc,CACd,cAAe,CAPf,eAAgB,CAIhB,kBAAmB,CADnB,mBAOD,CAEA,gCACC,aAAc,CACd,2BACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content blockquote {\n\t/* See #12 */\n\toverflow: hidden;\n\n\t/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */\n\tpadding-right: 1.5em;\n\tpadding-left: 1.5em;\n\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tfont-style: italic;\n\tborder-left: solid 5px hsl(0, 0%, 80%);\n}\n\n.ck-content[dir="rtl"] blockquote {\n\tborder-left: 0;\n\tborder-right: solid 5px hsl(0, 0%, 80%);\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 9932: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-find-result{background:var(--ck-color-highlight-background);color:var(--ck-color-text)}.ck-find-result_selected{background:#ff9633}", "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-find-and-replace/theme/findandreplace.css"], + names: [], + mappings: "AAKA,gBACC,+CAAgD,CAChD,0BACD,CAEA,yBACC,kBACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-find-result {\n\tbackground: var(--ck-color-highlight-background);\n\tcolor: var(--ck-color-text);\n}\n\n.ck-find-result_selected {\n\tbackground: hsl(29, 100%, 60%);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 2822: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-find-and-replace-form{max-width:100%}.ck.ck-find-and-replace-form fieldset{display:flex}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{position:absolute}.ck.ck-find-and-replace-form{width:400px}.ck.ck-find-and-replace-form:focus{outline:none}.ck.ck-find-and-replace-form fieldset{align-content:stretch;align-items:center;border:0;flex-direction:row;flex-wrap:nowrap;margin:0;padding:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset>.ck-button{flex:0 0 auto}[dir=ltr] .ck.ck-find-and-replace-form fieldset>*+*{margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-find-and-replace-form fieldset>*+*{margin-right:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form fieldset .ck-labeled-field-view{flex:1 1 auto}.ck.ck-find-and-replace-form fieldset .ck-labeled-field-view .ck-input{min-width:50px;width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find{align-items:flex-start}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-find{font-weight:700}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-find .ck-button__label{padding-left:var(--ck-spacing-large);padding-right:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-prev>.ck-icon{transform:rotate(90deg)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button-next>.ck-icon{transform:rotate(-90deg)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{top:50%;transform:translateY(-50%)}[dir=ltr] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{left:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-results-counter{color:var(--ck-color-base-border)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace{flex-wrap:wrap;justify-content:flex-end;margin-top:calc(var(--ck-spacing-large)*-1)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view{margin-bottom:var(--ck-spacing-large)}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-options-dropdown{margin-left:0;margin-right:auto}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view,.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-labeled-field-view .ck-input{width:100%}@media screen and (max-width:600px){.ck.ck-find-and-replace-form{width:300px}.ck.ck-find-and-replace-form fieldset{flex-wrap:wrap}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find .ck-labeled-field-view{flex:1 0 auto;margin-bottom:var(--ck-spacing-standard);width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button{text-align:center}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{flex:1 1 auto}[dir=ltr] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__find>.ck-button:first-of-type .ck-button__label{text-align:center;width:100%}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>:not(.ck-labeled-field-view){flex:1 1 auto}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-dropdown:not(.ck-labeled-field-view){flex-grow:0}.ck.ck-find-and-replace-form fieldset.ck-find-and-replace-form__replace>.ck-button:not(.ck-labeled-field-view)>.ck-button__label{text-align:center;width:100%}}", "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-find-and-replace/theme/findandreplaceform.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-find-and-replace/findandreplaceform.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css"], + names: [], + mappings: "AAKA,6BACC,cAUD,CARC,sCACC,YAMD,CAHC,yFACC,iBACD,CCNF,6BACC,WAyGD,CAnGC,mCACC,YACD,CAEA,sCAIC,qBAAsB,CADtB,kBAAmB,CAInB,QAAS,CANT,kBAAmB,CACnB,gBAAiB,CAMjB,QAAS,CAFT,+BAwFD,CApFC,iDACC,aACD,CAGC,oDACC,sCACD,CAIA,oDACC,uCACD,CAGD,6DACC,aAMD,CAJC,uEAEC,cAAe,CADf,UAED,CAID,qEAEC,sBAkCD,CAhCC,qFACC,eAOD,CAJC,uGACC,oCAAqC,CACrC,qCACD,CAGD,8FACC,uBACD,CAEA,8FACC,wBACD,CAEA,yFACC,OAAQ,CACR,0BAWD,CAbA,mGAKE,gCAQF,CAbA,mGASE,+BAIF,CAbA,yFAYC,iCACD,CAID,wEACC,cAAe,CACf,wBAAyB,CACzB,2CAeD,CAbC,+FACC,qCACD,CAEA,6FAEC,aAAc,CADd,iBAED,CAEA,wMAEC,UACD,CCzGF,oCD+GA,6BACC,WAiDD,CA/CC,sCACC,cA6CD,CAzCE,4FACC,aAAc,CAEd,wCAAyC,CADzC,UAED,CAEA,gFACC,iBAkBD,CAhBC,8FACC,aAcD,CAfA,wGAIE,aAWF,CAfA,wGAQE,cAOF,CAJC,gHAEC,iBAAkB,CADlB,UAED,CAMH,qGACC,aAUD,CARC,iHACC,WACD,CAEA,iIAEC,iBAAkB,CADlB,UAED,CC5JH", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-find-and-replace-form {\n\tmax-width: 100%;\n\n\t& fieldset {\n\t\tdisplay: flex;\n\n\t\t/* The find fieldset */\n\t\t&.ck-find-and-replace-form__find .ck-results-counter {\n\t\t\tposition: absolute;\n\t\t}\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck.ck-find-and-replace-form {\n\twidth: 400px;\n\n\t/*\n\t * The
needs tabindex="-1" for proper Esc handling after being clicked\n\t * but the side effect is that this creates a nasty focus outline in some browsers.\n\t */\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t& fieldset {\n\t\tflex-direction: row;\n\t\tflex-wrap: nowrap;\n\t\talign-items: center;\n\t\talign-content: stretch;\n\n\t\tpadding: var(--ck-spacing-large);\n\t\tborder: 0;\n\t\tmargin: 0;\n\n\t\t& > .ck-button {\n\t\t\tflex: 0 0 auto;\n\t\t}\n\n\t\t@mixin ck-dir ltr {\n\t\t\t& > * + * {\n\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\t& > * + * {\n\t\t\t\tmargin-right: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex: 1 1 auto;\n\n\t\t\t& .ck-input {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 50px;\n\t\t\t}\n\t\t}\n\n\t\t/* The find fieldset */\n\t\t&.ck-find-and-replace-form__find {\n\t\t\t/* To display all controls in line when there\'s an error under the input */\n\t\t\talign-items: flex-start;\n\n\t\t\t& > .ck-button-find {\n\t\t\t\tfont-weight: bold;\n\n\t\t\t\t/* Beef the find button up a little. It\'s the main action button in the form */\n\t\t\t\t& .ck-button__label {\n\t\t\t\t\tpadding-left: var(--ck-spacing-large);\n\t\t\t\t\tpadding-right: var(--ck-spacing-large);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& > .ck-button-prev > .ck-icon {\n\t\t\t\ttransform: rotate(90deg);\n\t\t\t}\n\n\t\t\t& > .ck-button-next > .ck-icon {\n\t\t\t\ttransform: rotate(-90deg);\n\t\t\t}\n\n\t\t\t& .ck-results-counter {\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translateY(-50%);\n\n\t\t\t\t@mixin ck-dir ltr {\n\t\t\t\t\tright: var(--ck-spacing-standard);\n\t\t\t\t}\n\n\t\t\t\t@mixin ck-dir rtl {\n\t\t\t\t\tleft: var(--ck-spacing-standard);\n\t\t\t\t}\n\n\t\t\t\tcolor: var(--ck-color-base-border);\n\t\t\t}\n\t\t}\n\n\t\t/* The replace fieldset */\n\t\t&.ck-find-and-replace-form__replace {\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: flex-end;\n\t\t\tmargin-top: calc( -1 * var(--ck-spacing-large) );\n\n\t\t\t& > .ck-labeled-field-view {\n\t\t\t\tmargin-bottom: var(--ck-spacing-large);\n\t\t\t}\n\n\t\t\t& > .ck-options-dropdown {\n\t\t\t\tmargin-right: auto;\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t& > .ck-labeled-field-view,\n\t\t\t& > .ck-labeled-field-view .ck-input {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@mixin ck-media-phone {\n\t.ck.ck-find-and-replace-form {\n\t\twidth: 300px;\n\n\t\t& fieldset {\n\t\t\tflex-wrap: wrap;\n\n\t\t\t/* The find fieldset */\n\t\t\t&.ck-find-and-replace-form__find {\n\t\t\t\t& .ck-labeled-field-view {\n\t\t\t\t\tflex: 1 0 auto;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\tmargin-bottom: var(--ck-spacing-standard);\n\t\t\t\t}\n\n\t\t\t\t& > .ck-button {\n\t\t\t\t\ttext-align: center;\n\n\t\t\t\t\t&:first-of-type {\n\t\t\t\t\t\tflex: 1 1 auto;\n\n\t\t\t\t\t\t@mixin ck-dir ltr {\n\t\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@mixin ck-dir rtl {\n\t\t\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t& .ck-button__label {\n\t\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* The replace fieldset */\n\t\t\t&.ck-find-and-replace-form__replace > :not(.ck-labeled-field-view) {\n\t\t\t\tflex: 1 1 auto;\n\n\t\t\t\t&.ck-dropdown {\n\t\t\t\t\tflex-grow: 0;\n\t\t\t\t}\n\n\t\t\t\t&.ck-button > .ck-button__label {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 1134: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-link_selected span.image-inline{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{border-right:1px solid var(--ck-color-base-text);height:100%;margin-right:-1px;outline:1px solid hsla(0,0%,100%,.5)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-link/link.css"], + names: [], + mappings: "AAMA,sBACC,mDAMD,CAHC,wCACC,yFACD,CAOD,4BACC,8CACD,CAGA,sCAEC,gDAAiD,CADjD,WAAY,CAEZ,iBAAkB,CAClB,oCACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Class added to span element surrounding currently selected link. */\n.ck .ck-link_selected {\n\tbackground: var(--ck-color-link-selected-background);\n\n\t/* Give linked inline images some outline to let the user know they are also part of the link. */\n\t& span.image-inline {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background);\n\t}\n}\n\n/*\n * Classes used by the "fake visual selection" displayed in the content when an input\n * in the link UI has focus (the browser does not render the native selection in this state).\n */\n.ck .ck-fake-link-selection {\n\tbackground: var(--ck-color-link-fake-selection);\n}\n\n/* A collapsed fake visual selection. */\n.ck .ck-fake-link-selection_collapsed {\n\theight: 100%;\n\tborder-right: 1px solid var(--ck-color-base-text);\n\tmargin-right: -1px;\n\toutline: solid 1px hsla(0, 0%, 100%, .5);\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 9376: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{color:var(--ck-color-link-default);cursor:pointer;max-width:var(--ck-input-width);min-width:3em;padding:0 var(--ck-spacing-medium);text-align:center;text-overflow:ellipsis}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{max-width:100%;min-width:0}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview),[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}}", "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-link/theme/linkactions.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-link/linkactions.css"], + names: [], + mappings: "AAOA,oBACC,YAAa,CACb,kBAAmB,CACnB,gBAqBD,CAnBC,8CACC,oBAKD,CAHC,gEACC,eACD,CCXD,oCDCD,oBAcE,cAUF,CARE,8CACC,eACD,CAEA,8DACC,cACD,CCrBD,CCIA,wDACC,cAAe,CACf,eAmCD,CAjCC,0EAEC,kCAAmC,CAEnC,cAAe,CAIf,+BAAgC,CAChC,aAAc,CARd,kCAAmC,CASnC,iBAAkB,CAPlB,sBAYD,CAHC,gFACC,yBACD,CAGD,mPAIC,eACD,CAEA,+DACC,eACD,CAGC,gFACC,yBACD,CAWD,qHACC,sCACD,CDtDD,oCC0DC,wDACC,8DAMD,CAJC,0EAEC,cAAe,CADf,WAED,CAGD,gJAME,aAEF,CDzED", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck.ck-link-actions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\n\t& .ck-link-actions__preview {\n\t\tdisplay: inline-block;\n\n\t\t& .ck-button__label {\n\t\t\toverflow: hidden;\n\t\t}\n\t}\n\n\t@mixin ck-media-phone {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-link-actions__preview {\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t& .ck-button:not(.ck-link-actions__preview) {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_unselectable.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n@import "../mixins/_focus.css";\n@import "../mixins/_shadow.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck.ck-link-actions {\n\t& .ck-button.ck-link-actions__preview {\n\t\tpadding-left: 0;\n\t\tpadding-right: 0;\n\n\t\t& .ck-button__label {\n\t\t\tpadding: 0 var(--ck-spacing-medium);\n\t\t\tcolor: var(--ck-color-link-default);\n\t\t\ttext-overflow: ellipsis;\n\t\t\tcursor: pointer;\n\n\t\t\t/* Match the box model of the link editor form\'s input so the balloon\n\t\t\tdoes not change width when moving between actions and the form. */\n\t\t\tmax-width: var(--ck-input-width);\n\t\t\tmin-width: 3em;\n\t\t\ttext-align: center;\n\n\t\t\t&:hover {\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t&,\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground: none;\n\t\t}\n\n\t\t&:active {\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&:focus {\n\t\t\t& .ck-button__label {\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\t}\n\n\t@mixin ck-dir ltr {\n\t\t& .ck-button:not(:first-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-dir rtl {\n\t\t& .ck-button:not(:last-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-media-phone {\n\t\t& .ck-button.ck-link-actions__preview {\n\t\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-standard) 0;\n\n\t\t\t& .ck-button__label {\n\t\t\t\tmin-width: 0;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t}\n\n\t\t& .ck-button:not(.ck-link-actions__preview) {\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 8117: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form_layout-vertical .ck-button.ck-button-cancel,.ck.ck-link-form_layout-vertical .ck-button.ck-button-save{margin-top:var(--ck-spacing-medium)}.ck.ck-link-form_layout-vertical{min-width:var(--ck-input-width);padding:0}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical>.ck-button{border-radius:0;margin:0;padding:var(--ck-spacing-standard);width:50%}.ck.ck-link-form_layout-vertical>.ck-button:not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-link-form_layout-vertical>.ck-button,[dir=rtl] .ck.ck-link-form_layout-vertical>.ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical>.ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin:var(--ck-spacing-standard) var(--ck-spacing-large)}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{padding:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}", "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-link/theme/linkform.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-link/linkform.css"], + names: [], + mappings: "AAOA,iBACC,YAiBD,CAfC,2BACC,YACD,CCNA,oCDCD,iBAQE,cAUF,CARE,wCACC,eACD,CAEA,4BACC,cACD,CCfD,CDuBD,iCACC,aAYD,CALE,wHAEC,mCACD,CE/BF,iCAEC,+BAAgC,CADhC,SAgDD,CA7CC,wDACC,8EAMD,CAJC,uEACC,WAAY,CACZ,UACD,CAGD,4CAIC,eAAgB,CAFhB,QAAS,CADT,kCAAmC,CAEnC,SAkBD,CAfC,wDACC,gDACD,CARD,4GAeE,aAMF,CAJE,mEACC,kDACD,CAKF,6CACC,yDAUD,CARC,wEACC,SAAU,CACV,UAKD,CAHC,8EACC,eACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck.ck-link-form {\n\tdisplay: flex;\n\n\t& .ck-label {\n\t\tdisplay: none;\n\t}\n\n\t@mixin ck-media-phone {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t& .ck-button {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n/*\n * Style link form differently when manual decorators are available.\n * See: https://github.com/ckeditor/ckeditor5-link/issues/186.\n */\n.ck.ck-link-form_layout-vertical {\n\tdisplay: block;\n\n\t/*\n\t * Whether the form is in the responsive mode or not, if there are decorator buttons\n\t * keep the top margin of action buttons medium.\n\t */\n\t& .ck-button {\n\t\t&.ck-button-save,\n\t\t&.ck-button-cancel {\n\t\t\tmargin-top: var(--ck-spacing-medium);\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n/*\n * Style link form differently when manual decorators are available.\n * See: https://github.com/ckeditor/ckeditor5-link/issues/186.\n */\n.ck.ck-link-form_layout-vertical {\n\tpadding: 0;\n\tmin-width: var(--ck-input-width);\n\n\t& .ck-labeled-field-view {\n\t\tmargin: var(--ck-spacing-large) var(--ck-spacing-large) var(--ck-spacing-small);\n\n\t\t& .ck-input-text {\n\t\t\tmin-width: 0;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t& > .ck-button {\n\t\tpadding: var(--ck-spacing-standard);\n\t\tmargin: 0;\n\t\twidth: 50%;\n\t\tborder-radius: 0;\n\n\t\t&:not(:focus) {\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\t@mixin ck-dir ltr {\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tmargin-left: 0;\n\n\t\t\t&:last-of-type {\n\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Using additional `.ck` class for stronger CSS specificity than `.ck.ck-link-form > :not(:first-child)`. */\n\t& .ck.ck-list {\n\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-large);\n\n\t\t& .ck-button.ck-switchbutton {\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\n\t\t\t&:hover {\n\t\t\t\tbackground: none;\n\t\t\t}\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 3088: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck.ck-editor__editable a span.image-inline:after,.ck.ck-editor__editable figure.image>a:after{display:block;position:absolute}:root{--ck-link-image-indicator-icon-size:20;--ck-link-image-indicator-icon-is-visible:clamp(0px,100% - 50px,1px)}.ck.ck-editor__editable a span.image-inline:after,.ck.ck-editor__editable figure.image>a:after{background-color:rgba(0,0,0,.4);background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzQ4Ljc0OCAwIDAgMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAgMS04LjUwMy01Ljk1NS43NDEuNzQxIDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NGwuMDA2LjAwNHptNS40OTQtNS4zMzVhLjc0OC43NDggMCAwIDEtLjEyLjI3NGwtMS4xNDcgMS42MzlhLjc1Ljc1IDAgMSAxLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwIDAtNi4xNDQtNC4zMDFsLS44NiAxLjIyOWEuNzUuNzUgMCAwIDEtMS4yMjktLjg2bDEuMTQ4LTEuNjRhLjc0OC43NDggMCAwIDEgLjIxNy0uMjA2IDUuMjUxIDUuMjUxIDAgMCAxIDguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMCAxIC4xODQgMS4wNDVsLTMuMTU1IDQuNTA1YS43NS43NSAwIDEgMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMCAxIDEuMDQ1LS4xODR6Ii8+PC9zdmc+");background-position:50%;background-repeat:no-repeat;background-size:14px;border-radius:100%;content:"";height:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size));overflow:hidden;right:min(var(--ck-spacing-medium),6%);top:min(var(--ck-spacing-medium),6%);width:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size))}', "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-link/theme/linkimage.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-link/linkimage.css"], + names: [], + mappings: "AASE,+FACC,aAAc,CACd,iBACD,CCPF,MAEC,sCAAuC,CACvC,oEACD,CAME,+FAUC,+BAAqC,CACrC,83BAA+3B,CAG/3B,uBAA2B,CAD3B,2BAA4B,CAD5B,oBAAqB,CAGrB,kBAAmB,CAdnB,UAAW,CAsBX,oGAAuG,CAFvG,eAAgB,CAbhB,sCAAwC,CADxC,oCAAsC,CAetC,mGAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t/* Linked image indicator */\n\t& figure.image > a,\n\t& a span.image-inline {\n\t\t&::after {\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t}\n\t}\n}\n\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/* Match the icon size with the upload indicator brought by the image upload feature. */\n\t--ck-link-image-indicator-icon-size: 20;\n\t--ck-link-image-indicator-icon-is-visible: clamp(0px, 100% - 50px, 1px);\n}\n\n.ck.ck-editor__editable {\n\t/* Linked image indicator */\n\t& figure.image > a,\n\t& a span.image-inline {\n\t\t&::after {\n\t\t\tcontent: "";\n\n\t\t\t/*\n\t\t\t * Smaller images should have the icon closer to the border.\n\t\t\t * Match the icon position with the upload indicator brought by the image upload feature.\n\t\t\t */\n\t\t\ttop: min(var(--ck-spacing-medium), 6%);\n\t\t\tright: min(var(--ck-spacing-medium), 6%);\n\n\t\t\tbackground-color: hsla(0, 0%, 0%, .4);\n\t\t\tbackground-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzQ4Ljc0OCAwIDAgMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAgMS04LjUwMy01Ljk1NS43NDEuNzQxIDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NGwuMDA2LjAwNHptNS40OTQtNS4zMzVhLjc0OC43NDggMCAwIDEtLjEyLjI3NGwtMS4xNDcgMS42MzlhLjc1Ljc1IDAgMSAxLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwIDAtNi4xNDQtNC4zMDFsLS44NiAxLjIyOWEuNzUuNzUgMCAwIDEtMS4yMjktLjg2bDEuMTQ4LTEuNjRhLjc0OC43NDggMCAwIDEgLjIxNy0uMjA2IDUuMjUxIDUuMjUxIDAgMCAxIDguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMCAxIC4xODQgMS4wNDVsLTMuMTU1IDQuNTA1YS43NS43NSAwIDEgMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMCAxIDEuMDQ1LS4xODR6Ii8+PC9zdmc+");\n\t\t\tbackground-size: 14px;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tborder-radius: 100%;\n\n\t\t\t/*\n\t\t\t* Use CSS math to simulate container queries.\n\t\t\t* https://css-tricks.com/the-raven-technique-one-step-closer-to-container-queries/#what-about-showing-and-hiding-things\n\t\t\t*/\n\t\t\toverflow: hidden;\n\t\t\twidth: calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));\n\t\t\theight: calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));\n\t\t}\n\t}\n}\n\n'], + sourceRoot: "" + }]); + const a = s + }, + 5023: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-mention-background:rgba(153,0,48,.1);--ck-color-mention-text:#990030}.ck-content .mention{background:var(--ck-color-mention-background);color:var(--ck-color-mention-text)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-mention/mention.css"], + names: [], + mappings: "AAKA,MACC,+CAAwD,CACxD,+BACD,CAEA,qBACC,6CAA8C,CAC9C,kCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-mention-background: hsla(341, 100%, 30%, 0.1);\n\t--ck-color-mention-text: hsl(341, 100%, 30%);\n}\n\n.ck-content .mention {\n\tbackground: var(--ck-color-mention-background);\n\tcolor: var(--ck-color-mention-text);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7640: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-mention-list-max-height:300px}.ck.ck-mentions{max-height:var(--ck-mention-list-max-height);overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.ck.ck-mentions>.ck-list__item{flex-shrink:0;overflow:hidden}", "", { + version: 3, + sources: ["webpack://./node_modules/@ckeditor/ckeditor5-mention/theme/mentionui.css"], + names: [], + mappings: "AAKA,MACC,kCACD,CAEA,gBACC,4CAA6C,CAM7C,iBAAkB,CAJlB,eAAgB,CAMhB,2BAQD,CAJC,+BAEC,aAAc,CADd,eAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-mention-list-max-height: 300px;\n}\n\n.ck.ck-mentions {\n\tmax-height: var(--ck-mention-list-max-height);\n\n\toverflow-y: auto;\n\n\t/* Prevent unnecessary horizontal scrollbar in Safari\n\thttps://github.com/ckeditor/ckeditor5-mention/issues/41 */\n\toverflow-x: hidden;\n\n\toverscroll-behavior: contain;\n\n\t/* Prevent unnecessary vertical scrollbar in Safari\n\thttps://github.com/ckeditor/ckeditor5-mention/issues/41 */\n\t& > .ck-list__item {\n\t\toverflow: hidden;\n\t\tflex-shrink: 0;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7657: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-block-toolbar-button{transform:translateX(calc(var(--ck-spacing-large)*-1))}", "", { + version: 3, + sources: ["webpack://./theme/theme.css"], + names: [], + mappings: "AAMA,4BACC,sDACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Give the block toolbar button some space, moving it a few pixels away from the editable area. */\n.ck.ck-block-toolbar-button {\n\ttransform: translateX( calc(-1 * var(--ck-spacing-large)) );\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 903: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{display:inline;pointer-events:none;position:relative}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{position:absolute;width:0}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}.ck.ck-clipboard-drop-target-line{pointer-events:none;position:absolute}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);bottom:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);margin-left:-1px;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{border-color:var(--ck-clipboard-drop-target-color) transparent transparent transparent;border-style:solid;border-width:calc(var(--ck-clipboard-drop-target-dot-height)) calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0 calc(var(--ck-clipboard-drop-target-dot-width)*.5);content:"";display:block;height:0;left:50%;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);transform:translateX(-50%);width:0}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{zoom:.6;outline:none!important}.ck.ck-clipboard-drop-target-line{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);height:0;margin-top:-1px}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-clipboard/theme/clipboard.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-clipboard/clipboard.css"], + names: [], + mappings: "AASC,8DACC,cAAe,CAEf,mBAAoB,CADpB,iBAOD,CAJC,mEACC,iBAAkB,CAClB,OACD,CAWA,qJACC,YACD,CAIF,kCAEC,mBAAoB,CADpB,iBAED,CChCA,MACC,yCAA0C,CAC1C,yCAA0C,CAC1C,6DACD,CAOE,mEAIC,gDAAiD,CADjD,sDAAuD,CAFvD,2DAA8D,CAI9D,gBAAiB,CAHjB,wDAqBD,CAfC,yEAWC,sFAAuF,CAEvF,kBAAmB,CADnB,qKAA0K,CAX1K,UAAW,CAIX,aAAc,CAFd,QAAS,CAIT,QAAS,CADT,iBAAkB,CAElB,wDAA2D,CAE3D,0BAA2B,CAR3B,OAYD,CAOF,kEACC,gGACD,CAKA,gDACC,OAAS,CACT,sBACD,CAGD,kCAGC,gDAAiD,CADjD,sDAAuD,CADvD,QAAS,CAGT,eACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\t& .ck.ck-clipboard-drop-target-position {\n\t\tdisplay: inline;\n\t\tposition: relative;\n\t\tpointer-events: none;\n\n\t\t& span {\n\t\t\tposition: absolute;\n\t\t\twidth: 0;\n\t\t}\n\t}\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n\t& .ck-widget:-webkit-drag {\n\t\t& > .ck-widget__selection-handle {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t& > .ck-widget__type-around {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.ck.ck-clipboard-drop-target-line {\n\tposition: absolute;\n\tpointer-events: none;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-clipboard-drop-target-dot-width: 12px;\n\t--ck-clipboard-drop-target-dot-height: 8px;\n\t--ck-clipboard-drop-target-color: var(--ck-color-focus-border)\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\t& .ck.ck-clipboard-drop-target-position {\n\t\t& span {\n\t\t\tbottom: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\t\t\tbackground: var(--ck-clipboard-drop-target-color);\n\t\t\tmargin-left: -1px;\n\n\t\t\t/* The triangle above the marker */\n\t\t\t&::after {\n\t\t\t\tcontent: "";\n\t\t\t\twidth: 0;\n\t\t\t\theight: 0;\n\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: calc(var(--ck-clipboard-drop-target-dot-height) * -.5);\n\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\tborder-color: var(--ck-clipboard-drop-target-color) transparent transparent transparent;\n\t\t\t\tborder-width: calc(var(--ck-clipboard-drop-target-dot-height)) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width));\n\t\t\t\tborder-style: solid;\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Styles of the widget that it a drop target.\n\t */\n\t& .ck-widget.ck-clipboard-drop-target-range {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color) !important;\n\t}\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n\t& .ck-widget:-webkit-drag {\n\t\tzoom: 0.6;\n\t\toutline: none !important;\n\t}\n}\n\n.ck.ck-clipboard-drop-target-line {\n\theight: 0;\n\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\tbackground: var(--ck-clipboard-drop-target-color);\n\tmargin-top: -1px;\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 8343: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content pre{background:hsla(0,0%,78%,.3);border:1px solid #c4c4c4;border-radius:2px;color:#353535;direction:ltr;font-style:normal;min-width:200px;padding:1em;tab-size:4;text-align:left;white-space:pre-wrap}.ck-content pre code{background:unset;border-radius:0;padding:0}.ck.ck-editor__editable pre{position:relative}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);position:absolute}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{background:var(--ck-color-code-block-label-background);color:#fff;font-family:var(--ck-font-face);font-size:10px;line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);right:10px;top:-1px;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow-x:hidden;overflow-y:auto}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-code-block/theme/codeblock.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-code-block/codeblock.css"], + names: [], + mappings: "AAKA,gBAGC,4BAAiC,CACjC,wBAAiC,CACjC,iBAAkB,CAHlB,aAAwB,CAOxB,aAAc,CAMd,iBAAkB,CAGlB,eAAgB,CAjBhB,WAAY,CAUZ,UAAW,CAHX,eAAgB,CAIhB,oBAaD,CALC,qBACC,gBAAiB,CAEjB,eAAgB,CADhB,SAED,CAGD,4BACC,iBAMD,CAJC,iDACC,2BAA4B,CAC5B,iBACD,CCjCD,MACC,8CACD,CAEA,iDAGC,sDAAuD,CAMvD,UAAuB,CAHvB,+BAAgC,CADhC,cAAe,CAEf,gBAAiB,CACjB,uDAAwD,CANxD,UAAW,CADX,QAAS,CAST,kBACD,CAEA,+CAEC,gBAAiB,CAEjB,iBAAkB,CADlB,eAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content pre {\n\tpadding: 1em;\n\tcolor: hsl(0, 0%, 20.8%);\n\tbackground: hsla(0, 0%, 78%, 0.3);\n\tborder: 1px solid hsl(0, 0%, 77%);\n\tborder-radius: 2px;\n\n\t/* Code block are language direction–agnostic. */\n\ttext-align: left;\n\tdirection: ltr;\n\n\ttab-size: 4;\n\twhite-space: pre-wrap;\n\n\t/* Don't inherit the style, e.g. when in a block quote. */\n\tfont-style: normal;\n\n\t/* Don't let the code be squashed e.g. when in a table cell. */\n\tmin-width: 200px;\n\n\t& code {\n\t\tbackground: unset;\n\t\tpadding: 0;\n\t\tborder-radius: 0;\n\t}\n}\n\n.ck.ck-editor__editable pre {\n\tposition: relative;\n\n\t&[data-language]::after {\n\t\tcontent: attr(data-language);\n\t\tposition: absolute;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-code-block-label-background: hsl(0, 0%, 46%);\n}\n\n.ck.ck-editor__editable pre[data-language]::after {\n\ttop: -1px;\n\tright: 10px;\n\tbackground: var(--ck-color-code-block-label-background);\n\n\tfont-size: 10px;\n\tfont-family: var(--ck-font-face);\n\tline-height: 16px;\n\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-medium);\n\tcolor: hsl(0, 0%, 100%);\n\twhite-space: nowrap;\n}\n\n.ck.ck-code-block-dropdown .ck-dropdown__panel {\n\t/* There could be dozens of languages available. Use scroll to prevent a 10e6px dropdown. */\n\tmax-height: 250px;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4717: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-placeholder,.ck.ck-placeholder{position:relative}.ck .ck-placeholder:before,.ck.ck-placeholder:before{content:attr(data-placeholder);left:0;pointer-events:none;position:absolute;right:0}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-reset_all .ck-placeholder{position:relative}.ck .ck-placeholder:before,.ck.ck-placeholder:before{color:var(--ck-color-engine-placeholder-text);cursor:text}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-engine/theme/placeholder.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-engine/placeholder.css"], + names: [], + mappings: "AAMA,uCAEC,iBAWD,CATC,qDAIC,8BAA+B,CAF/B,MAAO,CAKP,mBAAoB,CANpB,iBAAkB,CAElB,OAKD,CAKA,wCACC,YACD,CAQD,iCACC,iBACD,CC5BC,qDAEC,6CAA8C,CAD9C,WAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* See ckeditor/ckeditor5#936. */\n.ck.ck-placeholder,\n.ck .ck-placeholder {\n\tposition: relative;\n\n\t&::before {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tcontent: attr(data-placeholder);\n\n\t\t/* See ckeditor/ckeditor5#469. */\n\t\tpointer-events: none;\n\t}\n}\n\n/* See ckeditor/ckeditor5#1987. */\n.ck.ck-read-only .ck-placeholder {\n\t&::before {\n\t\tdisplay: none;\n\t}\n}\n\n/*\n * Rules for the `ck-placeholder` are loaded before the rules for `ck-reset_all` in the base CKEditor 5 DLL build.\n * This fix overwrites the incorrectly set `position: static` from `ck-reset_all`.\n * See https://github.com/ckeditor/ckeditor5/issues/11418.\n */\n.ck.ck-reset_all .ck-placeholder {\n\tposition: relative;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* See ckeditor/ckeditor5#936. */\n.ck.ck-placeholder, .ck .ck-placeholder {\n\t&::before {\n\t\tcursor: text;\n\t\tcolor: var(--ck-color-engine-placeholder-text);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 9315: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-editor__editable span[data-ck-unsafe-element]{display:none}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-engine/theme/renderer.css"], + names: [], + mappings: "AAMA,qDACC,YACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Elements marked by the Renderer as hidden should be invisible in the editor. */\n.ck.ck-editor__editable span[data-ck-unsafe-element] {\n\tdisplay: none;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 1896: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-button.ck-color-table__color-picker,.ck .ck-button.ck-color-table__remove-color{align-items:center;display:flex;width:100%}[dir=rtl] .ck .ck-button.ck-color-table__color-picker,[dir=rtl] .ck .ck-button.ck-color-table__remove-color{justify-content:flex-start}.ck .ck-button.ck-color-table__color-picker{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard)}.ck .ck-button.ck-color-table__color-picker:not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__color-picker .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__color-picker .ck.ck-icon{margin-left:var(--ck-spacing-standard)}label.ck.ck-color-grid__label{font-weight:unset}.ck.ck-color-picker{padding:8px}.ck.ck-color-picker .hex-color-picker{height:100px;margin:0 0 var(--ck-spacing-large) 0}.ck.ck-color-picker .hex-color-picker::part(saturation){border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0}.ck.ck-color-picker .hex-color-picker::part(hue){border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius)}.ck.ck-color-picker .hex-color-picker::part(hue-pointer),.ck.ck-color-picker .hex-color-picker::part(saturation-pointer){height:15px;width:15px}.ck.ck-color-table_action-bar{display:flex;flex-direction:row;justify-content:space-around;padding:0 8px 8px}.ck.ck-color-table_action-bar .ck-button-cancel,.ck.ck-color-table_action-bar .ck-button-save{flex:1}.ck .ck-button.ck-color-table__remove-color{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard)}.ck .ck-button.ck-color-table__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-base-border)}[dir=ltr] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck .ck-button.ck-color-table__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-font/theme/fontcolor.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-font/fontcolor.css"], + names: [], + mappings: "AAOA,wFAGC,kBAAmB,CADnB,YAAa,CAEb,UAKD,CATA,4GAOE,0BAEF,CAEA,4CAEC,2BAA4B,CAC5B,4BAA6B,CAF7B,qEAiBD,CAbC,wDACC,gDACD,CAEA,kEAEE,uCAMF,CARA,kEAME,sCAEF,CAGD,8BACC,iBACD,CAEA,oBACC,WAmBD,CAjBC,sCACC,YAAa,CACb,oCAcD,CAZC,wDACC,iEACD,CACA,iDACC,iEACD,CAEA,yHAGC,WAAY,CADZ,UAED,CAIF,8BACC,YAAa,CACb,kBAAmB,CACnB,4BAA6B,CAC7B,iBAMD,CAJC,8FAEC,MACD,CClED,4CAEC,2BAA4B,CAC5B,4BAA6B,CAF7B,qEAiBD,CAbC,wDACC,mDACD,CAEA,kEAEE,uCAMF,CARA,kEAME,sCAEF", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck .ck-button.ck-color-table__remove-color,\n.ck .ck-button.ck-color-table__color-picker {\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 100%;\n\n\t@mixin ck-dir rtl {\n\t\tjustify-content: flex-start;\n\t}\n}\n\n.ck .ck-button.ck-color-table__color-picker {\n\tpadding: calc(var(--ck-spacing-standard) / 2 ) var(--ck-spacing-standard);\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n\n\t&:not(:focus) {\n\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t}\n\n\t& .ck.ck-icon {\n\t\t@mixin ck-dir ltr {\n\t\t\tmargin-right: var(--ck-spacing-standard);\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n}\n\nlabel.ck.ck-color-grid__label {\n\tfont-weight: unset;\n}\n\n.ck.ck-color-picker {\n\tpadding: 8px;\n\n\t& .hex-color-picker {\n\t\theight: 100px;\n\t\tmargin: 0 0 var(--ck-spacing-large) 0;\n\n\t\t&::part(saturation) {\n\t\t\tborder-radius: var(--ck-border-radius) var(--ck-border-radius) 0 0;\n\t\t}\n\t\t&::part(hue) {\n\t\t\tborder-radius: 0 0 var(--ck-border-radius) var(--ck-border-radius);\n\t\t}\n\n\t\t&::part(saturation-pointer),\n\t\t&::part(hue-pointer) {\n\t\t\twidth: 15px;\n\t\t\theight: 15px;\n\t\t}\n\t}\n}\n\n.ck.ck-color-table_action-bar {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: space-around;\n\tpadding: 0 8px 8px;\n\n\t& .ck-button-save,\n\t& .ck-button-cancel {\n\t\tflex: 1\n\t}\n}\n', '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck .ck-button.ck-color-table__remove-color {\n\tpadding: calc(var(--ck-spacing-standard) / 2 ) var(--ck-spacing-standard);\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n\n\t&:not(:focus) {\n\t\tborder-bottom: 1px solid var(--ck-color-base-border);\n\t}\n\n\t& .ck.ck-icon {\n\t\t@mixin ck-dir ltr {\n\t\t\tmargin-right: var(--ck-spacing-standard);\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n}\n\n'], + sourceRoot: "" + }]); + const a = s + }, + 6007: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content .text-tiny{font-size:.7em}.ck-content .text-small{font-size:.85em}.ck-content .text-big{font-size:1.4em}.ck-content .text-huge{font-size:1.8em}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-font/theme/fontsize.css"], + names: [], + mappings: "AAUC,uBACC,cACD,CAEA,wBACC,eACD,CAEA,sBACC,eACD,CAEA,uBACC,eACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* The values should be synchronized with the "FONT_SIZE_PRESET_UNITS" object in the "/src/fontsize/utils.js" file. */\n\n/* Styles should be prefixed with the `.ck-content` class.\nSee https://github.com/ckeditor/ckeditor5/issues/6636 */\n.ck-content {\n\t& .text-tiny {\n\t\tfont-size: .7em;\n\t}\n\n\t& .text-small {\n\t\tfont-size: .85em;\n\t}\n\n\t& .text-big {\n\t\tfont-size: 1.4em;\n\t}\n\n\t& .text-huge {\n\t\tfont-size: 1.8em;\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 8733: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-heading/theme/heading.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-heading/heading.css"], + names: [], + mappings: "AAKA,wBACC,cACD,CAEA,wBACC,cACD,CAEA,wBACC,cACD,CAEA,+BACC,eACD,CCZC,2EACC,SACD,CAEA,uEACC,cACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-heading_heading1 {\n\tfont-size: 20px;\n}\n\n.ck.ck-heading_heading2 {\n\tfont-size: 17px;\n}\n\n.ck.ck-heading_heading3 {\n\tfont-size: 14px;\n}\n\n.ck[class*="ck-heading_heading"] {\n\tfont-weight: bold;\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Resize dropdown's button label. */\n.ck.ck-dropdown.ck-heading-dropdown {\n\t& .ck-dropdown__button .ck-button__label {\n\t\twidth: 8em;\n\t}\n\n\t& .ck-dropdown__panel .ck-list__item {\n\t\tmin-width: 18em;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 2974: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{background:#dedede;border:0;height:4px;margin:15px 0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-horizontal-line/theme/horizontalline.css"], + names: [], + mappings: "AAMA,yCAEC,iBACD,CAEA,eAGC,kBAA2B,CAC3B,QAAS,CAFT,UAAW,CADX,aAID", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n\n.ck-editor__editable .ck-horizontal-line {\n\t/* Necessary to render properly next to floated objects, e.g. side image case. */\n\tdisplay: flow-root;\n}\n\n.ck-content hr {\n\tmargin: 15px 0;\n\theight: 4px;\n\tbackground: hsl(0, 0%, 87%);\n\tborder: 0;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3508: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content .image{clear:both;display:table;margin:.9em auto;min-width:50px;text-align:center}.ck-content .image img{display:block;margin:0 auto;max-width:100%;min-width:100%}.ck-content .image-inline{align-items:flex-start;display:inline-flex;max-width:100%}.ck-content .image-inline picture{display:flex}.ck-content .image-inline img,.ck-content .image-inline picture{flex-grow:1;flex-shrink:1;max-width:100%}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{overflow:hidden;padding-left:inherit;padding-right:inherit;text-overflow:ellipsis;white-space:nowrap}.ck.ck-editor__editable .image-inline.ck-widget_selected,.ck.ck-editor__editable .image.ck-widget_selected{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable td .image-inline img,.ck.ck-editor__editable th .image-inline img{max-width:none}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/image.css"], + names: [], + mappings: "AAMC,mBAEC,UAAW,CADX,aAAc,CAOd,gBAAkB,CAGlB,cAAe,CARf,iBAuBD,CAbC,uBAEC,aAAc,CAGd,aAAc,CAGd,cAAe,CAGf,cACD,CAGD,0BAYC,sBAAuB,CANvB,mBAAoB,CAGpB,cAoBD,CAdC,kCACC,YACD,CAGA,gEAGC,WAAY,CACZ,aAAc,CAGd,cACD,CAUD,gEASC,eAAgB,CARhB,oBAAqB,CACrB,qBAAsB,CAQtB,sBAAuB,CAFvB,kBAGD,CAWA,2GACC,SAUD,CAHC,qEACC,YACD,CAOA,0FACC,cACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content {\n\t& .image {\n\t\tdisplay: table;\n\t\tclear: both;\n\t\ttext-align: center;\n\n\t\t/* Make sure there is some space between the content and the image. Center image by default. */\n\t\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\t \tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\t\tmargin: 0.9em auto;\n\n\t\t/* Make sure the caption will be displayed properly (See: https://github.com/ckeditor/ckeditor5/issues/1870). */\n\t\tmin-width: 50px;\n\n\t\t& img {\n\t\t\t/* Prevent unnecessary margins caused by line-height (see #44). */\n\t\t\tdisplay: block;\n\n\t\t\t/* Center the image if its width is smaller than the content\'s width. */\n\t\t\tmargin: 0 auto;\n\n\t\t\t/* Make sure the image never exceeds the size of the parent container (ckeditor/ckeditor5-ui#67). */\n\t\t\tmax-width: 100%;\n\n\t\t\t/* Make sure the image is never smaller than the parent container (See: https://github.com/ckeditor/ckeditor5/issues/9300). */\n\t\t\tmin-width: 100%\n\t\t}\n\t}\n\n\t& .image-inline {\n\t\t/*\n\t\t * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).\n\t\t * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root.\n\t\t * This strange behavior does not happen with inline-flex.\n\t\t */\n\t\tdisplay: inline-flex;\n\n\t\t/* While being resized, don\'t allow the image to exceed the width of the editing root. */\n\t\tmax-width: 100%;\n\n\t\t/* This is required by Safari to resize images in a sensible way. Without this, the browser breaks the ratio. */\n\t\talign-items: flex-start;\n\n\t\t/* When the picture is present it must act as a flex container to let the img resize properly */\n\t\t& picture {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t/* When the picture is present, it must act like a resizable img. */\n\t\t& picture,\n\t\t& img {\n\t\t\t/* This is necessary for the img to span the entire .image-inline wrapper and to resize properly. */\n\t\t\tflex-grow: 1;\n\t\t\tflex-shrink: 1;\n\n\t\t\t/* Prevents overflowing the editing root boundaries when an inline image is very wide. */\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Inhertit the content styles padding of the
in case the integration overrides `text-align: center`\n\t * of `.image` (e.g. to the left/right). This ensures the placeholder stays at the padding just like the native\n\t * caret does, and not at the edge of
.\n\t */\n\t& .image > figcaption.ck-placeholder::before {\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * Make sure the image caption placeholder doesn\'t overflow the placeholder area.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9162.\n\t\t */\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\n\t/*\n\t * Make sure the selected inline image always stays on top of its siblings.\n\t * See https://github.com/ckeditor/ckeditor5/issues/9108.\n\t */\n\t& .image.ck-widget_selected {\n\t\tz-index: 1;\n\t}\n\n\t& .image-inline.ck-widget_selected {\n\t\tz-index: 1;\n\n\t\t/*\n\t\t * Make sure the native browser selection style is not displayed.\n\t\t * Inline image widgets have their own styles for the selected state and\n\t\t * leaving this up to the browser is asking for a visual collision.\n\t\t */\n\t\t& ::selection {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t/* The inline image nested in the table should have its original size if not resized.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9117. */\n\t& td,\n\t& th {\n\t\t& .image-inline img {\n\t\t\tmax-width: none;\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 2640: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-image-caption-background:#f7f7f7;--ck-color-image-caption-text:#333;--ck-color-image-caption-highligted-background:#fd0}.ck-content .image>figcaption{background-color:var(--ck-color-image-caption-background);caption-side:bottom;color:var(--ck-color-image-caption-text);display:table-caption;font-size:.75em;outline-offset:-1px;padding:.6em;word-break:break-word}.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:ck-image-caption-highlight .6s ease-out}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highligted-background)}to{background-color:var(--ck-color-image-caption-background)}}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imagecaption.css"], + names: [], + mappings: "AAKA,MACC,2CAAoD,CACpD,kCAA8C,CAC9C,mDACD,CAGA,8BAKC,yDAA0D,CAH1D,mBAAoB,CAEpB,wCAAyC,CAHzC,qBAAsB,CAMtB,eAAgB,CAChB,mBAAoB,CAFpB,YAAa,CAHb,qBAMD,CAGA,qEACC,iDACD,CAEA,sCACC,GACC,oEACD,CAEA,GACC,yDACD,CACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-image-caption-background: hsl(0, 0%, 97%);\n\t--ck-color-image-caption-text: hsl(0, 0%, 20%);\n\t--ck-color-image-caption-highligted-background: hsl(52deg 100% 50%);\n}\n\n/* Content styles */\n.ck-content .image > figcaption {\n\tdisplay: table-caption;\n\tcaption-side: bottom;\n\tword-break: break-word;\n\tcolor: var(--ck-color-image-caption-text);\n\tbackground-color: var(--ck-color-image-caption-background);\n\tpadding: .6em;\n\tfont-size: .75em;\n\toutline-offset: -1px;\n}\n\n/* Editing styles */\n.ck.ck-editor__editable .image > figcaption.image__caption_highlighted {\n\tanimation: ck-image-caption-highlight .6s ease-out;\n}\n\n@keyframes ck-image-caption-highlight {\n\t0% {\n\t\tbackground-color: var(--ck-color-image-caption-highligted-background);\n\t}\n\n\t100% {\n\t\tbackground-color: var(--ck-color-image-caption-background);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3535: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-image-insert__panel{padding:var(--ck-spacing-large)}.ck.ck-image-insert__ck-finder-button{border:1px solid #ccc;border-radius:var(--ck-border-radius);display:block;margin:var(--ck-spacing-standard) auto;width:100%}.ck.ck-splitbutton>.ck-file-dialog-button.ck-button{border:none;margin:0;padding:0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageinsert.css"], + names: [], + mappings: "AAKA,2BACC,+BACD,CAEA,sCAIC,qBAAiC,CACjC,qCAAsC,CAJtC,aAAc,CAEd,sCAAuC,CADvC,UAID,CAGA,oDAGC,WAAY,CADZ,QAAS,CADT,SAGD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-image-insert__panel {\n\tpadding: var(--ck-spacing-large);\n}\n\n.ck.ck-image-insert__ck-finder-button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin: var(--ck-spacing-standard) auto;\n\tborder: 1px solid hsl(0, 0%, 80%);\n\tborder-radius: var(--ck-border-radius);\n}\n\n/* https://github.com/ckeditor/ckeditor5/issues/7986 */\n.ck.ck-splitbutton > .ck-file-dialog-button.ck-button {\n\tpadding: 0;\n\tmargin: 0;\n\tborder: none;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 1568: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-image-insert-form:focus{outline:none}.ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-image-insert-form__action-row{margin-top:var(--ck-spacing-standard)}.ck.ck-form__row.ck-image-insert-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-image-insert-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row.ck-image-insert-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageinsertformrowview.css"], + names: [], + mappings: "AAMC,+BAEC,YACD,CAGD,iBACC,YAAa,CACb,kBAAmB,CACnB,gBAAiB,CACjB,6BAmBD,CAhBC,iCACC,WACD,CAEA,kDACC,qCAUD,CARC,sIAEC,sBACD,CAEA,+EACC,0BACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-image-insert-form {\n\t&:focus {\n\t\t/* See: https://github.com/ckeditor/ckeditor5/issues/4773 */\n\t\toutline: none;\n\t}\n}\n\n.ck.ck-form__row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-between;\n\n\t/* Ignore labels that work as fieldset legends */\n\t& > *:not(.ck-label) {\n\t\tflex-grow: 1;\n\t}\n\n\t&.ck-image-insert-form__action-row {\n\t\tmargin-top: var(--ck-spacing-standard);\n\n\t\t& .ck-button-save,\n\t\t& .ck-button-cancel {\n\t\t\tjustify-content: center;\n\t\t}\n\n\t\t& .ck-button .ck-button__label {\n\t\t\tcolor: var(--ck-color-text);\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6270: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content .image.image_resized{box-sizing:border-box;display:block;max-width:100%}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}.ck.ck-editor__editable td .image-inline.image_resized img,.ck.ck-editor__editable th .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageresize.css"], + names: [], + mappings: "AAKA,iCAQC,qBAAsB,CADtB,aAAc,CANd,cAkBD,CATC,qCAEC,UACD,CAEA,4CAEC,aACD,CAQC,sHACC,cACD,CAIF,oFACC,uCACD,CAEA,oFACC,sCACD,CAEA,oEACC,SACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content .image.image_resized {\n\tmax-width: 100%;\n\t/*\n\tThe `
` element for resized images must not use `display:table` as browsers do not support `max-width` for it well.\n\tSee https://stackoverflow.com/questions/4019604/chrome-safari-ignoring-max-width-in-table/14420691#14420691 for more.\n\tFortunately, since we control the width, there is no risk that the image will look bad.\n\t*/\n\tdisplay: block;\n\tbox-sizing: border-box;\n\n\t& img {\n\t\t/* For resized images it is the `
` element that determines the image width. */\n\t\twidth: 100%;\n\t}\n\n\t& > figcaption {\n\t\t/* The `
` element uses `display:block`, so `
` also has to. */\n\t\tdisplay: block;\n\t}\n}\n\n.ck.ck-editor__editable {\n\t/* The resized inline image nested in the table should respect its parent size.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9117. */\n\t& td,\n\t& th {\n\t\t& .image-inline.image_resized img {\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n[dir="ltr"] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon {\n\tmargin-right: var(--ck-spacing-standard);\n}\n\n[dir="rtl"] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon {\n\tmargin-left: var(--ck-spacing-standard);\n}\n\n.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label {\n\twidth: 4em;\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 5083: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-image-style-spacing:1.5em;--ck-inline-image-style-spacing:calc(var(--ck-image-style-spacing)/2)}.ck-content .image-style-block-align-left,.ck-content .image-style-block-align-right{max-width:calc(100% - var(--ck-image-style-spacing))}.ck-content .image-style-align-left,.ck-content .image-style-align-right{clear:none}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing);max-width:50%}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-block-align-right{margin-left:auto;margin-right:0}.ck-content .image-style-block-align-left{margin-left:0;margin-right:auto}.ck-content p+.image-style-align-left,.ck-content p+.image-style-align-right,.ck-content p+.image-style-side{margin-top:0}.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right{margin-bottom:var(--ck-inline-image-style-spacing);margin-top:var(--ck-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-left{margin-right:var(--ck-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-right{margin-left:var(--ck-inline-image-style-spacing)}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-background)}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__action:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__action:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover):after{display:none}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-hover-background)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imagestyle.css"], + names: [], + mappings: "AAKA,MACC,8BAA+B,CAC/B,qEACD,CAMC,qFAEC,oDACD,CAIA,yEAEC,UACD,CAEA,8BACC,WAAY,CACZ,yCAA0C,CAC1C,aACD,CAEA,oCACC,UAAW,CACX,0CACD,CAEA,sCACC,gBAAiB,CACjB,iBACD,CAEA,qCACC,WAAY,CACZ,yCACD,CAEA,2CAEC,gBAAiB,CADjB,cAED,CAEA,0CACC,aAAc,CACd,iBACD,CAGA,6GAGC,YACD,CAGC,mGAGC,kDAAmD,CADnD,+CAED,CAEA,iDACC,iDACD,CAEA,kDACC,gDACD,CAUC,0lBAGC,qDAKD,CAHC,8nBACC,YACD,CAKD,oVAGC,2DACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-image-style-spacing: 1.5em;\n\t--ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);\n}\n\n.ck-content {\n\t/* Provides a minimal side margin for the left and right aligned images, so that the user has a visual feedback\n\tconfirming successful application of the style if image width exceeds the editor's size.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9342 */\n\t& .image-style-block-align-left,\n\t& .image-style-block-align-right {\n\t\tmax-width: calc(100% - var(--ck-image-style-spacing));\n\t}\n\n\t/* Allows displaying multiple floating images in the same line.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9183#issuecomment-804988132 */\n\t& .image-style-align-left,\n\t& .image-style-align-right {\n\t\tclear: none;\n\t}\n\n\t& .image-style-side {\n\t\tfloat: right;\n\t\tmargin-left: var(--ck-image-style-spacing);\n\t\tmax-width: 50%;\n\t}\n\n\t& .image-style-align-left {\n\t\tfloat: left;\n\t\tmargin-right: var(--ck-image-style-spacing);\n\t}\n\n\t& .image-style-align-center {\n\t\tmargin-left: auto;\n\t\tmargin-right: auto;\n\t}\n\n\t& .image-style-align-right {\n\t\tfloat: right;\n\t\tmargin-left: var(--ck-image-style-spacing);\n\t}\n\n\t& .image-style-block-align-right {\n\t\tmargin-right: 0;\n\t\tmargin-left: auto;\n\t}\n\n\t& .image-style-block-align-left {\n\t\tmargin-left: 0;\n\t\tmargin-right: auto;\n\t}\n\n\t/* Simulates margin collapsing with the preceding paragraph, which does not work for the floating elements. */\n\t& p + .image-style-align-left,\n\t& p + .image-style-align-right,\n\t& p + .image-style-side {\n\t\tmargin-top: 0;\n\t}\n\n\t& .image-inline {\n\t\t&.image-style-align-left,\n\t\t&.image-style-align-right {\n\t\t\tmargin-top: var(--ck-inline-image-style-spacing);\n\t\t\tmargin-bottom: var(--ck-inline-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-align-left {\n\t\t\tmargin-right: var(--ck-inline-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-align-right {\n\t\t\tmargin-left: var(--ck-inline-image-style-spacing);\n\t\t}\n\t}\n}\n\n.ck.ck-splitbutton {\n\t/* The button should display as a regular drop-down if the action button\n\tis forced to fire the same action as the arrow button. */\n\t&.ck-splitbutton_flatten {\n\t\t&:hover,\n\t\t&.ck-splitbutton_open {\n\t\t\t& > .ck-splitbutton__action:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled):not(:hover) {\n\t\t\t\tbackground-color: var(--ck-color-button-on-background);\n\n\t\t\t\t&::after {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.ck-splitbutton_open:hover {\n\t\t\t& > .ck-splitbutton__action:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled):not(:hover) {\n\t\t\t\tbackground-color: var(--ck-color-button-on-hover-background);\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4036: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck-image-upload-complete-icon{border-radius:50%;display:block;position:absolute;right:min(var(--ck-spacing-medium),6%);top:min(var(--ck-spacing-medium),6%);z-index:1}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20;--ck-image-upload-icon-width:2px;--ck-image-upload-icon-is-visible:clamp(0px,100% - 50px,1px)}.ck-image-upload-complete-icon{animation-delay:0ms,3s;animation-duration:.5s,.5s;animation-fill-mode:forwards,forwards;animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;background:var(--ck-color-image-upload-icon-background);font-size:calc(1px*var(--ck-image-upload-icon-size));height:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size));opacity:0;overflow:hidden;width:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size))}.ck-image-upload-complete-icon:after{animation-delay:.5s;animation-duration:.5s;animation-fill-mode:forwards;animation-name:ck-upload-complete-icon-check;border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);box-sizing:border-box;height:0;left:25%;opacity:0;top:50%;transform:scaleX(-1) rotate(135deg);transform-origin:left top;width:0}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{height:0;opacity:1;width:0}33%{height:0;width:.3em}to{height:.45em;opacity:1;width:.3em}}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageuploadicon.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-image/imageuploadicon.css"], + names: [], + mappings: "AAKA,+BAUC,iBAAkB,CATlB,aAAc,CACd,iBAAkB,CAOlB,sCAAwC,CADxC,oCAAsC,CAGtC,SAMD,CAJC,qCACC,UAAW,CACX,iBACD,CChBD,MACC,iCAA8C,CAC9C,+CAA4D,CAG5D,8BAA+B,CAC/B,gCAAiC,CACjC,4DACD,CAEA,+BAWC,sBAA4B,CAN5B,0BAAgC,CADhC,qCAAuC,CADvC,wEAA0E,CAD1E,uDAAwD,CAMxD,oDAAuD,CAWvD,oFAAuF,CAlBvF,SAAU,CAgBV,eAAgB,CAChB,mFA0BD,CAtBC,qCAgBC,mBAAsB,CADtB,sBAAyB,CAEzB,4BAA6B,CAH7B,4CAA6C,CAF7C,sFAAuF,CADvF,oFAAqF,CASrF,qBAAsB,CAdtB,QAAS,CAJT,QAAS,CAGT,SAAU,CADV,OAAQ,CAKR,mCAAoC,CACpC,yBAA0B,CAH1B,OAcD,CAGD,wCACC,GACC,SACD,CAEA,GACC,SACD,CACD,CAEA,wCACC,GACC,SACD,CAEA,GACC,SACD,CACD,CAEA,yCACC,GAGC,QAAS,CAFT,SAAU,CACV,OAED,CACA,IAEC,QAAS,CADT,UAED,CACA,GAGC,YAAc,CAFd,SAAU,CACV,UAED,CACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-image-upload-complete-icon {\n\tdisplay: block;\n\tposition: absolute;\n\n\t/*\n\t * Smaller images should have the icon closer to the border.\n\t * Match the icon position with the linked image indicator brought by the link image feature.\n\t */\n\ttop: min(var(--ck-spacing-medium), 6%);\n\tright: min(var(--ck-spacing-medium), 6%);\n\tborder-radius: 50%;\n\tz-index: 1;\n\n\t&::after {\n\t\tcontent: "";\n\t\tposition: absolute;\n\t}\n}\n', '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-image-upload-icon: hsl(0, 0%, 100%);\n\t--ck-color-image-upload-icon-background: hsl(120, 100%, 27%);\n\n\t/* Match the icon size with the linked image indicator brought by the link image feature. */\n\t--ck-image-upload-icon-size: 20;\n\t--ck-image-upload-icon-width: 2px;\n\t--ck-image-upload-icon-is-visible: clamp(0px, 100% - 50px, 1px);\n}\n\n.ck-image-upload-complete-icon {\n\topacity: 0;\n\tbackground: var(--ck-color-image-upload-icon-background);\n\tanimation-name: ck-upload-complete-icon-show, ck-upload-complete-icon-hide;\n\tanimation-fill-mode: forwards, forwards;\n\tanimation-duration: 500ms, 500ms;\n\n\t/* To make animation scalable. */\n\tfont-size: calc(1px * var(--ck-image-upload-icon-size));\n\n\t/* Hide completed upload icon after 3 seconds. */\n\tanimation-delay: 0ms, 3000ms;\n\n\t/*\n\t * Use CSS math to simulate container queries.\n\t * https://css-tricks.com/the-raven-technique-one-step-closer-to-container-queries/#what-about-showing-and-hiding-things\n\t */\n\toverflow: hidden;\n\twidth: calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));\n\theight: calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));\n\n\t/* This is check icon element made from border-width mixed with animations. */\n\t&::after {\n\t\t/* Because of border transformation we need to "hard code" left position. */\n\t\tleft: 25%;\n\n\t\ttop: 50%;\n\t\topacity: 0;\n\t\theight: 0;\n\t\twidth: 0;\n\n\t\ttransform: scaleX(-1) rotate(135deg);\n\t\ttransform-origin: left top;\n\t\tborder-top: var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);\n\t\tborder-right: var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);\n\n\t\tanimation-name: ck-upload-complete-icon-check;\n\t\tanimation-duration: 500ms;\n\t\tanimation-delay: 500ms;\n\t\tanimation-fill-mode: forwards;\n\n\t\t/* #1095. While reset is not providing proper box-sizing for pseudoelements, we need to handle it. */\n\t\tbox-sizing: border-box;\n\t}\n}\n\n@keyframes ck-upload-complete-icon-show {\n\tfrom {\n\t\topacity: 0;\n\t}\n\n\tto {\n\t\topacity: 1;\n\t}\n}\n\n@keyframes ck-upload-complete-icon-hide {\n\tfrom {\n\t\topacity: 1;\n\t}\n\n\tto {\n\t\topacity: 0;\n\t}\n}\n\n@keyframes ck-upload-complete-icon-check {\n\t0% {\n\t\topacity: 1;\n\t\twidth: 0;\n\t\theight: 0;\n\t}\n\t33% {\n\t\twidth: 0.3em;\n\t\theight: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t\twidth: 0.3em;\n\t\theight: 0.45em;\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 3773: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck .ck-upload-placeholder-loader{align-items:center;display:flex;justify-content:center;left:0;position:absolute;top:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px;--ck-upload-placeholder-image-aspect-ratio:2.8}.ck .ck-image-upload-placeholder{margin:0;width:100%}.ck .ck-image-upload-placeholder.image-inline{width:calc(var(--ck-upload-placeholder-loader-size)*2*var(--ck-upload-placeholder-image-aspect-ratio))}.ck .ck-image-upload-placeholder img{aspect-ratio:var(--ck-upload-placeholder-image-aspect-ratio)}.ck .ck-upload-placeholder-loader{height:100%;width:100%}.ck .ck-upload-placeholder-loader:before{animation:ck-upload-placeholder-loader 1s linear infinite;border-radius:50%;border-right:2px solid transparent;border-top:3px solid var(--ck-color-upload-placeholder-loader);height:var(--ck-upload-placeholder-loader-size);width:var(--ck-upload-placeholder-loader-size)}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageuploadloader.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-image/imageuploadloader.css"], + names: [], + mappings: "AAKA,kCAGC,kBAAmB,CADnB,YAAa,CAEb,sBAAuB,CAEvB,MAAO,CALP,iBAAkB,CAIlB,KAOD,CAJC,yCACC,UAAW,CACX,iBACD,CCXD,MACC,4CAAqD,CACrD,wCAAyC,CACzC,8CACD,CAEA,iCAGC,QAAS,CADT,UAgBD,CAbC,8CACC,sGACD,CAEA,qCAOC,4DACD,CAGD,kCAEC,WAAY,CADZ,UAWD,CARC,yCAMC,yDAA0D,CAH1D,iBAAkB,CAElB,kCAAmC,CADnC,8DAA+D,CAF/D,+CAAgD,CADhD,8CAMD,CAGD,wCACC,GACC,uBACD,CACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-upload-placeholder-loader {\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttop: 0;\n\tleft: 0;\n\n\t&::before {\n\t\tcontent: '';\n\t\tposition: relative;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-upload-placeholder-loader: hsl(0, 0%, 70%);\n\t--ck-upload-placeholder-loader-size: 32px;\n\t--ck-upload-placeholder-image-aspect-ratio: 2.8;\n}\n\n.ck .ck-image-upload-placeholder {\n\t/* We need to control the full width of the SVG gray background. */\n\twidth: 100%;\n\tmargin: 0;\n\n\t&.image-inline {\n\t\twidth: calc( 2 * var(--ck-upload-placeholder-loader-size) * var(--ck-upload-placeholder-image-aspect-ratio) );\n\t}\n\n\t& img {\n\t\t/*\n\t\t * This is an arbitrary aspect for a 1x1 px GIF to display to the user. Not too tall, not too short.\n\t\t * There's nothing special about this number except that it should make the image placeholder look like\n\t\t * a real image during this short period after the upload started and before the image was read from the\n\t\t * file system (and a rich preview was loaded).\n\t\t */\n\t\taspect-ratio: var(--ck-upload-placeholder-image-aspect-ratio);\n\t}\n}\n\n.ck .ck-upload-placeholder-loader {\n\twidth: 100%;\n\theight: 100%;\n\n\t&::before {\n\t\twidth: var(--ck-upload-placeholder-loader-size);\n\t\theight: var(--ck-upload-placeholder-loader-size);\n\t\tborder-radius: 50%;\n\t\tborder-top: 3px solid var(--ck-color-upload-placeholder-loader);\n\t\tborder-right: 2px solid transparent;\n\t\tanimation: ck-upload-placeholder-loader 1s linear infinite;\n\t}\n}\n\n@keyframes ck-upload-placeholder-loader {\n\tto {\n\t\ttransform: rotate( 360deg );\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3689: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline{position:relative}.ck.ck-editor__editable .image .ck-progress-bar,.ck.ck-editor__editable .image-inline .ck-progress-bar{left:0;position:absolute;top:0}.ck.ck-editor__editable .image-inline.ck-appear,.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image .ck-progress-bar,.ck.ck-editor__editable .image-inline .ck-progress-bar{background:var(--ck-color-upload-bar-background);height:2px;transition:width .1s;width:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/imageuploadprogress.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-image/imageuploadprogress.css"], + names: [], + mappings: "AAMC,qEAEC,iBACD,CAGA,uGAIC,MAAO,CAFP,iBAAkB,CAClB,KAED,CCRC,yFACC,oBACD,CAID,uGAIC,gDAAiD,CAFjD,UAAW,CAGX,oBAAuB,CAFvB,OAGD,CAGD,kBACC,GAAO,SAAY,CACnB,GAAO,SAAY,CACpB", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t& .image,\n\t& .image-inline {\n\t\tposition: relative;\n\t}\n\n\t/* Upload progress bar. */\n\t& .image .ck-progress-bar,\n\t& .image-inline .ck-progress-bar {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t& .image,\n\t& .image-inline {\n\t\t/* Showing animation. */\n\t\t&.ck-appear {\n\t\t\tanimation: fadeIn 700ms;\n\t\t}\n\t}\n\n\t/* Upload progress bar. */\n\t& .image .ck-progress-bar,\n\t& .image-inline .ck-progress-bar {\n\t\theight: 2px;\n\t\twidth: 0;\n\t\tbackground: var(--ck-color-upload-bar-background);\n\t\ttransition: width 100ms;\n\t}\n}\n\n@keyframes fadeIn {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 1905: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-image/theme/textalternativeform.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css"], + names: [], + mappings: "AAOA,6BACC,YAAa,CACb,kBAAmB,CACnB,gBAqBD,CAnBC,oDACC,oBACD,CAEA,uCACC,YACD,CCZA,oCDCD,6BAcE,cAUF,CARE,oDACC,eACD,CAEA,wCACC,cACD,CCrBD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck.ck-text-alternative-form {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\n\t& .ck-labeled-field-view {\n\t\tdisplay: inline-block;\n\t}\n\n\t& .ck-label {\n\t\tdisplay: none;\n\t}\n\n\t@mixin ck-media-phone {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t& .ck-button {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4721: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-collapsible-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-collapsible>.ck.ck-button{border-radius:0;color:inherit;font-weight:700;padding:var(--ck-spacing-medium) var(--ck-spacing-large);width:100%}.ck.ck-collapsible>.ck.ck-button:focus{background:transparent}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:hover:not(:focus),.ck.ck-collapsible>.ck.ck-button:not(:focus){background:transparent;border-color:transparent;box-shadow:none}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:0 var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-list/theme/collapsible.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-list/collapsible.css"], + names: [], + mappings: "AAMC,sEACC,YACD,CCHD,MACC,yDACD,CAGC,iCAIC,eAAgB,CAChB,aAAc,CAHd,eAAiB,CACjB,wDAAyD,CAFzD,UAoBD,CAdC,uCACC,sBACD,CAEA,wIACC,sBAAuB,CACvB,wBAAyB,CACzB,eACD,CAEA,0CACC,qCAAsC,CACtC,sCACD,CAGD,6CACC,yDACD,CAGC,mEACC,wBACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-collapsible.ck-collapsible_collapsed {\n\t& > .ck-collapsible__children {\n\t\tdisplay: none;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-collapsible-arrow-size: calc(0.5 * var(--ck-icon-size));\n}\n\n.ck.ck-collapsible {\n\t& > .ck.ck-button {\n\t\twidth: 100%;\n\t\tfont-weight: bold;\n\t\tpadding: var(--ck-spacing-medium) var(--ck-spacing-large);\n\t\tborder-radius: 0;\n\t\tcolor: inherit;\n\n\t\t&:focus {\n\t\t\tbackground: transparent;\n\t\t}\n\n\t\t&:active, &:not(:focus), &:hover:not(:focus) {\n\t\t\tbackground: transparent;\n\t\t\tborder-color: transparent;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t& > .ck-icon {\n\t\t\tmargin-right: var(--ck-spacing-medium);\n\t\t\twidth: var(--ck-collapsible-arrow-size);\n\t\t}\n\t}\n\n\t& > .ck-collapsible__children {\n\t\tpadding: 0 var(--ck-spacing-large) var(--ck-spacing-large);\n\t}\n\n\t&.ck-collapsible_collapsed {\n\t\t& > .ck.ck-button .ck-icon {\n\t\t\ttransform: rotate(-90deg);\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5730: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-editor__editable .ck-list-bogus-paragraph{display:block}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-list/theme/documentlist.css"], + names: [], + mappings: "AAKA,8CACC,aACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-editor__editable .ck-list-bogus-paragraph {\n\tdisplay: block;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4564: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content ol{list-style-type:decimal}.ck-content ol ol{list-style-type:lower-latin}.ck-content ol ol ol{list-style-type:lower-roman}.ck-content ol ol ol ol{list-style-type:upper-latin}.ck-content ol ol ol ol ol{list-style-type:upper-roman}.ck-content ul{list-style-type:disc}.ck-content ul ul{list-style-type:circle}.ck-content ul ul ul,.ck-content ul ul ul ul{list-style-type:square}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-list/theme/list.css"], + names: [], + mappings: "AAKA,eACC,uBAiBD,CAfC,kBACC,2BAaD,CAXC,qBACC,2BASD,CAPC,wBACC,2BAKD,CAHC,2BACC,2BACD,CAMJ,eACC,oBAaD,CAXC,kBACC,sBASD,CAJE,6CACC,sBACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content ol {\n\tlist-style-type: decimal;\n\n\t& ol {\n\t\tlist-style-type: lower-latin;\n\n\t\t& ol {\n\t\t\tlist-style-type: lower-roman;\n\n\t\t\t& ol {\n\t\t\t\tlist-style-type: upper-latin;\n\n\t\t\t\t& ol {\n\t\t\t\t\tlist-style-type: upper-roman;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck-content ul {\n\tlist-style-type: disc;\n\n\t& ul {\n\t\tlist-style-type: circle;\n\n\t\t& ul {\n\t\t\tlist-style-type: square;\n\n\t\t\t& ul {\n\t\t\t\tlist-style-type: square;\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6082: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}.ck.ck-list-properties.ck-list-properties_without-styles>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{min-width:auto;width:100%}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{background:transparent;margin-bottom:calc(var(--ck-spacing-tiny)*-1);padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{background:none;border-color:transparent;box-shadow:none}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-list/listproperties.css"], + names: [], + mappings: "AAOC,yDACC,+BASD,CAPC,2DACC,cAKD,CAHC,6DACC,qCACD,CASD,wFACC,oCACD,CAGA,mFACC,gDAWD,CARE,+GACC,UAKD,CAHC,iHACC,qCACD,CAMJ,8EACC,cAAe,CACf,UACD,CAEA,uEACC,sBAAuB,CAGvB,6CAAgD,CAFhD,cAAe,CACf,eAQD,CALC,2JAGC,eAAgB,CADhB,wBAAyB,CADzB,eAGD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-list-properties {\n\t/* When there are no list styles and there is no collapsible. */\n\t&.ck-list-properties_without-styles {\n\t\tpadding: var(--ck-spacing-large);\n\n\t\t& > * {\n\t\t\tmin-width: 14em;\n\n\t\t\t& + * {\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * When the numbered list property fields (start at, reversed) should be displayed,\n\t * more horizontal space is needed. Reconfigure the style grid to create that space.\n\t */\n\t&.ck-list-properties_with-numbered-properties {\n\t\t& > .ck-list-styles-list {\n\t\t\tgrid-template-columns: repeat( 4, auto );\n\t\t}\n\n\t\t/* When list styles are rendered and property fields are in a collapsible. */\n\t\t& > .ck-collapsible {\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\n\t\t\t& > .ck-collapsible__children {\n\t\t\t\t& > * {\n\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t& + * {\n\t\t\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-numbered-list-properties__start-index .ck-input {\n\t\tmin-width: auto;\n\t\twidth: 100%;\n\t}\n\n\t& .ck.ck-numbered-list-properties__reversed-order {\n\t\tbackground: transparent;\n\t\tpadding-left: 0;\n\t\tpadding-right: 0;\n\t\tmargin-bottom: calc(-1 * var(--ck-spacing-tiny));\n\n\t\t&:active, &:hover {\n\t\t\tbox-shadow: none;\n\t\t\tborder-color: transparent;\n\t\t\tbackground: none;\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 2417: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-list-styles-list{display:grid}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{column-gap:var(--ck-spacing-medium);grid-template-columns:repeat(3,auto);padding:var(--ck-spacing-large);row-gap:var(--ck-spacing-medium)}.ck.ck-list-styles-list .ck-button{box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button,.ck.ck-list-styles-list .ck-button .ck-icon{height:var(--ck-list-style-button-size);width:var(--ck-list-style-button-size)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-list/theme/liststyles.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-list/liststyles.css"], + names: [], + mappings: "AAKA,wBACC,YACD,CCFA,MACC,gCACD,CAEA,wBAGC,mCAAoC,CAFpC,oCAAwC,CAGxC,+BAAgC,CAFhC,gCA4BD,CAxBC,mCAiBC,sBAAuB,CAPvB,QAAS,CANT,SAmBD,CAJC,+EAhBA,uCAAwC,CADxC,sCAoBA", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-list-styles-list {\n\tdisplay: grid;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-list-style-button-size: 44px;\n}\n\n.ck.ck-list-styles-list {\n\tgrid-template-columns: repeat( 3, auto );\n\trow-gap: var(--ck-spacing-medium);\n\tcolumn-gap: var(--ck-spacing-medium);\n\tpadding: var(--ck-spacing-large);\n\n\t& .ck-button {\n\t\t/* Make the button look like a thumbnail (the icon "takes it all"). */\n\t\twidth: var(--ck-list-style-button-size);\n\t\theight: var(--ck-list-style-button-size);\n\t\tpadding: 0;\n\n\t\t/*\n\t\t * Buttons are aligned by the grid so disable default button margins to not collide with the\n\t\t * gaps in the grid.\n\t\t */\n\t\tmargin: 0;\n\n\t\t/*\n\t\t * Make sure the button border (which is displayed on focus, BTW) does not steal pixels\n\t\t * from the button dimensions and, as a result, decrease the size of the icon\n\t\t * (which becomes blurry as it scales down).\n\t\t */\n\t\tbox-sizing: content-box;\n\n\t\t& .ck-icon {\n\t\t\twidth: var(--ck-list-style-button-size);\n\t\t\theight: var(--ck-list-style-button-size);\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 1199: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ':root{--ck-todo-list-checkmark-size:16px}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label>input{-webkit-appearance:none;border:0;display:inline-block;height:var(--ck-todo-list-checkmark-size);left:-25px;margin-left:0;margin-right:-15px;position:relative;right:0;vertical-align:middle;width:var(--ck-todo-list-checkmark-size)}.ck-content .todo-list .todo-list__label>input:before{border:1px solid #333;border-radius:2px;box-sizing:border-box;content:"";display:block;height:100%;position:absolute;transition:box-shadow .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out;width:100%}.ck-content .todo-list .todo-list__label>input:after{border-color:transparent;border-style:solid;border-width:0 calc(var(--ck-todo-list-checkmark-size)/8) calc(var(--ck-todo-list-checkmark-size)/8) 0;box-sizing:content-box;content:"";display:block;height:calc(var(--ck-todo-list-checkmark-size)/2.6);left:calc(var(--ck-todo-list-checkmark-size)/3);pointer-events:none;position:absolute;top:calc(var(--ck-todo-list-checkmark-size)/5.3);transform:rotate(45deg);width:calc(var(--ck-todo-list-checkmark-size)/5.3)}.ck-content .todo-list .todo-list__label>input[checked]:before{background:#26ab33;border-color:#26ab33}.ck-content .todo-list .todo-list__label>input[checked]:after{border-color:#fff}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}[dir=rtl] .todo-list .todo-list__label>input{left:0;margin-left:-15px;margin-right:0;right:-25px}.ck-editor__editable .todo-list .todo-list__label>input{cursor:pointer}.ck-editor__editable .todo-list .todo-list__label>input:hover:before{box-shadow:0 0 0 5px rgba(0,0,0,.1)}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-list/theme/todolist.css"], + names: [], + mappings: "AAKA,MACC,kCACD,CAEA,uBACC,eA0ED,CAxEC,0BACC,iBAKD,CAHC,qCACC,cACD,CAIA,+CACC,uBAAwB,CAQxB,QAAS,CAPT,oBAAqB,CAGrB,yCAA0C,CAO1C,UAAW,CAGX,aAAc,CAFd,kBAAmB,CAVnB,iBAAkB,CAWlB,OAAQ,CARR,qBAAsB,CAFtB,wCAqDD,CAxCC,sDAOC,qBAAiC,CACjC,iBAAkB,CALlB,qBAAsB,CACtB,UAAW,CAHX,aAAc,CAKd,WAAY,CAJZ,iBAAkB,CAOlB,0FAAgG,CAJhG,UAKD,CAEA,qDAaC,wBAAyB,CADzB,kBAAmB,CAEnB,sGAA+G,CAX/G,sBAAuB,CAEvB,UAAW,CAJX,aAAc,CAUd,mDAAwD,CAHxD,+CAAoD,CAJpD,mBAAoB,CAFpB,iBAAkB,CAOlB,gDAAqD,CAMrD,uBAAwB,CALxB,kDAMD,CAGC,+DACC,kBAA8B,CAC9B,oBACD,CAEA,8DACC,iBACD,CAIF,wEACC,qBACD,CAKF,6CACC,MAAO,CAGP,iBAAkB,CAFlB,cAAe,CACf,WAED,CAMA,wDACC,cAKD,CAHC,qEACC,mCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-todo-list-checkmark-size: 16px;\n}\n\n.ck-content .todo-list {\n\tlist-style: none;\n\n\t& li {\n\t\tmargin-bottom: 5px;\n\n\t\t& .todo-list {\n\t\t\tmargin-top: 5px;\n\t\t}\n\t}\n\n\t& .todo-list__label {\n\t\t& > input {\n\t\t\t-webkit-appearance: none;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\twidth: var(--ck-todo-list-checkmark-size);\n\t\t\theight: var(--ck-todo-list-checkmark-size);\n\t\t\tvertical-align: middle;\n\n\t\t\t/* Needed on iOS */\n\t\t\tborder: 0;\n\n\t\t\t/* LTR styles */\n\t\t\tleft: -25px;\n\t\t\tmargin-right: -15px;\n\t\t\tright: 0;\n\t\t\tmargin-left: 0;\n\n\t\t\t&::before {\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tcontent: '';\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tborder: 1px solid hsl(0, 0%, 20%);\n\t\t\t\tborder-radius: 2px;\n\t\t\t\ttransition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border;\n\t\t\t}\n\n\t\t\t&::after {\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbox-sizing: content-box;\n\t\t\t\tpointer-events: none;\n\t\t\t\tcontent: '';\n\n\t\t\t\t/* Calculate tick position, size and border-width proportional to the checkmark size. */\n\t\t\t\tleft: calc( var(--ck-todo-list-checkmark-size) / 3 );\n\t\t\t\ttop: calc( var(--ck-todo-list-checkmark-size) / 5.3 );\n\t\t\t\twidth: calc( var(--ck-todo-list-checkmark-size) / 5.3 );\n\t\t\t\theight: calc( var(--ck-todo-list-checkmark-size) / 2.6 );\n\t\t\t\tborder-style: solid;\n\t\t\t\tborder-color: transparent;\n\t\t\t\tborder-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0;\n\t\t\t\ttransform: rotate(45deg);\n\t\t\t}\n\n\t\t\t&[checked] {\n\t\t\t\t&::before {\n\t\t\t\t\tbackground: hsl(126, 64%, 41%);\n\t\t\t\t\tborder-color: hsl(126, 64%, 41%);\n\t\t\t\t}\n\n\t\t\t\t&::after {\n\t\t\t\t\tborder-color: hsl(0, 0%, 100%);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t& .todo-list__label__description {\n\t\t\tvertical-align: middle;\n\t\t}\n\t}\n}\n\n/* RTL styles */\n[dir=\"rtl\"] .todo-list .todo-list__label > input {\n\tleft: 0;\n\tmargin-right: 0;\n\tright: -25px;\n\tmargin-left: -15px;\n}\n\n/*\n * To-do list should be interactive only during the editing\n * (https://github.com/ckeditor/ckeditor5/issues/2090).\n */\n.ck-editor__editable .todo-list .todo-list__label > input {\n\tcursor: pointer;\n\n\t&:hover::before {\n\t\tbox-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7368: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-input-color{display:flex;flex-direction:row-reverse;width:100%}.ck.ck-input-color>input.ck.ck-input-text{flex-grow:1;min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button{display:flex}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{overflow:hidden;position:relative}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{display:block;position:absolute}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-bottom-right-radius:0;border-top-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-bottom-left-radius:0;border-top-left-radius:0}.ck.ck-input-color>.ck.ck-input-text:focus{z-index:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{border-bottom-left-radius:0;border-top-left-radius:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button:not(:focus){border-left:1px solid transparent}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{border-bottom-right-radius:0;border-top-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button:not(:focus){border-right:1px solid transparent}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border:1px solid var(--ck-color-input-border);height:20px;width:20px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{background:red;border-radius:2px;height:150%;left:50%;top:-30%;transform:rotate(45deg);transform-origin:50%;width:8%}.ck.ck-input-color .ck.ck-input-color__remove-color{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);width:100%}.ck.ck-input-color .ck.ck-input-color__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-input-border)}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-left:var(--ck-spacing-standard);margin-right:0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/colorinput.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/colorinput.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAKA,mBAEC,YAAa,CACb,0BAA2B,CAF3B,UAgCD,CA5BC,0CAEC,WAAY,CADZ,cAED,CAEA,sCACC,cAMD,CAHC,kFACC,YACD,CAGD,8CAEC,YAWD,CATC,kFAEC,eAAgB,CADhB,iBAOD,CAJC,0IAEC,aAAc,CADd,iBAED,CC1BF,+CAGE,4BAA6B,CAD7B,yBAcF,CAhBA,+CAQE,2BAA4B,CAD5B,wBASF,CAHC,2CACC,SACD,CAIA,wEACC,SA0CD,CA3CA,kFAKE,2BAA4B,CAD5B,wBAuCF,CApCE,8FACC,iCACD,CATF,kFAcE,4BAA6B,CAD7B,yBA8BF,CA3BE,8FACC,kCACD,CAGD,oFACC,oDACD,CAEA,4GC1CF,eD2DE,CAjBA,+PCtCD,qCDuDC,CAjBA,4GAKC,6CAA8C,CAD9C,WAAY,CADZ,UAcD,CAVC,oKAKC,cAA6B,CAC7B,iBAAkB,CAHlB,WAAY,CADZ,QAAS,CADT,QAAS,CAMT,uBAAwB,CACxB,oBAAqB,CAJrB,QAKD,CAKH,oDAIC,2BAA4B,CAC5B,4BAA6B,CAH7B,qEAAwE,CADxE,UA0BD,CApBC,gEACC,oDACD,CATD,8DAYE,yBAeF,CA3BA,8DAgBE,wBAWF,CARC,gEACC,uCAMD,CAPA,0EAKE,sCAAuC,CADvC,cAGF", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-input-color {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\n\t& > input.ck.ck-input-text {\n\t\tmin-width: auto;\n\t\tflex-grow: 1;\n\t}\n\n\t& > div.ck.ck-dropdown {\n\t\tmin-width: auto;\n\n\t\t/* This dropdown has no arrow but a color preview instead. */\n\t\t& > .ck-input-color__button .ck-dropdown__arrow {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t& .ck.ck-input-color__button {\n\t\t/* Resolving issue with misaligned buttons on Safari (see #10589) */\n\t\tdisplay: flex;\n\n\t\t& .ck.ck-input-color__button__preview {\n\t\t\tposition: relative;\n\t\t\toverflow: hidden;\n\n\t\t\t& > .ck.ck-input-color__button__preview__no-color-indicator {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n@import "../mixins/_rounded.css";\n\n.ck.ck-input-color {\n\t& > .ck.ck-input-text {\n\t\t@mixin ck-dir ltr {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\n\t\t/* Make sure the focused input is always on top of the dropdown button so its\n\t\t outline and border are never cropped (also when the input is read-only). */\n\t\t&:focus {\n\t\t\tz-index: 0;\n\t\t}\n\t}\n\n\t& > .ck.ck-dropdown {\n\t\t& > .ck.ck-button.ck-input-color__button {\n\t\t\tpadding: 0;\n\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tborder-top-left-radius: 0;\n\t\t\t\tborder-bottom-left-radius: 0;\n\n\t\t\t\t&:not(:focus) {\n\t\t\t\t\tborder-left: 1px solid transparent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tborder-top-right-radius: 0;\n\t\t\t\tborder-bottom-right-radius: 0;\n\n\t\t\t\t&:not(:focus) {\n\t\t\t\t\tborder-right: 1px solid transparent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.ck-disabled {\n\t\t\t\tbackground: var(--ck-color-input-disabled-background);\n\t\t\t}\n\n\t\t\t& > .ck.ck-input-color__button__preview {\n\t\t\t\t@mixin ck-rounded-corners;\n\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder: 1px solid var(--ck-color-input-border);\n\n\t\t\t\t& > .ck.ck-input-color__button__preview__no-color-indicator {\n\t\t\t\t\ttop: -30%;\n\t\t\t\t\tleft: 50%;\n\t\t\t\t\theight: 150%;\n\t\t\t\t\twidth: 8%;\n\t\t\t\t\tbackground: hsl(0, 100%, 50%);\n\t\t\t\t\tborder-radius: 2px;\n\t\t\t\t\ttransform: rotate(45deg);\n\t\t\t\t\ttransform-origin: 50%;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-input-color__remove-color {\n\t\twidth: 100%;\n\t\tpadding: calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);\n\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\n\t\t&:not(:focus) {\n\t\t\tborder-bottom: 1px solid var(--ck-color-input-border);\n\t\t}\n\n\t\t@mixin ck-dir ltr {\n\t\t\tborder-top-right-radius: 0;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tborder-top-left-radius: 0;\n\t\t}\n\n\t\t& .ck.ck-icon {\n\t\t\tmargin-right: var(--ck-spacing-standard);\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-right: 0;\n\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4070: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/form.css"], + names: [], + mappings: "AAKA,YACC,mCAyBD,CAvBC,kBAEC,YACD,CAEA,8BACC,cAAe,CACf,OACD,CAEA,4BACC,cAWD,CARE,6DACC,4CACD,CAEA,mEACC,UACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-form {\n\tpadding: 0 0 var(--ck-spacing-large);\n\n\t&:focus {\n\t\t/* See: https://github.com/ckeditor/ckeditor5/issues/4773 */\n\t\toutline: none;\n\t}\n\n\t& .ck.ck-input-text {\n\t\tmin-width: 100%;\n\t\twidth: 0;\n\t}\n\n\t& .ck.ck-dropdown {\n\t\tmin-width: 100%;\n\n\t\t& .ck-dropdown__button {\n\t\t\t&:not(:focus) {\n\t\t\t\tborder: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t& .ck-button__label {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 9247: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{min-width:100%;width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/formrow.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/formrow.css"], + names: [], + mappings: "AAKA,iBACC,YAAa,CACb,kBAAmB,CACnB,gBAAiB,CACjB,6BAaD,CAVC,iCACC,WACD,CAGC,wHAEC,sBACD,CCbF,iBACC,4DA2BD,CAvBE,6CAEE,mCAMF,CARA,6CAME,oCAEF,CAGD,2BAEC,cAAe,CADf,UAED,CAEA,2CACC,kCAKD,CAHC,wEACC,0BACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-form__row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-between;\n\n\t/* Ignore labels that work as fieldset legends */\n\t& > *:not(.ck-label) {\n\t\tflex-grow: 1;\n\t}\n\n\t&.ck-table-form__action-row {\n\t\t& .ck-button-save,\n\t\t& .ck-button-cancel {\n\t\t\tjustify-content: center;\n\t\t}\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck.ck-form__row {\n\tpadding: var(--ck-spacing-standard) var(--ck-spacing-large) 0;\n\n\t/* Ignore labels that work as fieldset legends */\n\t& > *:not(.ck-label) {\n\t\t& + * {\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tmargin-left: var(--ck-spacing-large);\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-right: var(--ck-spacing-large);\n\t\t\t}\n\t\t}\n\t}\n\n\t& > .ck-label {\n\t\twidth: 100%;\n\t\tmin-width: 100%;\n\t}\n\n\t&.ck-table-form__action-row {\n\t\tmargin-top: var(--ck-spacing-large);\n\n\t\t& .ck-button .ck-button__label {\n\t\t\tcolor: var(--ck-color-text);\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 1613: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2)}.ck .ck-insert-table-dropdown__label,.ck[dir=rtl] .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{border:1px solid var(--ck-color-base-border);border-radius:1px;margin:var(--ck-insert-table-dropdown-box-margin);min-height:var(--ck-insert-table-dropdown-box-height);min-width:var(--ck-insert-table-dropdown-box-width);outline:none;transition:none}.ck .ck-insert-table-dropdown-grid-box:focus{box-shadow:none}.ck .ck-insert-table-dropdown-grid-box.ck-on{background:var(--ck-color-focus-outer-shadow);border-color:var(--ck-color-focus-border)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/inserttable.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/inserttable.css"], + names: [], + mappings: "AAKA,oCACC,YAAa,CACb,kBAAmB,CACnB,cACD,CCJA,MACC,uCAAwC,CACxC,0CAA2C,CAC3C,yCAA0C,CAC1C,yCACD,CAEA,oCAGC,yFAA0F,CAD1F,oJAED,CAEA,mFAEC,iBACD,CAEA,uCAIC,4CAA6C,CAC7C,iBAAkB,CAFlB,iDAAkD,CADlD,qDAAsD,CADtD,mDAAoD,CAKpD,YAAa,CACb,eAUD,CARC,6CACC,eACD,CAEA,6CAEC,6CAA8C,CAD9C,yCAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-insert-table-dropdown__grid {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: wrap;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-insert-table-dropdown-padding: 10px;\n\t--ck-insert-table-dropdown-box-height: 11px;\n\t--ck-insert-table-dropdown-box-width: 12px;\n\t--ck-insert-table-dropdown-box-margin: 1px;\n}\n\n.ck .ck-insert-table-dropdown__grid {\n\t/* The width of a container should match 10 items in a row so there will be a 10x10 grid. */\n\twidth: calc(var(--ck-insert-table-dropdown-box-width) * 10 + var(--ck-insert-table-dropdown-box-margin) * 20 + var(--ck-insert-table-dropdown-padding) * 2);\n\tpadding: var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;\n}\n\n.ck .ck-insert-table-dropdown__label,\n.ck[dir=rtl] .ck-insert-table-dropdown__label {\n\ttext-align: center;\n}\n\n.ck .ck-insert-table-dropdown-grid-box {\n\tmin-width: var(--ck-insert-table-dropdown-box-width);\n\tmin-height: var(--ck-insert-table-dropdown-box-height);\n\tmargin: var(--ck-insert-table-dropdown-box-margin);\n\tborder: 1px solid var(--ck-color-base-border);\n\tborder-radius: 1px;\n\toutline: none;\n\ttransition: none;\n\n\t&:focus {\n\t\tbox-shadow: none;\n\t}\n\n\t&.ck-on {\n\t\tborder-color: var(--ck-color-focus-border);\n\t\tbackground: var(--ck-color-focus-outer-shadow);\n\t}\n}\n\n"], + sourceRoot: "" + }]); + const a = s + }, + 6306: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-content .table{display:table;margin:.9em auto}.ck-content .table table{border:1px double #b3b3b3;border-collapse:collapse;border-spacing:0;height:100%;width:100%}.ck-content .table table td,.ck-content .table table th{border:1px solid #bfbfbf;min-width:2em;padding:.4em}.ck-content .table table th{background:rgba(0,0,0,.05);font-weight:700}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}.ck-editor__editable .ck-table-bogus-paragraph{display:inline-block;width:100%}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/table.css"], + names: [], + mappings: "AAKA,mBAKC,aAAc,CADd,gBAiCD,CA9BC,yBAYC,yBAAkC,CAVlC,wBAAyB,CACzB,gBAAiB,CAKjB,WAAY,CADZ,UAsBD,CAfC,wDAQC,wBAAiC,CANjC,aAAc,CACd,YAMD,CAEA,4BAEC,0BAA+B,CAD/B,eAED,CAMF,+BACC,gBACD,CAEA,+BACC,eACD,CAEA,+CAKC,oBAAqB,CAMrB,UACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content .table {\n\t/* Give the table widget some air and center it horizontally */\n\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\tmargin: 0.9em auto;\n\tdisplay: table;\n\n\t& table {\n\t\t/* The table cells should have slight borders */\n\t\tborder-collapse: collapse;\n\t\tborder-spacing: 0;\n\n\t\t/* Table width and height are set on the parent
. Make sure the table inside stretches\n\t\tto the full dimensions of the container (https://github.com/ckeditor/ckeditor5/issues/6186). */\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t/* The outer border of the table should be slightly darker than the inner lines.\n\t\tAlso see https://github.com/ckeditor/ckeditor5-table/issues/50. */\n\t\tborder: 1px double hsl(0, 0%, 70%);\n\n\t\t& td,\n\t\t& th {\n\t\t\tmin-width: 2em;\n\t\t\tpadding: .4em;\n\n\t\t\t/* The border is inherited from .ck-editor__nested-editable styles, so theoretically it\'s not necessary here.\n\t\t\tHowever, the border is a content style, so it should use .ck-content (so it works outside the editor).\n\t\t\tHence, the duplication. See https://github.com/ckeditor/ckeditor5/issues/6314 */\n\t\t\tborder: 1px solid hsl(0, 0%, 75%);\n\t\t}\n\n\t\t& th {\n\t\t\tfont-weight: bold;\n\t\t\tbackground: hsla(0, 0%, 0%, 5%);\n\t\t}\n\t}\n}\n\n/* Text alignment of the table header should match the editor settings and override the native browser styling,\nwhen content is available outside the editor. See https://github.com/ckeditor/ckeditor5/issues/6638 */\n.ck-content[dir="rtl"] .table th {\n\ttext-align: right;\n}\n\n.ck-content[dir="ltr"] .table th {\n\ttext-align: left;\n}\n\n.ck-editor__editable .ck-table-bogus-paragraph {\n\t/*\n\t * Use display:inline-block to force Chrome/Safari to limit text mutations to this element.\n\t * See https://github.com/ckeditor/ckeditor5/issues/6062.\n\t */\n\tdisplay: inline-block;\n\n\t/*\n\t * Inline HTML elements nested in the span should always be dimensioned in relation to the whole cell width.\n\t * See https://github.com/ckeditor/ckeditor5/issues/9117.\n\t */\n\twidth: 100%;\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 2128: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-table-caption-background:#f7f7f7;--ck-color-table-caption-text:#333;--ck-color-table-caption-highlighted-background:#fd0}.ck-content .table>figcaption{background-color:var(--ck-color-table-caption-background);caption-side:top;color:var(--ck-color-table-caption-text);display:table-caption;font-size:.75em;outline-offset:-1px;padding:.6em;text-align:center;word-break:break-word}.ck.ck-editor__editable .table>figcaption.table__caption_highlighted{animation:ck-table-caption-highlight .6s ease-out}.ck.ck-editor__editable .table>figcaption.ck-placeholder:before{overflow:hidden;padding-left:inherit;padding-right:inherit;text-overflow:ellipsis;white-space:nowrap}@keyframes ck-table-caption-highlight{0%{background-color:var(--ck-color-table-caption-highlighted-background)}to{background-color:var(--ck-color-table-caption-background)}}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/tablecaption.css"], + names: [], + mappings: "AAKA,MACC,2CAAoD,CACpD,kCAA8C,CAC9C,oDACD,CAGA,8BAMC,yDAA0D,CAJ1D,gBAAiB,CAGjB,wCAAyC,CAJzC,qBAAsB,CAOtB,eAAgB,CAChB,mBAAoB,CAFpB,YAAa,CAHb,iBAAkB,CADlB,qBAOD,CAIC,qEACC,iDACD,CAEA,gEASC,eAAgB,CARhB,oBAAqB,CACrB,qBAAsB,CAQtB,sBAAuB,CAFvB,kBAGD,CAGD,sCACC,GACC,qEACD,CAEA,GACC,yDACD,CACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-table-caption-background: hsl(0, 0%, 97%);\n\t--ck-color-table-caption-text: hsl(0, 0%, 20%);\n\t--ck-color-table-caption-highlighted-background: hsl(52deg 100% 50%);\n}\n\n/* Content styles */\n.ck-content .table > figcaption {\n\tdisplay: table-caption;\n\tcaption-side: top;\n\tword-break: break-word;\n\ttext-align: center;\n\tcolor: var(--ck-color-table-caption-text);\n\tbackground-color: var(--ck-color-table-caption-background);\n\tpadding: .6em;\n\tfont-size: .75em;\n\toutline-offset: -1px;\n}\n\n/* Editing styles */\n.ck.ck-editor__editable .table > figcaption {\n\t&.table__caption_highlighted {\n\t\tanimation: ck-table-caption-highlight .6s ease-out;\n\t}\n\n\t&.ck-placeholder::before {\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * Make sure the table caption placeholder doesn't overflow the placeholder area.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9162.\n\t\t */\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n@keyframes ck-table-caption-highlight {\n\t0% {\n\t\tbackground-color: var(--ck-color-table-caption-highlighted-background);\n\t}\n\n\t100% {\n\t\tbackground-color: var(--ck-color-table-caption-background);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5087: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:first-of-type{flex-grow:0.57}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:last-of-type{flex-grow:0.43}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar .ck-button{flex-grow:1}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{align-self:flex-end;padding:0;width:25%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none;margin-top:var(--ck-spacing-standard)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/tablecellproperties.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/tablecellproperties.css"], + names: [], + mappings: "AAOE,6FACC,cAiBD,CAdE,0HAEC,cACD,CAEA,yHAEC,cACD,CAEA,uHACC,WACD,CClBJ,kCACC,WAkBD,CAfE,2FACC,mBAAoB,CACpB,SAAU,CACV,SACD,CAGC,4GACC,eAAgB,CAGhB,qCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-table-cell-properties-form {\n\t& .ck-form__row {\n\t\t&.ck-table-cell-properties-form__alignment-row {\n\t\t\tflex-wrap: wrap;\n\n\t\t\t& .ck.ck-toolbar {\n\t\t\t\t&:first-of-type {\n\t\t\t\t\t/* 4 buttons out of 7 (h-alignment + v-alignment) = 0.57 */\n\t\t\t\t\tflex-grow: 0.57;\n\t\t\t\t}\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\t/* 3 buttons out of 7 (h-alignment + v-alignment) = 0.43 */\n\t\t\t\t\tflex-grow: 0.43;\n\t\t\t\t}\n\n\t\t\t\t& .ck-button {\n\t\t\t\t\tflex-grow: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-table-cell-properties-form {\n\twidth: 320px;\n\n\t& .ck-form__row {\n\t\t&.ck-table-cell-properties-form__padding-row {\n\t\t\talign-self: flex-end;\n\t\t\tpadding: 0;\n\t\t\twidth: 25%;\n\t\t}\n\n\t\t&.ck-table-cell-properties-form__alignment-row {\n\t\t\t& .ck.ck-toolbar {\n\t\t\t\tbackground: none;\n\n\t\t\t\t/* Compensate for missing input label that would push the margin (toolbar has no inputs). */\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4101: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-table-column-resizer-hover:var(--ck-color-base-active);--ck-table-column-resizer-width:7px;--ck-table-column-resizer-position-offset:calc(var(--ck-table-column-resizer-width)*-0.5 - 0.5px)}.ck-content .table .ck-table-resized{table-layout:fixed}.ck-content .table table{overflow:hidden}.ck-content .table td,.ck-content .table th{overflow-wrap:break-word;position:relative}.ck.ck-editor__editable .table .ck-table-column-resizer{bottom:-999999px;cursor:col-resize;position:absolute;right:var(--ck-table-column-resizer-position-offset);top:-999999px;user-select:none;width:var(--ck-table-column-resizer-width);z-index:var(--ck-z-default)}.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer,.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer{display:none}.ck.ck-editor__editable .table .ck-table-column-resizer:hover,.ck.ck-editor__editable .table .ck-table-column-resizer__active{background-color:var(--ck-color-table-column-resizer-hover);opacity:.25}.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer{left:var(--ck-table-column-resizer-position-offset);right:unset}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/tablecolumnresize.css"], + names: [], + mappings: "AAKA,MACC,iEAAkE,CAClE,mCAAoC,CAIpC,iGACD,CAEA,qCACC,kBACD,CAEA,yBACC,eACD,CAEA,4CAIC,wBAAyB,CACzB,iBACD,CAEA,wDAOC,gBAAiB,CAGjB,iBAAkB,CATlB,iBAAkB,CAOlB,oDAAqD,CAFrD,aAAc,CAKd,gBAAiB,CAFjB,0CAA2C,CAG3C,2BACD,CAQA,qJACC,YACD,CAEA,8HAEC,2DAA4D,CAC5D,WACD,CAEA,iEACC,mDAAoD,CACpD,WACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-table-column-resizer-hover: var(--ck-color-base-active);\n\t--ck-table-column-resizer-width: 7px;\n\n\t/* The offset used for absolute positioning of the resizer element, so that it is placed exactly above the cell border.\n\t The value is: minus half the width of the resizer decreased additionaly by the half the width of the border (0.5px). */\n\t--ck-table-column-resizer-position-offset: calc(var(--ck-table-column-resizer-width) * -0.5 - 0.5px);\n}\n\n.ck-content .table .ck-table-resized {\n\ttable-layout: fixed;\n}\n\n.ck-content .table table {\n\toverflow: hidden;\n}\n\n.ck-content .table td,\n.ck-content .table th {\n\t/* To prevent text overflowing beyond its cell when columns are resized by resize handler\n\t(https://github.com/ckeditor/ckeditor5/pull/14379#issuecomment-1589460978). */\n\toverflow-wrap: break-word;\n\tposition: relative;\n}\n\n.ck.ck-editor__editable .table .ck-table-column-resizer {\n\tposition: absolute;\n\t/* The resizer element resides in each cell so to occupy the entire height of the table, which is unknown from a CSS point of view,\n\t it is extended to an extremely high height. Even for screens with a very high pixel density, the resizer will fulfill its role as\n\t it should, i.e. for a screen of 476 ppi the total height of the resizer will take over 350 sheets of A4 format, which is totally\n\t unrealistic height for a single table. */\n\ttop: -999999px;\n\tbottom: -999999px;\n\tright: var(--ck-table-column-resizer-position-offset);\n\twidth: var(--ck-table-column-resizer-width);\n\tcursor: col-resize;\n\tuser-select: none;\n\tz-index: var(--ck-z-default);\n}\n\n.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer {\n\tdisplay: none;\n}\n\n/* The resizer elements, which are extended to an extremely high height, break the drag & drop feature in Chrome. To make it work again,\n all resizers must be hidden while the table is dragged. */\n.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer {\n\tdisplay: none;\n}\n\n.ck.ck-editor__editable .table .ck-table-column-resizer:hover,\n.ck.ck-editor__editable .table .ck-table-column-resizer__active {\n\tbackground-color: var(--ck-color-table-column-resizer-hover);\n\topacity: 0.25;\n}\n\n.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer {\n\tleft: var(--ck-table-column-resizer-position-offset);\n\tright: unset;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3881: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-table-focused-cell-background:rgba(158,201,250,.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/tableediting.css"], + names: [], + mappings: "AAKA,MACC,6DACD,CAKE,8QAGC,wDAAyD,CAKzD,iBAAkB,CAClB,8CAA+C,CAC/C,mBACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-table-focused-cell-background: hsla(212, 90%, 80%, .3);\n}\n\n.ck-widget.table {\n\t& td,\n\t& th {\n\t\t&.ck-editor__nested-editable.ck-editor__nested-editable_focused,\n\t\t&.ck-editor__nested-editable:focus {\n\t\t\t/* A very slight background to highlight the focused cell */\n\t\t\tbackground: var(--ck-color-table-focused-cell-background);\n\n\t\t\t/* Fixes the problem where surrounding cells cover the focused cell's border.\n\t\t\tIt does not fix the problem in all places but the UX is improved.\n\t\t\tSee https://github.com/ckeditor/ckeditor5-table/issues/29. */\n\t\t\tborder-style: none;\n\t\t\toutline: 1px solid var(--ck-color-focus-border);\n\t\t\toutline-offset: -1px; /* progressive enhancement - no IE support */\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6237: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck.ck-table-form .ck-form__row.ck-table-form__background-row,.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{align-items:center;flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{align-items:center;display:flex;flex-direction:column-reverse}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{bottom:calc(var(--ck-table-properties-error-arrow-size)*-1);left:50%;position:absolute;transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:"";left:50%;position:absolute;top:calc(var(--ck-table-properties-error-arrow-size)*-1);transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{max-width:80px;min-width:80px;width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:flex-end;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view{padding-top:var(--ck-spacing-standard)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);min-width:var(--ck-table-properties-min-error-width);padding:var(--ck-spacing-small) var(--ck-spacing-medium);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-style:solid;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/tableform.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/tableform.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAWE,wHACC,cACD,CAEA,8DAEC,kBAAmB,CADnB,cAgBD,CAbC,qFAGC,kBAAmB,CAFnB,YAAa,CACb,6BAMD,CAEA,sMACC,WACD,CAIF,4CAEC,iBAoBD,CAlBC,8EAGC,2DAAgE,CADhE,QAAS,CADT,iBAAkB,CAGlB,8BAA+B,CAG/B,SAUD,CAPC,oFACC,UAAW,CAGX,QAAS,CAFT,iBAAkB,CAClB,wDAA6D,CAE7D,0BACD,CChDH,MACC,0CAA2C,CAC3C,2CACD,CAMI,2FACC,kCAAmC,CACnC,iBACD,CAGD,8KAIC,cAAe,CADf,cAAe,CADf,UAGD,CAGD,8DACC,SAcD,CAZC,yMAEC,QACD,CAEA,iGACC,mBAAoB,CACpB,oBAAqB,CACrB,wCAAyC,CACzC,6CAA8C,CAC9C,gCACD,CAIF,4CACC,sCAyBD,CAvBC,8ECxCD,eDyDC,CAjBA,mMCpCA,qCDqDA,CAjBA,8EAGC,qCAAsC,CACtC,qCAAsC,CAEtC,oDAAqD,CADrD,wDAAyD,CAEzD,iBAUD,CAPC,oFACC,2EAA4E,CAE5E,kBAAmB,CADnB,kJAED,CAdD,8EAgBC,iEACD,CAGA,6GACC,YACD,CAIF,oDACC,GACC,SACD,CAEA,GACC,SACD,CACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-table-form {\n\t& .ck-form__row {\n\t\t&.ck-table-form__border-row {\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\t&.ck-table-form__background-row {\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\t&.ck-table-form__dimensions-row {\n\t\t\tflex-wrap: wrap;\n\t\t\talign-items: center;\n\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column-reverse;\n\t\t\t\talign-items: center;\n\n\t\t\t\t& .ck.ck-dropdown {\n\t\t\t\t\tflex-grow: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck-table-form__dimension-operator {\n\t\t\t\tflex-grow: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-labeled-field-view {\n\t\t/* Allow absolute positioning of the status (error) balloons. */\n\t\tposition: relative;\n\n\t\t& .ck.ck-labeled-field-view__status {\n\t\t\tposition: absolute;\n\t\t\tleft: 50%;\n\t\t\tbottom: calc( -1 * var(--ck-table-properties-error-arrow-size) );\n\t\t\ttransform: translate(-50%,100%);\n\n\t\t\t/* Make sure the balloon status stays on top of other form elements. */\n\t\t\tz-index: 1;\n\n\t\t\t/* The arrow pointing towards the field. */\n\t\t\t&::after {\n\t\t\t\tcontent: "";\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: calc( -1 * var(--ck-table-properties-error-arrow-size) );\n\t\t\t\tleft: 50%;\n\t\t\t\ttransform: translateX( -50% );\n\t\t\t}\n\t\t}\n\t}\n}\n', '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../mixins/_rounded.css";\n\n:root {\n\t--ck-table-properties-error-arrow-size: 6px;\n\t--ck-table-properties-min-error-width: 150px;\n}\n\n.ck.ck-table-form {\n\t& .ck-form__row {\n\t\t&.ck-table-form__border-row {\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\t& > .ck-label {\n\t\t\t\t\tfont-size: var(--ck-font-size-tiny);\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck-table-form__border-style,\n\t\t\t& .ck-table-form__border-width {\n\t\t\t\twidth: 80px;\n\t\t\t\tmin-width: 80px;\n\t\t\t\tmax-width: 80px;\n\t\t\t}\n\t\t}\n\n\t\t&.ck-table-form__dimensions-row {\n\t\t\tpadding: 0;\n\n\t\t\t& .ck-table-form__dimensions-row__width,\n\t\t\t& .ck-table-form__dimensions-row__height {\n\t\t\t\tmargin: 0\n\t\t\t}\n\n\t\t\t& .ck-table-form__dimension-operator {\n\t\t\t\talign-self: flex-end;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: var(--ck-ui-component-min-height);\n\t\t\t\tline-height: var(--ck-ui-component-min-height);\n\t\t\t\tmargin: 0 var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-labeled-field-view {\n\t\tpadding-top: var(--ck-spacing-standard);\n\n\t\t& .ck.ck-labeled-field-view__status {\n\t\t\t@mixin ck-rounded-corners;\n\n\t\t\tbackground: var(--ck-color-base-error);\n\t\t\tcolor: var(--ck-color-base-background);\n\t\t\tpadding: var(--ck-spacing-small) var(--ck-spacing-medium);\n\t\t\tmin-width: var(--ck-table-properties-min-error-width);\n\t\t\ttext-align: center;\n\n\t\t\t/* The arrow pointing towards the field. */\n\t\t\t&::after {\n\t\t\t\tborder-color: transparent transparent var(--ck-color-base-error) transparent;\n\t\t\t\tborder-width: 0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);\n\t\t\t\tborder-style: solid;\n\t\t\t}\n\n\t\t\tanimation: ck-table-form-labeled-view-status-appear .15s ease both;\n\t\t}\n\n\t\t/* Hide the error balloon when the field is blurred. Makes the experience much more clear. */\n\t\t& .ck-input.ck-error:not(:focus) + .ck.ck-labeled-field-view__status {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n@keyframes ck-table-form-labeled-view-status-appear {\n\t0% {\n\t\topacity: 0;\n\t}\n\n\t100% {\n\t\topacity: 1;\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7341: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{align-content:baseline;flex-basis:0;flex-wrap:wrap}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{align-self:flex-end;padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none;margin-top:var(--ck-spacing-standard)}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-table/theme/tableproperties.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/tableproperties.css"], + names: [], + mappings: "AAOE,mFAGC,sBAAuB,CADvB,YAAa,CADb,cAOD,CAHC,qHACC,gBACD,CCTH,6BACC,WAmBD,CAhBE,mFACC,mBAAoB,CACpB,SAYD,CAVC,kGACC,eAAgB,CAGhB,qCAKD,CAHC,uHACC,UACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-table-properties-form {\n\t& .ck-form__row {\n\t\t&.ck-table-properties-form__alignment-row {\n\t\t\tflex-wrap: wrap;\n\t\t\tflex-basis: 0;\n\t\t\talign-content: baseline;\n\n\t\t\t& .ck.ck-toolbar .ck-toolbar__items {\n\t\t\t\tflex-wrap: nowrap;\n\t\t\t}\n\t\t}\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-table-properties-form {\n\twidth: 320px;\n\n\t& .ck-form__row {\n\t\t&.ck-table-properties-form__alignment-row {\n\t\t\talign-self: flex-end;\n\t\t\tpadding: 0;\n\n\t\t\t& .ck.ck-toolbar {\n\t\t\t\tbackground: none;\n\n\t\t\t\t/* Compensate for missing input label that would push the margin (toolbar has no inputs). */\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\n\t\t\t\t& .ck-toolbar__items > * {\n\t\t\t\t\twidth: 40px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6945: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ':root{--ck-table-selected-cell-background:rgba(158,207,250,.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{box-shadow:unset;caret-color:transparent;outline:unset;position:relative}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{background-color:var(--ck-table-selected-cell-background);bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget{outline:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle{display:none}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-table/tableselection.css"], + names: [], + mappings: "AAKA,MACC,wDACD,CAGC,0IAKC,gBAAiB,CAFjB,uBAAwB,CACxB,aAAc,CAFd,iBAiCD,CA3BC,sJAGC,yDAA0D,CAK1D,QAAS,CAPT,UAAW,CAKX,MAAO,CAJP,mBAAoB,CAEpB,iBAAkB,CAGlB,OAAQ,CAFR,KAID,CAEA,wTAEC,4BACD,CAMA,gKACC,aAKD,CAHC,0NACC,YACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-table-selected-cell-background: hsla(208, 90%, 80%, .3);\n}\n\n.ck.ck-editor__editable .table table {\n\t& td.ck-editor__editable_selected,\n\t& th.ck-editor__editable_selected {\n\t\tposition: relative;\n\t\tcaret-color: transparent;\n\t\toutline: unset;\n\t\tbox-shadow: unset;\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/6446 */\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tpointer-events: none;\n\t\t\tbackground-color: var(--ck-table-selected-cell-background);\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t& ::selection,\n\t\t&:focus {\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t/*\n\t\t * To reduce the amount of noise, all widgets in the table selection have no outline and no selection handle.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9491.\n\t\t */\n\t\t& .ck-widget {\n\t\t\toutline: unset;\n\n\t\t\t& > .ck-widget__selection-handle {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4906: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-button,a.ck.ck-button{align-items:center;display:inline-flex;justify-content:left;position:relative;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{-webkit-appearance:none;border:1px solid transparent;cursor:default;font-size:inherit;line-height:1;min-height:var(--ck-ui-component-min-height);min-width:var(--ck-ui-component-min-height);padding:var(--ck-spacing-tiny);text-align:center;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;vertical-align:middle;white-space:nowrap}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:var(--ck-spacing-small);margin-right:calc(var(--ck-spacing-small)*-1)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{color:var(--ck-color-button-on-color)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/button/button.css", "webpack://./../ckeditor5-ui/theme/mixins/_unselectable.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/button/button.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/mixins/_button.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_focus.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_disabled.css"], + names: [], + mappings: "AAOA,6BAMC,kBAAmB,CADnB,mBAAoB,CAEpB,oBAAqB,CAHrB,iBAAkB,CCFlB,qBAAsB,CACtB,wBAAyB,CACzB,oBAAqB,CACrB,gBDkBD,CAdC,iEACC,YACD,CAGC,yGACC,oBACD,CAID,iFACC,sBACD,CEjBD,6BCAC,oDD4ID,CCzIE,6EACC,0DACD,CAEA,+EACC,2DACD,CAID,qDACC,6DACD,CDfD,6BEDC,eF6ID,CA5IA,wIEGE,qCFyIF,CA5IA,6BA6BC,uBAAwB,CANxB,4BAA6B,CAjB7B,cAAe,CAcf,iBAAkB,CAHlB,aAAc,CAJd,4CAA6C,CAD7C,2CAA4C,CAJ5C,8BAA+B,CAC/B,iBAAkB,CAiBlB,4DAA8D,CAnB9D,qBAAsB,CAFtB,kBAuID,CA7GC,oFGhCA,2BAA2B,CCF3B,2CAA8B,CDC9B,YHqCA,CAIC,kJAEC,aACD,CAGD,iEAIC,aAAc,CACd,cAAe,CAHf,iBAAkB,CAClB,mBAAoB,CAMpB,qBASD,CAlBA,qFAYE,eAMF,CAlBA,qFAgBE,gBAEF,CAEA,yEACC,aAYD,CAbA,6FAIE,mCASF,CAbA,6FAQE,oCAKF,CAbA,yEAWC,eAAiB,CACjB,UACD,CAIC,oIIrFD,oDJyFC,CAOA,gLKhGD,kCLkGC,CAEA,iGACC,UACD,CAGD,qEACC,yDAcD,CAXC,2HAEE,4CAA+C,CAC/C,oCAOF,CAVA,2HAQE,mCAAoC,CADpC,6CAGF,CAKA,mHACC,WACD,CAID,yCC/HA,+CDmIA,CChIC,yFACC,qDACD,CAEA,2FACC,sDACD,CAID,iEACC,wDACD,CDgHA,yCAGC,qCACD,CAEA,2DACC,iCACD,CAEA,+DACC,mCACD,CAID,2CC/IC,mDDoJD,CCjJE,2FACC,yDACD,CAEA,6FACC,0DACD,CAID,mEACC,4DACD,CDgID,2CAIC,wCACD,CAEA,uCAEC,eACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../mixins/_unselectable.css";\n\n.ck.ck-button,\na.ck.ck-button {\n\t@mixin ck-unselectable;\n\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: left;\n\n\t& .ck-button__label {\n\t\tdisplay: none;\n\t}\n\n\t&.ck-button_with-text {\n\t\t& .ck-button__label {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\n\t/* Center the icon horizontally in a button without text. */\n\t&:not(.ck-button_with-text) {\n\t\tjustify-content: center;\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Makes element unselectable.\n */\n@define-mixin ck-unselectable {\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_focus.css";\n@import "../../../mixins/_shadow.css";\n@import "../../../mixins/_disabled.css";\n@import "../../../mixins/_rounded.css";\n@import "../../mixins/_button.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck.ck-button,\na.ck.ck-button {\n\t@mixin ck-button-colors --ck-color-button-default;\n\t@mixin ck-rounded-corners;\n\n\twhite-space: nowrap;\n\tcursor: default;\n\tvertical-align: middle;\n\tpadding: var(--ck-spacing-tiny);\n\ttext-align: center;\n\n\t/* A very important piece of styling. Go to variable declaration to learn more. */\n\tmin-width: var(--ck-ui-component-min-height);\n\tmin-height: var(--ck-ui-component-min-height);\n\n\t/* Normalize the height of the line. Removing this will break consistent height\n\tamong text and text-less buttons (with icons). */\n\tline-height: 1;\n\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\n\t/* Avoid flickering when the foucs border shows up. */\n\tborder: 1px solid transparent;\n\n\t/* Apply some smooth transition to the box-shadow and border. */\n\ttransition: box-shadow .2s ease-in-out, border .2s ease-in-out;\n\n\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/189 */\n\t-webkit-appearance: none;\n\n\t&:active,\n\t&:focus {\n\t\t@mixin ck-focus-ring;\n\t\t@mixin ck-box-shadow var(--ck-focus-outer-shadow);\n\t}\n\n\t/* Allow icon coloring using the text "color" property. */\n\t& .ck-button__icon {\n\t\t& use,\n\t\t& use * {\n\t\t\tcolor: inherit;\n\t\t}\n\t}\n\n\t& .ck-button__label {\n\t\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\t\tfont-size: inherit;\n\t\tfont-weight: inherit;\n\t\tcolor: inherit;\n\t\tcursor: inherit;\n\n\t\t/* Must be consistent with .ck-icon\'s vertical align. Otherwise, buttons with and\n\t\twithout labels (but with icons) have different sizes in Chrome */\n\t\tvertical-align: middle;\n\n\t\t@mixin ck-dir ltr {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n\n\t& .ck-button__keystroke {\n\t\tcolor: inherit;\n\n\t\t@mixin ck-dir ltr {\n\t\t\tmargin-left: var(--ck-spacing-large);\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tmargin-right: var(--ck-spacing-large);\n\t\t}\n\n\t\tfont-weight: bold;\n\t\topacity: .7;\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/70 */\n\t&.ck-disabled {\n\t\t&:active,\n\t\t&:focus {\n\t\t\t/* The disabled button should have a slightly less visible shadow when focused. */\n\t\t\t@mixin ck-box-shadow var(--ck-focus-disabled-outer-shadow);\n\t\t}\n\n\t\t& .ck-button__icon {\n\t\t\t@mixin ck-disabled;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/98 */\n\t\t& .ck-button__label {\n\t\t\t@mixin ck-disabled;\n\t\t}\n\n\t\t& .ck-button__keystroke {\n\t\t\topacity: .3;\n\t\t}\n\t}\n\n\t&.ck-button_with-text {\n\t\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-standard);\n\n\t\t/* stylelint-disable-next-line no-descending-specificity */\n\t\t& .ck-button__icon {\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tmargin-left: calc(-1 * var(--ck-spacing-small));\n\t\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-right: calc(-1 * var(--ck-spacing-small));\n\t\t\t\tmargin-left: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ck-button_with-keystroke {\n\t\t/* stylelint-disable-next-line no-descending-specificity */\n\t\t& .ck-button__label {\n\t\t\tflex-grow: 1;\n\t\t}\n\t}\n\n\t/* A style of the button which is currently on, e.g. its feature is active. */\n\t&.ck-on {\n\t\t@mixin ck-button-colors --ck-color-button-on;\n\n\t\tcolor: var(--ck-color-button-on-color);\n\t}\n\n\t&.ck-button-save {\n\t\tcolor: var(--ck-color-button-save);\n\t}\n\n\t&.ck-button-cancel {\n\t\tcolor: var(--ck-color-button-cancel);\n\t}\n}\n\n/* A style of the button which handles the primary action. */\n.ck.ck-button-action,\na.ck.ck-button-action {\n\t@mixin ck-button-colors --ck-color-button-action;\n\n\tcolor: var(--ck-color-button-action-text);\n}\n\n.ck.ck-button-bold,\na.ck.ck-button-bold {\n\tfont-weight: bold;\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements a button of given background color.\n *\n * @param {String} $background - Background color of the button.\n * @param {String} $border - Border color of the button.\n */\n@define-mixin ck-button-colors $prefix {\n\tbackground: var($(prefix)-background);\n\n\t&:not(.ck-disabled) {\n\t\t&:hover {\n\t\t\tbackground: var($(prefix)-hover-background);\n\t\t}\n\n\t\t&:active {\n\t\t\tbackground: var($(prefix)-active-background);\n\t\t}\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/98 */\n\t&.ck-disabled {\n\t\tbackground: var($(prefix)-disabled-background);\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A visual style of focused element's border.\n */\n@define-mixin ck-focus-ring {\n\t/* Disable native outline. */\n\toutline: none;\n\tborder: var(--ck-focus-ring)\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A class which indicates that an element holding it is disabled.\n */\n@define-mixin ck-disabled {\n\topacity: var(--ck-disabled-opacity);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5332: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:calc(1.07692em + 1px);--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2px);--ck-switch-button-inner-hover-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton,.ck.ck-button.ck-switchbutton.ck-on:active,.ck.ck-button.ck-switchbutton.ck-on:focus,.ck.ck-button.ck-switchbutton.ck-on:hover,.ck.ck-button.ck-switchbutton:active,.ck.ck-button.ck-switchbutton:focus,.ck.ck-button.ck-switchbutton:hover{background:transparent;color:inherit}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(var(--ck-spacing-large)*2)}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(var(--ck-spacing-large)*2)}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{background:var(--ck-color-switch-button-off-background);border:1px solid transparent;transition:background .4s ease,box-shadow .2s ease-in-out,outline .2s ease-in-out;width:var(--ck-switch-button-toggle-width)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(var(--ck-border-radius)*.5)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{background:var(--ck-color-switch-button-inner-background);height:var(--ck-switch-button-toggle-inner-size);transition:all .3s ease;width:var(--ck-switch-button-toggle-inner-size)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:var(--ck-switch-button-inner-hover-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton:focus{border-color:transparent;box-shadow:none;outline:none}.ck.ck-button.ck-switchbutton:focus .ck-button__toggle{box-shadow:0 0 0 1px var(--ck-color-base-background),0 0 0 5px var(--ck-color-focus-outer-shadow);outline:var(--ck-focus-ring);outline-offset:1px}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var( --ck-switch-button-translation ))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(var( --ck-switch-button-translation )*-1))}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/button/switchbutton.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/button/switchbutton.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_disabled.css"], + names: [], + mappings: "AASE,4HACC,aACD,CCCF,MAEC,8CAA+C,CAE/C,0DAAgE,CAChE,2HAIC,CACD,0FACD,CAOC,0QAEC,sBAAuB,CADvB,aAED,CAEA,0DAGE,4CAOF,CAVA,0DAQE,2CAEF,CAEA,iDCpCA,eD4EA,CAxCA,yIChCC,qCDwED,CAxCA,2DAKE,gBAmCF,CAxCA,2DAUE,iBA8BF,CAxCA,iDAkBC,uDAAwD,CAFxD,4BAA6B,CAD7B,iFAAsF,CAEtF,0CAuBD,CApBC,2ECxDD,eDmEC,CAXA,6LCpDA,qCAAsC,CDsDpC,8CASF,CAXA,2EAOC,yDAA0D,CAD1D,gDAAiD,CAIjD,uBAA0B,CAL1B,+CAMD,CAEA,uDACC,6DAKD,CAHC,iFACC,qDACD,CAIF,6DEhFA,kCFkFA,CAGA,oCACC,wBAAyB,CAEzB,eAAgB,CADhB,YAQD,CALC,uDACC,iGAAmG,CAEnG,4BAA6B,CAD7B,kBAED,CAKA,uDACC,sDAkBD,CAhBC,6DACC,4DACD,CAEA,2FAKE,2DAMF,CAXA,2FASE,oEAEF", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-button.ck-switchbutton {\n\t& .ck-button__toggle {\n\t\tdisplay: block;\n\n\t\t& .ck-button__toggle__inner {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_disabled.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n/* Note: To avoid rendering issues (aliasing) but to preserve the responsive nature\nof the component, floating–point numbers have been used which, for the default font size\n(see: --ck-font-size-base), will generate simple integers. */\n:root {\n\t/* 34px at 13px font-size */\n\t--ck-switch-button-toggle-width: 2.6153846154em;\n\t/* 14px at 13px font-size */\n\t--ck-switch-button-toggle-inner-size: calc(1.0769230769em + 1px);\n\t--ck-switch-button-translation: calc(\n\t\tvar(--ck-switch-button-toggle-width) -\n\t\tvar(--ck-switch-button-toggle-inner-size) -\n\t\t2px /* Border */\n\t);\n\t--ck-switch-button-inner-hover-shadow: 0 0 0 5px var(--ck-color-switch-button-inner-shadow);\n}\n\n.ck.ck-button.ck-switchbutton {\n\t/* Unlike a regular button, the switch button text color and background should never change.\n\t * Changing toggle switch (background, outline) is enough to carry the information about the\n\t * state of the entire component (https://github.com/ckeditor/ckeditor5/issues/12519)\n\t */\n\t&, &:hover, &:focus, &:active, &.ck-on:hover, &.ck-on:focus, &.ck-on:active {\n\t\tcolor: inherit;\n\t\tbackground: transparent;\n\t}\n\n\t& .ck-button__label {\n\t\t@mixin ck-dir ltr {\n\t\t\t/* Separate the label from the switch */\n\t\t\tmargin-right: calc(2 * var(--ck-spacing-large));\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\t/* Separate the label from the switch */\n\t\t\tmargin-left: calc(2 * var(--ck-spacing-large));\n\t\t}\n\t}\n\n\t& .ck-button__toggle {\n\t\t@mixin ck-rounded-corners;\n\n\t\t@mixin ck-dir ltr {\n\t\t\t/* Make sure the toggle is always to the right as far as possible. */\n\t\t\tmargin-left: auto;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\t/* Make sure the toggle is always to the left as far as possible. */\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t/* Apply some smooth transition to the box-shadow and border. */\n\t\t/* Gently animate the background color of the toggle switch */\n\t\ttransition: background 400ms ease, box-shadow .2s ease-in-out, outline .2s ease-in-out;\n\t\tborder: 1px solid transparent;\n\t\twidth: var(--ck-switch-button-toggle-width);\n\t\tbackground: var(--ck-color-switch-button-off-background);\n\n\t\t& .ck-button__toggle__inner {\n\t\t\t@mixin ck-rounded-corners {\n\t\t\t\tborder-radius: calc(.5 * var(--ck-border-radius));\n\t\t\t}\n\n\t\t\twidth: var(--ck-switch-button-toggle-inner-size);\n\t\t\theight: var(--ck-switch-button-toggle-inner-size);\n\t\t\tbackground: var(--ck-color-switch-button-inner-background);\n\n\t\t\t/* Gently animate the inner part of the toggle switch */\n\t\t\ttransition: all 300ms ease;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground: var(--ck-color-switch-button-off-hover-background);\n\n\t\t\t& .ck-button__toggle__inner {\n\t\t\t\tbox-shadow: var(--ck-switch-button-inner-hover-shadow);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ck-disabled .ck-button__toggle {\n\t\t@mixin ck-disabled;\n\t}\n\n\t/* Overriding default .ck-button:focus styles + an outline around the toogle */\n\t&:focus {\n\t\tborder-color: transparent;\n\t\toutline: none;\n\t\tbox-shadow: none;\n\n\t\t& .ck-button__toggle {\n\t\t\tbox-shadow: 0 0 0 1px var(--ck-color-base-background), 0 0 0 5px var(--ck-color-focus-outer-shadow);\n\t\t\toutline-offset: 1px;\n\t\t\toutline: var(--ck-focus-ring);\n\t\t}\n\t}\n\n\t/* stylelint-disable-next-line no-descending-specificity */\n\t&.ck-on {\n\t\t& .ck-button__toggle {\n\t\t\tbackground: var(--ck-color-switch-button-on-background);\n\n\t\t\t&:hover {\n\t\t\t\tbackground: var(--ck-color-switch-button-on-hover-background);\n\t\t\t}\n\n\t\t\t& .ck-button__toggle__inner {\n\t\t\t\t/*\n\t\t\t\t* Move the toggle switch to the right. It will be animated.\n\t\t\t\t*/\n\t\t\t\t@mixin ck-dir ltr {\n\t\t\t\t\ttransform: translateX( var( --ck-switch-button-translation ) );\n\t\t\t\t}\n\n\t\t\t\t@mixin ck-dir rtl {\n\t\t\t\t\ttransform: translateX( calc( -1 * var( --ck-switch-button-translation ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A class which indicates that an element holding it is disabled.\n */\n@define-mixin ck-disabled {\n\topacity: var(--ck-disabled-opacity);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6781: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#166fd4}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{border:0;height:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;width:var(--ck-color-grid-tile-size)}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{color:var(--ck-color-color-grid-check-icon);display:none}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/colorgrid/colorgrid.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/colorgrid/colorgrid.css"], + names: [], + mappings: "AAKA,kBACC,YACD,CCAA,MACC,8BAA+B,CAK/B,wCACD,CAEA,kBACC,YAAa,CACb,WACD,CAEA,wBAOC,QAAS,CALT,qCAAsC,CAEtC,yCAA0C,CAD1C,wCAAyC,CAEzC,SAAU,CACV,8BAA+B,CAL/B,oCAyCD,CAjCC,oCACC,YAAa,CACb,gBACD,CAEA,4DACC,gDACD,CAEA,oCAEC,2CAA4C,CAD5C,YAED,CAEA,8BACC,8FAKD,CAHC,0CACC,aACD,CAGD,8HAIC,QACD,CAEA,gGAEC,iGACD,CAGD,yBACC,oCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-color-grid {\n\tdisplay: grid;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n\n:root {\n\t--ck-color-grid-tile-size: 24px;\n\n\t/* Not using global colors here because these may change but some colors in a pallette\n\t * require special treatment. For instance, this ensures no matter what the UI text color is,\n\t * the check icon will look good on the black color tile. */\n\t--ck-color-color-grid-check-icon: hsl(212, 81%, 46%);\n}\n\n.ck.ck-color-grid {\n\tgrid-gap: 5px;\n\tpadding: 8px;\n}\n\n.ck.ck-color-grid__tile {\n\twidth: var(--ck-color-grid-tile-size);\n\theight: var(--ck-color-grid-tile-size);\n\tmin-width: var(--ck-color-grid-tile-size);\n\tmin-height: var(--ck-color-grid-tile-size);\n\tpadding: 0;\n\ttransition: .2s ease box-shadow;\n\tborder: 0;\n\n\t&.ck-disabled {\n\t\tcursor: unset;\n\t\ttransition: unset;\n\t}\n\n\t&.ck-color-table__color-tile_bordered {\n\t\tbox-shadow: 0 0 0 1px var(--ck-color-base-border);\n\t}\n\n\t& .ck.ck-icon {\n\t\tdisplay: none;\n\t\tcolor: var(--ck-color-color-grid-check-icon);\n\t}\n\n\t&.ck-on {\n\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-base-text);\n\n\t\t& .ck.ck-icon {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t&.ck-on,\n\t&:focus:not( .ck-disabled ),\n\t&:hover:not( .ck-disabled ) {\n\t\t/* Disable the default .ck-button\'s border ring. */\n\t\tborder: 0;\n\t}\n\n\t&:focus:not( .ck-disabled ),\n\t&:hover:not( .ck-disabled ) {\n\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);\n\t}\n}\n\n.ck.ck-color-grid__label {\n\tpadding: 0 var(--ck-spacing-standard);\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 3398: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".color-picker-hex-input{width:max-content}.color-picker-hex-input .ck.ck-input{min-width:unset}.ck.ck-color-picker__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-color-picker__row .ck-color-picker__hash-view{padding-right:var(--ck-spacing-medium);padding-top:var(--ck-spacing-tiny)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/colorpicker/colorpicker.css"], + names: [], + mappings: "AAKA,wBACC,iBAKD,CAHC,qCACC,eACD,CAGD,yBACC,YAAa,CACb,kBAAmB,CACnB,gBAAiB,CACjB,6BAMD,CAJC,qDAEC,sCAAuC,CADvC,kCAED", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.color-picker-hex-input {\n\twidth: max-content;\n\n\t& .ck.ck-input {\n\t\tmin-width: unset;\n\t}\n}\n\n.ck.ck-color-picker__row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-between;\n\n\t& .ck-color-picker__hash-view {\n\t\tpadding-top: var(--ck-spacing-tiny);\n\t\tpadding-right: var(--ck-spacing-medium);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5485: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-dropdown-max-width:75vw}.ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-dropdown__panel{display:none;max-width:var(--ck-dropdown-max-width);position:absolute;z-index:var(--ck-z-modal)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{bottom:auto;top:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s{left:50%;transform:translateX(-50%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw{left:75%;transform:translateX(-75%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme{left:25%;transform:translateX(-25%)}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-modal) + 1)}:root{--ck-dropdown-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{margin-left:var(--ck-spacing-standard);right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{overflow:hidden;text-overflow:ellipsis;width:7em}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active{box-shadow:none}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active:focus,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active:focus{box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;box-shadow:var(--ck-drop-shadow),0 0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/dropdown/dropdown.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/dropdown/dropdown.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_disabled.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAKA,MACC,4BACD,CAEA,gBACC,oBAAqB,CACrB,iBA2ED,CAzEC,oCACC,mBAAoB,CACpB,2BACD,CAGA,+CACC,UACD,CAEA,oCACC,YAAa,CAEb,sCAAuC,CAEvC,iBAAkB,CAHlB,yBA4DD,CAvDC,+DACC,oBACD,CAEA,mSAKC,WACD,CAEA,mSAUC,WAAY,CADZ,QAED,CAEA,oHAEC,MACD,CAEA,oHAEC,OACD,CAEA,kHAGC,QAAS,CACT,0BACD,CAEA,sHAGC,QAAS,CACT,0BACD,CAEA,sHAGC,QAAS,CACT,0BACD,CAQF,mCACC,mCACD,CCpFA,MACC,sDACD,CAEA,gBAEC,iBA2ED,CAzEC,oCACC,mCACD,CAGC,8CAIC,sCAAuC,CAHvC,gCAID,CAIA,8CACC,+BAAgC,CAGhC,oCACD,CAGD,gDC/BA,kCDiCA,CAIE,mFAEC,oCACD,CAIA,mFAEC,qCACD,CAID,iEAEC,eAAgB,CAChB,sBAAuB,CAFvB,SAGD,CAGA,6EC1DD,kCD4DC,CAGA,qDACC,2BAA4B,CAC5B,4BACD,CAEA,sGACC,UACD,CAGA,yHAEC,eAKD,CAHC,qIE7EF,2CF+EE,CAKH,uBGlFC,eH8GD,CA5BA,qFG9EE,qCH0GF,CA5BA,uBAIC,oDAAqD,CACrD,sDAAuD,CACvD,QAAS,CE1FT,oCAA8B,CF6F9B,cAmBD,CAfC,6CACC,wBACD,CAEA,6CACC,yBACD,CAEA,6CACC,2BACD,CAEA,6CACC,4BACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-dropdown-max-width: 75vw;\n}\n\n.ck.ck-dropdown {\n\tdisplay: inline-block;\n\tposition: relative;\n\n\t& .ck-dropdown__arrow {\n\t\tpointer-events: none;\n\t\tz-index: var(--ck-z-default);\n\t}\n\n\t/* Dropdown button should span horizontally, e.g. in vertical toolbars */\n\t& .ck-button.ck-dropdown__button {\n\t\twidth: 100%;\n\t}\n\n\t& .ck-dropdown__panel {\n\t\tdisplay: none;\n\t\tz-index: var(--ck-z-modal);\n\t\tmax-width: var(--ck-dropdown-max-width);\n\n\t\tposition: absolute;\n\n\t\t&.ck-dropdown__panel-visible {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t&.ck-dropdown__panel_ne,\n\t\t&.ck-dropdown__panel_nw,\n\t\t&.ck-dropdown__panel_n,\n\t\t&.ck-dropdown__panel_nmw,\n\t\t&.ck-dropdown__panel_nme {\n\t\t\tbottom: 100%;\n\t\t}\n\n\t\t&.ck-dropdown__panel_se,\n\t\t&.ck-dropdown__panel_sw,\n\t\t&.ck-dropdown__panel_smw,\n\t\t&.ck-dropdown__panel_sme,\n\t\t&.ck-dropdown__panel_s {\n\t\t\t/*\n\t\t\t * Using transform: translate3d( 0, 100%, 0 ) causes blurry dropdown on Chrome 67-78+ on non-retina displays.\n\t\t\t * See https://github.com/ckeditor/ckeditor5/issues/1053.\n\t\t\t */\n\t\t\ttop: 100%;\n\t\t\tbottom: auto;\n\t\t}\n\n\t\t&.ck-dropdown__panel_ne,\n\t\t&.ck-dropdown__panel_se {\n\t\t\tleft: 0px;\n\t\t}\n\n\t\t&.ck-dropdown__panel_nw,\n\t\t&.ck-dropdown__panel_sw {\n\t\t\tright: 0px;\n\t\t}\n\n\t\t&.ck-dropdown__panel_s,\n\t\t&.ck-dropdown__panel_n {\n\t\t\t/* Positioning panels relative to the center of the button */\n\t\t\tleft: 50%;\n\t\t\ttransform: translateX(-50%);\n\t\t}\n\n\t\t&.ck-dropdown__panel_nmw,\n\t\t&.ck-dropdown__panel_smw {\n\t\t\t/* Positioning panels relative to the middle-west of the button */\n\t\t\tleft: 75%;\n\t\t\ttransform: translateX(-75%);\n\t\t}\n\n\t\t&.ck-dropdown__panel_nme,\n\t\t&.ck-dropdown__panel_sme {\n\t\t\t/* Positioning panels relative to the middle-east of the button */\n\t\t\tleft: 25%;\n\t\t\ttransform: translateX(-25%);\n\t\t}\n\t}\n}\n\n/*\n * Toolbar dropdown panels should be always above the UI (eg. other dropdown panels) from the editor's content.\n * See https://github.com/ckeditor/ckeditor5/issues/7874\n */\n.ck.ck-toolbar .ck-dropdown__panel {\n\tz-index: calc( var(--ck-z-modal) + 1 );\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_disabled.css";\n@import "../../../mixins/_shadow.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n:root {\n\t--ck-dropdown-arrow-size: calc(0.5 * var(--ck-icon-size));\n}\n\n.ck.ck-dropdown {\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\n\t& .ck-dropdown__arrow {\n\t\twidth: var(--ck-dropdown-arrow-size);\n\t}\n\n\t@mixin ck-dir ltr {\n\t\t& .ck-dropdown__arrow {\n\t\t\tright: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-dir rtl {\n\t\t& .ck-dropdown__arrow {\n\t\t\tleft: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t&.ck-disabled .ck-dropdown__arrow {\n\t\t@mixin ck-disabled;\n\t}\n\n\t& .ck-button.ck-dropdown__button {\n\t\t@mixin ck-dir ltr {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\t/* Make sure dropdowns with just an icon have the right inner spacing */\n\t\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\t/* Make sure dropdowns with just an icon have the right inner spacing */\n\t\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t/* #23 */\n\t\t& .ck-button__label {\n\t\t\twidth: 7em;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/70 */\n\t\t&.ck-disabled .ck-button__label {\n\t\t\t@mixin ck-disabled;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/816 */\n\t\t&.ck-on {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t&.ck-dropdown__button_label-width_auto .ck-button__label {\n\t\t\twidth: auto;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/8699 */\n\t\t&.ck-off:active,\n\t\t&.ck-on:active {\n\t\t\tbox-shadow: none;\n\t\t\t\n\t\t\t&:focus {\n\t\t\t\t@mixin ck-box-shadow var(--ck-focus-outer-shadow);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-dropdown__panel {\n\t@mixin ck-rounded-corners;\n\t@mixin ck-drop-shadow;\n\n\tbackground: var(--ck-color-dropdown-panel-background);\n\tborder: 1px solid var(--ck-color-dropdown-panel-border);\n\tbottom: 0;\n\n\t/* Make sure the panel is at least as wide as the drop-down\'s button. */\n\tmin-width: 100%;\n\n\t/* Disabled corner border radius to be consistent with the .dropdown__button\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\t&.ck-dropdown__panel_se {\n\t\tborder-top-left-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_sw {\n\t\tborder-top-right-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_ne {\n\t\tborder-bottom-left-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_nw {\n\t\tborder-bottom-right-radius: 0;\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A class which indicates that an element holding it is disabled.\n */\n@define-mixin ck-disabled {\n\topacity: var(--ck-disabled-opacity);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3949: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/dropdown/listdropdown.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAOA,6CCIC,eDqBD,CAzBA,iICQE,qCAAsC,CDJtC,wBAqBF,CAfE,mFCND,eDYC,CANA,6MCFA,qCAAsC,CDKpC,2BAA4B,CAC5B,4BAA6B,CAF7B,wBAIF,CAEA,kFCdD,eDmBC,CALA,2MCVA,qCAAsC,CDYpC,wBAAyB,CACzB,yBAEF", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n\n.ck.ck-dropdown .ck-dropdown__panel .ck-list {\n\t/* Disabled radius of top-left border to be consistent with .dropdown__button\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\t@mixin ck-rounded-corners {\n\t\tborder-top-left-radius: 0;\n\t}\n\n\t/* Make sure the button belonging to the first/last child of the list goes well with the\n\tborder radius of the entire panel. */\n\t& .ck-list__item {\n\t\t&:first-child .ck-button {\n\t\t\t@mixin ck-rounded-corners {\n\t\t\t\tborder-top-left-radius: 0;\n\t\t\t\tborder-bottom-left-radius: 0;\n\t\t\t\tborder-bottom-right-radius: 0;\n\t\t\t}\n\t\t}\n\n\t\t&:last-child .ck-button {\n\t\t\t@mixin ck-rounded-corners {\n\t\t\t\tborder-top-left-radius: 0;\n\t\t\t\tborder-top-right-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7686: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__action{border-bottom-right-radius:unset;border-top-right-radius:unset}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__action{border-bottom-left-radius:unset;border-top-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-bottom-left-radius:unset;border-top-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-bottom-right-radius:unset;border-top-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton>.ck-splitbutton__arrow:not(:focus){border-bottom-width:0;border-top-width:0}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{background-color:var(--ck-color-split-button-hover-border);content:"";height:100%;position:absolute;width:1px}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:focus:after,.ck.ck-splitbutton:hover>.ck-splitbutton__arrow:focus:after{--ck-color-split-button-hover-border:var(--ck-color-focus-border)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{left:-1px}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{right:-1px}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/dropdown/splitbutton.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/dropdown/splitbutton.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAKA,mBAEC,iBAKD,CAHC,iDACC,qCACD,CCJD,MACC,gDAAyD,CACzD,4CACD,CAMC,oIAKE,gCAAiC,CADjC,6BASF,CAbA,oIAWE,+BAAgC,CADhC,4BAGF,CAEA,0CAGC,eAiBD,CApBA,oDAQE,+BAAgC,CADhC,4BAaF,CApBA,oDAcE,gCAAiC,CADjC,6BAOF,CAHC,8CACC,mCACD,CAKD,sDAEC,qBAAwB,CADxB,kBAED,CAQC,0KACC,wDACD,CAIA,8JAKC,0DAA2D,CAJ3D,UAAW,CAGX,WAAY,CAFZ,iBAAkB,CAClB,SAGD,CAGA,sIACC,iEACD,CAGC,kLACC,SACD,CAIA,kLACC,UACD,CAMF,uCCzFA,eDmGA,CAVA,qHCrFC,qCD+FD,CARE,qKACC,2BACD,CAEA,mKACC,4BACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-splitbutton {\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\n\t& .ck-splitbutton__action:focus {\n\t\tz-index: calc(var(--ck-z-default) + 1);\n\t}\n}\n\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n\n:root {\n\t--ck-color-split-button-hover-background: hsl(0, 0%, 92%);\n\t--ck-color-split-button-hover-border: hsl(0, 0%, 70%);\n}\n\n.ck.ck-splitbutton {\n\t/*\n\t * Note: ck-rounded and ck-dir mixins don\'t go together (because they both use @nest).\n\t */\n\t&:hover > .ck-splitbutton__action,\n\t&.ck-splitbutton_open > .ck-splitbutton__action {\n\t\t@nest [dir="ltr"] & {\n\t\t\t/* Don\'t round the action button on the right side */\n\t\t\tborder-top-right-radius: unset;\n\t\t\tborder-bottom-right-radius: unset;\n\t\t}\n\n\t\t@nest [dir="rtl"] & {\n\t\t\t/* Don\'t round the action button on the left side */\n\t\t\tborder-top-left-radius: unset;\n\t\t\tborder-bottom-left-radius: unset;\n\t\t}\n\t}\n\n\t& > .ck-splitbutton__arrow {\n\t\t/* It\'s a text-less button and since the icon is positioned absolutely in such situation,\n\t\tit must get some arbitrary min-width. */\n\t\tmin-width: unset;\n\n\t\t@nest [dir="ltr"] & {\n\t\t\t/* Don\'t round the arrow button on the left side */\n\t\t\tborder-top-left-radius: unset;\n\t\t\tborder-bottom-left-radius: unset;\n\t\t}\n\n\t\t@nest [dir="rtl"] & {\n\t\t\t/* Don\'t round the arrow button on the right side */\n\t\t\tborder-top-right-radius: unset;\n\t\t\tborder-bottom-right-radius: unset;\n\t\t}\n\n\t\t& svg {\n\t\t\twidth: var(--ck-dropdown-arrow-size);\n\t\t}\n\t}\n\n\t/* Make sure the divider stretches 100% height of the button\n\thttps://github.com/ckeditor/ckeditor5/issues/10936 */\n\t& > .ck-splitbutton__arrow:not(:focus) {\n\t\tborder-top-width: 0px;\n\t\tborder-bottom-width: 0px;\n\t}\n\n\t/* When the split button is "open" (the arrow is on) or being hovered, it should get some styling\n\tas a whole. The background of both buttons should stand out and there should be a visual\n\tseparation between both buttons. */\n\t&.ck-splitbutton_open,\n\t&:hover {\n\t\t/* When the split button hovered as a whole, not as individual buttons. */\n\t\t& > .ck-button:not(.ck-on):not(.ck-disabled):not(:hover) {\n\t\t\tbackground: var(--ck-color-split-button-hover-background);\n\t\t}\n\n\t\t/* Splitbutton separator needs to be set with the ::after pseudoselector\n\t\tto display properly the borders on focus */\n\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\tcontent: \'\';\n\t\t\tposition: absolute;\n\t\t\twidth: 1px;\n\t\t\theight: 100%;\n\t\t\tbackground-color: var(--ck-color-split-button-hover-border);\n\t\t}\n\n\t\t/* Make sure the divider between the buttons looks fine when the button is focused */\n\t\t& > .ck-splitbutton__arrow:focus::after {\n\t\t\t--ck-color-split-button-hover-border: var(--ck-color-focus-border);\n\t\t}\n\n\t\t@nest [dir="ltr"] & {\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\t\tleft: -1px;\n\t\t\t}\n\t\t}\n\n\t\t@nest [dir="rtl"] & {\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\t\tright: -1px;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Don\'t round the bottom left and right corners of the buttons when "open"\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\t&.ck-splitbutton_open {\n\t\t@mixin ck-rounded-corners {\n\t\t\t& > .ck-splitbutton__action {\n\t\t\t\tborder-bottom-left-radius: 0;\n\t\t\t}\n\n\t\t\t& > .ck-splitbutton__arrow {\n\t\t\t\tborder-bottom-right-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7339: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-toolbar-dropdown-max-width:60vw}.ck.ck-toolbar-dropdown>.ck-dropdown__panel{max-width:var(--ck-toolbar-dropdown-max-width);width:max-content}.ck.ck-toolbar-dropdown>.ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/dropdown/toolbardropdown.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/dropdown/toolbardropdown.css"], + names: [], + mappings: "AAKA,MACC,oCACD,CAEA,4CAGC,8CAA+C,CAD/C,iBAQD,CAJE,6DACC,qCACD,CCZF,oCACC,QACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-toolbar-dropdown-max-width: 60vw;\n}\n\n.ck.ck-toolbar-dropdown > .ck-dropdown__panel {\n\t/* https://github.com/ckeditor/ckeditor5/issues/5586 */\n\twidth: max-content;\n\tmax-width: var(--ck-toolbar-dropdown-max-width);\n\n\t& .ck-button {\n\t\t&:focus {\n\t\t\tz-index: calc(var(--ck-z-default) + 1);\n\t\t}\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-toolbar-dropdown .ck-toolbar {\n\tborder: 0;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 9688: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-editable-blur-selection:#d9d9d9}.ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:0}.ck-rounded-corners .ck.ck-editor__editable:not(.ck-editor__nested-editable),.ck.ck-editor__editable.ck-rounded-corners:not(.ck-editor__nested-editable){border-radius:var(--ck-border-radius)}.ck.ck-editor__editable.ck-focused:not(.ck-editor__nested-editable){border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;outline:none}.ck.ck-editor__editable_inline{border:1px solid transparent;overflow:auto;padding:0 var(--ck-spacing-standard)}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/editorui/editorui.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_focus.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AAWA,MACC,0CACD,CAEA,yDCJC,eDWD,CAPA,yJCAE,qCDOF,CAJC,oEEPA,2BAA2B,CCF3B,qCAA8B,CDC9B,YFWA,CAGD,+BAGC,4BAA6B,CAF7B,aAAc,CACd,oCA6BD,CA1BC,wCACC,eACD,CAEA,wCACC,gBACD,CAGA,4CACC,kCACD,CAGA,2CAKC,qCACD,CAGA,sDACC,kDACD,CAKA,gEACC,mDACD,CAIA,gEACC,gDACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_disabled.css";\n@import "../../../mixins/_shadow.css";\n@import "../../../mixins/_focus.css";\n@import "../../mixins/_button.css";\n\n:root {\n\t--ck-color-editable-blur-selection: hsl(0, 0%, 85%);\n}\n\n.ck.ck-editor__editable:not(.ck-editor__nested-editable) {\n\t@mixin ck-rounded-corners;\n\n\t&.ck-focused {\n\t\t@mixin ck-focus-ring;\n\t\t@mixin ck-box-shadow var(--ck-inner-shadow);\n\t}\n}\n\n.ck.ck-editor__editable_inline {\n\toverflow: auto;\n\tpadding: 0 var(--ck-spacing-standard);\n\tborder: 1px solid transparent;\n\n\t&[dir="ltr"] {\n\t\ttext-align: left;\n\t}\n\n\t&[dir="rtl"] {\n\t\ttext-align: right;\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/116 */\n\t& > *:first-child {\n\t\tmargin-top: var(--ck-spacing-large);\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/847 */\n\t& > *:last-child {\n\t\t/*\n\t\t * This value should match with the default margins of the block elements (like .media or .image)\n\t\t * to avoid a content jumping when the fake selection container shows up (See https://github.com/ckeditor/ckeditor5/issues/9825).\n\t\t */\n\t\tmargin-bottom: var(--ck-spacing-large);\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/6517 */\n\t&.ck-blurred ::selection {\n\t\tbackground: var(--ck-color-editable-blur-selection);\n\t}\n}\n\n/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/111 */\n.ck.ck-balloon-panel.ck-toolbar-container[class*="arrow_n"] {\n\t&::after {\n\t\tborder-bottom-color: var(--ck-color-base-foreground);\n\t}\n}\n\n.ck.ck-balloon-panel.ck-toolbar-container[class*="arrow_s"] {\n\t&::after {\n\t\tborder-top-color: var(--ck-color-base-foreground);\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A visual style of focused element's border.\n */\n@define-mixin ck-focus-ring {\n\t/* Disable native outline. */\n\toutline: none;\n\tborder: var(--ck-focus-ring)\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 8847: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-form__header{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{border-bottom:1px solid var(--ck-color-base-border);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);padding:var(--ck-spacing-small) var(--ck-spacing-large)}.ck.ck-form__header .ck-form__header__label{font-weight:700}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/formheader/formheader.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/formheader/formheader.css"], + names: [], + mappings: "AAKA,oBAIC,kBAAmB,CAHnB,YAAa,CACb,kBAAmB,CACnB,gBAAiB,CAEjB,6BACD,CCNA,MACC,4BACD,CAEA,oBAIC,mDAAoD,CAFpD,mCAAoC,CACpC,wCAAyC,CAFzC,uDAQD,CAHC,4CACC,eACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-form__header {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-form-header-height: 38px;\n}\n\n.ck.ck-form__header {\n\tpadding: var(--ck-spacing-small) var(--ck-spacing-large);\n\theight: var(--ck-form-header-height);\n\tline-height: var(--ck-form-header-height);\n\tborder-bottom: 1px solid var(--ck-color-base-border);\n\n\t& .ck-form__header__label {\n\t\tfont-weight: bold;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6574: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{font-size:.8333350694em;height:var(--ck-icon-size);width:var(--ck-icon-size);will-change:transform}.ck.ck-icon,.ck.ck-icon *{cursor:inherit}.ck.ck-icon.ck-icon_inherit-color,.ck.ck-icon.ck-icon_inherit-color *{color:inherit}.ck.ck-icon.ck-icon_inherit-color :not([fill]){fill:currentColor}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/icon/icon.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/icon/icon.css"], + names: [], + mappings: "AAKA,YACC,qBACD,CCFA,MACC,0EACD,CAEA,YAKC,uBAAwB,CAHxB,0BAA2B,CAD3B,yBAA0B,CAU1B,qBAoBD,CAlBC,0BALA,cAQA,CAMC,sEACC,aAMD,CAJC,+CAEC,iBACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-icon {\n\tvertical-align: middle;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-icon-size: calc(var(--ck-line-height-base) * var(--ck-font-size-normal));\n}\n\n.ck.ck-icon {\n\twidth: var(--ck-icon-size);\n\theight: var(--ck-icon-size);\n\n\t/* Multiplied by the height of the line in "px" should give SVG "viewport" dimensions */\n\tfont-size: .8333350694em;\n\n\t/* Inherit cursor style (#5). */\n\tcursor: inherit;\n\n\t/* This will prevent blurry icons on Firefox. See #340. */\n\twill-change: transform;\n\n\t& * {\n\t\t/* Inherit cursor style (#5). */\n\t\tcursor: inherit;\n\t}\n\n\t/* Allows dynamic coloring of an icon by inheriting its color from the parent. */\n\t&.ck-icon_inherit-color {\n\t\tcolor: inherit;\n\n\t\t& * {\n\t\t\tcolor: inherit;\n\n\t\t\t&:not([fill]) {\n\t\t\t\t/* Needed by FF. */\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 4879: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-input-width:18em;--ck-input-text-width:var(--ck-input-width)}.ck.ck-input{border-radius:0}.ck-rounded-corners .ck.ck-input,.ck.ck-input.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input{background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);min-height:var(--ck-ui-component-min-height);min-width:var(--ck-input-width);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);transition:box-shadow .1s ease-in-out,border .1s ease-in-out}.ck.ck-input:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none}.ck.ck-input[readonly]{background:var(--ck-color-input-disabled-background);border:1px solid var(--ck-color-input-disabled-border);color:var(--ck-color-input-disabled-text)}.ck.ck-input[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-input.ck-error{animation:ck-input-shake .3s ease both;border-color:var(--ck-color-input-error-border)}.ck.ck-input.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),0 0}@keyframes ck-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/input/input.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_focus.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AASA,MACC,qBAAsB,CAGtB,2CACD,CAEA,aCLC,eD2CD,CAtCA,iECDE,qCDuCF,CAtCA,aAGC,2CAA4C,CAC5C,6CAA8C,CAK9C,4CAA6C,CAH7C,+BAAgC,CADhC,6DAA8D,CAO9D,4DA0BD,CAxBC,mBEnBA,2BAA2B,CCF3B,2CAA8B,CDC9B,YFuBA,CAEA,uBAEC,oDAAqD,CADrD,sDAAuD,CAEvD,yCAMD,CAJC,6BG/BD,oDHkCC,CAGD,sBAEC,sCAAuC,CADvC,+CAMD,CAHC,4BGzCD,iDH2CC,CAIF,0BACC,IACC,0BACD,CAEA,IACC,yBACD,CAEA,IACC,0BACD,CAEA,IACC,yBACD,CACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_focus.css";\n@import "../../../mixins/_shadow.css";\n\n:root {\n\t--ck-input-width: 18em;\n\n\t/* Backward compatibility. */\n\t--ck-input-text-width: var(--ck-input-width);\n}\n\n.ck.ck-input {\n\t@mixin ck-rounded-corners;\n\n\tbackground: var(--ck-color-input-background);\n\tborder: 1px solid var(--ck-color-input-border);\n\tpadding: var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);\n\tmin-width: var(--ck-input-width);\n\n\t/* This is important to stay of the same height as surrounding buttons */\n\tmin-height: var(--ck-ui-component-min-height);\n\n\t/* Apply some smooth transition to the box-shadow and border. */\n\ttransition: box-shadow .1s ease-in-out, border .1s ease-in-out;\n\n\t&:focus {\n\t\t@mixin ck-focus-ring;\n\t\t@mixin ck-box-shadow var(--ck-focus-outer-shadow);\n\t}\n\n\t&[readonly] {\n\t\tborder: 1px solid var(--ck-color-input-disabled-border);\n\t\tbackground: var(--ck-color-input-disabled-background);\n\t\tcolor: var(--ck-color-input-disabled-text);\n\n\t\t&:focus {\n\t\t\t/* The read-only input should have a slightly less visible shadow when focused. */\n\t\t\t@mixin ck-box-shadow var(--ck-focus-disabled-outer-shadow);\n\t\t}\n\t}\n\n\t&.ck-error {\n\t\tborder-color: var(--ck-color-input-error-border);\n\t\tanimation: ck-input-shake .3s ease both;\n\n\t\t&:focus {\n\t\t\t@mixin ck-box-shadow var(--ck-focus-error-outer-shadow);\n\t\t}\n\t}\n}\n\n@keyframes ck-input-shake {\n\t20% {\n\t\ttransform: translateX(-2px);\n\t}\n\n\t40% {\n\t\ttransform: translateX(2px);\n\t}\n\n\t60% {\n\t\ttransform: translateX(-1px);\n\t}\n\n\t80% {\n\t\ttransform: translateX(1px);\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A visual style of focused element's border.\n */\n@define-mixin ck-focus-ring {\n\t/* Disable native outline. */\n\toutline: none;\n\tborder: var(--ck-focus-ring)\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3662: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/label/label.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/label/label.css"], + names: [], + mappings: "AAKA,aACC,aACD,CAEA,mBACC,YACD,CCNA,aACC,eACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-label {\n\tdisplay: block;\n}\n\n.ck.ck-voice-label {\n\tdisplay: none;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-label {\n\tfont-weight: bold;\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 2577: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{display:flex;position:relative}.ck.ck-labeled-field-view .ck.ck-label{display:block;position:absolute}:root{--ck-labeled-field-view-transition:.1s cubic-bezier(0,0,0.24,0.95);--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-spacing-medium);--ck-labeled-field-label-default-position-x:var(--ck-spacing-medium);--ck-labeled-field-label-default-position-y:calc(var(--ck-font-size-base)*0.6);--ck-color-labeled-field-label-background:var(--ck-color-base-background)}.ck.ck-labeled-field-view{border-radius:0}.ck-rounded-corners .ck.ck-labeled-field-view,.ck.ck-labeled-field-view.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{width:100%}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{top:0}[dir=ltr] .ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{left:0}[dir=rtl] .ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{right:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{background:var(--ck-color-labeled-field-label-background);font-weight:400;line-height:normal;max-width:100%;overflow:hidden;padding:0 calc(var(--ck-font-size-tiny)*.5);pointer-events:none;text-overflow:ellipsis;transform:translate(var(--ck-spacing-medium),-6px) scale(.75);transform-origin:0 0;transition:transform var(--ck-labeled-field-view-transition),padding var(--ck-labeled-field-view-transition),background var(--ck-labeled-field-view-transition)}.ck.ck-labeled-field-view.ck-error .ck-input:not([readonly])+.ck.ck-label,.ck.ck-labeled-field-view.ck-error>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status.ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view.ck-disabled>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-input-disabled-text)}[dir=ltr] .ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,[dir=ltr] .ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transform:translate(var(--ck-labeled-field-label-default-position-x),var(--ck-labeled-field-label-default-position-y)) scale(1)}[dir=rtl] .ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,[dir=rtl] .ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transform:translate(calc(var(--ck-labeled-field-label-default-position-x)*-1),var(--ck-labeled-field-label-default-position-y)) scale(1)}.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{background:transparent;max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width));padding:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck.ck-button{background:transparent}.ck.ck-labeled-field-view.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck-button>.ck-button__label{opacity:0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown+.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard))}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/labeledfield/labeledfieldview.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAMC,mEACC,YAAa,CACb,iBACD,CAEA,uCACC,aAAc,CACd,iBACD,CCND,MACC,kEAAsE,CACtE,gFAAiF,CACjF,oEAAqE,CACrE,8EAAiF,CACjF,yEACD,CAEA,0BCLC,eD8GD,CAzGA,2FCDE,qCD0GF,CAtGC,mEACC,UAmCD,CAjCC,gFACC,KA+BD,CAhCA,0FAIE,MA4BF,CAhCA,0FAQE,OAwBF,CAhCA,gFAiBC,yDAA0D,CAG1D,eAAmB,CADnB,kBAAoB,CAOpB,cAAe,CAFf,eAAgB,CANhB,2CAA8C,CAP9C,mBAAoB,CAYpB,sBAAuB,CARvB,6DAA+D,CAH/D,oBAAqB,CAgBrB,+JAID,CAQA,mKACC,gCACD,CAGD,yDACC,mCAAoC,CACpC,kCAAmC,CAInC,kBAKD,CAHC,6FACC,gCACD,CAID,4OAEC,yCACD,CAIA,oUAGE,+HAYF,CAfA,oUAOE,wIAQF,CAfA,gTAaC,sBAAuB,CAFvB,iEAAkE,CAGlE,SACD,CAKA,8FACC,sBACD,CAGA,yIACC,SACD,CAGA,kMACC,8HACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-labeled-field-view {\n\t& > .ck.ck-labeled-field-view__input-wrapper {\n\t\tdisplay: flex;\n\t\tposition: relative;\n\t}\n\n\t& .ck.ck-label {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n@import "../../../mixins/_rounded.css";\n\n:root {\n\t--ck-labeled-field-view-transition: .1s cubic-bezier(0, 0, 0.24, 0.95);\n\t--ck-labeled-field-empty-unfocused-max-width: 100% - 2 * var(--ck-spacing-medium);\n\t--ck-labeled-field-label-default-position-x: var(--ck-spacing-medium);\n\t--ck-labeled-field-label-default-position-y: calc(0.6 * var(--ck-font-size-base));\n\t--ck-color-labeled-field-label-background: var(--ck-color-base-background);\n}\n\n.ck.ck-labeled-field-view {\n\t@mixin ck-rounded-corners;\n\n\t& > .ck.ck-labeled-field-view__input-wrapper {\n\t\twidth: 100%;\n\n\t\t& > .ck.ck-label {\n\t\t\ttop: 0px;\n\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tleft: 0px;\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tright: 0px;\n\t\t\t}\n\n\t\t\tpointer-events: none;\n\t\t\ttransform-origin: 0 0;\n\n\t\t\t/* By default, display the label scaled down above the field. */\n\t\t\ttransform: translate(var(--ck-spacing-medium), -6px) scale(.75);\n\n\t\t\tbackground: var(--ck-color-labeled-field-label-background);\n\t\t\tpadding: 0 calc(.5 * var(--ck-font-size-tiny));\n\t\t\tline-height: initial;\n\t\t\tfont-weight: normal;\n\n\t\t\t/* Prevent overflow when the label is longer than the input */\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\n\t\t\tmax-width: 100%;\n\n\t\t\ttransition:\n\t\t\t\ttransform var(--ck-labeled-field-view-transition),\n\t\t\t\tpadding var(--ck-labeled-field-view-transition),\n\t\t\t\tbackground var(--ck-labeled-field-view-transition);\n\t\t}\n\t}\n\n\t&.ck-error {\n\t\t& > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\n\t\t& .ck-input:not([readonly]) + .ck.ck-label {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\t}\n\n\t& .ck-labeled-field-view__status {\n\t\tfont-size: var(--ck-font-size-small);\n\t\tmargin-top: var(--ck-spacing-small);\n\n\t\t/* Let the info wrap to the next line to avoid stretching the layout horizontally.\n\t\tThe status could be very long. */\n\t\twhite-space: normal;\n\n\t\t&.ck-labeled-field-view__status_error {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\t}\n\n\t/* Disabled fields and fields that have no focus should fade out. */\n\t&.ck-disabled > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label,\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused) > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\tcolor: var(--ck-color-input-disabled-text);\n\t}\n\n\t/* Fields that are disabled or not focused and without a placeholder should have full-sized labels. */\n\t/* stylelint-disable-next-line no-descending-specificity */\n\t&.ck-disabled.ck-labeled-field-view_empty > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label,\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder) > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\t@mixin ck-dir ltr {\n\t\t\ttransform: translate(var(--ck-labeled-field-label-default-position-x), var(--ck-labeled-field-label-default-position-y)) scale(1);\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\ttransform: translate(calc(-1 * var(--ck-labeled-field-label-default-position-x)), var(--ck-labeled-field-label-default-position-y)) scale(1);\n\t\t}\n\n\t\t/* Compensate for the default translate position. */\n\t\tmax-width: calc(var(--ck-labeled-field-empty-unfocused-max-width));\n\n\t\tbackground: transparent;\n\t\tpadding: 0;\n\t}\n\n\t/*------ DropdownView integration ----------------------------------------------------------------------------------- */\n\n\t/* Make sure dropdown\' background color in any of dropdown\'s state does not collide with labeled field. */\n\t& > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown > .ck.ck-button {\n\t\tbackground: transparent;\n\t}\n\n\t/* When the dropdown is "empty", the labeled field label replaces its label. */\n\t&.ck-labeled-field-view_empty > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown > .ck-button > .ck-button__label {\n\t\topacity: 0;\n\t}\n\n\t/* Make sure the label of the empty, unfocused input does not cover the dropdown arrow. */\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder) > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown + .ck-label {\n\t\tmax-width: calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard));\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 1046: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-list{display:flex;flex-direction:column;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{background:var(--ck-color-list-background);list-style-type:none}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{border-radius:0;min-height:unset;padding:calc(var(--ck-line-height-base)*.2*var(--ck-font-size-base)) calc(var(--ck-line-height-base)*.4*var(--ck-font-size-base));text-align:left;width:100%}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(var(--ck-line-height-base)*1.2*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-switchbutton):not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{background:var(--ck-color-base-border);height:1px;width:100%}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/list/list.css", "webpack://./../ckeditor5-ui/theme/mixins/_unselectable.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/list/list.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAOA,YAGC,YAAa,CACb,qBAAsB,CCFtB,qBAAsB,CACtB,wBAAyB,CACzB,oBAAqB,CACrB,gBDaD,CAZC,2DAEC,aACD,CAKA,kCACC,iBAAkB,CAClB,2BACD,CEfD,YCEC,eDGD,CALA,+DCME,qCDDF,CALA,YAIC,0CAA2C,CAD3C,oBAED,CAEA,kBACC,cAAe,CACf,cA2DD,CAzDC,6BAIC,eAAgB,CAHhB,gBAAiB,CAQjB,iIAEiE,CARjE,eAAgB,CADhB,UAwCD,CA7BC,+CAEC,yEACD,CAEA,oCACC,eACD,CAEA,mCACC,oDAAqD,CACrD,yCAaD,CAXC,0CACC,eACD,CAEA,2DACC,0DACD,CAEA,iFACC,4CACD,CAGD,qDACC,uDACD,CAMA,yCACC,0CAA2C,CAC3C,aAMD,CAJC,iEACC,uDAAwD,CACxD,aACD,CAKH,uBAGC,sCAAuC,CAFvC,UAAW,CACX,UAED", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../mixins/_unselectable.css";\n\n.ck.ck-list {\n\t@mixin ck-unselectable;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t& .ck-list__item,\n\t& .ck-list__separator {\n\t\tdisplay: block;\n\t}\n\n\t/* Make sure that whatever child of the list item gets focus, it remains on the\n\ttop. Thanks to that, styles like box-shadow, outline, etc. are not masked by\n\tadjacent list items. */\n\t& .ck-list__item > *:focus {\n\t\tposition: relative;\n\t\tz-index: var(--ck-z-default);\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Makes element unselectable.\n */\n@define-mixin ck-unselectable {\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_disabled.css";\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_shadow.css";\n\n.ck.ck-list {\n\t@mixin ck-rounded-corners;\n\n\tlist-style-type: none;\n\tbackground: var(--ck-color-list-background);\n}\n\n.ck.ck-list__item {\n\tcursor: default;\n\tmin-width: 12em;\n\n\t& .ck-button {\n\t\tmin-height: unset;\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t\tborder-radius: 0;\n\n\t\t/* List items should have the same height. Use absolute units to make sure it is so\n\t\t because e.g. different heading styles may have different height\n\t\t https://github.com/ckeditor/ckeditor5-heading/issues/63 */\n\t\tpadding:\n\t\t\tcalc(.2 * var(--ck-line-height-base) * var(--ck-font-size-base))\n\t\t\tcalc(.4 * var(--ck-line-height-base) * var(--ck-font-size-base));\n\n\t\t& .ck-button__label {\n\t\t\t/* https://github.com/ckeditor/ckeditor5-heading/issues/63 */\n\t\t\tline-height: calc(1.2 * var(--ck-line-height-base) * var(--ck-font-size-base));\n\t\t}\n\n\t\t&:active {\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&.ck-on {\n\t\t\tbackground: var(--ck-color-list-button-on-background);\n\t\t\tcolor: var(--ck-color-list-button-on-text);\n\n\t\t\t&:active {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n\t\t\t&:hover:not(.ck-disabled) {\n\t\t\t\tbackground: var(--ck-color-list-button-on-background-focus);\n\t\t\t}\n\n\t\t\t&:focus:not(.ck-switchbutton):not(.ck-disabled) {\n\t\t\t\tborder-color: var(--ck-color-base-background);\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(.ck-disabled) {\n\t\t\tbackground: var(--ck-color-list-button-hover-background);\n\t\t}\n\t}\n\n\t/* It\'s unnecessary to change the background/text of a switch toggle; it has different ways\n\tof conveying its state (like the switcher) */\n\t& .ck-switchbutton {\n\t\t&.ck-on {\n\t\t\tbackground: var(--ck-color-list-background);\n\t\t\tcolor: inherit;\n\n\t\t\t&:hover:not(.ck-disabled) {\n\t\t\t\tbackground: var(--ck-color-list-button-hover-background);\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-list__separator {\n\theight: 1px;\n\twidth: 100%;\n\tbackground: var(--ck-color-base-border);\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 8793: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-border-width:1px;--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px;--ck-balloon-arrow-drop-shadow:0 2px 2px var(--ck-color-shadow-drop)}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{background:var(--ck-color-panel-background);border:var(--ck-balloon-border-width) solid var(--ck-color-panel-border);box-shadow:var(--ck-drop-shadow),0 0;min-height:15px}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{border-style:solid;height:0;width:0}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-width:0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_n]:before{border-color:transparent transparent var(--ck-color-panel-border) transparent;margin-top:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_n]:after{border-color:transparent transparent var(--ck-color-panel-background) transparent;margin-top:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-width:var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-color:var(--ck-color-panel-border) transparent transparent;filter:drop-shadow(var(--ck-balloon-arrow-drop-shadow));margin-bottom:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_s]:after{border-color:var(--ck-color-panel-background) transparent transparent transparent;margin-bottom:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_e]:after,.ck.ck-balloon-panel[class*=arrow_e]:before{border-width:var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_e]:before{border-color:transparent transparent transparent var(--ck-color-panel-border);margin-right:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_e]:after{border-color:transparent transparent transparent var(--ck-color-panel-background);margin-right:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:after,.ck.ck-balloon-panel[class*=arrow_w]:before{border-width:var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0}.ck.ck-balloon-panel[class*=arrow_w]:before{border-color:transparent var(--ck-color-panel-border) transparent transparent;margin-left:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_w]:after{border-color:transparent var(--ck-color-panel-background) transparent transparent;margin-left:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);right:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);margin-right:calc(var(--ck-balloon-arrow-half-width)*2);right:25%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{margin-right:calc(var(--ck-balloon-arrow-half-width)*2);right:25%;top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:before{margin-top:calc(var(--ck-balloon-arrow-half-width)*-1);right:calc(var(--ck-balloon-arrow-height)*-1);top:50%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:before{left:calc(var(--ck-balloon-arrow-height)*-1);margin-top:calc(var(--ck-balloon-arrow-half-width)*-1);top:50%}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/panel/balloonpanel.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/panel/balloonpanel.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AAKA,MAEC,8DACD,CAEA,qBACC,YAAa,CACb,iBAAkB,CAElB,yBAyCD,CAtCE,+GAEC,UAAW,CACX,iBACD,CAEA,wDACC,6CACD,CAEA,uDACC,uDACD,CAIA,4CACC,6CACD,CAEA,2CACC,uDACD,CAIA,4CACC,6CACD,CAEA,2CACC,uDACD,CAGD,8CACC,aACD,CC9CD,MACC,6BAA8B,CAC9B,6BAA8B,CAC9B,8BAA+B,CAC/B,iCAAkC,CAClC,oEACD,CAEA,qBCLC,eDmMD,CA9LA,iFCDE,qCD+LF,CA9LA,qBAMC,2CAA4C,CAC5C,wEAAyE,CEdzE,oCAA8B,CFW9B,eA0LD,CApLE,+GAIC,kBAAmB,CADnB,QAAS,CADT,OAGD,CAIA,uFAEC,mHACD,CAEA,4CACC,6EAA8E,CAC9E,kDACD,CAEA,2CACC,iFAAkF,CAClF,gFACD,CAIA,uFAEC,mHACD,CAEA,4CACC,iEAAkE,CAClE,uDAAwD,CACxD,qDACD,CAEA,2CACC,iFAAkF,CAClF,mFACD,CAIA,uFAEC,mHACD,CAEA,4CACC,6EAA8E,CAC9E,oDACD,CAEA,2CACC,iFAAkF,CAClF,kFACD,CAIA,uFAEC,mHACD,CAEA,4CACC,6EAA8E,CAC9E,mDACD,CAEA,2CACC,iFAAkF,CAClF,iFACD,CAIA,yGAEC,QAAS,CACT,uDAA0D,CAC1D,2CACD,CAIA,2GAEC,+CAAkD,CAClD,2CACD,CAIA,2GAEC,gDAAmD,CACnD,2CACD,CAIA,yGAIC,8CAAiD,CAFjD,QAAS,CACT,uDAED,CAIA,2GAGC,8CAAiD,CADjD,+CAED,CAIA,2GAGC,8CAAiD,CADjD,gDAED,CAIA,6GAIC,8CAAiD,CADjD,uDAA0D,CAD1D,SAGD,CAIA,6GAIC,8CAAiD,CAFjD,QAAS,CACT,sDAED,CAIA,6GAGC,uDAA0D,CAD1D,SAAU,CAEV,2CACD,CAIA,6GAEC,QAAS,CACT,sDAAyD,CACzD,2CACD,CAIA,yGAGC,sDAAyD,CADzD,6CAAgD,CAEhD,OACD,CAIA,yGAEC,4CAA+C,CAC/C,sDAAyD,CACzD,OACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/* Make sure the balloon arrow does not float over its children. */\n\t--ck-balloon-panel-arrow-z-index: calc(var(--ck-z-default) - 3);\n}\n\n.ck.ck-balloon-panel {\n\tdisplay: none;\n\tposition: absolute;\n\n\tz-index: var(--ck-z-modal);\n\n\t&.ck-balloon-panel_with-arrow {\n\t\t&::before,\n\t\t&::after {\n\t\t\tcontent: "";\n\t\t\tposition: absolute;\n\t\t}\n\n\t\t&::before {\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&[class*="arrow_n"] {\n\t\t&::before {\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&[class*="arrow_s"] {\n\t\t&::before {\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_visible {\n\t\tdisplay: block;\n\t}\n}\n', '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "../../../mixins/_shadow.css";\n\n:root {\n\t--ck-balloon-border-width: 1px;\n\t--ck-balloon-arrow-offset: 2px;\n\t--ck-balloon-arrow-height: 10px;\n\t--ck-balloon-arrow-half-width: 8px;\n\t--ck-balloon-arrow-drop-shadow: 0 2px 2px var(--ck-color-shadow-drop);\n}\n\n.ck.ck-balloon-panel {\n\t@mixin ck-rounded-corners;\n\t@mixin ck-drop-shadow;\n\n\tmin-height: 15px;\n\n\tbackground: var(--ck-color-panel-background);\n\tborder: var(--ck-balloon-border-width) solid var(--ck-color-panel-border);\n\n\t&.ck-balloon-panel_with-arrow {\n\t\t&::before,\n\t\t&::after {\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t\tborder-style: solid;\n\t\t}\n\t}\n\n\t&[class*="arrow_n"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent transparent var(--ck-color-panel-border) transparent;\n\t\t\tmargin-top: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent transparent var(--ck-color-panel-background) transparent;\n\t\t\tmargin-top: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&[class*="arrow_s"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: var(--ck-color-panel-border) transparent transparent;\n\t\t\tfilter: drop-shadow(var(--ck-balloon-arrow-drop-shadow));\n\t\t\tmargin-bottom: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: var(--ck-color-panel-background) transparent transparent transparent;\n\t\t\tmargin-bottom: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&[class*="arrow_e"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent transparent transparent var(--ck-color-panel-border);\n\t\t\tmargin-right: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent transparent transparent var(--ck-color-panel-background);\n\t\t\tmargin-right: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&[class*="arrow_w"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0;\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent var(--ck-color-panel-border) transparent transparent;\n\t\t\tmargin-left: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent var(--ck-color-panel-background) transparent transparent;\n\t\t\tmargin-left: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_n {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 50%;\n\t\t\tmargin-left: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_ne {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_s {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 50%;\n\t\t\tmargin-left: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_sw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_se {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_sme {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: 25%;\n\t\t\tmargin-right: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_smw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 25%;\n\t\t\tmargin-left: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nme {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: 25%;\n\t\t\tmargin-right: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nmw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 25%;\n\t\t\tmargin-left: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_e {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t\tmargin-top: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: 50%;\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_w {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t\tmargin-top: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: 50%;\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4650: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-balloon-rotator__navigation{align-items:center;display:flex;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-left:var(--ck-spacing-small);margin-right:var(--ck-spacing-standard)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/panel/balloonrotator.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/panel/balloonrotator.css"], + names: [], + mappings: "AAKA,oCAEC,kBAAmB,CADnB,YAAa,CAEb,sBACD,CAKA,6CACC,sBACD,CCXA,oCACC,6CAA8C,CAC9C,sDAAuD,CACvD,iCAgBD,CAbC,sCAGC,qCAAsC,CAFtC,oCAAqC,CACrC,kCAED,CAGA,iEAIC,mCAAoC,CAHpC,uCAID,CAMA,2DACC,eACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-balloon-rotator__navigation {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Buttons inside a toolbar should be centered when rotator bar is wider.\n * See: https://github.com/ckeditor/ckeditor5-ui/issues/495\n */\n.ck .ck-balloon-rotator__content .ck-toolbar {\n\tjustify-content: center;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-balloon-rotator__navigation {\n\tbackground: var(--ck-color-toolbar-background);\n\tborder-bottom: 1px solid var(--ck-color-toolbar-border);\n\tpadding: 0 var(--ck-spacing-small);\n\n\t/* Let's keep similar appearance to `ck-toolbar`. */\n\t& > * {\n\t\tmargin-right: var(--ck-spacing-small);\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t}\n\n\t/* Gives counter more breath than buttons. */\n\t& .ck-balloon-rotator__counter {\n\t\tmargin-right: var(--ck-spacing-standard);\n\n\t\t/* We need to use smaller margin because of previous button's right margin. */\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n}\n\n.ck .ck-balloon-rotator__content {\n\n\t/* Disable default annotation shadow inside rotator with fake panels. */\n\t& .ck.ck-annotation-wrapper {\n\t\tbox-shadow: none;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 7676: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);box-shadow:var(--ck-drop-shadow),0 0;height:100%;min-height:15px;width:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/panel/fakepanel.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/panel/fakepanel.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AAKA,mBACC,iBAAkB,CAGlB,mCACD,CAEA,uBACC,iBACD,CAEA,mCACC,SACD,CAEA,oCACC,SACD,CCfA,MACC,6CAA8C,CAC9C,2CACD,CAGA,uBAKC,2CAA4C,CAC5C,6CAA8C,CAC9C,qCAAsC,CCXtC,oCAA8B,CDc9B,WAAY,CAPZ,eAAgB,CAMhB,UAED,CAEA,mCACC,0DAA2D,CAC3D,uDACD,CAEA,oCACC,kEAAqE,CACrE,+DACD,CACA,oCACC,kEAAqE,CACrE,+DACD,CAGA,yIAGC,4CACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-fake-panel {\n\tposition: absolute;\n\n\t/* Fake panels should be placed under main balloon content. */\n\tz-index: calc(var(--ck-z-modal) - 1);\n}\n\n.ck .ck-fake-panel div {\n\tposition: absolute;\n}\n\n.ck .ck-fake-panel div:nth-child( 1 ) {\n\tz-index: 2;\n}\n\n.ck .ck-fake-panel div:nth-child( 2 ) {\n\tz-index: 1;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_shadow.css";\n\n:root {\n\t--ck-balloon-fake-panel-offset-horizontal: 6px;\n\t--ck-balloon-fake-panel-offset-vertical: 6px;\n}\n\n/* Let\'s use `.ck-balloon-panel` appearance. See: balloonpanel.css. */\n.ck .ck-fake-panel div {\n\t@mixin ck-drop-shadow;\n\n\tmin-height: 15px;\n\n\tbackground: var(--ck-color-panel-background);\n\tborder: 1px solid var(--ck-color-panel-border);\n\tborder-radius: var(--ck-border-radius);\n\n\twidth: 100%;\n\theight: 100%;\n}\n\n.ck .ck-fake-panel div:nth-child( 1 ) {\n\tmargin-left: var(--ck-balloon-fake-panel-offset-horizontal);\n\tmargin-top: var(--ck-balloon-fake-panel-offset-vertical);\n}\n\n.ck .ck-fake-panel div:nth-child( 2 ) {\n\tmargin-left: calc(var(--ck-balloon-fake-panel-offset-horizontal) * 2);\n\tmargin-top: calc(var(--ck-balloon-fake-panel-offset-vertical) * 2);\n}\n.ck .ck-fake-panel div:nth-child( 3 ) {\n\tmargin-left: calc(var(--ck-balloon-fake-panel-offset-horizontal) * 3);\n\tmargin-top: calc(var(--ck-balloon-fake-panel-offset-vertical) * 3);\n}\n\n/* If balloon is positioned above element, we need to move fake panel to the top. */\n.ck .ck-balloon-panel_arrow_s + .ck-fake-panel,\n.ck .ck-balloon-panel_arrow_se + .ck-fake-panel,\n.ck .ck-balloon-panel_arrow_sw + .ck-fake-panel {\n\t--ck-balloon-fake-panel-offset-vertical: -6px;\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5868: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{position:fixed;top:0;z-index:var(--ck-z-modal)}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{position:absolute;top:auto}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{border-top-left-radius:0;border-top-right-radius:0;border-width:0 1px 1px;box-shadow:var(--ck-drop-shadow),0 0}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/panel/stickypanel.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/panel/stickypanel.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AAMC,qDAEC,cAAe,CACf,KAAM,CAFN,yBAGD,CAEA,kEAEC,iBAAkB,CADlB,QAED,CCPA,qDAIC,wBAAyB,CACzB,yBAA0B,CAF1B,sBAAuB,CCFxB,oCDKA", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-sticky-panel {\n\t& .ck-sticky-panel__content_sticky {\n\t\tz-index: var(--ck-z-modal); /* #315 */\n\t\tposition: fixed;\n\t\ttop: 0;\n\t}\n\n\t& .ck-sticky-panel__content_sticky_bottom-limit {\n\t\ttop: auto;\n\t\tposition: absolute;\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_shadow.css";\n\n.ck.ck-sticky-panel {\n\t& .ck-sticky-panel__content_sticky {\n\t\t@mixin ck-drop-shadow;\n\n\t\tborder-width: 0 1px 1px;\n\t\tborder-top-left-radius: 0;\n\t\tborder-top-right-radius: 0;\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 6764: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck-vertical-form .ck-button:after{bottom:-1px;content:"";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck-vertical-form .ck-button:focus:after{display:none}@media screen and (max-width:600px){.ck.ck-responsive-form .ck-button:after{bottom:-1px;content:"";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck.ck-responsive-form .ck-button:focus:after{display:none}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-responsive-form{padding:0;width:calc(var(--ck-input-width)*.8)}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){border-radius:0;margin-top:var(--ck-spacing-large);padding:var(--ck-spacing-standard)}.ck.ck-responsive-form>.ck-button:last-child:not(:focus),.ck.ck-responsive-form>.ck-button:nth-last-child(2):not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-responsive-form>.ck-button:last-child,[dir=ltr] .ck.ck-responsive-form>.ck-button:nth-last-child(2),[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2){margin-left:0}[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child:last-of-type,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2):last-of-type{border-right:1px solid var(--ck-color-base-border)}}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/responsive-form/responsiveform.css", "webpack://./../ckeditor5-ui/theme/mixins/_rwd.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/responsive-form/responsiveform.css"], + names: [], + mappings: "AAQC,mCAMC,WAAY,CALZ,UAAW,CAEX,iBAAkB,CAClB,UAAW,CACX,QAAS,CAHT,OAAQ,CAKR,SACD,CAEA,yCACC,YACD,CCdA,oCDoBE,wCAMC,WAAY,CALZ,UAAW,CAEX,iBAAkB,CAClB,UAAW,CACX,QAAS,CAHT,OAAQ,CAKR,SACD,CAEA,8CACC,YACD,CC9BF,CCAD,qDACC,kDACD,CAEA,uBACC,+BAmED,CAjEC,6BAEC,YACD,CASC,uGACC,sCACD,CDvBD,oCCMD,uBAqBE,SAAU,CACV,oCA8CF,CA5CE,8CACC,wDAWD,CATC,6DACC,WAAY,CACZ,UACD,CAGA,4EACC,kBACD,CAKA,0DACC,kDACD,CAGD,iGAIC,eAAgB,CADhB,kCAAmC,CADnC,kCAmBD,CAfC,yHACC,gDACD,CARD,0OAeE,aAMF,CAJE,+IACC,kDACD,CDpEH", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck-vertical-form .ck-button {\n\t&::after {\n\t\tcontent: "";\n\t\twidth: 0;\n\t\tposition: absolute;\n\t\tright: -1px;\n\t\ttop: -1px;\n\t\tbottom: -1px;\n\t\tz-index: 1;\n\t}\n\n\t&:focus::after {\n\t\tdisplay: none;\n\t}\n}\n\n.ck.ck-responsive-form {\n\t@mixin ck-media-phone {\n\t\t& .ck-button {\n\t\t\t&::after {\n\t\t\t\tcontent: "";\n\t\t\t\twidth: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: -1px;\n\t\t\t\ttop: -1px;\n\t\t\t\tbottom: -1px;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\n\t\t\t&:focus::after {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck-vertical-form > .ck-button:nth-last-child(2)::after {\n\tborder-right: 1px solid var(--ck-color-base-border);\n}\n\n.ck.ck-responsive-form {\n\tpadding: var(--ck-spacing-large);\n\n\t&:focus {\n\t\t/* See: https://github.com/ckeditor/ckeditor5/issues/4773 */\n\t\toutline: none;\n\t}\n\n\t@mixin ck-dir ltr {\n\t\t& > :not(:first-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-dir rtl {\n\t\t& > :not(:last-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@mixin ck-media-phone {\n\t\tpadding: 0;\n\t\twidth: calc(.8 * var(--ck-input-width));\n\n\t\t& .ck-labeled-field-view {\n\t\t\tmargin: var(--ck-spacing-large) var(--ck-spacing-large) 0;\n\n\t\t\t& .ck-input-text {\n\t\t\t\tmin-width: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t/* Let the long error messages wrap in the narrow form. */\n\t\t\t& .ck-labeled-field-view__error {\n\t\t\t\twhite-space: normal;\n\t\t\t}\n\t\t}\n\n\t\t/* Styles for two last buttons in the form (save&cancel, edit&unlink, etc.). */\n\t\t& > .ck-button:nth-last-child(2) {\n\t\t\t&::after {\n\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\t\t}\n\n\t\t& > .ck-button:nth-last-child(1),\n\t\t& > .ck-button:nth-last-child(2) {\n\t\t\tpadding: var(--ck-spacing-standard);\n\t\t\tmargin-top: var(--ck-spacing-large);\n\t\t\tborder-radius: 0;\n\n\t\t\t&:not(:focus) {\n\t\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t@mixin ck-dir ltr {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t@mixin ck-dir rtl {\n\t\t\t\tmargin-left: 0;\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 9695: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-block-toolbar-button{position:absolute;z-index:var(--ck-z-default)}:root{--ck-color-block-toolbar-button:var(--ck-color-text);--ck-block-toolbar-button-size:var(--ck-font-size-normal)}.ck.ck-block-toolbar-button{color:var(--ck-color-block-toolbar-button);font-size:var(--ck-block-toolbar-size)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/toolbar/blocktoolbar.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/toolbar/blocktoolbar.css"], + names: [], + mappings: "AAKA,4BACC,iBAAkB,CAClB,2BACD,CCHA,MACC,oDAAqD,CACrD,yDACD,CAEA,4BACC,0CAA2C,CAC3C,sCACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-block-toolbar-button {\n\tposition: absolute;\n\tz-index: var(--ck-z-default);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-block-toolbar-button: var(--ck-color-text);\n\t--ck-block-toolbar-button-size: var(--ck-font-size-normal);\n}\n\n.ck.ck-block-toolbar-button {\n\tcolor: var(--ck-color-block-toolbar-button);\n\tfont-size: var(--ck-block-toolbar-size);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 5542: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-toolbar{align-items:center;display:flex;flex-flow:row nowrap;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-toolbar>.ck-toolbar__items{align-items:center;display:flex;flex-flow:row wrap;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar .ck-toolbar__line-break{flex-basis:100%}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);border:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;background:var(--ck-color-toolbar-border);margin-bottom:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);min-width:1px;width:1px}.ck.ck-toolbar .ck-toolbar__line-break{height:0}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break){margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break),.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-bottom:var(--ck-spacing-small);margin-top:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{border-radius:0;margin:0;width:100%}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-dropdown__panel{min-width:auto}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-button>.ck-button__label{max-width:7em;width:auto}.ck.ck-toolbar:focus{outline:none}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar.ck-toolbar_compact[dir=rtl]>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.ck.ck-toolbar.ck-toolbar_compact[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-bottom-right-radius:0;border-top-right-radius:0}.ck.ck-toolbar.ck-toolbar_grouping[dir=rtl]>.ck-toolbar__items:not(:empty):not(:only-child),.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar.ck-toolbar_compact[dir=ltr]>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.ck.ck-toolbar.ck-toolbar_compact[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.ck.ck-toolbar.ck-toolbar_grouping[dir=ltr]>.ck-toolbar__items:not(:empty):not(:only-child),.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/toolbar/toolbar.css", "webpack://./../ckeditor5-ui/theme/mixins/_unselectable.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/toolbar/toolbar.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_rounded.css"], + names: [], + mappings: "AAOA,eAKC,kBAAmB,CAFnB,YAAa,CACb,oBAAqB,CCFrB,qBAAsB,CACtB,wBAAyB,CACzB,oBAAqB,CACrB,gBD6CD,CA3CC,kCAGC,kBAAmB,CAFnB,YAAa,CACb,kBAAmB,CAEnB,WAED,CAEA,yCACC,oBAWD,CAJC,yGAEC,YACD,CAGD,uCACC,eACD,CAEA,sDACC,gBACD,CAEA,sDACC,qBACD,CAEA,sDACC,gBACD,CAGC,yFACC,YACD,CE/CF,eCGC,eDwGD,CA3GA,qECOE,qCDoGF,CA3GA,eAGC,6CAA8C,CAE9C,+CAAgD,CADhD,iCAuGD,CApGC,yCACC,kBAAmB,CAGnB,yCAA0C,CAO1C,qCAAsC,CADtC,kCAAmC,CAPnC,aAAc,CADd,SAUD,CAEA,uCACC,QACD,CAGC,gEAEC,oCACD,CAIA,kEACC,YACD,CAGD,gHAIC,qCAAsC,CADtC,kCAED,CAEA,mCAEC,SAaD,CAVC,0DAQC,eAAgB,CAHhB,QAAS,CAHT,UAOD,CAGD,kCAEC,SAWD,CATC,uDAEC,QAMD,CAHC,yFACC,eACD,CASD,kFACC,mCACD,CAMA,wEACC,cACD,CAEA,iFACC,aAAc,CACd,UACD,CAGD,qBACC,YACD,CAtGD,qCAyGE,QAEF,CAYC,+FACC,cACD,CAEA,iJAEC,mCACD,CAEA,qHACC,aACD,CAIC,6JAEC,2BAA4B,CAD5B,wBAED,CAGA,2JAEC,4BAA6B,CAD7B,yBAED,CASD,8RACC,mCACD,CAWA,qHACC,cACD,CAIC,6JAEC,4BAA6B,CAD7B,yBAED,CAGA,2JAEC,2BAA4B,CAD5B,wBAED,CASD,8RACC,oCACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../mixins/_unselectable.css";\n\n.ck.ck-toolbar {\n\t@mixin ck-unselectable;\n\n\tdisplay: flex;\n\tflex-flow: row nowrap;\n\talign-items: center;\n\n\t& > .ck-toolbar__items {\n\t\tdisplay: flex;\n\t\tflex-flow: row wrap;\n\t\talign-items: center;\n\t\tflex-grow: 1;\n\n\t}\n\n\t& .ck.ck-toolbar__separator {\n\t\tdisplay: inline-block;\n\n\t\t/*\n\t\t * A leading or trailing separator makes no sense (separates from nothing on one side).\n\t\t * For instance, it can happen when toolbar items (also separators) are getting grouped one by one and\n\t\t * moved to another toolbar in the dropdown.\n\t\t */\n\t\t&:first-child,\n\t\t&:last-child {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t& .ck-toolbar__line-break {\n\t\tflex-basis: 100%;\n\t}\n\n\t&.ck-toolbar_grouping > .ck-toolbar__items {\n\t\tflex-wrap: nowrap;\n\t}\n\n\t&.ck-toolbar_vertical > .ck-toolbar__items {\n\t\tflex-direction: column;\n\t}\n\n\t&.ck-toolbar_floating > .ck-toolbar__items {\n\t\tflex-wrap: nowrap;\n\t}\n\n\t& > .ck.ck-toolbar__grouped-dropdown {\n\t\t& > .ck-dropdown__button .ck-dropdown__arrow {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Makes element unselectable.\n */\n@define-mixin ck-unselectable {\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n.ck.ck-toolbar {\n\t@mixin ck-rounded-corners;\n\n\tbackground: var(--ck-color-toolbar-background);\n\tpadding: 0 var(--ck-spacing-small);\n\tborder: 1px solid var(--ck-color-toolbar-border);\n\n\t& .ck.ck-toolbar__separator {\n\t\talign-self: stretch;\n\t\twidth: 1px;\n\t\tmin-width: 1px;\n\t\tbackground: var(--ck-color-toolbar-border);\n\n\t\t/*\n\t\t * These margins make the separators look better in balloon toolbars (when aligned with the "tip").\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/7493.\n\t\t */\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t}\n\n\t& .ck-toolbar__line-break {\n\t\theight: 0;\n\t}\n\n\t& > .ck-toolbar__items {\n\t\t& > *:not(.ck-toolbar__line-break) {\n\t\t\t/* (#11) Separate toolbar items. */\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\n\t\t/* Don\'t display a separator after an empty items container, for instance,\n\t\twhen all items were grouped */\n\t\t&:empty + .ck.ck-toolbar__separator {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t& > .ck-toolbar__items > *:not(.ck-toolbar__line-break),\n\t& > .ck.ck-toolbar__grouped-dropdown {\n\t\t/* Make sure items wrapped to the next line have v-spacing */\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t}\n\n\t&.ck-toolbar_vertical {\n\t\t/* Items in a vertical toolbar span the entire width. */\n\t\tpadding: 0;\n\n\t\t/* Specificity matters here. See https://github.com/ckeditor/ckeditor5-theme-lark/issues/168. */\n\t\t& > .ck-toolbar__items > .ck {\n\t\t\t/* Items in a vertical toolbar should span the horizontal space. */\n\t\t\twidth: 100%;\n\n\t\t\t/* Items in a vertical toolbar should have no margin. */\n\t\t\tmargin: 0;\n\n\t\t\t/* Items in a vertical toolbar span the entire width so rounded corners are pointless. */\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n\n\t&.ck-toolbar_compact {\n\t\t/* No spacing around items. */\n\t\tpadding: 0;\n\n\t\t& > .ck-toolbar__items > * {\n\t\t\t/* Compact toolbar items have no spacing between them. */\n\t\t\tmargin: 0;\n\n\t\t\t/* "Middle" children should have no rounded corners. */\n\t\t\t&:not(:first-child):not(:last-child) {\n\t\t\t\tborder-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t& > .ck.ck-toolbar__grouped-dropdown {\n\t\t/*\n\t\t * Dropdown button has asymmetric padding to fit the arrow.\n\t\t * This button has no arrow so let\'s revert that padding back to normal.\n\t\t */\n\t\t& > .ck.ck-button.ck-dropdown__button {\n\t\t\tpadding-left: var(--ck-spacing-tiny);\n\t\t}\n\t}\n\n\t/* A drop-down containing the nested toolbar with configured items. */\n\t& .ck-toolbar__nested-toolbar-dropdown {\n\t\t/* Prevent empty space in the panel when the dropdown label is visible and long but the toolbar has few items. */\n\t\t& > .ck-dropdown__panel {\n\t\t\tmin-width: auto;\n\t\t}\n\n\t\t& > .ck-button > .ck-button__label {\n\t\t\tmax-width: 7em;\n\t\t\twidth: auto;\n\t\t}\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t@nest .ck-toolbar-container & {\n\t\tborder: 0;\n\t}\n}\n\n/* stylelint-disable */\n\n/*\n * Styles for RTL toolbars.\n *\n * Note: In some cases (e.g. a decoupled editor), the toolbar has its own "dir"\n * because its parent is not controlled by the editor framework.\n */\n[dir="rtl"] .ck.ck-toolbar,\n.ck.ck-toolbar[dir="rtl"] {\n\t& > .ck-toolbar__items > .ck {\n\t\tmargin-right: 0;\n\t}\n\n\t&:not(.ck-toolbar_compact) > .ck-toolbar__items > .ck {\n\t\t/* (#11) Separate toolbar items. */\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n\n\t& > .ck-toolbar__items > .ck:last-child {\n\t\tmargin-left: 0;\n\t}\n\n\t&.ck-toolbar_compact > .ck-toolbar__items > .ck {\n\t\t/* No rounded corners on the right side of the first child. */\n\t\t&:first-child {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\n\t\t/* No rounded corners on the left side of the last child. */\n\t\t&:last-child {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\t}\n\n\t/* Separate the the separator form the grouping dropdown when some items are grouped. */\n\t& > .ck.ck-toolbar__separator {\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n\n\t/* Some spacing between the items and the separator before the grouped items dropdown. */\n\t&.ck-toolbar_grouping > .ck-toolbar__items:not(:empty):not(:only-child) {\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n}\n\n/*\n * Styles for LTR toolbars.\n *\n * Note: In some cases (e.g. a decoupled editor), the toolbar has its own "dir"\n * because its parent is not controlled by the editor framework.\n */\n[dir="ltr"] .ck.ck-toolbar,\n.ck.ck-toolbar[dir="ltr"] {\n\t& > .ck-toolbar__items > .ck:last-child {\n\t\tmargin-right: 0;\n\t}\n\n\t&.ck-toolbar_compact > .ck-toolbar__items > .ck {\n\t\t/* No rounded corners on the right side of the first child. */\n\t\t&:first-child {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t/* No rounded corners on the left side of the last child. */\n\t\t&:last-child {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\t}\n\n\t/* Separate the the separator form the grouping dropdown when some items are grouped. */\n\t& > .ck.ck-toolbar__separator {\n\t\tmargin-right: var(--ck-spacing-small);\n\t}\n\n\t/* Some spacing between the items and the separator before the grouped items dropdown. */\n\t&.ck-toolbar_grouping > .ck-toolbar__items:not(:empty):not(:only-child) {\n\t\tmargin-right: var(--ck-spacing-small);\n\t}\n}\n\n/* stylelint-enable */\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Implements rounded corner interface for .ck-rounded-corners class.\n *\n * @see $ck-border-radius\n */\n@define-mixin ck-rounded-corners {\n\tborder-radius: 0;\n\n\t@nest .ck-rounded-corners &,\n\t&.ck-rounded-corners {\n\t\tborder-radius: var(--ck-border-radius);\n\t\t@mixin-content;\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3332: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck.ck-balloon-panel.ck-tooltip{--ck-balloon-border-width:0px;--ck-balloon-arrow-offset:0px;--ck-balloon-arrow-half-width:4px;--ck-balloon-arrow-height:4px;--ck-color-panel-background:var(--ck-color-tooltip-background);padding:0 var(--ck-spacing-medium);pointer-events:none;z-index:calc(var(--ck-z-modal) + 100)}.ck.ck-balloon-panel.ck-tooltip .ck-tooltip__text{color:var(--ck-color-tooltip-text);font-size:.9em;line-height:1.5}.ck.ck-balloon-panel.ck-tooltip{box-shadow:none}.ck.ck-balloon-panel.ck-tooltip:before{display:none}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/components/tooltip/tooltip.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/components/tooltip/tooltip.css"], + names: [], + mappings: "AAKA,gCCGC,6BAA8B,CAC9B,6BAA8B,CAC9B,iCAAkC,CAClC,6BAA8B,CAC9B,8DAA+D,CAE/D,kCAAmC,CDPnC,mBAAoB,CAEpB,qCACD,CCMC,kDAGC,kCAAmC,CAFnC,cAAe,CACf,eAED,CAbD,gCAgBC,eAMD,CAHC,uCACC,YACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-balloon-panel.ck-tooltip {\n\t/* Keep tooltips transparent for any interactions. */\n\tpointer-events: none;\n\n\tz-index: calc( var(--ck-z-modal) + 100 );\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../../../mixins/_rounded.css";\n\n.ck.ck-balloon-panel.ck-tooltip {\n\t--ck-balloon-border-width: 0px;\n\t--ck-balloon-arrow-offset: 0px;\n\t--ck-balloon-arrow-half-width: 4px;\n\t--ck-balloon-arrow-height: 4px;\n\t--ck-color-panel-background: var(--ck-color-tooltip-background);\n\n\tpadding: 0 var(--ck-spacing-medium);\n\n\t& .ck-tooltip__text {\n\t\tfont-size: .9em;\n\t\tline-height: 1.5;\n\t\tcolor: var(--ck-color-tooltip-text);\n\t}\n\n\t/* Reset balloon panel styles */\n\tbox-shadow: none;\n\n\t/* Hide the default shadow of the .ck-balloon-panel tip */\n\t&::before {\n\t\tdisplay: none;\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 4793: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck-hidden{display:none!important}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset,.ck.ck-reset_all{box-sizing:border-box;height:auto;position:static;width:auto}:root{--ck-z-default:1;--ck-z-modal:calc(var(--ck-z-default) + 999)}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-line-height:10px;--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);background:var(--ck-powered-by-background);box-shadow:none;min-height:unset;z-index:calc(var(--ck-z-modal) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{align-items:center;cursor:pointer;display:flex;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);opacity:.66;padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{color:var(--ck-powered-by-text-color);cursor:pointer;font-size:7.5px;font-weight:700;letter-spacing:-.2px;line-height:normal;margin-right:4px;padding-left:2px;text-transform:uppercase}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;display:block}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:transparent}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218,81.8%,56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:rgba(119,186,248,.3);--ck-color-focus-error-shadow:rgba(255,64,31,.3);--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:rgba(0,0,0,.15);--ck-color-shadow-drop-active:rgba(0,0,0,.2);--ck-color-shadow-inner:rgba(0,0,0,.1);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:rgba(0,0,0,.1);--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:rgba(31,176,255,.1);--ck-color-link-fake-selection:rgba(31,176,255,.3);--ck-color-highlight-background:#ff0;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:0.7em;--ck-font-size-small:0.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset,.ck.ck-reset_all{word-wrap:break-word;background:transparent;border:0;margin:0;padding:0;text-decoration:none;transition:none;vertical-align:middle}.ck-reset_all :not(.ck-reset_all-excluded *),.ck.ck-reset_all{border-collapse:collapse;color:var(--ck-color-text);cursor:auto;float:none;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);text-align:left;white-space:nowrap}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all textarea:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:0.6em;--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-ui/theme/globals/_hidden.css", "webpack://./../ckeditor5-ui/theme/globals/_reset.css", "webpack://./../ckeditor5-ui/theme/globals/_zindex.css", "webpack://./../ckeditor5-ui/theme/globals/_transition.css", "webpack://./../ckeditor5-ui/theme/globals/_poweredby.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_colors.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_disabled.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_focus.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_fonts.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_reset.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_rounded.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_shadow.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-ui/globals/_spacing.css"], + names: [], + mappings: "AAQA,WAGC,sBACD,CCPA,2EAGC,qBAAsB,CAEtB,WAAY,CACZ,eAAgB,CAFhB,UAGD,CCPA,MACC,gBAAiB,CACjB,4CACD,CCAA,oDAEC,yBACD,CCNA,MACC,gCAAiC,CACjC,oCAAqC,CACrC,sCAAuC,CACvC,kCAA2C,CAC3C,qDAAsD,CACtD,+BAA4C,CAC5C,yDACD,CAEA,2CACC,qDAAsD,CAGtD,0CAA2C,CAD3C,eAAgB,CAEhB,gBAAiB,CACjB,mCAiDD,CA/CC,6DACC,4CAoCD,CAlCC,+DAGC,kBAAmB,CAFnB,cAAe,CACf,YAAa,CAGb,qBAAsB,CACtB,4CAA6C,CAF7C,WAAY,CAGZ,qFACD,CAEA,mFASC,qCAAsC,CAFtC,cAAe,CANf,eAAgB,CAIhB,eAAiB,CAHjB,oBAAqB,CAMrB,kBAAmB,CAFnB,gBAAiB,CAHjB,gBAAiB,CACjB,wBAOD,CAEA,sEAEC,cAAe,CADf,aAED,CAGC,qEACC,mBAAqB,CACrB,SACD,CAIF,mEACC,wBACD,CAEA,mEACC,2BAA4B,CAC5B,8CACD,CChED,MACC,kCAAmD,CACnD,+BAAoD,CACpD,8BAAkD,CAClD,8BAAuD,CACvD,6BAAmD,CACnD,yBAA+C,CAC/C,8BAAsD,CACtD,oCAA4D,CAC5D,6BAAkD,CAIlD,mDAA4D,CAC5D,qEAA+E,CAC/E,qCAA4D,CAC5D,qDAA8D,CAC9D,gDAAyD,CACzD,yCAAqD,CACrD,sCAAsD,CACtD,4CAA0D,CAC1D,sCAAsD,CAItD,gDAAuD,CACvD,kDAAiE,CACjE,mDAAkE,CAClE,yDAA8D,CAE9D,uCAA6D,CAC7D,6CAAoE,CACpE,8CAAoE,CACpE,gDAAiE,CACjE,kCAAyD,CAGzD,+DAAsE,CACtE,iDAAsE,CACtE,kDAAsE,CACtE,oDAAoE,CACpE,6DAAsE,CAEtE,8BAAoD,CACpD,gCAAqD,CAErD,+CAA8D,CAC9D,qDAAiE,CACjE,+EAAqF,CACrF,oDAAuE,CACvE,yEAA8E,CAC9E,oDAAgE,CAIhE,oEAA2E,CAC3E,4DAAoE,CAIpE,2DAAoE,CACpE,mDAA6D,CAC7D,wDAAgE,CAChE,+CAA0D,CAC1D,4CAA2D,CAC3D,4DAAoE,CACpE,sCAAsD,CAItD,0DAAmE,CACnE,uFAA6F,CAC7F,oEAA2E,CAC3E,0EAA+E,CAC/E,8DAAsE,CAItE,2DAAoE,CACpE,mDAA6D,CAI7D,6DAAsE,CACtE,qDAA+D,CAI/D,uDAAgE,CAChE,uDAAiE,CAIjE,0CAAyD,CAIzD,wCAA2D,CAI3D,+BAAoD,CACpD,uDAAmE,CACnE,kDAAgE,CAIhE,oCAAwD,CCvGxD,wBAAyB,CCAzB,0CAA2C,CAK3C,gGAAiG,CAKjG,4GAA6G,CAK7G,sGAAuG,CAKvG,sDAAuD,CCvBvD,wBAAyB,CACzB,6BAA8B,CAC9B,wDAA6D,CAE7D,yBAA0B,CAC1B,2BAA4B,CAC5B,yBAA0B,CAC1B,wBAAyB,CACzB,0BAA2B,CCJ3B,kCJuGD,CIjGA,2EAaC,oBAAqB,CANrB,sBAAuB,CADvB,QAAS,CAFT,QAAS,CACT,SAAU,CAGV,oBAAqB,CAErB,eAAgB,CADhB,qBAKD,CAKA,8DAGC,wBAAyB,CAEzB,0BAA2B,CAG3B,WAAY,CACZ,UAAW,CALX,iGAAkG,CAElG,eAAgB,CAChB,kBAGD,CAGC,qDACC,gBACD,CAEA,mDAEC,sBACD,CAEA,qDACC,oBACD,CAEA,mLAGC,WACD,CAEA,iNAGC,cACD,CAEA,qDAEC,yBAAoC,CADpC,YAED,CAEA,qEAGC,QAAQ,CADR,SAED,CAMD,8BAEC,gBACD,CCnFA,MACC,sBAAuB,CCAvB,gEAAiE,CAKjE,0DAA2D,CAK3D,wEAAyE,CCbzE,uBAA8B,CAC9B,mDAA2D,CAC3D,4CAAkD,CAClD,oDAA4D,CAC5D,mDAA2D,CAC3D,kDAA2D,CAC3D,yDFFD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A class which hides an element in DOM.\n */\n.ck-hidden {\n\t/* Override selector specificity. Otherwise, all elements with some display\n\tstyle defined will override this one, which is not a desired result. */\n\tdisplay: none !important;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-reset,\n.ck.ck-reset_all,\n.ck-reset_all *:not(.ck-reset_all-excluded *) {\n\tbox-sizing: border-box;\n\twidth: auto;\n\theight: auto;\n\tposition: static;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-z-default: 1;\n\t--ck-z-modal: calc( var(--ck-z-default) + 999 );\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A class that disables all transitions of the element and its children.\n */\n.ck-transitions-disabled,\n.ck-transitions-disabled * {\n\ttransition: none !important;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-powered-by-line-height: 10px;\n\t--ck-powered-by-padding-vertical: 2px;\n\t--ck-powered-by-padding-horizontal: 4px;\n\t--ck-powered-by-text-color: hsl(0, 0%, 31%);\n\t--ck-powered-by-border-radius: var(--ck-border-radius);\n\t--ck-powered-by-background: hsl(0, 0%, 100%);\n\t--ck-powered-by-border-color: var(--ck-color-focus-border);\n}\n\n.ck.ck-balloon-panel.ck-powered-by-balloon {\n\t--ck-border-radius: var(--ck-powered-by-border-radius);\n\n\tbox-shadow: none;\n\tbackground: var(--ck-powered-by-background);\n\tmin-height: unset;\n\tz-index: calc( var(--ck-z-modal) - 1 );\n\n\t& .ck.ck-powered-by {\n\t\tline-height: var(--ck-powered-by-line-height);\n\n\t\t& a {\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\topacity: .66;\n\t\t\tfilter: grayscale(80%);\n\t\t\tline-height: var(--ck-powered-by-line-height);\n\t\t\tpadding: var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal);\n\t\t}\n\n\t\t& .ck-powered-by__label {\n\t\t\tfont-size: 7.5px;\n\t\t\tletter-spacing: -.2px;\n\t\t\tpadding-left: 2px;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-right: 4px;\n\t\t\tcursor: pointer;\n\t\t\tline-height: normal;\n\t\t\tcolor: var(--ck-powered-by-text-color);\n\n\t\t}\n\n\t\t& .ck-icon {\n\t\t\tdisplay: block;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t&:hover {\n\t\t\t& a {\n\t\t\t\tfilter: grayscale(0%);\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n\n\t&[class*="position_inside"] {\n\t\tborder-color: transparent;\n\t}\n\n\t&[class*="position_border"] {\n\t\tborder: var(--ck-focus-ring);\n\t\tborder-color: var(--ck-powered-by-border-color);\n\t}\n}\n\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-base-foreground: \t\t\t\t\t\t\t\thsl(0, 0%, 98%);\n\t--ck-color-base-background: \t\t\t\t\t\t\t\thsl(0, 0%, 100%);\n\t--ck-color-base-border: \t\t\t\t\t\t\t\t\thsl(220, 6%, 81%);\n\t--ck-color-base-action: \t\t\t\t\t\t\t\t\thsl(104, 50.2%, 42.5%);\n\t--ck-color-base-focus: \t\t\t\t\t\t\t\t\t\thsl(209, 92%, 70%);\n\t--ck-color-base-text: \t\t\t\t\t\t\t\t\t\thsl(0, 0%, 20%);\n\t--ck-color-base-active: \t\t\t\t\t\t\t\t\thsl(218.1, 100%, 58%);\n\t--ck-color-base-active-focus:\t\t\t\t\t\t\t\thsl(218.2, 100%, 52.5%);\n\t--ck-color-base-error:\t\t\t\t\t\t\t\t\t\thsl(15, 100%, 43%);\n\n\t/* -- Generic colors ------------------------------------------------------------------------ */\n\n\t--ck-color-focus-border-coordinates: \t\t\t\t\t\t218, 81.8%, 56.9%;\n\t--ck-color-focus-border: \t\t\t\t\t\t\t\t\thsl(var(--ck-color-focus-border-coordinates));\n\t--ck-color-focus-outer-shadow:\t\t\t\t\t\t\t\thsl(212.4, 89.3%, 89%);\n\t--ck-color-focus-disabled-shadow:\t\t\t\t\t\t\thsla(209, 90%, 72%,.3);\n\t--ck-color-focus-error-shadow:\t\t\t\t\t\t\t\thsla(9,100%,56%,.3);\n\t--ck-color-text: \t\t\t\t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-shadow-drop: \t\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.15);\n\t--ck-color-shadow-drop-active:\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.2);\n\t--ck-color-shadow-inner: \t\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.1);\n\n\t/* -- Buttons ------------------------------------------------------------------------------- */\n\n\t--ck-color-button-default-background: \t\t\t\t\t\ttransparent;\n\t--ck-color-button-default-hover-background: \t\t\t\thsl(0, 0%, 94.1%);\n\t--ck-color-button-default-active-background: \t\t\t\thsl(0, 0%, 94.1%);\n\t--ck-color-button-default-disabled-background: \t\t\t\ttransparent;\n\n\t--ck-color-button-on-background: \t\t\t\t\t\t\thsl(212, 100%, 97.1%);\n\t--ck-color-button-on-hover-background: \t\t\t\t\t\thsl(211.7, 100%, 92.9%);\n\t--ck-color-button-on-active-background: \t\t\t\t\thsl(211.7, 100%, 92.9%);\n\t--ck-color-button-on-disabled-background: \t\t\t\t\thsl(211, 15%, 95%);\n\t--ck-color-button-on-color:\t\t\t\t\t\t\t\t\thsl(218.1, 100%, 58%);\n\n\n\t--ck-color-button-action-background: \t\t\t\t\t\tvar(--ck-color-base-action);\n\t--ck-color-button-action-hover-background: \t\t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-button-action-active-background: \t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-button-action-disabled-background: \t\t\t\thsl(104, 44%, 58%);\n\t--ck-color-button-action-text: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t--ck-color-button-save: \t\t\t\t\t\t\t\t\thsl(120, 100%, 27%);\n\t--ck-color-button-cancel: \t\t\t\t\t\t\t\t\thsl(15, 100%, 43%);\n\n\t--ck-color-switch-button-off-background:\t\t\t\t\thsl(0, 0%, 57.6%);\n\t--ck-color-switch-button-off-hover-background:\t\t\t\thsl(0, 0%, 49%);\n\t--ck-color-switch-button-on-background:\t\t\t\t\t\tvar(--ck-color-button-action-background);\n\t--ck-color-switch-button-on-hover-background:\t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-switch-button-inner-background:\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-switch-button-inner-shadow:\t\t\t\t\t\thsla(0, 0%, 0%, 0.1);\n\n\t/* -- Dropdown ------------------------------------------------------------------------------ */\n\n\t--ck-color-dropdown-panel-background: \t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-dropdown-panel-border: \t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Input --------------------------------------------------------------------------------- */\n\n\t--ck-color-input-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-input-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\t--ck-color-input-error-border:\t\t\t\t\t\t\t\tvar(--ck-color-base-error);\n\t--ck-color-input-text: \t\t\t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-input-disabled-background: \t\t\t\t\t\thsl(0, 0%, 95%);\n\t--ck-color-input-disabled-border: \t\t\t\t\t\t\tvar(--ck-color-base-border);\n\t--ck-color-input-disabled-text: \t\t\t\t\t\t\thsl(0, 0%, 46%);\n\n\t/* -- List ---------------------------------------------------------------------------------- */\n\n\t--ck-color-list-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-list-button-hover-background: \t\t\t\t\tvar(--ck-color-button-default-hover-background);\n\t--ck-color-list-button-on-background: \t\t\t\t\t\tvar(--ck-color-button-on-color);\n\t--ck-color-list-button-on-background-focus: \t\t\t\tvar(--ck-color-button-on-color);\n\t--ck-color-list-button-on-text:\t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t/* -- Panel --------------------------------------------------------------------------------- */\n\n\t--ck-color-panel-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-panel-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Toolbar ------------------------------------------------------------------------------- */\n\n\t--ck-color-toolbar-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-toolbar-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Tooltip ------------------------------------------------------------------------------- */\n\n\t--ck-color-tooltip-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-tooltip-text: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t/* -- Engine -------------------------------------------------------------------------------- */\n\n\t--ck-color-engine-placeholder-text: \t\t\t\t\t\thsl(0, 0%, 44%);\n\n\t/* -- Upload -------------------------------------------------------------------------------- */\n\n\t--ck-color-upload-bar-background:\t\t \t\t\t\t\thsl(209, 92%, 70%);\n\n\t/* -- Link -------------------------------------------------------------------------------- */\n\n\t--ck-color-link-default:\t\t\t\t\t\t\t\t\thsl(240, 100%, 47%);\n\t--ck-color-link-selected-background:\t\t\t\t\t\thsla(201, 100%, 56%, 0.1);\n\t--ck-color-link-fake-selection:\t\t\t\t\t\t\t\thsla(201, 100%, 56%, 0.3);\n\n\t/* -- Search result highlight ---------------------------------------------------------------- */\n\n\t--ck-color-highlight-background:\t\t\t\t\t\t\thsl(60, 100%, 50%)\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/**\n\t * An opacity value of disabled UI item.\n\t */\n\t--ck-disabled-opacity: .5;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/**\n\t * The geometry of the of focused element's outer shadow.\n\t */\n\t--ck-focus-outer-shadow-geometry: 0 0 0 3px;\n\n\t/**\n\t * A visual style of focused element's outer shadow.\n\t */\n\t--ck-focus-outer-shadow: var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);\n\n\t/**\n\t * A visual style of focused element's outer shadow (when disabled).\n\t */\n\t--ck-focus-disabled-outer-shadow: var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);\n\n\t/**\n\t * A visual style of focused element's outer shadow (when has errors).\n\t */\n\t--ck-focus-error-outer-shadow: var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);\n\n\t/**\n\t * A visual style of focused element's border or outline.\n\t */\n\t--ck-focus-ring: 1px solid var(--ck-color-focus-border);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-font-size-base: 13px;\n\t--ck-line-height-base: 1.84615;\n\t--ck-font-face: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;\n\n\t--ck-font-size-tiny: 0.7em;\n\t--ck-font-size-small: 0.75em;\n\t--ck-font-size-normal: 1em;\n\t--ck-font-size-big: 1.4em;\n\t--ck-font-size-large: 1.8em;\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/* This is super-important. This is **manually** adjusted so a button without an icon\n\tis never smaller than a button with icon, additionally making sure that text-less buttons\n\tare perfect squares. The value is also shared by other components which should stay "in-line"\n\twith buttons. */\n\t--ck-ui-component-min-height: 2.3em;\n}\n\n/**\n * Resets an element, ignoring its children.\n */\n.ck.ck-reset,\n.ck.ck-reset_all,\n.ck-reset_all *:not(.ck-reset_all-excluded *) {\n\t/* Do not include inheritable rules here. */\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tbackground: transparent;\n\ttext-decoration: none;\n\tvertical-align: middle;\n\ttransition: none;\n\n\t/* https://github.com/ckeditor/ckeditor5-theme-lark/issues/105 */\n\tword-wrap: break-word;\n}\n\n/**\n * Resets an element AND its children.\n */\n.ck.ck-reset_all,\n.ck-reset_all *:not(.ck-reset_all-excluded *) {\n\t/* These are rule inherited by all children elements. */\n\tborder-collapse: collapse;\n\tfont: normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);\n\tcolor: var(--ck-color-text);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tcursor: auto;\n\tfloat: none;\n}\n\n.ck-reset_all {\n\t& .ck-rtl *:not(.ck-reset_all-excluded *) {\n\t\ttext-align: right;\n\t}\n\n\t& iframe:not(.ck-reset_all-excluded *) {\n\t\t/* For IE */\n\t\tvertical-align: inherit;\n\t}\n\n\t& textarea:not(.ck-reset_all-excluded *) {\n\t\twhite-space: pre-wrap;\n\t}\n\n\t& textarea:not(.ck-reset_all-excluded *),\n\t& input[type="text"]:not(.ck-reset_all-excluded *),\n\t& input[type="password"]:not(.ck-reset_all-excluded *) {\n\t\tcursor: text;\n\t}\n\n\t& textarea[disabled]:not(.ck-reset_all-excluded *),\n\t& input[type="text"][disabled]:not(.ck-reset_all-excluded *),\n\t& input[type="password"][disabled]:not(.ck-reset_all-excluded *) {\n\t\tcursor: default;\n\t}\n\n\t& fieldset:not(.ck-reset_all-excluded *) {\n\t\tpadding: 10px;\n\t\tborder: 2px groove hsl(255, 7%, 88%);\n\t}\n\n\t& button:not(.ck-reset_all-excluded *)::-moz-focus-inner {\n\t\t/* See http://stackoverflow.com/questions/5517744/remove-extra-button-spacing-padding-in-firefox */\n\t\tpadding: 0;\n\t\tborder: 0\n\t}\n}\n\n/**\n * Default UI rules for RTL languages.\n */\n.ck[dir="rtl"],\n.ck[dir="rtl"] .ck {\n\ttext-align: right;\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * Default border-radius value.\n */\n:root{\n\t--ck-border-radius: 2px;\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t/**\n\t * A visual style of element's inner shadow (i.e. input).\n\t */\n\t--ck-inner-shadow: 2px 2px 3px var(--ck-color-shadow-inner) inset;\n\n\t/**\n\t * A visual style of element's drop shadow (i.e. panel).\n\t */\n\t--ck-drop-shadow: 0 1px 2px 1px var(--ck-color-shadow-drop);\n\n\t/**\n\t * A visual style of element's active shadow (i.e. comment or suggestion).\n\t */\n\t--ck-drop-shadow-active: 0 3px 6px 1px var(--ck-color-shadow-drop-active);\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-spacing-unit: \t\t\t\t\t\t0.6em;\n\t--ck-spacing-large: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 1.5);\n\t--ck-spacing-standard: \t\t\t\t\tvar(--ck-spacing-unit);\n\t--ck-spacing-medium: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.8);\n\t--ck-spacing-small: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.5);\n\t--ck-spacing-tiny: \t\t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.3);\n\t--ck-spacing-extra-tiny: \t\t\t\tcalc(var(--ck-spacing-unit) * 0.16);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 3488: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2;--ck-resizer-border-radius:var(--ck-border-radius);--ck-resizer-tooltip-offset:10px;--ck-resizer-tooltip-height:calc(var(--ck-spacing-small)*2 + 10px)}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);color:var(--ck-color-resizer-tooltip-text);display:block;font-size:var(--ck-font-size-tiny);height:var(--ck-resizer-tooltip-height);line-height:var(--ck-resizer-tooltip-height);padding:0 var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-above-center,.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{left:var(--ck-resizer-tooltip-offset);top:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{right:var(--ck-resizer-tooltip-offset);top:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-above-center{left:50%;top:calc(var(--ck-resizer-tooltip-height)*-1);transform:translate(-50%)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-color:transparent;outline-style:solid;outline-width:var(--ck-widget-outline-thickness);transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{background-color:var(--ck-color-widget-editable-focus-background);border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;outline:none}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{background-color:transparent;border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;box-sizing:border-box;left:calc(0px - var(--ck-widget-outline-thickness));opacity:0;padding:4px;top:0;transform:translateY(-100%);transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{color:var(--ck-color-widget-drag-handler-icon-color);height:var(--ck-widget-handler-icon-size);width:var(--ck-widget-handler-icon-size)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{background-color:var(--ck-color-widget-hover-border);opacity:1}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle{background-color:var(--ck-color-focus-border);opacity:1}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle>.ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle>.ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-widget/theme/widget.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-widget/widget.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_focus.css", "webpack://./../ckeditor5-theme-lark/theme/mixins/_shadow.css"], + names: [], + mappings: "AAKA,MACC,+CAAgD,CAChD,6CAAsD,CACtD,uCAAgD,CAEhD,kDAAmD,CACnD,gCAAiC,CACjC,kEACD,CAOA,8DAEC,iBAqBD,CAnBC,4EACC,iBAOD,CALC,qFAGC,aACD,CASD,iLACC,kBACD,CAGD,kBACC,qDAAsD,CAEtD,qDAAsD,CACtD,6CAA8C,CAF9C,0CAA2C,CAI3C,aAAc,CADd,kCAAmC,CAGnC,uCAAwC,CACxC,4CAA6C,CAF7C,iCAsCD,CAlCC,8NAKC,iBACD,CAEA,0CAEC,qCAAsC,CADtC,oCAED,CAEA,2CAEC,sCAAuC,CADvC,oCAED,CAEA,8CACC,uCAAwC,CACxC,sCACD,CAEA,6CACC,uCAAwC,CACxC,qCACD,CAGA,8CAEC,QAAS,CADT,6CAAgD,CAEhD,yBACD,CCjFD,MACC,iCAAkC,CAClC,kCAAmC,CACnC,4CAA6C,CAC7C,wCAAyC,CAEzC,wCAAiD,CACjD,sCAAkD,CAClD,2EAA4E,CAC5E,yEACD,CAEA,eAGC,yBAA0B,CAD1B,mBAAoB,CADpB,gDAAiD,CAGjD,6GAUD,CARC,0EAEC,6EACD,CAEA,qBACC,iDACD,CAGD,gCACC,4BAWD,CAPC,yGAKC,iEAAkE,CCnCnE,2BAA2B,CCF3B,qCAA8B,CDC9B,YDqCA,CAIA,4EAKC,4BAA6B,CAa7B,iEAAkE,CAhBlE,qBAAsB,CAoBtB,mDAAoD,CAhBpD,SAAU,CALV,WAAY,CAsBZ,KAAM,CAFN,2BAA4B,CAT5B,6SAgCD,CAnBC,qFAIC,oDAAqD,CADrD,yCAA0C,CAD1C,wCAWD,CANC,kHACC,SAAU,CAGV,+DACD,CAID,wHACC,SACD,CAID,kFAEC,oDAAqD,CADrD,SAED,CAKC,oMAEC,6CAA8C,CAD9C,SAOD,CAHC,gRACC,SACD,CAOH,qFACC,SAAU,CACV,oDACD,CAGA,gDAEC,eAkBD,CAhBC,yEAOC,iCACD,CAGC,gOAEC,gDACD,CAOD,wIAEC,mDAQD,CALE,ghBAEC,gDACD,CAKH,yKAOC,yDACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-color-resizer: var(--ck-color-focus-border);\n\t--ck-color-resizer-tooltip-background: hsl(0, 0%, 15%);\n\t--ck-color-resizer-tooltip-text: hsl(0, 0%, 95%);\n\n\t--ck-resizer-border-radius: var(--ck-border-radius);\n\t--ck-resizer-tooltip-offset: 10px;\n\t--ck-resizer-tooltip-height: calc(var(--ck-spacing-small) * 2 + 10px);\n}\n\n.ck .ck-widget {\n\t/* This is neccessary for type around UI to be positioned properly. */\n\tposition: relative;\n}\n\n.ck .ck-widget.ck-widget_with-selection-handle {\n\t/* Make the widget wrapper a relative positioning container for the drag handle. */\n\tposition: relative;\n\n\t& .ck-widget__selection-handle {\n\t\tposition: absolute;\n\n\t\t& .ck-icon {\n\t\t\t/* Make sure the icon in not a subject to font-size or line-height to avoid\n\t\t\tunnecessary spacing around it. */\n\t\t\tdisplay: block;\n\t\t}\n\t}\n\n\t/* Show the selection handle on mouse hover over the widget, but not for nested widgets. */\n\t&:hover > .ck-widget__selection-handle {\n\t\tvisibility: visible;\n\t}\n\n\t/* Show the selection handle when the widget is selected, but not for nested widgets. */\n\t&.ck-widget_selected > .ck-widget__selection-handle {\n\t\tvisibility: visible;\n\t}\n}\n\n.ck .ck-size-view {\n\tbackground: var(--ck-color-resizer-tooltip-background);\n\tcolor: var(--ck-color-resizer-tooltip-text);\n\tborder: 1px solid var(--ck-color-resizer-tooltip-text);\n\tborder-radius: var(--ck-resizer-border-radius);\n\tfont-size: var(--ck-font-size-tiny);\n\tdisplay: block;\n\tpadding: 0 var(--ck-spacing-small);\n\theight: var(--ck-resizer-tooltip-height);\n\tline-height: var(--ck-resizer-tooltip-height);\n\n\t&.ck-orientation-top-left,\n\t&.ck-orientation-top-right,\n\t&.ck-orientation-bottom-right,\n\t&.ck-orientation-bottom-left,\n\t&.ck-orientation-above-center {\n\t\tposition: absolute;\n\t}\n\n\t&.ck-orientation-top-left {\n\t\ttop: var(--ck-resizer-tooltip-offset);\n\t\tleft: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-top-right {\n\t\ttop: var(--ck-resizer-tooltip-offset);\n\t\tright: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-bottom-right {\n\t\tbottom: var(--ck-resizer-tooltip-offset);\n\t\tright: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-bottom-left {\n\t\tbottom: var(--ck-resizer-tooltip-offset);\n\t\tleft: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t/* Class applied if the widget is too small to contain the size label */\n\t&.ck-orientation-above-center {\n\t\ttop: calc(var(--ck-resizer-tooltip-height) * -1);\n\t\tleft: 50%;\n\t\ttransform: translate(-50%);\n\t}\n}\n", '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "../mixins/_focus.css";\n@import "../mixins/_shadow.css";\n\n:root {\n\t--ck-widget-outline-thickness: 3px;\n\t--ck-widget-handler-icon-size: 16px;\n\t--ck-widget-handler-animation-duration: 200ms;\n\t--ck-widget-handler-animation-curve: ease;\n\n\t--ck-color-widget-blurred-border: hsl(0, 0%, 87%);\n\t--ck-color-widget-hover-border: hsl(43, 100%, 62%);\n\t--ck-color-widget-editable-focus-background: var(--ck-color-base-background);\n\t--ck-color-widget-drag-handler-icon-color: var(--ck-color-base-background);\n}\n\n.ck .ck-widget {\n\toutline-width: var(--ck-widget-outline-thickness);\n\toutline-style: solid;\n\toutline-color: transparent;\n\ttransition: outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border);\n\t}\n\n\t&:hover {\n\t\toutline-color: var(--ck-color-widget-hover-border);\n\t}\n}\n\n.ck .ck-editor__nested-editable {\n\tborder: 1px solid transparent;\n\n\t/* The :focus style is applied before .ck-editor__nested-editable_focused class is rendered in the view.\n\tThese styles show a different border for a blink of an eye, so `:focus` need to have same styles applied. */\n\t&.ck-editor__nested-editable_focused,\n\t&:focus {\n\t\t@mixin ck-focus-ring;\n\t\t@mixin ck-box-shadow var(--ck-inner-shadow);\n\n\t\tbackground-color: var(--ck-color-widget-editable-focus-background);\n\t}\n}\n\n.ck .ck-widget.ck-widget_with-selection-handle {\n\t& .ck-widget__selection-handle {\n\t\tpadding: 4px;\n\t\tbox-sizing: border-box;\n\n\t\t/* Background and opacity will be animated as the handler shows up or the widget gets selected. */\n\t\tbackground-color: transparent;\n\t\topacity: 0;\n\n\t\t/* Transition:\n\t\t * background-color for the .ck-widget_selected state change,\n\t\t * visibility for hiding the handler,\n\t\t * opacity for the proper look of the icon when the handler disappears. */\n\t\ttransition:\n\t\t\tbackground-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),\n\t\t\tvisibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),\n\t\t\topacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t\t/* Make only top corners round. */\n\t\tborder-radius: var(--ck-border-radius) var(--ck-border-radius) 0 0;\n\n\t\t/* Place the drag handler outside the widget wrapper. */\n\t\ttransform: translateY(-100%);\n\t\tleft: calc(0px - var(--ck-widget-outline-thickness));\n\t\ttop: 0;\n\n\t\t& .ck-icon {\n\t\t\t/* Make sure the dimensions of the icon are independent of the fon-size of the content. */\n\t\t\twidth: var(--ck-widget-handler-icon-size);\n\t\t\theight: var(--ck-widget-handler-icon-size);\n\t\t\tcolor: var(--ck-color-widget-drag-handler-icon-color);\n\n\t\t\t/* The "selected" part of the icon is invisible by default */\n\t\t\t& .ck-icon__selected-indicator {\n\t\t\t\topacity: 0;\n\n\t\t\t\t/* Note: The animation is longer on purpose. Simply feels better. */\n\t\t\t\ttransition: opacity 300ms var(--ck-widget-handler-animation-curve);\n\t\t\t}\n\t\t}\n\n\t\t/* Advertise using the look of the icon that once clicked the handler, the widget will be selected. */\n\t\t&:hover .ck-icon .ck-icon__selected-indicator {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t/* Show the selection handler on mouse hover over the widget, but not for nested widgets. */\n\t&:hover > .ck-widget__selection-handle {\n\t\topacity: 1;\n\t\tbackground-color: var(--ck-color-widget-hover-border);\n\t}\n\n\t/* Show the selection handler when the widget is selected, but not for nested widgets. */\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\t& > .ck-widget__selection-handle {\n\t\t\topacity: 1;\n\t\t\tbackground-color: var(--ck-color-focus-border);\n\n\t\t\t/* When the widget is selected, notify the user using the proper look of the icon. */\n\t\t\t& .ck-icon .ck-icon__selected-indicator {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* In a RTL environment, align the selection handler to the right side of the widget */\n/* stylelint-disable-next-line no-descending-specificity */\n.ck[dir="rtl"] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle {\n\tleft: auto;\n\tright: calc(0px - var(--ck-widget-outline-thickness));\n}\n\n/* https://github.com/ckeditor/ckeditor5/issues/6415 */\n.ck.ck-editor__editable.ck-read-only .ck-widget {\n\t/* Prevent the :hover outline from showing up because of the used outline-color transition. */\n\ttransition: none;\n\n\t&:not(.ck-widget_selected) {\n\t\t/* Disable visual effects of hover/active widget when CKEditor is in readOnly mode.\n\t\t * See: https://github.com/ckeditor/ckeditor5/issues/1261\n\t\t *\n\t\t * Leave the unit because this custom property is used in calc() by other features.\n\t\t * See: https://github.com/ckeditor/ckeditor5/issues/6775\n\t\t */\n\t\t--ck-widget-outline-thickness: 0px;\n\t}\n\n\t&.ck-widget_with-selection-handle {\n\t\t& .ck-widget__selection-handle,\n\t\t& .ck-widget__selection-handle:hover {\n\t\t\tbackground: var(--ck-color-widget-blurred-border);\n\t\t}\n\t}\n}\n\n/* Style the widget when it\'s selected but the editable it belongs to lost focus. */\n/* stylelint-disable-next-line no-descending-specificity */\n.ck.ck-editor__editable.ck-blurred .ck-widget {\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\toutline-color: var(--ck-color-widget-blurred-border);\n\n\t\t&.ck-widget_with-selection-handle {\n\t\t\t& > .ck-widget__selection-handle,\n\t\t\t& > .ck-widget__selection-handle:hover {\n\t\t\t\tbackground: var(--ck-color-widget-blurred-border);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable > .ck-widget.ck-widget_with-selection-handle:first-child,\n.ck.ck-editor__editable blockquote > .ck-widget.ck-widget_with-selection-handle:first-child {\n\t/* Do not crop selection handler if a widget is a first-child in the blockquote or in the root editable.\n\tIn fact, anything with overflow: hidden.\n\thttps://github.com/ckeditor/ckeditor5-block-quote/issues/28\n\thttps://github.com/ckeditor/ckeditor5-widget/issues/44\n\thttps://github.com/ckeditor/ckeditor5-widget/issues/66 */\n\tmargin-top: calc(1em + var(--ck-widget-handler-icon-size));\n}\n', "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A visual style of focused element's border.\n */\n@define-mixin ck-focus-ring {\n\t/* Disable native outline. */\n\toutline: none;\n\tborder: var(--ck-focus-ring)\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * A helper to combine multiple shadows.\n */\n@define-mixin ck-box-shadow $shadowA, $shadowB: 0 0 {\n\tbox-shadow: $shadowA, $shadowB;\n}\n\n/**\n * Gives an element a drop shadow so it looks like a floating panel.\n */\n@define-mixin ck-drop-shadow {\n\t@mixin ck-box-shadow var(--ck-drop-shadow);\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 8506: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, ".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;left:0;pointer-events:none;position:absolute;top:0}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{pointer-events:all;position:absolute}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{cursor:nesw-resize}:root{--ck-resizer-size:10px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-border-width:1px}.ck .ck-widget__resizer{outline:1px solid var(--ck-color-resizer)}.ck .ck-widget__resizer__handle{background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius);height:var(--ck-resizer-size);width:var(--ck-resizer-size)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{left:var(--ck-resizer-offset);top:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{right:var(--ck-resizer-offset);top:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}", "", { + version: 3, + sources: ["webpack://./../ckeditor5-widget/theme/widgetresize.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-widget/widgetresize.css"], + names: [], + mappings: "AAKA,4BAEC,iBACD,CAEA,wBACC,YAAa,CAMb,MAAO,CAFP,mBAAoB,CAHpB,iBAAkB,CAMlB,KACD,CAGC,2EACC,aACD,CAGD,gCAIC,kBAAmB,CAHnB,iBAcD,CATC,4IAEC,kBACD,CAEA,4IAEC,kBACD,CCpCD,MACC,sBAAuB,CAGvB,yDAAiE,CACjE,6BACD,CAEA,wBACC,yCACD,CAEA,gCAGC,uCAAwC,CACxC,gDAA6D,CAC7D,6CAA8C,CAH9C,6BAA8B,CAD9B,4BAyBD,CAnBC,oEAEC,6BAA8B,CAD9B,4BAED,CAEA,qEAEC,8BAA+B,CAD/B,4BAED,CAEA,wEACC,+BAAgC,CAChC,8BACD,CAEA,uEACC,+BAAgC,CAChC,6BACD", + sourcesContent: ["/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-widget_with-resizer {\n\t/* Make the widget wrapper a relative positioning container for the drag handle. */\n\tposition: relative;\n}\n\n.ck .ck-widget__resizer {\n\tdisplay: none;\n\tposition: absolute;\n\n\t/* The wrapper itself should not interfere with the pointer device, only the handles should. */\n\tpointer-events: none;\n\n\tleft: 0;\n\ttop: 0;\n}\n\n.ck-focused .ck-widget_with-resizer.ck-widget_selected {\n\t& > .ck-widget__resizer {\n\t\tdisplay: block;\n\t}\n}\n\n.ck .ck-widget__resizer__handle {\n\tposition: absolute;\n\n\t/* Resizers are the only UI elements that should interfere with a pointer device. */\n\tpointer-events: all;\n\n\t&.ck-widget__resizer__handle-top-left,\n\t&.ck-widget__resizer__handle-bottom-right {\n\t\tcursor: nwse-resize;\n\t}\n\n\t&.ck-widget__resizer__handle-top-right,\n\t&.ck-widget__resizer__handle-bottom-left {\n\t\tcursor: nesw-resize;\n\t}\n}\n", "/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-resizer-size: 10px;\n\n\t/* Set the resizer with a 50% offset. */\n\t--ck-resizer-offset: calc( ( var(--ck-resizer-size) / -2 ) - 2px);\n\t--ck-resizer-border-width: 1px;\n}\n\n.ck .ck-widget__resizer {\n\toutline: 1px solid var(--ck-color-resizer);\n}\n\n.ck .ck-widget__resizer__handle {\n\twidth: var(--ck-resizer-size);\n\theight: var(--ck-resizer-size);\n\tbackground: var(--ck-color-focus-border);\n\tborder: var(--ck-resizer-border-width) solid hsl(0, 0%, 100%);\n\tborder-radius: var(--ck-resizer-border-radius);\n\n\t&.ck-widget__resizer__handle-top-left {\n\t\ttop: var(--ck-resizer-offset);\n\t\tleft: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-top-right {\n\t\ttop: var(--ck-resizer-offset);\n\t\tright: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-bottom-right {\n\t\tbottom: var(--ck-resizer-offset);\n\t\tright: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-bottom-left {\n\t\tbottom: var(--ck-resizer-offset);\n\t\tleft: var(--ck-resizer-offset);\n\t}\n}\n"], + sourceRoot: "" + }]); + const a = s + }, + 4921: (t, e, n) => { + "use strict"; + n.d(e, { + Z: () => a + }); + var o = n(1799), + i = n.n(o), + r = n(2609), + s = n.n(r)()(i()); + s.push([t.id, '.ck .ck-widget .ck-widget__type-around__button{display:block;overflow:hidden;position:absolute;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{left:50%;position:absolute;top:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{left:min(10%,30px);top:calc(var(--ck-widget-outline-thickness)*-.5);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(var(--ck-widget-outline-thickness)*-.5);right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:"";display:block;left:1px;position:absolute;top:1px;z-index:calc(var(--ck-z-default) + 1)}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;left:0;position:absolute;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(var(--ck-widget-outline-thickness)*-1);right:calc(var(--ck-widget-outline-thickness)*-1)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:block;top:calc(var(--ck-widget-outline-thickness)*-1 - 1px)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(var(--ck-widget-outline-thickness)*-1 - 1px);display:block}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button);border-radius:100px;height:var(--ck-widget-type-around-button-size);opacity:0;pointer-events:none;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);width:var(--ck-widget-type-around-button-size)}.ck .ck-widget .ck-widget__type-around__button svg{height:8px;margin-top:1px;transform:translate(-50%,-50%);transition:transform .5s ease;width:10px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3));border-radius:100px;height:calc(var(--ck-widget-type-around-button-size) - 2px);width:calc(var(--ck-widget-type-around-button-size) - 2px)}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{animation:ck-widget-type-around-fake-caret-pulse 1s linear infinite normal forwards;background:var(--ck-color-base-text);height:1px;outline:1px solid hsla(0,0%,100%,.5);pointer-events:none}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before{outline-color:transparent}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected:hover,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle{opacity:0}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:0;margin-right:20px}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}', "", { + version: 3, + sources: ["webpack://./../ckeditor5-widget/theme/widgettypearound.css", "webpack://./../ckeditor5-theme-lark/theme/ckeditor5-widget/widgettypearound.css"], + names: [], + mappings: "AASC,+CACC,aAAc,CAEd,eAAgB,CADhB,iBAAkB,CAElB,2BAwBD,CAtBC,mDAGC,QAAS,CAFT,iBAAkB,CAClB,OAAQ,CAER,qCACD,CAEA,qFAGC,kBAAoB,CADpB,gDAAoD,CAGpD,0BACD,CAEA,oFAEC,mDAAuD,CACvD,mBAAqB,CAErB,yBACD,CAUA,mLACC,UAAW,CACX,aAAc,CAGd,QAAS,CAFT,iBAAkB,CAClB,OAAQ,CAER,qCACD,CAMD,2EACC,YAAa,CAEb,MAAO,CADP,iBAAkB,CAElB,OACD,CAOA,iFACC,gDAAqD,CACrD,iDACD,CAKA,wHAEC,aAAc,CADd,qDAED,CAKA,uHACC,wDAA6D,CAC7D,aACD,CAoBD,mOACC,YACD,CC3GA,MACC,wCAAyC,CACzC,wEAAyE,CACzE,8EAA+E,CAC/E,2FAA4F,CAC5F,wDAAyD,CACzD,uDAAwD,CACxD,yEACD,CAgBC,+CAGC,oDAAqD,CACrD,mBAAoB,CAFpB,+CAAgD,CAVjD,SAAU,CACV,mBAAoB,CAYnB,uMAAyM,CAJzM,8CAkDD,CA1CC,mDAEC,UAAW,CAGX,cAAe,CAFf,8BAA+B,CAC/B,6BAA8B,CAH9B,UAoBD,CAdC,qDACC,mBAAoB,CACpB,mBAAoB,CAEpB,SAAU,CACV,qDAAsD,CACtD,kBAAmB,CACnB,oBAAqB,CACrB,qBACD,CAEA,wDACC,kBACD,CAGD,qDAIC,6DAcD,CARE,kEACC,oDACD,CAEA,8DACC,wDACD,CAUF,uKAvED,SAAU,CACV,mBAwEC,CAOD,gGACC,0DACD,CAOA,uKAEC,2DAQD,CANC,mLAIC,uEAAkF,CADlF,mBAAoB,CADpB,2DAA4D,CAD5D,0DAID,CAOD,8GACC,gBACD,CAKA,mDAGC,mFAAoF,CAOpF,oCAAqC,CARrC,UAAW,CAOX,oCAAwC,CARxC,mBAUD,CAOC,6JAEC,yBACD,CAUA,yKACC,iDACD,CAMA,uOAlJD,SAAU,CACV,mBAmJC,CAoBA,6yBACC,SACD,CASF,uHACC,aAAc,CACd,iBACD,CAYG,iRAlMF,SAAU,CACV,mBAmME,CAQH,kIACC,qEAKD,CAHC,wIACC,WACD,CAGD,4CACC,GACC,oBACD,CACA,OACC,mBACD,CACD,CAEA,gDACC,OACC,mBACD,CACA,OACC,mBACD,CACD,CAEA,8CACC,GACC,6HACD,CACA,IACC,6HACD,CACA,GACC,+HACD,CACD,CAEA,kDACC,GACC,SACD,CACA,IACC,SACD,CACA,IACC,SACD,CACA,IACC,SACD,CACA,GACC,SACD,CACD", + sourcesContent: ['/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck .ck-widget {\n\t/*\n\t * Styles of the type around buttons\n\t */\n\t& .ck-widget__type-around__button {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\toverflow: hidden;\n\t\tz-index: var(--ck-z-default);\n\n\t\t& svg {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\tleft: 50%;\n\t\t\tz-index: calc(var(--ck-z-default) + 2);\n\t\t}\n\n\t\t&.ck-widget__type-around__button_before {\n\t\t\t/* Place it in the middle of the outline */\n\t\t\ttop: calc(-0.5 * var(--ck-widget-outline-thickness));\n\t\t\tleft: min(10%, 30px);\n\n\t\t\ttransform: translateY(-50%);\n\t\t}\n\n\t\t&.ck-widget__type-around__button_after {\n\t\t\t/* Place it in the middle of the outline */\n\t\t\tbottom: calc(-0.5 * var(--ck-widget-outline-thickness));\n\t\t\tright: min(10%, 30px);\n\n\t\t\ttransform: translateY(50%);\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the buttons when:\n\t * - the widget is selected,\n\t * - or the button is being hovered (regardless of the widget state).\n\t */\n\t&.ck-widget_selected > .ck-widget__type-around > .ck-widget__type-around__button,\n\t& > .ck-widget__type-around > .ck-widget__type-around__button:hover {\n\t\t&::after {\n\t\t\tcontent: "";\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\ttop: 1px;\n\t\t\tleft: 1px;\n\t\t\tz-index: calc(var(--ck-z-default) + 1);\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the horizontal "fake caret" which is displayed when the user navigates using the keyboard.\n\t */\n\t& > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t}\n\n\t/*\n\t * When the widget is hovered the "fake caret" would normally be narrower than the\n\t * extra outline displayed around the widget. Let\'s extend the "fake caret" to match\n\t * the full width of the widget.\n\t */\n\t&:hover > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tleft: calc( -1 * var(--ck-widget-outline-thickness) );\n\t\tright: calc( -1 * var(--ck-widget-outline-thickness) );\n\t}\n\n\t/*\n\t * Styles for the horizontal "fake caret" when it should be displayed before the widget (backward keyboard navigation).\n\t */\n\t&.ck-widget_type-around_show-fake-caret_before > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\ttop: calc( -1 * var(--ck-widget-outline-thickness) - 1px );\n\t\tdisplay: block;\n\t}\n\n\t/*\n\t * Styles for the horizontal "fake caret" when it should be displayed after the widget (forward keyboard navigation).\n\t */\n\t&.ck-widget_type-around_show-fake-caret_after > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tbottom: calc( -1 * var(--ck-widget-outline-thickness) - 1px );\n\t\tdisplay: block;\n\t}\n}\n\n/*\n * Integration with the read-only mode of the editor.\n */\n.ck.ck-editor__editable.ck-read-only .ck-widget__type-around {\n\tdisplay: none;\n}\n\n/*\n * Integration with the restricted editing mode (feature) of the editor.\n */\n.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around {\n\tdisplay: none;\n}\n\n/*\n * Integration with the #isEnabled property of the WidgetTypeAround plugin.\n */\n.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around {\n\tdisplay: none;\n}\n', '/*\n * Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n:root {\n\t--ck-widget-type-around-button-size: 20px;\n\t--ck-color-widget-type-around-button-active: var(--ck-color-focus-border);\n\t--ck-color-widget-type-around-button-hover: var(--ck-color-widget-hover-border);\n\t--ck-color-widget-type-around-button-blurred-editable: var(--ck-color-widget-blurred-border);\n\t--ck-color-widget-type-around-button-radar-start-alpha: 0;\n\t--ck-color-widget-type-around-button-radar-end-alpha: .3;\n\t--ck-color-widget-type-around-button-icon: var(--ck-color-base-background);\n}\n\n@define-mixin ck-widget-type-around-button-visible {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n@define-mixin ck-widget-type-around-button-hidden {\n\topacity: 0;\n\tpointer-events: none;\n}\n\n.ck .ck-widget {\n\t/*\n\t * Styles of the type around buttons\n\t */\n\t& .ck-widget__type-around__button {\n\t\twidth: var(--ck-widget-type-around-button-size);\n\t\theight: var(--ck-widget-type-around-button-size);\n\t\tbackground: var(--ck-color-widget-type-around-button);\n\t\tborder-radius: 100px;\n\t\ttransition: opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t\t@mixin ck-widget-type-around-button-hidden;\n\n\t\t& svg {\n\t\t\twidth: 10px;\n\t\t\theight: 8px;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t\ttransition: transform .5s ease;\n\t\t\tmargin-top: 1px;\n\n\t\t\t& * {\n\t\t\t\tstroke-dasharray: 10;\n\t\t\t\tstroke-dashoffset: 0;\n\n\t\t\t\tfill: none;\n\t\t\t\tstroke: var(--ck-color-widget-type-around-button-icon);\n\t\t\t\tstroke-width: 1.5px;\n\t\t\t\tstroke-linecap: round;\n\t\t\t\tstroke-linejoin: round;\n\t\t\t}\n\n\t\t\t& line {\n\t\t\t\tstroke-dasharray: 7;\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\t/*\n\t\t\t * Display the "sonar" around the button when hovered.\n\t\t\t */\n\t\t\tanimation: ck-widget-type-around-button-sonar 1s ease infinite;\n\n\t\t\t/*\n\t\t\t * Animate active button\'s icon.\n\t\t\t */\n\t\t\t& svg {\n\t\t\t\t& polyline {\n\t\t\t\t\tanimation: ck-widget-type-around-arrow-dash 2s linear;\n\t\t\t\t}\n\n\t\t\t\t& line {\n\t\t\t\t\tanimation: ck-widget-type-around-arrow-tip-dash 2s linear;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Show type around buttons when the widget gets selected or being hovered.\n\t */\n\t&.ck-widget_selected,\n\t&:hover {\n\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\t@mixin ck-widget-type-around-button-visible;\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the buttons when the widget is NOT selected (but the buttons are visible\n\t * and still can be hovered).\n\t */\n\t&:not(.ck-widget_selected) > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\tbackground: var(--ck-color-widget-type-around-button-hover);\n\t}\n\n\t/*\n\t * Styles for the buttons when:\n\t * - the widget is selected,\n\t * - or the button is being hovered (regardless of the widget state).\n\t */\n\t&.ck-widget_selected > .ck-widget__type-around > .ck-widget__type-around__button,\n\t& > .ck-widget__type-around > .ck-widget__type-around__button:hover {\n\t\tbackground: var(--ck-color-widget-type-around-button-active);\n\n\t\t&::after {\n\t\t\twidth: calc(var(--ck-widget-type-around-button-size) - 2px);\n\t\t\theight: calc(var(--ck-widget-type-around-button-size) - 2px);\n\t\t\tborder-radius: 100px;\n\t\t\tbackground: linear-gradient(135deg, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,.3) 100%);\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the "before" button when the widget has a selection handle. Because some space\n\t * is consumed by the handle, the button must be moved slightly to the right to let it breathe.\n\t */\n\t&.ck-widget_with-selection-handle > .ck-widget__type-around > .ck-widget__type-around__button_before {\n\t\tmargin-left: 20px;\n\t}\n\n\t/*\n\t * Styles for the horizontal "fake caret" which is displayed when the user navigates using the keyboard.\n\t */\n\t& .ck-widget__type-around__fake-caret {\n\t\tpointer-events: none;\n\t\theight: 1px;\n\t\tanimation: ck-widget-type-around-fake-caret-pulse linear 1s infinite normal forwards;\n\n\t\t/*\n\t\t * The semi-transparent-outline+background combo improves the contrast\n\t\t * when the background underneath the fake caret is dark.\n\t\t */\n\t\toutline: solid 1px hsla(0, 0%, 100%, .5);\n\t\tbackground: var(--ck-color-base-text);\n\t}\n\n\t/*\n\t * Styles of the widget when the "fake caret" is blinking (e.g. upon keyboard navigation).\n\t * Despite the widget being physically selected in the model, its outline should disappear.\n\t */\n\t&.ck-widget_selected {\n\t\t&.ck-widget_type-around_show-fake-caret_before,\n\t\t&.ck-widget_type-around_show-fake-caret_after {\n\t\t\toutline-color: transparent;\n\t\t}\n\t}\n\n\t&.ck-widget_type-around_show-fake-caret_before,\n\t&.ck-widget_type-around_show-fake-caret_after {\n\t\t/*\n\t\t * When the "fake caret" is visible we simulate that the widget is not selected\n\t\t * (despite being physically selected), so the outline color should be for the\n\t\t * unselected widget.\n\t\t */\n\t\t&.ck-widget_selected:hover {\n\t\t\toutline-color: var(--ck-color-widget-hover-border);\n\t\t}\n\n\t\t/*\n\t\t * Styles of the type around buttons when the "fake caret" is blinking (e.g. upon keyboard navigation).\n\t\t * In this state, the type around buttons would collide with the fake carets so they should disappear.\n\t\t */\n\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\t@mixin ck-widget-type-around-button-hidden;\n\t\t}\n\n\t\t/*\n\t\t * Fake horizontal caret integration with the selection handle. When the caret is visible, simply\n\t\t * hide the handle because it intersects with the caret (and does not make much sense anyway).\n\t\t */\n\t\t&.ck-widget_with-selection-handle {\n\t\t\t&.ck-widget_selected,\n\t\t\t&.ck-widget_selected:hover {\n\t\t\t\t& > .ck-widget__selection-handle {\n\t\t\t\t\topacity: 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Fake horizontal caret integration with the resize UI. When the caret is visible, simply\n\t\t * hide the resize UI because it creates too much noise. It can be visible when the user\n\t\t * hovers the widget, though.\n\t\t */\n\t\t&.ck-widget_selected.ck-widget_with-resizer > .ck-widget__resizer {\n\t\t\topacity: 0\n\t\t}\n\t}\n}\n\n/*\n * Styles for the "before" button when the widget has a selection handle in an RTL environment.\n * The selection handler is aligned to the right side of the widget so there is no need to create\n * additional space for it next to the "before" button.\n */\n.ck[dir="rtl"] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around > .ck-widget__type-around__button_before {\n\tmargin-left: 0;\n\tmargin-right: 20px;\n}\n\n/*\n * Hide type around buttons when the widget is selected as a child of a selected\n * nested editable (e.g. mulit-cell table selection).\n *\n * See https://github.com/ckeditor/ckeditor5/issues/7263.\n */\n.ck-editor__nested-editable.ck-editor__editable_selected {\n\t& .ck-widget {\n\t\t&.ck-widget_selected,\n\t\t&:hover {\n\t\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\t\t@mixin ck-widget-type-around-button-hidden;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * Styles for the buttons when the widget is selected but the user clicked outside of the editor (blurred the editor).\n */\n.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected > .ck-widget__type-around > .ck-widget__type-around__button:not(:hover) {\n\tbackground: var(--ck-color-widget-type-around-button-blurred-editable);\n\n\t& svg * {\n\t\tstroke: hsl(0,0%,60%);\n\t}\n}\n\n@keyframes ck-widget-type-around-arrow-dash {\n\t0% {\n\t\tstroke-dashoffset: 10;\n\t}\n\t20%, 100% {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes ck-widget-type-around-arrow-tip-dash {\n\t0%, 20% {\n\t\tstroke-dashoffset: 7;\n\t}\n\t40%, 100% {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes ck-widget-type-around-button-sonar {\n\t0% {\n\t\tbox-shadow: 0 0 0 0 hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha));\n\t}\n\t50% {\n\t\tbox-shadow: 0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-end-alpha));\n\t}\n\t100% {\n\t\tbox-shadow: 0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha));\n\t}\n}\n\n@keyframes ck-widget-type-around-fake-caret-pulse {\n\t0% {\n\t\topacity: 1;\n\t}\n\t49% {\n\t\topacity: 1;\n\t}\n\t50% {\n\t\topacity: 0;\n\t}\n\t99% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n'], + sourceRoot: "" + }]); + const a = s + }, + 2609: t => { + "use strict"; + t.exports = function(t) { + var e = []; + return e.toString = function() { + return this.map((function(e) { + var n = t(e); + return e[2] ? "@media ".concat(e[2], " {").concat(n, "}") : n + })).join("") + }, e.i = function(t, n, o) { + "string" == typeof t && (t = [ + [null, t, ""] + ]); + var i = {}; + if (o) + for (var r = 0; r < this.length; r++) { + var s = this[r][0]; + null != s && (i[s] = !0) + } + for (var a = 0; a < t.length; a++) { + var l = [].concat(t[a]); + o && i[l[0]] || (n && (l[2] ? l[2] = "".concat(n, " and ").concat(l[2]) : l[2] = n), e.push(l)) + } + }, e + } + }, + 1799: t => { + "use strict"; + + function e(t, e) { + return function(t) { + if (Array.isArray(t)) return t + }(t) || function(t, e) { + var n = t && ("undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"]); + if (null == n) return; + var o, i, r = [], + s = !0, + a = !1; + try { + for (n = n.call(t); !(s = (o = n.next()).done) && (r.push(o.value), !e || r.length !== e); s = !0); + } catch (t) { + a = !0, i = t + } finally { + try { + s || null == n.return || n.return() + } finally { + if (a) throw i + } + } + return r + }(t, e) || function(t, e) { + if (!t) return; + if ("string" == typeof t) return n(t, e); + var o = Object.prototype.toString.call(t).slice(8, -1); + "Object" === o && t.constructor && (o = t.constructor.name); + if ("Map" === o || "Set" === o) return Array.from(t); + if ("Arguments" === o || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)) return n(t, e) + }(t, e) || function() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.") + }() + } + + function n(t, e) { + (null == e || e > t.length) && (e = t.length); + for (var n = 0, o = new Array(e); n < e; n++) o[n] = t[n]; + return o + } + t.exports = function(t) { + var n = e(t, 4), + o = n[1], + i = n[3]; + if (!i) return o; + if ("function" == typeof btoa) { + var r = btoa(unescape(encodeURIComponent(JSON.stringify(i)))), + s = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r), + a = "/*# ".concat(s, " */"), + l = i.sources.map((function(t) { + return "/*# sourceURL=".concat(i.sourceRoot || "").concat(t, " */") + })); + return [o].concat(l).concat([a]).join("\n") + } + return [o].join("\n") + } + }, + 6062: (t, e, n) => { + "use strict"; + var o, i = function() { + return void 0 === o && (o = Boolean(window && document && document.all && !window.atob)), o + }, + r = function() { + var t = {}; + return function(e) { + if (void 0 === t[e]) { + var n = document.querySelector(e); + if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try { + n = n.contentDocument.head + } catch (t) { + n = null + } + t[e] = n + } + return t[e] + } + }(), + s = []; + + function a(t) { + for (var e = -1, n = 0; n < s.length; n++) + if (s[n].identifier === t) { + e = n; + break + } return e + } + + function l(t, e) { + for (var n = {}, o = [], i = 0; i < t.length; i++) { + var r = t[i], + l = e.base ? r[0] + e.base : r[0], + c = n[l] || 0, + d = "".concat(l, " ").concat(c); + n[l] = c + 1; + var h = a(d), + u = { + css: r[1], + media: r[2], + sourceMap: r[3] + }; - 1 !== h ? (s[h].references++, s[h].updater(u)) : s.push({ + identifier: d, + updater: f(u, e), + references: 1 + }), o.push(d) + } + return o + } + + function c(t) { + var e = document.createElement("style"), + o = t.attributes || {}; + if (void 0 === o.nonce) { + var i = n.nc; + i && (o.nonce = i) + } + if (Object.keys(o).forEach((function(t) { + e.setAttribute(t, o[t]) + })), "function" == typeof t.insert) t.insert(e); + else { + var s = r(t.insert || "head"); + if (!s) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + s.appendChild(e) + } + return e + } + var d, h = (d = [], function(t, e) { + return d[t] = e, d.filter(Boolean).join("\n") + }); + + function u(t, e, n, o) { + var i = n ? "" : o.media ? "@media ".concat(o.media, " {").concat(o.css, "}") : o.css; + if (t.styleSheet) t.styleSheet.cssText = h(e, i); + else { + var r = document.createTextNode(i), + s = t.childNodes; + s[e] && t.removeChild(s[e]), s.length ? t.insertBefore(r, s[e]) : t.appendChild(r) + } + } + + function g(t, e, n) { + var o = n.css, + i = n.media, + r = n.sourceMap; + if (i ? t.setAttribute("media", i) : t.removeAttribute("media"), r && "undefined" != typeof btoa && (o += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r)))), " */")), t.styleSheet) t.styleSheet.cssText = o; + else { + for (; t.firstChild;) t.removeChild(t.firstChild); + t.appendChild(document.createTextNode(o)) + } + } + var m = null, + p = 0; + + function f(t, e) { + var n, o, i; + if (e.singleton) { + var r = p++; + n = m || (m = c(e)), o = u.bind(null, n, r, !1), i = u.bind(null, n, r, !0) + } else n = c(e), o = g.bind(null, n, e), i = function() { + ! function(t) { + if (null === t.parentNode) return !1; + t.parentNode.removeChild(t) + }(n) + }; + return o(t), + function(e) { + if (e) { + if (e.css === t.css && e.media === t.media && e.sourceMap === t.sourceMap) return; + o(t = e) + } else i() + } + } + t.exports = function(t, e) { + (e = e || {}).singleton || "boolean" == typeof e.singleton || (e.singleton = i()); + var n = l(t = t || [], e); + return function(t) { + if (t = t || [], "[object Array]" === Object.prototype.toString.call(t)) { + for (var o = 0; o < n.length; o++) { + var i = a(n[o]); + s[i].references-- + } + for (var r = l(t, e), c = 0; c < n.length; c++) { + var d = a(n[c]); + 0 === s[d].references && (s[d].updater(), s.splice(d, 1)) + } + n = r + } + } + } + } + }, + e = {}; + + function n(o) { + var i = e[o]; + if (void 0 !== i) return i.exports; + var r = e[o] = { + id: o, + exports: {} + }; + return t[o](r, r.exports, n), r.exports + } + n.n = t => { + var e = t && t.__esModule ? () => t.default : () => t; + return n.d(e, { + a: e + }), e + }, n.d = (t, e) => { + for (var o in e) n.o(e, o) && !n.o(t, o) && Object.defineProperty(t, o, { + enumerable: !0, + get: e[o] + }) + }, n.g = function() { + if ("object" == typeof globalThis) return globalThis; + try { + return this || new Function("return this")() + } catch (t) { + if ("object" == typeof window) return window + } + }(), n.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e), n.nc = void 0; + var o = {}; + return (() => { + "use strict"; + n.d(o, { + default: () => xP + }); + const t = function() { + try { + return navigator.userAgent.toLowerCase() + } catch (t) { + return "" + } + }(); + var e; + const i = { + isMac: r(t), + isWindows: (e = t, e.indexOf("windows") > -1), + isGecko: function(t) { + return !!t.match(/gecko\/\d+/) + }(t), + isSafari: function(t) { + return t.indexOf(" applewebkit/") > -1 && -1 === t.indexOf("chrome") + }(t), + isiOS: function(t) { + return !!t.match(/iphone|ipad/i) || r(t) && navigator.maxTouchPoints > 0 + }(t), + isAndroid: function(t) { + return t.indexOf("android") > -1 + }(t), + isBlink: function(t) { + return t.indexOf("chrome/") > -1 && t.indexOf("edge/") < 0 + }(t), + features: { + isRegExpUnicodePropertySupported: function() { + let t = !1; + try { + t = 0 === "ć".search(new RegExp("[\\p{L}]", "u")) + } catch (t) {} + return t + }() + } + }; + + function r(t) { + return t.indexOf("macintosh") > -1 + } + + function s(t, e, n, o) { + n = n || function(t, e) { + return t === e + }; + const i = Array.isArray(t) ? t : Array.prototype.slice.call(t), + r = Array.isArray(e) ? e : Array.prototype.slice.call(e), + s = function(t, e, n) { + const o = a(t, e, n); + if (-1 === o) return { + firstIndex: -1, + lastIndexOld: -1, + lastIndexNew: -1 + }; + const i = l(t, o), + r = l(e, o), + s = a(i, r, n), + c = t.length - s, + d = e.length - s; + return { + firstIndex: o, + lastIndexOld: c, + lastIndexNew: d + } + }(i, r, n), + c = o ? function(t, e) { + const { + firstIndex: n, + lastIndexOld: o, + lastIndexNew: i + } = t; + if (-1 === n) return Array(e).fill("equal"); + let r = []; + n > 0 && (r = r.concat(Array(n).fill("equal"))); + i - n > 0 && (r = r.concat(Array(i - n).fill("insert"))); + o - n > 0 && (r = r.concat(Array(o - n).fill("delete"))); + i < e && (r = r.concat(Array(e - i).fill("equal"))); + return r + }(s, r.length) : function(t, e) { + const n = [], + { + firstIndex: o, + lastIndexOld: i, + lastIndexNew: r + } = e; + r - o > 0 && n.push({ + index: o, + type: "insert", + values: t.slice(o, r) + }); + i - o > 0 && n.push({ + index: o + (r - o), + type: "delete", + howMany: i - o + }); + return n + }(r, s); + return c + } + + function a(t, e, n) { + for (let o = 0; o < Math.max(t.length, e.length); o++) + if (void 0 === t[o] || void 0 === e[o] || !n(t[o], e[o])) return o; + return -1 + } + + function l(t, e) { + return t.slice(e).reverse() + } + + function c(t, e, n) { + n = n || function(t, e) { + return t === e + }; + const o = t.length, + i = e.length; + if (o > 200 || i > 200 || o + i > 300) return c.fastDiff(t, e, n, !0); + let r, s; + if (i < o) { + const n = t; + t = e, e = n, r = "delete", s = "insert" + } else r = "insert", s = "delete"; + const a = t.length, + l = e.length, + d = l - a, + h = {}, + u = {}; + + function g(o) { + const i = (void 0 !== u[o - 1] ? u[o - 1] : -1) + 1, + c = void 0 !== u[o + 1] ? u[o + 1] : -1, + d = i > c ? -1 : 1; + h[o + d] && (h[o] = h[o + d].slice(0)), h[o] || (h[o] = []), h[o].push(i > c ? r : s); + let g = Math.max(i, c), + m = g - o; + for (; m < a && g < l && n(t[m], e[g]);) m++, g++, h[o].push("equal"); + return g + } + let m, p = 0; + do { + for (m = -p; m < d; m++) u[m] = g(m); + for (m = d + p; m > d; m--) u[m] = g(m); + u[d] = g(d), p++ + } while (u[d] !== l); + return h[d].slice(1) + } + c.fastDiff = s; + const d = function() { + return function t() { + t.called = !0 + } + }; + class h { + constructor(t, e) { + this.source = t, this.name = e, this.path = [], this.stop = d(), this.off = d() + } + } + const u = new Array(256).fill("").map(((t, e) => ("0" + e.toString(16)).slice(-2))); + + function g() { + const t = 4294967296 * Math.random() >>> 0, + e = 4294967296 * Math.random() >>> 0, + n = 4294967296 * Math.random() >>> 0, + o = 4294967296 * Math.random() >>> 0; + return "e" + u[t >> 0 & 255] + u[t >> 8 & 255] + u[t >> 16 & 255] + u[t >> 24 & 255] + u[e >> 0 & 255] + u[e >> 8 & 255] + u[e >> 16 & 255] + u[e >> 24 & 255] + u[n >> 0 & 255] + u[n >> 8 & 255] + u[n >> 16 & 255] + u[n >> 24 & 255] + u[o >> 0 & 255] + u[o >> 8 & 255] + u[o >> 16 & 255] + u[o >> 24 & 255] + } + const m = { + get(t = "normal") { + return "number" != typeof t ? this[t] || this.normal : t + }, + highest: 1e5, + high: 1e3, + normal: 0, + low: -1e3, + lowest: -1e5 + }; + + function p(t, e) { + const n = m.get(e.priority); + for (let o = 0; o < t.length; o++) + if (m.get(t[o].priority) < n) return void t.splice(o, 0, e); + t.push(e) + } + const f = "https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html"; + class b extends Error { + constructor(t, e, n) { + super(function(t, e) { + const n = new WeakSet, + o = (t, e) => { + if ("object" == typeof e && null !== e) { + if (n.has(e)) return `[object ${e.constructor.name}]`; + n.add(e) + } + return e + }, + i = e ? ` ${JSON.stringify(e,o)}` : "", + r = w(t); + return t + i + r + }(t, n)), this.name = "CKEditorError", this.context = e, this.data = n + } + is(t) { + return "CKEditorError" === t + } + static rethrowUnexpectedError(t, e) { + if (t.is && t.is("CKEditorError")) throw t; + const n = new b(t.message, e); + throw n.stack = t.stack, n + } + } + + function k(t, e) { + console.warn(...A(t, e)) + } + + function w(t) { + return `\nRead more: ${f}#error-${t}` + } + + function A(t, e) { + const n = w(t); + return e ? [t, e, n] : [t, n] + } + const C = "38.1.1", + _ = new Date(2023, 6, 11), + v = "object" == typeof window ? window : n.g; + if (v.CKEDITOR_VERSION) throw new b("ckeditor-duplicated-modules", null); + v.CKEDITOR_VERSION = C; + const y = Symbol("listeningTo"), + x = Symbol("emitterId"), + E = Symbol("delegations"), + D = S(Object); + + function S(t) { + if (!t) return D; + return class extends t { + on(t, e, n) { + this.listenTo(this, t, e, n) + } + once(t, e, n) { + let o = !1; + this.listenTo(this, t, ((t, ...n) => { + o || (o = !0, t.off(), e.call(this, t, ...n)) + }), n) + } + off(t, e) { + this.stopListening(this, t, e) + } + listenTo(t, e, n, o = {}) { + let i, r; + this[y] || (this[y] = {}); + const s = this[y]; + B(t) || T(t); + const a = B(t); + (i = s[a]) || (i = s[a] = { + emitter: t, + callbacks: {} + }), (r = i.callbacks[e]) || (r = i.callbacks[e] = []), r.push(n), + function(t, e, n, o, i) { + e._addEventListener ? e._addEventListener(n, o, i) : t._addEventListener.call(e, n, o, i) + }(this, t, e, n, o) + } + stopListening(t, e, n) { + const o = this[y]; + let i = t && B(t); + const r = o && i ? o[i] : void 0, + s = r && e ? r.callbacks[e] : void 0; + if (!(!o || t && !r || e && !s)) + if (n) { + V(this, t, e, n); - 1 !== s.indexOf(n) && (1 === s.length ? delete r.callbacks[e] : V(this, t, e, n)) + } else if (s) { + for (; n = s.pop();) V(this, t, e, n); + delete r.callbacks[e] + } else if (r) { + for (e in r.callbacks) this.stopListening(t, e); + delete o[i] + } else { + for (i in o) this.stopListening(o[i].emitter); + delete this[y] + } + } + fire(t, ...e) { + try { + const n = t instanceof h ? t : new h(this, t), + o = n.name; + let i = R(this, o); + if (n.path.push(this), i) { + const t = [n, ...e]; + i = Array.from(i); + for (let e = 0; e < i.length && (i[e].callback.apply(this, t), n.off.called && (delete n.off.called, this._removeEventListener(o, i[e].callback)), !n.stop.called); e++); + } + const r = this[E]; + if (r) { + const t = r.get(o), + i = r.get("*"); + t && z(t, n, e), i && z(i, n, e) + } + return n.return + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + delegate(...t) { + return { + to: (e, n) => { + this[E] || (this[E] = new Map), t.forEach((t => { + const o = this[E].get(t); + o ? o.set(e, n) : this[E].set(t, new Map([ + [e, n] + ])) + })) + } + } + } + stopDelegating(t, e) { + if (this[E]) + if (t) + if (e) { + const n = this[E].get(t); + n && n.delete(e) + } else this[E].delete(t); + else this[E].clear() + } + _addEventListener(t, e, n) { + ! function(t, e) { + const n = I(t); + if (n[e]) return; + let o = e, + i = null; + const r = []; + for (; + "" !== o && !n[o];) n[o] = { + callbacks: [], + childEvents: [] + }, r.push(n[o]), i && n[o].childEvents.push(i), i = o, o = o.substr(0, o.lastIndexOf(":")); + if ("" !== o) { + for (const t of r) t.callbacks = n[o].callbacks.slice(); + n[o].childEvents.push(i) + } + }(this, t); + const o = P(this, t), + i = { + callback: e, + priority: m.get(n.priority) + }; + for (const t of o) p(t, i) + } + _removeEventListener(t, e) { + const n = P(this, t); + for (const t of n) + for (let n = 0; n < t.length; n++) t[n].callback == e && (t.splice(n, 1), n--) + } + } + } + + function T(t, e) { + t[x] || (t[x] = e || g()) + } + + function B(t) { + return t[x] + } + + function I(t) { + return t._events || Object.defineProperty(t, "_events", { + value: {} + }), t._events + } + + function P(t, e) { + const n = I(t)[e]; + if (!n) return []; + let o = [n.callbacks]; + for (let e = 0; e < n.childEvents.length; e++) { + const i = P(t, n.childEvents[e]); + o = o.concat(i) + } + return o + } + + function R(t, e) { + let n; + return t._events && (n = t._events[e]) && n.callbacks.length ? n.callbacks : e.indexOf(":") > -1 ? R(t, e.substr(0, e.lastIndexOf(":"))) : null + } + + function z(t, e, n) { + for (let [o, i] of t) { + i ? "function" == typeof i && (i = i(e.name)) : i = e.name; + const t = new h(e.source, i); + t.path = [...e.path], o.fire(t, ...n) + } + } + + function V(t, e, n, o) { + e._removeEventListener ? e._removeEventListener(n, o) : t._removeEventListener.call(e, n, o) + } ["on", "once", "off", "listenTo", "stopListening", "fire", "delegate", "stopDelegating", "_addEventListener", "_removeEventListener"].forEach((t => { + S[t] = D.prototype[t] + })); + const O = function(t) { + var e = typeof t; + return null != t && ("object" == e || "function" == e) + }, + F = Symbol("observableProperties"), + M = Symbol("boundObservables"), + N = Symbol("boundProperties"), + L = Symbol("decoratedMethods"), + H = Symbol("decoratedOriginal"), + j = q(S()); + + function q(t) { + if (!t) return j; + return class extends t { + set(t, e) { + if (O(t)) return void Object.keys(t).forEach((e => { + this.set(e, t[e]) + }), this); + W(this); + const n = this[F]; + if (t in this && !n.has(t)) throw new b("observable-set-cannot-override", this); + Object.defineProperty(this, t, { + enumerable: !0, + configurable: !0, + get: () => n.get(t), + set(e) { + const o = n.get(t); + let i = this.fire(`set:${t}`, t, e, o); + void 0 === i && (i = e), o === i && n.has(t) || (n.set(t, i), this.fire(`change:${t}`, t, i, o)) + } + }), this[t] = e + } + bind(...t) { + if (!t.length || !K(t)) throw new b("observable-bind-wrong-properties", this); + if (new Set(t).size !== t.length) throw new b("observable-bind-duplicate-properties", this); + W(this); + const e = this[N]; + t.forEach((t => { + if (e.has(t)) throw new b("observable-bind-rebind", this) + })); + const n = new Map; + return t.forEach((t => { + const o = { + property: t, + to: [] + }; + e.set(t, o), n.set(t, o) + })), { + to: U, + toMany: G, + _observable: this, + _bindProperties: t, + _to: [], + _bindings: n + } + } + unbind(...t) { + if (!this[F]) return; + const e = this[N], + n = this[M]; + if (t.length) { + if (!K(t)) throw new b("observable-unbind-wrong-properties", this); + t.forEach((t => { + const o = e.get(t); + o && (o.to.forEach((([t, e]) => { + const i = n.get(t), + r = i[e]; + r.delete(o), r.size || delete i[e], Object.keys(i).length || (n.delete(t), this.stopListening(t, "change")) + })), e.delete(t)) + })) + } else n.forEach(((t, e) => { + this.stopListening(e, "change") + })), n.clear(), e.clear() + } + decorate(t) { + W(this); + const e = this[t]; + if (!e) throw new b("observablemixin-cannot-decorate-undefined", this, { + object: this, + methodName: t + }); + this.on(t, ((t, n) => { + t.return = e.apply(this, n) + })), this[t] = function(...e) { + return this.fire(t, e) + }, this[t][H] = e, this[L] || (this[L] = []), this[L].push(t) + } + stopListening(t, e, n) { + if (!t && this[L]) { + for (const t of this[L]) this[t] = this[t][H]; + delete this[L] + } + super.stopListening(t, e, n) + } + } + } + + function W(t) { + t[F] || (Object.defineProperty(t, F, { + value: new Map + }), Object.defineProperty(t, M, { + value: new Map + }), Object.defineProperty(t, N, { + value: new Map + })) + } + + function U(...t) { + const e = function(...t) { + if (!t.length) throw new b("observable-bind-to-parse-error", null); + const e = { + to: [] + }; + let n; + "function" == typeof t[t.length - 1] && (e.callback = t.pop()); + return t.forEach((t => { + if ("string" == typeof t) n.properties.push(t); + else { + if ("object" != typeof t) throw new b("observable-bind-to-parse-error", null); + n = { + observable: t, + properties: [] + }, e.to.push(n) + } + })), e + }(...t), + n = Array.from(this._bindings.keys()), + o = n.length; + if (!e.callback && e.to.length > 1) throw new b("observable-bind-to-no-callback", this); + if (o > 1 && e.callback) throw new b("observable-bind-to-extra-callback", this); + var i; + e.to.forEach((t => { + if (t.properties.length && t.properties.length !== o) throw new b("observable-bind-to-properties-length", this); + t.properties.length || (t.properties = this._bindProperties) + })), this._to = e.to, e.callback && (this._bindings.get(n[0]).callback = e.callback), i = this._observable, this._to.forEach((t => { + const e = i[M]; + let n; + e.get(t.observable) || i.listenTo(t.observable, "change", ((o, r) => { + n = e.get(t.observable)[r], n && n.forEach((t => { + Z(i, t.property) + })) + })) + })), + function(t) { + let e; + t._bindings.forEach(((n, o) => { + t._to.forEach((i => { + e = i.properties[n.callback ? 0 : t._bindProperties.indexOf(o)], n.to.push([i.observable, e]), + function(t, e, n, o) { + const i = t[M], + r = i.get(n), + s = r || {}; + s[o] || (s[o] = new Set); + s[o].add(e), r || i.set(n, s) + }(t._observable, n, i.observable, e) + })) + })) + }(this), this._bindProperties.forEach((t => { + Z(this._observable, t) + })) + } + + function G(t, e, n) { + if (this._bindings.size > 1) throw new b("observable-bind-to-many-not-one-binding", this); + this.to(... function(t, e) { + const n = t.map((t => [t, e])); + return Array.prototype.concat.apply([], n) + }(t, e), n) + } + + function K(t) { + return t.every((t => "string" == typeof t)) + } + + function Z(t, e) { + const n = t[N].get(e); + let o; + n.callback ? o = n.callback.apply(t, n.to.map((t => t[0][t[1]]))) : (o = n.to[0], o = o[0][o[1]]), Object.prototype.hasOwnProperty.call(t, e) ? t[e] = o : t.set(e, o) + } + + function J(t) { + let e = 0; + for (const n of t) e++; + return e + } + + function Y(t, e) { + const n = Math.min(t.length, e.length); + for (let o = 0; o < n; o++) + if (t[o] != e[o]) return o; + return t.length == e.length ? "same" : t.length < e.length ? "prefix" : "extension" + } + + function Q(t) { + return !(!t || !t[Symbol.iterator]) + } ["set", "bind", "unbind", "decorate", "on", "once", "off", "listenTo", "stopListening", "fire", "delegate", "stopDelegating", "_addEventListener", "_removeEventListener"].forEach((t => { + q[t] = j.prototype[t] + })); + const X = "object" == typeof global && global && global.Object === Object && global; + var tt = "object" == typeof self && self && self.Object === Object && self; + const et = X || tt || Function("return this")(); + const nt = et.Symbol; + var ot = Object.prototype, + it = ot.hasOwnProperty, + rt = ot.toString, + st = nt ? nt.toStringTag : void 0; + const at = function(t) { + var e = it.call(t, st), + n = t[st]; + try { + t[st] = void 0; + var o = !0 + } catch (t) {} + var i = rt.call(t); + return o && (e ? t[st] = n : delete t[st]), i + }; + var lt = Object.prototype.toString; + const ct = function(t) { + return lt.call(t) + }; + var dt = nt ? nt.toStringTag : void 0; + const ht = function(t) { + return null == t ? void 0 === t ? "[object Undefined]" : "[object Null]" : dt && dt in Object(t) ? at(t) : ct(t) + }; + const ut = Array.isArray; + const gt = function(t) { + return null != t && "object" == typeof t + }; + const mt = function(t) { + return "string" == typeof t || !ut(t) && gt(t) && "[object String]" == ht(t) + }; + + function pt(t, e, n = {}, o = []) { + const i = n && n.xmlns, + r = i ? t.createElementNS(i, e) : t.createElement(e); + for (const t in n) r.setAttribute(t, n[t]); + !mt(o) && Q(o) || (o = [o]); + for (let e of o) mt(e) && (e = t.createTextNode(e)), r.appendChild(e); + return r + } + const ft = function(t, e) { + return function(n) { + return t(e(n)) + } + }; + const bt = ft(Object.getPrototypeOf, Object); + var kt = Function.prototype, + wt = Object.prototype, + At = kt.toString, + Ct = wt.hasOwnProperty, + _t = At.call(Object); + const vt = function(t) { + if (!gt(t) || "[object Object]" != ht(t)) return !1; + var e = bt(t); + if (null === e) return !0; + var n = Ct.call(e, "constructor") && e.constructor; + return "function" == typeof n && n instanceof n && At.call(n) == _t + }; + const yt = function() { + this.__data__ = [], this.size = 0 + }; + const xt = function(t, e) { + return t === e || t != t && e != e + }; + const Et = function(t, e) { + for (var n = t.length; n--;) + if (xt(t[n][0], e)) return n; + return -1 + }; + var Dt = Array.prototype.splice; + const St = function(t) { + var e = this.__data__, + n = Et(e, t); + return !(n < 0) && (n == e.length - 1 ? e.pop() : Dt.call(e, n, 1), --this.size, !0) + }; + const Tt = function(t) { + var e = this.__data__, + n = Et(e, t); + return n < 0 ? void 0 : e[n][1] + }; + const Bt = function(t) { + return Et(this.__data__, t) > -1 + }; + const It = function(t, e) { + var n = this.__data__, + o = Et(n, t); + return o < 0 ? (++this.size, n.push([t, e])) : n[o][1] = e, this + }; + + function Pt(t) { + var e = -1, + n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var o = t[e]; + this.set(o[0], o[1]) + } + } + Pt.prototype.clear = yt, Pt.prototype.delete = St, Pt.prototype.get = Tt, Pt.prototype.has = Bt, Pt.prototype.set = It; + const Rt = Pt; + const zt = function() { + this.__data__ = new Rt, this.size = 0 + }; + const Vt = function(t) { + var e = this.__data__, + n = e.delete(t); + return this.size = e.size, n + }; + const Ot = function(t) { + return this.__data__.get(t) + }; + const Ft = function(t) { + return this.__data__.has(t) + }; + const Mt = function(t) { + if (!O(t)) return !1; + var e = ht(t); + return "[object Function]" == e || "[object GeneratorFunction]" == e || "[object AsyncFunction]" == e || "[object Proxy]" == e + }; + const Nt = et["__core-js_shared__"]; + var Lt = function() { + var t = /[^.]+$/.exec(Nt && Nt.keys && Nt.keys.IE_PROTO || ""); + return t ? "Symbol(src)_1." + t : "" + }(); + const Ht = function(t) { + return !!Lt && Lt in t + }; + var jt = Function.prototype.toString; + const qt = function(t) { + if (null != t) { + try { + return jt.call(t) + } catch (t) {} + try { + return t + "" + } catch (t) {} + } + return "" + }; + var Wt = /^\[object .+?Constructor\]$/, + Ut = Function.prototype, + $t = Object.prototype, + Gt = Ut.toString, + Kt = $t.hasOwnProperty, + Zt = RegExp("^" + Gt.call(Kt).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); + const Jt = function(t) { + return !(!O(t) || Ht(t)) && (Mt(t) ? Zt : Wt).test(qt(t)) + }; + const Yt = function(t, e) { + return null == t ? void 0 : t[e] + }; + const Qt = function(t, e) { + var n = Yt(t, e); + return Jt(n) ? n : void 0 + }; + const Xt = Qt(et, "Map"); + const te = Qt(Object, "create"); + const ee = function() { + this.__data__ = te ? te(null) : {}, this.size = 0 + }; + const ne = function(t) { + var e = this.has(t) && delete this.__data__[t]; + return this.size -= e ? 1 : 0, e + }; + var oe = Object.prototype.hasOwnProperty; + const ie = function(t) { + var e = this.__data__; + if (te) { + var n = e[t]; + return "__lodash_hash_undefined__" === n ? void 0 : n + } + return oe.call(e, t) ? e[t] : void 0 + }; + var re = Object.prototype.hasOwnProperty; + const se = function(t) { + var e = this.__data__; + return te ? void 0 !== e[t] : re.call(e, t) + }; + const ae = function(t, e) { + var n = this.__data__; + return this.size += this.has(t) ? 0 : 1, n[t] = te && void 0 === e ? "__lodash_hash_undefined__" : e, this + }; + + function le(t) { + var e = -1, + n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var o = t[e]; + this.set(o[0], o[1]) + } + } + le.prototype.clear = ee, le.prototype.delete = ne, le.prototype.get = ie, le.prototype.has = se, le.prototype.set = ae; + const ce = le; + const de = function() { + this.size = 0, this.__data__ = { + hash: new ce, + map: new(Xt || Rt), + string: new ce + } + }; + const he = function(t) { + var e = typeof t; + return "string" == e || "number" == e || "symbol" == e || "boolean" == e ? "__proto__" !== t : null === t + }; + const ue = function(t, e) { + var n = t.__data__; + return he(e) ? n["string" == typeof e ? "string" : "hash"] : n.map + }; + const ge = function(t) { + var e = ue(this, t).delete(t); + return this.size -= e ? 1 : 0, e + }; + const me = function(t) { + return ue(this, t).get(t) + }; + const pe = function(t) { + return ue(this, t).has(t) + }; + const fe = function(t, e) { + var n = ue(this, t), + o = n.size; + return n.set(t, e), this.size += n.size == o ? 0 : 1, this + }; + + function be(t) { + var e = -1, + n = null == t ? 0 : t.length; + for (this.clear(); ++e < n;) { + var o = t[e]; + this.set(o[0], o[1]) + } + } + be.prototype.clear = de, be.prototype.delete = ge, be.prototype.get = me, be.prototype.has = pe, be.prototype.set = fe; + const ke = be; + const we = function(t, e) { + var n = this.__data__; + if (n instanceof Rt) { + var o = n.__data__; + if (!Xt || o.length < 199) return o.push([t, e]), this.size = ++n.size, this; + n = this.__data__ = new ke(o) + } + return n.set(t, e), this.size = n.size, this + }; + + function Ae(t) { + var e = this.__data__ = new Rt(t); + this.size = e.size + } + Ae.prototype.clear = zt, Ae.prototype.delete = Vt, Ae.prototype.get = Ot, Ae.prototype.has = Ft, Ae.prototype.set = we; + const Ce = Ae; + const _e = function(t, e) { + for (var n = -1, o = null == t ? 0 : t.length; ++n < o && !1 !== e(t[n], n, t);); + return t + }; + const ve = function() { + try { + var t = Qt(Object, "defineProperty"); + return t({}, "", {}), t + } catch (t) {} + }(); + const ye = function(t, e, n) { + "__proto__" == e && ve ? ve(t, e, { + configurable: !0, + enumerable: !0, + value: n, + writable: !0 + }) : t[e] = n + }; + var xe = Object.prototype.hasOwnProperty; + const Ee = function(t, e, n) { + var o = t[e]; + xe.call(t, e) && xt(o, n) && (void 0 !== n || e in t) || ye(t, e, n) + }; + const De = function(t, e, n, o) { + var i = !n; + n || (n = {}); + for (var r = -1, s = e.length; ++r < s;) { + var a = e[r], + l = o ? o(n[a], t[a], a, n, t) : void 0; + void 0 === l && (l = t[a]), i ? ye(n, a, l) : Ee(n, a, l) + } + return n + }; + const Se = function(t, e) { + for (var n = -1, o = Array(t); ++n < t;) o[n] = e(n); + return o + }; + const Te = function(t) { + return gt(t) && "[object Arguments]" == ht(t) + }; + var Be = Object.prototype, + Ie = Be.hasOwnProperty, + Pe = Be.propertyIsEnumerable; + const Re = Te(function() { + return arguments + }()) ? Te : function(t) { + return gt(t) && Ie.call(t, "callee") && !Pe.call(t, "callee") + }; + const ze = function() { + return !1 + }; + var Ve = "object" == typeof exports && exports && !exports.nodeType && exports, + Oe = Ve && "object" == typeof module && module && !module.nodeType && module, + Fe = Oe && Oe.exports === Ve ? et.Buffer : void 0; + const Me = (Fe ? Fe.isBuffer : void 0) || ze; + var Ne = /^(?:0|[1-9]\d*)$/; + const Le = function(t, e) { + var n = typeof t; + return !!(e = null == e ? 9007199254740991 : e) && ("number" == n || "symbol" != n && Ne.test(t)) && t > -1 && t % 1 == 0 && t < e + }; + const He = function(t) { + return "number" == typeof t && t > -1 && t % 1 == 0 && t <= 9007199254740991 + }; + var je = {}; + je["[object Float32Array]"] = je["[object Float64Array]"] = je["[object Int8Array]"] = je["[object Int16Array]"] = je["[object Int32Array]"] = je["[object Uint8Array]"] = je["[object Uint8ClampedArray]"] = je["[object Uint16Array]"] = je["[object Uint32Array]"] = !0, je["[object Arguments]"] = je["[object Array]"] = je["[object ArrayBuffer]"] = je["[object Boolean]"] = je["[object DataView]"] = je["[object Date]"] = je["[object Error]"] = je["[object Function]"] = je["[object Map]"] = je["[object Number]"] = je["[object Object]"] = je["[object RegExp]"] = je["[object Set]"] = je["[object String]"] = je["[object WeakMap]"] = !1; + const qe = function(t) { + return gt(t) && He(t.length) && !!je[ht(t)] + }; + const We = function(t) { + return function(e) { + return t(e) + } + }; + var Ue = "object" == typeof exports && exports && !exports.nodeType && exports, + $e = Ue && "object" == typeof module && module && !module.nodeType && module, + Ge = $e && $e.exports === Ue && X.process; + const Ke = function() { + try { + var t = $e && $e.require && $e.require("util").types; + return t || Ge && Ge.binding && Ge.binding("util") + } catch (t) {} + }(); + var Ze = Ke && Ke.isTypedArray; + const Je = Ze ? We(Ze) : qe; + var Ye = Object.prototype.hasOwnProperty; + const Qe = function(t, e) { + var n = ut(t), + o = !n && Re(t), + i = !n && !o && Me(t), + r = !n && !o && !i && Je(t), + s = n || o || i || r, + a = s ? Se(t.length, String) : [], + l = a.length; + for (var c in t) !e && !Ye.call(t, c) || s && ("length" == c || i && ("offset" == c || "parent" == c) || r && ("buffer" == c || "byteLength" == c || "byteOffset" == c) || Le(c, l)) || a.push(c); + return a + }; + var Xe = Object.prototype; + const tn = function(t) { + var e = t && t.constructor; + return t === ("function" == typeof e && e.prototype || Xe) + }; + const en = ft(Object.keys, Object); + var nn = Object.prototype.hasOwnProperty; + const on = function(t) { + if (!tn(t)) return en(t); + var e = []; + for (var n in Object(t)) nn.call(t, n) && "constructor" != n && e.push(n); + return e + }; + const rn = function(t) { + return null != t && He(t.length) && !Mt(t) + }; + const sn = function(t) { + return rn(t) ? Qe(t) : on(t) + }; + const an = function(t, e) { + return t && De(e, sn(e), t) + }; + const ln = function(t) { + var e = []; + if (null != t) + for (var n in Object(t)) e.push(n); + return e + }; + var cn = Object.prototype.hasOwnProperty; + const dn = function(t) { + if (!O(t)) return ln(t); + var e = tn(t), + n = []; + for (var o in t)("constructor" != o || !e && cn.call(t, o)) && n.push(o); + return n + }; + const hn = function(t) { + return rn(t) ? Qe(t, !0) : dn(t) + }; + const un = function(t, e) { + return t && De(e, hn(e), t) + }; + var gn = "object" == typeof exports && exports && !exports.nodeType && exports, + mn = gn && "object" == typeof module && module && !module.nodeType && module, + pn = mn && mn.exports === gn ? et.Buffer : void 0, + fn = pn ? pn.allocUnsafe : void 0; + const bn = function(t, e) { + if (e) return t.slice(); + var n = t.length, + o = fn ? fn(n) : new t.constructor(n); + return t.copy(o), o + }; + const kn = function(t, e) { + var n = -1, + o = t.length; + for (e || (e = Array(o)); ++n < o;) e[n] = t[n]; + return e + }; + const wn = function(t, e) { + for (var n = -1, o = null == t ? 0 : t.length, i = 0, r = []; ++n < o;) { + var s = t[n]; + e(s, n, t) && (r[i++] = s) + } + return r + }; + const An = function() { + return [] + }; + var Cn = Object.prototype.propertyIsEnumerable, + _n = Object.getOwnPropertySymbols; + const vn = _n ? function(t) { + return null == t ? [] : (t = Object(t), wn(_n(t), (function(e) { + return Cn.call(t, e) + }))) + } : An; + const yn = function(t, e) { + return De(t, vn(t), e) + }; + const xn = function(t, e) { + for (var n = -1, o = e.length, i = t.length; ++n < o;) t[i + n] = e[n]; + return t + }; + const En = Object.getOwnPropertySymbols ? function(t) { + for (var e = []; t;) xn(e, vn(t)), t = bt(t); + return e + } : An; + const Dn = function(t, e) { + return De(t, En(t), e) + }; + const Sn = function(t, e, n) { + var o = e(t); + return ut(t) ? o : xn(o, n(t)) + }; + const Tn = function(t) { + return Sn(t, sn, vn) + }; + const Bn = function(t) { + return Sn(t, hn, En) + }; + const In = Qt(et, "DataView"); + const Pn = Qt(et, "Promise"); + const Rn = Qt(et, "Set"); + const zn = Qt(et, "WeakMap"); + var Vn = "[object Map]", + On = "[object Promise]", + Fn = "[object Set]", + Mn = "[object WeakMap]", + Nn = "[object DataView]", + Ln = qt(In), + Hn = qt(Xt), + jn = qt(Pn), + qn = qt(Rn), + Wn = qt(zn), + Un = ht; + (In && Un(new In(new ArrayBuffer(1))) != Nn || Xt && Un(new Xt) != Vn || Pn && Un(Pn.resolve()) != On || Rn && Un(new Rn) != Fn || zn && Un(new zn) != Mn) && (Un = function(t) { + var e = ht(t), + n = "[object Object]" == e ? t.constructor : void 0, + o = n ? qt(n) : ""; + if (o) switch (o) { + case Ln: + return Nn; + case Hn: + return Vn; + case jn: + return On; + case qn: + return Fn; + case Wn: + return Mn + } + return e + }); + const $n = Un; + var Gn = Object.prototype.hasOwnProperty; + const Kn = function(t) { + var e = t.length, + n = new t.constructor(e); + return e && "string" == typeof t[0] && Gn.call(t, "index") && (n.index = t.index, n.input = t.input), n + }; + const Zn = et.Uint8Array; + const Jn = function(t) { + var e = new t.constructor(t.byteLength); + return new Zn(e).set(new Zn(t)), e + }; + const Yn = function(t, e) { + var n = e ? Jn(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.byteLength) + }; + var Qn = /\w*$/; + const Xn = function(t) { + var e = new t.constructor(t.source, Qn.exec(t)); + return e.lastIndex = t.lastIndex, e + }; + var to = nt ? nt.prototype : void 0, + eo = to ? to.valueOf : void 0; + const no = function(t) { + return eo ? Object(eo.call(t)) : {} + }; + const oo = function(t, e) { + var n = e ? Jn(t.buffer) : t.buffer; + return new t.constructor(n, t.byteOffset, t.length) + }; + const io = function(t, e, n) { + var o = t.constructor; + switch (e) { + case "[object ArrayBuffer]": + return Jn(t); + case "[object Boolean]": + case "[object Date]": + return new o(+t); + case "[object DataView]": + return Yn(t, n); + case "[object Float32Array]": + case "[object Float64Array]": + case "[object Int8Array]": + case "[object Int16Array]": + case "[object Int32Array]": + case "[object Uint8Array]": + case "[object Uint8ClampedArray]": + case "[object Uint16Array]": + case "[object Uint32Array]": + return oo(t, n); + case "[object Map]": + case "[object Set]": + return new o; + case "[object Number]": + case "[object String]": + return new o(t); + case "[object RegExp]": + return Xn(t); + case "[object Symbol]": + return no(t) + } + }; + var ro = Object.create; + const so = function() { + function t() {} + return function(e) { + if (!O(e)) return {}; + if (ro) return ro(e); + t.prototype = e; + var n = new t; + return t.prototype = void 0, n + } + }(); + const ao = function(t) { + return "function" != typeof t.constructor || tn(t) ? {} : so(bt(t)) + }; + const lo = function(t) { + return gt(t) && "[object Map]" == $n(t) + }; + var co = Ke && Ke.isMap; + const ho = co ? We(co) : lo; + const uo = function(t) { + return gt(t) && "[object Set]" == $n(t) + }; + var go = Ke && Ke.isSet; + const mo = go ? We(go) : uo; + var po = "[object Arguments]", + fo = "[object Function]", + bo = "[object Object]", + ko = {}; + ko[po] = ko["[object Array]"] = ko["[object ArrayBuffer]"] = ko["[object DataView]"] = ko["[object Boolean]"] = ko["[object Date]"] = ko["[object Float32Array]"] = ko["[object Float64Array]"] = ko["[object Int8Array]"] = ko["[object Int16Array]"] = ko["[object Int32Array]"] = ko["[object Map]"] = ko["[object Number]"] = ko[bo] = ko["[object RegExp]"] = ko["[object Set]"] = ko["[object String]"] = ko["[object Symbol]"] = ko["[object Uint8Array]"] = ko["[object Uint8ClampedArray]"] = ko["[object Uint16Array]"] = ko["[object Uint32Array]"] = !0, ko["[object Error]"] = ko[fo] = ko["[object WeakMap]"] = !1; + const wo = function t(e, n, o, i, r, s) { + var a, l = 1 & n, + c = 2 & n, + d = 4 & n; + if (o && (a = r ? o(e, i, r, s) : o(e)), void 0 !== a) return a; + if (!O(e)) return e; + var h = ut(e); + if (h) { + if (a = Kn(e), !l) return kn(e, a) + } else { + var u = $n(e), + g = u == fo || "[object GeneratorFunction]" == u; + if (Me(e)) return bn(e, l); + if (u == bo || u == po || g && !r) { + if (a = c || g ? {} : ao(e), !l) return c ? Dn(e, un(a, e)) : yn(e, an(a, e)) + } else { + if (!ko[u]) return r ? e : {}; + a = io(e, u, l) + } + } + s || (s = new Ce); + var m = s.get(e); + if (m) return m; + s.set(e, a), mo(e) ? e.forEach((function(i) { + a.add(t(i, n, o, i, e, s)) + })) : ho(e) && e.forEach((function(i, r) { + a.set(r, t(i, n, o, r, e, s)) + })); + var p = h ? void 0 : (d ? c ? Bn : Tn : c ? hn : sn)(e); + return _e(p || e, (function(i, r) { + p && (i = e[r = i]), Ee(a, r, t(i, n, o, r, e, s)) + })), a + }; + const Ao = function(t, e) { + return wo(t, 5, e = "function" == typeof e ? e : void 0) + }; + const Co = function(t) { + return gt(t) && 1 === t.nodeType && !vt(t) + }; + class _o { + constructor(t, e) { + this._config = {}, e && this.define(vo(e)), t && this._setObjectToTarget(this._config, t) + } + set(t, e) { + this._setToTarget(this._config, t, e) + } + define(t, e) { + this._setToTarget(this._config, t, e, !0) + } + get(t) { + return this._getFromSource(this._config, t) + }* names() { + for (const t of Object.keys(this._config)) yield t + } + _setToTarget(t, e, n, o = !1) { + if (vt(e)) return void this._setObjectToTarget(t, e, o); + const i = e.split("."); + e = i.pop(); + for (const e of i) vt(t[e]) || (t[e] = {}), t = t[e]; + if (vt(n)) return vt(t[e]) || (t[e] = {}), t = t[e], void this._setObjectToTarget(t, n, o); + o && void 0 !== t[e] || (t[e] = n) + } + _getFromSource(t, e) { + const n = e.split("."); + e = n.pop(); + for (const e of n) { + if (!vt(t[e])) { + t = null; + break + } + t = t[e] + } + return t ? vo(t[e]) : void 0 + } + _setObjectToTarget(t, e, n) { + Object.keys(e).forEach((o => { + this._setToTarget(t, o, e[o], n) + })) + } + } + + function vo(t) { + return Ao(t, yo) + } + + function yo(t) { + return Co(t) ? t : void 0 + } + + function xo(t) { + if (t) { + if (t.defaultView) return t instanceof t.defaultView.Document; + if (t.ownerDocument && t.ownerDocument.defaultView) return t instanceof t.ownerDocument.defaultView.Node + } + return !1 + } + + function Eo(t) { + const e = Object.prototype.toString.apply(t); + return "[object Window]" == e || "[object global]" == e + } + const Do = So(S()); + + function So(t) { + if (!t) return Do; + return class extends t { + listenTo(t, e, n, o = {}) { + if (xo(t) || Eo(t)) { + const i = { + capture: !!o.useCapture, + passive: !!o.usePassive + }, + r = this._getProxyEmitter(t, i) || new To(t, i); + this.listenTo(r, e, n, o) + } else super.listenTo(t, e, n, o) + } + stopListening(t, e, n) { + if (xo(t) || Eo(t)) { + const o = this._getAllProxyEmitters(t); + for (const t of o) this.stopListening(t, e, n) + } else super.stopListening(t, e, n) + } + _getProxyEmitter(t, e) { + return function(t, e) { + const n = t[y]; + return n && n[e] ? n[e].emitter : null + }(this, Bo(t, e)) + } + _getAllProxyEmitters(t) { + return [{ + capture: !1, + passive: !1 + }, { + capture: !1, + passive: !0 + }, { + capture: !0, + passive: !1 + }, { + capture: !0, + passive: !0 + }].map((e => this._getProxyEmitter(t, e))).filter((t => !!t)) + } + } + } ["_getProxyEmitter", "_getAllProxyEmitters", "on", "once", "off", "listenTo", "stopListening", "fire", "delegate", "stopDelegating", "_addEventListener", "_removeEventListener"].forEach((t => { + So[t] = Do.prototype[t] + })); + class To extends(S()) { + constructor(t, e) { + super(), T(this, Bo(t, e)), this._domNode = t, this._options = e + } + attach(t) { + if (this._domListeners && this._domListeners[t]) return; + const e = this._createDomListener(t); + this._domNode.addEventListener(t, e, this._options), this._domListeners || (this._domListeners = {}), this._domListeners[t] = e + } + detach(t) { + let e; + !this._domListeners[t] || (e = this._events[t]) && e.callbacks.length || this._domListeners[t].removeListener() + } + _addEventListener(t, e, n) { + this.attach(t), S().prototype._addEventListener.call(this, t, e, n) + } + _removeEventListener(t, e) { + S().prototype._removeEventListener.call(this, t, e), this.detach(t) + } + _createDomListener(t) { + const e = e => { + this.fire(t, e) + }; + return e.removeListener = () => { + this._domNode.removeEventListener(t, e, this._options), delete this._domListeners[t] + }, e + } + } + + function Bo(t, e) { + let n = function(t) { + return t["data-ck-expando"] || (t["data-ck-expando"] = g()) + }(t); + for (const t of Object.keys(e).sort()) e[t] && (n += "-" + t); + return n + } + let Io; + try { + Io = { + window, + document + } + } catch (t) { + Io = { + window: {}, + document: {} + } + } + const Po = Io; + + function Ro(t) { + const e = []; + let n = t; + for (; n && n.nodeType != Node.DOCUMENT_NODE;) e.unshift(n), n = n.parentNode; + return e + } + + function zo(t) { + return "[object Text]" == Object.prototype.toString.call(t) + } + + function Vo(t) { + return "[object Range]" == Object.prototype.toString.apply(t) + } + + function Oo(t) { + const e = t.ownerDocument.defaultView.getComputedStyle(t); + return { + top: parseInt(e.borderTopWidth, 10), + right: parseInt(e.borderRightWidth, 10), + bottom: parseInt(e.borderBottomWidth, 10), + left: parseInt(e.borderLeftWidth, 10) + } + } + const Fo = ["top", "right", "bottom", "left", "width", "height"]; + class Mo { + constructor(t) { + const e = Vo(t); + if (Object.defineProperty(this, "_source", { + value: t._source || t, + writable: !0, + enumerable: !1 + }), Ho(t) || e) + if (e) { + const e = Mo.getDomRangeRects(t); + No(this, Mo.getBoundingRect(e)) + } else No(this, t.getBoundingClientRect()); + else if (Eo(t)) { + const { + innerWidth: e, + innerHeight: n + } = t; + No(this, { + top: 0, + right: e, + bottom: n, + left: 0, + width: e, + height: n + }) + } else No(this, t) + } + clone() { + return new Mo(this) + } + moveTo(t, e) { + return this.top = e, this.right = t + this.width, this.bottom = e + this.height, this.left = t, this + } + moveBy(t, e) { + return this.top += e, this.right += t, this.left += t, this.bottom += e, this + } + getIntersection(t) { + const e = { + top: Math.max(this.top, t.top), + right: Math.min(this.right, t.right), + bottom: Math.min(this.bottom, t.bottom), + left: Math.max(this.left, t.left), + width: 0, + height: 0 + }; + return e.width = e.right - e.left, e.height = e.bottom - e.top, e.width < 0 || e.height < 0 ? null : new Mo(e) + } + getIntersectionArea(t) { + const e = this.getIntersection(t); + return e ? e.getArea() : 0 + } + getArea() { + return this.width * this.height + } + getVisible() { + const t = this._source; + let e = this.clone(); + if (Lo(t)) return e; + let n, o = t, + i = t.parentNode || t.commonAncestorContainer; + for (; i && !Lo(i);) { + if (o instanceof HTMLElement && "absolute" === jo(o) && (n = o), n && ("relative" !== jo(i) || "visible" === (r = i).ownerDocument.defaultView.getComputedStyle(r).overflow)) { + o = i, i = i.parentNode; + continue + } + const t = new Mo(i), + s = e.getIntersection(t); + if (!s) return null; + s.getArea() < e.getArea() && (e = s), o = i, i = i.parentNode + } + var r; + return e + } + isEqual(t) { + for (const e of Fo) + if (this[e] !== t[e]) return !1; + return !0 + } + contains(t) { + const e = this.getIntersection(t); + return !(!e || !e.isEqual(t)) + } + excludeScrollbarsAndBorders() { + const t = this._source; + let e, n, o; + if (Eo(t)) e = t.innerWidth - t.document.documentElement.clientWidth, n = t.innerHeight - t.document.documentElement.clientHeight, o = t.getComputedStyle(t.document.documentElement).direction; + else { + const i = Oo(t); + e = t.offsetWidth - t.clientWidth - i.left - i.right, n = t.offsetHeight - t.clientHeight - i.top - i.bottom, o = t.ownerDocument.defaultView.getComputedStyle(t).direction, this.left += i.left, this.top += i.top, this.right -= i.right, this.bottom -= i.bottom, this.width = this.right - this.left, this.height = this.bottom - this.top + } + return this.width -= e, "ltr" === o ? this.right -= e : this.left += e, this.height -= n, this.bottom -= n, this + } + static getDomRangeRects(t) { + const e = [], + n = Array.from(t.getClientRects()); + if (n.length) + for (const t of n) e.push(new Mo(t)); + else { + let n = t.startContainer; + zo(n) && (n = n.parentNode); + const o = new Mo(n.getBoundingClientRect()); + o.right = o.left, o.width = 0, e.push(o) + } + return e + } + static getBoundingRect(t) { + const e = { + left: Number.POSITIVE_INFINITY, + top: Number.POSITIVE_INFINITY, + right: Number.NEGATIVE_INFINITY, + bottom: Number.NEGATIVE_INFINITY, + width: 0, + height: 0 + }; + let n = 0; + for (const o of t) n++, e.left = Math.min(e.left, o.left), e.top = Math.min(e.top, o.top), e.right = Math.max(e.right, o.right), e.bottom = Math.max(e.bottom, o.bottom); + return 0 == n ? null : (e.width = e.right - e.left, e.height = e.bottom - e.top, new Mo(e)) + } + } + + function No(t, e) { + for (const n of Fo) t[n] = e[n] + } + + function Lo(t) { + return !!Ho(t) && t === t.ownerDocument.body + } + + function Ho(t) { + return null !== t && "object" == typeof t && 1 === t.nodeType && "function" == typeof t.getBoundingClientRect + } + + function jo(t) { + return t.ownerDocument.defaultView.getComputedStyle(t).position + } + const qo = class { + constructor(t, e) { + qo._observerInstance || qo._createObserver(), this._element = t, this._callback = e, qo._addElementCallback(t, e), qo._observerInstance.observe(t) + } + get element() { + return this._element + } + destroy() { + qo._deleteElementCallback(this._element, this._callback) + } + static _addElementCallback(t, e) { + qo._elementCallbacks || (qo._elementCallbacks = new Map); + let n = qo._elementCallbacks.get(t); + n || (n = new Set, qo._elementCallbacks.set(t, n)), n.add(e) + } + static _deleteElementCallback(t, e) { + const n = qo._getElementCallbacks(t); + n && (n.delete(e), n.size || (qo._elementCallbacks.delete(t), qo._observerInstance.unobserve(t))), qo._elementCallbacks && !qo._elementCallbacks.size && (qo._observerInstance = null, qo._elementCallbacks = null) + } + static _getElementCallbacks(t) { + return qo._elementCallbacks ? qo._elementCallbacks.get(t) : null + } + static _createObserver() { + qo._observerInstance = new Po.window.ResizeObserver((t => { + for (const e of t) { + const t = qo._getElementCallbacks(e.target); + if (t) + for (const n of t) n(e) + } + })) + } + }; + let Wo = qo; + + function Uo(t, e) { + t instanceof HTMLTextAreaElement && (t.value = e), t.innerHTML = e + } + + function $o(t) { + return e => e + t + } + + function Go(t) { + let e = 0; + for (; t.previousSibling;) t = t.previousSibling, e++; + return e + } + + function Ko(t, e, n) { + t.insertBefore(n, t.childNodes[e] || null) + } + + function Zo(t) { + return t && t.nodeType === Node.COMMENT_NODE + } + + function Jo(t) { + return !!(t && t.getClientRects && t.getClientRects().length) + } + Wo._observerInstance = null, Wo._elementCallbacks = null; + var Yo = Math.pow; + + function Qo({ + element: t, + target: e, + positions: n, + limiter: o, + fitInViewport: i, + viewportOffsetConfig: r + }) { + Mt(e) && (e = e()), Mt(o) && (o = o()); + const s = function(t) { + return t && t.parentNode ? t.offsetParent === Po.document.body ? null : t.offsetParent : null + }(t), + a = new Mo(t), + l = new Mo(e); + let c; + const d = i && function(t) { + t = Object.assign({ + top: 0, + bottom: 0, + left: 0, + right: 0 + }, t); + const e = new Mo(Po.window); + return e.top += t.top, e.height -= t.top, e.bottom -= t.bottom, e.height -= t.bottom, e + }(r) || null, + h = { + targetRect: l, + elementRect: a, + positionedElementAncestor: s, + viewportRect: d + }; + if (o || i) { + const t = o && new Mo(o).getVisible(); + Object.assign(h, { + limiterRect: t, + viewportRect: d + }), c = function(t, e) { + const { + elementRect: n + } = e, o = n.getArea(), i = t.map((t => new ti(t, e))).filter((t => !!t.name)); + let r = 0, + s = null; + for (const t of i) { + const { + limiterIntersectionArea: e, + viewportIntersectionArea: n + } = t; + if (e === o) return t; + const i = Yo(n, 2) + Yo(e, 2); + i > r && (r = i, s = t) + } + return s + }(n, h) || new ti(n[0], h) + } else c = new ti(n[0], h); + return c + } + + function Xo(t) { + const { + scrollX: e, + scrollY: n + } = Po.window; + return t.clone().moveBy(e, n) + } + class ti { + constructor(t, e) { + const n = t(e.targetRect, e.elementRect, e.viewportRect); + if (!n) return; + const { + left: o, + top: i, + name: r, + config: s + } = n; + this.name = r, this.config = s, this._positioningFunctionCorrdinates = { + left: o, + top: i + }, this._options = e + } + get left() { + return this._absoluteRect.left + } + get top() { + return this._absoluteRect.top + } + get limiterIntersectionArea() { + const t = this._options.limiterRect; + if (t) { + const e = this._options.viewportRect; + if (!e) return t.getIntersectionArea(this._rect); + { + const n = t.getIntersection(e); + if (n) return n.getIntersectionArea(this._rect) + } + } + return 0 + } + get viewportIntersectionArea() { + const t = this._options.viewportRect; + return t ? t.getIntersectionArea(this._rect) : 0 + } + get _rect() { + return this._cachedRect || (this._cachedRect = this._options.elementRect.clone().moveTo(this._positioningFunctionCorrdinates.left, this._positioningFunctionCorrdinates.top)), this._cachedRect + } + get _absoluteRect() { + return this._cachedAbsoluteRect || (this._cachedAbsoluteRect = Xo(this._rect), this._options.positionedElementAncestor && function(t, e) { + const n = Xo(new Mo(e)), + o = Oo(e); + let i = 0, + r = 0; + i -= n.left, r -= n.top, i += e.scrollLeft, r += e.scrollTop, i -= o.left, r -= o.top, t.moveBy(i, r) + }(this._cachedAbsoluteRect, this._options.positionedElementAncestor)), this._cachedAbsoluteRect + } + } + + function ei(t) { + const e = t.parentNode; + e && e.removeChild(t) + } + + function ni({ + target: t, + viewportOffset: e = 0, + ancestorOffset: n = 0, + alignToTop: o, + forceScroll: i + }) { + const r = ci(t); + let s = r, + a = null; + for (e = function(t) { + if ("number" == typeof t) return { + top: t, + bottom: t, + left: t, + right: t + }; + return t + }(e); s;) { + let l; + l = di(s == r ? t : a), ii({ + parent: l, + getRect: () => hi(t, s), + alignToTop: o, + ancestorOffset: n, + forceScroll: i + }); + const c = hi(t, s); + if (oi({ + window: s, + rect: c, + viewportOffset: e, + alignToTop: o, + forceScroll: i + }), s.parent != s) { + if (a = s.frameElement, s = s.parent, !a) return + } else s = null + } + } + + function oi({ + window: t, + rect: e, + alignToTop: n, + forceScroll: o, + viewportOffset: i + }) { + const r = e.clone().moveBy(0, i.bottom), + s = e.clone().moveBy(0, -i.top), + a = new Mo(t).excludeScrollbarsAndBorders(), + l = n && o, + c = [s, r].every((t => a.contains(t))); + let { + scrollX: d, + scrollY: h + } = t; + const u = d, + g = h; + l ? h -= a.top - e.top + i.top : c || (si(s, a) ? h -= a.top - e.top + i.top : ri(r, a) && (h += n ? e.top - a.top - i.top : e.bottom - a.bottom + i.bottom)), c || (ai(e, a) ? d -= a.left - e.left + i.left : li(e, a) && (d += e.right - a.right + i.right)), d == u && h === g || t.scrollTo(d, h) + } + + function ii({ + parent: t, + getRect: e, + alignToTop: n, + forceScroll: o, + ancestorOffset: i = 0 + }) { + const r = ci(t), + s = n && o; + let a, l, c; + for (; t != r.document.body;) l = e(), a = new Mo(t).excludeScrollbarsAndBorders(), c = a.contains(l), s ? t.scrollTop -= a.top - l.top + i : c || (si(l, a) ? t.scrollTop -= a.top - l.top + i : ri(l, a) && (t.scrollTop += n ? l.top - a.top - i : l.bottom - a.bottom + i)), c || (ai(l, a) ? t.scrollLeft -= a.left - l.left + i : li(l, a) && (t.scrollLeft += l.right - a.right + i)), t = t.parentNode + } + + function ri(t, e) { + return t.bottom > e.bottom + } + + function si(t, e) { + return t.top < e.top + } + + function ai(t, e) { + return t.left < e.left + } + + function li(t, e) { + return t.right > e.right + } + + function ci(t) { + return Vo(t) ? t.startContainer.ownerDocument.defaultView : t.ownerDocument.defaultView + } + + function di(t) { + if (Vo(t)) { + let e = t.commonAncestorContainer; + return zo(e) && (e = e.parentNode), e + } + return t.parentNode + } + + function hi(t, e) { + const n = ci(t), + o = new Mo(t); + if (n === e) return o; + { + let t = n; + for (; t != e;) { + const e = t.frameElement, + n = new Mo(e).excludeScrollbarsAndBorders(); + o.moveBy(n.left, n.top), t = t.parent + } + } + return o + } + const ui = { + ctrl: "⌃", + cmd: "⌘", + alt: "⌥", + shift: "⇧" + }, + gi = { + ctrl: "Ctrl+", + alt: "Alt+", + shift: "Shift+" + }, + mi = function() { + const t = { + arrowleft: 37, + arrowup: 38, + arrowright: 39, + arrowdown: 40, + backspace: 8, + delete: 46, + enter: 13, + space: 32, + esc: 27, + tab: 9, + ctrl: 1114112, + shift: 2228224, + alt: 4456448, + cmd: 8912896 + }; + for (let e = 65; e <= 90; e++) { + t[String.fromCharCode(e).toLowerCase()] = e + } + for (let e = 48; e <= 57; e++) t[e - 48] = e; + for (let e = 112; e <= 123; e++) t["f" + (e - 111)] = e; + for (const e of "`-=[];',./\\") t[e] = e.charCodeAt(0); + return t + }(), + pi = Object.fromEntries(Object.entries(mi).map((([t, e]) => [e, t.charAt(0).toUpperCase() + t.slice(1)]))); + + function fi(t) { + let e; + if ("string" == typeof t) { + if (e = mi[t.toLowerCase()], !e) throw new b("keyboard-unknown-key", null, { + key: t + }) + } else e = t.keyCode + (t.altKey ? mi.alt : 0) + (t.ctrlKey ? mi.ctrl : 0) + (t.shiftKey ? mi.shift : 0) + (t.metaKey ? mi.cmd : 0); + return e + } + + function bi(t) { + return "string" == typeof t && (t = function(t) { + return t.split("+").map((t => t.trim())) + }(t)), t.map((t => "string" == typeof t ? function(t) { + if (t.endsWith("!")) return fi(t.slice(0, -1)); + const e = fi(t); + return i.isMac && e == mi.ctrl ? mi.cmd : e + }(t) : t)).reduce(((t, e) => e + t), 0) + } + + function ki(t) { + let e = bi(t); + return Object.entries(i.isMac ? ui : gi).reduce(((t, [n, o]) => (0 != (e & mi[n]) && (e &= ~mi[n], t += o), t)), "") + (e ? pi[e] : "") + } + + function wi(t, e) { + const n = "ltr" === e; + switch (t) { + case mi.arrowleft: + return n ? "left" : "right"; + case mi.arrowright: + return n ? "right" : "left"; + case mi.arrowup: + return "up"; + case mi.arrowdown: + return "down" + } + } + + function Ai(t) { + return Array.isArray(t) ? t : [t] + } + + function Ci(t, e, n = 1) { + if ("number" != typeof n) throw new b("translation-service-quantity-not-a-number", null, { + quantity: n + }); + const o = Object.keys(Po.window.CKEDITOR_TRANSLATIONS).length; + 1 === o && (t = Object.keys(Po.window.CKEDITOR_TRANSLATIONS)[0]); + const i = e.id || e.string; + if (0 === o || ! function(t, e) { + return !!Po.window.CKEDITOR_TRANSLATIONS[t] && !!Po.window.CKEDITOR_TRANSLATIONS[t].dictionary[e] + }(t, i)) return 1 !== n ? e.plural : e.string; + const r = Po.window.CKEDITOR_TRANSLATIONS[t].dictionary, + s = Po.window.CKEDITOR_TRANSLATIONS[t].getPluralForm || (t => 1 === t ? 0 : 1), + a = r[i]; + if ("string" == typeof a) return a; + return a[Number(s(n))] + } + Po.window.CKEDITOR_TRANSLATIONS || (Po.window.CKEDITOR_TRANSLATIONS = {}); + const _i = ["ar", "ara", "fa", "per", "fas", "he", "heb", "ku", "kur", "ug", "uig"]; + + function vi(t) { + return _i.includes(t) ? "rtl" : "ltr" + } + class yi { + constructor({ + uiLanguage: t = "en", + contentLanguage: e + } = {}) { + this.uiLanguage = t, this.contentLanguage = e || this.uiLanguage, this.uiLanguageDirection = vi(this.uiLanguage), this.contentLanguageDirection = vi(this.contentLanguage), this.t = (t, e) => this._t(t, e) + } + get language() { + return console.warn("locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead."), this.uiLanguage + } + _t(t, e = []) { + e = Ai(e), "string" == typeof t && (t = { + string: t + }); + const n = !!t.plural ? e[0] : 1; + return function(t, e) { + return t.replace(/%(\d+)/g, ((t, n) => n < e.length ? e[n] : t)) + }(Ci(this.uiLanguage, t, n), e) + } + } + class xi extends(S()) { + constructor(t = {}, e = {}) { + super(); + const n = Q(t); + if (n || (e = t), this._items = [], this._itemMap = new Map, this._idProperty = e.idProperty || "id", this._bindToExternalToInternalMap = new WeakMap, this._bindToInternalToExternalMap = new WeakMap, this._skippedIndexesFromExternal = [], n) + for (const e of t) this._items.push(e), this._itemMap.set(this._getItemIdBeforeAdding(e), e) + } + get length() { + return this._items.length + } + get first() { + return this._items[0] || null + } + get last() { + return this._items[this.length - 1] || null + } + add(t, e) { + return this.addMany([t], e) + } + addMany(t, e) { + if (void 0 === e) e = this._items.length; + else if (e > this._items.length || e < 0) throw new b("collection-add-item-invalid-index", this); + let n = 0; + for (const o of t) { + const t = this._getItemIdBeforeAdding(o), + i = e + n; + this._items.splice(i, 0, o), this._itemMap.set(t, o), this.fire("add", o, i), n++ + } + return this.fire("change", { + added: t, + removed: [], + index: e + }), this + } + get(t) { + let e; + if ("string" == typeof t) e = this._itemMap.get(t); + else { + if ("number" != typeof t) throw new b("collection-get-invalid-arg", this); + e = this._items[t] + } + return e || null + } + has(t) { + if ("string" == typeof t) return this._itemMap.has(t); + { + const e = t[this._idProperty]; + return e && this._itemMap.has(e) + } + } + getIndex(t) { + let e; + return e = "string" == typeof t ? this._itemMap.get(t) : t, e ? this._items.indexOf(e) : -1 + } + remove(t) { + const [e, n] = this._remove(t); + return this.fire("change", { + added: [], + removed: [e], + index: n + }), e + } + map(t, e) { + return this._items.map(t, e) + } + find(t, e) { + return this._items.find(t, e) + } + filter(t, e) { + return this._items.filter(t, e) + } + clear() { + this._bindToCollection && (this.stopListening(this._bindToCollection), this._bindToCollection = null); + const t = Array.from(this._items); + for (; this.length;) this._remove(0); + this.fire("change", { + added: [], + removed: t, + index: 0 + }) + } + bindTo(t) { + if (this._bindToCollection) throw new b("collection-bind-to-rebind", this); + return this._bindToCollection = t, { + as: t => { + this._setUpBindToBinding((e => new t(e))) + }, + using: t => { + "function" == typeof t ? this._setUpBindToBinding(t) : this._setUpBindToBinding((e => e[t])) + } + } + } + _setUpBindToBinding(t) { + const e = this._bindToCollection, + n = (n, o, i) => { + const r = e._bindToCollection == this, + s = e._bindToInternalToExternalMap.get(o); + if (r && s) this._bindToExternalToInternalMap.set(o, s), this._bindToInternalToExternalMap.set(s, o); + else { + const n = t(o); + if (!n) return void this._skippedIndexesFromExternal.push(i); + let r = i; + for (const t of this._skippedIndexesFromExternal) i > t && r--; + for (const t of e._skippedIndexesFromExternal) r >= t && r++; + this._bindToExternalToInternalMap.set(o, n), this._bindToInternalToExternalMap.set(n, o), this.add(n, r); + for (let t = 0; t < e._skippedIndexesFromExternal.length; t++) r <= e._skippedIndexesFromExternal[t] && e._skippedIndexesFromExternal[t]++ + } + }; + for (const t of e) n(0, t, e.getIndex(t)); + this.listenTo(e, "add", n), this.listenTo(e, "remove", ((t, e, n) => { + const o = this._bindToExternalToInternalMap.get(e); + o && this.remove(o), this._skippedIndexesFromExternal = this._skippedIndexesFromExternal.reduce(((t, e) => (n < e && t.push(e - 1), n > e && t.push(e), t)), []) + })) + } + _getItemIdBeforeAdding(t) { + const e = this._idProperty; + let n; + if (e in t) { + if (n = t[e], "string" != typeof n) throw new b("collection-add-invalid-id", this); + if (this.get(n)) throw new b("collection-add-item-already-exists", this) + } else t[e] = n = g(); + return n + } + _remove(t) { + let e, n, o, i = !1; + const r = this._idProperty; + if ("string" == typeof t ? (n = t, o = this._itemMap.get(n), i = !o, o && (e = this._items.indexOf(o))) : "number" == typeof t ? (e = t, o = this._items[e], i = !o, o && (n = o[r])) : (o = t, n = o[r], e = this._items.indexOf(o), i = -1 == e || !this._itemMap.get(n)), i) throw new b("collection-remove-404", this); + this._items.splice(e, 1), this._itemMap.delete(n); + const s = this._bindToInternalToExternalMap.get(o); + return this._bindToInternalToExternalMap.delete(o), this._bindToExternalToInternalMap.delete(s), this.fire("remove", o, e), [o, e] + } [Symbol.iterator]() { + return this._items[Symbol.iterator]() + } + } + + function Ei(t) { + const e = t.next(); + return e.done ? null : e.value + } + class Di extends(So(q())) { + constructor() { + super(), this._elements = new Set, this._nextEventLoopTimeout = null, this.set("isFocused", !1), this.set("focusedElement", null) + } + add(t) { + if (this._elements.has(t)) throw new b("focustracker-add-element-already-exist", this); + this.listenTo(t, "focus", (() => this._focus(t)), { + useCapture: !0 + }), this.listenTo(t, "blur", (() => this._blur()), { + useCapture: !0 + }), this._elements.add(t) + } + remove(t) { + t === this.focusedElement && this._blur(), this._elements.has(t) && (this.stopListening(t), this._elements.delete(t)) + } + destroy() { + this.stopListening() + } + _focus(t) { + clearTimeout(this._nextEventLoopTimeout), this.focusedElement = t, this.isFocused = !0 + } + _blur() { + clearTimeout(this._nextEventLoopTimeout), this._nextEventLoopTimeout = setTimeout((() => { + this.focusedElement = null, this.isFocused = !1 + }), 0) + } + } + class Si { + constructor() { + this._listener = new(So()) + } + listenTo(t) { + this._listener.listenTo(t, "keydown", ((t, e) => { + this._listener.fire("_keydown:" + fi(e), e) + })) + } + set(t, e, n = {}) { + const o = bi(t), + i = n.priority; + this._listener.listenTo(this._listener, "_keydown:" + o, ((t, n) => { + e(n, (() => { + n.preventDefault(), n.stopPropagation(), t.stop() + })), t.return = !0 + }), { + priority: i + }) + } + press(t) { + return !!this._listener.fire("_keydown:" + fi(t), t) + } + stopListening(t) { + this._listener.stopListening(t) + } + destroy() { + this.stopListening() + } + } + + function Ti(t) { + return Q(t) ? new Map(t) : function(t) { + const e = new Map; + for (const n in t) e.set(n, t[n]); + return e + }(t) + } + + function Bi(t, e) { + let n; + + function o(...i) { + o.cancel(), n = setTimeout((() => t(...i)), e) + } + return o.cancel = () => { + clearTimeout(n) + }, o + } + + function Ii(t, e) { + return !!(n = t.charAt(e - 1)) && 1 == n.length && /[\ud800-\udbff]/.test(n) && function(t) { + return !!t && 1 == t.length && /[\udc00-\udfff]/.test(t) + }(t.charAt(e)); + var n + } + + function Pi(t, e) { + return !!(n = t.charAt(e)) && 1 == n.length && /[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/.test(n); + var n + } + const Ri = function() { + const t = [new RegExp("\\p{Emoji}[\\u{E0020}-\\u{E007E}]+\\u{E007F}", "u"), new RegExp("\\p{Emoji}\\u{FE0F}?\\u{20E3}", "u"), new RegExp("\\p{Emoji}\\u{FE0F}", "u"), new RegExp("(?=\\p{General_Category=Other_Symbol})\\p{Emoji}\\p{Emoji_Modifier}*", "u")], + e = new RegExp("\\p{Regional_Indicator}{2}", "u").source, + n = "(?:" + t.map((t => t.source)).join("|") + ")"; + return new RegExp(`${e}|${n}(?:‍${n})*`, "ug") + }(); + + function zi(t, e) { + const n = String(t).matchAll(Ri); + return Array.from(n).some((t => t.index < e && e < t.index + t[0].length)) + } + class Vi extends(q()) { + constructor(t) { + super(), this._disableStack = new Set, this.editor = t, this.set("isEnabled", !0) + } + forceDisabled(t) { + this._disableStack.add(t), 1 == this._disableStack.size && (this.on("set:isEnabled", Oi, { + priority: "highest" + }), this.isEnabled = !1) + } + clearForceDisabled(t) { + this._disableStack.delete(t), 0 == this._disableStack.size && (this.off("set:isEnabled", Oi), this.isEnabled = !0) + } + destroy() { + this.stopListening() + } + static get isContextPlugin() { + return !1 + } + } + + function Oi(t) { + t.return = !1, t.stop() + } + class Fi extends(q()) { + constructor(t) { + super(), this.editor = t, this.set("value", void 0), this.set("isEnabled", !1), this._affectsData = !0, this._isEnabledBasedOnSelection = !0, this._disableStack = new Set, this.decorate("execute"), this.listenTo(this.editor.model.document, "change", (() => { + this.refresh() + })), this.listenTo(t, "change:isReadOnly", (() => { + this.refresh() + })), this.on("set:isEnabled", (e => { + this.affectsData && (t.isReadOnly || this._isEnabledBasedOnSelection && !t.model.canEditAt(t.model.document.selection)) && (e.return = !1, e.stop()) + }), { + priority: "highest" + }), this.on("execute", (t => { + this.isEnabled || t.stop() + }), { + priority: "high" + }) + } + get affectsData() { + return this._affectsData + } + set affectsData(t) { + this._affectsData = t + } + refresh() { + this.isEnabled = !0 + } + forceDisabled(t) { + this._disableStack.add(t), 1 == this._disableStack.size && (this.on("set:isEnabled", Mi, { + priority: "highest" + }), this.isEnabled = !1) + } + clearForceDisabled(t) { + this._disableStack.delete(t), 0 == this._disableStack.size && (this.off("set:isEnabled", Mi), this.refresh()) + } + execute(...t) {} + destroy() { + this.stopListening() + } + } + + function Mi(t) { + t.return = !1, t.stop() + } + class Ni extends Fi { + constructor() { + super(...arguments), this._childCommandsDefinitions = [] + } + refresh() {} + execute(...t) { + const e = this._getFirstEnabledCommand(); + return !!e && e.execute(t) + } + registerChildCommand(t, e = {}) { + p(this._childCommandsDefinitions, { + command: t, + priority: e.priority || "normal" + }), t.on("change:isEnabled", (() => this._checkEnabled())), this._checkEnabled() + } + _checkEnabled() { + this.isEnabled = !!this._getFirstEnabledCommand() + } + _getFirstEnabledCommand() { + const t = this._childCommandsDefinitions.find((({ + command: t + }) => t.isEnabled)); + return t && t.command + } + } + class Li extends(S()) { + constructor(t, e = [], n = []) { + super(), this._plugins = new Map, this._context = t, this._availablePlugins = new Map; + for (const t of e) t.pluginName && this._availablePlugins.set(t.pluginName, t); + this._contextPlugins = new Map; + for (const [t, e] of n) this._contextPlugins.set(t, e), this._contextPlugins.set(e, t), t.pluginName && this._availablePlugins.set(t.pluginName, t) + }*[Symbol.iterator]() { + for (const t of this._plugins) "function" == typeof t[0] && (yield t) + } + get(t) { + const e = this._plugins.get(t); + if (!e) { + let e = t; + throw "function" == typeof t && (e = t.pluginName || t.name), new b("plugincollection-plugin-not-loaded", this._context, { + plugin: e + }) + } + return e + } + has(t) { + return this._plugins.has(t) + } + init(t, e = [], n = []) { + const o = this, + i = this._context; + ! function t(e, n = new Set) { + e.forEach((e => { + a(e) && (n.has(e) || (n.add(e), e.pluginName && !o._availablePlugins.has(e.pluginName) && o._availablePlugins.set(e.pluginName, e), e.requires && t(e.requires, n))) + })) + }(t), h(t); + const r = [... function t(e, n = new Set) { + return e.map((t => a(t) ? t : o._availablePlugins.get(t))).reduce(((e, o) => n.has(o) ? e : (n.add(o), o.requires && (h(o.requires, o), t(o.requires, n).forEach((t => e.add(t)))), e.add(o))), new Set) + }(t.filter((t => !c(t, e))))]; + ! function(t, e) { + for (const n of e) { + if ("function" != typeof n) throw new b("plugincollection-replace-plugin-invalid-type", null, { + pluginItem: n + }); + const e = n.pluginName; + if (!e) throw new b("plugincollection-replace-plugin-missing-name", null, { + pluginItem: n + }); + if (n.requires && n.requires.length) throw new b("plugincollection-plugin-for-replacing-cannot-have-dependencies", null, { + pluginName: e + }); + const i = o._availablePlugins.get(e); + if (!i) throw new b("plugincollection-plugin-for-replacing-not-exist", null, { + pluginName: e + }); + const r = t.indexOf(i); + if (-1 === r) { + if (o._contextPlugins.has(i)) return; + throw new b("plugincollection-plugin-for-replacing-not-loaded", null, { + pluginName: e + }) + } + if (i.requires && i.requires.length) throw new b("plugincollection-replaced-plugin-cannot-have-dependencies", null, { + pluginName: e + }); + t.splice(r, 1, n), o._availablePlugins.set(e, n) + } + }(r, n); + const s = r.map((t => { + let e = o._contextPlugins.get(t); + return e = e || new t(i), o._add(t, e), e + })); + return u(s, "init").then((() => u(s, "afterInit"))).then((() => s)); + + function a(t) { + return "function" == typeof t + } + + function l(t) { + return a(t) && !!t.isContextPlugin + } + + function c(t, e) { + return e.some((e => e === t || (d(t) === e || d(e) === t))) + } + + function d(t) { + return a(t) ? t.pluginName || t.name : t + } + + function h(t, n = null) { + t.map((t => a(t) ? t : o._availablePlugins.get(t) || t)).forEach((t => { + ! function(t, e) { + if (a(t)) return; + if (e) throw new b("plugincollection-soft-required", i, { + missingPlugin: t, + requiredBy: d(e) + }); + throw new b("plugincollection-plugin-not-found", i, { + plugin: t + }) + }(t, n), + function(t, e) { + if (!l(e)) return; + if (l(t)) return; + throw new b("plugincollection-context-required", i, { + plugin: d(t), + requiredBy: d(e) + }) + }(t, n), + function(t, n) { + if (!n) return; + if (!c(t, e)) return; + throw new b("plugincollection-required", i, { + plugin: d(t), + requiredBy: d(n) + }) + }(t, n) + })) + } + + function u(t, e) { + return t.reduce(((t, n) => n[e] ? o._contextPlugins.has(n) ? t : t.then(n[e].bind(n)) : t), Promise.resolve()) + } + } + destroy() { + const t = []; + for (const [, e] of this) "function" != typeof e.destroy || this._contextPlugins.has(e) || t.push(e.destroy()); + return Promise.all(t) + } + _add(t, e) { + this._plugins.set(t, e); + const n = t.pluginName; + if (n) { + if (this._plugins.has(n)) throw new b("plugincollection-plugin-name-conflict", null, { + pluginName: n, + plugin1: this._plugins.get(n).constructor, + plugin2: t + }); + this._plugins.set(n, e) + } + } + } + class Hi { + constructor(t) { + this._contextOwner = null, this.config = new _o(t, this.constructor.defaultConfig); + const e = this.constructor.builtinPlugins; + this.config.define("plugins", e), this.plugins = new Li(this, e); + const n = this.config.get("language") || {}; + this.locale = new yi({ + uiLanguage: "string" == typeof n ? n : n.ui, + contentLanguage: this.config.get("language.content") + }), this.t = this.locale.t, this.editors = new xi + } + initPlugins() { + const t = this.config.get("plugins") || [], + e = this.config.get("substitutePlugins") || []; + for (const n of t.concat(e)) { + if ("function" != typeof n) throw new b("context-initplugins-constructor-only", null, { + Plugin: n + }); + if (!0 !== n.isContextPlugin) throw new b("context-initplugins-invalid-plugin", null, { + Plugin: n + }) + } + return this.plugins.init(t, [], e) + } + destroy() { + return Promise.all(Array.from(this.editors, (t => t.destroy()))).then((() => this.plugins.destroy())) + } + _addEditor(t, e) { + if (this._contextOwner) throw new b("context-addeditor-private-context"); + this.editors.add(t), e && (this._contextOwner = t) + } + _removeEditor(t) { + return this.editors.has(t) && this.editors.remove(t), this._contextOwner === t ? this.destroy() : Promise.resolve() + } + _getEditorConfig() { + const t = {}; + for (const e of this.config.names())["plugins", "removePlugins", "extraPlugins"].includes(e) || (t[e] = this.config.get(e)); + return t + } + static create(t) { + return new Promise((e => { + const n = new this(t); + e(n.initPlugins().then((() => n))) + })) + } + } + class ji extends(q()) { + constructor(t) { + super(), this.context = t + } + destroy() { + this.stopListening() + } + static get isContextPlugin() { + return !0 + } + } + class qi extends Si { + constructor(t) { + super(), this.editor = t + } + set(t, e, n = {}) { + if ("string" == typeof e) { + const t = e; + e = (e, n) => { + this.editor.execute(t), n() + } + } + super.set(t, e, n) + } + } + var Wi = n(6062), + Ui = n.n(Wi), + $i = n(4717), + Gi = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()($i.Z, Gi); + $i.Z.locals; + const Ki = new WeakMap; + + function Zi({ + view: t, + element: e, + text: n, + isDirectHost: o = !0, + keepOnFocus: i = !1 + }) { + const r = t.document; + Ki.has(r) || (Ki.set(r, new Map), r.registerPostFixer((t => Yi(r, t))), r.on("change:isComposing", (() => { + t.change((t => Yi(r, t))) + }), { + priority: "high" + })), Ki.get(r).set(e, { + text: n, + isDirectHost: o, + keepOnFocus: i, + hostElement: o ? e : null + }), t.change((t => Yi(r, t))) + } + + function Ji(t, e) { + return !!e.hasClass("ck-placeholder") && (t.removeClass("ck-placeholder", e), !0) + } + + function Yi(t, e) { + const n = Ki.get(t), + o = []; + let i = !1; + for (const [t, r] of n) r.isDirectHost && (o.push(t), Qi(e, t, r) && (i = !0)); + for (const [t, r] of n) { + if (r.isDirectHost) continue; + const n = Xi(t); + n && (o.includes(n) || (r.hostElement = n, Qi(e, t, r) && (i = !0))) + } + return i + } + + function Qi(t, e, n) { + const { + text: o, + isDirectHost: i, + hostElement: r + } = n; + let s = !1; + r.getAttribute("data-placeholder") !== o && (t.setAttribute("data-placeholder", o, r), s = !0); + return (i || 1 == e.childCount) && function(t, e) { + if (!t.isAttached()) return !1; + if (Array.from(t.getChildren()).some((t => !t.is("uiElement")))) return !1; + const n = t.document, + o = n.selection.anchor; + return !(n.isComposing && o && o.parent === t || !e && n.isFocused && (!o || o.parent === t)) + }(r, n.keepOnFocus) ? function(t, e) { + return !e.hasClass("ck-placeholder") && (t.addClass("ck-placeholder", e), !0) + }(t, r) && (s = !0) : Ji(t, r) && (s = !0), s + } + + function Xi(t) { + if (t.childCount) { + const e = t.getChild(0); + if (e.is("element") && !e.is("uiElement") && !e.is("attributeElement")) return e + } + return null + } + class tr { + is() { + throw new Error("is() method is abstract") + } + } + const er = function(t) { + return wo(t, 4) + }; + class nr extends(S(tr)) { + constructor(t) { + super(), this.document = t, this.parent = null + } + get index() { + let t; + if (!this.parent) return null; + if (-1 == (t = this.parent.getChildIndex(this))) throw new b("view-node-not-found-in-parent", this); + return t + } + get nextSibling() { + const t = this.index; + return null !== t && this.parent.getChild(t + 1) || null + } + get previousSibling() { + const t = this.index; + return null !== t && this.parent.getChild(t - 1) || null + } + get root() { + let t = this; + for (; t.parent;) t = t.parent; + return t + } + isAttached() { + return this.root.is("rootElement") + } + getPath() { + const t = []; + let e = this; + for (; e.parent;) t.unshift(e.index), e = e.parent; + return t + } + getAncestors(t = {}) { + const e = []; + let n = t.includeSelf ? this : this.parent; + for (; n;) e[t.parentFirst ? "push" : "unshift"](n), n = n.parent; + return e + } + getCommonAncestor(t, e = {}) { + const n = this.getAncestors(e), + o = t.getAncestors(e); + let i = 0; + for (; n[i] == o[i] && n[i];) i++; + return 0 === i ? null : n[i - 1] + } + isBefore(t) { + if (this == t) return !1; + if (this.root !== t.root) return !1; + const e = this.getPath(), + n = t.getPath(), + o = Y(e, n); + switch (o) { + case "prefix": + return !0; + case "extension": + return !1; + default: + return e[o] < n[o] + } + } + isAfter(t) { + return this != t && (this.root === t.root && !this.isBefore(t)) + } + _remove() { + this.parent._removeChildren(this.index) + } + _fireChange(t, e) { + this.fire(`change:${t}`, e), this.parent && this.parent._fireChange(t, e) + } + toJSON() { + const t = er(this); + return delete t.parent, t + } + } + nr.prototype.is = function(t) { + return "node" === t || "view:node" === t + }; + class or extends nr { + constructor(t, e) { + super(t), this._textData = e + } + get data() { + return this._textData + } + get _data() { + return this.data + } + set _data(t) { + this._fireChange("text", this), this._textData = t + } + isSimilar(t) { + return t instanceof or && (this === t || this.data === t.data) + } + _clone() { + return new or(this.document, this.data) + } + } + or.prototype.is = function(t) { + return "$text" === t || "view:$text" === t || "text" === t || "view:text" === t || "node" === t || "view:node" === t + }; + class ir extends tr { + constructor(t, e, n) { + if (super(), this.textNode = t, e < 0 || e > t.data.length) throw new b("view-textproxy-wrong-offsetintext", this); + if (n < 0 || e + n > t.data.length) throw new b("view-textproxy-wrong-length", this); + this.data = t.data.substring(e, e + n), this.offsetInText = e + } + get offsetSize() { + return this.data.length + } + get isPartial() { + return this.data.length !== this.textNode.data.length + } + get parent() { + return this.textNode.parent + } + get root() { + return this.textNode.root + } + get document() { + return this.textNode.document + } + getAncestors(t = {}) { + const e = []; + let n = t.includeSelf ? this.textNode : this.parent; + for (; null !== n;) e[t.parentFirst ? "push" : "unshift"](n), n = n.parent; + return e + } + } + ir.prototype.is = function(t) { + return "$textProxy" === t || "view:$textProxy" === t || "textProxy" === t || "view:textProxy" === t + }; + class rr { + constructor(...t) { + this._patterns = [], this.add(...t) + } + add(...t) { + for (let e of t)("string" == typeof e || e instanceof RegExp) && (e = { + name: e + }), this._patterns.push(e) + } + match(...t) { + for (const e of t) + for (const t of this._patterns) { + const n = sr(e, t); + if (n) return { + element: e, + pattern: t, + match: n + } + } + return null + } + matchAll(...t) { + const e = []; + for (const n of t) + for (const t of this._patterns) { + const o = sr(n, t); + o && e.push({ + element: n, + pattern: t, + match: o + }) + } + return e.length > 0 ? e : null + } + getElementName() { + if (1 !== this._patterns.length) return null; + const t = this._patterns[0], + e = t.name; + return "function" == typeof t || !e || e instanceof RegExp ? null : e + } + } + + function sr(t, e) { + if ("function" == typeof e) return e(t); + const n = {}; + return e.name && (n.name = function(t, e) { + if (t instanceof RegExp) return !!e.match(t); + return t === e + }(e.name, t.name), !n.name) || e.attributes && (n.attributes = function(t, e) { + const n = new Set(e.getAttributeKeys()); + vt(t) ? (void 0 !== t.style && k("matcher-pattern-deprecated-attributes-style-key", t), void 0 !== t.class && k("matcher-pattern-deprecated-attributes-class-key", t)) : (n.delete("style"), n.delete("class")); + return ar(t, n, (t => e.getAttribute(t))) + }(e.attributes, t), !n.attributes) || e.classes && (n.classes = function(t, e) { + return ar(t, e.getClassNames(), (() => {})) + }(e.classes, t), !n.classes) || e.styles && (n.styles = function(t, e) { + return ar(t, e.getStyleNames(!0), (t => e.getStyle(t))) + }(e.styles, t), !n.styles) ? null : n + } + + function ar(t, e, n) { + const o = function(t) { + if (Array.isArray(t)) return t.map((t => vt(t) ? (void 0 !== t.key && void 0 !== t.value || k("matcher-pattern-missing-key-or-value", t), [t.key, t.value]) : [t, !0])); + if (vt(t)) return Object.entries(t); + return [ + [t, !0] + ] + }(t), + i = Array.from(e), + r = []; + if (o.forEach((([t, e]) => { + i.forEach((o => { + (function(t, e) { + return !0 === t || t === e || t instanceof RegExp && e.match(t) + })(t, o) && function(t, e, n) { + if (!0 === t) return !0; + const o = n(e); + return t === o || t instanceof RegExp && !!String(o).match(t) + }(e, o, n) && r.push(o) + })) + })), o.length && !(r.length < o.length)) return r + } + const lr = function(t) { + return "symbol" == typeof t || gt(t) && "[object Symbol]" == ht(t) + }; + var cr = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + dr = /^\w*$/; + const hr = function(t, e) { + if (ut(t)) return !1; + var n = typeof t; + return !("number" != n && "symbol" != n && "boolean" != n && null != t && !lr(t)) || (dr.test(t) || !cr.test(t) || null != e && t in Object(e)) + }; + + function ur(t, e) { + if ("function" != typeof t || null != e && "function" != typeof e) throw new TypeError("Expected a function"); + var n = function() { + var o = arguments, + i = e ? e.apply(this, o) : o[0], + r = n.cache; + if (r.has(i)) return r.get(i); + var s = t.apply(this, o); + return n.cache = r.set(i, s) || r, s + }; + return n.cache = new(ur.Cache || ke), n + } + ur.Cache = ke; + const gr = ur; + const mr = function(t) { + var e = gr(t, (function(t) { + return 500 === n.size && n.clear(), t + })), + n = e.cache; + return e + }; + var pr = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, + fr = /\\(\\)?/g, + br = mr((function(t) { + var e = []; + return 46 === t.charCodeAt(0) && e.push(""), t.replace(pr, (function(t, n, o, i) { + e.push(o ? i.replace(fr, "$1") : n || t) + })), e + })); + const kr = br; + const wr = function(t, e) { + for (var n = -1, o = null == t ? 0 : t.length, i = Array(o); ++n < o;) i[n] = e(t[n], n, t); + return i + }; + var Ar = nt ? nt.prototype : void 0, + Cr = Ar ? Ar.toString : void 0; + const _r = function t(e) { + if ("string" == typeof e) return e; + if (ut(e)) return wr(e, t) + ""; + if (lr(e)) return Cr ? Cr.call(e) : ""; + var n = e + ""; + return "0" == n && 1 / e == -Infinity ? "-0" : n + }; + const vr = function(t) { + return null == t ? "" : _r(t) + }; + const yr = function(t, e) { + return ut(t) ? t : hr(t, e) ? [t] : kr(vr(t)) + }; + const xr = function(t) { + var e = null == t ? 0 : t.length; + return e ? t[e - 1] : void 0 + }; + const Er = function(t) { + if ("string" == typeof t || lr(t)) return t; + var e = t + ""; + return "0" == e && 1 / t == -Infinity ? "-0" : e + }; + const Dr = function(t, e) { + for (var n = 0, o = (e = yr(e, t)).length; null != t && n < o;) t = t[Er(e[n++])]; + return n && n == o ? t : void 0 + }; + const Sr = function(t, e, n) { + var o = -1, + i = t.length; + e < 0 && (e = -e > i ? 0 : i + e), (n = n > i ? i : n) < 0 && (n += i), i = e > n ? 0 : n - e >>> 0, e >>>= 0; + for (var r = Array(i); ++o < i;) r[o] = t[o + e]; + return r + }; + const Tr = function(t, e) { + return e.length < 2 ? t : Dr(t, Sr(e, 0, -1)) + }; + const Br = function(t, e) { + return e = yr(e, t), null == (t = Tr(t, e)) || delete t[Er(xr(e))] + }; + const Ir = function(t, e) { + return null == t || Br(t, e) + }; + const Pr = function(t, e, n) { + var o = null == t ? void 0 : Dr(t, e); + return void 0 === o ? n : o + }; + const Rr = function(t, e, n) { + (void 0 !== n && !xt(t[e], n) || void 0 === n && !(e in t)) && ye(t, e, n) + }; + const zr = function(t) { + return function(e, n, o) { + for (var i = -1, r = Object(e), s = o(e), a = s.length; a--;) { + var l = s[t ? a : ++i]; + if (!1 === n(r[l], l, r)) break + } + return e + } + }(); + const Vr = function(t) { + return gt(t) && rn(t) + }; + const Or = function(t, e) { + if (("constructor" !== e || "function" != typeof t[e]) && "__proto__" != e) return t[e] + }; + const Fr = function(t) { + return De(t, hn(t)) + }; + const Mr = function(t, e, n, o, i, r, s) { + var a = Or(t, n), + l = Or(e, n), + c = s.get(l); + if (c) Rr(t, n, c); + else { + var d = r ? r(a, l, n + "", t, e, s) : void 0, + h = void 0 === d; + if (h) { + var u = ut(l), + g = !u && Me(l), + m = !u && !g && Je(l); + d = l, u || g || m ? ut(a) ? d = a : Vr(a) ? d = kn(a) : g ? (h = !1, d = bn(l, !0)) : m ? (h = !1, d = oo(l, !0)) : d = [] : vt(l) || Re(l) ? (d = a, Re(a) ? d = Fr(a) : O(a) && !Mt(a) || (d = ao(l))) : h = !1 + } + h && (s.set(l, d), i(d, l, o, r, s), s.delete(l)), Rr(t, n, d) + } + }; + const Nr = function t(e, n, o, i, r) { + e !== n && zr(n, (function(s, a) { + if (r || (r = new Ce), O(s)) Mr(e, n, a, o, t, i, r); + else { + var l = i ? i(Or(e, a), s, a + "", e, n, r) : void 0; + void 0 === l && (l = s), Rr(e, a, l) + } + }), hn) + }; + const Lr = function(t) { + return t + }; + const Hr = function(t, e, n) { + switch (n.length) { + case 0: + return t.call(e); + case 1: + return t.call(e, n[0]); + case 2: + return t.call(e, n[0], n[1]); + case 3: + return t.call(e, n[0], n[1], n[2]) + } + return t.apply(e, n) + }; + var jr = Math.max; + const qr = function(t, e, n) { + return e = jr(void 0 === e ? t.length - 1 : e, 0), + function() { + for (var o = arguments, i = -1, r = jr(o.length - e, 0), s = Array(r); ++i < r;) s[i] = o[e + i]; + i = -1; + for (var a = Array(e + 1); ++i < e;) a[i] = o[i]; + return a[e] = n(s), Hr(t, this, a) + } + }; + const Wr = function(t) { + return function() { + return t + } + }; + const Ur = ve ? function(t, e) { + return ve(t, "toString", { + configurable: !0, + enumerable: !1, + value: Wr(e), + writable: !0 + }) + } : Lr; + var $r = Date.now; + const Gr = function(t) { + var e = 0, + n = 0; + return function() { + var o = $r(), + i = 16 - (o - n); + if (n = o, i > 0) { + if (++e >= 800) return arguments[0] + } else e = 0; + return t.apply(void 0, arguments) + } + }; + const Kr = Gr(Ur); + const Zr = function(t, e) { + return Kr(qr(t, e, Lr), t + "") + }; + const Jr = function(t, e, n) { + if (!O(n)) return !1; + var o = typeof e; + return !!("number" == o ? rn(n) && Le(e, n.length) : "string" == o && e in n) && xt(n[e], t) + }; + const Yr = function(t) { + return Zr((function(e, n) { + var o = -1, + i = n.length, + r = i > 1 ? n[i - 1] : void 0, + s = i > 2 ? n[2] : void 0; + for (r = t.length > 3 && "function" == typeof r ? (i--, r) : void 0, s && Jr(n[0], n[1], s) && (r = i < 3 ? void 0 : r, i = 1), e = Object(e); ++o < i;) { + var a = n[o]; + a && t(e, a, o, r) + } + return e + })) + }; + const Qr = Yr((function(t, e, n) { + Nr(t, e, n) + })); + const Xr = function(t, e, n, o) { + if (!O(t)) return t; + for (var i = -1, r = (e = yr(e, t)).length, s = r - 1, a = t; null != a && ++i < r;) { + var l = Er(e[i]), + c = n; + if ("__proto__" === l || "constructor" === l || "prototype" === l) return t; + if (i != s) { + var d = a[l]; + void 0 === (c = o ? o(d, l, a) : void 0) && (c = O(d) ? d : Le(e[i + 1]) ? [] : {}) + } + Ee(a, l, c), a = a[l] + } + return t + }; + const ts = function(t, e, n) { + return null == t ? t : Xr(t, e, n) + }; + class es { + constructor(t) { + this._styles = {}, this._styleProcessor = t + } + get isEmpty() { + const t = Object.entries(this._styles); + return !Array.from(t).length + } + get size() { + return this.isEmpty ? 0 : this.getStyleNames().length + } + setTo(t) { + this.clear(); + const e = Array.from(function(t) { + let e = null, + n = 0, + o = 0, + i = null; + const r = new Map; + if ("" === t) return r; + ";" != t.charAt(t.length - 1) && (t += ";"); + for (let s = 0; s < t.length; s++) { + const a = t.charAt(s); + if (null === e) switch (a) { + case ":": + i || (i = t.substr(n, s - n), o = s + 1); + break; + case '"': + case "'": + e = a; + break; + case ";": { + const e = t.substr(o, s - o); + i && r.set(i.trim(), e.trim()), i = null, n = s + 1; + break + } + } else a === e && (e = null) + } + return r + }(t).entries()); + for (const [t, n] of e) this._styleProcessor.toNormalizedForm(t, n, this._styles) + } + has(t) { + if (this.isEmpty) return !1; + const e = this._styleProcessor.getReducedForm(t, this._styles).find((([e]) => e === t)); + return Array.isArray(e) + } + set(t, e) { + if (O(t)) + for (const [e, n] of Object.entries(t)) this._styleProcessor.toNormalizedForm(e, n, this._styles); + else this._styleProcessor.toNormalizedForm(t, e, this._styles) + } + remove(t) { + const e = os(t); + Ir(this._styles, e), delete this._styles[t], this._cleanEmptyObjectsOnPath(e) + } + getNormalized(t) { + return this._styleProcessor.getNormalized(t, this._styles) + } + toString() { + return this.isEmpty ? "" : this._getStylesEntries().map((t => t.join(":"))).sort().join(";") + ";" + } + getAsString(t) { + if (this.isEmpty) return; + if (this._styles[t] && !O(this._styles[t])) return this._styles[t]; + const e = this._styleProcessor.getReducedForm(t, this._styles).find((([e]) => e === t)); + return Array.isArray(e) ? e[1] : void 0 + } + getStyleNames(t = !1) { + if (this.isEmpty) return []; + if (t) return this._styleProcessor.getStyleNames(this._styles); + return this._getStylesEntries().map((([t]) => t)) + } + clear() { + this._styles = {} + } + _getStylesEntries() { + const t = [], + e = Object.keys(this._styles); + for (const n of e) t.push(...this._styleProcessor.getReducedForm(n, this._styles)); + return t + } + _cleanEmptyObjectsOnPath(t) { + const e = t.split("."); + if (!(e.length > 1)) return; + const n = e.splice(0, e.length - 1).join("."), + o = Pr(this._styles, n); + if (!o) return; + !Array.from(Object.keys(o)).length && this.remove(n) + } + } + class ns { + constructor() { + this._normalizers = new Map, this._extractors = new Map, this._reducers = new Map, this._consumables = new Map + } + toNormalizedForm(t, e, n) { + if (O(e)) is(n, os(t), e); + else if (this._normalizers.has(t)) { + const o = this._normalizers.get(t), + { + path: i, + value: r + } = o(e); + is(n, i, r) + } else is(n, t, e) + } + getNormalized(t, e) { + if (!t) return Qr({}, e); + if (void 0 !== e[t]) return e[t]; + if (this._extractors.has(t)) { + const n = this._extractors.get(t); + if ("string" == typeof n) return Pr(e, n); + const o = n(t, e); + if (o) return o + } + return Pr(e, os(t)) + } + getReducedForm(t, e) { + const n = this.getNormalized(t, e); + if (void 0 === n) return []; + if (this._reducers.has(t)) { + return this._reducers.get(t)(n) + } + return [ + [t, n] + ] + } + getStyleNames(t) { + const e = Array.from(this._consumables.keys()).filter((e => { + const n = this.getNormalized(e, t); + return n && "object" == typeof n ? Object.keys(n).length : n + })), + n = new Set([...e, ...Object.keys(t)]); + return Array.from(n.values()) + } + getRelatedStyles(t) { + return this._consumables.get(t) || [] + } + setNormalizer(t, e) { + this._normalizers.set(t, e) + } + setExtractor(t, e) { + this._extractors.set(t, e) + } + setReducer(t, e) { + this._reducers.set(t, e) + } + setStyleRelation(t, e) { + this._mapStyleNames(t, e); + for (const n of e) this._mapStyleNames(n, [t]) + } + _mapStyleNames(t, e) { + this._consumables.has(t) || this._consumables.set(t, []), this._consumables.get(t).push(...e) + } + } + + function os(t) { + return t.replace("-", ".") + } + + function is(t, e, n) { + let o = n; + O(n) && (o = Qr({}, Pr(t, e), n)), ts(t, e, o) + } + class rs extends nr { + constructor(t, e, n, o) { + if (super(t), this._unsafeAttributesToRender = [], this._customProperties = new Map, this.name = e, this._attrs = function(t) { + const e = Ti(t); + for (const [t, n] of e) null === n ? e.delete(t) : "string" != typeof n && e.set(t, String(n)); + return e + }(n), this._children = [], o && this._insertChild(0, o), this._classes = new Set, this._attrs.has("class")) { + const t = this._attrs.get("class"); + ss(this._classes, t), this._attrs.delete("class") + } + this._styles = new es(this.document.stylesProcessor), this._attrs.has("style") && (this._styles.setTo(this._attrs.get("style")), this._attrs.delete("style")) + } + get childCount() { + return this._children.length + } + get isEmpty() { + return 0 === this._children.length + } + getChild(t) { + return this._children[t] + } + getChildIndex(t) { + return this._children.indexOf(t) + } + getChildren() { + return this._children[Symbol.iterator]() + }* getAttributeKeys() { + this._classes.size > 0 && (yield "class"), this._styles.isEmpty || (yield "style"), yield* this._attrs.keys() + }* getAttributes() { + yield* this._attrs.entries(), this._classes.size > 0 && (yield ["class", this.getAttribute("class")]), this._styles.isEmpty || (yield ["style", this.getAttribute("style")]) + } + getAttribute(t) { + if ("class" == t) return this._classes.size > 0 ? [...this._classes].join(" ") : void 0; + if ("style" == t) { + const t = this._styles.toString(); + return "" == t ? void 0 : t + } + return this._attrs.get(t) + } + hasAttribute(t) { + return "class" == t ? this._classes.size > 0 : "style" == t ? !this._styles.isEmpty : this._attrs.has(t) + } + isSimilar(t) { + if (!(t instanceof rs)) return !1; + if (this === t) return !0; + if (this.name != t.name) return !1; + if (this._attrs.size !== t._attrs.size || this._classes.size !== t._classes.size || this._styles.size !== t._styles.size) return !1; + for (const [e, n] of this._attrs) + if (!t._attrs.has(e) || t._attrs.get(e) !== n) return !1; + for (const e of this._classes) + if (!t._classes.has(e)) return !1; + for (const e of this._styles.getStyleNames()) + if (!t._styles.has(e) || t._styles.getAsString(e) !== this._styles.getAsString(e)) return !1; + return !0 + } + hasClass(...t) { + for (const e of t) + if (!this._classes.has(e)) return !1; + return !0 + } + getClassNames() { + return this._classes.keys() + } + getStyle(t) { + return this._styles.getAsString(t) + } + getNormalizedStyle(t) { + return this._styles.getNormalized(t) + } + getStyleNames(t) { + return this._styles.getStyleNames(t) + } + hasStyle(...t) { + for (const e of t) + if (!this._styles.has(e)) return !1; + return !0 + } + findAncestor(...t) { + const e = new rr(...t); + let n = this.parent; + for (; n && !n.is("documentFragment");) { + if (e.match(n)) return n; + n = n.parent + } + return null + } + getCustomProperty(t) { + return this._customProperties.get(t) + }* getCustomProperties() { + yield* this._customProperties.entries() + } + getIdentity() { + const t = Array.from(this._classes).sort().join(","), + e = this._styles.toString(), + n = Array.from(this._attrs).map((t => `${t[0]}="${t[1]}"`)).sort().join(" "); + return this.name + ("" == t ? "" : ` class="${t}"`) + (e ? ` style="${e}"` : "") + ("" == n ? "" : ` ${n}`) + } + shouldRenderUnsafeAttribute(t) { + return this._unsafeAttributesToRender.includes(t) + } + _clone(t = !1) { + const e = []; + if (t) + for (const n of this.getChildren()) e.push(n._clone(t)); + const n = new this.constructor(this.document, this.name, this._attrs, e); + return n._classes = new Set(this._classes), n._styles.set(this._styles.getNormalized()), n._customProperties = new Map(this._customProperties), n.getFillerOffset = this.getFillerOffset, n._unsafeAttributesToRender = this._unsafeAttributesToRender, n + } + _appendChild(t) { + return this._insertChild(this.childCount, t) + } + _insertChild(t, e) { + this._fireChange("children", this); + let n = 0; + const o = function(t, e) { + if ("string" == typeof e) return [new or(t, e)]; + Q(e) || (e = [e]); + return Array.from(e).map((e => "string" == typeof e ? new or(t, e) : e instanceof ir ? new or(t, e.data) : e)) + }(this.document, e); + for (const e of o) null !== e.parent && e._remove(), e.parent = this, e.document = this.document, this._children.splice(t, 0, e), t++, n++; + return n + } + _removeChildren(t, e = 1) { + this._fireChange("children", this); + for (let n = t; n < t + e; n++) this._children[n].parent = null; + return this._children.splice(t, e) + } + _setAttribute(t, e) { + const n = String(e); + this._fireChange("attributes", this), "class" == t ? ss(this._classes, n) : "style" == t ? this._styles.setTo(n) : this._attrs.set(t, n) + } + _removeAttribute(t) { + return this._fireChange("attributes", this), "class" == t ? this._classes.size > 0 && (this._classes.clear(), !0) : "style" == t ? !this._styles.isEmpty && (this._styles.clear(), !0) : this._attrs.delete(t) + } + _addClass(t) { + this._fireChange("attributes", this); + for (const e of Ai(t)) this._classes.add(e) + } + _removeClass(t) { + this._fireChange("attributes", this); + for (const e of Ai(t)) this._classes.delete(e) + } + _setStyle(t, e) { + this._fireChange("attributes", this), "string" != typeof t ? this._styles.set(t) : this._styles.set(t, e) + } + _removeStyle(t) { + this._fireChange("attributes", this); + for (const e of Ai(t)) this._styles.remove(e) + } + _setCustomProperty(t, e) { + this._customProperties.set(t, e) + } + _removeCustomProperty(t) { + return this._customProperties.delete(t) + } + } + + function ss(t, e) { + const n = e.split(/\s+/); + t.clear(), n.forEach((e => t.add(e))) + } + rs.prototype.is = function(t, e) { + return e ? e === this.name && ("element" === t || "view:element" === t) : "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class as extends rs { + constructor(t, e, n, o) { + super(t, e, n, o), this.getFillerOffset = ls + } + } + + function ls() { + const t = [...this.getChildren()], + e = t[this.childCount - 1]; + if (e && e.is("element", "br")) return this.childCount; + for (const e of t) + if (!e.is("uiElement")) return null; + return this.childCount + } + as.prototype.is = function(t, e) { + return e ? e === this.name && ("containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t) : "containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class cs extends(q(as)) { + constructor(t, e, n, o) { + super(t, e, n, o), this.set("isReadOnly", !1), this.set("isFocused", !1), this.bind("isReadOnly").to(t), this.bind("isFocused").to(t, "isFocused", (e => e && t.selection.editableElement == this)), this.listenTo(t.selection, "change", (() => { + this.isFocused = t.isFocused && t.selection.editableElement == this + })) + } + destroy() { + this.stopListening() + } + } + cs.prototype.is = function(t, e) { + return e ? e === this.name && ("editableElement" === t || "view:editableElement" === t || "containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t) : "editableElement" === t || "view:editableElement" === t || "containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + const ds = Symbol("rootName"); + class hs extends cs { + constructor(t, e) { + super(t, e), this.rootName = "main" + } + get rootName() { + return this.getCustomProperty(ds) + } + set rootName(t) { + this._setCustomProperty(ds, t) + } + set _name(t) { + this.name = t + } + } + hs.prototype.is = function(t, e) { + return e ? e === this.name && ("rootElement" === t || "view:rootElement" === t || "editableElement" === t || "view:editableElement" === t || "containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t) : "rootElement" === t || "view:rootElement" === t || "editableElement" === t || "view:editableElement" === t || "containerElement" === t || "view:containerElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class us { + constructor(t = {}) { + if (!t.boundaries && !t.startPosition) throw new b("view-tree-walker-no-start-position", null); + if (t.direction && "forward" != t.direction && "backward" != t.direction) throw new b("view-tree-walker-unknown-direction", t.startPosition, { + direction: t.direction + }); + this.boundaries = t.boundaries || null, t.startPosition ? this._position = gs._createAt(t.startPosition) : this._position = gs._createAt(t.boundaries["backward" == t.direction ? "end" : "start"]), this.direction = t.direction || "forward", this.singleCharacters = !!t.singleCharacters, this.shallow = !!t.shallow, this.ignoreElementEnd = !!t.ignoreElementEnd, this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null, this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null + } [Symbol.iterator]() { + return this + } + get position() { + return this._position + } + skip(t) { + let e, n; + do { + n = this.position, e = this.next() + } while (!e.done && t(e.value)); + e.done || (this._position = n) + } + next() { + return "forward" == this.direction ? this._next() : this._previous() + } + _next() { + let t = this.position.clone(); + const e = this.position, + n = t.parent; + if (null === n.parent && t.offset === n.childCount) return { + done: !0, + value: void 0 + }; + if (n === this._boundaryEndParent && t.offset == this.boundaries.end.offset) return { + done: !0, + value: void 0 + }; + let o; + if (n instanceof or) { + if (t.isAtEnd) return this._position = gs._createAfter(n), this._next(); + o = n.data[t.offset] + } else o = n.getChild(t.offset); + if (o instanceof rs) { + if (this.shallow) { + if (this.boundaries && this.boundaries.end.isBefore(t)) return { + done: !0, + value: void 0 + }; + t.offset++ + } else t = new gs(o, 0); + return this._position = t, this._formatReturnValue("elementStart", o, e, t, 1) + } + if (o instanceof or) { + if (this.singleCharacters) return t = new gs(o, 0), this._position = t, this._next(); + let n, i = o.data.length; + return o == this._boundaryEndParent ? (i = this.boundaries.end.offset, n = new ir(o, 0, i), t = gs._createAfter(n)) : (n = new ir(o, 0, o.data.length), t.offset++), this._position = t, this._formatReturnValue("text", n, e, t, i) + } + if ("string" == typeof o) { + let o; + if (this.singleCharacters) o = 1; + else { + o = (n === this._boundaryEndParent ? this.boundaries.end.offset : n.data.length) - t.offset + } + const i = new ir(n, t.offset, o); + return t.offset += o, this._position = t, this._formatReturnValue("text", i, e, t, o) + } + return t = gs._createAfter(n), this._position = t, this.ignoreElementEnd ? this._next() : this._formatReturnValue("elementEnd", n, e, t) + } + _previous() { + let t = this.position.clone(); + const e = this.position, + n = t.parent; + if (null === n.parent && 0 === t.offset) return { + done: !0, + value: void 0 + }; + if (n == this._boundaryStartParent && t.offset == this.boundaries.start.offset) return { + done: !0, + value: void 0 + }; + let o; + if (n instanceof or) { + if (t.isAtStart) return this._position = gs._createBefore(n), this._previous(); + o = n.data[t.offset - 1] + } else o = n.getChild(t.offset - 1); + if (o instanceof rs) return this.shallow ? (t.offset--, this._position = t, this._formatReturnValue("elementStart", o, e, t, 1)) : (t = new gs(o, o.childCount), this._position = t, this.ignoreElementEnd ? this._previous() : this._formatReturnValue("elementEnd", o, e, t)); + if (o instanceof or) { + if (this.singleCharacters) return t = new gs(o, o.data.length), this._position = t, this._previous(); + let n, i = o.data.length; + if (o == this._boundaryStartParent) { + const e = this.boundaries.start.offset; + n = new ir(o, e, o.data.length - e), i = n.data.length, t = gs._createBefore(n) + } else n = new ir(o, 0, o.data.length), t.offset--; + return this._position = t, this._formatReturnValue("text", n, e, t, i) + } + if ("string" == typeof o) { + let o; + if (this.singleCharacters) o = 1; + else { + const e = n === this._boundaryStartParent ? this.boundaries.start.offset : 0; + o = t.offset - e + } + t.offset -= o; + const i = new ir(n, t.offset, o); + return this._position = t, this._formatReturnValue("text", i, e, t, o) + } + return t = gs._createBefore(n), this._position = t, this._formatReturnValue("elementStart", n, e, t, 1) + } + _formatReturnValue(t, e, n, o, i) { + return e instanceof ir && (e.offsetInText + e.data.length == e.textNode.data.length && ("forward" != this.direction || this.boundaries && this.boundaries.end.isEqual(this.position) ? n = gs._createAfter(e.textNode) : (o = gs._createAfter(e.textNode), this._position = o)), 0 === e.offsetInText && ("backward" != this.direction || this.boundaries && this.boundaries.start.isEqual(this.position) ? n = gs._createBefore(e.textNode) : (o = gs._createBefore(e.textNode), this._position = o))), { + done: !1, + value: { + type: t, + item: e, + previousPosition: n, + nextPosition: o, + length: i + } + } + } + } + class gs extends tr { + constructor(t, e) { + super(), this.parent = t, this.offset = e + } + get nodeAfter() { + return this.parent.is("$text") ? null : this.parent.getChild(this.offset) || null + } + get nodeBefore() { + return this.parent.is("$text") ? null : this.parent.getChild(this.offset - 1) || null + } + get isAtStart() { + return 0 === this.offset + } + get isAtEnd() { + const t = this.parent.is("$text") ? this.parent.data.length : this.parent.childCount; + return this.offset === t + } + get root() { + return this.parent.root + } + get editableElement() { + let t = this.parent; + for (; !(t instanceof cs);) { + if (!t.parent) return null; + t = t.parent + } + return t + } + getShiftedBy(t) { + const e = gs._createAt(this), + n = e.offset + t; + return e.offset = n < 0 ? 0 : n, e + } + getLastMatchingPosition(t, e = {}) { + e.startPosition = this; + const n = new us(e); + return n.skip(t), n.position + } + getAncestors() { + return this.parent.is("documentFragment") ? [this.parent] : this.parent.getAncestors({ + includeSelf: !0 + }) + } + getCommonAncestor(t) { + const e = this.getAncestors(), + n = t.getAncestors(); + let o = 0; + for (; e[o] == n[o] && e[o];) o++; + return 0 === o ? null : e[o - 1] + } + isEqual(t) { + return this.parent == t.parent && this.offset == t.offset + } + isBefore(t) { + return "before" == this.compareWith(t) + } + isAfter(t) { + return "after" == this.compareWith(t) + } + compareWith(t) { + if (this.root !== t.root) return "different"; + if (this.isEqual(t)) return "same"; + const e = this.parent.is("node") ? this.parent.getPath() : [], + n = t.parent.is("node") ? t.parent.getPath() : []; + e.push(this.offset), n.push(t.offset); + const o = Y(e, n); + switch (o) { + case "prefix": + return "before"; + case "extension": + return "after"; + default: + return e[o] < n[o] ? "before" : "after" + } + } + getWalker(t = {}) { + return t.startPosition = this, new us(t) + } + clone() { + return new gs(this.parent, this.offset) + } + static _createAt(t, e) { + if (t instanceof gs) return new this(t.parent, t.offset); + { + const n = t; + if ("end" == e) e = n.is("$text") ? n.data.length : n.childCount; + else { + if ("before" == e) return this._createBefore(n); + if ("after" == e) return this._createAfter(n); + if (0 !== e && !e) throw new b("view-createpositionat-offset-required", n) + } + return new gs(n, e) + } + } + static _createAfter(t) { + if (t.is("$textProxy")) return new gs(t.textNode, t.offsetInText + t.data.length); + if (!t.parent) throw new b("view-position-after-root", t, { + root: t + }); + return new gs(t.parent, t.index + 1) + } + static _createBefore(t) { + if (t.is("$textProxy")) return new gs(t.textNode, t.offsetInText); + if (!t.parent) throw new b("view-position-before-root", t, { + root: t + }); + return new gs(t.parent, t.index) + } + } + gs.prototype.is = function(t) { + return "position" === t || "view:position" === t + }; + class ms extends tr { + constructor(t, e = null) { + super(), this.start = t.clone(), this.end = e ? e.clone() : t.clone() + }*[Symbol.iterator]() { + yield* new us({ + boundaries: this, + ignoreElementEnd: !0 + }) + } + get isCollapsed() { + return this.start.isEqual(this.end) + } + get isFlat() { + return this.start.parent === this.end.parent + } + get root() { + return this.start.root + } + getEnlarged() { + let t = this.start.getLastMatchingPosition(ps, { + direction: "backward" + }), + e = this.end.getLastMatchingPosition(ps); + return t.parent.is("$text") && t.isAtStart && (t = gs._createBefore(t.parent)), e.parent.is("$text") && e.isAtEnd && (e = gs._createAfter(e.parent)), new ms(t, e) + } + getTrimmed() { + let t = this.start.getLastMatchingPosition(ps); + if (t.isAfter(this.end) || t.isEqual(this.end)) return new ms(t, t); + let e = this.end.getLastMatchingPosition(ps, { + direction: "backward" + }); + const n = t.nodeAfter, + o = e.nodeBefore; + return n && n.is("$text") && (t = new gs(n, 0)), o && o.is("$text") && (e = new gs(o, o.data.length)), new ms(t, e) + } + isEqual(t) { + return this == t || this.start.isEqual(t.start) && this.end.isEqual(t.end) + } + containsPosition(t) { + return t.isAfter(this.start) && t.isBefore(this.end) + } + containsRange(t, e = !1) { + t.isCollapsed && (e = !1); + const n = this.containsPosition(t.start) || e && this.start.isEqual(t.start), + o = this.containsPosition(t.end) || e && this.end.isEqual(t.end); + return n && o + } + getDifference(t) { + const e = []; + return this.isIntersecting(t) ? (this.containsPosition(t.start) && e.push(new ms(this.start, t.start)), this.containsPosition(t.end) && e.push(new ms(t.end, this.end))) : e.push(this.clone()), e + } + getIntersection(t) { + if (this.isIntersecting(t)) { + let e = this.start, + n = this.end; + return this.containsPosition(t.start) && (e = t.start), this.containsPosition(t.end) && (n = t.end), new ms(e, n) + } + return null + } + getWalker(t = {}) { + return t.boundaries = this, new us(t) + } + getCommonAncestor() { + return this.start.getCommonAncestor(this.end) + } + getContainedElement() { + if (this.isCollapsed) return null; + let t = this.start.nodeAfter, + e = this.end.nodeBefore; + return this.start.parent.is("$text") && this.start.isAtEnd && this.start.parent.nextSibling && (t = this.start.parent.nextSibling), this.end.parent.is("$text") && this.end.isAtStart && this.end.parent.previousSibling && (e = this.end.parent.previousSibling), t && t.is("element") && t === e ? t : null + } + clone() { + return new ms(this.start, this.end) + }* getItems(t = {}) { + t.boundaries = this, t.ignoreElementEnd = !0; + const e = new us(t); + for (const t of e) yield t.item + }* getPositions(t = {}) { + t.boundaries = this; + const e = new us(t); + yield e.position; + for (const t of e) yield t.nextPosition + } + isIntersecting(t) { + return this.start.isBefore(t.end) && this.end.isAfter(t.start) + } + static _createFromParentsAndOffsets(t, e, n, o) { + return new this(new gs(t, e), new gs(n, o)) + } + static _createFromPositionAndShift(t, e) { + const n = t, + o = t.getShiftedBy(e); + return e > 0 ? new this(n, o) : new this(o, n) + } + static _createIn(t) { + return this._createFromParentsAndOffsets(t, 0, t, t.childCount) + } + static _createOn(t) { + const e = t.is("$textProxy") ? t.offsetSize : 1; + return this._createFromPositionAndShift(gs._createBefore(t), e) + } + } + + function ps(t) { + return !(!t.item.is("attributeElement") && !t.item.is("uiElement")) + } + ms.prototype.is = function(t) { + return "range" === t || "view:range" === t + }; + class fs extends(S(tr)) { + constructor(...t) { + super(), this._ranges = [], this._lastRangeBackward = !1, this._isFake = !1, this._fakeSelectionLabel = "", t.length && this.setTo(...t) + } + get isFake() { + return this._isFake + } + get fakeSelectionLabel() { + return this._fakeSelectionLabel + } + get anchor() { + if (!this._ranges.length) return null; + const t = this._ranges[this._ranges.length - 1]; + return (this._lastRangeBackward ? t.end : t.start).clone() + } + get focus() { + if (!this._ranges.length) return null; + const t = this._ranges[this._ranges.length - 1]; + return (this._lastRangeBackward ? t.start : t.end).clone() + } + get isCollapsed() { + return 1 === this.rangeCount && this._ranges[0].isCollapsed + } + get rangeCount() { + return this._ranges.length + } + get isBackward() { + return !this.isCollapsed && this._lastRangeBackward + } + get editableElement() { + return this.anchor ? this.anchor.editableElement : null + }* getRanges() { + for (const t of this._ranges) yield t.clone() + } + getFirstRange() { + let t = null; + for (const e of this._ranges) t && !e.start.isBefore(t.start) || (t = e); + return t ? t.clone() : null + } + getLastRange() { + let t = null; + for (const e of this._ranges) t && !e.end.isAfter(t.end) || (t = e); + return t ? t.clone() : null + } + getFirstPosition() { + const t = this.getFirstRange(); + return t ? t.start.clone() : null + } + getLastPosition() { + const t = this.getLastRange(); + return t ? t.end.clone() : null + } + isEqual(t) { + if (this.isFake != t.isFake) return !1; + if (this.isFake && this.fakeSelectionLabel != t.fakeSelectionLabel) return !1; + if (this.rangeCount != t.rangeCount) return !1; + if (0 === this.rangeCount) return !0; + if (!this.anchor.isEqual(t.anchor) || !this.focus.isEqual(t.focus)) return !1; + for (const e of this._ranges) { + let n = !1; + for (const o of t._ranges) + if (e.isEqual(o)) { + n = !0; + break + } if (!n) return !1 + } + return !0 + } + isSimilar(t) { + if (this.isBackward != t.isBackward) return !1; + const e = J(this.getRanges()); + if (e != J(t.getRanges())) return !1; + if (0 == e) return !0; + for (let e of this.getRanges()) { + e = e.getTrimmed(); + let n = !1; + for (let o of t.getRanges()) + if (o = o.getTrimmed(), e.start.isEqual(o.start) && e.end.isEqual(o.end)) { + n = !0; + break + } if (!n) return !1 + } + return !0 + } + getSelectedElement() { + return 1 !== this.rangeCount ? null : this.getFirstRange().getContainedElement() + } + setTo(...t) { + let [e, n, o] = t; + if ("object" == typeof n && (o = n, n = void 0), null === e) this._setRanges([]), this._setFakeOptions(o); + else if (e instanceof fs || e instanceof bs) this._setRanges(e.getRanges(), e.isBackward), this._setFakeOptions({ + fake: e.isFake, + label: e.fakeSelectionLabel + }); + else if (e instanceof ms) this._setRanges([e], o && o.backward), this._setFakeOptions(o); + else if (e instanceof gs) this._setRanges([new ms(e)]), this._setFakeOptions(o); + else if (e instanceof nr) { + const t = !!o && !!o.backward; + let i; + if (void 0 === n) throw new b("view-selection-setto-required-second-parameter", this); + i = "in" == n ? ms._createIn(e) : "on" == n ? ms._createOn(e) : new ms(gs._createAt(e, n)), this._setRanges([i], t), this._setFakeOptions(o) + } else { + if (!Q(e)) throw new b("view-selection-setto-not-selectable", this); + this._setRanges(e, o && o.backward), this._setFakeOptions(o) + } + this.fire("change") + } + setFocus(t, e) { + if (null === this.anchor) throw new b("view-selection-setfocus-no-ranges", this); + const n = gs._createAt(t, e); + if ("same" == n.compareWith(this.focus)) return; + const o = this.anchor; + this._ranges.pop(), "before" == n.compareWith(o) ? this._addRange(new ms(n, o), !0) : this._addRange(new ms(o, n)), this.fire("change") + } + _setRanges(t, e = !1) { + t = Array.from(t), this._ranges = []; + for (const e of t) this._addRange(e); + this._lastRangeBackward = !!e + } + _setFakeOptions(t = {}) { + this._isFake = !!t.fake, this._fakeSelectionLabel = t.fake && t.label || "" + } + _addRange(t, e = !1) { + if (!(t instanceof ms)) throw new b("view-selection-add-range-not-range", this); + this._pushRange(t), this._lastRangeBackward = !!e + } + _pushRange(t) { + for (const e of this._ranges) + if (t.isIntersecting(e)) throw new b("view-selection-range-intersects", this, { + addedRange: t, + intersectingRange: e + }); + this._ranges.push(new ms(t.start, t.end)) + } + } + fs.prototype.is = function(t) { + return "selection" === t || "view:selection" === t + }; + class bs extends(S(tr)) { + constructor(...t) { + super(), this._selection = new fs, this._selection.delegate("change").to(this), t.length && this._selection.setTo(...t) + } + get isFake() { + return this._selection.isFake + } + get fakeSelectionLabel() { + return this._selection.fakeSelectionLabel + } + get anchor() { + return this._selection.anchor + } + get focus() { + return this._selection.focus + } + get isCollapsed() { + return this._selection.isCollapsed + } + get rangeCount() { + return this._selection.rangeCount + } + get isBackward() { + return this._selection.isBackward + } + get editableElement() { + return this._selection.editableElement + } + get _ranges() { + return this._selection._ranges + }* getRanges() { + yield* this._selection.getRanges() + } + getFirstRange() { + return this._selection.getFirstRange() + } + getLastRange() { + return this._selection.getLastRange() + } + getFirstPosition() { + return this._selection.getFirstPosition() + } + getLastPosition() { + return this._selection.getLastPosition() + } + getSelectedElement() { + return this._selection.getSelectedElement() + } + isEqual(t) { + return this._selection.isEqual(t) + } + isSimilar(t) { + return this._selection.isSimilar(t) + } + _setTo(...t) { + this._selection.setTo(...t) + } + _setFocus(t, e) { + this._selection.setFocus(t, e) + } + } + bs.prototype.is = function(t) { + return "selection" === t || "documentSelection" == t || "view:selection" == t || "view:documentSelection" == t + }; + class ks extends h { + constructor(t, e, n) { + super(t, e), this.startRange = n, this._eventPhase = "none", this._currentTarget = null + } + get eventPhase() { + return this._eventPhase + } + get currentTarget() { + return this._currentTarget + } + } + const ws = Symbol("bubbling contexts"); + + function As(t) { + return class extends t { + fire(t, ...e) { + try { + const n = t instanceof h ? t : new h(this, t), + o = ys(this); + if (!o.size) return; + if (Cs(n, "capturing", this), _s(o, "$capture", n, ...e)) return n.return; + const i = n.startRange || this.selection.getFirstRange(), + r = i ? i.getContainedElement() : null, + s = !!r && Boolean(vs(o, r)); + let a = r || function(t) { + if (!t) return null; + const e = t.start.parent, + n = t.end.parent, + o = e.getPath(), + i = n.getPath(); + return o.length > i.length ? e : n + }(i); + if (Cs(n, "atTarget", a), !s) { + if (_s(o, "$text", n, ...e)) return n.return; + Cs(n, "bubbling", a) + } + for (; a;) { + if (a.is("rootElement")) { + if (_s(o, "$root", n, ...e)) return n.return + } else if (a.is("element") && _s(o, a.name, n, ...e)) return n.return; + if (_s(o, a, n, ...e)) return n.return; + a = a.parent, Cs(n, "bubbling", a) + } + return Cs(n, "bubbling", this), _s(o, "$document", n, ...e), n.return + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + _addEventListener(t, e, n) { + const o = Ai(n.context || "$document"), + i = ys(this); + for (const r of o) { + let o = i.get(r); + o || (o = new(S()), i.set(r, o)), this.listenTo(o, t, e, n) + } + } + _removeEventListener(t, e) { + const n = ys(this); + for (const o of n.values()) this.stopListening(o, t, e) + } + } + } { + const t = As(Object); + ["fire", "_addEventListener", "_removeEventListener"].forEach((e => { + As[e] = t.prototype[e] + })) + } + + function Cs(t, e, n) { + t instanceof ks && (t._eventPhase = e, t._currentTarget = n) + } + + function _s(t, e, n, ...o) { + const i = "string" == typeof e ? t.get(e) : vs(t, e); + return !!i && (i.fire(n, ...o), n.stop.called) + } + + function vs(t, e) { + for (const [n, o] of t) + if ("function" == typeof n && n(e)) return o; + return null + } + + function ys(t) { + return t[ws] || (t[ws] = new Map), t[ws] + } + class xs extends(As(q())) { + constructor(t) { + super(), this._postFixers = new Set, this.selection = new bs, this.roots = new xi({ + idProperty: "rootName" + }), this.stylesProcessor = t, this.set("isReadOnly", !1), this.set("isFocused", !1), this.set("isSelecting", !1), this.set("isComposing", !1) + } + getRoot(t = "main") { + return this.roots.get(t) + } + registerPostFixer(t) { + this._postFixers.add(t) + } + destroy() { + this.roots.map((t => t.destroy())), this.stopListening() + } + _callPostFixers(t) { + let e = !1; + do { + for (const n of this._postFixers) + if (e = n(t), e) break + } while (e) + } + } + class Es extends rs { + constructor(t, e, n, o) { + super(t, e, n, o), this._priority = 10, this._id = null, this._clonesGroup = null, this.getFillerOffset = Ds + } + get priority() { + return this._priority + } + get id() { + return this._id + } + getElementsWithSameId() { + if (null === this.id) throw new b("attribute-element-get-elements-with-same-id-no-id", this); + return new Set(this._clonesGroup) + } + isSimilar(t) { + return null !== this.id || null !== t.id ? this.id === t.id : super.isSimilar(t) && this.priority == t.priority + } + _clone(t = !1) { + const e = super._clone(t); + return e._priority = this._priority, e._id = this._id, e + } + } + + function Ds() { + if (Ss(this)) return null; + let t = this.parent; + for (; t && t.is("attributeElement");) { + if (Ss(t) > 1) return null; + t = t.parent + } + return !t || Ss(t) > 1 ? null : this.childCount + } + + function Ss(t) { + return Array.from(t.getChildren()).filter((t => !t.is("uiElement"))).length + } + Es.DEFAULT_PRIORITY = 10, Es.prototype.is = function(t, e) { + return e ? e === this.name && ("attributeElement" === t || "view:attributeElement" === t || "element" === t || "view:element" === t) : "attributeElement" === t || "view:attributeElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class Ts extends rs { + constructor(t, e, n, o) { + super(t, e, n, o), this.getFillerOffset = Bs + } + _insertChild(t, e) { + if (e && (e instanceof nr || Array.from(e).length > 0)) throw new b("view-emptyelement-cannot-add", [this, e]); + return 0 + } + } + + function Bs() { + return null + } + Ts.prototype.is = function(t, e) { + return e ? e === this.name && ("emptyElement" === t || "view:emptyElement" === t || "element" === t || "view:element" === t) : "emptyElement" === t || "view:emptyElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class Is extends rs { + constructor(t, e, n, o) { + super(t, e, n, o), this.getFillerOffset = Rs + } + _insertChild(t, e) { + if (e && (e instanceof nr || Array.from(e).length > 0)) throw new b("view-uielement-cannot-add", [this, e]); + return 0 + } + render(t, e) { + return this.toDomElement(t) + } + toDomElement(t) { + const e = t.createElement(this.name); + for (const t of this.getAttributeKeys()) e.setAttribute(t, this.getAttribute(t)); + return e + } + } + + function Ps(t) { + t.document.on("arrowKey", ((e, n) => function(t, e, n) { + if (e.keyCode == mi.arrowright) { + const t = e.domTarget.ownerDocument.defaultView.getSelection(), + o = 1 == t.rangeCount && t.getRangeAt(0).collapsed; + if (o || e.shiftKey) { + const e = t.focusNode, + i = t.focusOffset, + r = n.domPositionToView(e, i); + if (null === r) return; + let s = !1; + const a = r.getLastMatchingPosition((t => (t.item.is("uiElement") && (s = !0), !(!t.item.is("uiElement") && !t.item.is("attributeElement"))))); + if (s) { + const e = n.viewPositionToDom(a); + o ? t.collapse(e.parent, e.offset) : t.extend(e.parent, e.offset) + } + } + } + }(0, n, t.domConverter)), { + priority: "low" + }) + } + + function Rs() { + return null + } + Is.prototype.is = function(t, e) { + return e ? e === this.name && ("uiElement" === t || "view:uiElement" === t || "element" === t || "view:element" === t) : "uiElement" === t || "view:uiElement" === t || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class zs extends rs { + constructor(t, e, n, o) { + super(t, e, n, o), this.getFillerOffset = Vs + } + _insertChild(t, e) { + if (e && (e instanceof nr || Array.from(e).length > 0)) throw new b("view-rawelement-cannot-add", [this, e]); + return 0 + } + render(t, e) {} + } + + function Vs() { + return null + } + zs.prototype.is = function(t, e) { + return e ? e === this.name && ("rawElement" === t || "view:rawElement" === t || "element" === t || "view:element" === t) : "rawElement" === t || "view:rawElement" === t || t === this.name || t === "view:" + this.name || "element" === t || "view:element" === t || "node" === t || "view:node" === t + }; + class Os extends(S(tr)) { + constructor(t, e) { + super(), this._children = [], this._customProperties = new Map, this.document = t, e && this._insertChild(0, e) + } [Symbol.iterator]() { + return this._children[Symbol.iterator]() + } + get childCount() { + return this._children.length + } + get isEmpty() { + return 0 === this.childCount + } + get root() { + return this + } + get parent() { + return null + } + get name() {} + getCustomProperty(t) { + return this._customProperties.get(t) + }* getCustomProperties() { + yield* this._customProperties.entries() + } + _appendChild(t) { + return this._insertChild(this.childCount, t) + } + getChild(t) { + return this._children[t] + } + getChildIndex(t) { + return this._children.indexOf(t) + } + getChildren() { + return this._children[Symbol.iterator]() + } + _insertChild(t, e) { + this._fireChange("children", this); + let n = 0; + const o = function(t, e) { + if ("string" == typeof e) return [new or(t, e)]; + Q(e) || (e = [e]); + return Array.from(e).map((e => "string" == typeof e ? new or(t, e) : e instanceof ir ? new or(t, e.data) : e)) + }(this.document, e); + for (const e of o) null !== e.parent && e._remove(), e.parent = this, this._children.splice(t, 0, e), t++, n++; + return n + } + _removeChildren(t, e = 1) { + this._fireChange("children", this); + for (let n = t; n < t + e; n++) this._children[n].parent = null; + return this._children.splice(t, e) + } + _fireChange(t, e) { + this.fire("change:" + t, e) + } + _setCustomProperty(t, e) { + this._customProperties.set(t, e) + } + _removeCustomProperty(t) { + return this._customProperties.delete(t) + } + } + Os.prototype.is = function(t) { + return "documentFragment" === t || "view:documentFragment" === t + }; + class Fs { + constructor(t) { + this._cloneGroups = new Map, this._slotFactory = null, this.document = t + } + setSelection(...t) { + this.document.selection._setTo(...t) + } + setSelectionFocus(t, e) { + this.document.selection._setFocus(t, e) + } + createDocumentFragment(t) { + return new Os(this.document, t) + } + createText(t) { + return new or(this.document, t) + } + createAttributeElement(t, e, n = {}) { + const o = new Es(this.document, t, e); + return "number" == typeof n.priority && (o._priority = n.priority), n.id && (o._id = n.id), n.renderUnsafeAttributes && o._unsafeAttributesToRender.push(...n.renderUnsafeAttributes), o + } + createContainerElement(t, e, n = {}, o = {}) { + let i = null; + vt(n) ? o = n : i = n; + const r = new as(this.document, t, e, i); + return o.renderUnsafeAttributes && r._unsafeAttributesToRender.push(...o.renderUnsafeAttributes), r + } + createEditableElement(t, e, n = {}) { + const o = new cs(this.document, t, e); + return n.renderUnsafeAttributes && o._unsafeAttributesToRender.push(...n.renderUnsafeAttributes), o + } + createEmptyElement(t, e, n = {}) { + const o = new Ts(this.document, t, e); + return n.renderUnsafeAttributes && o._unsafeAttributesToRender.push(...n.renderUnsafeAttributes), o + } + createUIElement(t, e, n) { + const o = new Is(this.document, t, e); + return n && (o.render = n), o + } + createRawElement(t, e, n, o = {}) { + const i = new zs(this.document, t, e); + return n && (i.render = n), o.renderUnsafeAttributes && i._unsafeAttributesToRender.push(...o.renderUnsafeAttributes), i + } + setAttribute(t, e, n) { + n._setAttribute(t, e) + } + removeAttribute(t, e) { + e._removeAttribute(t) + } + addClass(t, e) { + e._addClass(t) + } + removeClass(t, e) { + e._removeClass(t) + } + setStyle(t, e, n) { + vt(t) && void 0 === n ? e._setStyle(t) : n._setStyle(t, e) + } + removeStyle(t, e) { + e._removeStyle(t) + } + setCustomProperty(t, e, n) { + n._setCustomProperty(t, e) + } + removeCustomProperty(t, e) { + return e._removeCustomProperty(t) + } + breakAttributes(t) { + return t instanceof gs ? this._breakAttributes(t) : this._breakAttributesRange(t) + } + breakContainer(t) { + const e = t.parent; + if (!e.is("containerElement")) throw new b("view-writer-break-non-container-element", this.document); + if (!e.parent) throw new b("view-writer-break-root", this.document); + if (t.isAtStart) return gs._createBefore(e); + if (!t.isAtEnd) { + const n = e._clone(!1); + this.insert(gs._createAfter(e), n); + const o = new ms(t, gs._createAt(e, "end")), + i = new gs(n, 0); + this.move(o, i) + } + return gs._createAfter(e) + } + mergeAttributes(t) { + const e = t.offset, + n = t.parent; + if (n.is("$text")) return t; + if (n.is("attributeElement") && 0 === n.childCount) { + const t = n.parent, + e = n.index; + return n._remove(), this._removeFromClonedElementsGroup(n), this.mergeAttributes(new gs(t, e)) + } + const o = n.getChild(e - 1), + i = n.getChild(e); + if (!o || !i) return t; + if (o.is("$text") && i.is("$text")) return js(o, i); + if (o.is("attributeElement") && i.is("attributeElement") && o.isSimilar(i)) { + const t = o.childCount; + return o._appendChild(i.getChildren()), i._remove(), this._removeFromClonedElementsGroup(i), this.mergeAttributes(new gs(o, t)) + } + return t + } + mergeContainers(t) { + const e = t.nodeBefore, + n = t.nodeAfter; + if (!(e && n && e.is("containerElement") && n.is("containerElement"))) throw new b("view-writer-merge-containers-invalid-position", this.document); + const o = e.getChild(e.childCount - 1), + i = o instanceof or ? gs._createAt(o, "end") : gs._createAt(e, "end"); + return this.move(ms._createIn(n), gs._createAt(e, "end")), this.remove(ms._createOn(n)), i + } + insert(t, e) { + Ws(e = Q(e) ? [...e] : [e], this.document); + const n = e.reduce(((t, e) => { + const n = t[t.length - 1], + o = !e.is("uiElement"); + return n && n.breakAttributes == o ? n.nodes.push(e) : t.push({ + breakAttributes: o, + nodes: [e] + }), t + }), []); + let o = null, + i = t; + for (const { + nodes: t, + breakAttributes: e + } + of n) { + const n = this._insertNodes(i, t, e); + o || (o = n.start), i = n.end + } + return o ? new ms(o, i) : new ms(t) + } + remove(t) { + const e = t instanceof ms ? t : ms._createOn(t); + if ($s(e, this.document), e.isCollapsed) return new Os(this.document); + const { + start: n, + end: o + } = this._breakAttributesRange(e, !0), i = n.parent, r = o.offset - n.offset, s = i._removeChildren(n.offset, r); + for (const t of s) this._removeFromClonedElementsGroup(t); + const a = this.mergeAttributes(n); + return e.start = a, e.end = a.clone(), new Os(this.document, s) + } + clear(t, e) { + $s(t, this.document); + const n = t.getWalker({ + direction: "backward", + ignoreElementEnd: !0 + }); + for (const o of n) { + const n = o.item; + let i; + if (n.is("element") && e.isSimilar(n)) i = ms._createOn(n); + else if (!o.nextPosition.isAfter(t.start) && n.is("$textProxy")) { + const t = n.getAncestors().find((t => t.is("element") && e.isSimilar(t))); + t && (i = ms._createIn(t)) + } + i && (i.end.isAfter(t.end) && (i.end = t.end), i.start.isBefore(t.start) && (i.start = t.start), this.remove(i)) + } + } + move(t, e) { + let n; + if (e.isAfter(t.end)) { + const o = (e = this._breakAttributes(e, !0)).parent, + i = o.childCount; + t = this._breakAttributesRange(t, !0), n = this.remove(t), e.offset += o.childCount - i + } else n = this.remove(t); + return this.insert(e, n) + } + wrap(t, e) { + if (!(e instanceof Es)) throw new b("view-writer-wrap-invalid-attribute", this.document); + if ($s(t, this.document), t.isCollapsed) { + let o = t.start; + o.parent.is("element") && (n = o.parent, !Array.from(n.getChildren()).some((t => !t.is("uiElement")))) && (o = o.getLastMatchingPosition((t => t.item.is("uiElement")))), o = this._wrapPosition(o, e); + const i = this.document.selection; + return i.isCollapsed && i.getFirstPosition().isEqual(t.start) && this.setSelection(o), new ms(o) + } + return this._wrapRange(t, e); + var n + } + unwrap(t, e) { + if (!(e instanceof Es)) throw new b("view-writer-unwrap-invalid-attribute", this.document); + if ($s(t, this.document), t.isCollapsed) return t; + const { + start: n, + end: o + } = this._breakAttributesRange(t, !0), i = n.parent, r = this._unwrapChildren(i, n.offset, o.offset, e), s = this.mergeAttributes(r.start); + s.isEqual(r.start) || r.end.offset--; + const a = this.mergeAttributes(r.end); + return new ms(s, a) + } + rename(t, e) { + const n = new as(this.document, t, e.getAttributes()); + return this.insert(gs._createAfter(e), n), this.move(ms._createIn(e), gs._createAt(n, 0)), this.remove(ms._createOn(e)), n + } + clearClonedElementsGroup(t) { + this._cloneGroups.delete(t) + } + createPositionAt(t, e) { + return gs._createAt(t, e) + } + createPositionAfter(t) { + return gs._createAfter(t) + } + createPositionBefore(t) { + return gs._createBefore(t) + } + createRange(t, e) { + return new ms(t, e) + } + createRangeOn(t) { + return ms._createOn(t) + } + createRangeIn(t) { + return ms._createIn(t) + } + createSelection(...t) { + return new fs(...t) + } + createSlot(t = "children") { + if (!this._slotFactory) throw new b("view-writer-invalid-create-slot-context", this.document); + return this._slotFactory(this, t) + } + _registerSlotFactory(t) { + this._slotFactory = t + } + _clearSlotFactory() { + this._slotFactory = null + } + _insertNodes(t, e, n) { + let o, i; + if (o = n ? Ms(t) : t.parent.is("$text") ? t.parent.parent : t.parent, !o) throw new b("view-writer-invalid-position-container", this.document); + i = n ? this._breakAttributes(t, !0) : t.parent.is("$text") ? Hs(t) : t; + const r = o._insertChild(i.offset, e); + for (const t of e) this._addToClonedElementsGroup(t); + const s = i.getShiftedBy(r), + a = this.mergeAttributes(i); + a.isEqual(i) || s.offset--; + const l = this.mergeAttributes(s); + return new ms(a, l) + } + _wrapChildren(t, e, n, o) { + let i = e; + const r = []; + for (; i < n;) { + const e = t.getChild(i), + n = e.is("$text"), + s = e.is("attributeElement"); + if (s && this._wrapAttributeElement(o, e)) r.push(new gs(t, i)); + else if (n || !s || Ns(o, e)) { + const n = o._clone(); + e._remove(), n._appendChild(e), t._insertChild(i, n), this._addToClonedElementsGroup(n), r.push(new gs(t, i)) + } else this._wrapChildren(e, 0, e.childCount, o); + i++ + } + let s = 0; + for (const t of r) { + if (t.offset -= s, t.offset == e) continue; + this.mergeAttributes(t).isEqual(t) || (s++, n--) + } + return ms._createFromParentsAndOffsets(t, e, t, n) + } + _unwrapChildren(t, e, n, o) { + let i = e; + const r = []; + for (; i < n;) { + const e = t.getChild(i); + if (e.is("attributeElement")) + if (e.isSimilar(o)) { + const o = e.getChildren(), + s = e.childCount; + e._remove(), t._insertChild(i, o), this._removeFromClonedElementsGroup(e), r.push(new gs(t, i), new gs(t, i + s)), i += s, n += s - 1 + } else this._unwrapAttributeElement(o, e) ? (r.push(new gs(t, i), new gs(t, i + 1)), i++) : (this._unwrapChildren(e, 0, e.childCount, o), i++); + else i++ + } + let s = 0; + for (const t of r) { + if (t.offset -= s, t.offset == e || t.offset == n) continue; + this.mergeAttributes(t).isEqual(t) || (s++, n--) + } + return ms._createFromParentsAndOffsets(t, e, t, n) + } + _wrapRange(t, e) { + const { + start: n, + end: o + } = this._breakAttributesRange(t, !0), i = n.parent, r = this._wrapChildren(i, n.offset, o.offset, e), s = this.mergeAttributes(r.start); + s.isEqual(r.start) || r.end.offset--; + const a = this.mergeAttributes(r.end); + return new ms(s, a) + } + _wrapPosition(t, e) { + if (e.isSimilar(t.parent)) return Ls(t.clone()); + t.parent.is("$text") && (t = Hs(t)); + const n = this.createAttributeElement("_wrapPosition-fake-element"); + n._priority = Number.POSITIVE_INFINITY, n.isSimilar = () => !1, t.parent._insertChild(t.offset, n); + const o = new ms(t, t.getShiftedBy(1)); + this.wrap(o, e); + const i = new gs(n.parent, n.index); + n._remove(); + const r = i.nodeBefore, + s = i.nodeAfter; + return r instanceof or && s instanceof or ? js(r, s) : Ls(i) + } + _wrapAttributeElement(t, e) { + if (!Gs(t, e)) return !1; + if (t.name !== e.name || t.priority !== e.priority) return !1; + for (const n of t.getAttributeKeys()) + if ("class" !== n && "style" !== n && e.hasAttribute(n) && e.getAttribute(n) !== t.getAttribute(n)) return !1; + for (const n of t.getStyleNames()) + if (e.hasStyle(n) && e.getStyle(n) !== t.getStyle(n)) return !1; + for (const n of t.getAttributeKeys()) "class" !== n && "style" !== n && (e.hasAttribute(n) || this.setAttribute(n, t.getAttribute(n), e)); + for (const n of t.getStyleNames()) e.hasStyle(n) || this.setStyle(n, t.getStyle(n), e); + for (const n of t.getClassNames()) e.hasClass(n) || this.addClass(n, e); + return !0 + } + _unwrapAttributeElement(t, e) { + if (!Gs(t, e)) return !1; + if (t.name !== e.name || t.priority !== e.priority) return !1; + for (const n of t.getAttributeKeys()) + if ("class" !== n && "style" !== n && (!e.hasAttribute(n) || e.getAttribute(n) !== t.getAttribute(n))) return !1; + if (!e.hasClass(...t.getClassNames())) return !1; + for (const n of t.getStyleNames()) + if (!e.hasStyle(n) || e.getStyle(n) !== t.getStyle(n)) return !1; + for (const n of t.getAttributeKeys()) "class" !== n && "style" !== n && this.removeAttribute(n, e); + return this.removeClass(Array.from(t.getClassNames()), e), this.removeStyle(Array.from(t.getStyleNames()), e), !0 + } + _breakAttributesRange(t, e = !1) { + const n = t.start, + o = t.end; + if ($s(t, this.document), t.isCollapsed) { + const n = this._breakAttributes(t.start, e); + return new ms(n, n) + } + const i = this._breakAttributes(o, e), + r = i.parent.childCount, + s = this._breakAttributes(n, e); + return i.offset += i.parent.childCount - r, new ms(s, i) + } + _breakAttributes(t, e = !1) { + const n = t.offset, + o = t.parent; + if (t.parent.is("emptyElement")) throw new b("view-writer-cannot-break-empty-element", this.document); + if (t.parent.is("uiElement")) throw new b("view-writer-cannot-break-ui-element", this.document); + if (t.parent.is("rawElement")) throw new b("view-writer-cannot-break-raw-element", this.document); + if (!e && o.is("$text") && Us(o.parent)) return t.clone(); + if (Us(o)) return t.clone(); + if (o.is("$text")) return this._breakAttributes(Hs(t), e); + if (n == o.childCount) { + const t = new gs(o.parent, o.index + 1); + return this._breakAttributes(t, e) + } + if (0 === n) { + const t = new gs(o.parent, o.index); + return this._breakAttributes(t, e) + } { + const t = o.index + 1, + i = o._clone(); + o.parent._insertChild(t, i), this._addToClonedElementsGroup(i); + const r = o.childCount - n, + s = o._removeChildren(n, r); + i._appendChild(s); + const a = new gs(o.parent, t); + return this._breakAttributes(a, e) + } + } + _addToClonedElementsGroup(t) { + if (!t.root.is("rootElement")) return; + if (t.is("element")) + for (const e of t.getChildren()) this._addToClonedElementsGroup(e); + const e = t.id; + if (!e) return; + let n = this._cloneGroups.get(e); + n || (n = new Set, this._cloneGroups.set(e, n)), n.add(t), t._clonesGroup = n + } + _removeFromClonedElementsGroup(t) { + if (t.is("element")) + for (const e of t.getChildren()) this._removeFromClonedElementsGroup(e); + const e = t.id; + if (!e) return; + const n = this._cloneGroups.get(e); + n && n.delete(t) + } + } + + function Ms(t) { + let e = t.parent; + for (; !Us(e);) { + if (!e) return; + e = e.parent + } + return e + } + + function Ns(t, e) { + return t.priority < e.priority || !(t.priority > e.priority) && t.getIdentity() < e.getIdentity() + } + + function Ls(t) { + const e = t.nodeBefore; + if (e && e.is("$text")) return new gs(e, e.data.length); + const n = t.nodeAfter; + return n && n.is("$text") ? new gs(n, 0) : t + } + + function Hs(t) { + if (t.offset == t.parent.data.length) return new gs(t.parent.parent, t.parent.index + 1); + if (0 === t.offset) return new gs(t.parent.parent, t.parent.index); + const e = t.parent.data.slice(t.offset); + return t.parent._data = t.parent.data.slice(0, t.offset), t.parent.parent._insertChild(t.parent.index + 1, new or(t.root.document, e)), new gs(t.parent.parent, t.parent.index + 1) + } + + function js(t, e) { + const n = t.data.length; + return t._data += e.data, e._remove(), new gs(t, n) + } + const qs = [or, Es, as, Ts, zs, Is]; + + function Ws(t, e) { + for (const n of t) { + if (!qs.some((t => n instanceof t))) throw new b("view-writer-insert-invalid-node-type", e); + n.is("$text") || Ws(n.getChildren(), e) + } + } + + function Us(t) { + return t && (t.is("containerElement") || t.is("documentFragment")) + } + + function $s(t, e) { + const n = Ms(t.start), + o = Ms(t.end); + if (!n || !o || n !== o) throw new b("view-writer-invalid-range-container", e) + } + + function Gs(t, e) { + return null === t.id && null === e.id + } + const Ks = t => t.createTextNode(" "), + Zs = t => { + const e = t.createElement("span"); + return e.dataset.ckeFiller = "true", e.innerText = " ", e + }, + Js = t => { + const e = t.createElement("br"); + return e.dataset.ckeFiller = "true", e + }, + Ys = 7, + Qs = "⁠".repeat(Ys); + + function Xs(t) { + return zo(t) && t.data.substr(0, Ys) === Qs + } + + function ta(t) { + return t.data.length == Ys && Xs(t) + } + + function ea(t) { + return Xs(t) ? t.data.slice(Ys) : t.data + } + + function na(t, e) { + if (e.keyCode == mi.arrowleft) { + const t = e.domTarget.ownerDocument.defaultView.getSelection(); + if (1 == t.rangeCount && t.getRangeAt(0).collapsed) { + const e = t.getRangeAt(0).startContainer, + n = t.getRangeAt(0).startOffset; + Xs(e) && n <= Ys && t.collapse(e, 0) + } + } + } + var oa = n(9315), + ia = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(oa.Z, ia); + oa.Z.locals; + class ra extends(q()) { + constructor(t, e) { + super(), this.domDocuments = new Set, this.markedAttributes = new Set, this.markedChildren = new Set, this.markedTexts = new Set, this._inlineFiller = null, this._fakeSelectionContainer = null, this.domConverter = t, this.selection = e, this.set("isFocused", !1), this.set("isSelecting", !1), i.isBlink && !i.isAndroid && this.on("change:isSelecting", (() => { + this.isSelecting || this.render() + })), this.set("isComposing", !1), this.on("change:isComposing", (() => { + this.isComposing || this.render() + })) + } + markToSync(t, e) { + if ("text" === t) this.domConverter.mapViewToDom(e.parent) && this.markedTexts.add(e); + else { + if (!this.domConverter.mapViewToDom(e)) return; + if ("attributes" === t) this.markedAttributes.add(e); + else { + if ("children" !== t) { + throw new b("view-renderer-unknown-type", this) + } + this.markedChildren.add(e) + } + } + } + render() { + if (this.isComposing && !i.isAndroid) return; + let t = null; + const e = !(i.isBlink && !i.isAndroid) || !this.isSelecting; + for (const t of this.markedChildren) this._updateChildrenMappings(t); + e ? (this._inlineFiller && !this._isSelectionInInlineFiller() && this._removeInlineFiller(), this._inlineFiller ? t = this._getInlineFillerPosition() : this._needsInlineFillerAtSelection() && (t = this.selection.getFirstPosition(), this.markedChildren.add(t.parent))) : this._inlineFiller && this._inlineFiller.parentNode && (t = this.domConverter.domPositionToView(this._inlineFiller), t && t.parent.is("$text") && (t = gs._createBefore(t.parent))); + for (const t of this.markedAttributes) this._updateAttrs(t); + for (const e of this.markedChildren) this._updateChildren(e, { + inlineFillerPosition: t + }); + for (const e of this.markedTexts) !this.markedChildren.has(e.parent) && this.domConverter.mapViewToDom(e.parent) && this._updateText(e, { + inlineFillerPosition: t + }); + if (e) + if (t) { + const e = this.domConverter.viewPositionToDom(t), + n = e.parent.ownerDocument; + Xs(e.parent) ? this._inlineFiller = e.parent : this._inlineFiller = sa(n, e.parent, e.offset) + } else this._inlineFiller = null; + this._updateFocus(), this._updateSelection(), this.markedTexts.clear(), this.markedAttributes.clear(), this.markedChildren.clear() + } + _updateChildrenMappings(t) { + if (!this.domConverter.mapViewToDom(t)) return; + const e = Array.from(this.domConverter.mapViewToDom(t).childNodes), + n = Array.from(this.domConverter.viewChildrenToDom(t, { + withChildren: !1 + })), + o = this._diffNodeLists(e, n), + i = this._findUpdateActions(o, e, n, aa); + if (-1 !== i.indexOf("update")) { + const o = { + equal: 0, + insert: 0, + delete: 0 + }; + for (const r of i) + if ("update" === r) { + const i = o.equal + o.insert, + r = o.equal + o.delete, + s = t.getChild(i); + !s || s.is("uiElement") || s.is("rawElement") || this._updateElementMappings(s, e[r]), ei(n[i]), o.equal++ + } else o[r]++ + } + } + _updateElementMappings(t, e) { + this.domConverter.unbindDomElement(e), this.domConverter.bindElements(e, t), this.markedChildren.add(t), this.markedAttributes.add(t) + } + _getInlineFillerPosition() { + const t = this.selection.getFirstPosition(); + return t.parent.is("$text") ? gs._createBefore(t.parent) : t + } + _isSelectionInInlineFiller() { + if (1 != this.selection.rangeCount || !this.selection.isCollapsed) return !1; + const t = this.selection.getFirstPosition(), + e = this.domConverter.viewPositionToDom(t); + return !!(e && zo(e.parent) && Xs(e.parent)) + } + _removeInlineFiller() { + const t = this._inlineFiller; + if (!Xs(t)) throw new b("view-renderer-filler-was-lost", this); + ta(t) ? t.remove() : t.data = t.data.substr(Ys), this._inlineFiller = null + } + _needsInlineFillerAtSelection() { + if (1 != this.selection.rangeCount || !this.selection.isCollapsed) return !1; + const t = this.selection.getFirstPosition(), + e = t.parent, + n = t.offset; + if (!this.domConverter.mapViewToDom(e.root)) return !1; + if (!e.is("element")) return !1; + if (! function(t) { + if ("false" == t.getAttribute("contenteditable")) return !1; + const e = t.findAncestor((t => t.hasAttribute("contenteditable"))); + return !e || "true" == e.getAttribute("contenteditable") + }(e)) return !1; + if (n === e.getFillerOffset()) return !1; + const o = t.nodeBefore, + r = t.nodeAfter; + return !(o instanceof or || r instanceof or) && (!i.isAndroid || !o && !r) + } + _updateText(t, e) { + const n = this.domConverter.findCorrespondingDomText(t); + let o = this.domConverter.viewToDom(t).data; + const i = e.inlineFillerPosition; + i && i.parent == t.parent && i.offset == t.index && (o = Qs + o), da(n, o) + } + _updateAttrs(t) { + const e = this.domConverter.mapViewToDom(t); + if (!e) return; + const n = Array.from(e.attributes).map((t => t.name)), + o = t.getAttributeKeys(); + for (const n of o) this.domConverter.setDomElementAttribute(e, n, t.getAttribute(n), t); + for (const o of n) t.hasAttribute(o) || this.domConverter.removeDomElementAttribute(e, o) + } + _updateChildren(t, e) { + const n = this.domConverter.mapViewToDom(t); + if (!n) return; + if (i.isAndroid) { + let t = null; + for (const e of Array.from(n.childNodes)) { + if (t && zo(t) && zo(e)) { + n.normalize(); + break + } + t = e + } + } + const o = e.inlineFillerPosition, + r = n.childNodes, + s = Array.from(this.domConverter.viewChildrenToDom(t, { + bind: !0 + })); + o && o.parent === t && sa(n.ownerDocument, s, o.offset); + const a = this._diffNodeLists(r, s), + l = this._findUpdateActions(a, r, s, la); + let c = 0; + const d = new Set; + for (const t of l) "delete" === t ? (d.add(r[c]), ei(r[c])) : "equal" !== t && "update" !== t || c++; + c = 0; + for (const t of l) "insert" === t ? (Ko(n, c, s[c]), c++) : "update" === t ? (da(r[c], s[c].data), c++) : "equal" === t && (this._markDescendantTextToSync(this.domConverter.domToView(s[c])), c++); + for (const t of d) t.parentNode || this.domConverter.unbindDomElement(t) + } + _diffNodeLists(t, e) { + return t = function(t, e) { + const n = Array.from(t); + if (0 == n.length || !e) return n; + const o = n[n.length - 1]; + o == e && n.pop(); + return n + }(t, this._fakeSelectionContainer), c(t, e, ca.bind(null, this.domConverter)) + } + _findUpdateActions(t, e, n, o) { + if (-1 === t.indexOf("insert") || -1 === t.indexOf("delete")) return t; + let i = [], + r = [], + s = []; + const a = { + equal: 0, + insert: 0, + delete: 0 + }; + for (const l of t) "insert" === l ? s.push(n[a.equal + a.insert]) : "delete" === l ? r.push(e[a.equal + a.delete]) : (i = i.concat(c(r, s, o).map((t => "equal" === t ? "update" : t))), i.push("equal"), r = [], s = []), a[l]++; + return i.concat(c(r, s, o).map((t => "equal" === t ? "update" : t))) + } + _markDescendantTextToSync(t) { + if (t) + if (t.is("$text")) this.markedTexts.add(t); + else if (t.is("element")) + for (const e of t.getChildren()) this._markDescendantTextToSync(e) + } + _updateSelection() { + if (i.isBlink && !i.isAndroid && this.isSelecting && !this.markedChildren.size) return; + if (0 === this.selection.rangeCount) return this._removeDomSelection(), void this._removeFakeSelection(); + const t = this.domConverter.mapViewToDom(this.selection.editableElement); + this.isFocused && t && (this.selection.isFake ? this._updateFakeSelection(t) : this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected ? (this._removeFakeSelection(), this._updateDomSelection(t)) : this.isComposing && i.isAndroid || this._updateDomSelection(t)) + } + _updateFakeSelection(t) { + const e = t.ownerDocument; + this._fakeSelectionContainer || (this._fakeSelectionContainer = function(t) { + const e = t.createElement("div"); + return e.className = "ck-fake-selection-container", Object.assign(e.style, { + position: "fixed", + top: 0, + left: "-9999px", + width: "42px" + }), e.textContent = " ", e + }(e)); + const n = this._fakeSelectionContainer; + if (this.domConverter.bindFakeSelection(n, this.selection), !this._fakeSelectionNeedsUpdate(t)) return; + n.parentElement && n.parentElement == t || t.appendChild(n), n.textContent = this.selection.fakeSelectionLabel || " "; + const o = e.getSelection(), + i = e.createRange(); + o.removeAllRanges(), i.selectNodeContents(n), o.addRange(i) + } + _updateDomSelection(t) { + const e = t.ownerDocument.defaultView.getSelection(); + if (!this._domSelectionNeedsUpdate(e)) return; + const n = this.domConverter.viewPositionToDom(this.selection.anchor), + o = this.domConverter.viewPositionToDom(this.selection.focus); + e.collapse(n.parent, n.offset), e.extend(o.parent, o.offset), i.isGecko && function(t, e) { + const n = t.parent; + if (n.nodeType != Node.ELEMENT_NODE || t.offset != n.childNodes.length - 1) return; + const o = n.childNodes[t.offset]; + o && "BR" == o.tagName && e.addRange(e.getRangeAt(0)) + }(o, e) + } + _domSelectionNeedsUpdate(t) { + if (!this.domConverter.isDomSelectionCorrect(t)) return !0; + const e = t && this.domConverter.domSelectionToView(t); + return (!e || !this.selection.isEqual(e)) && !(!this.selection.isCollapsed && this.selection.isSimilar(e)) + } + _fakeSelectionNeedsUpdate(t) { + const e = this._fakeSelectionContainer, + n = t.ownerDocument.getSelection(); + return !e || e.parentElement !== t || (n.anchorNode !== e && !e.contains(n.anchorNode) || e.textContent !== this.selection.fakeSelectionLabel) + } + _removeDomSelection() { + for (const t of this.domDocuments) { + const e = t.getSelection(); + if (e.rangeCount) { + const n = t.activeElement, + o = this.domConverter.mapDomToView(n); + n && o && e.removeAllRanges() + } + } + } + _removeFakeSelection() { + const t = this._fakeSelectionContainer; + t && t.remove() + } + _updateFocus() { + if (this.isFocused) { + const t = this.selection.editableElement; + t && this.domConverter.focus(t) + } + } + } + + function sa(t, e, n) { + const o = e instanceof Array ? e : e.childNodes, + i = o[n]; + if (zo(i)) return i.data = Qs + i.data, i; + { + const i = t.createTextNode(Qs); + return Array.isArray(e) ? o.splice(n, 0, i) : Ko(e, n, i), i + } + } + + function aa(t, e) { + return xo(t) && xo(e) && !zo(t) && !zo(e) && !Zo(t) && !Zo(e) && t.tagName.toLowerCase() === e.tagName.toLowerCase() + } + + function la(t, e) { + return xo(t) && xo(e) && zo(t) && zo(e) + } + + function ca(t, e, n) { + return e === n || (zo(e) && zo(n) ? e.data === n.data : !(!t.isBlockFiller(e) || !t.isBlockFiller(n))) + } + + function da(t, e) { + const n = t.data; + if (n == e) return; + const o = s(n, e); + for (const e of o) "insert" === e.type ? t.insertData(e.index, e.values.join("")) : t.deleteData(e.index, e.howMany) + } + const ha = Js(Po.document), + ua = Ks(Po.document), + ga = Zs(Po.document), + ma = "data-ck-unsafe-attribute-", + pa = "data-ck-unsafe-element"; + class fa { + constructor(t, { + blockFillerMode: e, + renderingMode: n = "editing" + } = {}) { + this._domToViewMapping = new WeakMap, this._viewToDomMapping = new WeakMap, this._fakeSelectionMapping = new WeakMap, this._rawContentElementMatcher = new rr, this._encounteredRawContentDomNodes = new WeakSet, this.document = t, this.renderingMode = n, this.blockFillerMode = e || ("editing" === n ? "br" : "nbsp"), this.preElements = ["pre"], this.blockElements = ["address", "article", "aside", "blockquote", "caption", "center", "dd", "details", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "legend", "li", "main", "menu", "nav", "ol", "p", "pre", "section", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "ul"], this.inlineObjectElements = ["object", "iframe", "input", "button", "textarea", "select", "option", "video", "embed", "audio", "img", "canvas"], this.unsafeElements = ["script", "style"], this._domDocument = "editing" === this.renderingMode ? Po.document : Po.document.implementation.createHTMLDocument("") + } + bindFakeSelection(t, e) { + this._fakeSelectionMapping.set(t, new fs(e)) + } + fakeSelectionToView(t) { + return this._fakeSelectionMapping.get(t) + } + bindElements(t, e) { + this._domToViewMapping.set(t, e), this._viewToDomMapping.set(e, t) + } + unbindDomElement(t) { + const e = this._domToViewMapping.get(t); + if (e) { + this._domToViewMapping.delete(t), this._viewToDomMapping.delete(e); + for (const e of Array.from(t.children)) this.unbindDomElement(e) + } + } + bindDocumentFragments(t, e) { + this._domToViewMapping.set(t, e), this._viewToDomMapping.set(e, t) + } + shouldRenderAttribute(t, e, n) { + return "data" === this.renderingMode || !(t = t.toLowerCase()).startsWith("on") && (("srcdoc" !== t || !e.match(/\bon\S+\s*=|javascript:|<\s*\/*script/i)) && ("img" === n && ("src" === t || "srcset" === t) || ("source" === n && "srcset" === t || !e.match(/^\s*(javascript:|data:(image\/svg|text\/x?html))/i)))) + } + setContentOf(t, e) { + if ("data" === this.renderingMode) return void(t.innerHTML = e); + const n = (new DOMParser).parseFromString(e, "text/html"), + o = n.createDocumentFragment(), + i = n.body.childNodes; + for (; i.length > 0;) o.appendChild(i[0]); + const r = n.createTreeWalker(o, NodeFilter.SHOW_ELEMENT), + s = []; + let a; + for (; a = r.nextNode();) s.push(a); + for (const t of s) { + for (const e of t.getAttributeNames()) this.setDomElementAttribute(t, e, t.getAttribute(e)); + const e = t.tagName.toLowerCase(); + this._shouldRenameElement(e) && (wa(e), t.replaceWith(this._createReplacementDomElement(e, t))) + } + for (; t.firstChild;) t.firstChild.remove(); + t.append(o) + } + viewToDom(t, e = {}) { + if (t.is("$text")) { + const e = this._processDataFromViewText(t); + return this._domDocument.createTextNode(e) + } { + if (this.mapViewToDom(t)) return this.mapViewToDom(t); + let n; + if (t.is("documentFragment")) n = this._domDocument.createDocumentFragment(), e.bind && this.bindDocumentFragments(n, t); + else { + if (t.is("uiElement")) return n = "$comment" === t.name ? this._domDocument.createComment(t.getCustomProperty("$rawContent")) : t.render(this._domDocument, this), e.bind && this.bindElements(n, t), n; + this._shouldRenameElement(t.name) ? (wa(t.name), n = this._createReplacementDomElement(t.name)) : n = t.hasAttribute("xmlns") ? this._domDocument.createElementNS(t.getAttribute("xmlns"), t.name) : this._domDocument.createElement(t.name), t.is("rawElement") && t.render(n, this), e.bind && this.bindElements(n, t); + for (const e of t.getAttributeKeys()) this.setDomElementAttribute(n, e, t.getAttribute(e), t) + } + if (!1 !== e.withChildren) + for (const o of this.viewChildrenToDom(t, e)) n.appendChild(o); + return n + } + } + setDomElementAttribute(t, e, n, o) { + const i = this.shouldRenderAttribute(e, n, t.tagName.toLowerCase()) || o && o.shouldRenderUnsafeAttribute(e); + i || k("domconverter-unsafe-attribute-detected", { + domElement: t, + key: e, + value: n + }), + function(t) { + try { + Po.document.createAttribute(t) + } catch (t) { + return !1 + } + return !0 + }(e) ? (t.hasAttribute(e) && !i ? t.removeAttribute(e) : t.hasAttribute(ma + e) && i && t.removeAttribute(ma + e), t.setAttribute(i ? e : ma + e, n)) : k("domconverter-invalid-attribute-detected", { + domElement: t, + key: e, + value: n + }) + } + removeDomElementAttribute(t, e) { + e != pa && (t.removeAttribute(e), t.removeAttribute(ma + e)) + }* viewChildrenToDom(t, e = {}) { + const n = t.getFillerOffset && t.getFillerOffset(); + let o = 0; + for (const i of t.getChildren()) { + n === o && (yield this._getBlockFiller()); + const t = i.is("element") && !!i.getCustomProperty("dataPipeline:transparentRendering") && !Ei(i.getAttributes()); + t && "data" == this.renderingMode ? yield* this.viewChildrenToDom(i, e): (t && k("domconverter-transparent-rendering-unsupported-in-editing-pipeline", { + viewElement: i + }), yield this.viewToDom(i, e)), o++ + } + n === o && (yield this._getBlockFiller()) + } + viewRangeToDom(t) { + const e = this.viewPositionToDom(t.start), + n = this.viewPositionToDom(t.end), + o = this._domDocument.createRange(); + return o.setStart(e.parent, e.offset), o.setEnd(n.parent, n.offset), o + } + viewPositionToDom(t) { + const e = t.parent; + if (e.is("$text")) { + const n = this.findCorrespondingDomText(e); + if (!n) return null; + let o = t.offset; + return Xs(n) && (o += Ys), { + parent: n, + offset: o + } + } { + let n, o, i; + if (0 === t.offset) { + if (n = this.mapViewToDom(e), !n) return null; + i = n.childNodes[0] + } else { + const e = t.nodeBefore; + if (o = e.is("$text") ? this.findCorrespondingDomText(e) : this.mapViewToDom(e), !o) return null; + n = o.parentNode, i = o.nextSibling + } + if (zo(i) && Xs(i)) return { + parent: i, + offset: Ys + }; + return { + parent: n, + offset: o ? Go(o) + 1 : 0 + } + } + } + domToView(t, e = {}) { + if (this.isBlockFiller(t)) return null; + const n = this.getHostViewElement(t); + if (n) return n; + if (Zo(t) && e.skipComments) return null; + if (zo(t)) { + if (ta(t)) return null; + { + const e = this._processDataFromDomText(t); + return "" === e ? null : new or(this.document, e) + } + } { + if (this.mapDomToView(t)) return this.mapDomToView(t); + let n; + if (this.isDocumentFragment(t)) n = new Os(this.document), e.bind && this.bindDocumentFragments(t, n); + else { + n = this._createViewElement(t, e), e.bind && this.bindElements(t, n); + const o = t.attributes; + if (o) + for (let t = o.length, e = 0; e < t; e++) n._setAttribute(o[e].name, o[e].value); + if (this._isViewElementWithRawContent(n, e) || Zo(t)) { + const e = Zo(t) ? t.data : t.innerHTML; + return n._setCustomProperty("$rawContent", e), this._encounteredRawContentDomNodes.add(t), n + } + } + if (!1 !== e.withChildren) + for (const o of this.domChildrenToView(t, e)) n._appendChild(o); + return n + } + }* domChildrenToView(t, e) { + for (let n = 0; n < t.childNodes.length; n++) { + const o = t.childNodes[n], + i = this.domToView(o, e); + null !== i && (yield i) + } + } + domSelectionToView(t) { + if (1 === t.rangeCount) { + let e = t.getRangeAt(0).startContainer; + zo(e) && (e = e.parentNode); + const n = this.fakeSelectionToView(e); + if (n) return n + } + const e = this.isDomSelectionBackward(t), + n = []; + for (let e = 0; e < t.rangeCount; e++) { + const o = t.getRangeAt(e), + i = this.domRangeToView(o); + i && n.push(i) + } + return new fs(n, { + backward: e + }) + } + domRangeToView(t) { + const e = this.domPositionToView(t.startContainer, t.startOffset), + n = this.domPositionToView(t.endContainer, t.endOffset); + return e && n ? new ms(e, n) : null + } + domPositionToView(t, e = 0) { + if (this.isBlockFiller(t)) return this.domPositionToView(t.parentNode, Go(t)); + const n = this.mapDomToView(t); + if (n && (n.is("uiElement") || n.is("rawElement"))) return gs._createBefore(n); + if (zo(t)) { + if (ta(t)) return this.domPositionToView(t.parentNode, Go(t)); + const n = this.findCorrespondingViewText(t); + let o = e; + return n ? (Xs(t) && (o -= Ys, o = o < 0 ? 0 : o), new gs(n, o)) : null + } + if (0 === e) { + const e = this.mapDomToView(t); + if (e) return new gs(e, 0) + } else { + const n = t.childNodes[e - 1]; + if (zo(n) && ta(n) || n && this.isBlockFiller(n)) return this.domPositionToView(n.parentNode, Go(n)); + const o = zo(n) ? this.findCorrespondingViewText(n) : this.mapDomToView(n); + if (o && o.parent) return new gs(o.parent, o.index + 1) + } + return null + } + mapDomToView(t) { + return this.getHostViewElement(t) || this._domToViewMapping.get(t) + } + findCorrespondingViewText(t) { + if (ta(t)) return null; + const e = this.getHostViewElement(t); + if (e) return e; + const n = t.previousSibling; + if (n) { + if (!this.isElement(n)) return null; + const t = this.mapDomToView(n); + if (t) { + const e = t.nextSibling; + return e instanceof or ? e : null + } + } else { + const e = this.mapDomToView(t.parentNode); + if (e) { + const t = e.getChild(0); + return t instanceof or ? t : null + } + } + return null + } + mapViewToDom(t) { + return this._viewToDomMapping.get(t) + } + findCorrespondingDomText(t) { + const e = t.previousSibling; + return e && this.mapViewToDom(e) ? this.mapViewToDom(e).nextSibling : !e && t.parent && this.mapViewToDom(t.parent) ? this.mapViewToDom(t.parent).childNodes[0] : null + } + focus(t) { + const e = this.mapViewToDom(t); + if (e && e.ownerDocument.activeElement !== e) { + const { + scrollX: t, + scrollY: n + } = Po.window, o = []; + ba(e, (t => { + const { + scrollLeft: e, + scrollTop: n + } = t; + o.push([e, n]) + })), e.focus(), ba(e, (t => { + const [e, n] = o.shift(); + t.scrollLeft = e, t.scrollTop = n + })), Po.window.scrollTo(t, n) + } + } + isElement(t) { + return t && t.nodeType == Node.ELEMENT_NODE + } + isDocumentFragment(t) { + return t && t.nodeType == Node.DOCUMENT_FRAGMENT_NODE + } + isBlockFiller(t) { + return "br" == this.blockFillerMode ? t.isEqualNode(ha) : !("BR" !== t.tagName || !ka(t, this.blockElements) || 1 !== t.parentNode.childNodes.length) || (t.isEqualNode(ga) || function(t, e) { + const n = t.isEqualNode(ua); + return n && ka(t, e) && 1 === t.parentNode.childNodes.length + }(t, this.blockElements)) + } + isDomSelectionBackward(t) { + if (t.isCollapsed) return !1; + const e = this._domDocument.createRange(); + try { + e.setStart(t.anchorNode, t.anchorOffset), e.setEnd(t.focusNode, t.focusOffset) + } catch (t) { + return !1 + } + const n = e.collapsed; + return e.detach(), n + } + getHostViewElement(t) { + const e = Ro(t); + for (e.pop(); e.length;) { + const t = e.pop(), + n = this._domToViewMapping.get(t); + if (n && (n.is("uiElement") || n.is("rawElement"))) return n + } + return null + } + isDomSelectionCorrect(t) { + return this._isDomSelectionPositionCorrect(t.anchorNode, t.anchorOffset) && this._isDomSelectionPositionCorrect(t.focusNode, t.focusOffset) + } + registerRawContentMatcher(t) { + this._rawContentElementMatcher.add(t) + } + _getBlockFiller() { + switch (this.blockFillerMode) { + case "nbsp": + return Ks(this._domDocument); + case "markedNbsp": + return Zs(this._domDocument); + case "br": + return Js(this._domDocument) + } + } + _isDomSelectionPositionCorrect(t, e) { + if (zo(t) && Xs(t) && e < Ys) return !1; + if (this.isElement(t) && Xs(t.childNodes[e])) return !1; + const n = this.mapDomToView(t); + return !n || !n.is("uiElement") && !n.is("rawElement") + } + _processDataFromViewText(t) { + let e = t.data; + if (t.getAncestors().some((t => this.preElements.includes(t.name)))) return e; + if (" " == e.charAt(0)) { + const n = this._getTouchingInlineViewNode(t, !1); + !(n && n.is("$textProxy") && this._nodeEndsWithSpace(n)) && n || (e = " " + e.substr(1)) + } + if (" " == e.charAt(e.length - 1)) { + const n = this._getTouchingInlineViewNode(t, !0), + o = n && n.is("$textProxy") && " " == n.data.charAt(0); + " " != e.charAt(e.length - 2) && n && !o || (e = e.substr(0, e.length - 1) + " ") + } + return e.replace(/ {2}/g, "  ") + } + _nodeEndsWithSpace(t) { + if (t.getAncestors().some((t => this.preElements.includes(t.name)))) return !1; + const e = this._processDataFromViewText(t); + return " " == e.charAt(e.length - 1) + } + _processDataFromDomText(t) { + let e = t.data; + if (function(t, e) { + const n = Ro(t); + return n.some((t => t.tagName && e.includes(t.tagName.toLowerCase()))) + }(t, this.preElements)) return ea(t); + e = e.replace(/[ \n\t\r]{1,}/g, " "); + const n = this._getTouchingInlineDomNode(t, !1), + o = this._getTouchingInlineDomNode(t, !0), + i = this._checkShouldLeftTrimDomText(t, n), + r = this._checkShouldRightTrimDomText(t, o); + i && (e = e.replace(/^ /, "")), r && (e = e.replace(/ $/, "")), e = ea(new Text(e)), e = e.replace(/ \u00A0/g, " "); + const s = o && this.isElement(o) && "BR" != o.tagName, + a = o && zo(o) && " " == o.data.charAt(0); + return (/( |\u00A0)\u00A0$/.test(e) || !o || s || a) && (e = e.replace(/\u00A0$/, " ")), (i || n && this.isElement(n) && "BR" != n.tagName) && (e = e.replace(/^\u00A0/, " ")), e + } + _checkShouldLeftTrimDomText(t, e) { + return !e || (this.isElement(e) ? "BR" === e.tagName : !this._encounteredRawContentDomNodes.has(t.previousSibling) && /[^\S\u00A0]/.test(e.data.charAt(e.data.length - 1))) + } + _checkShouldRightTrimDomText(t, e) { + return !e && !Xs(t) + } + _getTouchingInlineViewNode(t, e) { + const n = new us({ + startPosition: e ? gs._createAfter(t) : gs._createBefore(t), + direction: e ? "forward" : "backward" + }); + for (const t of n) { + if (t.item.is("element") && this.inlineObjectElements.includes(t.item.name)) return t.item; + if (t.item.is("containerElement")) return null; + if (t.item.is("element", "br")) return null; + if (t.item.is("$textProxy")) return t.item + } + return null + } + _getTouchingInlineDomNode(t, e) { + if (!t.parentNode) return null; + const n = e ? "firstChild" : "lastChild", + o = e ? "nextSibling" : "previousSibling"; + let i = !0, + r = t; + do { + if (!i && r[n] ? r = r[n] : r[o] ? (r = r[o], i = !1) : (r = r.parentNode, i = !0), !r || this._isBlockElement(r)) return null + } while (!zo(r) && "BR" != r.tagName && !this._isInlineObjectElement(r)); + return r + } + _isBlockElement(t) { + return this.isElement(t) && this.blockElements.includes(t.tagName.toLowerCase()) + } + _isInlineObjectElement(t) { + return this.isElement(t) && this.inlineObjectElements.includes(t.tagName.toLowerCase()) + } + _createViewElement(t, e) { + if (Zo(t)) return new Is(this.document, "$comment"); + const n = e.keepOriginalCase ? t.tagName : t.tagName.toLowerCase(); + return new rs(this.document, n) + } + _isViewElementWithRawContent(t, e) { + return !1 !== e.withChildren && !!this._rawContentElementMatcher.match(t) + } + _shouldRenameElement(t) { + const e = t.toLowerCase(); + return "editing" === this.renderingMode && this.unsafeElements.includes(e) + } + _createReplacementDomElement(t, e) { + const n = this._domDocument.createElement("span"); + if (n.setAttribute(pa, t), e) { + for (; e.firstChild;) n.appendChild(e.firstChild); + for (const t of e.getAttributeNames()) n.setAttribute(t, e.getAttribute(t)) + } + return n + } + } + + function ba(t, e) { + let n = t; + for (; n;) e(n), n = n.parentElement + } + + function ka(t, e) { + const n = t.parentNode; + return !!n && !!n.tagName && e.includes(n.tagName.toLowerCase()) + } + + function wa(t) { + "script" === t && k("domconverter-unsafe-script-element-detected"), "style" === t && k("domconverter-unsafe-style-element-detected") + } + class Aa extends(So()) { + constructor(t) { + super(), this._isEnabled = !1, this.view = t, this.document = t.document + } + get isEnabled() { + return this._isEnabled + } + enable() { + this._isEnabled = !0 + } + disable() { + this._isEnabled = !1 + } + destroy() { + this.disable(), this.stopListening() + } + checkShouldIgnoreEventFromTarget(t) { + return t && 3 === t.nodeType && (t = t.parentNode), !(!t || 1 !== t.nodeType) && t.matches("[data-cke-ignore-events], [data-cke-ignore-events] *") + } + } + const Ca = Yr((function(t, e) { + De(e, hn(e), t) + })); + class _a { + constructor(t, e, n) { + this.view = t, this.document = t.document, this.domEvent = e, this.domTarget = e.target, Ca(this, n) + } + get target() { + return this.view.domConverter.mapDomToView(this.domTarget) + } + preventDefault() { + this.domEvent.preventDefault() + } + stopPropagation() { + this.domEvent.stopPropagation() + } + } + class va extends Aa { + constructor() { + super(...arguments), this.useCapture = !1 + } + observe(t) { + ("string" == typeof this.domEventType ? [this.domEventType] : this.domEventType).forEach((e => { + this.listenTo(t, e, ((t, e) => { + this.isEnabled && !this.checkShouldIgnoreEventFromTarget(e.target) && this.onDomEvent(e) + }), { + useCapture: this.useCapture + }) + })) + } + stopObserving(t) { + this.stopListening(t) + } + fire(t, e, n) { + this.isEnabled && this.document.fire(t, new _a(this.view, e, n)) + } + } + class ya extends va { + constructor() { + super(...arguments), this.domEventType = ["keydown", "keyup"] + } + onDomEvent(t) { + const e = { + keyCode: t.keyCode, + altKey: t.altKey, + ctrlKey: t.ctrlKey, + shiftKey: t.shiftKey, + metaKey: t.metaKey, + get keystroke() { + return fi(this) + } + }; + this.fire(t.type, t, e) + } + } + const xa = function() { + return et.Date.now() + }; + var Ea = /\s/; + const Da = function(t) { + for (var e = t.length; e-- && Ea.test(t.charAt(e));); + return e + }; + var Sa = /^\s+/; + const Ta = function(t) { + return t ? t.slice(0, Da(t) + 1).replace(Sa, "") : t + }; + var Ba = /^[-+]0x[0-9a-f]+$/i, + Ia = /^0b[01]+$/i, + Pa = /^0o[0-7]+$/i, + Ra = parseInt; + const za = function(t) { + if ("number" == typeof t) return t; + if (lr(t)) return NaN; + if (O(t)) { + var e = "function" == typeof t.valueOf ? t.valueOf() : t; + t = O(e) ? e + "" : e + } + if ("string" != typeof t) return 0 === t ? t : +t; + t = Ta(t); + var n = Ia.test(t); + return n || Pa.test(t) ? Ra(t.slice(2), n ? 2 : 8) : Ba.test(t) ? NaN : +t + }; + var Va = Math.max, + Oa = Math.min; + const Fa = function(t, e, n) { + var o, i, r, s, a, l, c = 0, + d = !1, + h = !1, + u = !0; + if ("function" != typeof t) throw new TypeError("Expected a function"); + + function g(e) { + var n = o, + r = i; + return o = i = void 0, c = e, s = t.apply(r, n) + } + + function m(t) { + var n = t - l; + return void 0 === l || n >= e || n < 0 || h && t - c >= r + } + + function p() { + var t = xa(); + if (m(t)) return f(t); + a = setTimeout(p, function(t) { + var n = e - (t - l); + return h ? Oa(n, r - (t - c)) : n + }(t)) + } + + function f(t) { + return a = void 0, u && o ? g(t) : (o = i = void 0, s) + } + + function b() { + var t = xa(), + n = m(t); + if (o = arguments, i = this, l = t, n) { + if (void 0 === a) return function(t) { + return c = t, a = setTimeout(p, e), d ? g(t) : s + }(l); + if (h) return clearTimeout(a), a = setTimeout(p, e), g(l) + } + return void 0 === a && (a = setTimeout(p, e)), s + } + return e = za(e) || 0, O(n) && (d = !!n.leading, r = (h = "maxWait" in n) ? Va(za(n.maxWait) || 0, e) : r, u = "trailing" in n ? !!n.trailing : u), b.cancel = function() { + void 0 !== a && clearTimeout(a), c = 0, o = l = i = a = void 0 + }, b.flush = function() { + return void 0 === a ? s : f(xa()) + }, b + }; + class Ma extends Aa { + constructor(t) { + super(t), this._fireSelectionChangeDoneDebounced = Fa((t => { + this.document.fire("selectionChangeDone", t) + }), 200) + } + observe() { + const t = this.document; + t.on("arrowKey", ((e, n) => { + t.selection.isFake && this.isEnabled && n.preventDefault() + }), { + context: "$capture" + }), t.on("arrowKey", ((e, n) => { + t.selection.isFake && this.isEnabled && this._handleSelectionMove(n.keyCode) + }), { + priority: "lowest" + }) + } + stopObserving() {} + destroy() { + super.destroy(), this._fireSelectionChangeDoneDebounced.cancel() + } + _handleSelectionMove(t) { + const e = this.document.selection, + n = new fs(e.getRanges(), { + backward: e.isBackward, + fake: !1 + }); + t != mi.arrowleft && t != mi.arrowup || n.setTo(n.getFirstPosition()), t != mi.arrowright && t != mi.arrowdown || n.setTo(n.getLastPosition()); + const o = { + oldSelection: e, + newSelection: n, + domSelection: null + }; + this.document.fire("selectionChange", o), this._fireSelectionChangeDoneDebounced(o) + } + } + const Na = function(t) { + return this.__data__.set(t, "__lodash_hash_undefined__"), this + }; + const La = function(t) { + return this.__data__.has(t) + }; + + function Ha(t) { + var e = -1, + n = null == t ? 0 : t.length; + for (this.__data__ = new ke; ++e < n;) this.add(t[e]) + } + Ha.prototype.add = Ha.prototype.push = Na, Ha.prototype.has = La; + const ja = Ha; + const qa = function(t, e) { + for (var n = -1, o = null == t ? 0 : t.length; ++n < o;) + if (e(t[n], n, t)) return !0; + return !1 + }; + const Wa = function(t, e) { + return t.has(e) + }; + const Ua = function(t, e, n, o, i, r) { + var s = 1 & n, + a = t.length, + l = e.length; + if (a != l && !(s && l > a)) return !1; + var c = r.get(t), + d = r.get(e); + if (c && d) return c == e && d == t; + var h = -1, + u = !0, + g = 2 & n ? new ja : void 0; + for (r.set(t, e), r.set(e, t); ++h < a;) { + var m = t[h], + p = e[h]; + if (o) var f = s ? o(p, m, h, e, t, r) : o(m, p, h, t, e, r); + if (void 0 !== f) { + if (f) continue; + u = !1; + break + } + if (g) { + if (!qa(e, (function(t, e) { + if (!Wa(g, e) && (m === t || i(m, t, n, o, r))) return g.push(e) + }))) { + u = !1; + break + } + } else if (m !== p && !i(m, p, n, o, r)) { + u = !1; + break + } + } + return r.delete(t), r.delete(e), u + }; + const $a = function(t) { + var e = -1, + n = Array(t.size); + return t.forEach((function(t, o) { + n[++e] = [o, t] + })), n + }; + const Ga = function(t) { + var e = -1, + n = Array(t.size); + return t.forEach((function(t) { + n[++e] = t + })), n + }; + var Ka = nt ? nt.prototype : void 0, + Za = Ka ? Ka.valueOf : void 0; + const Ja = function(t, e, n, o, i, r, s) { + switch (n) { + case "[object DataView]": + if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset) return !1; + t = t.buffer, e = e.buffer; + case "[object ArrayBuffer]": + return !(t.byteLength != e.byteLength || !r(new Zn(t), new Zn(e))); + case "[object Boolean]": + case "[object Date]": + case "[object Number]": + return xt(+t, +e); + case "[object Error]": + return t.name == e.name && t.message == e.message; + case "[object RegExp]": + case "[object String]": + return t == e + ""; + case "[object Map]": + var a = $a; + case "[object Set]": + var l = 1 & o; + if (a || (a = Ga), t.size != e.size && !l) return !1; + var c = s.get(t); + if (c) return c == e; + o |= 2, s.set(t, e); + var d = Ua(a(t), a(e), o, i, r, s); + return s.delete(t), d; + case "[object Symbol]": + if (Za) return Za.call(t) == Za.call(e) + } + return !1 + }; + var Ya = Object.prototype.hasOwnProperty; + const Qa = function(t, e, n, o, i, r) { + var s = 1 & n, + a = Tn(t), + l = a.length; + if (l != Tn(e).length && !s) return !1; + for (var c = l; c--;) { + var d = a[c]; + if (!(s ? d in e : Ya.call(e, d))) return !1 + } + var h = r.get(t), + u = r.get(e); + if (h && u) return h == e && u == t; + var g = !0; + r.set(t, e), r.set(e, t); + for (var m = s; ++c < l;) { + var p = t[d = a[c]], + f = e[d]; + if (o) var b = s ? o(f, p, d, e, t, r) : o(p, f, d, t, e, r); + if (!(void 0 === b ? p === f || i(p, f, n, o, r) : b)) { + g = !1; + break + } + m || (m = "constructor" == d) + } + if (g && !m) { + var k = t.constructor, + w = e.constructor; + k == w || !("constructor" in t) || !("constructor" in e) || "function" == typeof k && k instanceof k && "function" == typeof w && w instanceof w || (g = !1) + } + return r.delete(t), r.delete(e), g + }; + var Xa = "[object Arguments]", + tl = "[object Array]", + el = "[object Object]", + nl = Object.prototype.hasOwnProperty; + const ol = function(t, e, n, o, i, r) { + var s = ut(t), + a = ut(e), + l = s ? tl : $n(t), + c = a ? tl : $n(e), + d = (l = l == Xa ? el : l) == el, + h = (c = c == Xa ? el : c) == el, + u = l == c; + if (u && Me(t)) { + if (!Me(e)) return !1; + s = !0, d = !1 + } + if (u && !d) return r || (r = new Ce), s || Je(t) ? Ua(t, e, n, o, i, r) : Ja(t, e, l, n, o, i, r); + if (!(1 & n)) { + var g = d && nl.call(t, "__wrapped__"), + m = h && nl.call(e, "__wrapped__"); + if (g || m) { + var p = g ? t.value() : t, + f = m ? e.value() : e; + return r || (r = new Ce), i(p, f, n, o, r) + } + } + return !!u && (r || (r = new Ce), Qa(t, e, n, o, i, r)) + }; + const il = function t(e, n, o, i, r) { + return e === n || (null == e || null == n || !gt(e) && !gt(n) ? e != e && n != n : ol(e, n, o, i, t, r)) + }; + const rl = function(t, e, n) { + var o = (n = "function" == typeof n ? n : void 0) ? n(t, e) : void 0; + return void 0 === o ? il(t, e, void 0, n) : !!o + }; + class sl extends Aa { + constructor(t) { + super(t), this._config = { + childList: !0, + characterData: !0, + subtree: !0 + }, this.domConverter = t.domConverter, this.renderer = t._renderer, this._domElements = new Set, this._mutationObserver = new window.MutationObserver(this._onMutations.bind(this)) + } + flush() { + this._onMutations(this._mutationObserver.takeRecords()) + } + observe(t) { + this._domElements.add(t), this.isEnabled && this._mutationObserver.observe(t, this._config) + } + stopObserving(t) { + if (this._domElements.delete(t), this.isEnabled) { + this._mutationObserver.disconnect(); + for (const t of this._domElements) this._mutationObserver.observe(t, this._config) + } + } + enable() { + super.enable(); + for (const t of this._domElements) this._mutationObserver.observe(t, this._config) + } + disable() { + super.disable(), this._mutationObserver.disconnect() + } + destroy() { + super.destroy(), this._mutationObserver.disconnect() + } + _onMutations(t) { + if (0 === t.length) return; + const e = this.domConverter, + n = new Set, + o = new Set; + for (const n of t) { + const t = e.mapDomToView(n.target); + t && (t.is("uiElement") || t.is("rawElement") || "childList" !== n.type || this._isBogusBrMutation(n) || o.add(t)) + } + for (const i of t) { + const t = e.mapDomToView(i.target); + if ((!t || !t.is("uiElement") && !t.is("rawElement")) && "characterData" === i.type) { + const t = e.findCorrespondingViewText(i.target); + t && !o.has(t.parent) ? n.add(t) : !t && Xs(i.target) && o.add(e.mapDomToView(i.target.parentNode)) + } + } + let i = !1; + for (const t of n) i = !0, this.renderer.markToSync("text", t); + for (const t of o) { + const n = e.mapViewToDom(t), + o = Array.from(t.getChildren()), + r = Array.from(e.domChildrenToView(n, { + withChildren: !1 + })); + rl(o, r, al) || (i = !0, this.renderer.markToSync("children", t)) + } + i && this.view.forceRender() + } + _isBogusBrMutation(t) { + let e = null; + return null === t.nextSibling && 0 === t.removedNodes.length && 1 == t.addedNodes.length && (e = this.domConverter.domToView(t.addedNodes[0], { + withChildren: !1 + })), e && e.is("element", "br") + } + } + + function al(t, e) { + if (!Array.isArray(t)) return t === e || !(!t.is("$text") || !e.is("$text")) && t.data === e.data + } + class ll extends va { + constructor(t) { + super(t), this._isFocusChanging = !1, this.domEventType = ["focus", "blur"], this.useCapture = !0; + const e = this.document; + e.on("focus", (() => { + this._isFocusChanging = !0, this._renderTimeoutId = setTimeout((() => { + this.flush(), t.change((() => {})) + }), 50) + })), e.on("blur", ((n, o) => { + const i = e.selection.editableElement; + null !== i && i !== o.target || (e.isFocused = !1, this._isFocusChanging = !1, t.change((() => {}))) + })) + } + flush() { + this._isFocusChanging && (this._isFocusChanging = !1, this.document.isFocused = !0) + } + onDomEvent(t) { + this.fire(t.type, t) + } + destroy() { + this._renderTimeoutId && clearTimeout(this._renderTimeoutId), super.destroy() + } + } + class cl extends Aa { + constructor(t) { + super(t), this.mutationObserver = t.getObserver(sl), this.focusObserver = t.getObserver(ll), this.selection = this.document.selection, this.domConverter = t.domConverter, this._documents = new WeakSet, this._fireSelectionChangeDoneDebounced = Fa((t => { + this.document.fire("selectionChangeDone", t) + }), 200), this._clearInfiniteLoopInterval = setInterval((() => this._clearInfiniteLoop()), 1e3), this._documentIsSelectingInactivityTimeoutDebounced = Fa((() => this.document.isSelecting = !1), 5e3), this._loopbackCounter = 0 + } + observe(t) { + const e = t.ownerDocument, + n = () => { + this.document.isSelecting && (this._handleSelectionChange(null, e), this.document.isSelecting = !1, this._documentIsSelectingInactivityTimeoutDebounced.cancel()) + }; + this.listenTo(t, "selectstart", (() => { + this.document.isSelecting = !0, this._documentIsSelectingInactivityTimeoutDebounced() + }), { + priority: "highest" + }), this.listenTo(t, "keydown", n, { + priority: "highest", + useCapture: !0 + }), this.listenTo(t, "keyup", n, { + priority: "highest", + useCapture: !0 + }), this._documents.has(e) || (this.listenTo(e, "mouseup", n, { + priority: "highest", + useCapture: !0 + }), this.listenTo(e, "selectionchange", ((t, n) => { + this.document.isComposing && !i.isAndroid || (this._handleSelectionChange(n, e), this._documentIsSelectingInactivityTimeoutDebounced()) + })), this._documents.add(e)) + } + stopObserving(t) { + this.stopListening(t) + } + destroy() { + super.destroy(), clearInterval(this._clearInfiniteLoopInterval), this._fireSelectionChangeDoneDebounced.cancel(), this._documentIsSelectingInactivityTimeoutDebounced.cancel() + } + _reportInfiniteLoop() {} + _handleSelectionChange(t, e) { + if (!this.isEnabled) return; + const n = e.defaultView.getSelection(); + if (this.checkShouldIgnoreEventFromTarget(n.anchorNode)) return; + this.mutationObserver.flush(); + const o = this.domConverter.domSelectionToView(n); + if (0 != o.rangeCount) { + if (this.view.hasDomSelection = !0, !this.selection.isEqual(o) || !this.domConverter.isDomSelectionCorrect(n)) + if (++this._loopbackCounter > 60) this._reportInfiniteLoop(); + else if (this.focusObserver.flush(), this.selection.isSimilar(o)) this.view.forceRender(); + else { + const t = { + oldSelection: this.selection, + newSelection: o, + domSelection: n + }; + this.document.fire("selectionChange", t), this._fireSelectionChangeDoneDebounced(t) + } + } else this.view.hasDomSelection = !1 + } + _clearInfiniteLoop() { + this._loopbackCounter = 0 + } + } + class dl extends va { + constructor(t) { + super(t), this.domEventType = ["compositionstart", "compositionupdate", "compositionend"]; + const e = this.document; + e.on("compositionstart", (() => { + e.isComposing = !0 + }), { + priority: "low" + }), e.on("compositionend", (() => { + e.isComposing = !1 + }), { + priority: "low" + }) + } + onDomEvent(t) { + this.fire(t.type, t, { + data: t.data + }) + } + } + class hl { + constructor(t, e = {}) { + this._files = e.cacheFiles ? ul(t) : null, this._native = t + } + get files() { + return this._files || (this._files = ul(this._native)), this._files + } + get types() { + return this._native.types + } + getData(t) { + return this._native.getData(t) + } + setData(t, e) { + this._native.setData(t, e) + } + set effectAllowed(t) { + this._native.effectAllowed = t + } + get effectAllowed() { + return this._native.effectAllowed + } + set dropEffect(t) { + this._native.dropEffect = t + } + get dropEffect() { + return this._native.dropEffect + } + setDragImage(t, e, n) { + this._native.setDragImage(t, e, n) + } + get isCanceled() { + return "none" == this._native.dropEffect || !!this._native.mozUserCancelled + } + } + + function ul(t) { + const e = Array.from(t.files || []), + n = Array.from(t.items || []); + return e.length ? e : n.filter((t => "file" === t.kind)).map((t => t.getAsFile())) + } + class gl extends va { + constructor() { + super(...arguments), this.domEventType = "beforeinput" + } + onDomEvent(t) { + const e = t.getTargetRanges(), + n = this.view, + o = n.document; + let r = null, + s = null, + a = []; + if (t.dataTransfer && (r = new hl(t.dataTransfer)), null !== t.data ? s = t.data : r && (s = r.getData("text/plain")), o.selection.isFake) a = Array.from(o.selection.getRanges()); + else if (e.length) a = e.map((t => { + const e = n.domConverter.domPositionToView(t.startContainer, t.startOffset), + o = n.domConverter.domPositionToView(t.endContainer, t.endOffset); + return e ? n.createRange(e, o) : o ? n.createRange(o) : void 0 + })).filter((t => !!t)); + else if (i.isAndroid) { + const e = t.target.ownerDocument.defaultView.getSelection(); + a = Array.from(n.domConverter.domSelectionToView(e).getRanges()) + } + if (i.isAndroid && "insertCompositionText" == t.inputType && s && s.endsWith("\n")) this.fire(t.type, t, { + inputType: "insertParagraph", + targetRanges: [n.createRange(a[0].end)] + }); + else if ("insertText" == t.inputType && s && s.includes("\n")) { + const e = s.split(/\n{1,2}/g); + let n = a; + for (let i = 0; i < e.length; i++) { + const s = e[i]; + "" != s && (this.fire(t.type, t, { + data: s, + dataTransfer: r, + targetRanges: n, + inputType: t.inputType, + isComposing: t.isComposing + }), n = [o.selection.getFirstRange()]), i + 1 < e.length && (this.fire(t.type, t, { + inputType: "insertParagraph", + targetRanges: n + }), n = [o.selection.getFirstRange()]) + } + } else this.fire(t.type, t, { + data: s, + dataTransfer: r, + targetRanges: a, + inputType: t.inputType, + isComposing: t.isComposing + }) + } + } + class ml extends Aa { + constructor(t) { + super(t), this.document.on("keydown", ((t, e) => { + if (this.isEnabled && ((n = e.keyCode) == mi.arrowright || n == mi.arrowleft || n == mi.arrowup || n == mi.arrowdown)) { + const n = new ks(this.document, "arrowKey", this.document.selection.getFirstRange()); + this.document.fire(n, e), n.stop.called && t.stop() + } + var n + })) + } + observe() {} + stopObserving() {} + } + class pl extends Aa { + constructor(t) { + super(t); + const e = this.document; + e.on("keydown", ((t, n) => { + if (!this.isEnabled || n.keyCode != mi.tab || n.ctrlKey) return; + const o = new ks(e, "tab", e.selection.getFirstRange()); + e.fire(o, n), o.stop.called && t.stop() + })) + } + observe() {} + stopObserving() {} + } + const fl = function(t) { + return wo(t, 5) + }; + class bl extends(q()) { + constructor(t) { + super(), this.domRoots = new Map, this._initialDomRootAttributes = new WeakMap, this._observers = new Map, this._ongoingChange = !1, this._postFixersInProgress = !1, this._renderingDisabled = !1, this._hasChangedSinceTheLastRendering = !1, this.document = new xs(t), this.domConverter = new fa(this.document), this.set("isRenderingInProgress", !1), this.set("hasDomSelection", !1), this._renderer = new ra(this.domConverter, this.document.selection), this._renderer.bind("isFocused", "isSelecting", "isComposing").to(this.document, "isFocused", "isSelecting", "isComposing"), this._writer = new Fs(this.document), this.addObserver(sl), this.addObserver(ll), this.addObserver(cl), this.addObserver(ya), this.addObserver(Ma), this.addObserver(dl), this.addObserver(ml), this.addObserver(gl), this.addObserver(pl), this.document.on("arrowKey", na, { + priority: "low" + }), Ps(this), this.on("render", (() => { + this._render(), this.document.fire("layoutChanged"), this._hasChangedSinceTheLastRendering = !1 + })), this.listenTo(this.document.selection, "change", (() => { + this._hasChangedSinceTheLastRendering = !0 + })), this.listenTo(this.document, "change:isFocused", (() => { + this._hasChangedSinceTheLastRendering = !0 + })) + } + attachDomRoot(t, e = "main") { + const n = this.document.getRoot(e); + n._name = t.tagName.toLowerCase(); + const o = {}; + for (const { + name: e, + value: i + } + of Array.from(t.attributes)) o[e] = i, "class" === e ? this._writer.addClass(i.split(" "), n) : this._writer.setAttribute(e, i, n); + this._initialDomRootAttributes.set(t, o); + const i = () => { + this._writer.setAttribute("contenteditable", (!n.isReadOnly).toString(), n), n.isReadOnly ? this._writer.addClass("ck-read-only", n) : this._writer.removeClass("ck-read-only", n) + }; + i(), this.domRoots.set(e, t), this.domConverter.bindElements(t, n), this._renderer.markToSync("children", n), this._renderer.markToSync("attributes", n), this._renderer.domDocuments.add(t.ownerDocument), n.on("change:children", ((t, e) => this._renderer.markToSync("children", e))), n.on("change:attributes", ((t, e) => this._renderer.markToSync("attributes", e))), n.on("change:text", ((t, e) => this._renderer.markToSync("text", e))), n.on("change:isReadOnly", (() => this.change(i))), n.on("change", (() => { + this._hasChangedSinceTheLastRendering = !0 + })); + for (const n of this._observers.values()) n.observe(t, e) + } + detachDomRoot(t) { + const e = this.domRoots.get(t); + Array.from(e.attributes).forEach((({ + name: t + }) => e.removeAttribute(t))); + const n = this._initialDomRootAttributes.get(e); + for (const t in n) e.setAttribute(t, n[t]); + this.domRoots.delete(t), this.domConverter.unbindDomElement(e); + for (const t of this._observers.values()) t.stopObserving(e) + } + getDomRoot(t = "main") { + return this.domRoots.get(t) + } + addObserver(t) { + let e = this._observers.get(t); + if (e) return e; + e = new t(this), this._observers.set(t, e); + for (const [t, n] of this.domRoots) e.observe(n, t); + return e.enable(), e + } + getObserver(t) { + return this._observers.get(t) + } + disableObservers() { + for (const t of this._observers.values()) t.disable() + } + enableObservers() { + for (const t of this._observers.values()) t.enable() + } + scrollToTheSelection({ + alignToTop: t, + forceScroll: e, + viewportOffset: n = 20, + ancestorOffset: o = 20 + } = {}) { + const i = this.document.selection.getFirstRange(); + if (!i) return; + const r = fl({ + alignToTop: t, + forceScroll: e, + viewportOffset: n, + ancestorOffset: o + }); + "number" == typeof n && (n = { + top: n, + bottom: n, + left: n, + right: n + }); + const s = { + target: this.domConverter.viewRangeToDom(i), + viewportOffset: n, + ancestorOffset: o, + alignToTop: t, + forceScroll: e + }; + this.fire("scrollToTheSelection", s, r), ni(s) + } + focus() { + if (!this.document.isFocused) { + const t = this.document.selection.editableElement; + t && (this.domConverter.focus(t), this.forceRender()) + } + } + change(t) { + if (this.isRenderingInProgress || this._postFixersInProgress) throw new b("cannot-change-view-tree", this); + try { + if (this._ongoingChange) return t(this._writer); + this._ongoingChange = !0; + const e = t(this._writer); + return this._ongoingChange = !1, !this._renderingDisabled && this._hasChangedSinceTheLastRendering && (this._postFixersInProgress = !0, this.document._callPostFixers(this._writer), this._postFixersInProgress = !1, this.fire("render")), e + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + forceRender() { + this._hasChangedSinceTheLastRendering = !0, this.getObserver(ll).flush(), this.change((() => {})) + } + destroy() { + for (const t of this._observers.values()) t.destroy(); + this.document.destroy(), this.stopListening() + } + createPositionAt(t, e) { + return gs._createAt(t, e) + } + createPositionAfter(t) { + return gs._createAfter(t) + } + createPositionBefore(t) { + return gs._createBefore(t) + } + createRange(t, e) { + return new ms(t, e) + } + createRangeOn(t) { + return ms._createOn(t) + } + createRangeIn(t) { + return ms._createIn(t) + } + createSelection(...t) { + return new fs(...t) + } + _disableRendering(t) { + this._renderingDisabled = t, 0 == t && this.change((() => {})) + } + _render() { + this.isRenderingInProgress = !0, this.disableObservers(), this._renderer.render(), this.enableObservers(), this.isRenderingInProgress = !1 + } + } + class kl { + is() { + throw new Error("is() method is abstract") + } + } + class wl extends kl { + constructor(t) { + super(), this.parent = null, this._attrs = Ti(t) + } + get document() { + return null + } + get index() { + let t; + if (!this.parent) return null; + if (null === (t = this.parent.getChildIndex(this))) throw new b("model-node-not-found-in-parent", this); + return t + } + get startOffset() { + let t; + if (!this.parent) return null; + if (null === (t = this.parent.getChildStartOffset(this))) throw new b("model-node-not-found-in-parent", this); + return t + } + get offsetSize() { + return 1 + } + get endOffset() { + return this.parent ? this.startOffset + this.offsetSize : null + } + get nextSibling() { + const t = this.index; + return null !== t && this.parent.getChild(t + 1) || null + } + get previousSibling() { + const t = this.index; + return null !== t && this.parent.getChild(t - 1) || null + } + get root() { + let t = this; + for (; t.parent;) t = t.parent; + return t + } + isAttached() { + return null !== this.parent && this.root.isAttached() + } + getPath() { + const t = []; + let e = this; + for (; e.parent;) t.unshift(e.startOffset), e = e.parent; + return t + } + getAncestors(t = {}) { + const e = []; + let n = t.includeSelf ? this : this.parent; + for (; n;) e[t.parentFirst ? "push" : "unshift"](n), n = n.parent; + return e + } + getCommonAncestor(t, e = {}) { + const n = this.getAncestors(e), + o = t.getAncestors(e); + let i = 0; + for (; n[i] == o[i] && n[i];) i++; + return 0 === i ? null : n[i - 1] + } + isBefore(t) { + if (this == t) return !1; + if (this.root !== t.root) return !1; + const e = this.getPath(), + n = t.getPath(), + o = Y(e, n); + switch (o) { + case "prefix": + return !0; + case "extension": + return !1; + default: + return e[o] < n[o] + } + } + isAfter(t) { + return this != t && (this.root === t.root && !this.isBefore(t)) + } + hasAttribute(t) { + return this._attrs.has(t) + } + getAttribute(t) { + return this._attrs.get(t) + } + getAttributes() { + return this._attrs.entries() + } + getAttributeKeys() { + return this._attrs.keys() + } + toJSON() { + const t = {}; + return this._attrs.size && (t.attributes = Array.from(this._attrs).reduce(((t, e) => (t[e[0]] = e[1], t)), {})), t + } + _clone(t) { + return new this.constructor(this._attrs) + } + _remove() { + this.parent._removeChildren(this.index) + } + _setAttribute(t, e) { + this._attrs.set(t, e) + } + _setAttributesTo(t) { + this._attrs = Ti(t) + } + _removeAttribute(t) { + return this._attrs.delete(t) + } + _clearAttributes() { + this._attrs.clear() + } + } + wl.prototype.is = function(t) { + return "node" === t || "model:node" === t + }; + class Al { + constructor(t) { + this._nodes = [], t && this._insertNodes(0, t) + } [Symbol.iterator]() { + return this._nodes[Symbol.iterator]() + } + get length() { + return this._nodes.length + } + get maxOffset() { + return this._nodes.reduce(((t, e) => t + e.offsetSize), 0) + } + getNode(t) { + return this._nodes[t] || null + } + getNodeIndex(t) { + const e = this._nodes.indexOf(t); + return -1 == e ? null : e + } + getNodeStartOffset(t) { + const e = this.getNodeIndex(t); + return null === e ? null : this._nodes.slice(0, e).reduce(((t, e) => t + e.offsetSize), 0) + } + indexToOffset(t) { + if (t == this._nodes.length) return this.maxOffset; + const e = this._nodes[t]; + if (!e) throw new b("model-nodelist-index-out-of-bounds", this); + return this.getNodeStartOffset(e) + } + offsetToIndex(t) { + let e = 0; + for (const n of this._nodes) { + if (t >= e && t < e + n.offsetSize) return this.getNodeIndex(n); + e += n.offsetSize + } + if (e != t) throw new b("model-nodelist-offset-out-of-bounds", this, { + offset: t, + nodeList: this + }); + return this.length + } + _insertNodes(t, e) { + for (const t of e) + if (!(t instanceof wl)) throw new b("model-nodelist-insertnodes-not-node", this); + this._nodes = function(t, e, n, o) { + if (Math.max(e.length, t.length) > 1e4) return t.slice(0, n).concat(e).concat(t.slice(n + o, t.length)); + { + const i = Array.from(t); + return i.splice(n, o, ...e), i + } + }(this._nodes, Array.from(e), t, 0) + } + _removeNodes(t, e = 1) { + return this._nodes.splice(t, e) + } + toJSON() { + return this._nodes.map((t => t.toJSON())) + } + } + class Cl extends wl { + constructor(t, e) { + super(e), this._data = t || "" + } + get offsetSize() { + return this.data.length + } + get data() { + return this._data + } + toJSON() { + const t = super.toJSON(); + return t.data = this.data, t + } + _clone() { + return new Cl(this.data, this.getAttributes()) + } + static fromJSON(t) { + return new Cl(t.data, t.attributes) + } + } + Cl.prototype.is = function(t) { + return "$text" === t || "model:$text" === t || "text" === t || "model:text" === t || "node" === t || "model:node" === t + }; + class _l extends kl { + constructor(t, e, n) { + if (super(), this.textNode = t, e < 0 || e > t.offsetSize) throw new b("model-textproxy-wrong-offsetintext", this); + if (n < 0 || e + n > t.offsetSize) throw new b("model-textproxy-wrong-length", this); + this.data = t.data.substring(e, e + n), this.offsetInText = e + } + get startOffset() { + return null !== this.textNode.startOffset ? this.textNode.startOffset + this.offsetInText : null + } + get offsetSize() { + return this.data.length + } + get endOffset() { + return null !== this.startOffset ? this.startOffset + this.offsetSize : null + } + get isPartial() { + return this.offsetSize !== this.textNode.offsetSize + } + get parent() { + return this.textNode.parent + } + get root() { + return this.textNode.root + } + getPath() { + const t = this.textNode.getPath(); + return t.length > 0 && (t[t.length - 1] += this.offsetInText), t + } + getAncestors(t = {}) { + const e = []; + let n = t.includeSelf ? this : this.parent; + for (; n;) e[t.parentFirst ? "push" : "unshift"](n), n = n.parent; + return e + } + hasAttribute(t) { + return this.textNode.hasAttribute(t) + } + getAttribute(t) { + return this.textNode.getAttribute(t) + } + getAttributes() { + return this.textNode.getAttributes() + } + getAttributeKeys() { + return this.textNode.getAttributeKeys() + } + } + _l.prototype.is = function(t) { + return "$textProxy" === t || "model:$textProxy" === t || "textProxy" === t || "model:textProxy" === t + }; + class vl extends wl { + constructor(t, e, n) { + super(e), this._children = new Al, this.name = t, n && this._insertChild(0, n) + } + get childCount() { + return this._children.length + } + get maxOffset() { + return this._children.maxOffset + } + get isEmpty() { + return 0 === this.childCount + } + getChild(t) { + return this._children.getNode(t) + } + getChildren() { + return this._children[Symbol.iterator]() + } + getChildIndex(t) { + return this._children.getNodeIndex(t) + } + getChildStartOffset(t) { + return this._children.getNodeStartOffset(t) + } + offsetToIndex(t) { + return this._children.offsetToIndex(t) + } + getNodeByPath(t) { + let e = this; + for (const n of t) e = e.getChild(e.offsetToIndex(n)); + return e + } + findAncestor(t, e = {}) { + let n = e.includeSelf ? this : this.parent; + for (; n;) { + if (n.name === t) return n; + n = n.parent + } + return null + } + toJSON() { + const t = super.toJSON(); + if (t.name = this.name, this._children.length > 0) { + t.children = []; + for (const e of this._children) t.children.push(e.toJSON()) + } + return t + } + _clone(t = !1) { + const e = t ? Array.from(this._children).map((t => t._clone(!0))) : void 0; + return new vl(this.name, this.getAttributes(), e) + } + _appendChild(t) { + this._insertChild(this.childCount, t) + } + _insertChild(t, e) { + const n = function(t) { + if ("string" == typeof t) return [new Cl(t)]; + Q(t) || (t = [t]); + return Array.from(t).map((t => "string" == typeof t ? new Cl(t) : t instanceof _l ? new Cl(t.data, t.getAttributes()) : t)) + }(e); + for (const t of n) null !== t.parent && t._remove(), t.parent = this; + this._children._insertNodes(t, n) + } + _removeChildren(t, e = 1) { + const n = this._children._removeNodes(t, e); + for (const t of n) t.parent = null; + return n + } + static fromJSON(t) { + let e; + if (t.children) { + e = []; + for (const n of t.children) n.name ? e.push(vl.fromJSON(n)) : e.push(Cl.fromJSON(n)) + } + return new vl(t.name, t.attributes, e) + } + } + vl.prototype.is = function(t, e) { + return e ? e === this.name && ("element" === t || "model:element" === t) : "element" === t || "model:element" === t || "node" === t || "model:node" === t + }; + class yl { + constructor(t) { + if (!t || !t.boundaries && !t.startPosition) throw new b("model-tree-walker-no-start-position", null); + const e = t.direction || "forward"; + if ("forward" != e && "backward" != e) throw new b("model-tree-walker-unknown-direction", t, { + direction: e + }); + this.direction = e, this.boundaries = t.boundaries || null, t.startPosition ? this._position = t.startPosition.clone() : this._position = El._createAt(this.boundaries["backward" == this.direction ? "end" : "start"]), this.position.stickiness = "toNone", this.singleCharacters = !!t.singleCharacters, this.shallow = !!t.shallow, this.ignoreElementEnd = !!t.ignoreElementEnd, this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null, this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null, this._visitedParent = this.position.parent + } [Symbol.iterator]() { + return this + } + get position() { + return this._position + } + skip(t) { + let e, n, o, i; + do { + o = this.position, i = this._visitedParent, ({ + done: e, + value: n + } = this.next()) + } while (!e && t(n)); + e || (this._position = o, this._visitedParent = i) + } + next() { + return "forward" == this.direction ? this._next() : this._previous() + } + _next() { + const t = this.position, + e = this.position.clone(), + n = this._visitedParent; + if (null === n.parent && e.offset === n.maxOffset) return { + done: !0, + value: void 0 + }; + if (n === this._boundaryEndParent && e.offset == this.boundaries.end.offset) return { + done: !0, + value: void 0 + }; + const o = Dl(e, n), + i = o || Sl(e, n, o); + if (i instanceof vl) { + if (this.shallow) { + if (this.boundaries && this.boundaries.end.isBefore(e)) return { + done: !0, + value: void 0 + }; + e.offset++ + } else e.path.push(0), this._visitedParent = i; + return this._position = e, xl("elementStart", i, t, e, 1) + } + if (i instanceof Cl) { + let o; + if (this.singleCharacters) o = 1; + else { + let t = i.endOffset; + this._boundaryEndParent == n && this.boundaries.end.offset < t && (t = this.boundaries.end.offset), o = t - e.offset + } + const r = e.offset - i.startOffset, + s = new _l(i, r, o); + return e.offset += o, this._position = e, xl("text", s, t, e, o) + } + return e.path.pop(), e.offset++, this._position = e, this._visitedParent = n.parent, this.ignoreElementEnd ? this._next() : xl("elementEnd", n, t, e) + } + _previous() { + const t = this.position, + e = this.position.clone(), + n = this._visitedParent; + if (null === n.parent && 0 === e.offset) return { + done: !0, + value: void 0 + }; + if (n == this._boundaryStartParent && e.offset == this.boundaries.start.offset) return { + done: !0, + value: void 0 + }; + const o = e.parent, + i = Dl(e, o), + r = i || Tl(e, o, i); + if (r instanceof vl) return e.offset--, this.shallow ? (this._position = e, xl("elementStart", r, t, e, 1)) : (e.path.push(r.maxOffset), this._position = e, this._visitedParent = r, this.ignoreElementEnd ? this._previous() : xl("elementEnd", r, t, e)); + if (r instanceof Cl) { + let o; + if (this.singleCharacters) o = 1; + else { + let t = r.startOffset; + this._boundaryStartParent == n && this.boundaries.start.offset > t && (t = this.boundaries.start.offset), o = e.offset - t + } + const i = e.offset - r.startOffset, + s = new _l(r, i - o, o); + return e.offset -= o, this._position = e, xl("text", s, t, e, o) + } + return e.path.pop(), this._position = e, this._visitedParent = n.parent, xl("elementStart", n, t, e, 1) + } + } + + function xl(t, e, n, o, i) { + return { + done: !1, + value: { + type: t, + item: e, + previousPosition: n, + nextPosition: o, + length: i + } + } + } + class El extends kl { + constructor(t, e, n = "toNone") { + if (super(), !t.is("element") && !t.is("documentFragment")) throw new b("model-position-root-invalid", t); + if (!(e instanceof Array) || 0 === e.length) throw new b("model-position-path-incorrect-format", t, { + path: e + }); + t.is("rootElement") ? e = e.slice() : (e = [...t.getPath(), ...e], t = t.root), this.root = t, this.path = e, this.stickiness = n + } + get offset() { + return this.path[this.path.length - 1] + } + set offset(t) { + this.path[this.path.length - 1] = t + } + get parent() { + let t = this.root; + for (let e = 0; e < this.path.length - 1; e++) + if (t = t.getChild(t.offsetToIndex(this.path[e])), !t) throw new b("model-position-path-incorrect", this, { + position: this + }); + if (t.is("$text")) throw new b("model-position-path-incorrect", this, { + position: this + }); + return t + } + get index() { + return this.parent.offsetToIndex(this.offset) + } + get textNode() { + return Dl(this, this.parent) + } + get nodeAfter() { + const t = this.parent; + return Sl(this, t, Dl(this, t)) + } + get nodeBefore() { + const t = this.parent; + return Tl(this, t, Dl(this, t)) + } + get isAtStart() { + return 0 === this.offset + } + get isAtEnd() { + return this.offset == this.parent.maxOffset + } + compareWith(t) { + if (this.root != t.root) return "different"; + const e = Y(this.path, t.path); + switch (e) { + case "same": + return "same"; + case "prefix": + return "before"; + case "extension": + return "after"; + default: + return this.path[e] < t.path[e] ? "before" : "after" + } + } + getLastMatchingPosition(t, e = {}) { + e.startPosition = this; + const n = new yl(e); + return n.skip(t), n.position + } + getParentPath() { + return this.path.slice(0, -1) + } + getAncestors() { + const t = this.parent; + return t.is("documentFragment") ? [t] : t.getAncestors({ + includeSelf: !0 + }) + } + findAncestor(t) { + const e = this.parent; + return e.is("element") ? e.findAncestor(t, { + includeSelf: !0 + }) : null + } + getCommonPath(t) { + if (this.root != t.root) return []; + const e = Y(this.path, t.path), + n = "string" == typeof e ? Math.min(this.path.length, t.path.length) : e; + return this.path.slice(0, n) + } + getCommonAncestor(t) { + const e = this.getAncestors(), + n = t.getAncestors(); + let o = 0; + for (; e[o] == n[o] && e[o];) o++; + return 0 === o ? null : e[o - 1] + } + getShiftedBy(t) { + const e = this.clone(), + n = e.offset + t; + return e.offset = n < 0 ? 0 : n, e + } + isAfter(t) { + return "after" == this.compareWith(t) + } + isBefore(t) { + return "before" == this.compareWith(t) + } + isEqual(t) { + return "same" == this.compareWith(t) + } + isTouching(t) { + if (this.root !== t.root) return !1; + const e = Math.min(this.path.length, t.path.length); + for (let n = 0; n < e; n++) { + const e = this.path[n] - t.path[n]; + if (e < -1 || e > 1) return !1; + if (1 === e) return Bl(t, this, n); + if (-1 === e) return Bl(this, t, n) + } + return this.path.length === t.path.length || (this.path.length > t.path.length ? Il(this.path, e) : Il(t.path, e)) + } + hasSameParentAs(t) { + if (this.root !== t.root) return !1; + return "same" == Y(this.getParentPath(), t.getParentPath()) + } + getTransformedByOperation(t) { + let e; + switch (t.type) { + case "insert": + e = this._getTransformedByInsertOperation(t); + break; + case "move": + case "remove": + case "reinsert": + e = this._getTransformedByMoveOperation(t); + break; + case "split": + e = this._getTransformedBySplitOperation(t); + break; + case "merge": + e = this._getTransformedByMergeOperation(t); + break; + default: + e = El._createAt(this) + } + return e + } + _getTransformedByInsertOperation(t) { + return this._getTransformedByInsertion(t.position, t.howMany) + } + _getTransformedByMoveOperation(t) { + return this._getTransformedByMove(t.sourcePosition, t.targetPosition, t.howMany) + } + _getTransformedBySplitOperation(t) { + const e = t.movedRange; + return e.containsPosition(this) || e.start.isEqual(this) && "toNext" == this.stickiness ? this._getCombined(t.splitPosition, t.moveTargetPosition) : t.graveyardPosition ? this._getTransformedByMove(t.graveyardPosition, t.insertionPosition, 1) : this._getTransformedByInsertion(t.insertionPosition, 1) + } + _getTransformedByMergeOperation(t) { + const e = t.movedRange; + let n; + return e.containsPosition(this) || e.start.isEqual(this) ? (n = this._getCombined(t.sourcePosition, t.targetPosition), t.sourcePosition.isBefore(t.targetPosition) && (n = n._getTransformedByDeletion(t.deletionPosition, 1))) : n = this.isEqual(t.deletionPosition) ? El._createAt(t.deletionPosition) : this._getTransformedByMove(t.deletionPosition, t.graveyardPosition, 1), n + } + _getTransformedByDeletion(t, e) { + const n = El._createAt(this); + if (this.root != t.root) return n; + if ("same" == Y(t.getParentPath(), this.getParentPath())) { + if (t.offset < this.offset) { + if (t.offset + e > this.offset) return null; + n.offset -= e + } + } else if ("prefix" == Y(t.getParentPath(), this.getParentPath())) { + const o = t.path.length - 1; + if (t.offset <= this.path[o]) { + if (t.offset + e > this.path[o]) return null; + n.path[o] -= e + } + } + return n + } + _getTransformedByInsertion(t, e) { + const n = El._createAt(this); + if (this.root != t.root) return n; + if ("same" == Y(t.getParentPath(), this.getParentPath()))(t.offset < this.offset || t.offset == this.offset && "toPrevious" != this.stickiness) && (n.offset += e); + else if ("prefix" == Y(t.getParentPath(), this.getParentPath())) { + const o = t.path.length - 1; + t.offset <= this.path[o] && (n.path[o] += e) + } + return n + } + _getTransformedByMove(t, e, n) { + if (e = e._getTransformedByDeletion(t, n), t.isEqual(e)) return El._createAt(this); + const o = this._getTransformedByDeletion(t, n); + return null === o || t.isEqual(this) && "toNext" == this.stickiness || t.getShiftedBy(n).isEqual(this) && "toPrevious" == this.stickiness ? this._getCombined(t, e) : o._getTransformedByInsertion(e, n) + } + _getCombined(t, e) { + const n = t.path.length - 1, + o = El._createAt(e); + return o.stickiness = this.stickiness, o.offset = o.offset + this.path[n] - t.offset, o.path = [...o.path, ...this.path.slice(n + 1)], o + } + toJSON() { + return { + root: this.root.toJSON(), + path: Array.from(this.path), + stickiness: this.stickiness + } + } + clone() { + return new this.constructor(this.root, this.path, this.stickiness) + } + static _createAt(t, e, n = "toNone") { + if (t instanceof El) return new El(t.root, t.path, t.stickiness); + { + const o = t; + if ("end" == e) e = o.maxOffset; + else { + if ("before" == e) return this._createBefore(o, n); + if ("after" == e) return this._createAfter(o, n); + if (0 !== e && !e) throw new b("model-createpositionat-offset-required", [this, t]) + } + if (!o.is("element") && !o.is("documentFragment")) throw new b("model-position-parent-incorrect", [this, t]); + const i = o.getPath(); + return i.push(e), new this(o.root, i, n) + } + } + static _createAfter(t, e) { + if (!t.parent) throw new b("model-position-after-root", [this, t], { + root: t + }); + return this._createAt(t.parent, t.endOffset, e) + } + static _createBefore(t, e) { + if (!t.parent) throw new b("model-position-before-root", t, { + root: t + }); + return this._createAt(t.parent, t.startOffset, e) + } + static fromJSON(t, e) { + if ("$graveyard" === t.root) { + const n = new El(e.graveyard, t.path); + return n.stickiness = t.stickiness, n + } + if (!e.getRoot(t.root)) throw new b("model-position-fromjson-no-root", e, { + rootName: t.root + }); + return new El(e.getRoot(t.root), t.path, t.stickiness) + } + } + + function Dl(t, e) { + const n = e.getChild(e.offsetToIndex(t.offset)); + return n && n.is("$text") && n.startOffset < t.offset ? n : null + } + + function Sl(t, e, n) { + return null !== n ? null : e.getChild(e.offsetToIndex(t.offset)) + } + + function Tl(t, e, n) { + return null !== n ? null : e.getChild(e.offsetToIndex(t.offset) - 1) + } + + function Bl(t, e, n) { + return n + 1 !== t.path.length && (!!Il(e.path, n + 1) && !! function(t, e) { + let n = t.parent, + o = t.path.length - 1, + i = 0; + for (; o >= e;) { + if (t.path[o] + i !== n.maxOffset) return !1; + i = 1, o--, n = n.parent + } + return !0 + }(t, n + 1)) + } + + function Il(t, e) { + for (; e < t.length;) { + if (0 !== t[e]) return !1; + e++ + } + return !0 + } + El.prototype.is = function(t) { + return "position" === t || "model:position" === t + }; + class Pl extends kl { + constructor(t, e) { + super(), this.start = El._createAt(t), this.end = e ? El._createAt(e) : El._createAt(t), this.start.stickiness = this.isCollapsed ? "toNone" : "toNext", this.end.stickiness = this.isCollapsed ? "toNone" : "toPrevious" + }*[Symbol.iterator]() { + yield* new yl({ + boundaries: this, + ignoreElementEnd: !0 + }) + } + get isCollapsed() { + return this.start.isEqual(this.end) + } + get isFlat() { + return "same" == Y(this.start.getParentPath(), this.end.getParentPath()) + } + get root() { + return this.start.root + } + containsPosition(t) { + return t.isAfter(this.start) && t.isBefore(this.end) + } + containsRange(t, e = !1) { + t.isCollapsed && (e = !1); + const n = this.containsPosition(t.start) || e && this.start.isEqual(t.start), + o = this.containsPosition(t.end) || e && this.end.isEqual(t.end); + return n && o + } + containsItem(t) { + const e = El._createBefore(t); + return this.containsPosition(e) || this.start.isEqual(e) + } + isEqual(t) { + return this.start.isEqual(t.start) && this.end.isEqual(t.end) + } + isIntersecting(t) { + return this.start.isBefore(t.end) && this.end.isAfter(t.start) + } + getDifference(t) { + const e = []; + return this.isIntersecting(t) ? (this.containsPosition(t.start) && e.push(new Pl(this.start, t.start)), this.containsPosition(t.end) && e.push(new Pl(t.end, this.end))) : e.push(new Pl(this.start, this.end)), e + } + getIntersection(t) { + if (this.isIntersecting(t)) { + let e = this.start, + n = this.end; + return this.containsPosition(t.start) && (e = t.start), this.containsPosition(t.end) && (n = t.end), new Pl(e, n) + } + return null + } + getJoined(t, e = !1) { + let n = this.isIntersecting(t); + if (n || (n = this.start.isBefore(t.start) ? e ? this.end.isTouching(t.start) : this.end.isEqual(t.start) : e ? t.end.isTouching(this.start) : t.end.isEqual(this.start)), !n) return null; + let o = this.start, + i = this.end; + return t.start.isBefore(o) && (o = t.start), t.end.isAfter(i) && (i = t.end), new Pl(o, i) + } + getMinimalFlatRanges() { + const t = [], + e = this.start.getCommonPath(this.end).length, + n = El._createAt(this.start); + let o = n.parent; + for (; n.path.length > e + 1;) { + const e = o.maxOffset - n.offset; + 0 !== e && t.push(new Pl(n, n.getShiftedBy(e))), n.path = n.path.slice(0, -1), n.offset++, o = o.parent + } + for (; n.path.length <= this.end.path.length;) { + const e = this.end.path[n.path.length - 1], + o = e - n.offset; + 0 !== o && t.push(new Pl(n, n.getShiftedBy(o))), n.offset = e, n.path.push(0) + } + return t + } + getWalker(t = {}) { + return t.boundaries = this, new yl(t) + }* getItems(t = {}) { + t.boundaries = this, t.ignoreElementEnd = !0; + const e = new yl(t); + for (const t of e) yield t.item + }* getPositions(t = {}) { + t.boundaries = this; + const e = new yl(t); + yield e.position; + for (const t of e) yield t.nextPosition + } + getTransformedByOperation(t) { + switch (t.type) { + case "insert": + return this._getTransformedByInsertOperation(t); + case "move": + case "remove": + case "reinsert": + return this._getTransformedByMoveOperation(t); + case "split": + return [this._getTransformedBySplitOperation(t)]; + case "merge": + return [this._getTransformedByMergeOperation(t)] + } + return [new Pl(this.start, this.end)] + } + getTransformedByOperations(t) { + const e = [new Pl(this.start, this.end)]; + for (const n of t) + for (let t = 0; t < e.length; t++) { + const o = e[t].getTransformedByOperation(n); + e.splice(t, 1, ...o), t += o.length - 1 + } + for (let t = 0; t < e.length; t++) { + const n = e[t]; + for (let o = t + 1; o < e.length; o++) { + const t = e[o]; + (n.containsRange(t) || t.containsRange(n) || n.isEqual(t)) && e.splice(o, 1) + } + } + return e + } + getCommonAncestor() { + return this.start.getCommonAncestor(this.end) + } + getContainedElement() { + if (this.isCollapsed) return null; + const t = this.start.nodeAfter, + e = this.end.nodeBefore; + return t && t.is("element") && t === e ? t : null + } + toJSON() { + return { + start: this.start.toJSON(), + end: this.end.toJSON() + } + } + clone() { + return new this.constructor(this.start, this.end) + } + _getTransformedByInsertOperation(t, e = !1) { + return this._getTransformedByInsertion(t.position, t.howMany, e) + } + _getTransformedByMoveOperation(t, e = !1) { + const n = t.sourcePosition, + o = t.howMany, + i = t.targetPosition; + return this._getTransformedByMove(n, i, o, e) + } + _getTransformedBySplitOperation(t) { + const e = this.start._getTransformedBySplitOperation(t); + let n = this.end._getTransformedBySplitOperation(t); + return this.end.isEqual(t.insertionPosition) && (n = this.end.getShiftedBy(1)), e.root != n.root && (n = this.end.getShiftedBy(-1)), new Pl(e, n) + } + _getTransformedByMergeOperation(t) { + if (this.start.isEqual(t.targetPosition) && this.end.isEqual(t.deletionPosition)) return new Pl(this.start); + let e = this.start._getTransformedByMergeOperation(t), + n = this.end._getTransformedByMergeOperation(t); + return e.root != n.root && (n = this.end.getShiftedBy(-1)), e.isAfter(n) ? (t.sourcePosition.isBefore(t.targetPosition) ? (e = El._createAt(n), e.offset = 0) : (t.deletionPosition.isEqual(e) || (n = t.deletionPosition), e = t.targetPosition), new Pl(e, n)) : new Pl(e, n) + } + _getTransformedByInsertion(t, e, n = !1) { + if (n && this.containsPosition(t)) return [new Pl(this.start, t), new Pl(t.getShiftedBy(e), this.end._getTransformedByInsertion(t, e))]; + { + const n = new Pl(this.start, this.end); + return n.start = n.start._getTransformedByInsertion(t, e), n.end = n.end._getTransformedByInsertion(t, e), [n] + } + } + _getTransformedByMove(t, e, n, o = !1) { + if (this.isCollapsed) { + const o = this.start._getTransformedByMove(t, e, n); + return [new Pl(o)] + } + const i = Pl._createFromPositionAndShift(t, n), + r = e._getTransformedByDeletion(t, n); + if (this.containsPosition(e) && !o && (i.containsPosition(this.start) || i.containsPosition(this.end))) { + const o = this.start._getTransformedByMove(t, e, n), + i = this.end._getTransformedByMove(t, e, n); + return [new Pl(o, i)] + } + let s; + const a = this.getDifference(i); + let l = null; + const c = this.getIntersection(i); + if (1 == a.length ? l = new Pl(a[0].start._getTransformedByDeletion(t, n), a[0].end._getTransformedByDeletion(t, n)) : 2 == a.length && (l = new Pl(this.start, this.end._getTransformedByDeletion(t, n))), s = l ? l._getTransformedByInsertion(r, n, null !== c || o) : [], c) { + const t = new Pl(c.start._getCombined(i.start, r), c.end._getCombined(i.start, r)); + 2 == s.length ? s.splice(1, 0, t) : s.push(t) + } + return s + } + _getTransformedByDeletion(t, e) { + let n = this.start._getTransformedByDeletion(t, e), + o = this.end._getTransformedByDeletion(t, e); + return null == n && null == o ? null : (null == n && (n = t), null == o && (o = t), new Pl(n, o)) + } + static _createFromPositionAndShift(t, e) { + const n = t, + o = t.getShiftedBy(e); + return e > 0 ? new this(n, o) : new this(o, n) + } + static _createIn(t) { + return new this(El._createAt(t, 0), El._createAt(t, t.maxOffset)) + } + static _createOn(t) { + return this._createFromPositionAndShift(El._createBefore(t), t.offsetSize) + } + static _createFromRanges(t) { + if (0 === t.length) throw new b("range-create-from-ranges-empty-array", null); + if (1 == t.length) return t[0].clone(); + const e = t[0]; + t.sort(((t, e) => t.start.isAfter(e.start) ? 1 : -1)); + const n = t.indexOf(e), + o = new this(e.start, e.end); + if (n > 0) + for (let e = n - 1; t[e].end.isEqual(o.start); e++) o.start = El._createAt(t[e].start); + for (let e = n + 1; e < t.length && t[e].start.isEqual(o.end); e++) o.end = El._createAt(t[e].end); + return o + } + static fromJSON(t, e) { + return new this(El.fromJSON(t.start, e), El.fromJSON(t.end, e)) + } + } + Pl.prototype.is = function(t) { + return "range" === t || "model:range" === t + }; + class Rl extends(S()) { + constructor() { + super(), this._modelToViewMapping = new WeakMap, this._viewToModelMapping = new WeakMap, this._viewToModelLengthCallbacks = new Map, this._markerNameToElements = new Map, this._elementToMarkerNames = new Map, this._deferredBindingRemovals = new Map, this._unboundMarkerNames = new Set, this.on("modelToViewPosition", ((t, e) => { + if (e.viewPosition) return; + const n = this._modelToViewMapping.get(e.modelPosition.parent); + if (!n) throw new b("mapping-model-position-view-parent-not-found", this, { + modelPosition: e.modelPosition + }); + e.viewPosition = this.findPositionIn(n, e.modelPosition.offset) + }), { + priority: "low" + }), this.on("viewToModelPosition", ((t, e) => { + if (e.modelPosition) return; + const n = this.findMappedViewAncestor(e.viewPosition), + o = this._viewToModelMapping.get(n), + i = this._toModelOffset(e.viewPosition.parent, e.viewPosition.offset, n); + e.modelPosition = El._createAt(o, i) + }), { + priority: "low" + }) + } + bindElements(t, e) { + this._modelToViewMapping.set(t, e), this._viewToModelMapping.set(e, t) + } + unbindViewElement(t, e = {}) { + const n = this.toModelElement(t); + if (this._elementToMarkerNames.has(t)) + for (const e of this._elementToMarkerNames.get(t)) this._unboundMarkerNames.add(e); + e.defer ? this._deferredBindingRemovals.set(t, t.root) : (this._viewToModelMapping.delete(t), this._modelToViewMapping.get(n) == t && this._modelToViewMapping.delete(n)) + } + unbindModelElement(t) { + const e = this.toViewElement(t); + this._modelToViewMapping.delete(t), this._viewToModelMapping.get(e) == t && this._viewToModelMapping.delete(e) + } + bindElementToMarker(t, e) { + const n = this._markerNameToElements.get(e) || new Set; + n.add(t); + const o = this._elementToMarkerNames.get(t) || new Set; + o.add(e), this._markerNameToElements.set(e, n), this._elementToMarkerNames.set(t, o) + } + unbindElementFromMarkerName(t, e) { + const n = this._markerNameToElements.get(e); + n && (n.delete(t), 0 == n.size && this._markerNameToElements.delete(e)); + const o = this._elementToMarkerNames.get(t); + o && (o.delete(e), 0 == o.size && this._elementToMarkerNames.delete(t)) + } + flushUnboundMarkerNames() { + const t = Array.from(this._unboundMarkerNames); + return this._unboundMarkerNames.clear(), t + } + flushDeferredBindings() { + for (const [t, e] of this._deferredBindingRemovals) t.root == e && this.unbindViewElement(t); + this._deferredBindingRemovals = new Map + } + clearBindings() { + this._modelToViewMapping = new WeakMap, this._viewToModelMapping = new WeakMap, this._markerNameToElements = new Map, this._elementToMarkerNames = new Map, this._unboundMarkerNames = new Set, this._deferredBindingRemovals = new Map + } + toModelElement(t) { + return this._viewToModelMapping.get(t) + } + toViewElement(t) { + return this._modelToViewMapping.get(t) + } + toModelRange(t) { + return new Pl(this.toModelPosition(t.start), this.toModelPosition(t.end)) + } + toViewRange(t) { + return new ms(this.toViewPosition(t.start), this.toViewPosition(t.end)) + } + toModelPosition(t) { + const e = { + viewPosition: t, + mapper: this + }; + return this.fire("viewToModelPosition", e), e.modelPosition + } + toViewPosition(t, e = {}) { + const n = { + modelPosition: t, + mapper: this, + isPhantom: e.isPhantom + }; + return this.fire("modelToViewPosition", n), n.viewPosition + } + markerNameToElements(t) { + const e = this._markerNameToElements.get(t); + if (!e) return null; + const n = new Set; + for (const t of e) + if (t.is("attributeElement")) + for (const e of t.getElementsWithSameId()) n.add(e); + else n.add(t); + return n + } + registerViewToModelLength(t, e) { + this._viewToModelLengthCallbacks.set(t, e) + } + findMappedViewAncestor(t) { + let e = t.parent; + for (; !this._viewToModelMapping.has(e);) e = e.parent; + return e + } + _toModelOffset(t, e, n) { + if (n != t) { + return this._toModelOffset(t.parent, t.index, n) + this._toModelOffset(t, e, t) + } + if (t.is("$text")) return e; + let o = 0; + for (let n = 0; n < e; n++) o += this.getModelLength(t.getChild(n)); + return o + } + getModelLength(t) { + if (this._viewToModelLengthCallbacks.get(t.name)) { + return this._viewToModelLengthCallbacks.get(t.name)(t) + } + if (this._viewToModelMapping.has(t)) return 1; + if (t.is("$text")) return t.data.length; + if (t.is("uiElement")) return 0; + { + let e = 0; + for (const n of t.getChildren()) e += this.getModelLength(n); + return e + } + } + findPositionIn(t, e) { + let n, o = 0, + i = 0, + r = 0; + if (t.is("$text")) return new gs(t, e); + for (; i < e;) n = t.getChild(r), o = this.getModelLength(n), i += o, r++; + return i == e ? this._moveViewPositionToTextNode(new gs(t, r)) : this.findPositionIn(n, e - (i - o)) + } + _moveViewPositionToTextNode(t) { + const e = t.nodeBefore, + n = t.nodeAfter; + return e instanceof or ? new gs(e, e.data.length) : n instanceof or ? new gs(n, 0) : t + } + } + class zl { + constructor() { + this._consumable = new Map, this._textProxyRegistry = new Map + } + add(t, e) { + e = Vl(e), t instanceof _l && (t = this._getSymbolForTextProxy(t)), this._consumable.has(t) || this._consumable.set(t, new Map), this._consumable.get(t).set(e, !0) + } + consume(t, e) { + return e = Vl(e), t instanceof _l && (t = this._getSymbolForTextProxy(t)), !!this.test(t, e) && (this._consumable.get(t).set(e, !1), !0) + } + test(t, e) { + e = Vl(e), t instanceof _l && (t = this._getSymbolForTextProxy(t)); + const n = this._consumable.get(t); + if (void 0 === n) return null; + const o = n.get(e); + return void 0 === o ? null : o + } + revert(t, e) { + e = Vl(e), t instanceof _l && (t = this._getSymbolForTextProxy(t)); + const n = this.test(t, e); + return !1 === n ? (this._consumable.get(t).set(e, !0), !0) : !0 !== n && null + } + verifyAllConsumed(t) { + const e = []; + for (const [n, o] of this._consumable) + for (const [i, r] of o) { + const o = i.split(":")[0]; + r && t == o && e.push({ + event: i, + item: n.name || n.description + }) + } + if (e.length) throw new b("conversion-model-consumable-not-consumed", null, { + items: e + }) + } + _getSymbolForTextProxy(t) { + let e = null; + const n = this._textProxyRegistry.get(t.startOffset); + if (n) { + const o = n.get(t.endOffset); + o && (e = o.get(t.parent)) + } + return e || (e = this._addSymbolForTextProxy(t)), e + } + _addSymbolForTextProxy(t) { + const e = t.startOffset, + n = t.endOffset, + o = t.parent, + i = Symbol("$textProxy:" + t.data); + let r, s; + return r = this._textProxyRegistry.get(e), r || (r = new Map, this._textProxyRegistry.set(e, r)), s = r.get(n), s || (s = new Map, r.set(n, s)), s.set(o, i), i + } + } + + function Vl(t) { + const e = t.split(":"); + return "insert" == e[0] ? e[0] : "addMarker" == e[0] || "removeMarker" == e[0] ? t : e.length > 1 ? e[0] + ":" + e[1] : e[0] + } + var Ol = Object.defineProperty, + Fl = Object.defineProperties, + Ml = Object.getOwnPropertyDescriptors, + Nl = Object.getOwnPropertySymbols, + Ll = Object.prototype.hasOwnProperty, + Hl = Object.prototype.propertyIsEnumerable, + jl = (t, e, n) => e in t ? Ol(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + ql = (t, e) => { + for (var n in e || (e = {})) Ll.call(e, n) && jl(t, n, e[n]); + if (Nl) + for (var n of Nl(e)) Hl.call(e, n) && jl(t, n, e[n]); + return t + }, + Wl = (t, e) => Fl(t, Ml(e)); + class Ul extends(S()) { + constructor(t) { + super(), this._conversionApi = ql({ + dispatcher: this + }, t), this._firedEventsMap = new WeakMap + } + convertChanges(t, e, n) { + const o = this._createConversionApi(n, t.getRefreshedItems()); + for (const e of t.getMarkersToRemove()) this._convertMarkerRemove(e.name, e.range, o); + const i = this._reduceChanges(t.getChanges()); + for (const t of i) "insert" === t.type ? this._convertInsert(Pl._createFromPositionAndShift(t.position, t.length), o) : "reinsert" === t.type ? this._convertReinsert(Pl._createFromPositionAndShift(t.position, t.length), o) : "remove" === t.type ? this._convertRemove(t.position, t.length, t.name, o) : this._convertAttribute(t.range, t.attributeKey, t.attributeOldValue, t.attributeNewValue, o); + for (const t of o.mapper.flushUnboundMarkerNames()) { + const n = e.get(t).getRange(); + this._convertMarkerRemove(t, n, o), this._convertMarkerAdd(t, n, o) + } + for (const e of t.getMarkersToAdd()) this._convertMarkerAdd(e.name, e.range, o); + o.mapper.flushDeferredBindings(), o.consumable.verifyAllConsumed("insert") + } + convert(t, e, n, o = {}) { + const i = this._createConversionApi(n, void 0, o); + this._convertInsert(t, i); + for (const [t, n] of e) this._convertMarkerAdd(t, n, i); + i.consumable.verifyAllConsumed("insert") + } + convertSelection(t, e, n) { + const o = Array.from(e.getMarkersAtPosition(t.getFirstPosition())), + i = this._createConversionApi(n); + if (this._addConsumablesForSelection(i.consumable, t, o), this.fire("selection", { + selection: t + }, i), t.isCollapsed) { + for (const e of o) { + const n = e.getRange(); + if (!$l(t.getFirstPosition(), e, i.mapper)) continue; + const o = { + item: t, + markerName: e.name, + markerRange: n + }; + i.consumable.test(t, "addMarker:" + e.name) && this.fire(`addMarker:${e.name}`, o, i) + } + for (const e of t.getAttributeKeys()) { + const n = { + item: t, + range: t.getFirstRange(), + attributeKey: e, + attributeOldValue: null, + attributeNewValue: t.getAttribute(e) + }; + i.consumable.test(t, "attribute:" + n.attributeKey) && this.fire(`attribute:${n.attributeKey}:$text`, n, i) + } + } + } + _convertInsert(t, e, n = {}) { + n.doNotAddConsumables || this._addConsumablesForInsert(e.consumable, Array.from(t)); + for (const n of Array.from(t.getWalker({ + shallow: !0 + })).map(Gl)) this._testAndFire("insert", n, e) + } + _convertRemove(t, e, n, o) { + this.fire(`remove:${n}`, { + position: t, + length: e + }, o) + } + _convertAttribute(t, e, n, o, i) { + this._addConsumablesForRange(i.consumable, t, `attribute:${e}`); + for (const r of t) { + const t = { + item: r.item, + range: Pl._createFromPositionAndShift(r.previousPosition, r.length), + attributeKey: e, + attributeOldValue: n, + attributeNewValue: o + }; + this._testAndFire(`attribute:${e}`, t, i) + } + } + _convertReinsert(t, e) { + const n = Array.from(t.getWalker({ + shallow: !0 + })); + this._addConsumablesForInsert(e.consumable, n); + for (const t of n.map(Gl)) this._testAndFire("insert", Wl(ql({}, t), { + reconversion: !0 + }), e) + } + _convertMarkerAdd(t, e, n) { + if ("$graveyard" == e.root.rootName) return; + const o = `addMarker:${t}`; + if (n.consumable.add(e, o), this.fire(o, { + markerName: t, + markerRange: e + }, n), n.consumable.consume(e, o)) { + this._addConsumablesForRange(n.consumable, e, o); + for (const i of e.getItems()) { + if (!n.consumable.test(i, o)) continue; + const r = { + item: i, + range: Pl._createOn(i), + markerName: t, + markerRange: e + }; + this.fire(o, r, n) + } + } + } + _convertMarkerRemove(t, e, n) { + "$graveyard" != e.root.rootName && this.fire(`removeMarker:${t}`, { + markerName: t, + markerRange: e + }, n) + } + _reduceChanges(t) { + const e = { + changes: t + }; + return this.fire("reduceChanges", e), e.changes + } + _addConsumablesForInsert(t, e) { + for (const n of e) { + const e = n.item; + if (null === t.test(e, "insert")) { + t.add(e, "insert"); + for (const n of e.getAttributeKeys()) t.add(e, "attribute:" + n) + } + } + return t + } + _addConsumablesForRange(t, e, n) { + for (const o of e.getItems()) t.add(o, n); + return t + } + _addConsumablesForSelection(t, e, n) { + t.add(e, "selection"); + for (const o of n) t.add(e, "addMarker:" + o.name); + for (const n of e.getAttributeKeys()) t.add(e, "attribute:" + n); + return t + } + _testAndFire(t, e, n) { + const o = function(t, e) { + const n = e.item.is("element") ? e.item.name : "$text"; + return `${t}:${n}` + }(t, e), + i = e.item.is("$textProxy") ? n.consumable._getSymbolForTextProxy(e.item) : e.item, + r = this._firedEventsMap.get(n), + s = r.get(i); + if (s) { + if (s.has(o)) return; + s.add(o) + } else r.set(i, new Set([o])); + this.fire(o, e, n) + } + _testAndFireAddAttributes(t, e) { + const n = { + item: t, + range: Pl._createOn(t) + }; + for (const t of n.item.getAttributeKeys()) n.attributeKey = t, n.attributeOldValue = null, n.attributeNewValue = n.item.getAttribute(t), this._testAndFire(`attribute:${t}`, n, e) + } + _createConversionApi(t, e = new Set, n = {}) { + const o = Wl(ql({}, this._conversionApi), { + consumable: new zl, + writer: t, + options: n, + convertItem: t => this._convertInsert(Pl._createOn(t), o), + convertChildren: t => this._convertInsert(Pl._createIn(t), o, { + doNotAddConsumables: !0 + }), + convertAttributes: t => this._testAndFireAddAttributes(t, o), + canReuseView: t => !e.has(o.mapper.toModelElement(t)) + }); + return this._firedEventsMap.set(o, new Map), o + } + } + + function $l(t, e, n) { + const o = e.getRange(), + i = Array.from(t.getAncestors()); + i.shift(), i.reverse(); + return !i.some((t => { + if (o.containsItem(t)) { + return !!n.toViewElement(t).getCustomProperty("addHighlight") + } + })) + } + + function Gl(t) { + return { + item: t.item, + range: Pl._createFromPositionAndShift(t.previousPosition, t.length) + } + } + class Kl extends(S(kl)) { + constructor(...t) { + super(), this._lastRangeBackward = !1, this._attrs = new Map, this._ranges = [], t.length && this.setTo(...t) + } + get anchor() { + if (this._ranges.length > 0) { + const t = this._ranges[this._ranges.length - 1]; + return this._lastRangeBackward ? t.end : t.start + } + return null + } + get focus() { + if (this._ranges.length > 0) { + const t = this._ranges[this._ranges.length - 1]; + return this._lastRangeBackward ? t.start : t.end + } + return null + } + get isCollapsed() { + return 1 === this._ranges.length && this._ranges[0].isCollapsed + } + get rangeCount() { + return this._ranges.length + } + get isBackward() { + return !this.isCollapsed && this._lastRangeBackward + } + isEqual(t) { + if (this.rangeCount != t.rangeCount) return !1; + if (0 === this.rangeCount) return !0; + if (!this.anchor.isEqual(t.anchor) || !this.focus.isEqual(t.focus)) return !1; + for (const e of this._ranges) { + let n = !1; + for (const o of t._ranges) + if (e.isEqual(o)) { + n = !0; + break + } if (!n) return !1 + } + return !0 + }* getRanges() { + for (const t of this._ranges) yield new Pl(t.start, t.end) + } + getFirstRange() { + let t = null; + for (const e of this._ranges) t && !e.start.isBefore(t.start) || (t = e); + return t ? new Pl(t.start, t.end) : null + } + getLastRange() { + let t = null; + for (const e of this._ranges) t && !e.end.isAfter(t.end) || (t = e); + return t ? new Pl(t.start, t.end) : null + } + getFirstPosition() { + const t = this.getFirstRange(); + return t ? t.start.clone() : null + } + getLastPosition() { + const t = this.getLastRange(); + return t ? t.end.clone() : null + } + setTo(...t) { + let [e, n, o] = t; + if ("object" == typeof n && (o = n, n = void 0), null === e) this._setRanges([]); + else if (e instanceof Kl) this._setRanges(e.getRanges(), e.isBackward); + else if (e && "function" == typeof e.getRanges) this._setRanges(e.getRanges(), e.isBackward); + else if (e instanceof Pl) this._setRanges([e], !!o && !!o.backward); + else if (e instanceof El) this._setRanges([new Pl(e)]); + else if (e instanceof wl) { + const t = !!o && !!o.backward; + let i; + if ("in" == n) i = Pl._createIn(e); + else if ("on" == n) i = Pl._createOn(e); + else { + if (void 0 === n) throw new b("model-selection-setto-required-second-parameter", [this, e]); + i = new Pl(El._createAt(e, n)) + } + this._setRanges([i], t) + } else { + if (!Q(e)) throw new b("model-selection-setto-not-selectable", [this, e]); + this._setRanges(e, o && !!o.backward) + } + } + _setRanges(t, e = !1) { + const n = Array.from(t), + o = n.some((e => { + if (!(e instanceof Pl)) throw new b("model-selection-set-ranges-not-range", [this, t]); + return this._ranges.every((t => !t.isEqual(e))) + })); + (n.length !== this._ranges.length || o) && (this._replaceAllRanges(n), this._lastRangeBackward = !!e, this.fire("change:range", { + directChange: !0 + })) + } + setFocus(t, e) { + if (null === this.anchor) throw new b("model-selection-setfocus-no-ranges", [this, t]); + const n = El._createAt(t, e); + if ("same" == n.compareWith(this.focus)) return; + const o = this.anchor; + this._ranges.length && this._popRange(), "before" == n.compareWith(o) ? (this._pushRange(new Pl(n, o)), this._lastRangeBackward = !0) : (this._pushRange(new Pl(o, n)), this._lastRangeBackward = !1), this.fire("change:range", { + directChange: !0 + }) + } + getAttribute(t) { + return this._attrs.get(t) + } + getAttributes() { + return this._attrs.entries() + } + getAttributeKeys() { + return this._attrs.keys() + } + hasAttribute(t) { + return this._attrs.has(t) + } + removeAttribute(t) { + this.hasAttribute(t) && (this._attrs.delete(t), this.fire("change:attribute", { + attributeKeys: [t], + directChange: !0 + })) + } + setAttribute(t, e) { + this.getAttribute(t) !== e && (this._attrs.set(t, e), this.fire("change:attribute", { + attributeKeys: [t], + directChange: !0 + })) + } + getSelectedElement() { + return 1 !== this.rangeCount ? null : this.getFirstRange().getContainedElement() + }* getSelectedBlocks() { + const t = new WeakSet; + for (const e of this.getRanges()) { + const n = Yl(e.start, t); + Xl(n, e) && (yield n); + for (const n of e.getWalker()) { + const o = n.item; + "elementEnd" == n.type && Jl(o, t, e) && (yield o) + } + const o = Yl(e.end, t); + tc(o, e) && (yield o) + } + } + containsEntireContent(t = this.anchor.root) { + const e = El._createAt(t, 0), + n = El._createAt(t, "end"); + return e.isTouching(this.getFirstPosition()) && n.isTouching(this.getLastPosition()) + } + _pushRange(t) { + this._checkRange(t), this._ranges.push(new Pl(t.start, t.end)) + } + _checkRange(t) { + for (let e = 0; e < this._ranges.length; e++) + if (t.isIntersecting(this._ranges[e])) throw new b("model-selection-range-intersects", [this, t], { + addedRange: t, + intersectingRange: this._ranges[e] + }) + } + _replaceAllRanges(t) { + this._removeAllRanges(); + for (const e of t) this._pushRange(e) + } + _removeAllRanges() { + for (; this._ranges.length > 0;) this._popRange() + } + _popRange() { + this._ranges.pop() + } + } + + function Zl(t, e) { + return !e.has(t) && (e.add(t), t.root.document.model.schema.isBlock(t) && !!t.parent) + } + + function Jl(t, e, n) { + return Zl(t, e) && Ql(t, n) + } + + function Yl(t, e) { + const n = t.parent.root.document.model.schema, + o = t.parent.getAncestors({ + parentFirst: !0, + includeSelf: !0 + }); + let i = !1; + const r = o.find((t => !i && (i = n.isLimit(t), !i && Zl(t, e)))); + return o.forEach((t => e.add(t))), r + } + + function Ql(t, e) { + const n = function(t) { + const e = t.root.document.model.schema; + let n = t.parent; + for (; n;) { + if (e.isBlock(n)) return n; + n = n.parent + } + }(t); + if (!n) return !0; + return !e.containsRange(Pl._createOn(n), !0) + } + + function Xl(t, e) { + return !!t && (!(!e.isCollapsed && !t.isEmpty) || !e.start.isTouching(El._createAt(t, t.maxOffset)) && Ql(t, e)) + } + + function tc(t, e) { + return !!t && (!(!e.isCollapsed && !t.isEmpty) || !e.end.isTouching(El._createAt(t, 0)) && Ql(t, e)) + } + Kl.prototype.is = function(t) { + return "selection" === t || "model:selection" === t + }; + class ec extends(S(Pl)) { + constructor(t, e) { + super(t, e), nc.call(this) + } + detach() { + this.stopListening() + } + toRange() { + return new Pl(this.start, this.end) + } + static fromRange(t) { + return new ec(t.start, t.end) + } + } + + function nc() { + this.listenTo(this.root.document.model, "applyOperation", ((t, e) => { + const n = e[0]; + n.isDocumentOperation && oc.call(this, n) + }), { + priority: "low" + }) + } + + function oc(t) { + const e = this.getTransformedByOperation(t), + n = Pl._createFromRanges(e), + o = !n.isEqual(this), + i = function(t, e) { + switch (e.type) { + case "insert": + return t.containsPosition(e.position); + case "move": + case "remove": + case "reinsert": + case "merge": + return t.containsPosition(e.sourcePosition) || t.start.isEqual(e.sourcePosition) || t.containsPosition(e.targetPosition); + case "split": + return t.containsPosition(e.splitPosition) || t.containsPosition(e.insertionPosition) + } + return !1 + }(this, t); + let r = null; + if (o) { + "$graveyard" == n.root.rootName && (r = "remove" == t.type ? t.sourcePosition : t.deletionPosition); + const e = this.toRange(); + this.start = n.start, this.end = n.end, this.fire("change:range", e, { + deletionPosition: r + }) + } else i && this.fire("change:content", this.toRange(), { + deletionPosition: r + }) + } + ec.prototype.is = function(t) { + return "liveRange" === t || "model:liveRange" === t || "range" == t || "model:range" === t + }; + const ic = "selection:"; + class rc extends(S(kl)) { + constructor(t) { + super(), this._selection = new sc(t), this._selection.delegate("change:range").to(this), this._selection.delegate("change:attribute").to(this), this._selection.delegate("change:marker").to(this) + } + get isCollapsed() { + return this._selection.isCollapsed + } + get anchor() { + return this._selection.anchor + } + get focus() { + return this._selection.focus + } + get rangeCount() { + return this._selection.rangeCount + } + get hasOwnRange() { + return this._selection.hasOwnRange + } + get isBackward() { + return this._selection.isBackward + } + get isGravityOverridden() { + return this._selection.isGravityOverridden + } + get markers() { + return this._selection.markers + } + get _ranges() { + return this._selection._ranges + } + getRanges() { + return this._selection.getRanges() + } + getFirstPosition() { + return this._selection.getFirstPosition() + } + getLastPosition() { + return this._selection.getLastPosition() + } + getFirstRange() { + return this._selection.getFirstRange() + } + getLastRange() { + return this._selection.getLastRange() + } + getSelectedBlocks() { + return this._selection.getSelectedBlocks() + } + getSelectedElement() { + return this._selection.getSelectedElement() + } + containsEntireContent(t) { + return this._selection.containsEntireContent(t) + } + destroy() { + this._selection.destroy() + } + getAttributeKeys() { + return this._selection.getAttributeKeys() + } + getAttributes() { + return this._selection.getAttributes() + } + getAttribute(t) { + return this._selection.getAttribute(t) + } + hasAttribute(t) { + return this._selection.hasAttribute(t) + } + refresh() { + this._selection.updateMarkers(), this._selection._updateAttributes(!1) + } + observeMarkers(t) { + this._selection.observeMarkers(t) + } + _setFocus(t, e) { + this._selection.setFocus(t, e) + } + _setTo(...t) { + this._selection.setTo(...t) + } + _setAttribute(t, e) { + this._selection.setAttribute(t, e) + } + _removeAttribute(t) { + this._selection.removeAttribute(t) + } + _getStoredAttributes() { + return this._selection.getStoredAttributes() + } + _overrideGravity() { + return this._selection.overrideGravity() + } + _restoreGravity(t) { + this._selection.restoreGravity(t) + } + static _getStoreAttributeKey(t) { + return ic + t + } + static _isStoreAttributeKey(t) { + return t.startsWith(ic) + } + } + rc.prototype.is = function(t) { + return "selection" === t || "model:selection" == t || "documentSelection" == t || "model:documentSelection" == t + }; + class sc extends Kl { + constructor(t) { + super(), this.markers = new xi({ + idProperty: "name" + }), this._attributePriority = new Map, this._selectionRestorePosition = null, this._hasChangedRange = !1, this._overriddenGravityRegister = new Set, this._observedMarkers = new Set, this._model = t.model, this._document = t, this.listenTo(this._model, "applyOperation", ((t, e) => { + const n = e[0]; + n.isDocumentOperation && "marker" != n.type && "rename" != n.type && "noop" != n.type && (0 == this._ranges.length && this._selectionRestorePosition && this._fixGraveyardSelection(this._selectionRestorePosition), this._selectionRestorePosition = null, this._hasChangedRange && (this._hasChangedRange = !1, this.fire("change:range", { + directChange: !1 + }))) + }), { + priority: "lowest" + }), this.on("change:range", (() => { + this._validateSelectionRanges(this.getRanges()) + })), this.listenTo(this._model.markers, "update", ((t, e, n, o) => { + this._updateMarker(e, o) + })), this.listenTo(this._document, "change", ((t, e) => { + ! function(t, e) { + const n = t.document.differ; + for (const o of n.getChanges()) { + if ("insert" != o.type) continue; + const n = o.position.parent; + o.length === n.maxOffset && t.enqueueChange(e, (t => { + const e = Array.from(n.getAttributeKeys()).filter((t => t.startsWith(ic))); + for (const o of e) t.removeAttribute(o, n) + })) + } + }(this._model, e) + })) + } + get isCollapsed() { + return 0 === this._ranges.length ? this._document._getDefaultRange().isCollapsed : super.isCollapsed + } + get anchor() { + return super.anchor || this._document._getDefaultRange().start + } + get focus() { + return super.focus || this._document._getDefaultRange().end + } + get rangeCount() { + return this._ranges.length ? this._ranges.length : 1 + } + get hasOwnRange() { + return this._ranges.length > 0 + } + get isGravityOverridden() { + return !!this._overriddenGravityRegister.size + } + destroy() { + for (let t = 0; t < this._ranges.length; t++) this._ranges[t].detach(); + this.stopListening() + }* getRanges() { + this._ranges.length ? yield* super.getRanges(): yield this._document._getDefaultRange() + } + getFirstRange() { + return super.getFirstRange() || this._document._getDefaultRange() + } + getLastRange() { + return super.getLastRange() || this._document._getDefaultRange() + } + setTo(...t) { + super.setTo(...t), this._updateAttributes(!0), this.updateMarkers() + } + setFocus(t, e) { + super.setFocus(t, e), this._updateAttributes(!0), this.updateMarkers() + } + setAttribute(t, e) { + if (this._setAttribute(t, e)) { + const e = [t]; + this.fire("change:attribute", { + attributeKeys: e, + directChange: !0 + }) + } + } + removeAttribute(t) { + if (this._removeAttribute(t)) { + const e = [t]; + this.fire("change:attribute", { + attributeKeys: e, + directChange: !0 + }) + } + } + overrideGravity() { + const t = g(); + return this._overriddenGravityRegister.add(t), 1 === this._overriddenGravityRegister.size && this._updateAttributes(!0), t + } + restoreGravity(t) { + if (!this._overriddenGravityRegister.has(t)) throw new b("document-selection-gravity-wrong-restore", this, { + uid: t + }); + this._overriddenGravityRegister.delete(t), this.isGravityOverridden || this._updateAttributes(!0) + } + observeMarkers(t) { + this._observedMarkers.add(t), this.updateMarkers() + } + _replaceAllRanges(t) { + this._validateSelectionRanges(t), super._replaceAllRanges(t) + } + _popRange() { + this._ranges.pop().detach() + } + _pushRange(t) { + const e = this._prepareRange(t); + e && this._ranges.push(e) + } + _validateSelectionRanges(t) { + for (const e of t) + if (!this._document._validateSelectionRange(e)) throw new b("document-selection-wrong-position", this, { + range: e + }) + } + _prepareRange(t) { + if (this._checkRange(t), t.root == this._document.graveyard) return; + const e = ec.fromRange(t); + return e.on("change:range", ((t, n, o) => { + if (this._hasChangedRange = !0, e.root == this._document.graveyard) { + this._selectionRestorePosition = o.deletionPosition; + const t = this._ranges.indexOf(e); + this._ranges.splice(t, 1), e.detach() + } + })), e + } + updateMarkers() { + if (!this._observedMarkers.size) return; + const t = []; + let e = !1; + for (const e of this._model.markers) { + const n = e.name.split(":", 1)[0]; + if (!this._observedMarkers.has(n)) continue; + const o = e.getRange(); + for (const n of this.getRanges()) o.containsRange(n, !n.isCollapsed) && t.push(e) + } + const n = Array.from(this.markers); + for (const n of t) this.markers.has(n) || (this.markers.add(n), e = !0); + for (const n of Array.from(this.markers)) t.includes(n) || (this.markers.remove(n), e = !0); + e && this.fire("change:marker", { + oldMarkers: n, + directChange: !1 + }) + } + _updateMarker(t, e) { + const n = t.name.split(":", 1)[0]; + if (!this._observedMarkers.has(n)) return; + let o = !1; + const i = Array.from(this.markers), + r = this.markers.has(t); + if (e) { + let n = !1; + for (const t of this.getRanges()) + if (e.containsRange(t, !t.isCollapsed)) { + n = !0; + break + } n && !r ? (this.markers.add(t), o = !0) : !n && r && (this.markers.remove(t), o = !0) + } else r && (this.markers.remove(t), o = !0); + o && this.fire("change:marker", { + oldMarkers: i, + directChange: !1 + }) + } + _updateAttributes(t) { + const e = Ti(this._getSurroundingAttributes()), + n = Ti(this.getAttributes()); + if (t) this._attributePriority = new Map, this._attrs = new Map; + else + for (const [t, e] of this._attributePriority) "low" == e && (this._attrs.delete(t), this._attributePriority.delete(t)); + this._setAttributesTo(e); + const o = []; + for (const [t, e] of this.getAttributes()) n.has(t) && n.get(t) === e || o.push(t); + for (const [t] of n) this.hasAttribute(t) || o.push(t); + o.length > 0 && this.fire("change:attribute", { + attributeKeys: o, + directChange: !1 + }) + } + _setAttribute(t, e, n = !0) { + const o = n ? "normal" : "low"; + if ("low" == o && "normal" == this._attributePriority.get(t)) return !1; + return super.getAttribute(t) !== e && (this._attrs.set(t, e), this._attributePriority.set(t, o), !0) + } + _removeAttribute(t, e = !0) { + const n = e ? "normal" : "low"; + return ("low" != n || "normal" != this._attributePriority.get(t)) && (this._attributePriority.set(t, n), !!super.hasAttribute(t) && (this._attrs.delete(t), !0)) + } + _setAttributesTo(t) { + const e = new Set; + for (const [e, n] of this.getAttributes()) t.get(e) !== n && this._removeAttribute(e, !1); + for (const [n, o] of t) { + this._setAttribute(n, o, !1) && e.add(n) + } + return e + }* getStoredAttributes() { + const t = this.getFirstPosition().parent; + if (this.isCollapsed && t.isEmpty) + for (const e of t.getAttributeKeys()) + if (e.startsWith(ic)) { + const n = e.substr(ic.length); + yield [n, t.getAttribute(e)] + } + } + _getSurroundingAttributes() { + const t = this.getFirstPosition(), + e = this._model.schema; + let n = null; + if (this.isCollapsed) { + const o = t.textNode ? t.textNode : t.nodeBefore, + i = t.textNode ? t.textNode : t.nodeAfter; + if (this.isGravityOverridden || (n = ac(o, e)), n || (n = ac(i, e)), !this.isGravityOverridden && !n) { + let t = o; + for (; t && !n;) t = t.previousSibling, n = ac(t, e) + } + if (!n) { + let t = i; + for (; t && !n;) t = t.nextSibling, n = ac(t, e) + } + n || (n = this.getStoredAttributes()) + } else { + const t = this.getFirstRange(); + for (const o of t) { + if (o.item.is("element") && e.isObject(o.item)) break; + if ("text" == o.type) { + n = o.item.getAttributes(); + break + } + } + } + return n + } + _fixGraveyardSelection(t) { + const e = this._model.schema.getNearestSelectionRange(t); + e && this._pushRange(e) + } + } + + function ac(t, e) { + if (!t) return null; + if (t instanceof _l || t instanceof Cl) return t.getAttributes(); + if (!e.isInline(t)) return null; + if (!e.isObject(t)) return []; + const n = []; + for (const [o, i] of t.getAttributes()) e.checkAttribute("$text", o) && n.push([o, i]); + return n + } + class lc { + constructor(t) { + this._dispatchers = t + } + add(t) { + for (const e of this._dispatchers) t(e); + return this + } + } + class cc extends lc { + elementToElement(t) { + return this.add(function(t) { + const e = uc(t.model), + n = gc(t.view, "container"); + e.attributes.length && (e.children = !0); + return o => { + o.on(`insert:${e.name}`, function(t, e = Cc) { + return (n, o, i) => { + if (!e(o.item, i.consumable, { + preflight: !0 + })) return; + const r = t(o.item, i, o); + if (!r) return; + e(o.item, i.consumable); + const s = i.mapper.toViewPosition(o.range.start); + i.mapper.bindElements(o.item, r), i.writer.insert(s, r), i.convertAttributes(o.item), wc(r, o.item.getChildren(), i, { + reconversion: o.reconversion + }) + } + }(n, kc(e)), { + priority: t.converterPriority || "normal" + }), (e.children || e.attributes.length) && o.on("reduceChanges", bc(e), { + priority: "low" + }) + } + }(t)) + } + elementToStructure(t) { + return this.add(function(t) { + const e = uc(t.model), + n = gc(t.view, "container"); + return e.children = !0, o => { + if (o._conversionApi.schema.checkChild(e.name, "$text")) throw new b("conversion-element-to-structure-disallowed-text", o, { + elementName: e.name + }); + var i, r; + o.on(`insert:${e.name}`, (i = n, r = kc(e), (t, e, n) => { + if (!r(e.item, n.consumable, { + preflight: !0 + })) return; + const o = new Map; + n.writer._registerSlotFactory(function(t, e, n) { + return (o, i) => { + const r = o.createContainerElement("$slot"); + let s = null; + if ("children" === i) s = Array.from(t.getChildren()); + else { + if ("function" != typeof i) throw new b("conversion-slot-mode-unknown", n.dispatcher, { + modeOrFilter: i + }); + s = Array.from(t.getChildren()).filter((t => i(t))) + } + return e.set(r, s), r + } + }(e.item, o, n)); + const s = i(e.item, n, e); + if (n.writer._clearSlotFactory(), !s) return; + ! function(t, e, n) { + const o = Array.from(e.values()).flat(), + i = new Set(o); + if (i.size != o.length) throw new b("conversion-slot-filter-overlap", n.dispatcher, { + element: t + }); + if (i.size != t.childCount) throw new b("conversion-slot-filter-incomplete", n.dispatcher, { + element: t + }) + }(e.item, o, n), r(e.item, n.consumable); + const a = n.mapper.toViewPosition(e.range.start); + n.mapper.bindElements(e.item, s), n.writer.insert(a, s), n.convertAttributes(e.item), + function(t, e, n, o) { + n.mapper.on("modelToViewPosition", s, { + priority: "highest" + }); + let i = null, + r = null; + for ([i, r] of e) wc(t, r, n, o), n.writer.move(n.writer.createRangeIn(i), n.writer.createPositionBefore(i)), n.writer.remove(i); + + function s(t, e) { + const n = e.modelPosition.nodeAfter, + o = r.indexOf(n); + o < 0 || (e.viewPosition = e.mapper.findPositionIn(i, o)) + } + n.mapper.off("modelToViewPosition", s) + }(s, o, n, { + reconversion: e.reconversion + }) + }), { + priority: t.converterPriority || "normal" + }), o.on("reduceChanges", bc(e), { + priority: "low" + }) + } + }(t)) + } + attributeToElement(t) { + return this.add(function(t) { + t = fl(t); + let e = t.model; + "string" == typeof e && (e = { + key: e + }); + let n = `attribute:${e.key}`; + e.name && (n += ":" + e.name); + if (e.values) + for (const n of e.values) t.view[n] = gc(t.view[n], "attribute"); + else t.view = gc(t.view, "attribute"); + const o = mc(t); + return e => { + e.on(n, function(t) { + return (e, n, o) => { + if (!o.consumable.test(n.item, e.name)) return; + const i = t(n.attributeOldValue, o, n), + r = t(n.attributeNewValue, o, n); + if (!i && !r) return; + o.consumable.consume(n.item, e.name); + const s = o.writer, + a = s.document.selection; + if (n.item instanceof Kl || n.item instanceof rc) s.wrap(a.getFirstRange(), r); + else { + let t = o.mapper.toViewRange(n.range); + null !== n.attributeOldValue && i && (t = s.unwrap(t, i)), null !== n.attributeNewValue && r && s.wrap(t, r) + } + } + }(o), { + priority: t.converterPriority || "normal" + }) + } + }(t)) + } + attributeToAttribute(t) { + return this.add(function(t) { + t = fl(t); + let e = t.model; + "string" == typeof e && (e = { + key: e + }); + let n = `attribute:${e.key}`; + e.name && (n += ":" + e.name); + if (e.values) + for (const n of e.values) t.view[n] = pc(t.view[n]); + else t.view = pc(t.view); + const o = mc(t); + return e => { + var i; + e.on(n, (i = o, (t, e, n) => { + if (!n.consumable.test(e.item, t.name)) return; + const o = i(e.attributeOldValue, n, e), + r = i(e.attributeNewValue, n, e); + if (!o && !r) return; + n.consumable.consume(e.item, t.name); + const s = n.mapper.toViewElement(e.item), + a = n.writer; + if (!s) throw new b("conversion-attribute-to-attribute-on-text", n.dispatcher, e); + if (null !== e.attributeOldValue && o) + if ("class" == o.key) { + const t = Ai(o.value); + for (const e of t) a.removeClass(e, s) + } else if ("style" == o.key) { + const t = Object.keys(o.value); + for (const e of t) a.removeStyle(e, s) + } else a.removeAttribute(o.key, s); + if (null !== e.attributeNewValue && r) + if ("class" == r.key) { + const t = Ai(r.value); + for (const e of t) a.addClass(e, s) + } else if ("style" == r.key) { + const t = Object.keys(r.value); + for (const e of t) a.setStyle(e, r.value[e], s) + } else a.setAttribute(r.key, r.value, s) + }), { + priority: t.converterPriority || "normal" + }) + } + }(t)) + } + markerToElement(t) { + return this.add(function(t) { + const e = gc(t.view, "ui"); + return n => { + var o; + n.on(`addMarker:${t.model}`, (o = e, (t, e, n) => { + e.isOpening = !0; + const i = o(e, n); + e.isOpening = !1; + const r = o(e, n); + if (!i || !r) return; + const s = e.markerRange; + if (s.isCollapsed && !n.consumable.consume(s, t.name)) return; + for (const e of s) + if (!n.consumable.consume(e.item, t.name)) return; + const a = n.mapper, + l = n.writer; + l.insert(a.toViewPosition(s.start), i), n.mapper.bindElementToMarker(i, e.markerName), s.isCollapsed || (l.insert(a.toViewPosition(s.end), r), n.mapper.bindElementToMarker(r, e.markerName)), t.stop() + }), { + priority: t.converterPriority || "normal" + }), n.on(`removeMarker:${t.model}`, ((t, e, n) => { + const o = n.mapper.markerNameToElements(e.markerName); + if (o) { + for (const t of o) n.mapper.unbindElementFromMarkerName(t, e.markerName), n.writer.clear(n.writer.createRangeOn(t), t); + n.writer.clearClonedElementsGroup(e.markerName), t.stop() + } + }), { + priority: t.converterPriority || "normal" + }) + } + }(t)) + } + markerToHighlight(t) { + return this.add(function(t) { + return e => { + var n; + e.on(`addMarker:${t.model}`, (n = t.view, (t, e, o) => { + if (!e.item) return; + if (!(e.item instanceof Kl || e.item instanceof rc || e.item.is("$textProxy"))) return; + const i = fc(n, e, o); + if (!i) return; + if (!o.consumable.consume(e.item, t.name)) return; + const r = o.writer, + s = dc(r, i), + a = r.document.selection; + if (e.item instanceof Kl || e.item instanceof rc) r.wrap(a.getFirstRange(), s); + else { + const t = o.mapper.toViewRange(e.range), + n = r.wrap(t, s); + for (const t of n.getItems()) + if (t.is("attributeElement") && t.isSimilar(s)) { + o.mapper.bindElementToMarker(t, e.markerName); + break + } + } + }), { + priority: t.converterPriority || "normal" + }), e.on(`addMarker:${t.model}`, function(t) { + return (e, n, o) => { + if (!n.item) return; + if (!(n.item instanceof vl)) return; + const i = fc(t, n, o); + if (!i) return; + if (!o.consumable.test(n.item, e.name)) return; + const r = o.mapper.toViewElement(n.item); + if (r && r.getCustomProperty("addHighlight")) { + o.consumable.consume(n.item, e.name); + for (const t of Pl._createIn(n.item)) o.consumable.consume(t.item, e.name); + r.getCustomProperty("addHighlight")(r, i, o.writer), o.mapper.bindElementToMarker(r, n.markerName) + } + } + }(t.view), { + priority: t.converterPriority || "normal" + }), e.on(`removeMarker:${t.model}`, function(t) { + return (e, n, o) => { + if (n.markerRange.isCollapsed) return; + const i = fc(t, n, o); + if (!i) return; + const r = dc(o.writer, i), + s = o.mapper.markerNameToElements(n.markerName); + if (s) { + for (const t of s) + if (o.mapper.unbindElementFromMarkerName(t, n.markerName), t.is("attributeElement")) o.writer.unwrap(o.writer.createRangeOn(t), r); + else { + t.getCustomProperty("removeHighlight")(t, i.id, o.writer) + } o.writer.clearClonedElementsGroup(n.markerName), e.stop() + } + } + }(t.view), { + priority: t.converterPriority || "normal" + }) + } + }(t)) + } + markerToData(t) { + return this.add(function(t) { + t = fl(t); + const e = t.model; + let n = t.view; + n || (n = n => ({ + group: e, + name: n.substr(t.model.length + 1) + })); + return o => { + var i; + o.on(`addMarker:${e}`, (i = n, (t, e, n) => { + const o = i(e.markerName, n); + if (!o) return; + const r = e.markerRange; + n.consumable.consume(r, t.name) && (hc(r, !1, n, e, o), hc(r, !0, n, e, o), t.stop()) + }), { + priority: t.converterPriority || "normal" + }), o.on(`removeMarker:${e}`, function(t) { + return (e, n, o) => { + const i = t(n.markerName, o); + if (!i) return; + const r = o.mapper.markerNameToElements(n.markerName); + if (r) { + for (const t of r) o.mapper.unbindElementFromMarkerName(t, n.markerName), t.is("containerElement") ? (s(`data-${i.group}-start-before`, t), s(`data-${i.group}-start-after`, t), s(`data-${i.group}-end-before`, t), s(`data-${i.group}-end-after`, t)) : o.writer.clear(o.writer.createRangeOn(t), t); + o.writer.clearClonedElementsGroup(n.markerName), e.stop() + } + + function s(t, e) { + if (e.hasAttribute(t)) { + const n = new Set(e.getAttribute(t).split(",")); + n.delete(i.name), 0 == n.size ? o.writer.removeAttribute(t, e) : o.writer.setAttribute(t, Array.from(n).join(","), e) + } + } + } + }(n), { + priority: t.converterPriority || "normal" + }) + } + }(t)) + } + } + + function dc(t, e) { + const n = t.createAttributeElement("span", e.attributes); + return e.classes && n._addClass(e.classes), "number" == typeof e.priority && (n._priority = e.priority), n._id = e.id, n + } + + function hc(t, e, n, o, i) { + const r = e ? t.start : t.end, + s = r.nodeAfter && r.nodeAfter.is("element") ? r.nodeAfter : null, + a = r.nodeBefore && r.nodeBefore.is("element") ? r.nodeBefore : null; + if (s || a) { + let t, r; + e && s || !e && !a ? (t = s, r = !0) : (t = a, r = !1); + const l = n.mapper.toViewElement(t); + if (l) return void + function(t, e, n, o, i, r) { + const s = `data-${r.group}-${e?"start":"end"}-${n?"before":"after"}`, + a = t.hasAttribute(s) ? t.getAttribute(s).split(",") : []; + a.unshift(r.name), o.writer.setAttribute(s, a.join(","), t), o.mapper.bindElementToMarker(t, i.markerName) + }(l, e, r, n, o, i) + }! function(t, e, n, o, i) { + const r = `${i.group}-${e?"start":"end"}`, + s = i.name ? { + name: i.name + } : null, + a = n.writer.createUIElement(r, s); + n.writer.insert(t, a), n.mapper.bindElementToMarker(a, o.markerName) + }(n.mapper.toViewPosition(r), e, n, o, i) + } + + function uc(t) { + return "string" == typeof t && (t = { + name: t + }), t.attributes ? Array.isArray(t.attributes) || (t.attributes = [t.attributes]) : t.attributes = [], t.children = !!t.children, t + } + + function gc(t, e) { + return "function" == typeof t ? t : (n, o) => function(t, e, n) { + "string" == typeof t && (t = { + name: t + }); + let o; + const i = e.writer, + r = Object.assign({}, t.attributes); + if ("container" == n) o = i.createContainerElement(t.name, r); + else if ("attribute" == n) { + const e = { + priority: t.priority || Es.DEFAULT_PRIORITY + }; + o = i.createAttributeElement(t.name, r, e) + } else o = i.createUIElement(t.name, r); + if (t.styles) { + const e = Object.keys(t.styles); + for (const n of e) i.setStyle(n, t.styles[n], o) + } + if (t.classes) { + const e = t.classes; + if ("string" == typeof e) i.addClass(e, o); + else + for (const t of e) i.addClass(t, o) + } + return o + }(t, o, e) + } + + function mc(t) { + return t.model.values ? (e, n, o) => { + const i = t.view[e]; + return i ? i(e, n, o) : null + } : t.view + } + + function pc(t) { + return "string" == typeof t ? e => ({ + key: t, + value: e + }) : "object" == typeof t ? t.value ? () => t : e => ({ + key: t.key, + value: e + }) : t + } + + function fc(t, e, n) { + const o = "function" == typeof t ? t(e, n) : t; + return o ? (o.priority || (o.priority = 10), o.id || (o.id = e.markerName), o) : null + } + + function bc(t) { + const e = function(t) { + return (e, n) => { + if (!e.is("element", t.name)) return !1; + if ("attribute" == n.type) { + if (t.attributes.includes(n.attributeKey)) return !0 + } else if (t.children) return !0; + return !1 + } + }(t); + return (t, n) => { + const o = []; + n.reconvertedElements || (n.reconvertedElements = new Set); + for (const t of n.changes) { + const i = "attribute" == t.type ? t.range.start.nodeAfter : t.position.parent; + if (i && e(i, t)) { + if (!n.reconvertedElements.has(i)) { + n.reconvertedElements.add(i); + const t = El._createBefore(i); + let e = o.length; + for (let n = o.length - 1; n >= 0; n--) { + const i = o[n], + r = ("attribute" == i.type ? i.range.start : i.position).compareWith(t); + if ("before" == r || "remove" == i.type && "same" == r) break; + e = n + } + o.splice(e, 0, { + type: "remove", + name: i.name, + position: t, + length: 1 + }, { + type: "reinsert", + name: i.name, + position: t, + length: 1 + }) + } + } else o.push(t) + } + n.changes = o + } + } + + function kc(t) { + return (e, n, o = {}) => { + const i = ["insert"]; + for (const n of t.attributes) e.hasAttribute(n) && i.push(`attribute:${n}`); + return !!i.every((t => n.test(e, t))) && (o.preflight || i.forEach((t => n.consume(e, t))), !0) + } + } + + function wc(t, e, n, o) { + for (const i of e) Ac(t.root, i, n, o) || n.convertItem(i) + } + + function Ac(t, e, n, o) { + const { + writer: i, + mapper: r + } = n; + if (!o.reconversion) return !1; + const s = r.toViewElement(e); + return !(!s || s.root == t) && (!!n.canReuseView(s) && (i.move(i.createRangeOn(s), r.toViewPosition(El._createBefore(e))), !0)) + } + + function Cc(t, e, { + preflight: n + } = {}) { + return n ? e.test(t, "insert") : e.consume(t, "insert") + } + + function _c(t) { + const { + schema: e, + document: n + } = t.model; + for (const o of n.getRootNames()) { + const i = n.getRoot(o); + if (i.isEmpty && !e.checkChild(i, "$text") && e.checkChild(i, "paragraph")) return t.insertElement("paragraph", i), !0 + } + return !1 + } + + function vc(t, e, n) { + const o = n.createContext(t); + return !!n.checkChild(o, "paragraph") && !!n.checkChild(o.push("paragraph"), e) + } + + function yc(t, e) { + const n = e.createElement("paragraph"); + return e.insert(n, t), e.createPositionAt(n, 0) + } + var xc = Object.defineProperty, + Ec = Object.defineProperties, + Dc = Object.getOwnPropertyDescriptors, + Sc = Object.getOwnPropertySymbols, + Tc = Object.prototype.hasOwnProperty, + Bc = Object.prototype.propertyIsEnumerable, + Ic = (t, e, n) => e in t ? xc(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class Pc extends lc { + elementToElement(t) { + return this.add(Rc(t)) + } + elementToAttribute(t) { + return this.add(function(t) { + t = fl(t), Oc(t); + const e = Fc(t, !1), + n = zc(t.view), + o = n ? `element:${n}` : "element"; + return n => { + n.on(o, e, { + priority: t.converterPriority || "low" + }) + } + }(t)) + } + attributeToAttribute(t) { + return this.add(function(t) { + t = fl(t); + let e = null; + ("string" == typeof t.view || t.view.key) && (e = function(t) { + "string" == typeof t.view && (t.view = { + key: t.view + }); + const e = t.view.key; + let n; + if ("class" == e || "style" == e) { + n = { + ["class" == e ? "classes" : "styles"]: t.view.value + } + } else { + n = { + attributes: { + [e]: void 0 === t.view.value ? /[\s\S]*/ : t.view.value + } + } + } + t.view.name && (n.name = t.view.name); + return t.view = n, e + }(t)); + Oc(t, e); + const n = Fc(t, !0); + return e => { + e.on("element", n, { + priority: t.converterPriority || "low" + }) + } + }(t)) + } + elementToMarker(t) { + return this.add(function(t) { + const e = function(t) { + return (e, n) => { + const o = "string" == typeof t ? t : t(e, n); + return n.writer.createElement("$marker", { + "data-name": o + }) + } + }(t.model); + return Rc((n = ((t, e) => { + for (var n in e || (e = {})) Tc.call(e, n) && Ic(t, n, e[n]); + if (Sc) + for (var n of Sc(e)) Bc.call(e, n) && Ic(t, n, e[n]); + return t + })({}, t), o = { + model: e + }, Ec(n, Dc(o)))); + var n, o + }(t)) + } + dataToMarker(t) { + return this.add(function(t) { + t = fl(t), t.model || (t.model = e => e ? t.view + ":" + e : t.view); + const e = { + view: t.view, + model: t.model + }, + n = Vc(Mc(e, "start")), + o = Vc(Mc(e, "end")); + return i => { + i.on(`element:${t.view}-start`, n, { + priority: t.converterPriority || "normal" + }), i.on(`element:${t.view}-end`, o, { + priority: t.converterPriority || "normal" + }); + const r = m.low, + s = m.highest, + a = m.get(t.converterPriority) / s; + i.on("element", function(t) { + return (e, n, o) => { + const i = `data-${t.view}`; + + function r(e, i) { + for (const r of i) { + const i = t.model(r, o), + s = o.writer.createElement("$marker", { + "data-name": i + }); + o.writer.insert(s, e), n.modelCursor.isEqual(e) ? n.modelCursor = n.modelCursor.getShiftedBy(1) : n.modelCursor = n.modelCursor._getTransformedByInsertion(e, 1), n.modelRange = n.modelRange._getTransformedByInsertion(e, 1)[0] + } + }(o.consumable.test(n.viewItem, { + attributes: i + "-end-after" + }) || o.consumable.test(n.viewItem, { + attributes: i + "-start-after" + }) || o.consumable.test(n.viewItem, { + attributes: i + "-end-before" + }) || o.consumable.test(n.viewItem, { + attributes: i + "-start-before" + })) && (n.modelRange || Object.assign(n, o.convertChildren(n.viewItem, n.modelCursor)), o.consumable.consume(n.viewItem, { + attributes: i + "-end-after" + }) && r(n.modelRange.end, n.viewItem.getAttribute(i + "-end-after").split(",")), o.consumable.consume(n.viewItem, { + attributes: i + "-start-after" + }) && r(n.modelRange.end, n.viewItem.getAttribute(i + "-start-after").split(",")), o.consumable.consume(n.viewItem, { + attributes: i + "-end-before" + }) && r(n.modelRange.start, n.viewItem.getAttribute(i + "-end-before").split(",")), o.consumable.consume(n.viewItem, { + attributes: i + "-start-before" + }) && r(n.modelRange.start, n.viewItem.getAttribute(i + "-start-before").split(","))) + } + }(e), { + priority: r + a + }) + } + }(t)) + } + } + + function Rc(t) { + const e = Vc(t = fl(t)), + n = zc(t.view), + o = n ? `element:${n}` : "element"; + return n => { + n.on(o, e, { + priority: t.converterPriority || "normal" + }) + } + } + + function zc(t) { + return "string" == typeof t ? t : "object" == typeof t && "string" == typeof t.name ? t.name : null + } + + function Vc(t) { + const e = new rr(t.view); + return (n, o, i) => { + const r = e.match(o.viewItem); + if (!r) return; + const s = r.match; + if (s.name = !0, !i.consumable.test(o.viewItem, s)) return; + const a = function(t, e, n) { + return t instanceof Function ? t(e, n) : n.writer.createElement(t) + }(t.model, o.viewItem, i); + a && i.safeInsert(a, o.modelCursor) && (i.consumable.consume(o.viewItem, s), i.convertChildren(o.viewItem, a), i.updateConversionResult(a, o)) + } + } + + function Oc(t, e = null) { + const n = null === e || (t => t.getAttribute(e)), + o = "object" != typeof t.model ? t.model : t.model.key, + i = "object" != typeof t.model || void 0 === t.model.value ? n : t.model.value; + t.model = { + key: o, + value: i + } + } + + function Fc(t, e) { + const n = new rr(t.view); + return (o, i, r) => { + if (!i.modelRange && e) return; + const s = n.match(i.viewItem); + if (!s) return; + if (! function(t, e) { + const n = "function" == typeof t ? t(e) : t; + if ("object" == typeof n && !zc(n)) return !1; + return !n.classes && !n.attributes && !n.styles + }(t.view, i.viewItem) ? delete s.match.name : s.match.name = !0, !r.consumable.test(i.viewItem, s.match)) return; + const a = t.model.key, + l = "function" == typeof t.model.value ? t.model.value(i.viewItem, r) : t.model.value; + if (null === l) return; + i.modelRange || Object.assign(i, r.convertChildren(i.viewItem, i.modelCursor)); + const c = function(t, e, n, o) { + let i = !1; + for (const r of Array.from(t.getItems({ + shallow: n + }))) o.schema.checkAttribute(r, e.key) && (i = !0, r.hasAttribute(e.key) || o.writer.setAttribute(e.key, e.value, r)); + return i + }(i.modelRange, { + key: a, + value: l + }, e, r); + c && (r.consumable.test(i.viewItem, { + name: !0 + }) && (s.match.name = !0), r.consumable.consume(i.viewItem, s.match)) + } + } + + function Mc(t, e) { + return { + view: `${t.view}-${e}`, + model: (e, n) => { + const o = e.getAttribute("name"), + i = t.model(o, n); + return n.writer.createElement("$marker", { + "data-name": i + }) + } + } + } + + function Nc(t) { + t.document.registerPostFixer((e => function(t, e) { + const n = e.document.selection, + o = e.schema, + i = []; + let r = !1; + for (const t of n.getRanges()) { + const e = Lc(t, o); + e && !e.isEqual(t) ? (i.push(e), r = !0) : i.push(t) + } + r && t.setSelection(function(t) { + const e = [...t], + n = new Set; + let o = 1; + for (; o < e.length;) { + const t = e[o], + i = e.slice(0, o); + for (const [r, s] of i.entries()) + if (!n.has(r)) + if (t.isEqual(s)) n.add(r); + else if (t.isIntersecting(s)) { + n.add(r), n.add(o); + const i = t.getJoined(s); + e.push(i) + } + o++ + } + return e.filter(((t, e) => !n.has(e))) + }(i), { + backward: n.isBackward + }); + return !1 + }(e, t))) + } + + function Lc(t, e) { + return t.isCollapsed ? function(t, e) { + const n = t.start, + o = e.getNearestSelectionRange(n); + if (!o) { + const t = n.getAncestors().reverse().find((t => e.isObject(t))); + return t ? Pl._createOn(t) : null + } + if (!o.isCollapsed) return o; + const i = o.start; + if (n.isEqual(i)) return null; + return new Pl(i) + }(t, e) : function(t, e) { + const { + start: n, + end: o + } = t, i = e.checkChild(n, "$text"), r = e.checkChild(o, "$text"), s = e.getLimitElement(n), a = e.getLimitElement(o); + if (s === a) { + if (i && r) return null; + if (function(t, e, n) { + const o = t.nodeAfter && !n.isLimit(t.nodeAfter) || n.checkChild(t, "$text"), + i = e.nodeBefore && !n.isLimit(e.nodeBefore) || n.checkChild(e, "$text"); + return o || i + }(n, o, e)) { + const t = n.nodeAfter && e.isSelectable(n.nodeAfter) ? null : e.getNearestSelectionRange(n, "forward"), + i = o.nodeBefore && e.isSelectable(o.nodeBefore) ? null : e.getNearestSelectionRange(o, "backward"), + r = t ? t.start : n, + s = i ? i.end : o; + return new Pl(r, s) + } + } + const l = s && !s.is("rootElement"), + c = a && !a.is("rootElement"); + if (l || c) { + const t = n.nodeAfter && o.nodeBefore && n.nodeAfter.parent === o.nodeBefore.parent, + i = l && (!t || !jc(n.nodeAfter, e)), + r = c && (!t || !jc(o.nodeBefore, e)); + let d = n, + h = o; + return i && (d = El._createBefore(Hc(s, e))), r && (h = El._createAfter(Hc(a, e))), new Pl(d, h) + } + return null + }(t, e) + } + + function Hc(t, e) { + let n = t, + o = n; + for (; e.isLimit(o) && o.parent;) n = o, o = o.parent; + return n + } + + function jc(t, e) { + return t && e.isSelectable(t) + } + class qc extends(q()) { + constructor(t, e) { + super(), this.model = t, this.view = new bl(e), this.mapper = new Rl, this.downcastDispatcher = new Ul({ + mapper: this.mapper, + schema: t.schema + }); + const n = this.model.document, + o = n.selection, + r = this.model.markers; + var s, a, l; + this.listenTo(this.model, "_beforeChanges", (() => { + this.view._disableRendering(!0) + }), { + priority: "highest" + }), this.listenTo(this.model, "_afterChanges", (() => { + this.view._disableRendering(!1) + }), { + priority: "lowest" + }), this.listenTo(n, "change", (() => { + this.view.change((t => { + this.downcastDispatcher.convertChanges(n.differ, r, t), this.downcastDispatcher.convertSelection(o, r, t) + })) + }), { + priority: "low" + }), this.listenTo(this.view.document, "selectionChange", function(t, e) { + return (n, o) => { + const i = o.newSelection, + r = []; + for (const t of i.getRanges()) r.push(e.toModelRange(t)); + const s = t.createSelection(r, { + backward: i.isBackward + }); + s.isEqual(t.document.selection) || t.change((t => { + t.setSelection(s) + })) + } + }(this.model, this.mapper)), this.listenTo(this.view.document, "beforeinput", (s = this.mapper, a = this.model.schema, l = this.view, (t, e) => { + if (!l.document.isComposing || i.isAndroid) + for (let t = 0; t < e.targetRanges.length; t++) { + const n = e.targetRanges[t], + o = s.toModelRange(n), + i = Lc(o, a); + i && !i.isEqual(o) && (e.targetRanges[t] = s.toViewRange(i)) + } + }), { + priority: "high" + }), this.downcastDispatcher.on("insert:$text", ((t, e, n) => { + if (!n.consumable.consume(e.item, t.name)) return; + const o = n.writer, + i = n.mapper.toViewPosition(e.range.start), + r = o.createText(e.item.data); + o.insert(i, r) + }), { + priority: "lowest" + }), this.downcastDispatcher.on("insert", ((t, e, n) => { + n.convertAttributes(e.item), e.reconversion || !e.item.is("element") || e.item.isEmpty || n.convertChildren(e.item) + }), { + priority: "lowest" + }), this.downcastDispatcher.on("remove", ((t, e, n) => { + const o = n.mapper.toViewPosition(e.position), + i = e.position.getShiftedBy(e.length), + r = n.mapper.toViewPosition(i, { + isPhantom: !0 + }), + s = n.writer.createRange(o, r), + a = n.writer.remove(s.getTrimmed()); + for (const t of n.writer.createRangeIn(a).getItems()) n.mapper.unbindViewElement(t, { + defer: !0 + }) + }), { + priority: "low" + }), this.downcastDispatcher.on("selection", ((t, e, n) => { + const o = n.writer, + i = o.document.selection; + for (const t of i.getRanges()) t.isCollapsed && t.end.parent.isAttached() && n.writer.mergeAttributes(t.start); + o.setSelection(null) + }), { + priority: "high" + }), this.downcastDispatcher.on("selection", ((t, e, n) => { + const o = e.selection; + if (o.isCollapsed) return; + if (!n.consumable.consume(o, "selection")) return; + const i = []; + for (const t of o.getRanges()) i.push(n.mapper.toViewRange(t)); + n.writer.setSelection(i, { + backward: o.isBackward + }) + }), { + priority: "low" + }), this.downcastDispatcher.on("selection", ((t, e, n) => { + const o = e.selection; + if (!o.isCollapsed) return; + if (!n.consumable.consume(o, "selection")) return; + const i = n.writer, + r = o.getFirstPosition(), + s = n.mapper.toViewPosition(r), + a = i.breakAttributes(s); + i.setSelection(a) + }), { + priority: "low" + }), this.view.document.roots.bindTo(this.model.document.roots).using((t => { + if ("$graveyard" == t.rootName) return null; + const e = new hs(this.view.document, t.name); + return e.rootName = t.rootName, this.mapper.bindElements(t, e), e + })) + } + destroy() { + this.view.destroy(), this.stopListening() + } + reconvertMarker(t) { + const e = "string" == typeof t ? t : t.name, + n = this.model.markers.get(e); + if (!n) throw new b("editingcontroller-reconvertmarker-marker-not-exist", this, { + markerName: e + }); + this.model.change((() => { + this.model.markers._refresh(n) + })) + } + reconvertItem(t) { + this.model.change((() => { + this.model.document.differ._refreshItem(t) + })) + } + } + class Wc { + constructor() { + this._consumables = new Map + } + add(t, e) { + let n; + t.is("$text") || t.is("documentFragment") ? this._consumables.set(t, !0) : (this._consumables.has(t) ? n = this._consumables.get(t) : (n = new $c(t), this._consumables.set(t, n)), n.add(e)) + } + test(t, e) { + const n = this._consumables.get(t); + return void 0 === n ? null : t.is("$text") || t.is("documentFragment") ? n : n.test(e) + } + consume(t, e) { + return !!this.test(t, e) && (t.is("$text") || t.is("documentFragment") ? this._consumables.set(t, !1) : this._consumables.get(t).consume(e), !0) + } + revert(t, e) { + const n = this._consumables.get(t); + void 0 !== n && (t.is("$text") || t.is("documentFragment") ? this._consumables.set(t, !0) : n.revert(e)) + } + static consumablesFromElement(t) { + const e = { + element: t, + name: !0, + attributes: [], + classes: [], + styles: [] + }, + n = t.getAttributeKeys(); + for (const t of n) "style" != t && "class" != t && e.attributes.push(t); + const o = t.getClassNames(); + for (const t of o) e.classes.push(t); + const i = t.getStyleNames(); + for (const t of i) e.styles.push(t); + return e + } + static createFrom(t, e) { + if (e || (e = new Wc), t.is("$text")) return e.add(t), e; + t.is("element") && e.add(t, Wc.consumablesFromElement(t)), t.is("documentFragment") && e.add(t); + for (const n of t.getChildren()) e = Wc.createFrom(n, e); + return e + } + } + const Uc = ["attributes", "classes", "styles"]; + class $c { + constructor(t) { + this.element = t, this._canConsumeName = null, this._consumables = { + attributes: new Map, + styles: new Map, + classes: new Map + } + } + add(t) { + t.name && (this._canConsumeName = !0); + for (const e of Uc) e in t && this._add(e, t[e]) + } + test(t) { + if (t.name && !this._canConsumeName) return this._canConsumeName; + for (const e of Uc) + if (e in t) { + const n = this._test(e, t[e]); + if (!0 !== n) return n + } return !0 + } + consume(t) { + t.name && (this._canConsumeName = !1); + for (const e of Uc) e in t && this._consume(e, t[e]) + } + revert(t) { + t.name && (this._canConsumeName = !0); + for (const e of Uc) e in t && this._revert(e, t[e]) + } + _add(t, e) { + const n = ut(e) ? e : [e], + o = this._consumables[t]; + for (const e of n) { + if ("attributes" === t && ("class" === e || "style" === e)) throw new b("viewconsumable-invalid-attribute", this); + if (o.set(e, !0), "styles" === t) + for (const t of this.element.document.stylesProcessor.getRelatedStyles(e)) o.set(t, !0) + } + } + _test(t, e) { + const n = ut(e) ? e : [e], + o = this._consumables[t]; + for (const e of n) + if ("attributes" !== t || "class" !== e && "style" !== e) { + const t = o.get(e); + if (void 0 === t) return null; + if (!t) return !1 + } else { + const t = "class" == e ? "classes" : "styles", + n = this._test(t, [...this._consumables[t].keys()]); + if (!0 !== n) return n + } return !0 + } + _consume(t, e) { + const n = ut(e) ? e : [e], + o = this._consumables[t]; + for (const e of n) + if ("attributes" !== t || "class" !== e && "style" !== e) { + if (o.set(e, !1), "styles" == t) + for (const t of this.element.document.stylesProcessor.getRelatedStyles(e)) o.set(t, !1) + } else { + const t = "class" == e ? "classes" : "styles"; + this._consume(t, [...this._consumables[t].keys()]) + } + } + _revert(t, e) { + const n = ut(e) ? e : [e], + o = this._consumables[t]; + for (const e of n) + if ("attributes" !== t || "class" !== e && "style" !== e) { + !1 === o.get(e) && o.set(e, !0) + } else { + const t = "class" == e ? "classes" : "styles"; + this._revert(t, [...this._consumables[t].keys()]) + } + } + } + class Gc extends(q()) { + constructor() { + super(), this._sourceDefinitions = {}, this._attributeProperties = {}, this.decorate("checkChild"), this.decorate("checkAttribute"), this.on("checkAttribute", ((t, e) => { + e[0] = new Kc(e[0]) + }), { + priority: "highest" + }), this.on("checkChild", ((t, e) => { + e[0] = new Kc(e[0]), e[1] = this.getDefinition(e[1]) + }), { + priority: "highest" + }) + } + register(t, e) { + if (this._sourceDefinitions[t]) throw new b("schema-cannot-register-item-twice", this, { + itemName: t + }); + this._sourceDefinitions[t] = [Object.assign({}, e)], this._clearCache() + } + extend(t, e) { + if (!this._sourceDefinitions[t]) throw new b("schema-cannot-extend-missing-item", this, { + itemName: t + }); + this._sourceDefinitions[t].push(Object.assign({}, e)), this._clearCache() + } + getDefinitions() { + return this._compiledDefinitions || this._compile(), this._compiledDefinitions + } + getDefinition(t) { + let e; + return e = "string" == typeof t ? t : "is" in t && (t.is("$text") || t.is("$textProxy")) ? "$text" : t.name, this.getDefinitions()[e] + } + isRegistered(t) { + return !!this.getDefinition(t) + } + isBlock(t) { + const e = this.getDefinition(t); + return !(!e || !e.isBlock) + } + isLimit(t) { + const e = this.getDefinition(t); + return !!e && !(!e.isLimit && !e.isObject) + } + isObject(t) { + const e = this.getDefinition(t); + return !!e && !!(e.isObject || e.isLimit && e.isSelectable && e.isContent) + } + isInline(t) { + const e = this.getDefinition(t); + return !(!e || !e.isInline) + } + isSelectable(t) { + const e = this.getDefinition(t); + return !!e && !(!e.isSelectable && !e.isObject) + } + isContent(t) { + const e = this.getDefinition(t); + return !!e && !(!e.isContent && !e.isObject) + } + checkChild(t, e) { + return !!e && this._checkContextMatch(e, t) + } + checkAttribute(t, e) { + const n = this.getDefinition(t.last); + return !!n && n.allowAttributes.includes(e) + } + checkMerge(t, e) { + if (t instanceof El) { + const e = t.nodeBefore, + n = t.nodeAfter; + if (!(e instanceof vl)) throw new b("schema-check-merge-no-element-before", this); + if (!(n instanceof vl)) throw new b("schema-check-merge-no-element-after", this); + return this.checkMerge(e, n) + } + for (const n of e.getChildren()) + if (!this.checkChild(t, n)) return !1; + return !0 + } + addChildCheck(t) { + this.on("checkChild", ((e, [n, o]) => { + if (!o) return; + const i = t(n, o); + "boolean" == typeof i && (e.stop(), e.return = i) + }), { + priority: "high" + }) + } + addAttributeCheck(t) { + this.on("checkAttribute", ((e, [n, o]) => { + const i = t(n, o); + "boolean" == typeof i && (e.stop(), e.return = i) + }), { + priority: "high" + }) + } + setAttributeProperties(t, e) { + this._attributeProperties[t] = Object.assign(this.getAttributeProperties(t), e) + } + getAttributeProperties(t) { + return this._attributeProperties[t] || {} + } + getLimitElement(t) { + let e; + if (t instanceof El) e = t.parent; + else { + e = (t instanceof Pl ? [t] : Array.from(t.getRanges())).reduce(((t, e) => { + const n = e.getCommonAncestor(); + return t ? t.getCommonAncestor(n, { + includeSelf: !0 + }) : n + }), null) + } + for (; !this.isLimit(e) && e.parent;) e = e.parent; + return e + } + checkAttributeInSelection(t, e) { + if (t.isCollapsed) { + const n = [...t.getFirstPosition().getAncestors(), new Cl("", t.getAttributes())]; + return this.checkAttribute(n, e) + } { + const n = t.getRanges(); + for (const t of n) + for (const n of t) + if (this.checkAttribute(n.item, e)) return !0 + } + return !1 + }* getValidRanges(t, e) { + t = function*(t) { + for (const e of t) yield* e.getMinimalFlatRanges() + }(t); + for (const n of t) yield* this._getValidRangesForRange(n, e) + } + getNearestSelectionRange(t, e = "both") { + if (this.checkChild(t, "$text")) return new Pl(t); + let n, o; + const i = t.getAncestors().reverse().find((t => this.isLimit(t))) || t.root; + "both" != e && "backward" != e || (n = new yl({ + boundaries: Pl._createIn(i), + startPosition: t, + direction: "backward" + })), "both" != e && "forward" != e || (o = new yl({ + boundaries: Pl._createIn(i), + startPosition: t + })); + for (const t of function*(t, e) { + let n = !1; + for (; !n;) { + if (n = !0, t) { + const e = t.next(); + e.done || (n = !1, yield { + walker: t, + value: e.value + }) + } + if (e) { + const t = e.next(); + t.done || (n = !1, yield { + walker: e, + value: t.value + }) + } + } + }(n, o)) { + const e = t.walker == n ? "elementEnd" : "elementStart", + o = t.value; + if (o.type == e && this.isObject(o.item)) return Pl._createOn(o.item); + if (this.checkChild(o.nextPosition, "$text")) return new Pl(o.nextPosition) + } + return null + } + findAllowedParent(t, e) { + let n = t.parent; + for (; n;) { + if (this.checkChild(n, e)) return n; + if (this.isLimit(n)) return null; + n = n.parent + } + return null + } + setAllowedAttributes(t, e, n) { + const o = n.model; + for (const [i, r] of Object.entries(e)) o.schema.checkAttribute(t, i) && n.setAttribute(i, r, t) + } + removeDisallowedAttributes(t, e) { + for (const n of t) + if (n.is("$text")) ad(this, n, e); + else { + const t = Pl._createIn(n).getPositions(); + for (const n of t) { + ad(this, n.nodeBefore || n.parent, e) + } + } + } + getAttributesWithProperty(t, e, n) { + const o = {}; + for (const [i, r] of t.getAttributes()) { + const t = this.getAttributeProperties(i); + void 0 !== t[e] && (void 0 !== n && n !== t[e] || (o[i] = r)) + } + return o + } + createContext(t) { + return new Kc(t) + } + _clearCache() { + this._compiledDefinitions = null + } + _compile() { + const t = {}, + e = this._sourceDefinitions, + n = Object.keys(e); + for (const o of n) t[o] = Zc(e[o], o); + for (const e of n) Jc(t, e); + for (const e of n) Yc(t, e); + for (const e of n) Qc(t, e); + for (const e of n) Xc(t, e), td(t, e); + for (const e of n) ed(t, e), nd(t, e), od(t, e); + this._compiledDefinitions = t + } + _checkContextMatch(t, e, n = e.length - 1) { + const o = e.getItem(n); + if (t.allowIn.includes(o.name)) { + if (0 == n) return !0; + { + const t = this.getDefinition(o); + return this._checkContextMatch(t, e, n - 1) + } + } + return !1 + }* _getValidRangesForRange(t, e) { + let n = t.start, + o = t.start; + for (const i of t.getItems({ + shallow: !0 + })) i.is("element") && (yield* this._getValidRangesForRange(Pl._createIn(i), e)), this.checkAttribute(i, e) || (n.isEqual(o) || (yield new Pl(n, o)), n = El._createAfter(i)), o = El._createAfter(i); + n.isEqual(o) || (yield new Pl(n, o)) + } + } + class Kc { + constructor(t) { + if (t instanceof Kc) return t; + let e; + e = "string" == typeof t ? [t] : Array.isArray(t) ? t : t.getAncestors({ + includeSelf: !0 + }), this._items = e.map(sd) + } + get length() { + return this._items.length + } + get last() { + return this._items[this._items.length - 1] + } [Symbol.iterator]() { + return this._items[Symbol.iterator]() + } + push(t) { + const e = new Kc([t]); + return e._items = [...this._items, ...e._items], e + } + getItem(t) { + return this._items[t] + }* getNames() { + yield* this._items.map((t => t.name)) + } + endsWith(t) { + return Array.from(this.getNames()).join(" ").endsWith(t) + } + startsWith(t) { + return Array.from(this.getNames()).join(" ").startsWith(t) + } + } + + function Zc(t, e) { + const n = { + name: e, + allowIn: [], + allowContentOf: [], + allowWhere: [], + allowAttributes: [], + allowAttributesOf: [], + allowChildren: [], + inheritTypesFrom: [] + }; + return function(t, e) { + for (const n of t) { + const t = Object.keys(n).filter((t => t.startsWith("is"))); + for (const o of t) e[o] = !!n[o] + } + }(t, n), id(t, n, "allowIn"), id(t, n, "allowContentOf"), id(t, n, "allowWhere"), id(t, n, "allowAttributes"), id(t, n, "allowAttributesOf"), id(t, n, "allowChildren"), id(t, n, "inheritTypesFrom"), + function(t, e) { + for (const n of t) { + const t = n.inheritAllFrom; + t && (e.allowContentOf.push(t), e.allowWhere.push(t), e.allowAttributesOf.push(t), e.inheritTypesFrom.push(t)) + } + }(t, n), n + } + + function Jc(t, e) { + const n = t[e]; + for (const o of n.allowChildren) { + const n = t[o]; + n && n.allowIn.push(e) + } + n.allowChildren.length = 0 + } + + function Yc(t, e) { + for (const n of t[e].allowContentOf) + if (t[n]) { + rd(t, n).forEach((t => { + t.allowIn.push(e) + })) + } delete t[e].allowContentOf + } + + function Qc(t, e) { + for (const n of t[e].allowWhere) { + const o = t[n]; + if (o) { + const n = o.allowIn; + t[e].allowIn.push(...n) + } + } + delete t[e].allowWhere + } + + function Xc(t, e) { + for (const n of t[e].allowAttributesOf) { + const o = t[n]; + if (o) { + const n = o.allowAttributes; + t[e].allowAttributes.push(...n) + } + } + delete t[e].allowAttributesOf + } + + function td(t, e) { + const n = t[e]; + for (const e of n.inheritTypesFrom) { + const o = t[e]; + if (o) { + const t = Object.keys(o).filter((t => t.startsWith("is"))); + for (const e of t) e in n || (n[e] = o[e]) + } + } + delete n.inheritTypesFrom + } + + function ed(t, e) { + const n = t[e], + o = n.allowIn.filter((e => t[e])); + n.allowIn = Array.from(new Set(o)) + } + + function nd(t, e) { + const n = t[e]; + for (const o of n.allowIn) { + t[o].allowChildren.push(e) + } + } + + function od(t, e) { + const n = t[e]; + n.allowAttributes = Array.from(new Set(n.allowAttributes)) + } + + function id(t, e, n) { + for (const o of t) { + const t = o[n]; + "string" == typeof t ? e[n].push(t) : Array.isArray(t) && e[n].push(...t) + } + } + + function rd(t, e) { + const n = t[e]; + return (o = t, Object.keys(o).map((t => o[t]))).filter((t => t.allowIn.includes(n.name))); + var o + } + + function sd(t) { + return "string" == typeof t || t.is("documentFragment") ? { + name: "string" == typeof t ? t : "$documentFragment", + * getAttributeKeys() {}, + getAttribute() {} + } : { + name: t.is("element") ? t.name : "$text", + * getAttributeKeys() { + yield* t.getAttributeKeys() + }, + getAttribute: e => t.getAttribute(e) + } + } + + function ad(t, e, n) { + for (const o of e.getAttributeKeys()) t.checkAttribute(e, o) || n.removeAttribute(o, e) + } + var ld = Object.defineProperty, + cd = Object.defineProperties, + dd = Object.getOwnPropertyDescriptors, + hd = Object.getOwnPropertySymbols, + ud = Object.prototype.hasOwnProperty, + gd = Object.prototype.propertyIsEnumerable, + md = (t, e, n) => e in t ? ld(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class pd extends(S()) { + constructor(t) { + var e; + super(), this._splitParts = new Map, this._cursorParents = new Map, this._modelCursor = null, this._emptyElementsToKeep = new Set, this.conversionApi = (e = ((t, e) => { + for (var n in e || (e = {})) ud.call(e, n) && md(t, n, e[n]); + if (hd) + for (var n of hd(e)) gd.call(e, n) && md(t, n, e[n]); + return t + })({}, t), cd(e, dd({ + consumable: null, + writer: null, + store: null, + convertItem: (t, e) => this._convertItem(t, e), + convertChildren: (t, e) => this._convertChildren(t, e), + safeInsert: (t, e) => this._safeInsert(t, e), + updateConversionResult: (t, e) => this._updateConversionResult(t, e), + splitToAllowedParent: (t, e) => this._splitToAllowedParent(t, e), + getSplitParts: t => this._getSplitParts(t), + keepEmptyElement: t => this._keepEmptyElement(t) + }))) + } + convert(t, e, n = ["$root"]) { + this.fire("viewCleanup", t), this._modelCursor = function(t, e) { + let n; + for (const o of new Kc(t)) { + const t = {}; + for (const e of o.getAttributeKeys()) t[e] = o.getAttribute(e); + const i = e.createElement(o.name, t); + n && e.insert(i, n), n = El._createAt(i, 0) + } + return n + }(n, e), this.conversionApi.writer = e, this.conversionApi.consumable = Wc.createFrom(t), this.conversionApi.store = {}; + const { + modelRange: o + } = this._convertItem(t, this._modelCursor), i = e.createDocumentFragment(); + if (o) { + this._removeEmptyElements(); + for (const t of Array.from(this._modelCursor.parent.getChildren())) e.append(t, i); + i.markers = function(t, e) { + const n = new Set, + o = new Map, + i = Pl._createIn(t).getItems(); + for (const t of i) t.is("element", "$marker") && n.add(t); + for (const t of n) { + const n = t.getAttribute("data-name"), + i = e.createPositionBefore(t); + o.has(n) ? o.get(n).end = i.clone() : o.set(n, new Pl(i.clone())), e.remove(t) + } + return o + }(i, e) + } + return this._modelCursor = null, this._splitParts.clear(), this._cursorParents.clear(), this._emptyElementsToKeep.clear(), this.conversionApi.writer = null, this.conversionApi.store = null, i + } + _convertItem(t, e) { + const n = { + viewItem: t, + modelCursor: e, + modelRange: null + }; + if (t.is("element") ? this.fire(`element:${t.name}`, n, this.conversionApi) : t.is("$text") ? this.fire("text", n, this.conversionApi) : this.fire("documentFragment", n, this.conversionApi), n.modelRange && !(n.modelRange instanceof Pl)) throw new b("view-conversion-dispatcher-incorrect-result", this); + return { + modelRange: n.modelRange, + modelCursor: n.modelCursor + } + } + _convertChildren(t, e) { + let n = e.is("position") ? e : El._createAt(e, 0); + const o = new Pl(n); + for (const e of Array.from(t.getChildren())) { + const t = this._convertItem(e, n); + t.modelRange instanceof Pl && (o.end = t.modelRange.end, n = t.modelCursor) + } + return { + modelRange: o, + modelCursor: n + } + } + _safeInsert(t, e) { + const n = this._splitToAllowedParent(t, e); + return !!n && (this.conversionApi.writer.insert(t, n.position), !0) + } + _updateConversionResult(t, e) { + const n = this._getSplitParts(t), + o = this.conversionApi.writer; + e.modelRange || (e.modelRange = o.createRange(o.createPositionBefore(t), o.createPositionAfter(n[n.length - 1]))); + const i = this._cursorParents.get(t); + e.modelCursor = i ? o.createPositionAt(i, 0) : e.modelRange.end + } + _splitToAllowedParent(t, e) { + const { + schema: n, + writer: o + } = this.conversionApi; + let i = n.findAllowedParent(e, t); + if (i) { + if (i === e.parent) return { + position: e + }; + this._modelCursor.parent.getAncestors().includes(i) && (i = null) + } + if (!i) return vc(e, t, n) ? { + position: yc(e, o) + } : null; + const r = this.conversionApi.writer.split(e, i), + s = []; + for (const t of r.range.getWalker()) + if ("elementEnd" == t.type) s.push(t.item); + else { + const e = s.pop(), + n = t.item; + this._registerSplitPair(e, n) + } const a = r.range.end.parent; + return this._cursorParents.set(t, a), { + position: r.position, + cursorParent: a + } + } + _registerSplitPair(t, e) { + this._splitParts.has(t) || this._splitParts.set(t, [t]); + const n = this._splitParts.get(t); + this._splitParts.set(e, n), n.push(e) + } + _getSplitParts(t) { + let e; + return e = this._splitParts.has(t) ? this._splitParts.get(t) : [t], e + } + _keepEmptyElement(t) { + this._emptyElementsToKeep.add(t) + } + _removeEmptyElements() { + let t = !1; + for (const e of this._splitParts.keys()) e.isEmpty && !this._emptyElementsToKeep.has(e) && (this.conversionApi.writer.remove(e), this._splitParts.delete(e), t = !0); + t && this._removeEmptyElements() + } + } + class fd { + getHtml(t) { + const e = document.implementation.createHTMLDocument("").createElement("div"); + return e.appendChild(t), e.innerHTML + } + } + class bd { + constructor(t) { + this.skipComments = !0, this.domParser = new DOMParser, this.domConverter = new fa(t, { + renderingMode: "data" + }), this.htmlWriter = new fd + } + toData(t) { + const e = this.domConverter.viewToDom(t); + return this.htmlWriter.getHtml(e) + } + toView(t) { + const e = this._toDom(t); + return this.domConverter.domToView(e, { + skipComments: this.skipComments + }) + } + registerRawContentMatcher(t) { + this.domConverter.registerRawContentMatcher(t) + } + useFillerType(t) { + this.domConverter.blockFillerMode = "marked" == t ? "markedNbsp" : "nbsp" + } + _toDom(t) { + t.match(/<(?:html|body|head|meta)(?:\s[^>]*)?>/i) || (t = `${t}`); + const e = this.domParser.parseFromString(t, "text/html"), + n = e.createDocumentFragment(), + o = e.body.childNodes; + for (; o.length > 0;) n.appendChild(o[0]); + return n + } + } + class kd extends(S()) { + constructor(t, e) { + super(), this.model = t, this.mapper = new Rl, this.downcastDispatcher = new Ul({ + mapper: this.mapper, + schema: t.schema + }), this.downcastDispatcher.on("insert:$text", ((t, e, n) => { + if (!n.consumable.consume(e.item, t.name)) return; + const o = n.writer, + i = n.mapper.toViewPosition(e.range.start), + r = o.createText(e.item.data); + o.insert(i, r) + }), { + priority: "lowest" + }), this.downcastDispatcher.on("insert", ((t, e, n) => { + n.convertAttributes(e.item), e.reconversion || !e.item.is("element") || e.item.isEmpty || n.convertChildren(e.item) + }), { + priority: "lowest" + }), this.upcastDispatcher = new pd({ + schema: t.schema + }), this.viewDocument = new xs(e), this.stylesProcessor = e, this.htmlProcessor = new bd(this.viewDocument), this.processor = this.htmlProcessor, this._viewWriter = new Fs(this.viewDocument), this.upcastDispatcher.on("text", ((t, e, { + schema: n, + consumable: o, + writer: i + }) => { + let r = e.modelCursor; + if (!o.test(e.viewItem)) return; + if (!n.checkChild(r, "$text")) { + if (!vc(r, "$text", n)) return; + if (0 == e.viewItem.data.trim().length) return; + const t = r.nodeBefore; + r = yc(r, i), t && t.is("element", "$marker") && (i.move(i.createRangeOn(t), r), r = i.createPositionAfter(t)) + } + o.consume(e.viewItem); + const s = i.createText(e.viewItem.data); + i.insert(s, r), e.modelRange = i.createRange(r, r.getShiftedBy(s.offsetSize)), e.modelCursor = e.modelRange.end + }), { + priority: "lowest" + }), this.upcastDispatcher.on("element", ((t, e, n) => { + if (!e.modelRange && n.consumable.consume(e.viewItem, { + name: !0 + })) { + const { + modelRange: t, + modelCursor: o + } = n.convertChildren(e.viewItem, e.modelCursor); + e.modelRange = t, e.modelCursor = o + } + }), { + priority: "lowest" + }), this.upcastDispatcher.on("documentFragment", ((t, e, n) => { + if (!e.modelRange && n.consumable.consume(e.viewItem, { + name: !0 + })) { + const { + modelRange: t, + modelCursor: o + } = n.convertChildren(e.viewItem, e.modelCursor); + e.modelRange = t, e.modelCursor = o + } + }), { + priority: "lowest" + }), q().prototype.decorate.call(this, "init"), q().prototype.decorate.call(this, "set"), q().prototype.decorate.call(this, "get"), q().prototype.decorate.call(this, "toView"), q().prototype.decorate.call(this, "toModel"), this.on("init", (() => { + this.fire("ready") + }), { + priority: "lowest" + }), this.on("ready", (() => { + this.model.enqueueChange({ + isUndoable: !1 + }, _c) + }), { + priority: "lowest" + }) + } + get(t = {}) { + const { + rootName: e = "main", + trim: n = "empty" + } = t; + if (!this._checkIfRootsExists([e])) throw new b("datacontroller-get-non-existent-root", this); + const o = this.model.document.getRoot(e); + return o.isAttached() || k("datacontroller-get-detached-root", this), "empty" !== n || this.model.hasContent(o, { + ignoreWhitespaces: !0 + }) ? this.stringify(o, t) : "" + } + stringify(t, e = {}) { + const n = this.toView(t, e); + return this.processor.toData(n) + } + toView(t, e = {}) { + const n = this.viewDocument, + o = this._viewWriter; + this.mapper.clearBindings(); + const i = Pl._createIn(t), + r = new Os(n); + this.mapper.bindElements(t, r); + const s = t.is("documentFragment") ? t.markers : function(t) { + const e = [], + n = t.root.document; + if (!n) return new Map; + const o = Pl._createIn(t); + for (const t of n.model.markers) { + const n = t.getRange(), + i = n.isCollapsed, + r = n.start.isEqual(o.start) || n.end.isEqual(o.end); + if (i && r) e.push([t.name, n]); + else { + const i = o.getIntersection(n); + i && e.push([t.name, i]) + } + } + return e.sort((([t, e], [n, o]) => { + if ("after" !== e.end.compareWith(o.start)) return 1; + if ("before" !== e.start.compareWith(o.end)) return -1; + switch (e.start.compareWith(o.start)) { + case "before": + return 1; + case "after": + return -1; + default: + switch (e.end.compareWith(o.end)) { + case "before": + return 1; + case "after": + return -1; + default: + return n.localeCompare(t) + } + } + })), new Map(e) + }(t); + return this.downcastDispatcher.convert(i, s, o, e), r + } + init(t) { + if (this.model.document.version) throw new b("datacontroller-init-document-not-empty", this); + let e = {}; + if ("string" == typeof t ? e.main = t : e = t, !this._checkIfRootsExists(Object.keys(e))) throw new b("datacontroller-init-non-existent-root", this); + return this.model.enqueueChange({ + isUndoable: !1 + }, (t => { + for (const n of Object.keys(e)) { + const o = this.model.document.getRoot(n); + t.insert(this.parse(e[n], o), o, 0) + } + })), Promise.resolve() + } + set(t, e = {}) { + let n = {}; + if ("string" == typeof t ? n.main = t : n = t, !this._checkIfRootsExists(Object.keys(n))) throw new b("datacontroller-set-non-existent-root", this); + this.model.enqueueChange(e.batchType || {}, (t => { + t.setSelection(null), t.removeSelectionAttribute(this.model.document.selection.getAttributeKeys()); + for (const e of Object.keys(n)) { + const o = this.model.document.getRoot(e); + t.remove(t.createRangeIn(o)), t.insert(this.parse(n[e], o), o, 0) + } + })) + } + parse(t, e = "$root") { + const n = this.processor.toView(t); + return this.toModel(n, e) + } + toModel(t, e = "$root") { + return this.model.change((n => this.upcastDispatcher.convert(t, n, e))) + } + addStyleProcessorRules(t) { + t(this.stylesProcessor) + } + registerRawContentMatcher(t) { + this.processor && this.processor !== this.htmlProcessor && this.processor.registerRawContentMatcher(t), this.htmlProcessor.registerRawContentMatcher(t) + } + destroy() { + this.stopListening() + } + _checkIfRootsExists(t) { + for (const e of t) + if (!this.model.document.getRoot(e)) return !1; + return !0 + } + } + class wd { + constructor(t, e) { + this._helpers = new Map, this._downcast = Ai(t), this._createConversionHelpers({ + name: "downcast", + dispatchers: this._downcast, + isDowncast: !0 + }), this._upcast = Ai(e), this._createConversionHelpers({ + name: "upcast", + dispatchers: this._upcast, + isDowncast: !1 + }) + } + addAlias(t, e) { + const n = this._downcast.includes(e); + if (!this._upcast.includes(e) && !n) throw new b("conversion-add-alias-dispatcher-not-registered", this); + this._createConversionHelpers({ + name: t, + dispatchers: [e], + isDowncast: n + }) + } + for (t) { + if (!this._helpers.has(t)) throw new b("conversion-for-unknown-group", this); + return this._helpers.get(t) + } + elementToElement(t) { + this.for("downcast").elementToElement(t); + for (const { + model: e, + view: n + } + of Ad(t)) this.for("upcast").elementToElement({ + model: e, + view: n, + converterPriority: t.converterPriority + }) + } + attributeToElement(t) { + this.for("downcast").attributeToElement(t); + for (const { + model: e, + view: n + } + of Ad(t)) this.for("upcast").elementToAttribute({ + view: n, + model: e, + converterPriority: t.converterPriority + }) + } + attributeToAttribute(t) { + this.for("downcast").attributeToAttribute(t); + for (const { + model: e, + view: n + } + of Ad(t)) this.for("upcast").attributeToAttribute({ + view: n, + model: e + }) + } + _createConversionHelpers({ + name: t, + dispatchers: e, + isDowncast: n + }) { + if (this._helpers.has(t)) throw new b("conversion-group-exists", this); + const o = n ? new cc(e) : new Pc(e); + this._helpers.set(t, o) + } + } + + function* Ad(t) { + if (t.model.values) + for (const e of t.model.values) { + const n = { + key: t.model.key, + value: e + }, + o = t.view[e], + i = t.upcastAlso ? t.upcastAlso[e] : void 0; + yield* Cd(n, o, i) + } else yield* Cd(t.model, t.view, t.upcastAlso) + } + + function* Cd(t, e, n) { + if (yield { + model: t, + view: e + }, n) + for (const e of Ai(n)) yield { + model: t, + view: e + } + } + class _d { + constructor(t) { + this.baseVersion = t, this.isDocumentOperation = null !== this.baseVersion, this.batch = null + } + _validate() {} + toJSON() { + const t = Object.assign({}, this); + return t.__className = this.constructor.className, delete t.batch, delete t.isDocumentOperation, t + } + static get className() { + return "Operation" + } + static fromJSON(t, e) { + return new this(t.baseVersion) + } + } + + function vd(t, e) { + const n = Ed(e), + o = n.reduce(((t, e) => t + e.offsetSize), 0), + i = t.parent; + Sd(t); + const r = t.index; + return i._insertChild(r, n), Dd(i, r + n.length), Dd(i, r), new Pl(t, t.getShiftedBy(o)) + } + + function yd(t) { + if (!t.isFlat) throw new b("operation-utils-remove-range-not-flat", this); + const e = t.start.parent; + Sd(t.start), Sd(t.end); + const n = e._removeChildren(t.start.index, t.end.index - t.start.index); + return Dd(e, t.start.index), n + } + + function xd(t, e) { + if (!t.isFlat) throw new b("operation-utils-move-range-not-flat", this); + const n = yd(t); + return vd(e = e._getTransformedByDeletion(t.start, t.end.offset - t.start.offset), n) + } + + function Ed(t) { + const e = []; + ! function t(n) { + if ("string" == typeof n) e.push(new Cl(n)); + else if (n instanceof _l) e.push(new Cl(n.data, n.getAttributes())); + else if (n instanceof wl) e.push(n); + else if (Q(n)) + for (const e of n) t(e) + }(t); + for (let t = 1; t < e.length; t++) { + const n = e[t], + o = e[t - 1]; + n instanceof Cl && o instanceof Cl && Td(n, o) && (e.splice(t - 1, 2, new Cl(o.data + n.data, o.getAttributes())), t--) + } + return e + } + + function Dd(t, e) { + const n = t.getChild(e - 1), + o = t.getChild(e); + if (n && o && n.is("$text") && o.is("$text") && Td(n, o)) { + const i = new Cl(n.data + o.data, n.getAttributes()); + t._removeChildren(e - 1, 2), t._insertChild(e - 1, i) + } + } + + function Sd(t) { + const e = t.textNode, + n = t.parent; + if (e) { + const o = t.offset - e.startOffset, + i = e.index; + n._removeChildren(i, 1); + const r = new Cl(e.data.substr(0, o), e.getAttributes()), + s = new Cl(e.data.substr(o), e.getAttributes()); + n._insertChild(i, [r, s]) + } + } + + function Td(t, e) { + const n = t.getAttributes(), + o = e.getAttributes(); + for (const t of n) { + if (t[1] !== e.getAttribute(t[0])) return !1; + o.next() + } + return o.next().done + } + class Bd extends _d { + constructor(t, e, n, o) { + super(o), this.sourcePosition = t.clone(), this.sourcePosition.stickiness = "toNext", this.howMany = e, this.targetPosition = n.clone(), this.targetPosition.stickiness = "toNone" + } + get type() { + return "$graveyard" == this.targetPosition.root.rootName ? "remove" : "$graveyard" == this.sourcePosition.root.rootName ? "reinsert" : "move" + } + get affectedSelectable() { + return [Pl._createFromPositionAndShift(this.sourcePosition, this.howMany), Pl._createFromPositionAndShift(this.targetPosition, 0)] + } + clone() { + return new Bd(this.sourcePosition, this.howMany, this.targetPosition, this.baseVersion) + } + getMovedRangeStart() { + return this.targetPosition._getTransformedByDeletion(this.sourcePosition, this.howMany) + } + getReversed() { + const t = this.sourcePosition._getTransformedByInsertion(this.targetPosition, this.howMany); + return new Bd(this.getMovedRangeStart(), this.howMany, t, this.baseVersion + 1) + } + _validate() { + const t = this.sourcePosition.parent, + e = this.targetPosition.parent, + n = this.sourcePosition.offset, + o = this.targetPosition.offset; + if (n + this.howMany > t.maxOffset) throw new b("move-operation-nodes-do-not-exist", this); + if (t === e && n < o && o < n + this.howMany) throw new b("move-operation-range-into-itself", this); + if (this.sourcePosition.root == this.targetPosition.root && "prefix" == Y(this.sourcePosition.getParentPath(), this.targetPosition.getParentPath())) { + const t = this.sourcePosition.path.length - 1; + if (this.targetPosition.path[t] >= n && this.targetPosition.path[t] < n + this.howMany) throw new b("move-operation-node-into-itself", this) + } + } + _execute() { + xd(Pl._createFromPositionAndShift(this.sourcePosition, this.howMany), this.targetPosition) + } + toJSON() { + const t = super.toJSON(); + return t.sourcePosition = this.sourcePosition.toJSON(), t.targetPosition = this.targetPosition.toJSON(), t + } + static get className() { + return "MoveOperation" + } + static fromJSON(t, e) { + const n = El.fromJSON(t.sourcePosition, e), + o = El.fromJSON(t.targetPosition, e); + return new this(n, t.howMany, o, t.baseVersion) + } + } + class Id extends _d { + constructor(t, e, n) { + super(n), this.position = t.clone(), this.position.stickiness = "toNone", this.nodes = new Al(Ed(e)), this.shouldReceiveAttributes = !1 + } + get type() { + return "insert" + } + get howMany() { + return this.nodes.maxOffset + } + get affectedSelectable() { + return this.position.clone() + } + clone() { + const t = new Al([...this.nodes].map((t => t._clone(!0)))), + e = new Id(this.position, t, this.baseVersion); + return e.shouldReceiveAttributes = this.shouldReceiveAttributes, e + } + getReversed() { + const t = this.position.root.document.graveyard, + e = new El(t, [0]); + return new Bd(this.position, this.nodes.maxOffset, e, this.baseVersion + 1) + } + _validate() { + const t = this.position.parent; + if (!t || t.maxOffset < this.position.offset) throw new b("insert-operation-position-invalid", this) + } + _execute() { + const t = this.nodes; + this.nodes = new Al([...t].map((t => t._clone(!0)))), vd(this.position, t) + } + toJSON() { + const t = super.toJSON(); + return t.position = this.position.toJSON(), t.nodes = this.nodes.toJSON(), t + } + static get className() { + return "InsertOperation" + } + static fromJSON(t, e) { + const n = []; + for (const e of t.nodes) e.name ? n.push(vl.fromJSON(e)) : n.push(Cl.fromJSON(e)); + const o = new Id(El.fromJSON(t.position, e), n, t.baseVersion); + return o.shouldReceiveAttributes = t.shouldReceiveAttributes, o + } + } + class Pd extends _d { + constructor(t, e, n, o, i) { + super(i), this.splitPosition = t.clone(), this.splitPosition.stickiness = "toNext", this.howMany = e, this.insertionPosition = n, this.graveyardPosition = o ? o.clone() : null, this.graveyardPosition && (this.graveyardPosition.stickiness = "toNext") + } + get type() { + return "split" + } + get moveTargetPosition() { + const t = this.insertionPosition.path.slice(); + return t.push(0), new El(this.insertionPosition.root, t) + } + get movedRange() { + const t = this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY); + return new Pl(this.splitPosition, t) + } + get affectedSelectable() { + const t = [Pl._createFromPositionAndShift(this.splitPosition, 0), Pl._createFromPositionAndShift(this.insertionPosition, 0)]; + return this.graveyardPosition && t.push(Pl._createFromPositionAndShift(this.graveyardPosition, 0)), t + } + clone() { + return new Pd(this.splitPosition, this.howMany, this.insertionPosition, this.graveyardPosition, this.baseVersion) + } + getReversed() { + const t = this.splitPosition.root.document.graveyard, + e = new El(t, [0]); + return new Rd(this.moveTargetPosition, this.howMany, this.splitPosition, e, this.baseVersion + 1) + } + _validate() { + const t = this.splitPosition.parent, + e = this.splitPosition.offset; + if (!t || t.maxOffset < e) throw new b("split-operation-position-invalid", this); + if (!t.parent) throw new b("split-operation-split-in-root", this); + if (this.howMany != t.maxOffset - this.splitPosition.offset) throw new b("split-operation-how-many-invalid", this); + if (this.graveyardPosition && !this.graveyardPosition.nodeAfter) throw new b("split-operation-graveyard-position-invalid", this) + } + _execute() { + const t = this.splitPosition.parent; + if (this.graveyardPosition) xd(Pl._createFromPositionAndShift(this.graveyardPosition, 1), this.insertionPosition); + else { + const e = t._clone(); + vd(this.insertionPosition, e) + } + xd(new Pl(El._createAt(t, this.splitPosition.offset), El._createAt(t, t.maxOffset)), this.moveTargetPosition) + } + toJSON() { + const t = super.toJSON(); + return t.splitPosition = this.splitPosition.toJSON(), t.insertionPosition = this.insertionPosition.toJSON(), this.graveyardPosition && (t.graveyardPosition = this.graveyardPosition.toJSON()), t + } + static get className() { + return "SplitOperation" + } + static getInsertionPosition(t) { + const e = t.path.slice(0, -1); + return e[e.length - 1]++, new El(t.root, e, "toPrevious") + } + static fromJSON(t, e) { + const n = El.fromJSON(t.splitPosition, e), + o = El.fromJSON(t.insertionPosition, e), + i = t.graveyardPosition ? El.fromJSON(t.graveyardPosition, e) : null; + return new this(n, t.howMany, o, i, t.baseVersion) + } + } + class Rd extends _d { + constructor(t, e, n, o, i) { + super(i), this.sourcePosition = t.clone(), this.sourcePosition.stickiness = "toPrevious", this.howMany = e, this.targetPosition = n.clone(), this.targetPosition.stickiness = "toNext", this.graveyardPosition = o.clone() + } + get type() { + return "merge" + } + get deletionPosition() { + return new El(this.sourcePosition.root, this.sourcePosition.path.slice(0, -1)) + } + get movedRange() { + const t = this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY); + return new Pl(this.sourcePosition, t) + } + get affectedSelectable() { + const t = this.sourcePosition.parent; + return [Pl._createOn(t), Pl._createFromPositionAndShift(this.targetPosition, 0), Pl._createFromPositionAndShift(this.graveyardPosition, 0)] + } + clone() { + return new Rd(this.sourcePosition, this.howMany, this.targetPosition, this.graveyardPosition, this.baseVersion) + } + getReversed() { + const t = this.targetPosition._getTransformedByMergeOperation(this), + e = this.sourcePosition.path.slice(0, -1), + n = new El(this.sourcePosition.root, e)._getTransformedByMergeOperation(this); + return new Pd(t, this.howMany, n, this.graveyardPosition, this.baseVersion + 1) + } + _validate() { + const t = this.sourcePosition.parent, + e = this.targetPosition.parent; + if (!t.parent) throw new b("merge-operation-source-position-invalid", this); + if (!e.parent) throw new b("merge-operation-target-position-invalid", this); + if (this.howMany != t.maxOffset) throw new b("merge-operation-how-many-invalid", this) + } + _execute() { + const t = this.sourcePosition.parent; + xd(Pl._createIn(t), this.targetPosition), xd(Pl._createOn(t), this.graveyardPosition) + } + toJSON() { + const t = super.toJSON(); + return t.sourcePosition = t.sourcePosition.toJSON(), t.targetPosition = t.targetPosition.toJSON(), t.graveyardPosition = t.graveyardPosition.toJSON(), t + } + static get className() { + return "MergeOperation" + } + static fromJSON(t, e) { + const n = El.fromJSON(t.sourcePosition, e), + o = El.fromJSON(t.targetPosition, e), + i = El.fromJSON(t.graveyardPosition, e); + return new this(n, t.howMany, o, i, t.baseVersion) + } + } + class zd extends _d { + constructor(t, e, n, o, i, r) { + super(r), this.name = t, this.oldRange = e ? e.clone() : null, this.newRange = n ? n.clone() : null, this.affectsData = i, this._markers = o + } + get type() { + return "marker" + } + get affectedSelectable() { + const t = []; + return this.oldRange && t.push(this.oldRange.clone()), this.newRange && (this.oldRange ? t.push(...this.newRange.getDifference(this.oldRange)) : t.push(this.newRange.clone())), t + } + clone() { + return new zd(this.name, this.oldRange, this.newRange, this._markers, this.affectsData, this.baseVersion) + } + getReversed() { + return new zd(this.name, this.newRange, this.oldRange, this._markers, this.affectsData, this.baseVersion + 1) + } + _execute() { + this.newRange ? this._markers._set(this.name, this.newRange, !0, this.affectsData) : this._markers._remove(this.name) + } + toJSON() { + const t = super.toJSON(); + return this.oldRange && (t.oldRange = this.oldRange.toJSON()), this.newRange && (t.newRange = this.newRange.toJSON()), delete t._markers, t + } + static get className() { + return "MarkerOperation" + } + static fromJSON(t, e) { + return new zd(t.name, t.oldRange ? Pl.fromJSON(t.oldRange, e) : null, t.newRange ? Pl.fromJSON(t.newRange, e) : null, e.model.markers, t.affectsData, t.baseVersion) + } + } + const Vd = function(t, e) { + return il(t, e) + }; + class Od extends _d { + constructor(t, e, n, o, i) { + super(i), this.range = t.clone(), this.key = e, this.oldValue = void 0 === n ? null : n, this.newValue = void 0 === o ? null : o + } + get type() { + return null === this.oldValue ? "addAttribute" : null === this.newValue ? "removeAttribute" : "changeAttribute" + } + get affectedSelectable() { + return this.range.clone() + } + clone() { + return new Od(this.range, this.key, this.oldValue, this.newValue, this.baseVersion) + } + getReversed() { + return new Od(this.range, this.key, this.newValue, this.oldValue, this.baseVersion + 1) + } + toJSON() { + const t = super.toJSON(); + return t.range = this.range.toJSON(), t + } + _validate() { + if (!this.range.isFlat) throw new b("attribute-operation-range-not-flat", this); + for (const t of this.range.getItems({ + shallow: !0 + })) { + if (null !== this.oldValue && !Vd(t.getAttribute(this.key), this.oldValue)) throw new b("attribute-operation-wrong-old-value", this, { + item: t, + key: this.key, + value: this.oldValue + }); + if (null === this.oldValue && null !== this.newValue && t.hasAttribute(this.key)) throw new b("attribute-operation-attribute-exists", this, { + node: t, + key: this.key + }) + } + } + _execute() { + Vd(this.oldValue, this.newValue) || function(t, e, n) { + Sd(t.start), Sd(t.end); + for (const o of t.getItems({ + shallow: !0 + })) { + const t = o.is("$textProxy") ? o.textNode : o; + null !== n ? t._setAttribute(e, n) : t._removeAttribute(e), Dd(t.parent, t.index) + } + Dd(t.end.parent, t.end.index) + }(this.range, this.key, this.newValue) + } + static get className() { + return "AttributeOperation" + } + static fromJSON(t, e) { + return new Od(Pl.fromJSON(t.range, e), t.key, t.oldValue, t.newValue, t.baseVersion) + } + } + class Fd extends _d { + get type() { + return "noop" + } + get affectedSelectable() { + return null + } + clone() { + return new Fd(this.baseVersion) + } + getReversed() { + return new Fd(this.baseVersion + 1) + } + _execute() {} + static get className() { + return "NoOperation" + } + } + class Md extends _d { + constructor(t, e, n, o) { + super(o), this.position = t, this.position.stickiness = "toNext", this.oldName = e, this.newName = n + } + get type() { + return "rename" + } + get affectedSelectable() { + return this.position.nodeAfter + } + clone() { + return new Md(this.position.clone(), this.oldName, this.newName, this.baseVersion) + } + getReversed() { + return new Md(this.position.clone(), this.newName, this.oldName, this.baseVersion + 1) + } + _validate() { + const t = this.position.nodeAfter; + if (!(t instanceof vl)) throw new b("rename-operation-wrong-position", this); + if (t.name !== this.oldName) throw new b("rename-operation-wrong-name", this) + } + _execute() { + this.position.nodeAfter.name = this.newName + } + toJSON() { + const t = super.toJSON(); + return t.position = this.position.toJSON(), t + } + static get className() { + return "RenameOperation" + } + static fromJSON(t, e) { + return new Md(El.fromJSON(t.position, e), t.oldName, t.newName, t.baseVersion) + } + } + class Nd extends _d { + constructor(t, e, n, o, i) { + super(i), this.root = t, this.key = e, this.oldValue = void 0 === n ? null : n, this.newValue = void 0 === o ? null : o + } + get type() { + return null === this.oldValue ? "addRootAttribute" : null === this.newValue ? "removeRootAttribute" : "changeRootAttribute" + } + get affectedSelectable() { + return this.root + } + clone() { + return new Nd(this.root, this.key, this.oldValue, this.newValue, this.baseVersion) + } + getReversed() { + return new Nd(this.root, this.key, this.newValue, this.oldValue, this.baseVersion + 1) + } + _validate() { + if (this.root != this.root.root || this.root.is("documentFragment")) throw new b("rootattribute-operation-not-a-root", this, { + root: this.root, + key: this.key + }); + if (null !== this.oldValue && this.root.getAttribute(this.key) !== this.oldValue) throw new b("rootattribute-operation-wrong-old-value", this, { + root: this.root, + key: this.key + }); + if (null === this.oldValue && null !== this.newValue && this.root.hasAttribute(this.key)) throw new b("rootattribute-operation-attribute-exists", this, { + root: this.root, + key: this.key + }) + } + _execute() { + null !== this.newValue ? this.root._setAttribute(this.key, this.newValue) : this.root._removeAttribute(this.key) + } + toJSON() { + const t = super.toJSON(); + return t.root = this.root.toJSON(), t + } + static get className() { + return "RootAttributeOperation" + } + static fromJSON(t, e) { + if (!e.getRoot(t.root)) throw new b("rootattribute-operation-fromjson-no-root", this, { + rootName: t.root + }); + return new Nd(e.getRoot(t.root), t.key, t.oldValue, t.newValue, t.baseVersion) + } + } + class Ld extends _d { + constructor(t, e, n, o, i) { + if (super(i), this.rootName = t, this.elementName = e, this.isAdd = n, this._document = o, !this._document.getRoot(this.rootName)) { + this._document.createRoot(this.elementName, this.rootName)._isAttached = !1 + } + } + get type() { + return this.isAdd ? "addRoot" : "detachRoot" + } + get affectedSelectable() { + return this._document.getRoot(this.rootName) + } + clone() { + return new Ld(this.rootName, this.elementName, this.isAdd, this._document, this.baseVersion) + } + getReversed() { + return new Ld(this.rootName, this.elementName, !this.isAdd, this._document, this.baseVersion + 1) + } + _validate() { + const t = this._document.getRoot(this.rootName); + if (t.isAttached() && this.isAdd) throw new b("root-operation-root-attached", this); + if (!t.isAttached() && !this.isAdd) throw new b("root-operation-root-detached", this) + } + _execute() { + this._document.getRoot(this.rootName)._isAttached = this.isAdd + } + toJSON() { + const t = super.toJSON(); + return delete t._document, t + } + static get className() { + return "RootOperation" + } + static fromJSON(t, e) { + return new Ld(t.rootName, t.elementName, t.isAdd, e, t.baseVersion) + } + } + const Hd = {}; + Hd[Od.className] = Od, Hd[Id.className] = Id, Hd[zd.className] = zd, Hd[Bd.className] = Bd, Hd[Fd.className] = Fd, Hd[_d.className] = _d, Hd[Md.className] = Md, Hd[Nd.className] = Nd, Hd[Ld.className] = Ld, Hd[Pd.className] = Pd, Hd[Rd.className] = Rd; + class jd { + static fromJSON(t, e) { + return Hd[t.__className].fromJSON(t, e) + } + } + const qd = new Map; + + function Wd(t, e, n) { + let o = qd.get(t); + o || (o = new Map, qd.set(t, o)), o.set(e, n) + } + + function Ud(t) { + return [t] + } + + function $d(t, e, n = {}) { + const o = function(t, e) { + const n = qd.get(t); + return n && n.has(e) ? n.get(e) : Ud + }(t.constructor, e.constructor); + try { + return o(t = t.clone(), e, n) + } catch (t) { + throw t + } + } + + function Gd(t, e, n) { + t = t.slice(), e = e.slice(); + const o = new Kd(n.document, n.useRelations, n.forceWeakRemove); + o.setOriginalOperations(t), o.setOriginalOperations(e); + const i = o.originalOperations; + if (0 == t.length || 0 == e.length) return { + operationsA: t, + operationsB: e, + originalOperations: i + }; + const r = new WeakMap; + for (const e of t) r.set(e, 0); + const s = { + nextBaseVersionA: t[t.length - 1].baseVersion + 1, + nextBaseVersionB: e[e.length - 1].baseVersion + 1, + originalOperationsACount: t.length, + originalOperationsBCount: e.length + }; + let a = 0; + for (; a < t.length;) { + const n = t[a], + i = r.get(n); + if (i == e.length) { + a++; + continue + } + const s = e[i], + l = $d(n, s, o.getContext(n, s, !0)), + c = $d(s, n, o.getContext(s, n, !1)); + o.updateRelation(n, s), o.setOriginalOperations(l, n), o.setOriginalOperations(c, s); + for (const t of l) r.set(t, i + c.length); + t.splice(a, 1, ...l), e.splice(i, 1, ...c) + } + if (n.padWithNoOps) { + const n = t.length - s.originalOperationsACount, + o = e.length - s.originalOperationsBCount; + Jd(t, o - n), Jd(e, n - o) + } + return Zd(t, s.nextBaseVersionB), Zd(e, s.nextBaseVersionA), { + operationsA: t, + operationsB: e, + originalOperations: i + } + } + class Kd { + constructor(t, e, n = !1) { + this.originalOperations = new Map, this._history = t.history, this._useRelations = e, this._forceWeakRemove = !!n, this._relations = new Map + } + setOriginalOperations(t, e = null) { + const n = e ? this.originalOperations.get(e) : null; + for (const e of t) this.originalOperations.set(e, n || e) + } + updateRelation(t, e) { + if (t instanceof Bd) e instanceof Rd ? t.targetPosition.isEqual(e.sourcePosition) || e.movedRange.containsPosition(t.targetPosition) ? this._setRelation(t, e, "insertAtSource") : t.targetPosition.isEqual(e.deletionPosition) ? this._setRelation(t, e, "insertBetween") : t.targetPosition.isAfter(e.sourcePosition) && this._setRelation(t, e, "moveTargetAfter") : e instanceof Bd && (t.targetPosition.isEqual(e.sourcePosition) || t.targetPosition.isBefore(e.sourcePosition) ? this._setRelation(t, e, "insertBefore") : this._setRelation(t, e, "insertAfter")); + else if (t instanceof Pd) { + if (e instanceof Rd) t.splitPosition.isBefore(e.sourcePosition) && this._setRelation(t, e, "splitBefore"); + else if (e instanceof Bd) + if (t.splitPosition.isEqual(e.sourcePosition) || t.splitPosition.isBefore(e.sourcePosition)) this._setRelation(t, e, "splitBefore"); + else { + const n = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany); + if (t.splitPosition.hasSameParentAs(e.sourcePosition) && n.containsPosition(t.splitPosition)) { + const o = n.end.offset - t.splitPosition.offset, + i = t.splitPosition.offset - n.start.offset; + this._setRelation(t, e, { + howMany: o, + offset: i + }) + } + } + } else if (t instanceof Rd) e instanceof Rd ? (t.targetPosition.isEqual(e.sourcePosition) || this._setRelation(t, e, "mergeTargetNotMoved"), t.sourcePosition.isEqual(e.targetPosition) && this._setRelation(t, e, "mergeSourceNotMoved"), t.sourcePosition.isEqual(e.sourcePosition) && this._setRelation(t, e, "mergeSameElement")) : e instanceof Pd && t.sourcePosition.isEqual(e.splitPosition) && this._setRelation(t, e, "splitAtSource"); + else if (t instanceof zd) { + const n = t.newRange; + if (!n) return; + if (e instanceof Bd) { + const o = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany), + i = o.containsPosition(n.start) || o.start.isEqual(n.start), + r = o.containsPosition(n.end) || o.end.isEqual(n.end); + !i && !r || o.containsRange(n) || this._setRelation(t, e, { + side: i ? "left" : "right", + path: i ? n.start.path.slice() : n.end.path.slice() + }) + } else if (e instanceof Rd) { + const o = n.start.isEqual(e.targetPosition), + i = n.start.isEqual(e.deletionPosition), + r = n.end.isEqual(e.deletionPosition), + s = n.end.isEqual(e.sourcePosition); + (o || i || r || s) && this._setRelation(t, e, { + wasInLeftElement: o, + wasStartBeforeMergedElement: i, + wasEndBeforeMergedElement: r, + wasInRightElement: s + }) + } + } + } + getContext(t, e, n) { + return { + aIsStrong: n, + aWasUndone: this._wasUndone(t), + bWasUndone: this._wasUndone(e), + abRelation: this._useRelations ? this._getRelation(t, e) : null, + baRelation: this._useRelations ? this._getRelation(e, t) : null, + forceWeakRemove: this._forceWeakRemove + } + } + _wasUndone(t) { + const e = this.originalOperations.get(t); + return e.wasUndone || this._history.isUndoneOperation(e) + } + _getRelation(t, e) { + const n = this.originalOperations.get(e), + o = this._history.getUndoneOperation(n); + if (!o) return null; + const i = this.originalOperations.get(t), + r = this._relations.get(i); + return r && r.get(o) || null + } + _setRelation(t, e, n) { + const o = this.originalOperations.get(t), + i = this.originalOperations.get(e); + let r = this._relations.get(o); + r || (r = new Map, this._relations.set(o, r)), r.set(i, n) + } + } + + function Zd(t, e) { + for (const n of t) n.baseVersion = e++ + } + + function Jd(t, e) { + for (let n = 0; n < e; n++) t.push(new Fd(0)) + } + + function Yd(t, e, n) { + const o = t.nodes.getNode(0).getAttribute(e); + if (o == n) return null; + const i = new Pl(t.position, t.position.getShiftedBy(t.howMany)); + return new Od(i, e, o, n, 0) + } + + function Qd(t, e) { + return null === t.targetPosition._getTransformedByDeletion(e.sourcePosition, e.howMany) + } + + function Xd(t, e) { + const n = []; + for (let o = 0; o < t.length; o++) { + const i = t[o], + r = new Bd(i.start, i.end.offset - i.start.offset, e, 0); + n.push(r); + for (let e = o + 1; e < t.length; e++) t[e] = t[e]._getTransformedByMove(r.sourcePosition, r.targetPosition, r.howMany)[0]; + e = e._getTransformedByMove(r.sourcePosition, r.targetPosition, r.howMany) + } + return n + } + Wd(Od, Od, ((t, e, n) => { + if (t.key === e.key && t.range.start.hasSameParentAs(e.range.start)) { + const o = t.range.getDifference(e.range).map((e => new Od(e, t.key, t.oldValue, t.newValue, 0))), + i = t.range.getIntersection(e.range); + return i && n.aIsStrong && o.push(new Od(i, e.key, e.newValue, t.newValue, 0)), 0 == o.length ? [new Fd(0)] : o + } + return [t] + })), Wd(Od, Id, ((t, e) => { + if (t.range.start.hasSameParentAs(e.position) && t.range.containsPosition(e.position)) { + const n = t.range._getTransformedByInsertion(e.position, e.howMany, !e.shouldReceiveAttributes).map((e => new Od(e, t.key, t.oldValue, t.newValue, t.baseVersion))); + if (e.shouldReceiveAttributes) { + const o = Yd(e, t.key, t.oldValue); + o && n.unshift(o) + } + return n + } + return t.range = t.range._getTransformedByInsertion(e.position, e.howMany, !1)[0], [t] + })), Wd(Od, Rd, ((t, e) => { + const n = []; + t.range.start.hasSameParentAs(e.deletionPosition) && (t.range.containsPosition(e.deletionPosition) || t.range.start.isEqual(e.deletionPosition)) && n.push(Pl._createFromPositionAndShift(e.graveyardPosition, 1)); + const o = t.range._getTransformedByMergeOperation(e); + return o.isCollapsed || n.push(o), n.map((e => new Od(e, t.key, t.oldValue, t.newValue, t.baseVersion))) + })), Wd(Od, Bd, ((t, e) => { + const n = function(t, e) { + const n = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany); + let o = null, + i = []; + n.containsRange(t, !0) ? o = t : t.start.hasSameParentAs(n.start) ? (i = t.getDifference(n), o = t.getIntersection(n)) : i = [t]; + const r = []; + for (let t of i) { + t = t._getTransformedByDeletion(e.sourcePosition, e.howMany); + const n = e.getMovedRangeStart(), + o = t.start.hasSameParentAs(n), + i = t._getTransformedByInsertion(n, e.howMany, o); + r.push(...i) + } + o && r.push(o._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany, !1)[0]); + return r + }(t.range, e); + return n.map((e => new Od(e, t.key, t.oldValue, t.newValue, t.baseVersion))) + })), Wd(Od, Pd, ((t, e) => { + if (t.range.end.isEqual(e.insertionPosition)) return e.graveyardPosition || t.range.end.offset++, [t]; + if (t.range.start.hasSameParentAs(e.splitPosition) && t.range.containsPosition(e.splitPosition)) { + const n = t.clone(); + return n.range = new Pl(e.moveTargetPosition.clone(), t.range.end._getCombined(e.splitPosition, e.moveTargetPosition)), t.range.end = e.splitPosition.clone(), t.range.end.stickiness = "toPrevious", [t, n] + } + return t.range = t.range._getTransformedBySplitOperation(e), [t] + })), Wd(Id, Od, ((t, e) => { + const n = [t]; + if (t.shouldReceiveAttributes && t.position.hasSameParentAs(e.range.start) && e.range.containsPosition(t.position)) { + const o = Yd(t, e.key, e.newValue); + o && n.push(o) + } + return n + })), Wd(Id, Id, ((t, e, n) => (t.position.isEqual(e.position) && n.aIsStrong || (t.position = t.position._getTransformedByInsertOperation(e)), [t]))), Wd(Id, Bd, ((t, e) => (t.position = t.position._getTransformedByMoveOperation(e), [t]))), Wd(Id, Pd, ((t, e) => (t.position = t.position._getTransformedBySplitOperation(e), [t]))), Wd(Id, Rd, ((t, e) => (t.position = t.position._getTransformedByMergeOperation(e), [t]))), Wd(zd, Id, ((t, e) => (t.oldRange && (t.oldRange = t.oldRange._getTransformedByInsertOperation(e)[0]), t.newRange && (t.newRange = t.newRange._getTransformedByInsertOperation(e)[0]), [t]))), Wd(zd, zd, ((t, e, n) => { + if (t.name == e.name) { + if (!n.aIsStrong) return [new Fd(0)]; + t.oldRange = e.newRange ? e.newRange.clone() : null + } + return [t] + })), Wd(zd, Rd, ((t, e) => (t.oldRange && (t.oldRange = t.oldRange._getTransformedByMergeOperation(e)), t.newRange && (t.newRange = t.newRange._getTransformedByMergeOperation(e)), [t]))), Wd(zd, Bd, ((t, e, n) => { + if (t.oldRange && (t.oldRange = Pl._createFromRanges(t.oldRange._getTransformedByMoveOperation(e))), t.newRange) { + if (n.abRelation) { + const o = Pl._createFromRanges(t.newRange._getTransformedByMoveOperation(e)); + if ("left" == n.abRelation.side && e.targetPosition.isEqual(t.newRange.start)) return t.newRange.end = o.end, t.newRange.start.path = n.abRelation.path, [t]; + if ("right" == n.abRelation.side && e.targetPosition.isEqual(t.newRange.end)) return t.newRange.start = o.start, t.newRange.end.path = n.abRelation.path, [t] + } + t.newRange = Pl._createFromRanges(t.newRange._getTransformedByMoveOperation(e)) + } + return [t] + })), Wd(zd, Pd, ((t, e, n) => { + if (t.oldRange && (t.oldRange = t.oldRange._getTransformedBySplitOperation(e)), t.newRange) { + if (n.abRelation) { + const o = t.newRange._getTransformedBySplitOperation(e); + return t.newRange.start.isEqual(e.splitPosition) && n.abRelation.wasStartBeforeMergedElement ? t.newRange.start = El._createAt(e.insertionPosition) : t.newRange.start.isEqual(e.splitPosition) && !n.abRelation.wasInLeftElement && (t.newRange.start = El._createAt(e.moveTargetPosition)), t.newRange.end.isEqual(e.splitPosition) && n.abRelation.wasInRightElement ? t.newRange.end = El._createAt(e.moveTargetPosition) : t.newRange.end.isEqual(e.splitPosition) && n.abRelation.wasEndBeforeMergedElement ? t.newRange.end = El._createAt(e.insertionPosition) : t.newRange.end = o.end, [t] + } + t.newRange = t.newRange._getTransformedBySplitOperation(e) + } + return [t] + })), Wd(Rd, Id, ((t, e) => (t.sourcePosition.hasSameParentAs(e.position) && (t.howMany += e.howMany), t.sourcePosition = t.sourcePosition._getTransformedByInsertOperation(e), t.targetPosition = t.targetPosition._getTransformedByInsertOperation(e), [t]))), Wd(Rd, Rd, ((t, e, n) => { + if (t.sourcePosition.isEqual(e.sourcePosition) && t.targetPosition.isEqual(e.targetPosition)) { + if (n.bWasUndone) { + const n = e.graveyardPosition.path.slice(); + return n.push(0), t.sourcePosition = new El(e.graveyardPosition.root, n), t.howMany = 0, [t] + } + return [new Fd(0)] + } + if (t.sourcePosition.isEqual(e.sourcePosition) && !t.targetPosition.isEqual(e.targetPosition) && !n.bWasUndone && "splitAtSource" != n.abRelation) { + const o = "$graveyard" == t.targetPosition.root.rootName, + i = "$graveyard" == e.targetPosition.root.rootName; + if (i && !o || !(o && !i) && n.aIsStrong) { + const n = e.targetPosition._getTransformedByMergeOperation(e), + o = t.targetPosition._getTransformedByMergeOperation(e); + return [new Bd(n, t.howMany, o, 0)] + } + return [new Fd(0)] + } + return t.sourcePosition.hasSameParentAs(e.targetPosition) && (t.howMany += e.howMany), t.sourcePosition = t.sourcePosition._getTransformedByMergeOperation(e), t.targetPosition = t.targetPosition._getTransformedByMergeOperation(e), t.graveyardPosition.isEqual(e.graveyardPosition) && n.aIsStrong || (t.graveyardPosition = t.graveyardPosition._getTransformedByMergeOperation(e)), [t] + })), Wd(Rd, Bd, ((t, e, n) => { + const o = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany); + return "remove" == e.type && !n.bWasUndone && !n.forceWeakRemove && t.deletionPosition.hasSameParentAs(e.sourcePosition) && o.containsPosition(t.sourcePosition) ? [new Fd(0)] : (t.sourcePosition.hasSameParentAs(e.targetPosition) && (t.howMany += e.howMany), t.sourcePosition.hasSameParentAs(e.sourcePosition) && (t.howMany -= e.howMany), t.sourcePosition = t.sourcePosition._getTransformedByMoveOperation(e), t.targetPosition = t.targetPosition._getTransformedByMoveOperation(e), t.graveyardPosition.isEqual(e.targetPosition) || (t.graveyardPosition = t.graveyardPosition._getTransformedByMoveOperation(e)), [t]) + })), Wd(Rd, Pd, ((t, e, n) => { + if (e.graveyardPosition && (t.graveyardPosition = t.graveyardPosition._getTransformedByDeletion(e.graveyardPosition, 1), t.deletionPosition.isEqual(e.graveyardPosition) && (t.howMany = e.howMany)), t.targetPosition.isEqual(e.splitPosition)) { + const o = 0 != e.howMany, + i = e.graveyardPosition && t.deletionPosition.isEqual(e.graveyardPosition); + if (o || i || "mergeTargetNotMoved" == n.abRelation) return t.sourcePosition = t.sourcePosition._getTransformedBySplitOperation(e), [t] + } + if (t.sourcePosition.isEqual(e.splitPosition)) { + if ("mergeSourceNotMoved" == n.abRelation) return t.howMany = 0, t.targetPosition = t.targetPosition._getTransformedBySplitOperation(e), [t]; + if ("mergeSameElement" == n.abRelation || t.sourcePosition.offset > 0) return t.sourcePosition = e.moveTargetPosition.clone(), t.targetPosition = t.targetPosition._getTransformedBySplitOperation(e), [t] + } + return t.sourcePosition.hasSameParentAs(e.splitPosition) && (t.howMany = e.splitPosition.offset), t.sourcePosition = t.sourcePosition._getTransformedBySplitOperation(e), t.targetPosition = t.targetPosition._getTransformedBySplitOperation(e), [t] + })), Wd(Bd, Id, ((t, e) => { + const n = Pl._createFromPositionAndShift(t.sourcePosition, t.howMany)._getTransformedByInsertOperation(e, !1)[0]; + return t.sourcePosition = n.start, t.howMany = n.end.offset - n.start.offset, t.targetPosition.isEqual(e.position) || (t.targetPosition = t.targetPosition._getTransformedByInsertOperation(e)), [t] + })), Wd(Bd, Bd, ((t, e, n) => { + const o = Pl._createFromPositionAndShift(t.sourcePosition, t.howMany), + i = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany); + let r, s = n.aIsStrong, + a = !n.aIsStrong; + if ("insertBefore" == n.abRelation || "insertAfter" == n.baRelation ? a = !0 : "insertAfter" != n.abRelation && "insertBefore" != n.baRelation || (a = !1), r = t.targetPosition.isEqual(e.targetPosition) && a ? t.targetPosition._getTransformedByDeletion(e.sourcePosition, e.howMany) : t.targetPosition._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany), Qd(t, e) && Qd(e, t)) return [e.getReversed()]; + if (o.containsPosition(e.targetPosition) && o.containsRange(i, !0)) return o.start = o.start._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany), o.end = o.end._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany), Xd([o], r); + if (i.containsPosition(t.targetPosition) && i.containsRange(o, !0)) return o.start = o.start._getCombined(e.sourcePosition, e.getMovedRangeStart()), o.end = o.end._getCombined(e.sourcePosition, e.getMovedRangeStart()), Xd([o], r); + const l = Y(t.sourcePosition.getParentPath(), e.sourcePosition.getParentPath()); + if ("prefix" == l || "extension" == l) return o.start = o.start._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany), o.end = o.end._getTransformedByMove(e.sourcePosition, e.targetPosition, e.howMany), Xd([o], r); + "remove" != t.type || "remove" == e.type || n.aWasUndone || n.forceWeakRemove ? "remove" == t.type || "remove" != e.type || n.bWasUndone || n.forceWeakRemove || (s = !1) : s = !0; + const c = [], + d = o.getDifference(i); + for (const t of d) { + t.start = t.start._getTransformedByDeletion(e.sourcePosition, e.howMany), t.end = t.end._getTransformedByDeletion(e.sourcePosition, e.howMany); + const n = "same" == Y(t.start.getParentPath(), e.getMovedRangeStart().getParentPath()), + o = t._getTransformedByInsertion(e.getMovedRangeStart(), e.howMany, n); + c.push(...o) + } + const h = o.getIntersection(i); + return null !== h && s && (h.start = h.start._getCombined(e.sourcePosition, e.getMovedRangeStart()), h.end = h.end._getCombined(e.sourcePosition, e.getMovedRangeStart()), 0 === c.length ? c.push(h) : 1 == c.length ? i.start.isBefore(o.start) || i.start.isEqual(o.start) ? c.unshift(h) : c.push(h) : c.splice(1, 0, h)), 0 === c.length ? [new Fd(t.baseVersion)] : Xd(c, r) + })), Wd(Bd, Pd, ((t, e, n) => { + let o = t.targetPosition.clone(); + t.targetPosition.isEqual(e.insertionPosition) && e.graveyardPosition && "moveTargetAfter" != n.abRelation || (o = t.targetPosition._getTransformedBySplitOperation(e)); + const i = Pl._createFromPositionAndShift(t.sourcePosition, t.howMany); + if (i.end.isEqual(e.insertionPosition)) return e.graveyardPosition || t.howMany++, t.targetPosition = o, [t]; + if (i.start.hasSameParentAs(e.splitPosition) && i.containsPosition(e.splitPosition)) { + let t = new Pl(e.splitPosition, i.end); + t = t._getTransformedBySplitOperation(e); + return Xd([new Pl(i.start, e.splitPosition), t], o) + } + t.targetPosition.isEqual(e.splitPosition) && "insertAtSource" == n.abRelation && (o = e.moveTargetPosition), t.targetPosition.isEqual(e.insertionPosition) && "insertBetween" == n.abRelation && (o = t.targetPosition); + const r = [i._getTransformedBySplitOperation(e)]; + if (e.graveyardPosition) { + const o = i.start.isEqual(e.graveyardPosition) || i.containsPosition(e.graveyardPosition); + t.howMany > 1 && o && !n.aWasUndone && r.push(Pl._createFromPositionAndShift(e.insertionPosition, 1)) + } + return Xd(r, o) + })), Wd(Bd, Rd, ((t, e, n) => { + const o = Pl._createFromPositionAndShift(t.sourcePosition, t.howMany); + if (e.deletionPosition.hasSameParentAs(t.sourcePosition) && o.containsPosition(e.sourcePosition)) + if ("remove" != t.type || n.forceWeakRemove) { + if (1 == t.howMany) return n.bWasUndone ? (t.sourcePosition = e.graveyardPosition.clone(), t.targetPosition = t.targetPosition._getTransformedByMergeOperation(e), [t]) : [new Fd(0)] + } else if (!n.aWasUndone) { + const n = []; + let o = e.graveyardPosition.clone(), + i = e.targetPosition._getTransformedByMergeOperation(e); + t.howMany > 1 && (n.push(new Bd(t.sourcePosition, t.howMany - 1, t.targetPosition, 0)), o = o._getTransformedByMove(t.sourcePosition, t.targetPosition, t.howMany - 1), i = i._getTransformedByMove(t.sourcePosition, t.targetPosition, t.howMany - 1)); + const r = e.deletionPosition._getCombined(t.sourcePosition, t.targetPosition), + s = new Bd(o, 1, r, 0), + a = s.getMovedRangeStart().path.slice(); + a.push(0); + const l = new El(s.targetPosition.root, a); + i = i._getTransformedByMove(o, r, 1); + const c = new Bd(i, e.howMany, l, 0); + return n.push(s), n.push(c), n + } + const i = Pl._createFromPositionAndShift(t.sourcePosition, t.howMany)._getTransformedByMergeOperation(e); + return t.sourcePosition = i.start, t.howMany = i.end.offset - i.start.offset, t.targetPosition = t.targetPosition._getTransformedByMergeOperation(e), [t] + })), Wd(Md, Id, ((t, e) => (t.position = t.position._getTransformedByInsertOperation(e), [t]))), Wd(Md, Rd, ((t, e) => t.position.isEqual(e.deletionPosition) ? (t.position = e.graveyardPosition.clone(), t.position.stickiness = "toNext", [t]) : (t.position = t.position._getTransformedByMergeOperation(e), [t]))), Wd(Md, Bd, ((t, e) => (t.position = t.position._getTransformedByMoveOperation(e), [t]))), Wd(Md, Md, ((t, e, n) => { + if (t.position.isEqual(e.position)) { + if (!n.aIsStrong) return [new Fd(0)]; + t.oldName = e.newName + } + return [t] + })), Wd(Md, Pd, ((t, e) => { + if ("same" == Y(t.position.path, e.splitPosition.getParentPath()) && !e.graveyardPosition) { + const e = new Md(t.position.getShiftedBy(1), t.oldName, t.newName, 0); + return [t, e] + } + return t.position = t.position._getTransformedBySplitOperation(e), [t] + })), Wd(Nd, Nd, ((t, e, n) => { + if (t.root === e.root && t.key === e.key) { + if (!n.aIsStrong || t.newValue === e.newValue) return [new Fd(0)]; + t.oldValue = e.newValue + } + return [t] + })), Wd(Ld, Ld, ((t, e, n) => t.rootName !== e.rootName || t.isAdd !== e.isAdd || n.bWasUndone ? [t] : [new Fd(0)])), Wd(Pd, Id, ((t, e) => (t.splitPosition.hasSameParentAs(e.position) && t.splitPosition.offset < e.position.offset && (t.howMany += e.howMany), t.splitPosition = t.splitPosition._getTransformedByInsertOperation(e), t.insertionPosition = t.insertionPosition._getTransformedByInsertOperation(e), [t]))), Wd(Pd, Rd, ((t, e, n) => { + if (!t.graveyardPosition && !n.bWasUndone && t.splitPosition.hasSameParentAs(e.sourcePosition)) { + const n = e.graveyardPosition.path.slice(); + n.push(0); + const o = new El(e.graveyardPosition.root, n), + i = Pd.getInsertionPosition(new El(e.graveyardPosition.root, n)), + r = new Pd(o, 0, i, null, 0); + return t.splitPosition = t.splitPosition._getTransformedByMergeOperation(e), t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), t.graveyardPosition = r.insertionPosition.clone(), t.graveyardPosition.stickiness = "toNext", [r, t] + } + return t.splitPosition.hasSameParentAs(e.deletionPosition) && !t.splitPosition.isAfter(e.deletionPosition) && t.howMany--, t.splitPosition.hasSameParentAs(e.targetPosition) && (t.howMany += e.howMany), t.splitPosition = t.splitPosition._getTransformedByMergeOperation(e), t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), t.graveyardPosition && (t.graveyardPosition = t.graveyardPosition._getTransformedByMergeOperation(e)), [t] + })), Wd(Pd, Bd, ((t, e, n) => { + const o = Pl._createFromPositionAndShift(e.sourcePosition, e.howMany); + if (t.graveyardPosition) { + const i = o.start.isEqual(t.graveyardPosition) || o.containsPosition(t.graveyardPosition); + if (!n.bWasUndone && i) { + const n = t.splitPosition._getTransformedByMoveOperation(e), + o = t.graveyardPosition._getTransformedByMoveOperation(e), + i = o.path.slice(); + i.push(0); + const r = new El(o.root, i); + return [new Bd(n, t.howMany, r, 0)] + } + t.graveyardPosition = t.graveyardPosition._getTransformedByMoveOperation(e) + } + const i = t.splitPosition.isEqual(e.targetPosition); + if (i && ("insertAtSource" == n.baRelation || "splitBefore" == n.abRelation)) return t.howMany += e.howMany, t.splitPosition = t.splitPosition._getTransformedByDeletion(e.sourcePosition, e.howMany), t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), [t]; + if (i && n.abRelation && n.abRelation.howMany) { + const { + howMany: e, + offset: o + } = n.abRelation; + return t.howMany += e, t.splitPosition = t.splitPosition.getShiftedBy(o), [t] + } + if (t.splitPosition.hasSameParentAs(e.sourcePosition) && o.containsPosition(t.splitPosition)) { + const n = e.howMany - (t.splitPosition.offset - e.sourcePosition.offset); + return t.howMany -= n, t.splitPosition.hasSameParentAs(e.targetPosition) && t.splitPosition.offset < e.targetPosition.offset && (t.howMany += e.howMany), t.splitPosition = e.sourcePosition.clone(), t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), [t] + } + return e.sourcePosition.isEqual(e.targetPosition) || (t.splitPosition.hasSameParentAs(e.sourcePosition) && t.splitPosition.offset <= e.sourcePosition.offset && (t.howMany -= e.howMany), t.splitPosition.hasSameParentAs(e.targetPosition) && t.splitPosition.offset < e.targetPosition.offset && (t.howMany += e.howMany)), t.splitPosition.stickiness = "toNone", t.splitPosition = t.splitPosition._getTransformedByMoveOperation(e), t.splitPosition.stickiness = "toNext", t.graveyardPosition ? t.insertionPosition = t.insertionPosition._getTransformedByMoveOperation(e) : t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), [t] + })), Wd(Pd, Pd, ((t, e, n) => { + if (t.splitPosition.isEqual(e.splitPosition)) { + if (!t.graveyardPosition && !e.graveyardPosition) return [new Fd(0)]; + if (t.graveyardPosition && e.graveyardPosition && t.graveyardPosition.isEqual(e.graveyardPosition)) return [new Fd(0)]; + if ("splitBefore" == n.abRelation) return t.howMany = 0, t.graveyardPosition = t.graveyardPosition._getTransformedBySplitOperation(e), [t] + } + if (t.graveyardPosition && e.graveyardPosition && t.graveyardPosition.isEqual(e.graveyardPosition)) { + const o = "$graveyard" == t.splitPosition.root.rootName, + i = "$graveyard" == e.splitPosition.root.rootName; + if (i && !o || !(o && !i) && n.aIsStrong) { + const n = []; + return e.howMany && n.push(new Bd(e.moveTargetPosition, e.howMany, e.splitPosition, 0)), t.howMany && n.push(new Bd(t.splitPosition, t.howMany, t.moveTargetPosition, 0)), n + } + return [new Fd(0)] + } + if (t.graveyardPosition && (t.graveyardPosition = t.graveyardPosition._getTransformedBySplitOperation(e)), t.splitPosition.isEqual(e.insertionPosition) && "splitBefore" == n.abRelation) return t.howMany++, [t]; + if (e.splitPosition.isEqual(t.insertionPosition) && "splitBefore" == n.baRelation) { + const n = e.insertionPosition.path.slice(); + n.push(0); + const o = new El(e.insertionPosition.root, n); + return [t, new Bd(t.insertionPosition, 1, o, 0)] + } + return t.splitPosition.hasSameParentAs(e.splitPosition) && t.splitPosition.offset < e.splitPosition.offset && (t.howMany -= e.howMany), t.splitPosition = t.splitPosition._getTransformedBySplitOperation(e), t.insertionPosition = Pd.getInsertionPosition(t.splitPosition), [t] + })); + class th extends(S(El)) { + constructor(t, e, n = "toNone") { + if (super(t, e, n), !this.root.is("rootElement")) throw new b("model-liveposition-root-not-rootelement", t); + eh.call(this) + } + detach() { + this.stopListening() + } + toPosition() { + return new El(this.root, this.path.slice(), this.stickiness) + } + static fromPosition(t, e) { + return new this(t.root, t.path.slice(), e || t.stickiness) + } + } + + function eh() { + this.listenTo(this.root.document.model, "applyOperation", ((t, e) => { + const n = e[0]; + n.isDocumentOperation && nh.call(this, n) + }), { + priority: "low" + }) + } + + function nh(t) { + const e = this.getTransformedByOperation(t); + if (!this.isEqual(e)) { + const t = this.toPosition(); + this.path = e.path, this.root = e.root, this.fire("change", t) + } + } + th.prototype.is = function(t) { + return "livePosition" === t || "model:livePosition" === t || "position" == t || "model:position" === t + }; + class oh { + constructor(t = {}) { + "string" == typeof t && (t = "transparent" === t ? { + isUndoable: !1 + } : {}, k("batch-constructor-deprecated-string-type")); + const { + isUndoable: e = !0, + isLocal: n = !0, + isUndo: o = !1, + isTyping: i = !1 + } = t; + this.operations = [], this.isUndoable = e, this.isLocal = n, this.isUndo = o, this.isTyping = i + } + get type() { + return k("batch-type-deprecated"), "default" + } + get baseVersion() { + for (const t of this.operations) + if (null !== t.baseVersion) return t.baseVersion; + return null + } + addOperation(t) { + return t.batch = this, this.operations.push(t), t + } + } + var ih = Object.defineProperty, + rh = Object.getOwnPropertySymbols, + sh = Object.prototype.hasOwnProperty, + ah = Object.prototype.propertyIsEnumerable, + lh = (t, e, n) => e in t ? ih(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class ch { + constructor(t) { + this._changesInElement = new Map, this._elementSnapshots = new Map, this._changedMarkers = new Map, this._changedRoots = new Map, this._changeCount = 0, this._cachedChanges = null, this._cachedChangesWithGraveyard = null, this._refreshedItems = new Set, this._markerCollection = t + } + get isEmpty() { + return 0 == this._changesInElement.size && 0 == this._changedMarkers.size && 0 == this._changedRoots.size + } + bufferOperation(t) { + const e = t; + switch (e.type) { + case "insert": + if (this._isInInsertedElement(e.position.parent)) return; + this._markInsert(e.position.parent, e.position.offset, e.nodes.maxOffset); + break; + case "addAttribute": + case "removeAttribute": + case "changeAttribute": + for (const t of e.range.getItems({ + shallow: !0 + })) this._isInInsertedElement(t.parent) || this._markAttribute(t); + break; + case "remove": + case "move": + case "reinsert": { + if (e.sourcePosition.isEqual(e.targetPosition) || e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition)) return; + const t = this._isInInsertedElement(e.sourcePosition.parent), + n = this._isInInsertedElement(e.targetPosition.parent); + t || this._markRemove(e.sourcePosition.parent, e.sourcePosition.offset, e.howMany), n || this._markInsert(e.targetPosition.parent, e.getMovedRangeStart().offset, e.howMany); + break + } + case "rename": { + if (this._isInInsertedElement(e.position.parent)) return; + this._markRemove(e.position.parent, e.position.offset, 1), this._markInsert(e.position.parent, e.position.offset, 1); + const t = Pl._createFromPositionAndShift(e.position, 1); + for (const e of this._markerCollection.getMarkersIntersectingRange(t)) { + const t = e.getData(); + this.bufferMarkerChange(e.name, t, t) + } + break + } + case "split": { + const t = e.splitPosition.parent; + this._isInInsertedElement(t) || this._markRemove(t, e.splitPosition.offset, e.howMany), this._isInInsertedElement(e.insertionPosition.parent) || this._markInsert(e.insertionPosition.parent, e.insertionPosition.offset, 1), e.graveyardPosition && this._markRemove(e.graveyardPosition.parent, e.graveyardPosition.offset, 1); + break + } + case "merge": { + const t = e.sourcePosition.parent; + this._isInInsertedElement(t.parent) || this._markRemove(t.parent, t.startOffset, 1); + const n = e.graveyardPosition.parent; + this._markInsert(n, e.graveyardPosition.offset, 1); + const o = e.targetPosition.parent; + this._isInInsertedElement(o) || this._markInsert(o, e.targetPosition.offset, t.maxOffset); + break + } + case "detachRoot": + case "addRoot": + this._bufferRootStateChange(e.rootName, e.isAdd); + break; + case "addRootAttribute": + case "removeRootAttribute": + case "changeRootAttribute": { + const t = e.root.rootName; + this._bufferRootAttributeChange(t, e.key, e.oldValue, e.newValue); + break + } + } + this._cachedChanges = null + } + bufferMarkerChange(t, e, n) { + const o = this._changedMarkers.get(t); + o ? (o.newMarkerData = n, null == o.oldMarkerData.range && null == n.range && this._changedMarkers.delete(t)) : this._changedMarkers.set(t, { + newMarkerData: n, + oldMarkerData: e + }) + } + getMarkersToRemove() { + const t = []; + for (const [e, n] of this._changedMarkers) null != n.oldMarkerData.range && t.push({ + name: e, + range: n.oldMarkerData.range + }); + return t + } + getMarkersToAdd() { + const t = []; + for (const [e, n] of this._changedMarkers) null != n.newMarkerData.range && t.push({ + name: e, + range: n.newMarkerData.range + }); + return t + } + getChangedMarkers() { + return Array.from(this._changedMarkers).map((([t, e]) => ({ + name: t, + data: { + oldRange: e.oldMarkerData.range, + newRange: e.newMarkerData.range + } + }))) + } + hasDataChanges() { + if (this._changesInElement.size > 0) return !0; + if (this._changedRoots.size > 0) return !0; + for (const { + newMarkerData: t, + oldMarkerData: e + } + of this._changedMarkers.values()) { + if (t.affectsData !== e.affectsData) return !0; + if (t.affectsData) { + const n = t.range && !e.range, + o = !t.range && e.range, + i = t.range && e.range && !t.range.isEqual(e.range); + if (n || o || i) return !0 + } + } + return !1 + } + getChanges(t = {}) { + if (this._cachedChanges) return t.includeChangesInGraveyard ? this._cachedChangesWithGraveyard.slice() : this._cachedChanges.slice(); + let e = []; + for (const t of this._changesInElement.keys()) { + const n = this._changesInElement.get(t).sort(((t, e) => t.offset === e.offset ? t.type != e.type ? "remove" == t.type ? -1 : 1 : 0 : t.offset < e.offset ? -1 : 1)), + o = this._elementSnapshots.get(t), + i = dh(t.getChildren()), + r = hh(o.length, n); + let s = 0, + a = 0; + for (const n of r) + if ("i" === n) e.push(this._getInsertDiff(t, s, i[s])), s++; + else if ("r" === n) e.push(this._getRemoveDiff(t, s, o[a])), a++; + else if ("a" === n) { + const n = i[s].attributes, + r = o[a].attributes; + let l; + if ("$text" == i[s].name) l = new Pl(El._createAt(t, s), El._createAt(t, s + 1)); + else { + const e = t.offsetToIndex(s); + l = new Pl(El._createAt(t, s), El._createAt(t.getChild(e), 0)) + } + e.push(...this._getAttributesDiff(l, r, n)), s++, a++ + } else s++, a++ + } + e.sort(((t, e) => t.position.root != e.position.root ? t.position.root.rootName < e.position.root.rootName ? -1 : 1 : t.position.isEqual(e.position) ? t.changeCount - e.changeCount : t.position.isBefore(e.position) ? -1 : 1)); + for (let t = 1, n = 0; t < e.length; t++) { + const o = e[n], + i = e[t], + r = "remove" == o.type && "remove" == i.type && "$text" == o.name && "$text" == i.name && o.position.isEqual(i.position), + s = "insert" == o.type && "insert" == i.type && "$text" == o.name && "$text" == i.name && o.position.parent == i.position.parent && o.position.offset + o.length == i.position.offset, + a = "attribute" == o.type && "attribute" == i.type && o.position.parent == i.position.parent && o.range.isFlat && i.range.isFlat && o.position.offset + o.length == i.position.offset && o.attributeKey == i.attributeKey && o.attributeOldValue == i.attributeOldValue && o.attributeNewValue == i.attributeNewValue; + r || s || a ? (o.length++, a && (o.range.end = o.range.end.getShiftedBy(1)), e[t] = null) : n = t + } + e = e.filter((t => t)); + for (const t of e) delete t.changeCount, "attribute" == t.type && (delete t.position, delete t.length); + return this._changeCount = 0, this._cachedChangesWithGraveyard = e, this._cachedChanges = e.filter(uh), t.includeChangesInGraveyard ? this._cachedChangesWithGraveyard.slice() : this._cachedChanges.slice() + } + getChangedRoots() { + return Array.from(this._changedRoots.values()).map((t => { + const e = ((t, e) => { + for (var n in e || (e = {})) sh.call(e, n) && lh(t, n, e[n]); + if (rh) + for (var n of rh(e)) ah.call(e, n) && lh(t, n, e[n]); + return t + })({}, t); + return void 0 !== e.state && delete e.attributes, e + })) + } + getRefreshedItems() { + return new Set(this._refreshedItems) + } + reset() { + this._changesInElement.clear(), this._elementSnapshots.clear(), this._changedMarkers.clear(), this._changedRoots.clear(), this._refreshedItems = new Set, this._cachedChanges = null + } + _bufferRootStateChange(t, e) { + if (!this._changedRoots.has(t)) return void this._changedRoots.set(t, { + name: t, + state: e ? "attached" : "detached" + }); + const n = this._changedRoots.get(t); + void 0 !== n.state ? (delete n.state, void 0 === n.attributes && this._changedRoots.delete(t)) : n.state = e ? "attached" : "detached" + } + _bufferRootAttributeChange(t, e, n, o) { + const i = this._changedRoots.get(t) || { + name: t + }, + r = i.attributes || {}; + if (r[e]) { + const t = r[e]; + o === t.oldValue ? delete r[e] : t.newValue = o + } else r[e] = { + oldValue: n, + newValue: o + }; + 0 === Object.entries(r).length ? (delete i.attributes, void 0 === i.state && this._changedRoots.delete(t)) : (i.attributes = r, this._changedRoots.set(t, i)) + } + _refreshItem(t) { + if (this._isInInsertedElement(t.parent)) return; + this._markRemove(t.parent, t.startOffset, t.offsetSize), this._markInsert(t.parent, t.startOffset, t.offsetSize), this._refreshedItems.add(t); + const e = Pl._createOn(t); + for (const t of this._markerCollection.getMarkersIntersectingRange(e)) { + const e = t.getData(); + this.bufferMarkerChange(t.name, e, e) + } + this._cachedChanges = null + } + _markInsert(t, e, n) { + const o = { + type: "insert", + offset: e, + howMany: n, + count: this._changeCount++ + }; + this._markChange(t, o) + } + _markRemove(t, e, n) { + const o = { + type: "remove", + offset: e, + howMany: n, + count: this._changeCount++ + }; + this._markChange(t, o), this._removeAllNestedChanges(t, e, n) + } + _markAttribute(t) { + const e = { + type: "attribute", + offset: t.startOffset, + howMany: t.offsetSize, + count: this._changeCount++ + }; + this._markChange(t.parent, e) + } + _markChange(t, e) { + this._makeSnapshot(t); + const n = this._getChangesForElement(t); + this._handleChange(e, n), n.push(e); + for (let t = 0; t < n.length; t++) n[t].howMany < 1 && (n.splice(t, 1), t--) + } + _getChangesForElement(t) { + let e; + return this._changesInElement.has(t) ? e = this._changesInElement.get(t) : (e = [], this._changesInElement.set(t, e)), e + } + _makeSnapshot(t) { + this._elementSnapshots.has(t) || this._elementSnapshots.set(t, dh(t.getChildren())) + } + _handleChange(t, e) { + t.nodesToHandle = t.howMany; + for (const n of e) { + const o = t.offset + t.howMany, + i = n.offset + n.howMany; + if ("insert" == t.type && ("insert" == n.type && (t.offset <= n.offset ? n.offset += t.howMany : t.offset < i && (n.howMany += t.nodesToHandle, t.nodesToHandle = 0)), "remove" == n.type && t.offset < n.offset && (n.offset += t.howMany), "attribute" == n.type)) + if (t.offset <= n.offset) n.offset += t.howMany; + else if (t.offset < i) { + const i = n.howMany; + n.howMany = t.offset - n.offset, e.unshift({ + type: "attribute", + offset: o, + howMany: i - n.howMany, + count: this._changeCount++ + }) + } + if ("remove" == t.type) { + if ("insert" == n.type) + if (o <= n.offset) n.offset -= t.howMany; + else if (o <= i) + if (t.offset < n.offset) { + const e = o - n.offset; + n.offset = t.offset, n.howMany -= e, t.nodesToHandle -= e + } else n.howMany -= t.nodesToHandle, t.nodesToHandle = 0; + else if (t.offset <= n.offset) t.nodesToHandle -= n.howMany, n.howMany = 0; + else if (t.offset < i) { + const e = i - t.offset; + n.howMany -= e, t.nodesToHandle -= e + } + if ("remove" == n.type && (o <= n.offset ? n.offset -= t.howMany : t.offset < n.offset && (t.nodesToHandle += n.howMany, n.howMany = 0)), "attribute" == n.type) + if (o <= n.offset) n.offset -= t.howMany; + else if (t.offset < n.offset) { + const e = o - n.offset; + n.offset = t.offset, n.howMany -= e + } else if (t.offset < i) + if (o <= i) { + const o = n.howMany; + n.howMany = t.offset - n.offset; + const i = o - n.howMany - t.nodesToHandle; + e.unshift({ + type: "attribute", + offset: t.offset, + howMany: i, + count: this._changeCount++ + }) + } else n.howMany -= i - t.offset + } + if ("attribute" == t.type) { + if ("insert" == n.type) + if (t.offset < n.offset && o > n.offset) { + if (o > i) { + const t = { + type: "attribute", + offset: i, + howMany: o - i, + count: this._changeCount++ + }; + this._handleChange(t, e), e.push(t) + } + t.nodesToHandle = n.offset - t.offset, t.howMany = t.nodesToHandle + } else t.offset >= n.offset && t.offset < i && (o > i ? (t.nodesToHandle = o - i, t.offset = i) : t.nodesToHandle = 0); + if ("remove" == n.type && t.offset < n.offset && o > n.offset) { + const i = { + type: "attribute", + offset: n.offset, + howMany: o - n.offset, + count: this._changeCount++ + }; + this._handleChange(i, e), e.push(i), t.nodesToHandle = n.offset - t.offset, t.howMany = t.nodesToHandle + } + "attribute" == n.type && (t.offset >= n.offset && o <= i ? (t.nodesToHandle = 0, t.howMany = 0, t.offset = 0) : t.offset <= n.offset && o >= i && (n.howMany = 0)) + } + } + t.howMany = t.nodesToHandle, delete t.nodesToHandle + } + _getInsertDiff(t, e, n) { + return { + type: "insert", + position: El._createAt(t, e), + name: n.name, + attributes: new Map(n.attributes), + length: 1, + changeCount: this._changeCount++ + } + } + _getRemoveDiff(t, e, n) { + return { + type: "remove", + position: El._createAt(t, e), + name: n.name, + attributes: new Map(n.attributes), + length: 1, + changeCount: this._changeCount++ + } + } + _getAttributesDiff(t, e, n) { + const o = []; + n = new Map(n); + for (const [i, r] of e) { + const e = n.has(i) ? n.get(i) : null; + e !== r && o.push({ + type: "attribute", + position: t.start, + range: t.clone(), + length: 1, + attributeKey: i, + attributeOldValue: r, + attributeNewValue: e, + changeCount: this._changeCount++ + }), n.delete(i) + } + for (const [e, i] of n) o.push({ + type: "attribute", + position: t.start, + range: t.clone(), + length: 1, + attributeKey: e, + attributeOldValue: null, + attributeNewValue: i, + changeCount: this._changeCount++ + }); + return o + } + _isInInsertedElement(t) { + const e = t.parent; + if (!e) return !1; + const n = this._changesInElement.get(e), + o = t.startOffset; + if (n) + for (const t of n) + if ("insert" == t.type && o >= t.offset && o < t.offset + t.howMany) return !0; + return this._isInInsertedElement(e) + } + _removeAllNestedChanges(t, e, n) { + const o = new Pl(El._createAt(t, e), El._createAt(t, e + n)); + for (const t of o.getItems({ + shallow: !0 + })) t.is("element") && (this._elementSnapshots.delete(t), this._changesInElement.delete(t), this._removeAllNestedChanges(t, 0, t.maxOffset)) + } + } + + function dh(t) { + const e = []; + for (const n of t) + if (n.is("$text")) + for (let t = 0; t < n.data.length; t++) e.push({ + name: "$text", + attributes: new Map(n.getAttributes()) + }); + else e.push({ + name: n.name, + attributes: new Map(n.getAttributes()) + }); + return e + } + + function hh(t, e) { + const n = []; + let o = 0, + i = 0; + for (const t of e) { + if (t.offset > o) { + for (let e = 0; e < t.offset - o; e++) n.push("e"); + i += t.offset - o + } + if ("insert" == t.type) { + for (let e = 0; e < t.howMany; e++) n.push("i"); + o = t.offset + t.howMany + } else if ("remove" == t.type) { + for (let e = 0; e < t.howMany; e++) n.push("r"); + o = t.offset, i += t.howMany + } else n.push(..."a".repeat(t.howMany).split("")), o = t.offset + t.howMany, i += t.howMany + } + if (i < t) + for (let e = 0; e < t - i - o; e++) n.push("e"); + return n + } + + function uh(t) { + const e = "position" in t && "$graveyard" == t.position.root.rootName, + n = "range" in t && "$graveyard" == t.range.root.rootName; + return !e && !n + } + class gh { + constructor() { + this._operations = [], this._undoPairs = new Map, this._undoneOperations = new Set, this._baseVersionToOperationIndex = new Map, this._version = 0, this._gaps = new Map + } + get version() { + return this._version + } + set version(t) { + this._operations.length && t > this._version + 1 && this._gaps.set(this._version, t), this._version = t + } + get lastOperation() { + return this._operations[this._operations.length - 1] + } + addOperation(t) { + if (t.baseVersion !== this.version) throw new b("model-document-history-addoperation-incorrect-version", this, { + operation: t, + historyVersion: this.version + }); + this._operations.push(t), this._version++, this._baseVersionToOperationIndex.set(t.baseVersion, this._operations.length - 1) + } + getOperations(t, e = this.version) { + if (!this._operations.length) return []; + const n = this._operations[0]; + void 0 === t && (t = n.baseVersion); + let o = e - 1; + for (const [e, n] of this._gaps) t > e && t < n && (t = n), o > e && o < n && (o = e - 1); + if (o < n.baseVersion || t > this.lastOperation.baseVersion) return []; + let i = this._baseVersionToOperationIndex.get(t); + void 0 === i && (i = 0); + let r = this._baseVersionToOperationIndex.get(o); + return void 0 === r && (r = this._operations.length - 1), this._operations.slice(i, r + 1) + } + getOperation(t) { + const e = this._baseVersionToOperationIndex.get(t); + if (void 0 !== e) return this._operations[e] + } + setOperationAsUndone(t, e) { + this._undoPairs.set(e, t), this._undoneOperations.add(t) + } + isUndoingOperation(t) { + return this._undoPairs.has(t) + } + isUndoneOperation(t) { + return this._undoneOperations.has(t) + } + getUndoneOperation(t) { + return this._undoPairs.get(t) + } + reset() { + this._version = 0, this._undoPairs = new Map, this._operations = [], this._undoneOperations = new Set, this._gaps = new Map, this._baseVersionToOperationIndex = new Map + } + } + class mh extends vl { + constructor(t, e, n = "main") { + super(e), this._isAttached = !0, this._document = t, this.rootName = n + } + get document() { + return this._document + } + isAttached() { + return this._isAttached + } + toJSON() { + return this.rootName + } + } + mh.prototype.is = function(t, e) { + return e ? e === this.name && ("rootElement" === t || "model:rootElement" === t || "element" === t || "model:element" === t) : "rootElement" === t || "model:rootElement" === t || "element" === t || "model:element" === t || "node" === t || "model:node" === t + }; + var ph = Object.defineProperty, + fh = Object.defineProperties, + bh = Object.getOwnPropertyDescriptors, + kh = Object.getOwnPropertySymbols, + wh = Object.prototype.hasOwnProperty, + Ah = Object.prototype.propertyIsEnumerable, + Ch = (t, e, n) => e in t ? ph(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + _h = (t, e) => { + for (var n in e || (e = {})) wh.call(e, n) && Ch(t, n, e[n]); + if (kh) + for (var n of kh(e)) Ah.call(e, n) && Ch(t, n, e[n]); + return t + }, + vh = (t, e) => fh(t, bh(e)); + const yh = "$graveyard"; + class xh extends(S()) { + constructor(t) { + super(), this.model = t, this.history = new gh, this.selection = new rc(this), this.roots = new xi({ + idProperty: "rootName" + }), this.differ = new ch(t.markers), this.isReadOnly = !1, this._postFixers = new Set, this._hasSelectionChangedFromTheLastChangeBlock = !1, this.createRoot("$root", yh), this.listenTo(t, "applyOperation", ((t, e) => { + const n = e[0]; + n.isDocumentOperation && this.differ.bufferOperation(n) + }), { + priority: "high" + }), this.listenTo(t, "applyOperation", ((t, e) => { + const n = e[0]; + n.isDocumentOperation && this.history.addOperation(n) + }), { + priority: "low" + }), this.listenTo(this.selection, "change", (() => { + this._hasSelectionChangedFromTheLastChangeBlock = !0 + })), this.listenTo(t.markers, "update", ((t, e, n, o, i) => { + const r = vh(_h({}, e.getData()), { + range: o + }); + this.differ.bufferMarkerChange(e.name, i, r), null === n && e.on("change", ((t, n) => { + const o = e.getData(); + this.differ.bufferMarkerChange(e.name, vh(_h({}, o), { + range: n + }), o) + })) + })), this.registerPostFixer((t => { + let e = !1; + for (const n of this.roots) n.isAttached() || n.isEmpty || (t.remove(t.createRangeIn(n)), e = !0); + for (const n of this.model.markers) n.getRange().root.isAttached() || (t.removeMarker(n), e = !0); + return e + })) + } + get version() { + return this.history.version + } + set version(t) { + this.history.version = t + } + get graveyard() { + return this.getRoot(yh) + } + createRoot(t = "$root", e = "main") { + if (this.roots.get(e)) throw new b("model-document-createroot-name-exists", this, { + name: e + }); + const n = new mh(this, t, e); + return this.roots.add(n), n + } + destroy() { + this.selection.destroy(), this.stopListening() + } + getRoot(t = "main") { + return this.roots.get(t) + } + getRootNames(t = !1) { + return Array.from(this.roots).filter((e => e.rootName != yh && (t || e.isAttached()))).map((t => t.rootName)) + } + registerPostFixer(t) { + this._postFixers.add(t) + } + toJSON() { + const t = er(this); + return t.selection = "[engine.model.DocumentSelection]", t.model = "[engine.model.Model]", t + } + _handleChangeBlock(t) { + this._hasDocumentChangedFromTheLastChangeBlock() && (this._callPostFixers(t), this.selection.refresh(), this.differ.hasDataChanges() ? this.fire("change:data", t.batch) : this.fire("change", t.batch), this.selection.refresh(), this.differ.reset()), this._hasSelectionChangedFromTheLastChangeBlock = !1 + } + _hasDocumentChangedFromTheLastChangeBlock() { + return !this.differ.isEmpty || this._hasSelectionChangedFromTheLastChangeBlock + } + _getDefaultRoot() { + for (const t of this.roots) + if (t !== this.graveyard) return t; + return this.graveyard + } + _getDefaultRange() { + const t = this._getDefaultRoot(), + e = this.model, + n = e.schema, + o = e.createPositionFromPath(t, [0]); + return n.getNearestSelectionRange(o) || e.createRange(o) + } + _validateSelectionRange(t) { + return Eh(t.start) && Eh(t.end) + } + _callPostFixers(t) { + let e = !1; + do { + for (const n of this._postFixers) + if (this.selection.refresh(), e = n(t), e) break + } while (e) + } + } + + function Eh(t) { + const e = t.textNode; + if (e) { + const n = e.data, + o = t.offset - e.startOffset; + return !Ii(n, o) && !Pi(n, o) + } + return !0 + } + var Dh = Object.defineProperty, + Sh = Object.defineProperties, + Th = Object.getOwnPropertyDescriptors, + Bh = Object.getOwnPropertySymbols, + Ih = Object.prototype.hasOwnProperty, + Ph = Object.prototype.propertyIsEnumerable, + Rh = (t, e, n) => e in t ? Dh(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class zh extends(S()) { + constructor() { + super(...arguments), this._markers = new Map + } [Symbol.iterator]() { + return this._markers.values() + } + has(t) { + const e = t instanceof Vh ? t.name : t; + return this._markers.has(e) + } + get(t) { + return this._markers.get(t) || null + } + _set(t, e, n = !1, o = !1) { + const i = t instanceof Vh ? t.name : t; + if (i.includes(",")) throw new b("markercollection-incorrect-marker-name", this); + const r = this._markers.get(i); + if (r) { + const t = r.getData(), + s = r.getRange(); + let a = !1; + return s.isEqual(e) || (r._attachLiveRange(ec.fromRange(e)), a = !0), n != r.managedUsingOperations && (r._managedUsingOperations = n, a = !0), "boolean" == typeof o && o != r.affectsData && (r._affectsData = o, a = !0), a && this.fire(`update:${i}`, r, s, e, t), r + } + const s = ec.fromRange(e), + a = new Vh(i, s, n, o); + var l; + return this._markers.set(i, a), this.fire(`update:${i}`, a, null, e, (l = ((t, e) => { + for (var n in e || (e = {})) Ih.call(e, n) && Rh(t, n, e[n]); + if (Bh) + for (var n of Bh(e)) Ph.call(e, n) && Rh(t, n, e[n]); + return t + })({}, a.getData()), Sh(l, Th({ + range: null + })))), a + } + _remove(t) { + const e = t instanceof Vh ? t.name : t, + n = this._markers.get(e); + return !!n && (this._markers.delete(e), this.fire(`update:${e}`, n, n.getRange(), null, n.getData()), this._destroyMarker(n), !0) + } + _refresh(t) { + const e = t instanceof Vh ? t.name : t, + n = this._markers.get(e); + if (!n) throw new b("markercollection-refresh-marker-not-exists", this); + const o = n.getRange(); + this.fire(`update:${e}`, n, o, o, n.getData()) + }* getMarkersAtPosition(t) { + for (const e of this) e.getRange().containsPosition(t) && (yield e) + }* getMarkersIntersectingRange(t) { + for (const e of this) null !== e.getRange().getIntersection(t) && (yield e) + } + destroy() { + for (const t of this._markers.values()) this._destroyMarker(t); + this._markers = null, this.stopListening() + }* getMarkersGroup(t) { + for (const e of this._markers.values()) e.name.startsWith(t + ":") && (yield e) + } + _destroyMarker(t) { + t.stopListening(), t._detachLiveRange() + } + } + class Vh extends(S(kl)) { + constructor(t, e, n, o) { + super(), this.name = t, this._liveRange = this._attachLiveRange(e), this._managedUsingOperations = n, this._affectsData = o + } + get managedUsingOperations() { + if (!this._liveRange) throw new b("marker-destroyed", this); + return this._managedUsingOperations + } + get affectsData() { + if (!this._liveRange) throw new b("marker-destroyed", this); + return this._affectsData + } + getData() { + return { + range: this.getRange(), + affectsData: this.affectsData, + managedUsingOperations: this.managedUsingOperations + } + } + getStart() { + if (!this._liveRange) throw new b("marker-destroyed", this); + return this._liveRange.start.clone() + } + getEnd() { + if (!this._liveRange) throw new b("marker-destroyed", this); + return this._liveRange.end.clone() + } + getRange() { + if (!this._liveRange) throw new b("marker-destroyed", this); + return this._liveRange.toRange() + } + _attachLiveRange(t) { + return this._liveRange && this._detachLiveRange(), t.delegate("change:range").to(this), t.delegate("change:content").to(this), this._liveRange = t, t + } + _detachLiveRange() { + this._liveRange.stopDelegating("change:range", this), this._liveRange.stopDelegating("change:content", this), this._liveRange.detach(), this._liveRange = null + } + } + Vh.prototype.is = function(t) { + return "marker" === t || "model:marker" === t + }; + class Oh extends _d { + constructor(t, e) { + super(null), this.sourcePosition = t.clone(), this.howMany = e + } + get type() { + return "detach" + } + get affectedSelectable() { + return null + } + toJSON() { + const t = super.toJSON(); + return t.sourcePosition = this.sourcePosition.toJSON(), t + } + _validate() { + if (this.sourcePosition.root.document) throw new b("detach-operation-on-document-node", this) + } + _execute() { + yd(Pl._createFromPositionAndShift(this.sourcePosition, this.howMany)) + } + static get className() { + return "DetachOperation" + } + } + class Fh extends kl { + constructor(t) { + super(), this.markers = new Map, this._children = new Al, t && this._insertChild(0, t) + } [Symbol.iterator]() { + return this.getChildren() + } + get childCount() { + return this._children.length + } + get maxOffset() { + return this._children.maxOffset + } + get isEmpty() { + return 0 === this.childCount + } + get nextSibling() { + return null + } + get previousSibling() { + return null + } + get root() { + return this + } + get parent() { + return null + } + get document() { + return null + } + isAttached() { + return !1 + } + getAncestors() { + return [] + } + getChild(t) { + return this._children.getNode(t) + } + getChildren() { + return this._children[Symbol.iterator]() + } + getChildIndex(t) { + return this._children.getNodeIndex(t) + } + getChildStartOffset(t) { + return this._children.getNodeStartOffset(t) + } + getPath() { + return [] + } + getNodeByPath(t) { + let e = this; + for (const n of t) e = e.getChild(e.offsetToIndex(n)); + return e + } + offsetToIndex(t) { + return this._children.offsetToIndex(t) + } + toJSON() { + const t = []; + for (const e of this._children) t.push(e.toJSON()); + return t + } + static fromJSON(t) { + const e = []; + for (const n of t) n.name ? e.push(vl.fromJSON(n)) : e.push(Cl.fromJSON(n)); + return new Fh(e) + } + _appendChild(t) { + this._insertChild(this.childCount, t) + } + _insertChild(t, e) { + const n = function(t) { + if ("string" == typeof t) return [new Cl(t)]; + Q(t) || (t = [t]); + return Array.from(t).map((t => "string" == typeof t ? new Cl(t) : t instanceof _l ? new Cl(t.data, t.getAttributes()) : t)) + }(e); + for (const t of n) null !== t.parent && t._remove(), t.parent = this; + this._children._insertNodes(t, n) + } + _removeChildren(t, e = 1) { + const n = this._children._removeNodes(t, e); + for (const t of n) t.parent = null; + return n + } + } + Fh.prototype.is = function(t) { + return "documentFragment" === t || "model:documentFragment" === t + }; + class Mh { + constructor(t, e) { + this.model = t, this.batch = e + } + createText(t, e) { + return new Cl(t, e) + } + createElement(t, e) { + return new vl(t, e) + } + createDocumentFragment() { + return new Fh + } + cloneElement(t, e = !0) { + return t._clone(e) + } + insert(t, e, n = 0) { + if (this._assertWriterUsedCorrectly(), t instanceof Cl && "" == t.data) return; + const o = El._createAt(e, n); + if (t.parent) { + if (qh(t.root, o.root)) return void this.move(Pl._createOn(t), o); + if (t.root.document) throw new b("model-writer-insert-forbidden-move", this); + this.remove(t) + } + const i = o.root.document ? o.root.document.version : null, + r = new Id(o, t, i); + if (t instanceof Cl && (r.shouldReceiveAttributes = !0), this.batch.addOperation(r), this.model.applyOperation(r), t instanceof Fh) + for (const [e, n] of t.markers) { + const t = El._createAt(n.root, 0), + i = { + range: new Pl(n.start._getCombined(t, o), n.end._getCombined(t, o)), + usingOperation: !0, + affectsData: !0 + }; + this.model.markers.has(e) ? this.updateMarker(e, i) : this.addMarker(e, i) + } + } + insertText(t, e, n, o) { + e instanceof Fh || e instanceof vl || e instanceof El ? this.insert(this.createText(t), e, n) : this.insert(this.createText(t, e), n, o) + } + insertElement(t, e, n, o) { + e instanceof Fh || e instanceof vl || e instanceof El ? this.insert(this.createElement(t), e, n) : this.insert(this.createElement(t, e), n, o) + } + append(t, e) { + this.insert(t, e, "end") + } + appendText(t, e, n) { + e instanceof Fh || e instanceof vl ? this.insert(this.createText(t), e, "end") : this.insert(this.createText(t, e), n, "end") + } + appendElement(t, e, n) { + e instanceof Fh || e instanceof vl ? this.insert(this.createElement(t), e, "end") : this.insert(this.createElement(t, e), n, "end") + } + setAttribute(t, e, n) { + if (this._assertWriterUsedCorrectly(), n instanceof Pl) { + const o = n.getMinimalFlatRanges(); + for (const n of o) Nh(this, t, e, n) + } else Lh(this, t, e, n) + } + setAttributes(t, e) { + for (const [n, o] of Ti(t)) this.setAttribute(n, o, e) + } + removeAttribute(t, e) { + if (this._assertWriterUsedCorrectly(), e instanceof Pl) { + const n = e.getMinimalFlatRanges(); + for (const e of n) Nh(this, t, null, e) + } else Lh(this, t, null, e) + } + clearAttributes(t) { + this._assertWriterUsedCorrectly(); + const e = t => { + for (const e of t.getAttributeKeys()) this.removeAttribute(e, t) + }; + if (t instanceof Pl) + for (const n of t.getItems()) e(n); + else e(t) + } + move(t, e, n) { + if (this._assertWriterUsedCorrectly(), !(t instanceof Pl)) throw new b("writer-move-invalid-range", this); + if (!t.isFlat) throw new b("writer-move-range-not-flat", this); + const o = El._createAt(e, n); + if (o.isEqual(t.start)) return; + if (this._addOperationForAffectedMarkers("move", t), !qh(t.root, o.root)) throw new b("writer-move-different-document", this); + const i = t.root.document ? t.root.document.version : null, + r = new Bd(t.start, t.end.offset - t.start.offset, o, i); + this.batch.addOperation(r), this.model.applyOperation(r) + } + remove(t) { + this._assertWriterUsedCorrectly(); + const e = (t instanceof Pl ? t : Pl._createOn(t)).getMinimalFlatRanges().reverse(); + for (const t of e) this._addOperationForAffectedMarkers("move", t), jh(t.start, t.end.offset - t.start.offset, this.batch, this.model) + } + merge(t) { + this._assertWriterUsedCorrectly(); + const e = t.nodeBefore, + n = t.nodeAfter; + if (this._addOperationForAffectedMarkers("merge", t), !(e instanceof vl)) throw new b("writer-merge-no-element-before", this); + if (!(n instanceof vl)) throw new b("writer-merge-no-element-after", this); + t.root.document ? this._merge(t) : this._mergeDetached(t) + } + createPositionFromPath(t, e, n) { + return this.model.createPositionFromPath(t, e, n) + } + createPositionAt(t, e) { + return this.model.createPositionAt(t, e) + } + createPositionAfter(t) { + return this.model.createPositionAfter(t) + } + createPositionBefore(t) { + return this.model.createPositionBefore(t) + } + createRange(t, e) { + return this.model.createRange(t, e) + } + createRangeIn(t) { + return this.model.createRangeIn(t) + } + createRangeOn(t) { + return this.model.createRangeOn(t) + } + createSelection(...t) { + return this.model.createSelection(...t) + } + _mergeDetached(t) { + const e = t.nodeBefore, + n = t.nodeAfter; + this.move(Pl._createIn(n), El._createAt(e, "end")), this.remove(n) + } + _merge(t) { + const e = El._createAt(t.nodeBefore, "end"), + n = El._createAt(t.nodeAfter, 0), + o = t.root.document.graveyard, + i = new El(o, [0]), + r = t.root.document.version, + s = new Rd(n, t.nodeAfter.maxOffset, e, i, r); + this.batch.addOperation(s), this.model.applyOperation(s) + } + rename(t, e) { + if (this._assertWriterUsedCorrectly(), !(t instanceof vl)) throw new b("writer-rename-not-element-instance", this); + const n = t.root.document ? t.root.document.version : null, + o = new Md(El._createBefore(t), t.name, e, n); + this.batch.addOperation(o), this.model.applyOperation(o) + } + split(t, e) { + this._assertWriterUsedCorrectly(); + let n, o, i = t.parent; + if (!i.parent) throw new b("writer-split-element-no-parent", this); + if (e || (e = i.parent), !t.parent.getAncestors({ + includeSelf: !0 + }).includes(e)) throw new b("writer-split-invalid-limit-element", this); + do { + const e = i.root.document ? i.root.document.version : null, + r = i.maxOffset - t.offset, + s = Pd.getInsertionPosition(t), + a = new Pd(t, r, s, null, e); + this.batch.addOperation(a), this.model.applyOperation(a), n || o || (n = i, o = t.parent.nextSibling), i = (t = this.createPositionAfter(t.parent)).parent + } while (i !== e); + return { + position: t, + range: new Pl(El._createAt(n, "end"), El._createAt(o, 0)) + } + } + wrap(t, e) { + if (this._assertWriterUsedCorrectly(), !t.isFlat) throw new b("writer-wrap-range-not-flat", this); + const n = e instanceof vl ? e : new vl(e); + if (n.childCount > 0) throw new b("writer-wrap-element-not-empty", this); + if (null !== n.parent) throw new b("writer-wrap-element-attached", this); + this.insert(n, t.start); + const o = new Pl(t.start.getShiftedBy(1), t.end.getShiftedBy(1)); + this.move(o, El._createAt(n, 0)) + } + unwrap(t) { + if (this._assertWriterUsedCorrectly(), null === t.parent) throw new b("writer-unwrap-element-no-parent", this); + this.move(Pl._createIn(t), this.createPositionAfter(t)), this.remove(t) + } + addMarker(t, e) { + if (this._assertWriterUsedCorrectly(), !e || "boolean" != typeof e.usingOperation) throw new b("writer-addmarker-no-usingoperation", this); + const n = e.usingOperation, + o = e.range, + i = void 0 !== e.affectsData && e.affectsData; + if (this.model.markers.has(t)) throw new b("writer-addmarker-marker-exists", this); + if (!o) throw new b("writer-addmarker-no-range", this); + return n ? (Hh(this, t, null, o, i), this.model.markers.get(t)) : this.model.markers._set(t, o, n, i) + } + updateMarker(t, e) { + this._assertWriterUsedCorrectly(); + const n = "string" == typeof t ? t : t.name, + o = this.model.markers.get(n); + if (!o) throw new b("writer-updatemarker-marker-not-exists", this); + if (!e) return k("writer-updatemarker-reconvert-using-editingcontroller", { + markerName: n + }), void this.model.markers._refresh(o); + const i = "boolean" == typeof e.usingOperation, + r = "boolean" == typeof e.affectsData, + s = r ? e.affectsData : o.affectsData; + if (!i && !e.range && !r) throw new b("writer-updatemarker-wrong-options", this); + const a = o.getRange(), + l = e.range ? e.range : a; + i && e.usingOperation !== o.managedUsingOperations ? e.usingOperation ? Hh(this, n, null, l, s) : (Hh(this, n, a, null, s), this.model.markers._set(n, l, void 0, s)) : o.managedUsingOperations ? Hh(this, n, a, l, s) : this.model.markers._set(n, l, void 0, s) + } + removeMarker(t) { + this._assertWriterUsedCorrectly(); + const e = "string" == typeof t ? t : t.name; + if (!this.model.markers.has(e)) throw new b("writer-removemarker-no-marker", this); + const n = this.model.markers.get(e); + if (!n.managedUsingOperations) return void this.model.markers._remove(e); + Hh(this, e, n.getRange(), null, n.affectsData) + } + addRoot(t, e = "$root") { + this._assertWriterUsedCorrectly(); + const n = this.model.document.getRoot(t); + if (n && n.isAttached()) throw new b("writer-addroot-root-exists", this); + const o = this.model.document, + i = new Ld(t, e, !0, o, o.version); + return this.batch.addOperation(i), this.model.applyOperation(i), this.model.document.getRoot(t) + } + detachRoot(t) { + this._assertWriterUsedCorrectly(); + const e = "string" == typeof t ? this.model.document.getRoot(t) : t; + if (!e || !e.isAttached()) throw new b("writer-detachroot-no-root", this); + for (const t of this.model.markers) t.getRange().root === e && this.removeMarker(t); + for (const t of e.getAttributeKeys()) this.removeAttribute(t, e); + this.remove(this.createRangeIn(e)); + const n = this.model.document, + o = new Ld(e.rootName, e.name, !1, n, n.version); + this.batch.addOperation(o), this.model.applyOperation(o) + } + setSelection(...t) { + this._assertWriterUsedCorrectly(), this.model.document.selection._setTo(...t) + } + setSelectionFocus(t, e) { + this._assertWriterUsedCorrectly(), this.model.document.selection._setFocus(t, e) + } + setSelectionAttribute(t, e) { + if (this._assertWriterUsedCorrectly(), "string" == typeof t) this._setSelectionAttribute(t, e); + else + for (const [e, n] of Ti(t)) this._setSelectionAttribute(e, n) + } + removeSelectionAttribute(t) { + if (this._assertWriterUsedCorrectly(), "string" == typeof t) this._removeSelectionAttribute(t); + else + for (const e of t) this._removeSelectionAttribute(e) + } + overrideSelectionGravity() { + return this.model.document.selection._overrideGravity() + } + restoreSelectionGravity(t) { + this.model.document.selection._restoreGravity(t) + } + _setSelectionAttribute(t, e) { + const n = this.model.document.selection; + if (n.isCollapsed && n.anchor.parent.isEmpty) { + const o = rc._getStoreAttributeKey(t); + this.setAttribute(o, e, n.anchor.parent) + } + n._setAttribute(t, e) + } + _removeSelectionAttribute(t) { + const e = this.model.document.selection; + if (e.isCollapsed && e.anchor.parent.isEmpty) { + const n = rc._getStoreAttributeKey(t); + this.removeAttribute(n, e.anchor.parent) + } + e._removeAttribute(t) + } + _assertWriterUsedCorrectly() { + if (this.model._currentWriter !== this) throw new b("writer-incorrect-use", this) + } + _addOperationForAffectedMarkers(t, e) { + for (const n of this.model.markers) { + if (!n.managedUsingOperations) continue; + const o = n.getRange(); + let i = !1; + if ("move" === t) { + const t = e; + i = t.containsPosition(o.start) || t.start.isEqual(o.start) || t.containsPosition(o.end) || t.end.isEqual(o.end) + } else { + const t = e, + n = t.nodeBefore, + r = t.nodeAfter, + s = o.start.parent == n && o.start.isAtEnd, + a = o.end.parent == r && 0 == o.end.offset, + l = o.end.nodeAfter == r, + c = o.start.nodeAfter == r; + i = s || a || l || c + } + i && this.updateMarker(n.name, { + range: o + }) + } + } + } + + function Nh(t, e, n, o) { + const i = t.model, + r = i.document; + let s, a, l, c = o.start; + for (const t of o.getWalker({ + shallow: !0 + })) l = t.item.getAttribute(e), s && a != l && (a != n && d(), c = s), s = t.nextPosition, a = l; + + function d() { + const o = new Pl(c, s), + l = o.root.document ? r.version : null, + d = new Od(o, e, a, n, l); + t.batch.addOperation(d), i.applyOperation(d) + } + s instanceof El && s != c && a != n && d() + } + + function Lh(t, e, n, o) { + const i = t.model, + r = i.document, + s = o.getAttribute(e); + let a, l; + if (s != n) { + if (o.root === o) { + const t = o.document ? r.version : null; + l = new Nd(o, e, s, n, t) + } else { + a = new Pl(El._createBefore(o), t.createPositionAfter(o)); + const i = a.root.document ? r.version : null; + l = new Od(a, e, s, n, i) + } + t.batch.addOperation(l), i.applyOperation(l) + } + } + + function Hh(t, e, n, o, i) { + const r = t.model, + s = r.document, + a = new zd(e, n, o, r.markers, !!i, s.version); + t.batch.addOperation(a), r.applyOperation(a) + } + + function jh(t, e, n, o) { + let i; + if (t.root.document) { + const n = o.document, + r = new El(n.graveyard, [0]); + i = new Bd(t, e, r, n.version) + } else i = new Oh(t, e); + n.addOperation(i), o.applyOperation(i) + } + + function qh(t, e) { + return t === e || t instanceof mh && e instanceof mh + } + + function Wh(t, e, n = {}) { + if (e.isCollapsed) return; + const o = e.getFirstRange(); + if ("$graveyard" == o.root.rootName) return; + const i = t.schema; + t.change((t => { + if (!n.doNotResetEntireContent && function(t, e) { + const n = t.getLimitElement(e); + if (!e.containsEntireContent(n)) return !1; + const o = e.getFirstRange(); + if (o.start.parent == o.end.parent) return !1; + return t.checkChild(n, "paragraph") + }(i, e)) return void + function(t, e) { + const n = t.model.schema.getLimitElement(e); + t.remove(t.createRangeIn(n)), Kh(t, t.createPositionAt(n, 0), e) + }(t, e); + const r = {}; + if (!n.doNotAutoparagraph) { + const t = e.getSelectedElement(); + t && Object.assign(r, i.getAttributesWithProperty(t, "copyOnReplace", !0)) + } + const [s, a] = function(t) { + const e = t.root.document.model, + n = t.start; + let o = t.end; + if (e.hasContent(t, { + ignoreMarkers: !0 + })) { + const n = function(t) { + const e = t.parent, + n = e.root.document.model.schema, + o = e.getAncestors({ + parentFirst: !0, + includeSelf: !0 + }); + for (const t of o) { + if (n.isLimit(t)) return null; + if (n.isBlock(t)) return t + } + }(o); + if (n && o.isTouching(e.createPositionAt(n, 0))) { + const n = e.createSelection(t); + e.modifySelection(n, { + direction: "backward" + }); + const i = n.getLastPosition(), + r = e.createRange(i, o); + e.hasContent(r, { + ignoreMarkers: !0 + }) || (o = i) + } + } + return [th.fromPosition(n, "toPrevious"), th.fromPosition(o, "toNext")] + }(o); + s.isTouching(a) || t.remove(t.createRange(s, a)), n.leaveUnmerged || (! function(t, e, n) { + const o = t.model; + if (!Gh(t.model.schema, e, n)) return; + const [i, r] = function(t, e) { + const n = t.getAncestors(), + o = e.getAncestors(); + let i = 0; + for (; n[i] && n[i] == o[i];) i++; + return [n[i], o[i]] + }(e, n); + if (!i || !r) return; + !o.hasContent(i, { + ignoreMarkers: !0 + }) && o.hasContent(r, { + ignoreMarkers: !0 + }) ? $h(t, e, n, i.parent) : Uh(t, e, n, i.parent) + }(t, s, a), i.removeDisallowedAttributes(s.parent.getChildren(), t)), Zh(t, e, s), !n.doNotAutoparagraph && function(t, e) { + const n = t.checkChild(e, "$text"), + o = t.checkChild(e, "paragraph"); + return !n && o + }(i, s) && Kh(t, s, e, r), s.detach(), a.detach() + })) + } + + function Uh(t, e, n, o) { + const i = e.parent, + r = n.parent; + if (i != o && r != o) { + for (e = t.createPositionAfter(i), (n = t.createPositionBefore(r)).isEqual(e) || t.insert(r, e), t.merge(e); n.parent.isEmpty;) { + const e = n.parent; + n = t.createPositionBefore(e), t.remove(e) + } + Gh(t.model.schema, e, n) && Uh(t, e, n, o) + } + } + + function $h(t, e, n, o) { + const i = e.parent, + r = n.parent; + if (i != o && r != o) { + for (e = t.createPositionAfter(i), (n = t.createPositionBefore(r)).isEqual(e) || t.insert(i, n); e.parent.isEmpty;) { + const n = e.parent; + e = t.createPositionBefore(n), t.remove(n) + } + n = t.createPositionBefore(r), + function(t, e) { + const n = e.nodeBefore, + o = e.nodeAfter; + n.name != o.name && t.rename(n, o.name); + t.clearAttributes(n), t.setAttributes(Object.fromEntries(o.getAttributes()), n), t.merge(e) + }(t, n), Gh(t.model.schema, e, n) && $h(t, e, n, o) + } + } + + function Gh(t, e, n) { + const o = e.parent, + i = n.parent; + return o != i && (!t.isLimit(o) && !t.isLimit(i) && function(t, e, n) { + const o = new Pl(t, e); + for (const t of o.getWalker()) + if (n.isLimit(t.item)) return !1; + return !0 + }(e, n, t)) + } + + function Kh(t, e, n, o = {}) { + const i = t.createElement("paragraph"); + t.model.schema.setAllowedAttributes(i, o, t), t.insert(i, e), Zh(t, n, t.createPositionAt(i, 0)) + } + + function Zh(t, e, n) { + e instanceof rc ? t.setSelection(n) : e.setTo(n) + } + + function Jh(t, e) { + const n = []; + Array.from(t.getItems({ + direction: "backward" + })).map((t => e.createRangeOn(t))).filter((e => (e.start.isAfter(t.start) || e.start.isEqual(t.start)) && (e.end.isBefore(t.end) || e.end.isEqual(t.end)))).forEach((t => { + n.push(t.start.parent), e.remove(t) + })), n.forEach((t => { + let n = t; + for (; n.parent && n.isEmpty;) { + const t = e.createRangeOn(n); + n = n.parent, e.remove(t) + } + })) + } + class Yh { + constructor(t, e, n) { + this._firstNode = null, this._lastNode = null, this._lastAutoParagraph = null, this._filterAttributesOf = [], this._affectedStart = null, this._affectedEnd = null, this._nodeToSelect = null, this.model = t, this.writer = e, this.position = n, this.canMergeWith = new Set([this.position.parent]), this.schema = t.schema, this._documentFragment = e.createDocumentFragment(), this._documentFragmentPosition = e.createPositionAt(this._documentFragment, 0) + } + handleNodes(t) { + for (const e of Array.from(t)) this._handleNode(e); + this._insertPartialFragment(), this._lastAutoParagraph && this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph), this._mergeOnRight(), this.schema.removeDisallowedAttributes(this._filterAttributesOf, this.writer), this._filterAttributesOf = [] + } + _updateLastNodeFromAutoParagraph(t) { + const e = this.writer.createPositionAfter(this._lastNode), + n = this.writer.createPositionAfter(t); + if (n.isAfter(e)) { + if (this._lastNode = t, this.position.parent != t || !this.position.isAtEnd) throw new b("insertcontent-invalid-insertion-position", this); + this.position = n, this._setAffectedBoundaries(this.position) + } + } + getSelectionRange() { + return this._nodeToSelect ? Pl._createOn(this._nodeToSelect) : this.model.schema.getNearestSelectionRange(this.position) + } + getAffectedRange() { + return this._affectedStart ? new Pl(this._affectedStart, this._affectedEnd) : null + } + destroy() { + this._affectedStart && this._affectedStart.detach(), this._affectedEnd && this._affectedEnd.detach() + } + _handleNode(t) { + if (this.schema.isObject(t)) return void this._handleObject(t); + let e = this._checkAndAutoParagraphToAllowedPosition(t); + e || (e = this._checkAndSplitToAllowedPosition(t), e) ? (this._appendToFragment(t), this._firstNode || (this._firstNode = t), this._lastNode = t) : this._handleDisallowedNode(t) + } + _insertPartialFragment() { + if (this._documentFragment.isEmpty) return; + const t = th.fromPosition(this.position, "toNext"); + this._setAffectedBoundaries(this.position), this._documentFragment.getChild(0) == this._firstNode && (this.writer.insert(this._firstNode, this.position), this._mergeOnLeft(), this.position = t.toPosition()), this._documentFragment.isEmpty || this.writer.insert(this._documentFragment, this.position), this._documentFragmentPosition = this.writer.createPositionAt(this._documentFragment, 0), this.position = t.toPosition(), t.detach() + } + _handleObject(t) { + this._checkAndSplitToAllowedPosition(t) ? this._appendToFragment(t) : this._tryAutoparagraphing(t) + } + _handleDisallowedNode(t) { + t.is("element") ? this.handleNodes(t.getChildren()) : this._tryAutoparagraphing(t) + } + _appendToFragment(t) { + if (!this.schema.checkChild(this.position, t)) throw new b("insertcontent-wrong-position", this, { + node: t, + position: this.position + }); + this.writer.insert(t, this._documentFragmentPosition), this._documentFragmentPosition = this._documentFragmentPosition.getShiftedBy(t.offsetSize), this.schema.isObject(t) && !this.schema.checkChild(this.position, "$text") ? this._nodeToSelect = t : this._nodeToSelect = null, this._filterAttributesOf.push(t) + } + _setAffectedBoundaries(t) { + this._affectedStart || (this._affectedStart = th.fromPosition(t, "toPrevious")), this._affectedEnd && !this._affectedEnd.isBefore(t) || (this._affectedEnd && this._affectedEnd.detach(), this._affectedEnd = th.fromPosition(t, "toNext")) + } + _mergeOnLeft() { + const t = this._firstNode; + if (!(t instanceof vl)) return; + if (!this._canMergeLeft(t)) return; + const e = th._createBefore(t); + e.stickiness = "toNext"; + const n = th.fromPosition(this.position, "toNext"); + this._affectedStart.isEqual(e) && (this._affectedStart.detach(), this._affectedStart = th._createAt(e.nodeBefore, "end", "toPrevious")), this._firstNode === this._lastNode && (this._firstNode = e.nodeBefore, this._lastNode = e.nodeBefore), this.writer.merge(e), e.isEqual(this._affectedEnd) && this._firstNode === this._lastNode && (this._affectedEnd.detach(), this._affectedEnd = th._createAt(e.nodeBefore, "end", "toNext")), this.position = n.toPosition(), n.detach(), this._filterAttributesOf.push(this.position.parent), e.detach() + } + _mergeOnRight() { + const t = this._lastNode; + if (!(t instanceof vl)) return; + if (!this._canMergeRight(t)) return; + const e = th._createAfter(t); + if (e.stickiness = "toNext", !this.position.isEqual(e)) throw new b("insertcontent-invalid-insertion-position", this); + this.position = El._createAt(e.nodeBefore, "end"); + const n = th.fromPosition(this.position, "toPrevious"); + this._affectedEnd.isEqual(e) && (this._affectedEnd.detach(), this._affectedEnd = th._createAt(e.nodeBefore, "end", "toNext")), this._firstNode === this._lastNode && (this._firstNode = e.nodeBefore, this._lastNode = e.nodeBefore), this.writer.merge(e), e.getShiftedBy(-1).isEqual(this._affectedStart) && this._firstNode === this._lastNode && (this._affectedStart.detach(), this._affectedStart = th._createAt(e.nodeBefore, 0, "toPrevious")), this.position = n.toPosition(), n.detach(), this._filterAttributesOf.push(this.position.parent), e.detach() + } + _canMergeLeft(t) { + const e = t.previousSibling; + return e instanceof vl && this.canMergeWith.has(e) && this.model.schema.checkMerge(e, t) + } + _canMergeRight(t) { + const e = t.nextSibling; + return e instanceof vl && this.canMergeWith.has(e) && this.model.schema.checkMerge(t, e) + } + _tryAutoparagraphing(t) { + const e = this.writer.createElement("paragraph"); + this._getAllowedIn(this.position.parent, e) && this.schema.checkChild(e, t) && (e._appendChild(t), this._handleNode(e)) + } + _checkAndAutoParagraphToAllowedPosition(t) { + if (this.schema.checkChild(this.position.parent, t)) return !0; + if (!this.schema.checkChild(this.position.parent, "paragraph") || !this.schema.checkChild("paragraph", t)) return !1; + this._insertPartialFragment(); + const e = this.writer.createElement("paragraph"); + return this.writer.insert(e, this.position), this._setAffectedBoundaries(this.position), this._lastAutoParagraph = e, this.position = this.writer.createPositionAt(e, 0), !0 + } + _checkAndSplitToAllowedPosition(t) { + const e = this._getAllowedIn(this.position.parent, t); + if (!e) return !1; + for (e != this.position.parent && this._insertPartialFragment(); e != this.position.parent;) + if (this.position.isAtStart) { + const t = this.position.parent; + this.position = this.writer.createPositionBefore(t), t.isEmpty && t.parent === e && this.writer.remove(t) + } else if (this.position.isAtEnd) this.position = this.writer.createPositionAfter(this.position.parent); + else { + const t = this.writer.createPositionAfter(this.position.parent); + this._setAffectedBoundaries(this.position), this.writer.split(this.position), this.position = t, this.canMergeWith.add(this.position.nodeAfter) + } + return !0 + } + _getAllowedIn(t, e) { + return this.schema.checkChild(t, e) ? t : this.schema.isLimit(t) ? null : this._getAllowedIn(t.parent, e) + } + } + + function Qh(t, e, n = "auto") { + const o = t.getSelectedElement(); + if (o && e.schema.isObject(o) && !e.schema.isInline(o)) return "before" == n || "after" == n ? e.createRange(e.createPositionAt(o, n)) : e.createRangeOn(o); + const i = Ei(t.getSelectedBlocks()); + if (!i) return e.createRange(t.focus); + if (i.isEmpty) return e.createRange(e.createPositionAt(i, 0)); + const r = e.createPositionAfter(i); + return t.focus.isTouching(r) ? e.createRange(r) : e.createRange(e.createPositionBefore(i)) + } + + function Xh(t, e, n, o = {}) { + if (!t.schema.isObject(e)) throw new b("insertobject-element-not-an-object", t, { + object: e + }); + const i = n || t.document.selection; + let r = i; + o.findOptimalPosition && t.schema.isBlock(e) && (r = t.createSelection(Qh(i, t, o.findOptimalPosition))); + const s = Ei(i.getSelectedBlocks()), + a = {}; + return s && Object.assign(a, t.schema.getAttributesWithProperty(s, "copyOnReplace", !0)), t.change((n => { + r.isCollapsed || t.deleteContent(r, { + doNotAutoparagraph: !0 + }); + let i = e; + const s = r.anchor.parent; + !t.schema.checkChild(s, e) && t.schema.checkChild(s, "paragraph") && t.schema.checkChild("paragraph", e) && (i = n.createElement("paragraph"), n.insert(e, i)), t.schema.setAllowedAttributes(i, a, n); + const l = t.insertContent(i, r); + return l.isCollapsed || o.setSelection && function(t, e, n, o) { + const i = t.model; + if ("on" == n) return void t.setSelection(e, "on"); + if ("after" != n) throw new b("insertobject-invalid-place-parameter-value", i); + let r = e.nextSibling; + if (i.schema.isInline(e)) return void t.setSelection(e, "after"); + const s = r && i.schema.checkChild(r, "$text"); + !s && i.schema.checkChild(e.parent, "paragraph") && (r = t.createElement("paragraph"), i.schema.setAllowedAttributes(r, o, t), i.insertContent(r, t.createPositionAfter(e))); + r && t.setSelection(r, 0) + }(n, e, o.setSelection, a), l + })) + } + const tu = ' ,.?!:;"-()'; + + function eu(t, e) { + const { + isForward: n, + walker: o, + unit: i, + schema: r, + treatEmojiAsSingleUnit: s + } = t, { + type: a, + item: l, + nextPosition: c + } = e; + if ("text" == a) return "word" === t.unit ? function(t, e) { + let n = t.position.textNode; + n || (n = e ? t.position.nodeAfter : t.position.nodeBefore); + for (; n && n.is("$text");) { + const o = t.position.offset - n.startOffset; + if (iu(n, o, e)) n = e ? t.position.nodeAfter : t.position.nodeBefore; + else { + if (ou(n.data, o, e)) break; + t.next() + } + } + return t.position + }(o, n) : function(t, e, n) { + const o = t.position.textNode; + if (o) { + const i = o.data; + let r = t.position.offset - o.startOffset; + for (; Ii(i, r) || "character" == e && Pi(i, r) || n && zi(i, r);) t.next(), r = t.position.offset - o.startOffset + } + return t.position + }(o, i, s); + if (a == (n ? "elementStart" : "elementEnd")) { + if (r.isSelectable(l)) return El._createAt(l, n ? "after" : "before"); + if (r.checkChild(c, "$text")) return c + } else { + if (r.isLimit(l)) return void o.skip((() => !0)); + if (r.checkChild(c, "$text")) return c + } + } + + function nu(t, e) { + const n = t.root, + o = El._createAt(n, e ? "end" : 0); + return e ? new Pl(t, o) : new Pl(o, t) + } + + function ou(t, e, n) { + const o = e + (n ? 0 : -1); + return tu.includes(t.charAt(o)) + } + + function iu(t, e, n) { + return e === (n ? t.offsetSize : 0) + } + class ru extends(q()) { + constructor() { + super(), this.markers = new zh, this.document = new xh(this), this.schema = new Gc, this._pendingChanges = [], this._currentWriter = null, ["deleteContent", "modifySelection", "getSelectedContent", "applyOperation"].forEach((t => this.decorate(t))), this.on("applyOperation", ((t, e) => { + e[0]._validate() + }), { + priority: "highest" + }), this.schema.register("$root", { + isLimit: !0 + }), this.schema.register("$container", { + allowIn: ["$root", "$container"] + }), this.schema.register("$block", { + allowIn: ["$root", "$container"], + isBlock: !0 + }), this.schema.register("$blockObject", { + allowWhere: "$block", + isBlock: !0, + isObject: !0 + }), this.schema.register("$inlineObject", { + allowWhere: "$text", + allowAttributesOf: "$text", + isInline: !0, + isObject: !0 + }), this.schema.register("$text", { + allowIn: "$block", + isInline: !0, + isContent: !0 + }), this.schema.register("$clipboardHolder", { + allowContentOf: "$root", + allowChildren: "$text", + isLimit: !0 + }), this.schema.register("$documentFragment", { + allowContentOf: "$root", + allowChildren: "$text", + isLimit: !0 + }), this.schema.register("$marker"), this.schema.addChildCheck(((t, e) => { + if ("$marker" === e.name) return !0 + })), Nc(this), this.document.registerPostFixer(_c), this.on("insertContent", ((t, [e, n]) => { + t.return = function(t, e, n) { + return t.change((o => { + const i = n || t.document.selection; + i.isCollapsed || t.deleteContent(i, { + doNotAutoparagraph: !0 + }); + const r = new Yh(t, o, i.anchor), + s = []; + let a; + if (e.is("documentFragment")) { + if (e.markers.size) { + const t = []; + for (const [n, o] of e.markers) { + const { + start: e, + end: i + } = o, r = e.isEqual(i); + t.push({ + position: e, + name: n, + isCollapsed: r + }, { + position: i, + name: n, + isCollapsed: r + }) + } + t.sort((({ + position: t + }, { + position: e + }) => t.isBefore(e) ? 1 : -1)); + for (const { + position: n, + name: i, + isCollapsed: r + } + of t) { + let t = null, + a = null; + const l = n.parent === e && n.isAtStart, + c = n.parent === e && n.isAtEnd; + l || c ? r && (a = l ? "start" : "end") : (t = o.createElement("$marker"), o.insert(t, n)), s.push({ + name: i, + element: t, + collapsed: a + }) + } + } + a = e.getChildren() + } else a = [e]; + r.handleNodes(a); + let l = r.getSelectionRange(); + if (e.is("documentFragment") && s.length) { + const t = l ? ec.fromRange(l) : null, + e = {}; + for (let t = s.length - 1; t >= 0; t--) { + const { + name: n, + element: i, + collapsed: a + } = s[t], l = !e[n]; + if (l && (e[n] = []), i) { + const t = o.createPositionAt(i, "before"); + e[n].push(t), o.remove(i) + } else { + const t = r.getAffectedRange(); + if (!t) { + a && e[n].push(r.position); + continue + } + a ? e[n].push(t[a]) : e[n].push(l ? t.start : t.end) + } + } + for (const [t, [n, i]] of Object.entries(e)) n && i && n.root === i.root && o.addMarker(t, { + usingOperation: !0, + affectsData: !0, + range: new Pl(n, i) + }); + t && (l = t.toRange(), t.detach()) + } + l && (i instanceof rc ? o.setSelection(l) : i.setTo(l)); + const c = r.getAffectedRange() || t.createRange(i.anchor); + return r.destroy(), c + })) + }(this, e, n) + })), this.on("insertObject", ((t, [e, n, o]) => { + t.return = Xh(this, e, n, o) + })), this.on("canEditAt", (t => { + const e = !this.document.isReadOnly; + t.return = e, e || t.stop() + })) + } + change(t) { + try { + return 0 === this._pendingChanges.length ? (this._pendingChanges.push({ + batch: new oh, + callback: t + }), this._runPendingChanges()[0]) : t(this._currentWriter) + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + enqueueChange(t, e) { + try { + t ? "function" == typeof t ? (e = t, t = new oh) : t instanceof oh || (t = new oh(t)) : t = new oh, this._pendingChanges.push({ + batch: t, + callback: e + }), 1 == this._pendingChanges.length && this._runPendingChanges() + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + applyOperation(t) { + t._execute() + } + insertContent(t, e, n, ...o) { + const i = su(e, n); + return this.fire("insertContent", [t, i, n, ...o]) + } + insertObject(t, e, n, o, ...i) { + const r = su(e, n); + return this.fire("insertObject", [t, r, o, o, ...i]) + } + deleteContent(t, e) { + Wh(this, t, e) + } + modifySelection(t, e) { + ! function(t, e, n = {}) { + const o = t.schema, + i = "backward" != n.direction, + r = n.unit ? n.unit : "character", + s = !!n.treatEmojiAsSingleUnit, + a = e.focus, + l = new yl({ + boundaries: nu(a, i), + singleCharacters: !0, + direction: i ? "forward" : "backward" + }), + c = { + walker: l, + schema: o, + isForward: i, + unit: r, + treatEmojiAsSingleUnit: s + }; + let d; + for (; d = l.next();) { + if (d.done) return; + const n = eu(c, d.value); + if (n) return void(e instanceof rc ? t.change((t => { + t.setSelectionFocus(n) + })) : e.setFocus(n)) + } + }(this, t, e) + } + getSelectedContent(t) { + return function(t, e) { + return t.change((t => { + const n = t.createDocumentFragment(), + o = e.getFirstRange(); + if (!o || o.isCollapsed) return n; + const i = o.start.root, + r = o.start.getCommonPath(o.end), + s = i.getNodeByPath(r); + let a; + a = o.start.parent == o.end.parent ? o : t.createRange(t.createPositionAt(s, o.start.path[r.length]), t.createPositionAt(s, o.end.path[r.length] + 1)); + const l = a.end.offset - a.start.offset; + for (const e of a.getItems({ + shallow: !0 + })) e.is("$textProxy") ? t.appendText(e.data, e.getAttributes(), n) : t.append(t.cloneElement(e, !0), n); + if (a != o) { + const e = o._getTransformedByMove(a.start, t.createPositionAt(n, 0), l)[0], + i = t.createRange(t.createPositionAt(n, 0), e.start); + Jh(t.createRange(e.end, t.createPositionAt(n, "end")), t), Jh(i, t) + } + return n + })) + }(this, t) + } + hasContent(t, e = {}) { + const n = t instanceof Pl ? t : Pl._createIn(t); + if (n.isCollapsed) return !1; + const { + ignoreWhitespaces: o = !1, + ignoreMarkers: i = !1 + } = e; + if (!i) + for (const t of this.markers.getMarkersIntersectingRange(n)) + if (t.affectsData) return !0; + for (const t of n.getItems()) + if (this.schema.isContent(t)) { + if (!t.is("$textProxy")) return !0; + if (!o) return !0; + if (-1 !== t.data.search(/\S/)) return !0 + } return !1 + } + canEditAt(t) { + const e = su(t); + return this.fire("canEditAt", [e]) + } + createPositionFromPath(t, e, n) { + return new El(t, e, n) + } + createPositionAt(t, e) { + return El._createAt(t, e) + } + createPositionAfter(t) { + return El._createAfter(t) + } + createPositionBefore(t) { + return El._createBefore(t) + } + createRange(t, e) { + return new Pl(t, e) + } + createRangeIn(t) { + return Pl._createIn(t) + } + createRangeOn(t) { + return Pl._createOn(t) + } + createSelection(...t) { + return new Kl(...t) + } + createBatch(t) { + return new oh(t) + } + createOperationFromJSON(t) { + return jd.fromJSON(t, this.document) + } + destroy() { + this.document.destroy(), this.stopListening() + } + _runPendingChanges() { + const t = []; + this.fire("_beforeChanges"); + try { + for (; this._pendingChanges.length;) { + const e = this._pendingChanges[0].batch; + this._currentWriter = new Mh(this, e); + const n = this._pendingChanges[0].callback(this._currentWriter); + t.push(n), this.document._handleChangeBlock(this._currentWriter), this._pendingChanges.shift(), this._currentWriter = null + } + } finally { + this._pendingChanges.length = 0, this._currentWriter = null, this.fire("_afterChanges") + } + return t + } + } + + function su(t, e) { + if (t) return t instanceof Kl || t instanceof rc ? t : t instanceof wl ? e || 0 === e ? new Kl(t, e) : t.is("rootElement") ? new Kl(t, "in") : new Kl(t, "on") : new Kl(t) + } + class au extends va { + constructor() { + super(...arguments), this.domEventType = "click" + } + onDomEvent(t) { + this.fire(t.type, t) + } + } + class lu extends va { + constructor() { + super(...arguments), this.domEventType = ["mousedown", "mouseup", "mouseover", "mouseout"] + } + onDomEvent(t) { + this.fire(t.type, t) + } + } + class cu { + constructor(t) { + this.document = t + } + createDocumentFragment(t) { + return new Os(this.document, t) + } + createElement(t, e, n) { + return new rs(this.document, t, e, n) + } + createText(t) { + return new or(this.document, t) + } + clone(t, e = !1) { + return t._clone(e) + } + appendChild(t, e) { + return e._appendChild(t) + } + insertChild(t, e, n) { + return n._insertChild(t, e) + } + removeChildren(t, e, n) { + return n._removeChildren(t, e) + } + remove(t) { + const e = t.parent; + return e ? this.removeChildren(e.getChildIndex(t), 1, e) : [] + } + replace(t, e) { + const n = t.parent; + if (n) { + const o = n.getChildIndex(t); + return this.removeChildren(o, 1, n), this.insertChild(o, e, n), !0 + } + return !1 + } + unwrapElement(t) { + const e = t.parent; + if (e) { + const n = e.getChildIndex(t); + this.remove(t), this.insertChild(n, t.getChildren(), e) + } + } + rename(t, e) { + const n = new rs(this.document, t, e.getAttributes(), e.getChildren()); + return this.replace(e, n) ? n : null + } + setAttribute(t, e, n) { + n._setAttribute(t, e) + } + removeAttribute(t, e) { + e._removeAttribute(t) + } + addClass(t, e) { + e._addClass(t) + } + removeClass(t, e) { + e._removeClass(t) + } + setStyle(t, e, n) { + vt(t) && void 0 === n ? e._setStyle(t) : n._setStyle(t, e) + } + removeStyle(t, e) { + e._removeStyle(t) + } + setCustomProperty(t, e, n) { + n._setCustomProperty(t, e) + } + removeCustomProperty(t, e) { + return e._removeCustomProperty(t) + } + createPositionAt(t, e) { + return gs._createAt(t, e) + } + createPositionAfter(t) { + return gs._createAfter(t) + } + createPositionBefore(t) { + return gs._createBefore(t) + } + createRange(t, e) { + return new ms(t, e) + } + createRangeOn(t) { + return ms._createOn(t) + } + createRangeIn(t) { + return ms._createIn(t) + } + createSelection(...t) { + return new fs(...t) + } + } + const du = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i, + hu = /^rgb\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\)$/i, + uu = /^rgba\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i, + gu = /^hsl\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\.?[0-9]+)?\)$/i, + mu = /^hsla\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i, + pu = /\w+\((?:[^()]|\([^()]*\))*\)|\S+/gi, + fu = new Set(["black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua", "orange", "aliceblue", "antiquewhite", "aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "grey", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow", "limegreen", "linen", "magenta", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue", "slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet", "wheat", "whitesmoke", "yellowgreen", "activeborder", "activecaption", "appworkspace", "background", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "captiontext", "graytext", "highlight", "highlighttext", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infobackground", "infotext", "menu", "menutext", "scrollbar", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "window", "windowframe", "windowtext", "rebeccapurple", "currentcolor", "transparent"]); + + function bu(t) { + return t.startsWith("#") ? du.test(t) : t.startsWith("rgb") ? hu.test(t) || uu.test(t) : t.startsWith("hsl") ? gu.test(t) || mu.test(t) : fu.has(t.toLowerCase()) + } + const ku = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]; + + function wu(t) { + return ku.includes(t) + } + const Au = /^([+-]?[0-9]*([.][0-9]+)?(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/; + + function Cu(t) { + return Au.test(t) + } + const _u = /^[+-]?[0-9]*([.][0-9]+)?%$/; + + function vu(t) { + return _u.test(t) + } + const yu = ["repeat-x", "repeat-y", "repeat", "space", "round", "no-repeat"]; + + function xu(t) { + return yu.includes(t) + } + const Eu = ["center", "top", "bottom", "left", "right"]; + + function Du(t) { + return Eu.includes(t) + } + const Su = ["fixed", "scroll", "local"]; + + function Tu(t) { + return Su.includes(t) + } + const Bu = /^url\(/; + + function Iu(t) { + return Bu.test(t) + } + + function Pu(t = "") { + if ("" === t) return { + top: void 0, + right: void 0, + bottom: void 0, + left: void 0 + }; + const e = Ou(t), + n = e[0], + o = e[2] || n, + i = e[1] || n; + return { + top: n, + bottom: o, + right: i, + left: e[3] || i + } + } + + function Ru(t) { + return e => { + const { + top: n, + right: o, + bottom: i, + left: r + } = e, s = []; + return [n, o, r, i].every((t => !!t)) ? s.push([t, zu(e)]) : (n && s.push([t + "-top", n]), o && s.push([t + "-right", o]), i && s.push([t + "-bottom", i]), r && s.push([t + "-left", r])), s + } + } + + function zu({ + top: t, + right: e, + bottom: n, + left: o + }) { + const i = []; + return o !== e ? i.push(t, e, n, o) : n !== t ? i.push(t, e, n) : e !== t ? i.push(t, e) : i.push(t), i.join(" ") + } + + function Vu(t) { + return e => ({ + path: t, + value: Pu(e) + }) + } + + function Ou(t) { + const e = t.matchAll(pu); + return Array.from(e).map((t => t[0])) + } + + function Fu(t) { + t.setNormalizer("background", (t => { + const e = {}, + n = Ou(t); + for (const t of n) xu(t) ? (e.repeat = e.repeat || [], e.repeat.push(t)) : Du(t) ? (e.position = e.position || [], e.position.push(t)) : Tu(t) ? e.attachment = t : bu(t) ? e.color = t : Iu(t) && (e.image = t); + return { + path: "background", + value: e + } + })), t.setNormalizer("background-color", (t => ({ + path: "background.color", + value: t + }))), t.setReducer("background", (t => { + const e = []; + return e.push(["background-color", t.color]), e + })), t.setStyleRelation("background", ["background-color"]) + } + + function Mu(t) { + t.setNormalizer("border", (t => { + const { + color: e, + style: n, + width: o + } = Uu(t); + return { + path: "border", + value: { + color: Pu(e), + style: Pu(n), + width: Pu(o) + } + } + })), t.setNormalizer("border-top", Nu("top")), t.setNormalizer("border-right", Nu("right")), t.setNormalizer("border-bottom", Nu("bottom")), t.setNormalizer("border-left", Nu("left")), t.setNormalizer("border-color", Lu("color")), t.setNormalizer("border-width", Lu("width")), t.setNormalizer("border-style", Lu("style")), t.setNormalizer("border-top-color", ju("color", "top")), t.setNormalizer("border-top-style", ju("style", "top")), t.setNormalizer("border-top-width", ju("width", "top")), t.setNormalizer("border-right-color", ju("color", "right")), t.setNormalizer("border-right-style", ju("style", "right")), t.setNormalizer("border-right-width", ju("width", "right")), t.setNormalizer("border-bottom-color", ju("color", "bottom")), t.setNormalizer("border-bottom-style", ju("style", "bottom")), t.setNormalizer("border-bottom-width", ju("width", "bottom")), t.setNormalizer("border-left-color", ju("color", "left")), t.setNormalizer("border-left-style", ju("style", "left")), t.setNormalizer("border-left-width", ju("width", "left")), t.setExtractor("border-top", qu("top")), t.setExtractor("border-right", qu("right")), t.setExtractor("border-bottom", qu("bottom")), t.setExtractor("border-left", qu("left")), t.setExtractor("border-top-color", "border.color.top"), t.setExtractor("border-right-color", "border.color.right"), t.setExtractor("border-bottom-color", "border.color.bottom"), t.setExtractor("border-left-color", "border.color.left"), t.setExtractor("border-top-width", "border.width.top"), t.setExtractor("border-right-width", "border.width.right"), t.setExtractor("border-bottom-width", "border.width.bottom"), t.setExtractor("border-left-width", "border.width.left"), t.setExtractor("border-top-style", "border.style.top"), t.setExtractor("border-right-style", "border.style.right"), t.setExtractor("border-bottom-style", "border.style.bottom"), t.setExtractor("border-left-style", "border.style.left"), t.setReducer("border-color", Ru("border-color")), t.setReducer("border-style", Ru("border-style")), t.setReducer("border-width", Ru("border-width")), t.setReducer("border-top", $u("top")), t.setReducer("border-right", $u("right")), t.setReducer("border-bottom", $u("bottom")), t.setReducer("border-left", $u("left")), t.setReducer("border", function() { + return e => { + const n = Wu(e, "top"), + o = Wu(e, "right"), + i = Wu(e, "bottom"), + r = Wu(e, "left"), + s = [n, o, i, r], + a = { + width: t(s, "width"), + style: t(s, "style"), + color: t(s, "color") + }, + l = Gu(a, "all"); + if (l.length) return l; + return [...Object.entries(a).reduce(((t, [e, n]) => (n && (t.push([`border-${e}`, n]), s.forEach((t => delete t[e]))), t)), []), ...Gu(n, "top"), ...Gu(o, "right"), ...Gu(i, "bottom"), ...Gu(r, "left")] + }; + + function t(t, e) { + return t.map((t => t[e])).reduce(((t, e) => t == e ? t : null)) + } + }()), t.setStyleRelation("border", ["border-color", "border-style", "border-width", "border-top", "border-right", "border-bottom", "border-left", "border-top-color", "border-right-color", "border-bottom-color", "border-left-color", "border-top-style", "border-right-style", "border-bottom-style", "border-left-style", "border-top-width", "border-right-width", "border-bottom-width", "border-left-width"]), t.setStyleRelation("border-color", ["border-top-color", "border-right-color", "border-bottom-color", "border-left-color"]), t.setStyleRelation("border-style", ["border-top-style", "border-right-style", "border-bottom-style", "border-left-style"]), t.setStyleRelation("border-width", ["border-top-width", "border-right-width", "border-bottom-width", "border-left-width"]), t.setStyleRelation("border-top", ["border-top-color", "border-top-style", "border-top-width"]), t.setStyleRelation("border-right", ["border-right-color", "border-right-style", "border-right-width"]), t.setStyleRelation("border-bottom", ["border-bottom-color", "border-bottom-style", "border-bottom-width"]), t.setStyleRelation("border-left", ["border-left-color", "border-left-style", "border-left-width"]) + } + + function Nu(t) { + return e => { + const { + color: n, + style: o, + width: i + } = Uu(e), r = {}; + return void 0 !== n && (r.color = { + [t]: n + }), void 0 !== o && (r.style = { + [t]: o + }), void 0 !== i && (r.width = { + [t]: i + }), { + path: "border", + value: r + } + } + } + + function Lu(t) { + return e => ({ + path: "border", + value: Hu(e, t) + }) + } + + function Hu(t, e) { + return { + [e]: Pu(t) + } + } + + function ju(t, e) { + return n => ({ + path: "border", + value: { + [t]: { + [e]: n + } + } + }) + } + + function qu(t) { + return (e, n) => { + if (n.border) return Wu(n.border, t) + } + } + + function Wu(t, e) { + const n = {}; + return t.width && t.width[e] && (n.width = t.width[e]), t.style && t.style[e] && (n.style = t.style[e]), t.color && t.color[e] && (n.color = t.color[e]), n + } + + function Uu(t) { + const e = {}, + n = Ou(t); + for (const t of n) Cu(t) || /thin|medium|thick/.test(t) ? e.width = t : wu(t) ? e.style = t : e.color = t; + return e + } + + function $u(t) { + return e => Gu(e, t) + } + + function Gu(t, e) { + const n = []; + if (t && t.width && n.push("width"), t && t.style && n.push("style"), t && t.color && n.push("color"), 3 == n.length) { + const o = n.map((e => t[e])).join(" "); + return ["all" == e ? ["border", o] : [`border-${e}`, o]] + } + return "all" == e ? [] : n.map((n => [`border-${e}-${n}`, t[n]])) + } + + function Ku(t) { + t.setNormalizer("margin", Vu("margin")), t.setNormalizer("margin-top", (t => ({ + path: "margin.top", + value: t + }))), t.setNormalizer("margin-right", (t => ({ + path: "margin.right", + value: t + }))), t.setNormalizer("margin-bottom", (t => ({ + path: "margin.bottom", + value: t + }))), t.setNormalizer("margin-left", (t => ({ + path: "margin.left", + value: t + }))), t.setReducer("margin", Ru("margin")), t.setStyleRelation("margin", ["margin-top", "margin-right", "margin-bottom", "margin-left"]) + } + + function Zu(t) { + t.setNormalizer("padding", Vu("padding")), t.setNormalizer("padding-top", (t => ({ + path: "padding.top", + value: t + }))), t.setNormalizer("padding-right", (t => ({ + path: "padding.right", + value: t + }))), t.setNormalizer("padding-bottom", (t => ({ + path: "padding.bottom", + value: t + }))), t.setNormalizer("padding-left", (t => ({ + path: "padding.left", + value: t + }))), t.setReducer("padding", Ru("padding")), t.setStyleRelation("padding", ["padding-top", "padding-right", "padding-bottom", "padding-left"]) + } + class Ju { + constructor() { + this._commands = new Map + } + add(t, e) { + this._commands.set(t, e) + } + get(t) { + return this._commands.get(t) + } + execute(t, ...e) { + const n = this.get(t); + if (!n) throw new b("commandcollection-command-not-found", this, { + commandName: t + }); + return n.execute(...e) + }* names() { + yield* this._commands.keys() + }* commands() { + yield* this._commands.values() + } [Symbol.iterator]() { + return this._commands[Symbol.iterator]() + } + destroy() { + for (const t of this.commands()) t.destroy() + } + } + class Yu extends(q()) { + constructor(t = {}) { + super(); + const e = this.constructor, + n = t.language || e.defaultConfig && e.defaultConfig.language; + this._context = t.context || new Hi({ + language: n + }), this._context._addEditor(this, !t.context); + const o = Array.from(e.builtinPlugins || []); + this.config = new _o(t, e.defaultConfig), this.config.define("plugins", o), this.config.define(this._context._getEditorConfig()), this.plugins = new Li(this, o, this._context.plugins), this.locale = this._context.locale, this.t = this.locale.t, this._readOnlyLocks = new Set, this.commands = new Ju, this.set("state", "initializing"), this.once("ready", (() => this.state = "ready"), { + priority: "high" + }), this.once("destroy", (() => this.state = "destroyed"), { + priority: "high" + }), this.model = new ru, this.on("change:isReadOnly", (() => { + this.model.document.isReadOnly = this.isReadOnly + })); + const i = new ns; + this.data = new kd(this.model, i), this.editing = new qc(this.model, i), this.editing.view.document.bind("isReadOnly").to(this), this.conversion = new wd([this.editing.downcastDispatcher, this.data.downcastDispatcher], this.data.upcastDispatcher), this.conversion.addAlias("dataDowncast", this.data.downcastDispatcher), this.conversion.addAlias("editingDowncast", this.editing.downcastDispatcher), this.keystrokes = new qi(this), this.keystrokes.listenTo(this.editing.view.document) + } + get isReadOnly() { + return this._readOnlyLocks.size > 0 + } + set isReadOnly(t) { + throw new b("editor-isreadonly-has-no-setter") + } + enableReadOnlyMode(t) { + if ("string" != typeof t && "symbol" != typeof t) throw new b("editor-read-only-lock-id-invalid", null, { + lockId: t + }); + this._readOnlyLocks.has(t) || (this._readOnlyLocks.add(t), 1 === this._readOnlyLocks.size && this.fire("change:isReadOnly", "isReadOnly", !0, !1)) + } + disableReadOnlyMode(t) { + if ("string" != typeof t && "symbol" != typeof t) throw new b("editor-read-only-lock-id-invalid", null, { + lockId: t + }); + this._readOnlyLocks.has(t) && (this._readOnlyLocks.delete(t), 0 === this._readOnlyLocks.size && this.fire("change:isReadOnly", "isReadOnly", !1, !0)) + } + initPlugins() { + const t = this.config, + e = t.get("plugins"), + n = t.get("removePlugins") || [], + o = t.get("extraPlugins") || [], + i = t.get("substitutePlugins") || []; + return this.plugins.init(e.concat(o), n, i) + } + destroy() { + let t = Promise.resolve(); + return "initializing" == this.state && (t = new Promise((t => this.once("ready", t)))), t.then((() => { + this.fire("destroy"), this.stopListening(), this.commands.destroy() + })).then((() => this.plugins.destroy())).then((() => { + this.model.destroy(), this.data.destroy(), this.editing.destroy(), this.keystrokes.destroy() + })).then((() => this._context._removeEditor(this))) + } + execute(t, ...e) { + try { + return this.commands.execute(t, ...e) + } catch (t) { + b.rethrowUnexpectedError(t, this) + } + } + focus() { + this.editing.view.focus() + } + static create(...t) { + throw new Error("This is an abstract method.") + } + } + + function Qu(t) { + return class extends t { + setData(t) { + this.data.set(t) + } + getData(t) { + return this.data.get(t) + } + } + } { + const t = Qu(Object); + Qu.setData = t.prototype.setData, Qu.getData = t.prototype.getData + } + + function Xu(t) { + return class extends t { + updateSourceElement(t = this.data.get()) { + if (!this.sourceElement) throw new b("editor-missing-sourceelement", this); + const e = this.config.get("updateSourceElementOnDestroy"), + n = this.sourceElement instanceof HTMLTextAreaElement; + Uo(this.sourceElement, e || n ? t : "") + } + } + } + Xu.updateSourceElement = Xu(Object).prototype.updateSourceElement; + class tg extends ji { + static get pluginName() { + return "PendingActions" + } + init() { + this.set("hasAny", !1), this._actions = new xi({ + idProperty: "_id" + }), this._actions.delegate("add", "remove").to(this) + } + add(t) { + if ("string" != typeof t) throw new b("pendingactions-add-invalid-message", this); + const e = new(q()); + return e.set("message", t), this._actions.add(e), this.hasAny = !0, e + } + remove(t) { + this._actions.remove(t), this.hasAny = !!this._actions.length + } + get first() { + return this._actions.get(0) + } [Symbol.iterator]() { + return this._actions[Symbol.iterator]() + } + } + const eg = { + bold: '', + cancel: '', + caption: '', + check: '', + cog: '', + eraser: '', + image: '', + lowVision: '', + importExport: '', + paragraph: '', + plus: '', + text: '', + alignBottom: '', + alignMiddle: '', + alignTop: '', + alignLeft: '', + alignCenter: '', + alignRight: '', + alignJustify: '', + objectLeft: '', + objectCenter: '', + objectRight: '', + objectFullWidth: '', + objectInline: '', + objectBlockLeft: '', + objectBlockRight: '', + objectSizeFull: '', + objectSizeLarge: '', + objectSizeSmall: '', + objectSizeMedium: '', + pencil: '', + pilcrow: '', + quote: '', + threeVerticalDots: '' + }; + + function ng({ + emitter: t, + activator: e, + callback: n, + contextElements: o + }) { + t.listenTo(document, "mousedown", ((t, i) => { + if (!e()) return; + const r = "function" == typeof i.composedPath ? i.composedPath() : [], + s = "function" == typeof o ? o() : o; + for (const t of s) + if (t.contains(i.target) || r.includes(t)) return; + n() + })) + } + + function og(t) { + return class extends t { + disableCssTransitions() { + this._isCssTransitionsDisabled = !0 + } + enableCssTransitions() { + this._isCssTransitionsDisabled = !1 + } + constructor(...t) { + super(...t), this.set("_isCssTransitionsDisabled", !1), this.initializeCssTransitionDisablerMixin() + } + initializeCssTransitionDisablerMixin() { + this.extendTemplate({ + attributes: { + class: [this.bindTemplate.if("_isCssTransitionsDisabled", "ck-transitions-disabled")] + } + }) + } + } + } + + function ig({ + view: t + }) { + t.listenTo(t.element, "submit", ((e, n) => { + n.preventDefault(), t.fire("submit") + }), { + useCapture: !0 + }) + } + + function rg({ + keystrokeHandler: t, + focusTracker: e, + gridItems: n, + numberOfColumns: o, + uiLanguageDirection: i + }) { + const r = "number" == typeof o ? () => o : o; + + function s(t) { + return o => { + const i = n.find((t => t.element === e.focusedElement)), + r = n.getIndex(i), + s = t(r, n); + n.get(s).focus(), o.stopPropagation(), o.preventDefault() + } + } + + function a(t, e) { + return t === e - 1 ? 0 : t + 1 + } + + function l(t, e) { + return 0 === t ? e - 1 : t - 1 + } + t.set("arrowright", s(((t, e) => "rtl" === i ? l(t, e.length) : a(t, e.length)))), t.set("arrowleft", s(((t, e) => "rtl" === i ? a(t, e.length) : l(t, e.length)))), t.set("arrowup", s(((t, e) => { + let n = t - r(); + return n < 0 && (n = t + r() * Math.floor(e.length / r()), n > e.length - 1 && (n -= r())), n + }))), t.set("arrowdown", s(((t, e) => { + let n = t + r(); + return n > e.length - 1 && (n = t % r()), n + }))) + } + class sg extends xi { + constructor(t = []) { + super(t, { + idProperty: "viewUid" + }), this.on("add", ((t, e, n) => { + this._renderViewIntoCollectionParent(e, n) + })), this.on("remove", ((t, e) => { + e.element && this._parentElement && e.element.remove() + })), this._parentElement = null + } + destroy() { + this.map((t => t.destroy())) + } + setParent(t) { + this._parentElement = t; + for (const t of this) this._renderViewIntoCollectionParent(t) + } + delegate(...t) { + if (!t.length || !t.every((t => "string" == typeof t))) throw new b("ui-viewcollection-delegate-wrong-events", this); + return { + to: e => { + for (const n of this) + for (const o of t) n.delegate(o).to(e); + this.on("add", ((n, o) => { + for (const n of t) o.delegate(n).to(e) + })), this.on("remove", ((n, o) => { + for (const n of t) o.stopDelegating(n, e) + })) + } + } + } + _renderViewIntoCollectionParent(t, e) { + t.isRendered || t.render(), t.element && this._parentElement && this._parentElement.insertBefore(t.element, this._parentElement.children[e]) + } + remove(t) { + return super.remove(t) + } + } + var ag = n(4793), + lg = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(ag.Z, lg); + ag.Z.locals; + class cg extends(So(q())) { + constructor(t) { + super(), this.element = null, this.isRendered = !1, this.locale = t, this.t = t && t.t, this._viewCollections = new xi, this._unboundChildren = this.createCollection(), this._viewCollections.on("add", ((e, n) => { + n.locale = t, n.t = t && t.t + })), this.decorate("render") + } + get bindTemplate() { + return this._bindTemplate ? this._bindTemplate : this._bindTemplate = dg.bind(this, this) + } + createCollection(t) { + const e = new sg(t); + return this._viewCollections.add(e), e + } + registerChild(t) { + Q(t) || (t = [t]); + for (const e of t) this._unboundChildren.add(e) + } + deregisterChild(t) { + Q(t) || (t = [t]); + for (const e of t) this._unboundChildren.remove(e) + } + setTemplate(t) { + this.template = new dg(t) + } + extendTemplate(t) { + dg.extend(this.template, t) + } + render() { + if (this.isRendered) throw new b("ui-view-render-already-rendered", this); + this.template && (this.element = this.template.render(), this.registerChild(this.template.getViews())), this.isRendered = !0 + } + destroy() { + this.stopListening(), this._viewCollections.map((t => t.destroy())), this.template && this.template._revertData && this.template.revert(this.element) + } + } + class dg extends(S()) { + constructor(t) { + super(), Object.assign(this, Ag(wg(t))), this._isRendered = !1, this._revertData = null + } + render() { + const t = this._renderNode({ + intoFragment: !0 + }); + return this._isRendered = !0, t + } + apply(t) { + return this._revertData = { + children: [], + bindings: [], + attributes: {} + }, this._renderNode({ + node: t, + intoFragment: !1, + isApplying: !0, + revertData: this._revertData + }), t + } + revert(t) { + if (!this._revertData) throw new b("ui-template-revert-not-applied", [this, t]); + this._revertTemplateFromNode(t, this._revertData) + }* getViews() { + yield* function* t(e) { + if (e.children) + for (const n of e.children) Eg(n) ? yield n: Dg(n) && (yield* t(n)) + }(this) + } + static bind(t, e) { + return { + to: (n, o) => new ug({ + eventNameOrFunction: n, + attribute: n, + observable: t, + emitter: e, + callback: o + }), + if: (n, o, i) => new gg({ + observable: t, + emitter: e, + attribute: n, + valueIfTrue: o, + callback: i + }) + } + } + static extend(t, e) { + if (t._isRendered) throw new b("template-extend-render", [this, t]); + yg(t, Ag(wg(e))) + } + _renderNode(t) { + let e; + if (e = t.node ? this.tag && this.text : this.tag ? this.text : !this.text, e) throw new b("ui-template-wrong-syntax", this); + return this.text ? this._renderText(t) : this._renderElement(t) + } + _renderElement(t) { + let e = t.node; + return e || (e = t.node = document.createElementNS(this.ns || "http://www.w3.org/1999/xhtml", this.tag)), this._renderAttributes(t), this._renderElementChildren(t), this._setUpListeners(t), e + } + _renderText(t) { + let e = t.node; + return e ? t.revertData.text = e.textContent : e = t.node = document.createTextNode(""), mg(this.text) ? this._bindToObservable({ + schema: this.text, + updater: fg(e), + data: t + }) : e.textContent = this.text.join(""), e + } + _renderAttributes(t) { + if (!this.attributes) return; + const e = t.node, + n = t.revertData; + for (const o in this.attributes) { + const i = e.getAttribute(o), + r = this.attributes[o]; + n && (n.attributes[o] = i); + const s = Tg(r) ? r[0].ns : null; + if (mg(r)) { + const a = Tg(r) ? r[0].value : r; + n && Bg(o) && a.unshift(i), this._bindToObservable({ + schema: a, + updater: bg(e, o, s), + data: t + }) + } else if ("style" == o && "string" != typeof r[0]) this._renderStyleAttribute(r[0], t); + else { + n && i && Bg(o) && r.unshift(i); + const t = r.map((t => t && t.value || t)).reduce(((t, e) => t.concat(e)), []).reduce(_g, ""); + xg(t) || e.setAttributeNS(s, o, t) + } + } + } + _renderStyleAttribute(t, e) { + const n = e.node; + for (const o in t) { + const i = t[o]; + mg(i) ? this._bindToObservable({ + schema: [i], + updater: kg(n, o), + data: e + }) : n.style[o] = i + } + } + _renderElementChildren(t) { + const e = t.node, + n = t.intoFragment ? document.createDocumentFragment() : e, + o = t.isApplying; + let i = 0; + for (const r of this.children) + if (Sg(r)) { + if (!o) { + r.setParent(e); + for (const t of r) n.appendChild(t.element) + } + } else if (Eg(r)) o || (r.isRendered || r.render(), n.appendChild(r.element)); + else if (xo(r)) n.appendChild(r); + else if (o) { + const e = { + children: [], + bindings: [], + attributes: {} + }; + t.revertData.children.push(e), r._renderNode({ + intoFragment: !1, + node: n.childNodes[i++], + isApplying: !0, + revertData: e + }) + } else n.appendChild(r.render()); + t.intoFragment && e.appendChild(n) + } + _setUpListeners(t) { + if (this.eventListeners) + for (const e in this.eventListeners) { + const n = this.eventListeners[e].map((n => { + const [o, i] = e.split("@"); + return n.activateDomEventListener(o, i, t) + })); + t.revertData && t.revertData.bindings.push(n) + } + } + _bindToObservable({ + schema: t, + updater: e, + data: n + }) { + const o = n.revertData; + pg(t, e, n); + const i = t.filter((t => !xg(t))).filter((t => t.observable)).map((o => o.activateAttributeListener(t, e, n))); + o && o.bindings.push(i) + } + _revertTemplateFromNode(t, e) { + for (const t of e.bindings) + for (const e of t) e(); + if (e.text) return void(t.textContent = e.text); + const n = t; + for (const t in e.attributes) { + const o = e.attributes[t]; + null === o ? n.removeAttribute(t) : n.setAttribute(t, o) + } + for (let t = 0; t < e.children.length; ++t) this._revertTemplateFromNode(n.childNodes[t], e.children[t]) + } + } + class hg { + constructor(t) { + this.attribute = t.attribute, this.observable = t.observable, this.emitter = t.emitter, this.callback = t.callback + } + getValue(t) { + const e = this.observable[this.attribute]; + return this.callback ? this.callback(e, t) : e + } + activateAttributeListener(t, e, n) { + const o = () => pg(t, e, n); + return this.emitter.listenTo(this.observable, `change:${this.attribute}`, o), () => { + this.emitter.stopListening(this.observable, `change:${this.attribute}`, o) + } + } + } + class ug extends hg { + constructor(t) { + super(t), this.eventNameOrFunction = t.eventNameOrFunction + } + activateDomEventListener(t, e, n) { + const o = (t, n) => { + e && !n.target.matches(e) || ("function" == typeof this.eventNameOrFunction ? this.eventNameOrFunction(n) : this.observable.fire(this.eventNameOrFunction, n)) + }; + return this.emitter.listenTo(n.node, t, o), () => { + this.emitter.stopListening(n.node, t, o) + } + } + } + class gg extends hg { + constructor(t) { + super(t), this.valueIfTrue = t.valueIfTrue + } + getValue(t) { + return !xg(super.getValue(t)) && (this.valueIfTrue || !0) + } + } + + function mg(t) { + return !!t && (t.value && (t = t.value), Array.isArray(t) ? t.some(mg) : t instanceof hg) + } + + function pg(t, e, { + node: n + }) { + const o = function(t, e) { + return t.map((t => t instanceof hg ? t.getValue(e) : t)) + }(t, n); + let i; + i = 1 == t.length && t[0] instanceof gg ? o[0] : o.reduce(_g, ""), xg(i) ? e.remove() : e.set(i) + } + + function fg(t) { + return { + set(e) { + t.textContent = e + }, + remove() { + t.textContent = "" + } + } + } + + function bg(t, e, n) { + return { + set(o) { + t.setAttributeNS(n, e, o) + }, + remove() { + t.removeAttributeNS(n, e) + } + } + } + + function kg(t, e) { + return { + set(n) { + t.style[e] = n + }, + remove() { + t.style[e] = null + } + } + } + + function wg(t) { + return Ao(t, (t => { + if (t && (t instanceof hg || Dg(t) || Eg(t) || Sg(t))) return t + })) + } + + function Ag(t) { + if ("string" == typeof t ? t = function(t) { + return { + text: [t] + } + }(t) : t.text && function(t) { + t.text = Ai(t.text) + }(t), t.on && (t.eventListeners = function(t) { + for (const e in t) Cg(t, e); + return t + }(t.on), delete t.on), !t.text) { + t.attributes && function(t) { + for (const e in t) t[e].value && (t[e].value = Ai(t[e].value)), Cg(t, e) + }(t.attributes); + const e = []; + if (t.children) + if (Sg(t.children)) e.push(t.children); + else + for (const n of t.children) Dg(n) || Eg(n) || xo(n) ? e.push(n) : e.push(new dg(n)); + t.children = e + } + return t + } + + function Cg(t, e) { + t[e] = Ai(t[e]) + } + + function _g(t, e) { + return xg(e) ? t : xg(t) ? e : `${t} ${e}` + } + + function vg(t, e) { + for (const n in e) t[n] ? t[n].push(...e[n]) : t[n] = e[n] + } + + function yg(t, e) { + if (e.attributes && (t.attributes || (t.attributes = {}), vg(t.attributes, e.attributes)), e.eventListeners && (t.eventListeners || (t.eventListeners = {}), vg(t.eventListeners, e.eventListeners)), e.text && t.text.push(...e.text), e.children && e.children.length) { + if (t.children.length != e.children.length) throw new b("ui-template-extend-children-mismatch", t); + let n = 0; + for (const o of e.children) yg(t.children[n++], o) + } + } + + function xg(t) { + return !t && 0 !== t + } + + function Eg(t) { + return t instanceof cg + } + + function Dg(t) { + return t instanceof dg + } + + function Sg(t) { + return t instanceof sg + } + + function Tg(t) { + return O(t[0]) && t[0].ns + } + + function Bg(t) { + return "class" == t || "style" == t + } + class Ig extends sg { + constructor(t, e = []) { + super(e), this.locale = t + } + get bodyCollectionContainer() { + return this._bodyCollectionContainer + } + attachToDom() { + this._bodyCollectionContainer = new dg({ + tag: "div", + attributes: { + class: ["ck", "ck-reset_all", "ck-body", "ck-rounded-corners"], + dir: this.locale.uiLanguageDirection + }, + children: this + }).render(); + let t = document.querySelector(".ck-body-wrapper"); + t || (t = pt(document, "div", { + class: "ck-body-wrapper" + }), document.body.appendChild(t)), t.appendChild(this._bodyCollectionContainer) + } + detachFromDom() { + super.destroy(), this._bodyCollectionContainer && this._bodyCollectionContainer.remove(); + const t = document.querySelector(".ck-body-wrapper"); + t && 0 == t.childElementCount && t.remove() + } + } + var Pg = n(6574), + Rg = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Pg.Z, Rg); + Pg.Z.locals; + const zg = class extends cg { + constructor() { + super(); + const t = this.bindTemplate; + this.set("content", ""), this.set("viewBox", "0 0 20 20"), this.set("fillColor", ""), this.set("isColorInherited", !0), this.setTemplate({ + tag: "svg", + ns: "http://www.w3.org/2000/svg", + attributes: { + class: ["ck", "ck-icon", "ck-reset_all-excluded", t.if("isColorInherited", "ck-icon_inherit-color")], + viewBox: t.to("viewBox") + } + }) + } + render() { + super.render(), this._updateXMLContent(), this._colorFillPaths(), this.on("change:content", (() => { + this._updateXMLContent(), this._colorFillPaths() + })), this.on("change:fillColor", (() => { + this._colorFillPaths() + })) + } + _updateXMLContent() { + if (this.content) { + const t = (new DOMParser).parseFromString(this.content.trim(), "image/svg+xml").querySelector("svg"), + e = t.getAttribute("viewBox"); + e && (this.viewBox = e); + for (const { + name: e, + value: n + } + of Array.from(t.attributes)) zg.presentationalAttributeNames.includes(e) && this.element.setAttribute(e, n); + for (; this.element.firstChild;) this.element.removeChild(this.element.firstChild); + for (; t.childNodes.length > 0;) this.element.appendChild(t.childNodes[0]) + } + } + _colorFillPaths() { + this.fillColor && this.element.querySelectorAll(".ck-icon__fill").forEach((t => { + t.style.fill = this.fillColor + })) + } + }; + let Vg = zg; + Vg.presentationalAttributeNames = ["alignment-baseline", "baseline-shift", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-rendering", "cursor", "direction", "display", "dominant-baseline", "fill", "fill-opacity", "fill-rule", "filter", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "image-rendering", "letter-spacing", "lighting-color", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "overflow", "paint-order", "pointer-events", "shape-rendering", "stop-color", "stop-opacity", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-anchor", "text-decoration", "text-overflow", "text-rendering", "transform", "unicode-bidi", "vector-effect", "visibility", "white-space", "word-spacing", "writing-mode"]; + var Og = n(4906), + Fg = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Og.Z, Fg); + Og.Z.locals; + class Mg extends cg { + constructor(t) { + super(t), this._focusDelayed = null; + const e = this.bindTemplate, + n = g(); + this.set("ariaChecked", void 0), this.set("ariaLabel", void 0), this.set("ariaLabelledBy", `ck-editor__aria-label_${n}`), this.set("class", void 0), this.set("labelStyle", void 0), this.set("icon", void 0), this.set("isEnabled", !0), this.set("isOn", !1), this.set("isVisible", !0), this.set("isToggleable", !1), this.set("keystroke", void 0), this.set("label", void 0), this.set("role", void 0), this.set("tabindex", -1), this.set("tooltip", !1), this.set("tooltipPosition", "s"), this.set("type", "button"), this.set("withText", !1), this.set("withKeystroke", !1), this.children = this.createCollection(), this.labelView = this._createLabelView(), this.iconView = new Vg, this.iconView.extendTemplate({ + attributes: { + class: "ck-button__icon" + } + }), this.keystrokeView = this._createKeystrokeView(), this.bind("_tooltipString").to(this, "tooltip", this, "label", this, "keystroke", this._getTooltipString.bind(this)); + const o = { + tag: "button", + attributes: { + class: ["ck", "ck-button", e.to("class"), e.if("isEnabled", "ck-disabled", (t => !t)), e.if("isVisible", "ck-hidden", (t => !t)), e.to("isOn", (t => t ? "ck-on" : "ck-off")), e.if("withText", "ck-button_with-text"), e.if("withKeystroke", "ck-button_with-keystroke")], + role: e.to("role"), + type: e.to("type", (t => t || "button")), + tabindex: e.to("tabindex"), + "aria-label": e.to("ariaLabel"), + "aria-labelledby": e.to("ariaLabelledBy"), + "aria-disabled": e.if("isEnabled", !0, (t => !t)), + "aria-checked": e.to("isOn"), + "aria-pressed": e.to("isOn", (t => !!this.isToggleable && String(!!t))), + "data-cke-tooltip-text": e.to("_tooltipString"), + "data-cke-tooltip-position": e.to("tooltipPosition") + }, + children: this.children, + on: { + click: e.to((t => { + this.isEnabled ? this.fire("execute") : t.preventDefault() + })) + } + }; + i.isSafari && (this._focusDelayed || (this._focusDelayed = Bi((() => this.focus()), 0)), o.on.mousedown = e.to((() => { + this._focusDelayed() + })), o.on.mouseup = e.to((() => { + this._focusDelayed.cancel() + }))), this.setTemplate(o) + } + render() { + super.render(), this.icon && (this.iconView.bind("content").to(this, "icon"), this.children.add(this.iconView)), this.children.add(this.labelView), this.withKeystroke && this.keystroke && this.children.add(this.keystrokeView) + } + focus() { + this.element.focus() + } + destroy() { + this._focusDelayed && this._focusDelayed.cancel(), super.destroy() + } + _createLabelView() { + const t = new cg, + e = this.bindTemplate; + return t.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-button__label"], + style: e.to("labelStyle"), + id: this.ariaLabelledBy + }, + children: [{ + text: e.to("label") + }] + }), t + } + _createKeystrokeView() { + const t = new cg; + return t.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-button__keystroke"] + }, + children: [{ + text: this.bindTemplate.to("keystroke", (t => ki(t))) + }] + }), t + } + _getTooltipString(t, e, n) { + return t ? "string" == typeof t ? t : (n && (n = ki(n)), t instanceof Function ? t(e, n) : `${e}${n?` (${n})`:""}`) : "" + } + } + var Ng = n(5332), + Lg = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Ng.Z, Lg); + Ng.Z.locals; + class Hg extends Mg { + constructor(t) { + super(t), this.isToggleable = !0, this.toggleSwitchView = this._createToggleView(), this.extendTemplate({ + attributes: { + class: "ck-switchbutton" + } + }) + } + render() { + super.render(), this.children.add(this.toggleSwitchView) + } + _createToggleView() { + const t = new cg; + return t.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-button__toggle"] + }, + children: [{ + tag: "span", + attributes: { + class: ["ck", "ck-button__toggle__inner"] + } + }] + }), t + } + } + + function jg(t, e) { + const n = t.t, + o = { + Black: n("Black"), + "Dim grey": n("Dim grey"), + Grey: n("Grey"), + "Light grey": n("Light grey"), + White: n("White"), + Red: n("Red"), + Orange: n("Orange"), + Yellow: n("Yellow"), + "Light green": n("Light green"), + Green: n("Green"), + Aquamarine: n("Aquamarine"), + Turquoise: n("Turquoise"), + "Light blue": n("Light blue"), + Blue: n("Blue"), + Purple: n("Purple") + }; + return e.map((t => { + const e = o[t.label]; + return e && e != t.label && (t.label = e), t + })) + } + + function qg(t) { + return t.map(Wg).filter((t => !!t)) + } + + function Wg(t) { + return "string" == typeof t ? { + model: t, + label: t, + hasBorder: !1, + view: { + name: "span", + styles: { + color: t + } + } + } : { + model: t.color, + label: t.label || t.color, + hasBorder: void 0 !== t.hasBorder && t.hasBorder, + view: { + name: "span", + styles: { + color: `${t.color}` + } + } + } + } + class Ug extends Mg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.set("color", void 0), this.set("hasBorder", !1), this.icon = '', this.extendTemplate({ + attributes: { + style: { + backgroundColor: e.to("color") + }, + class: ["ck", "ck-color-grid__tile", e.if("hasBorder", "ck-color-table__color-tile_bordered")] + } + }) + } + render() { + super.render(), this.iconView.fillColor = "hsl(0, 0%, 100%)" + } + } + var $g = n(6781), + Gg = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()($g.Z, Gg); + $g.Z.locals; + class Kg extends cg { + constructor(t, e) { + super(t); + const n = e && e.colorDefinitions ? e.colorDefinitions : []; + this.columns = e && e.columns ? e.columns : 5; + const o = { + gridTemplateColumns: `repeat( ${this.columns}, 1fr)` + }; + this.set("selectedColor", void 0), this.items = this.createCollection(), this.focusTracker = new Di, this.keystrokes = new Si, this.items.on("add", ((t, e) => { + e.isOn = e.color === this.selectedColor + })), n.forEach((t => { + const e = new Ug; + e.set({ + color: t.color, + label: t.label, + tooltip: !0, + hasBorder: t.options.hasBorder + }), e.on("execute", (() => { + this.fire("execute", { + value: t.color, + hasBorder: t.options.hasBorder, + label: t.label + }) + })), this.items.add(e) + })), this.setTemplate({ + tag: "div", + children: this.items, + attributes: { + class: ["ck", "ck-color-grid"], + style: o + } + }), this.on("change:selectedColor", ((t, e, n) => { + for (const t of this.items) t.isOn = t.color === n + })) + } + focus() { + this.items.length && this.items.first.focus() + } + focusLast() { + this.items.length && this.items.last.focus() + } + render() { + super.render(); + for (const t of this.items) this.focusTracker.add(t.element); + this.items.on("add", ((t, e) => { + this.focusTracker.add(e.element) + })), this.items.on("remove", ((t, e) => { + this.focusTracker.remove(e.element) + })), this.keystrokes.listenTo(this.element), rg({ + keystrokeHandler: this.keystrokes, + focusTracker: this.focusTracker, + gridItems: this.items, + numberOfColumns: this.columns, + uiLanguageDirection: this.locale && this.locale.uiLanguageDirection + }) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + } + var Zg = n(1103); + const Jg = function(t) { + var e, n, o = [], + i = 1; + if ("string" == typeof t) + if (Zg[t]) o = Zg[t].slice(), n = "rgb"; + else if ("transparent" === t) i = 0, n = "rgb", o = [0, 0, 0]; + else if (/^#[A-Fa-f0-9]+$/.test(t)) { + var r = t.slice(1); + i = 1, (l = r.length) <= 4 ? (o = [parseInt(r[0] + r[0], 16), parseInt(r[1] + r[1], 16), parseInt(r[2] + r[2], 16)], 4 === l && (i = parseInt(r[3] + r[3], 16) / 255)) : (o = [parseInt(r[0] + r[1], 16), parseInt(r[2] + r[3], 16), parseInt(r[4] + r[5], 16)], 8 === l && (i = parseInt(r[6] + r[7], 16) / 255)), o[0] || (o[0] = 0), o[1] || (o[1] = 0), o[2] || (o[2] = 0), n = "rgb" + } else if (e = /^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)) { + var s = e[1], + a = "rgb" === s; + n = r = s.replace(/a$/, ""); + var l = "cmyk" === r ? 4 : "gray" === r ? 1 : 3; + o = e[2].trim().split(/\s*[,\/]\s*|\s+/).map((function(t, e) { + if (/%$/.test(t)) return e === l ? parseFloat(t) / 100 : "rgb" === r ? 255 * parseFloat(t) / 100 : parseFloat(t); + if ("h" === r[e]) { + if (/deg$/.test(t)) return parseFloat(t); + if (void 0 !== Yg[t]) return Yg[t] + } + return parseFloat(t) + })), s === r && o.push(1), i = a || void 0 === o[l] ? 1 : o[l], o = o.slice(0, l) + } else t.length > 10 && /[0-9](?:\s|\/)/.test(t) && (o = t.match(/([0-9]+)/g).map((function(t) { + return parseFloat(t) + })), n = t.match(/([a-z])/gi).join("").toLowerCase()); + else isNaN(t) ? Array.isArray(t) || t.length ? (o = [t[0], t[1], t[2]], n = "rgb", i = 4 === t.length ? t[3] : 1) : t instanceof Object && (null != t.r || null != t.red || null != t.R ? (n = "rgb", o = [t.r || t.red || t.R || 0, t.g || t.green || t.G || 0, t.b || t.blue || t.B || 0]) : (n = "hsl", o = [t.h || t.hue || t.H || 0, t.s || t.saturation || t.S || 0, t.l || t.lightness || t.L || t.b || t.brightness]), i = t.a || t.alpha || t.opacity || 1, null != t.opacity && (i /= 100)) : (n = "rgb", o = [t >>> 16, (65280 & t) >>> 8, 255 & t]); + return { + space: n, + values: o, + alpha: i + } + }; + var Yg = { + red: 0, + orange: 60, + yellow: 120, + green: 180, + blue: 240, + purple: 300 + }; + var Qg = n(841); + + function Xg(t, e) { + if (!t) return ""; + const n = tm(t); + if (!n) return ""; + if (n.space === e) return t; + if (o = n, !Object.keys(Qg).includes(o.space)) return ""; + var o; + const i = Qg[n.space][e]; + if (!i) return ""; + return function(t, e) { + switch (e) { + case "hex": + return `#${t}`; + case "rgb": + return `rgb( ${t[0]}, ${t[1]}, ${t[2]} )`; + case "hsl": + return `hsl( ${t[0]}, ${t[1]}%, ${t[2]}% )`; + case "hwb": + return `hwb( ${t[0]}, ${t[1]}, ${t[2]} )`; + case "lab": + return `lab( ${t[0]}% ${t[1]} ${t[2]} )`; + case "lch": + return `lch( ${t[0]}% ${t[1]} ${t[2]} )`; + default: + return "" + } + }(i("hex" === n.space ? n.hexValue : n.values), e) + } + + function tm(t) { + if (t.startsWith("#")) { + const e = Jg(t); + return { + space: "hex", + values: e.values, + hexValue: t, + alpha: e.alpha + } + } + const e = Jg(t); + return e.space ? e : null + } + var em = n(3662), + nm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(em.Z, nm); + em.Z.locals; + class om extends cg { + constructor(t) { + super(t), this.set("text", void 0), this.set("for", void 0), this.id = `ck-editor__label_${g()}`; + const e = this.bindTemplate; + this.setTemplate({ + tag: "label", + attributes: { + class: ["ck", "ck-label"], + id: this.id, + for: e.to("for") + }, + children: [{ + text: e.to("text") + }] + }) + } + } + var im = n(2577), + rm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(im.Z, rm); + im.Z.locals; + class sm extends cg { + constructor(t, e) { + super(t); + const n = `ck-labeled-field-view-${g()}`, + o = `ck-labeled-field-view-status-${g()}`; + this.fieldView = e(this, n, o), this.set("label", void 0), this.set("isEnabled", !0), this.set("isEmpty", !0), this.set("isFocused", !1), this.set("errorText", null), this.set("infoText", null), this.set("class", void 0), this.set("placeholder", void 0), this.labelView = this._createLabelView(n), this.statusView = this._createStatusView(o), this.fieldWrapperChildren = this.createCollection([this.fieldView, this.labelView]), this.bind("_statusText").to(this, "errorText", this, "infoText", ((t, e) => t || e)); + const i = this.bindTemplate; + this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-labeled-field-view", i.to("class"), i.if("isEnabled", "ck-disabled", (t => !t)), i.if("isEmpty", "ck-labeled-field-view_empty"), i.if("isFocused", "ck-labeled-field-view_focused"), i.if("placeholder", "ck-labeled-field-view_placeholder"), i.if("errorText", "ck-error")] + }, + children: [{ + tag: "div", + attributes: { + class: ["ck", "ck-labeled-field-view__input-wrapper"] + }, + children: this.fieldWrapperChildren + }, this.statusView] + }) + } + _createLabelView(t) { + const e = new om(this.locale); + return e.for = t, e.bind("text").to(this, "label"), e + } + _createStatusView(t) { + const e = new cg(this.locale), + n = this.bindTemplate; + return e.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-labeled-field-view__status", n.if("errorText", "ck-labeled-field-view__status_error"), n.if("_statusText", "ck-hidden", (t => !t))], + id: t, + role: n.if("errorText", "alert") + }, + children: [{ + text: n.to("_statusText") + }] + }), e + } + focus() { + this.fieldView.focus() + } + } + var am = n(4879), + lm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(am.Z, lm); + am.Z.locals; + class cm extends cg { + constructor(t) { + super(t), this.set("value", void 0), this.set("id", void 0), this.set("placeholder", void 0), this.set("isReadOnly", !1), this.set("hasError", !1), this.set("ariaDescribedById", void 0), this.focusTracker = new Di, this.bind("isFocused").to(this.focusTracker), this.set("isEmpty", !0), this.set("inputMode", "text"); + const e = this.bindTemplate; + this.setTemplate({ + tag: "input", + attributes: { + class: ["ck", "ck-input", e.if("isFocused", "ck-input_focused"), e.if("isEmpty", "ck-input-text_empty"), e.if("hasError", "ck-error")], + id: e.to("id"), + placeholder: e.to("placeholder"), + readonly: e.to("isReadOnly"), + inputmode: e.to("inputMode"), + "aria-invalid": e.if("hasError", !0), + "aria-describedby": e.to("ariaDescribedById") + }, + on: { + input: e.to(((...t) => { + this.fire("input", ...t), this._updateIsEmpty() + })), + change: e.to(this._updateIsEmpty.bind(this)) + } + }) + } + render() { + super.render(), this.focusTracker.add(this.element), this._setDomElementValue(this.value), this._updateIsEmpty(), this.on("change:value", ((t, e, n) => { + this._setDomElementValue(n), this._updateIsEmpty() + })) + } + destroy() { + super.destroy(), this.focusTracker.destroy() + } + select() { + this.element.select() + } + focus() { + this.element.focus() + } + _updateIsEmpty() { + this.isEmpty = !this.element.value + } + _setDomElementValue(t) { + this.element.value = t || 0 === t ? t : "" + } + } + class dm extends cm { + constructor(t) { + super(t), this.extendTemplate({ + attributes: { + type: "text", + class: ["ck-input-text"] + } + }) + } + } + class hm extends cm { + constructor(t, { + min: e, + max: n, + step: o + } = {}) { + super(t); + const i = this.bindTemplate; + this.set("min", e), this.set("max", n), this.set("step", o), this.extendTemplate({ + attributes: { + type: "number", + class: ["ck-input-number"], + min: i.to("min"), + max: i.to("max"), + step: i.to("step") + } + }) + } + } + class um extends cg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.set("isVisible", !1), this.set("position", "se"), this.children = this.createCollection(), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-reset", "ck-dropdown__panel", e.to("position", (t => `ck-dropdown__panel_${t}`)), e.if("isVisible", "ck-dropdown__panel-visible")] + }, + children: this.children, + on: { + selectstart: e.to((t => { + "input" !== t.target.tagName.toLocaleLowerCase() && t.preventDefault() + })) + } + }) + } + focus() { + if (this.children.length) { + const t = this.children.first; + "function" == typeof t.focus ? t.focus() : k("ui-dropdown-panel-focus-child-missing-focus", { + childView: this.children.first, + dropdownPanel: this + }) + } + } + focusLast() { + if (this.children.length) { + const t = this.children.last; + "function" == typeof t.focusLast ? t.focusLast() : t.focus() + } + } + } + var gm = n(5485), + mm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(gm.Z, mm); + gm.Z.locals; + const pm = class extends cg { + constructor(t, e, n) { + super(t); + const o = this.bindTemplate; + this.buttonView = e, this.panelView = n, this.set("isOpen", !1), this.set("isEnabled", !0), this.set("class", void 0), this.set("id", void 0), this.set("panelPosition", "auto"), this.keystrokes = new Si, this.focusTracker = new Di, this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-dropdown", o.to("class"), o.if("isEnabled", "ck-disabled", (t => !t))], + id: o.to("id"), + "aria-describedby": o.to("ariaDescribedById") + }, + children: [e, n] + }), e.extendTemplate({ + attributes: { + class: ["ck-dropdown__button"], + "data-cke-tooltip-disabled": o.to("isOpen") + } + }) + } + render() { + super.render(), this.focusTracker.add(this.buttonView.element), this.focusTracker.add(this.panelView.element), this.listenTo(this.buttonView, "open", (() => { + this.isOpen = !this.isOpen + })), this.panelView.bind("isVisible").to(this, "isOpen"), this.on("change:isOpen", ((t, e, n) => { + n && ("auto" === this.panelPosition ? this.panelView.position = pm._getOptimalPosition({ + element: this.panelView.element, + target: this.buttonView.element, + fitInViewport: !0, + positions: this._panelPositions + }).name : this.panelView.position = this.panelPosition) + })), this.keystrokes.listenTo(this.element); + const t = (t, e) => { + this.isOpen && (this.isOpen = !1, e()) + }; + this.keystrokes.set("arrowdown", ((t, e) => { + this.buttonView.isEnabled && !this.isOpen && (this.isOpen = !0, e()) + })), this.keystrokes.set("arrowright", ((t, e) => { + this.isOpen && e() + })), this.keystrokes.set("arrowleft", t), this.keystrokes.set("esc", t) + } + focus() { + this.buttonView.focus() + } + get _panelPositions() { + const { + south: t, + north: e, + southEast: n, + southWest: o, + northEast: i, + northWest: r, + southMiddleEast: s, + southMiddleWest: a, + northMiddleEast: l, + northMiddleWest: c + } = pm.defaultPanelPositions; + return "rtl" !== this.locale.uiLanguageDirection ? [n, o, s, a, t, i, r, l, c, e] : [o, n, a, s, t, r, i, c, l, e] + } + }; + let fm = pm; + fm.defaultPanelPositions = { + south: (t, e) => ({ + top: t.bottom, + left: t.left - (e.width - t.width) / 2, + name: "s" + }), + southEast: t => ({ + top: t.bottom, + left: t.left, + name: "se" + }), + southWest: (t, e) => ({ + top: t.bottom, + left: t.left - e.width + t.width, + name: "sw" + }), + southMiddleEast: (t, e) => ({ + top: t.bottom, + left: t.left - (e.width - t.width) / 4, + name: "sme" + }), + southMiddleWest: (t, e) => ({ + top: t.bottom, + left: t.left - 3 * (e.width - t.width) / 4, + name: "smw" + }), + north: (t, e) => ({ + top: t.top - e.height, + left: t.left - (e.width - t.width) / 2, + name: "n" + }), + northEast: (t, e) => ({ + top: t.top - e.height, + left: t.left, + name: "ne" + }), + northWest: (t, e) => ({ + top: t.top - e.height, + left: t.left - e.width + t.width, + name: "nw" + }), + northMiddleEast: (t, e) => ({ + top: t.top - e.height, + left: t.left - (e.width - t.width) / 4, + name: "nme" + }), + northMiddleWest: (t, e) => ({ + top: t.top - e.height, + left: t.left - 3 * (e.width - t.width) / 4, + name: "nmw" + }) + }, fm._getOptimalPosition = Qo; + const bm = ''; + class km extends Mg { + constructor(t) { + super(t), this.arrowView = this._createArrowView(), this.extendTemplate({ + attributes: { + "aria-haspopup": !0, + "aria-expanded": this.bindTemplate.to("isOn", (t => String(t))) + } + }), this.delegate("execute").to(this, "open") + } + render() { + super.render(), this.children.add(this.arrowView) + } + _createArrowView() { + const t = new Vg; + return t.content = bm, t.extendTemplate({ + attributes: { + class: "ck-dropdown__arrow" + } + }), t + } + } + class wm { + constructor(t) { + if (this.focusables = t.focusables, this.focusTracker = t.focusTracker, this.keystrokeHandler = t.keystrokeHandler, this.actions = t.actions, t.actions && t.keystrokeHandler) + for (const e in t.actions) { + let n = t.actions[e]; + "string" == typeof n && (n = [n]); + for (const o of n) t.keystrokeHandler.set(o, ((t, n) => { + this[e](), n() + })) + } + } + get first() { + return this.focusables.find(Am) || null + } + get last() { + return this.focusables.filter(Am).slice(-1)[0] || null + } + get next() { + return this._getFocusableItem(1) + } + get previous() { + return this._getFocusableItem(-1) + } + get current() { + let t = null; + return null === this.focusTracker.focusedElement ? null : (this.focusables.find(((e, n) => { + const o = e.element === this.focusTracker.focusedElement; + return o && (t = n), o + })), t) + } + focusFirst() { + this._focus(this.first) + } + focusLast() { + this._focus(this.last) + } + focusNext() { + this._focus(this.next) + } + focusPrevious() { + this._focus(this.previous) + } + _focus(t) { + t && t.focus() + } + _getFocusableItem(t) { + const e = this.current, + n = this.focusables.length; + if (!n) return null; + if (null === e) return this[1 === t ? "first" : "last"]; + let o = (e + n + t) % n; + do { + const e = this.focusables.get(o); + if (Am(e)) return e; + o = (o + n + t) % n + } while (o !== e); + return null + } + } + + function Am(t) { + return !(!t.focus || !Jo(t.element)) + } + class Cm extends cg { + constructor(t) { + super(t), this.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-toolbar__separator"] + } + }) + } + } + class _m extends cg { + constructor(t) { + super(t), this.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-toolbar__line-break"] + } + }) + } + } + + function vm(t) { + return Array.isArray(t) ? { + items: t, + removeItems: [] + } : t ? Object.assign({ + items: [], + removeItems: [] + }, t) : { + items: [], + removeItems: [] + } + } + var ym = n(5542), + xm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(ym.Z, xm); + ym.Z.locals; + const { + threeVerticalDots: Em + } = eg, Dm = { + alignLeft: eg.alignLeft, + bold: eg.bold, + importExport: eg.importExport, + paragraph: eg.paragraph, + plus: eg.plus, + text: eg.text, + threeVerticalDots: eg.threeVerticalDots + }; + class Sm extends cg { + constructor(t, e) { + super(t); + const n = this.bindTemplate, + o = this.t; + this.options = e || {}, this.set("ariaLabel", o("Editor toolbar")), this.set("maxWidth", "auto"), this.items = this.createCollection(), this.focusTracker = new Di, this.keystrokes = new Si, this.set("class", void 0), this.set("isCompact", !1), this.itemsView = new Tm(t), this.children = this.createCollection(), this.children.add(this.itemsView), this.focusables = this.createCollection(); + const i = "rtl" === t.uiLanguageDirection; + this._focusCycler = new wm({ + focusables: this.focusables, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: [i ? "arrowright" : "arrowleft", "arrowup"], + focusNext: [i ? "arrowleft" : "arrowright", "arrowdown"] + } + }); + const r = ["ck", "ck-toolbar", n.to("class"), n.if("isCompact", "ck-toolbar_compact")]; + var s; + this.options.shouldGroupWhenFull && this.options.isFloating && r.push("ck-toolbar_floating"), this.setTemplate({ + tag: "div", + attributes: { + class: r, + role: "toolbar", + "aria-label": n.to("ariaLabel"), + style: { + maxWidth: n.to("maxWidth") + }, + tabindex: -1 + }, + children: this.children, + on: { + mousedown: (s = this, s.bindTemplate.to((t => { + t.target === s.element && t.preventDefault() + }))) + } + }), this._behavior = this.options.shouldGroupWhenFull ? new Im(this) : new Bm(this) + } + render() { + super.render(), this.focusTracker.add(this.element); + for (const t of this.items) this.focusTracker.add(t.element); + this.items.on("add", ((t, e) => { + this.focusTracker.add(e.element) + })), this.items.on("remove", ((t, e) => { + this.focusTracker.remove(e.element) + })), this.keystrokes.listenTo(this.element), this._behavior.render(this) + } + destroy() { + return this._behavior.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy(), super.destroy() + } + focus() { + this._focusCycler.focusFirst() + } + focusLast() { + this._focusCycler.focusLast() + } + fillFromConfig(t, e, n) { + this.items.addMany(this._buildItemsFromConfig(t, e, n)) + } + _buildItemsFromConfig(t, e, n) { + const o = vm(t), + i = n || o.removeItems; + return this._cleanItemsConfiguration(o.items, e, i).map((t => O(t) ? this._createNestedToolbarDropdown(t, e, i) : "|" === t ? new Cm : "-" === t ? new _m : e.create(t))).filter((t => !!t)) + } + _cleanItemsConfiguration(t, e, n) { + const o = t.filter(((t, o, i) => "|" === t || -1 === n.indexOf(t) && ("-" === t ? !this.options.shouldGroupWhenFull || (k("toolbarview-line-break-ignored-when-grouping-items", i), !1) : !(!O(t) && !e.has(t)) || (k("toolbarview-item-unavailable", { + item: t + }), !1)))); + return this._cleanSeparatorsAndLineBreaks(o) + } + _cleanSeparatorsAndLineBreaks(t) { + const e = t => "-" !== t && "|" !== t, + n = t.length, + o = t.findIndex(e); + if (-1 === o) return []; + const i = n - t.slice().reverse().findIndex(e); + return t.slice(o, i).filter(((t, n, o) => { + if (e(t)) return !0; + return !(n > 0 && o[n - 1] === t) + })) + } + _createNestedToolbarDropdown(t, e, n) { + let { + label: o, + icon: i, + items: r, + tooltip: s = !0, + withText: a = !1 + } = t; + if (r = this._cleanItemsConfiguration(r, e, n), !r.length) return null; + const l = Wm(this.locale); + return o || k("toolbarview-nested-toolbar-dropdown-missing-label", t), l.class = "ck-toolbar__nested-toolbar-dropdown", l.buttonView.set({ + label: o, + tooltip: s, + withText: !!a + }), !1 !== i ? l.buttonView.icon = Dm[i] || i || Em : l.buttonView.withText = !0, Um(l, (() => l.toolbarView._buildItemsFromConfig(r, e, n))), l + } + } + class Tm extends cg { + constructor(t) { + super(t), this.children = this.createCollection(), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-toolbar__items"] + }, + children: this.children + }) + } + } + class Bm { + constructor(t) { + const e = t.bindTemplate; + t.set("isVertical", !1), t.itemsView.children.bindTo(t.items).using((t => t)), t.focusables.bindTo(t.items).using((t => t)), t.extendTemplate({ + attributes: { + class: [e.if("isVertical", "ck-toolbar_vertical")] + } + }) + } + render() {} + destroy() {} + } + class Im { + constructor(t) { + this.resizeObserver = null, this.cachedPadding = null, this.shouldUpdateGroupingOnNextResize = !1, this.view = t, this.viewChildren = t.children, this.viewFocusables = t.focusables, this.viewItemsView = t.itemsView, this.viewFocusTracker = t.focusTracker, this.viewLocale = t.locale, this.ungroupedItems = t.createCollection(), this.groupedItems = t.createCollection(), this.groupedItemsDropdown = this._createGroupedItemsDropdown(), t.itemsView.children.bindTo(this.ungroupedItems).using((t => t)), this.ungroupedItems.on("change", this._updateFocusCycleableItems.bind(this)), t.children.on("change", this._updateFocusCycleableItems.bind(this)), t.items.on("change", ((t, e) => { + const n = e.index, + o = Array.from(e.added); + for (const t of e.removed) n >= this.ungroupedItems.length ? this.groupedItems.remove(t) : this.ungroupedItems.remove(t); + for (let t = n; t < n + o.length; t++) { + const e = o[t - n]; + t > this.ungroupedItems.length ? this.groupedItems.add(e, t - this.ungroupedItems.length) : this.ungroupedItems.add(e, t) + } + this._updateGrouping() + })), t.extendTemplate({ + attributes: { + class: ["ck-toolbar_grouping"] + } + }) + } + render(t) { + this.viewElement = t.element, this._enableGroupingOnResize(), this._enableGroupingOnMaxWidthChange(t) + } + destroy() { + this.groupedItemsDropdown.destroy(), this.resizeObserver.destroy() + } + _updateGrouping() { + if (!this.viewElement.ownerDocument.body.contains(this.viewElement)) return; + if (!Jo(this.viewElement)) return void(this.shouldUpdateGroupingOnNextResize = !0); + const t = this.groupedItems.length; + let e; + for (; this._areItemsOverflowing;) this._groupLastItem(), e = !0; + if (!e && this.groupedItems.length) { + for (; this.groupedItems.length && !this._areItemsOverflowing;) this._ungroupFirstItem(); + this._areItemsOverflowing && this._groupLastItem() + } + this.groupedItems.length !== t && this.view.fire("groupedItemsUpdate") + } + get _areItemsOverflowing() { + if (!this.ungroupedItems.length) return !1; + const t = this.viewElement, + e = this.viewLocale.uiLanguageDirection, + n = new Mo(t.lastChild), + o = new Mo(t); + if (!this.cachedPadding) { + const n = Po.window.getComputedStyle(t), + o = "ltr" === e ? "paddingRight" : "paddingLeft"; + this.cachedPadding = Number.parseInt(n[o]) + } + return "ltr" === e ? n.right > o.right - this.cachedPadding : n.left < o.left + this.cachedPadding + } + _enableGroupingOnResize() { + let t; + this.resizeObserver = new Wo(this.viewElement, (e => { + t && t === e.contentRect.width && !this.shouldUpdateGroupingOnNextResize || (this.shouldUpdateGroupingOnNextResize = !1, this._updateGrouping(), t = e.contentRect.width) + })), this._updateGrouping() + } + _enableGroupingOnMaxWidthChange(t) { + t.on("change:maxWidth", (() => { + this._updateGrouping() + })) + } + _groupLastItem() { + this.groupedItems.length || (this.viewChildren.add(new Cm), this.viewChildren.add(this.groupedItemsDropdown), this.viewFocusTracker.add(this.groupedItemsDropdown.element)), this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last), 0) + } + _ungroupFirstItem() { + this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)), this.groupedItems.length || (this.viewChildren.remove(this.groupedItemsDropdown), this.viewChildren.remove(this.viewChildren.last), this.viewFocusTracker.remove(this.groupedItemsDropdown.element)) + } + _createGroupedItemsDropdown() { + const t = this.viewLocale, + e = t.t, + n = Wm(t); + return n.class = "ck-toolbar__grouped-dropdown", n.panelPosition = "ltr" === t.uiLanguageDirection ? "sw" : "se", Um(n, this.groupedItems), n.buttonView.set({ + label: e("Show more items"), + tooltip: !0, + tooltipPosition: "rtl" === t.uiLanguageDirection ? "se" : "sw", + icon: Em + }), n + } + _updateFocusCycleableItems() { + this.viewFocusables.clear(), this.ungroupedItems.map((t => { + this.viewFocusables.add(t) + })), this.groupedItems.length && this.viewFocusables.add(this.groupedItemsDropdown) + } + } + var Pm = n(1046), + Rm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Pm.Z, Rm); + Pm.Z.locals; + class zm extends cg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.items = this.createCollection(), this.focusTracker = new Di, this.keystrokes = new Si, this._focusCycler = new wm({ + focusables: this.items, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: "arrowup", + focusNext: "arrowdown" + } + }), this.set("ariaLabel", void 0), this.set("role", void 0), this.setTemplate({ + tag: "ul", + attributes: { + class: ["ck", "ck-reset", "ck-list"], + role: e.to("role"), + "aria-label": e.to("ariaLabel") + }, + children: this.items + }) + } + render() { + super.render(); + for (const t of this.items) this.focusTracker.add(t.element); + this.items.on("add", ((t, e) => { + this.focusTracker.add(e.element) + })), this.items.on("remove", ((t, e) => { + this.focusTracker.remove(e.element) + })), this.keystrokes.listenTo(this.element) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + focus() { + this._focusCycler.focusFirst() + } + focusLast() { + this._focusCycler.focusLast() + } + } + class Vm extends cg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.set("isVisible", !0), this.children = this.createCollection(), this.setTemplate({ + tag: "li", + attributes: { + class: ["ck", "ck-list__item", e.if("isVisible", "ck-hidden", (t => !t))], + role: "presentation" + }, + children: this.children + }) + } + focus() { + this.children.first.focus() + } + } + class Om extends cg { + constructor(t) { + super(t), this.setTemplate({ + tag: "li", + attributes: { + class: ["ck", "ck-list__separator"] + } + }) + } + } + var Fm = n(7686), + Mm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Fm.Z, Mm); + Fm.Z.locals; + class Nm extends cg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.set("class", void 0), this.set("labelStyle", void 0), this.set("icon", void 0), this.set("isEnabled", !0), this.set("isOn", !1), this.set("isToggleable", !1), this.set("isVisible", !0), this.set("keystroke", void 0), this.set("withKeystroke", !1), this.set("label", void 0), this.set("tabindex", -1), this.set("tooltip", !1), this.set("tooltipPosition", "s"), this.set("type", "button"), this.set("withText", !1), this.children = this.createCollection(), this.actionView = this._createActionView(), this.arrowView = this._createArrowView(), this.keystrokes = new Si, this.focusTracker = new Di, this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-splitbutton", e.to("class"), e.if("isVisible", "ck-hidden", (t => !t)), this.arrowView.bindTemplate.if("isOn", "ck-splitbutton_open")] + }, + children: this.children + }) + } + render() { + super.render(), this.children.add(this.actionView), this.children.add(this.arrowView), this.focusTracker.add(this.actionView.element), this.focusTracker.add(this.arrowView.element), this.keystrokes.listenTo(this.element), this.keystrokes.set("arrowright", ((t, e) => { + this.focusTracker.focusedElement === this.actionView.element && (this.arrowView.focus(), e()) + })), this.keystrokes.set("arrowleft", ((t, e) => { + this.focusTracker.focusedElement === this.arrowView.element && (this.actionView.focus(), e()) + })) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + focus() { + this.actionView.focus() + } + _createActionView() { + const t = new Mg; + return t.bind("icon", "isEnabled", "isOn", "isToggleable", "keystroke", "label", "tabindex", "tooltip", "tooltipPosition", "type", "withText").to(this), t.extendTemplate({ + attributes: { + class: "ck-splitbutton__action" + } + }), t.delegate("execute").to(this), t + } + _createArrowView() { + const t = new Mg, + e = t.bindTemplate; + return t.icon = bm, t.extendTemplate({ + attributes: { + class: ["ck-splitbutton__arrow"], + "data-cke-tooltip-disabled": e.to("isOn"), + "aria-haspopup": !0, + "aria-expanded": e.to("isOn", (t => String(t))) + } + }), t.bind("isEnabled").to(this), t.bind("label").to(this), t.bind("tooltip").to(this), t.delegate("execute").to(this, "open"), t + } + } + var Lm = n(7339), + Hm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Lm.Z, Hm); + Lm.Z.locals; + var jm = n(3949), + qm = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(jm.Z, qm); + jm.Z.locals; + + function Wm(t, e = km) { + const n = new e(t), + o = new um(t), + i = new fm(t, n, o); + return n.bind("isEnabled").to(i), n instanceof Nm ? n.arrowView.bind("isOn").to(i, "isOpen") : n.bind("isOn").to(i, "isOpen"), + function(t) { + (function(t) { + t.on("render", (() => { + ng({ + emitter: t, + activator: () => t.isOpen, + callback: () => { + t.isOpen = !1 + }, + contextElements: [t.element] + }) + })) + })(t), + function(t) { + t.on("execute", (e => { + e.source instanceof Hg || (t.isOpen = !1) + })) + }(t), + function(t) { + t.focusTracker.on("change:isFocused", ((e, n, o) => { + t.isOpen && !o && (t.isOpen = !1) + })) + }(t), + function(t) { + t.keystrokes.set("arrowdown", ((e, n) => { + t.isOpen && (t.panelView.focus(), n()) + })), t.keystrokes.set("arrowup", ((e, n) => { + t.isOpen && (t.panelView.focusLast(), n()) + })) + }(t), + function(t) { + t.on("change:isOpen", ((e, n, o) => { + if (o) return; + const i = t.panelView.element; + i && i.contains(Po.document.activeElement) && t.buttonView.focus() + })) + }(t), + function(t) { + t.on("change:isOpen", ((e, n, o) => { + o && t.panelView.focus() + }), { + priority: "low" + }) + }(t) + }(i), i + } + + function Um(t, e, n = {}) { + t.extendTemplate({ + attributes: { + class: ["ck-toolbar-dropdown"] + } + }), t.isOpen ? $m(t, e, n) : t.once("change:isOpen", (() => $m(t, e, n)), { + priority: "highest" + }), n.enableActiveItemFocusOnDropdownOpen && Zm(t, (() => t.toolbarView.items.find((t => t.isOn)))) + } + + function $m(t, e, n) { + const o = t.locale, + i = o.t, + r = t.toolbarView = new Sm(o), + s = "function" == typeof e ? e() : e; + r.ariaLabel = n.ariaLabel || i("Dropdown toolbar"), n.maxWidth && (r.maxWidth = n.maxWidth), n.class && (r.class = n.class), n.isCompact && (r.isCompact = n.isCompact), n.isVertical && (r.isVertical = !0), s instanceof sg ? r.items.bindTo(s).using((t => t)) : r.items.addMany(s), t.panelView.children.add(r), r.items.delegate("execute").to(t) + } + + function Gm(t, e, n = {}) { + t.isOpen ? Km(t, e, n) : t.once("change:isOpen", (() => Km(t, e, n)), { + priority: "highest" + }), Zm(t, (() => t.listView.items.find((t => t instanceof Vm && t.children.first.isOn)))) + } + + function Km(t, e, n) { + const o = t.locale, + i = t.listView = new zm(o), + r = "function" == typeof e ? e() : e; + i.ariaLabel = n.ariaLabel, i.role = n.role, i.items.bindTo(r).using((t => { + if ("separator" === t.type) return new Om(o); + if ("button" === t.type || "switchbutton" === t.type) { + const e = new Vm(o); + let n; + return n = "button" === t.type ? new Mg(o) : new Hg(o), n.bind(...Object.keys(t.model)).to(t.model), n.delegate("execute").to(e), e.children.add(n), e + } + return null + })), t.panelView.children.add(i), i.items.delegate("execute").to(t) + } + + function Zm(t, e) { + t.on("change:isOpen", (() => { + if (!t.isOpen) return; + const n = e(); + n && ("function" == typeof n.focus ? n.focus() : k("ui-dropdown-focus-child-on-open-child-missing-focus", { + view: n + })) + }), { + priority: m.low - 10 + }) + } + + function Jm(t, e, n) { + const o = new dm(t.locale); + return o.set({ + id: e, + ariaDescribedById: n + }), o.bind("isReadOnly").to(t, "isEnabled", (t => !t)), o.bind("hasError").to(t, "errorText", (t => !!t)), o.on("input", (() => { + t.errorText = null + })), t.bind("isEmpty", "isFocused", "placeholder").to(o), o + } + + function Ym(t, e, n) { + const o = new hm(t.locale); + return o.set({ + id: e, + ariaDescribedById: n, + inputMode: "numeric" + }), o.bind("isReadOnly").to(t, "isEnabled", (t => !t)), o.bind("hasError").to(t, "errorText", (t => !!t)), o.on("input", (() => { + t.errorText = null + })), t.bind("isEmpty", "isFocused", "placeholder").to(o), o + } + + function Qm(t, e, n) { + const o = Wm(t.locale); + return o.set({ + id: e, + ariaDescribedById: n + }), o.bind("isEnabled").to(t), o + } + const Xm = (t, e = 0, n = 1) => t > n ? n : t < e ? e : t, + tp = (t, e = 0, n = Math.pow(10, e)) => Math.round(n * t) / n, + ep = (Math.PI, t => ("#" === t[0] && (t = t.substring(1)), t.length < 6 ? { + r: parseInt(t[0] + t[0], 16), + g: parseInt(t[1] + t[1], 16), + b: parseInt(t[2] + t[2], 16), + a: 4 === t.length ? tp(parseInt(t[3] + t[3], 16) / 255, 2) : 1 + } : { + r: parseInt(t.substring(0, 2), 16), + g: parseInt(t.substring(2, 4), 16), + b: parseInt(t.substring(4, 6), 16), + a: 8 === t.length ? tp(parseInt(t.substring(6, 8), 16) / 255, 2) : 1 + })), + np = ({ + h: t, + s: e, + v: n, + a: o + }) => { + const i = (200 - e) * n / 100; + return { + h: tp(t), + s: tp(i > 0 && i < 200 ? e * n / 100 / (i <= 100 ? i : 200 - i) * 100 : 0), + l: tp(i / 2), + a: tp(o, 2) + } + }, + op = t => { + const { + h: e, + s: n, + l: o + } = np(t); + return `hsl(${e}, ${n}%, ${o}%)` + }, + ip = ({ + h: t, + s: e, + v: n, + a: o + }) => { + t = t / 360 * 6, e /= 100, n /= 100; + const i = Math.floor(t), + r = n * (1 - e), + s = n * (1 - (t - i) * e), + a = n * (1 - (1 - t + i) * e), + l = i % 6; + return { + r: tp(255 * [n, s, r, r, a, n][l]), + g: tp(255 * [a, n, n, s, r, r][l]), + b: tp(255 * [r, r, a, n, n, s][l]), + a: tp(o, 2) + } + }, + rp = t => { + const e = t.toString(16); + return e.length < 2 ? "0" + e : e + }, + sp = ({ + r: t, + g: e, + b: n, + a: o + }) => { + const i = o < 1 ? rp(tp(255 * o)) : ""; + return "#" + rp(t) + rp(e) + rp(n) + i + }, + ap = ({ + r: t, + g: e, + b: n, + a: o + }) => { + const i = Math.max(t, e, n), + r = i - Math.min(t, e, n), + s = r ? i === t ? (e - n) / r : i === e ? 2 + (n - t) / r : 4 + (t - e) / r : 0; + return { + h: tp(60 * (s < 0 ? s + 6 : s)), + s: tp(i ? r / i * 100 : 0), + v: tp(i / 255 * 100), + a: o + } + }, + lp = (t, e) => { + if (t === e) return !0; + for (const n in t) + if (t[n] !== e[n]) return !1; + return !0 + }, + cp = {}, + dp = t => { + let e = cp[t]; + return e || (e = document.createElement("template"), e.innerHTML = t, cp[t] = e), e + }, + hp = (t, e, n) => { + t.dispatchEvent(new CustomEvent(e, { + bubbles: !0, + detail: n + })) + }; + let up = !1; + const gp = t => "touches" in t, + mp = (t, e) => { + const n = gp(e) ? e.touches[0] : e, + o = t.el.getBoundingClientRect(); + hp(t.el, "move", t.getMove({ + x: Xm((n.pageX - (o.left + window.pageXOffset)) / o.width), + y: Xm((n.pageY - (o.top + window.pageYOffset)) / o.height) + })) + }; + class pp { + constructor(t, e, n, o) { + const i = dp(`
`); + t.appendChild(i.content.cloneNode(!0)); + const r = t.querySelector(`[part=${e}]`); + r.addEventListener("mousedown", this), r.addEventListener("touchstart", this), r.addEventListener("keydown", this), this.el = r, this.xy = o, this.nodes = [r.firstChild, r] + } + set dragging(t) { + const e = t ? document.addEventListener : document.removeEventListener; + e(up ? "touchmove" : "mousemove", this), e(up ? "touchend" : "mouseup", this) + } + handleEvent(t) { + switch (t.type) { + case "mousedown": + case "touchstart": + if (t.preventDefault(), !(t => !(up && !gp(t) || (up || (up = gp(t)), 0)))(t) || !up && 0 != t.button) return; + this.el.focus(), mp(this, t), this.dragging = !0; + break; + case "mousemove": + case "touchmove": + t.preventDefault(), mp(this, t); + break; + case "mouseup": + case "touchend": + this.dragging = !1; + break; + case "keydown": + ((t, e) => { + const n = e.keyCode; + n > 40 || t.xy && n < 37 || n < 33 || (e.preventDefault(), hp(t.el, "move", t.getMove({ + x: 39 === n ? .01 : 37 === n ? -.01 : 34 === n ? .05 : 33 === n ? -.05 : 35 === n ? 1 : 36 === n ? -1 : 0, + y: 40 === n ? .01 : 38 === n ? -.01 : 0 + }, !0))) + })(this, t) + } + } + style(t) { + t.forEach(((t, e) => { + for (const n in t) this.nodes[e].style.setProperty(n, t[n]) + })) + } + } + class fp extends pp { + constructor(t) { + super(t, "hue", 'aria-label="Hue" aria-valuemin="0" aria-valuemax="360"', !1) + } + update({ + h: t + }) { + this.h = t, this.style([{ + left: t / 360 * 100 + "%", + color: op({ + h: t, + s: 100, + v: 100, + a: 1 + }) + }]), this.el.setAttribute("aria-valuenow", `${tp(t)}`) + } + getMove(t, e) { + return { + h: e ? Xm(this.h + 360 * t.x, 0, 360) : 360 * t.x + } + } + } + class bp extends pp { + constructor(t) { + super(t, "saturation", 'aria-label="Color"', !0) + } + update(t) { + this.hsva = t, this.style([{ + top: 100 - t.v + "%", + left: `${t.s}%`, + color: op(t) + }, { + "background-color": op({ + h: t.h, + s: 100, + v: 100, + a: 1 + }) + }]), this.el.setAttribute("aria-valuetext", `Saturation ${tp(t.s)}%, Brightness ${tp(t.v)}%`) + } + getMove(t, e) { + return { + s: e ? Xm(this.hsva.s + 100 * t.x, 0, 100) : 100 * t.x, + v: e ? Xm(this.hsva.v - 100 * t.y, 0, 100) : Math.round(100 - 100 * t.y) + } + } + } + const kp = Symbol("same"), + wp = Symbol("color"), + Ap = Symbol("hsva"), + Cp = Symbol("update"), + _p = Symbol("parts"), + vp = Symbol("css"), + yp = Symbol("sliders"); + class xp extends HTMLElement { + static get observedAttributes() { + return ["color"] + } + get[vp]() { + return [':host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:"";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}', "[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}", "[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}"] + } + get[yp]() { + return [bp, fp] + } + get color() { + return this[wp] + } + set color(t) { + if (!this[kp](t)) { + const e = this.colorModel.toHsva(t); + this[Cp](e), this[wp] = t + } + } + constructor() { + super(); + const t = dp(``), + e = this.attachShadow({ + mode: "open" + }); + e.appendChild(t.content.cloneNode(!0)), e.addEventListener("move", this), this[_p] = this[yp].map((t => new t(e))) + } + connectedCallback() { + if (this.hasOwnProperty("color")) { + const t = this.color; + delete this.color, this.color = t + } else this.color || (this.color = this.colorModel.defaultColor) + } + attributeChangedCallback(t, e, n) { + const o = this.colorModel.fromAttr(n); + this[kp](o) || (this.color = o) + } + handleEvent(t) { + const e = this[Ap], + n = { + ...e, + ...t.detail + }; + let o; + this[Cp](n), lp(n, e) || this[kp](o = this.colorModel.fromHsva(n)) || (this[wp] = o, hp(this, "color-changed", { + value: o + })) + } [kp](t) { + return this.color && this.colorModel.equal(t, this.color) + } [Cp](t) { + this[Ap] = t, this[_p].forEach((e => e.update(t))) + } + } + const Ep = { + defaultColor: "#000", + toHsva: t => ap(ep(t)), + fromHsva: ({ + h: t, + s: e, + v: n + }) => sp(ip({ + h: t, + s: e, + v: n, + a: 1 + })), + equal: (t, e) => t.toLowerCase() === e.toLowerCase() || lp(ep(t), ep(e)), + fromAttr: t => t + }; + class Dp extends xp { + get colorModel() { + return Ep + } + } + customElements.define("hex-color-picker", class extends Dp {}); + var Sp = n(3398), + Tp = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Sp.Z, Tp); + Sp.Z.locals; + class Bp extends cg { + constructor(t, e) { + super(t), this.set("color", ""), this.set("_hexColor", ""), this._format = e.format || "hsl", this.hexInputRow = this._createInputRow(); + const n = this.createCollection(); + n.add(this.hexInputRow), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-color-picker"], + tabindex: -1 + }, + children: n + }), this._debounceColorPickerEvent = Fa((t => { + this.set("color", t) + }), 150, { + leading: !0 + }), this.on("set:color", ((t, e, n) => { + t.return = Xg(n, this._format) + })), this.on("change:color", (() => { + this._hexColor = Ip(this.color) + })), this.on("change:_hexColor", (() => { + document.activeElement !== this.picker && this.picker.setAttribute("color", this._hexColor), Ip(this.color) != Ip(this._hexColor) && (this.color = this._hexColor) + })) + } + render() { + if (super.render(), this.picker = Po.document.createElement("hex-color-picker"), this.picker.setAttribute("class", "hex-color-picker"), this.picker.setAttribute("tabindex", "-1"), this._createSlidersView(), this.element) { + this.element.insertBefore(this.picker, this.hexInputRow.element); + const t = document.createElement("style"); + t.textContent = '[role="slider"]:focus [part$="pointer"] {border: 1px solid #fff;outline: 1px solid var(--ck-color-focus-border);box-shadow: 0 0 0 2px #fff;}', this.picker.shadowRoot.appendChild(t) + } + this.picker.addEventListener("color-changed", (t => { + const e = t.detail.value; + this._debounceColorPickerEvent(e) + })) + } + focus() { + if (i.isGecko || i.isiOS || i.isSafari) { + this.hexInputRow.children.get(1).focus() + } + this.slidersView.first.focus() + } + _createSlidersView() { + const t = [...this.picker.shadowRoot.children].filter((t => "slider" === t.getAttribute("role"))).map((t => new Pp(t))); + this.slidersView = this.createCollection(), t.forEach((t => { + this.slidersView.add(t) + })) + } + _createInputRow() { + const t = new Rp, + e = this._createColorInput(); + return new zp(this.locale, [t, e]) + } + _createColorInput() { + const t = new sm(this.locale, Jm), + { + t: e + } = this.locale; + return t.set({ + label: e("HEX"), + class: "color-picker-hex-input" + }), t.fieldView.bind("value").to(this, "_hexColor", (e => t.isFocused ? t.fieldView.value : e.startsWith("#") ? e.substring(1) : e)), t.fieldView.on("input", (() => { + const e = t.fieldView.element.value; + if (e) { + const t = e.trim(), + n = t.startsWith("#") ? t.substring(1) : t; + [3, 4, 6, 8].includes(n.length) && /(([0-9a-fA-F]{2}){3,4}|([0-9a-fA-F]){3,4})/.test(n) && this._debounceColorPickerEvent("#" + n) + } + })), t + } + } + + function Ip(t) { + let e = function(t) { + if (!t) return ""; + const e = tm(t); + return e ? "hex" === e.space ? e.hexValue : Xg(t, "hex") : "#000" + }(t); + return e || (e = "#000"), 4 === e.length && (e = "#" + [e[1], e[1], e[2], e[2], e[3], e[3]].join("")), e.toLowerCase() + } + class Pp extends cg { + constructor(t) { + super(), this.element = t + } + focus() { + this.element.focus() + } + } + class Rp extends cg { + constructor(t) { + super(t), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-color-picker__hash-view"] + }, + children: "#" + }) + } + } + class zp extends cg { + constructor(t, e) { + super(t), this.children = this.createCollection(e), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-color-picker__row"] + }, + children: this.children + }) + } + } + class Vp { + constructor(t) { + this._components = new Map, this.editor = t + }* names() { + for (const t of this._components.values()) yield t.originalName + } + add(t, e) { + this._components.set(Op(t), { + callback: e, + originalName: t + }) + } + create(t) { + if (!this.has(t)) throw new b("componentfactory-item-missing", this, { + name: t + }); + return this._components.get(Op(t)).callback(this.editor.locale) + } + has(t) { + return this._components.has(Op(t)) + } + } + + function Op(t) { + return String(t).toLowerCase() + } + var Fp = n(8793), + Mp = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Fp.Z, Mp); + Fp.Z.locals; + var Np = Object.defineProperty, + Lp = Object.getOwnPropertySymbols, + Hp = Object.prototype.hasOwnProperty, + jp = Object.prototype.propertyIsEnumerable, + qp = (t, e, n) => e in t ? Np(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + Wp = (t, e) => { + for (var n in e || (e = {})) Hp.call(e, n) && qp(t, n, e[n]); + if (Lp) + for (var n of Lp(e)) jp.call(e, n) && qp(t, n, e[n]); + return t + }; + const Up = $o("px"), + $p = Po.document.body, + Gp = class extends cg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.set("top", 0), this.set("left", 0), this.set("position", "arrow_nw"), this.set("isVisible", !1), this.set("withArrow", !0), this.set("class", void 0), this._pinWhenIsVisibleCallback = null, this.content = this.createCollection(), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-balloon-panel", e.to("position", (t => `ck-balloon-panel_${t}`)), e.if("isVisible", "ck-balloon-panel_visible"), e.if("withArrow", "ck-balloon-panel_with-arrow"), e.to("class")], + style: { + top: e.to("top", Up), + left: e.to("left", Up) + } + }, + children: this.content + }) + } + show() { + this.isVisible = !0 + } + hide() { + this.isVisible = !1 + } + attachTo(t) { + this.show(); + const e = Gp.defaultPositions, + n = Object.assign({}, { + element: this.element, + positions: [e.southArrowNorth, e.southArrowNorthMiddleWest, e.southArrowNorthMiddleEast, e.southArrowNorthWest, e.southArrowNorthEast, e.northArrowSouth, e.northArrowSouthMiddleWest, e.northArrowSouthMiddleEast, e.northArrowSouthWest, e.northArrowSouthEast, e.viewportStickyNorth], + limiter: $p, + fitInViewport: !0 + }, t), + o = Gp._getOptimalPosition(n), + i = parseInt(o.left), + r = parseInt(o.top), + s = o.name, + a = o.config || {}, + { + withArrow: l = !0 + } = a; + this.top = r, this.left = i, this.position = s, this.withArrow = l + } + pin(t) { + this.unpin(), this._pinWhenIsVisibleCallback = () => { + this.isVisible ? this._startPinning(t) : this._stopPinning() + }, this._startPinning(t), this.listenTo(this, "change:isVisible", this._pinWhenIsVisibleCallback) + } + unpin() { + this._pinWhenIsVisibleCallback && (this._stopPinning(), this.stopListening(this, "change:isVisible", this._pinWhenIsVisibleCallback), this._pinWhenIsVisibleCallback = null, this.hide()) + } + _startPinning(t) { + this.attachTo(t); + const e = Zp(t.target), + n = t.limiter ? Zp(t.limiter) : $p; + this.listenTo(Po.document, "scroll", ((o, i) => { + const r = i.target, + s = e && r.contains(e), + a = n && r.contains(n); + !s && !a && e && n || this.attachTo(t) + }), { + useCapture: !0 + }), this.listenTo(Po.window, "resize", (() => { + this.attachTo(t) + })) + } + _stopPinning() { + this.stopListening(Po.document, "scroll"), this.stopListening(Po.window, "resize") + } + }; + let Kp = Gp; + + function Zp(t) { + return Co(t) ? t : Vo(t) ? t.commonAncestorContainer : "function" == typeof t ? Zp(t()) : null + } + + function Jp(t = {}) { + const { + sideOffset: e = Kp.arrowSideOffset, + heightOffset: n = Kp.arrowHeightOffset, + stickyVerticalOffset: o = Kp.stickyVerticalOffset, + config: i + } = t; + return { + northWestArrowSouthWest: (t, n) => Wp({ + top: r(t, n), + left: t.left - e, + name: "arrow_sw" + }, i && { + config: i + }), + northWestArrowSouthMiddleWest: (t, n) => Wp({ + top: r(t, n), + left: t.left - .25 * n.width - e, + name: "arrow_smw" + }, i && { + config: i + }), + northWestArrowSouth: (t, e) => Wp({ + top: r(t, e), + left: t.left - e.width / 2, + name: "arrow_s" + }, i && { + config: i + }), + northWestArrowSouthMiddleEast: (t, n) => Wp({ + top: r(t, n), + left: t.left - .75 * n.width + e, + name: "arrow_sme" + }, i && { + config: i + }), + northWestArrowSouthEast: (t, n) => Wp({ + top: r(t, n), + left: t.left - n.width + e, + name: "arrow_se" + }, i && { + config: i + }), + northArrowSouthWest: (t, n) => Wp({ + top: r(t, n), + left: t.left + t.width / 2 - e, + name: "arrow_sw" + }, i && { + config: i + }), + northArrowSouthMiddleWest: (t, n) => Wp({ + top: r(t, n), + left: t.left + t.width / 2 - .25 * n.width - e, + name: "arrow_smw" + }, i && { + config: i + }), + northArrowSouth: (t, e) => Wp({ + top: r(t, e), + left: t.left + t.width / 2 - e.width / 2, + name: "arrow_s" + }, i && { + config: i + }), + northArrowSouthMiddleEast: (t, n) => Wp({ + top: r(t, n), + left: t.left + t.width / 2 - .75 * n.width + e, + name: "arrow_sme" + }, i && { + config: i + }), + northArrowSouthEast: (t, n) => Wp({ + top: r(t, n), + left: t.left + t.width / 2 - n.width + e, + name: "arrow_se" + }, i && { + config: i + }), + northEastArrowSouthWest: (t, n) => Wp({ + top: r(t, n), + left: t.right - e, + name: "arrow_sw" + }, i && { + config: i + }), + northEastArrowSouthMiddleWest: (t, n) => Wp({ + top: r(t, n), + left: t.right - .25 * n.width - e, + name: "arrow_smw" + }, i && { + config: i + }), + northEastArrowSouth: (t, e) => Wp({ + top: r(t, e), + left: t.right - e.width / 2, + name: "arrow_s" + }, i && { + config: i + }), + northEastArrowSouthMiddleEast: (t, n) => Wp({ + top: r(t, n), + left: t.right - .75 * n.width + e, + name: "arrow_sme" + }, i && { + config: i + }), + northEastArrowSouthEast: (t, n) => Wp({ + top: r(t, n), + left: t.right - n.width + e, + name: "arrow_se" + }, i && { + config: i + }), + southWestArrowNorthWest: t => Wp({ + top: s(t), + left: t.left - e, + name: "arrow_nw" + }, i && { + config: i + }), + southWestArrowNorthMiddleWest: (t, n) => Wp({ + top: s(t), + left: t.left - .25 * n.width - e, + name: "arrow_nmw" + }, i && { + config: i + }), + southWestArrowNorth: (t, e) => Wp({ + top: s(t), + left: t.left - e.width / 2, + name: "arrow_n" + }, i && { + config: i + }), + southWestArrowNorthMiddleEast: (t, n) => Wp({ + top: s(t), + left: t.left - .75 * n.width + e, + name: "arrow_nme" + }, i && { + config: i + }), + southWestArrowNorthEast: (t, n) => Wp({ + top: s(t), + left: t.left - n.width + e, + name: "arrow_ne" + }, i && { + config: i + }), + southArrowNorthWest: t => Wp({ + top: s(t), + left: t.left + t.width / 2 - e, + name: "arrow_nw" + }, i && { + config: i + }), + southArrowNorthMiddleWest: (t, n) => Wp({ + top: s(t), + left: t.left + t.width / 2 - .25 * n.width - e, + name: "arrow_nmw" + }, i && { + config: i + }), + southArrowNorth: (t, e) => Wp({ + top: s(t), + left: t.left + t.width / 2 - e.width / 2, + name: "arrow_n" + }, i && { + config: i + }), + southArrowNorthMiddleEast: (t, n) => Wp({ + top: s(t), + left: t.left + t.width / 2 - .75 * n.width + e, + name: "arrow_nme" + }, i && { + config: i + }), + southArrowNorthEast: (t, n) => Wp({ + top: s(t), + left: t.left + t.width / 2 - n.width + e, + name: "arrow_ne" + }, i && { + config: i + }), + southEastArrowNorthWest: t => Wp({ + top: s(t), + left: t.right - e, + name: "arrow_nw" + }, i && { + config: i + }), + southEastArrowNorthMiddleWest: (t, n) => Wp({ + top: s(t), + left: t.right - .25 * n.width - e, + name: "arrow_nmw" + }, i && { + config: i + }), + southEastArrowNorth: (t, e) => Wp({ + top: s(t), + left: t.right - e.width / 2, + name: "arrow_n" + }, i && { + config: i + }), + southEastArrowNorthMiddleEast: (t, n) => Wp({ + top: s(t), + left: t.right - .75 * n.width + e, + name: "arrow_nme" + }, i && { + config: i + }), + southEastArrowNorthEast: (t, n) => Wp({ + top: s(t), + left: t.right - n.width + e, + name: "arrow_ne" + }, i && { + config: i + }), + westArrowEast: (t, e) => Wp({ + top: t.top + t.height / 2 - e.height / 2, + left: t.left - e.width - n, + name: "arrow_e" + }, i && { + config: i + }), + eastArrowWest: (t, e) => Wp({ + top: t.top + t.height / 2 - e.height / 2, + left: t.right + n, + name: "arrow_w" + }, i && { + config: i + }), + viewportStickyNorth: (t, e, n) => t.getIntersection(n) ? { + top: n.top + o, + left: t.left + t.width / 2 - e.width / 2, + name: "arrowless", + config: Wp({ + withArrow: !1 + }, i) + } : null + }; + + function r(t, e) { + return t.top - e.height - n + } + + function s(t) { + return t.bottom + n + } + } + Kp.arrowSideOffset = 25, Kp.arrowHeightOffset = 10, Kp.stickyVerticalOffset = 20, Kp._getOptimalPosition = Qo, Kp.defaultPositions = Jp(); + var Yp = n(3332), + Qp = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Yp.Z, Qp); + Yp.Z.locals; + const Xp = "ck-tooltip", + tf = class extends(So()) { + constructor(t) { + if (super(), this._currentElementWithTooltip = null, this._currentTooltipPosition = null, this._resizeObserver = null, tf._editors.add(t), tf._instance) return tf._instance; + tf._instance = this, this.tooltipTextView = new cg(t.locale), this.tooltipTextView.set("text", ""), this.tooltipTextView.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-tooltip__text"] + }, + children: [{ + text: this.tooltipTextView.bindTemplate.to("text") + }] + }), this.balloonPanelView = new Kp(t.locale), this.balloonPanelView.class = Xp, this.balloonPanelView.content.add(this.tooltipTextView), this._pinTooltipDebounced = Fa(this._pinTooltip, 600), this.listenTo(Po.document, "mouseenter", this._onEnterOrFocus.bind(this), { + useCapture: !0 + }), this.listenTo(Po.document, "mouseleave", this._onLeaveOrBlur.bind(this), { + useCapture: !0 + }), this.listenTo(Po.document, "focus", this._onEnterOrFocus.bind(this), { + useCapture: !0 + }), this.listenTo(Po.document, "blur", this._onLeaveOrBlur.bind(this), { + useCapture: !0 + }), this.listenTo(Po.document, "scroll", this._onScroll.bind(this), { + useCapture: !0 + }), this._watchdogExcluded = !0 + } + destroy(t) { + const e = t.ui.view && t.ui.view.body; + tf._editors.delete(t), this.stopListening(t.ui), e && e.has(this.balloonPanelView) && e.remove(this.balloonPanelView), tf._editors.size || (this._unpinTooltip(), this.balloonPanelView.destroy(), this.stopListening(), tf._instance = null) + } + static getPositioningFunctions(t) { + const e = tf.defaultBalloonPositions; + return { + s: [e.southArrowNorth, e.southArrowNorthEast, e.southArrowNorthWest], + n: [e.northArrowSouth], + e: [e.eastArrowWest], + w: [e.westArrowEast], + sw: [e.southArrowNorthEast], + se: [e.southArrowNorthWest] + } [t] + } + _onEnterOrFocus(t, { + target: e + }) { + const n = nf(e); + var o; + n && (n !== this._currentElementWithTooltip && (this._unpinTooltip(), this._pinTooltipDebounced(n, { + text: (o = n).dataset.ckeTooltipText, + position: o.dataset.ckeTooltipPosition || "s", + cssClass: o.dataset.ckeTooltipClass || "" + }))) + } + _onLeaveOrBlur(t, { + target: e, + relatedTarget: n + }) { + if ("mouseleave" === t.name) { + if (!Co(e)) return; + if (this._currentElementWithTooltip && e !== this._currentElementWithTooltip) return; + const t = nf(e), + o = nf(n); + t && t !== o && this._unpinTooltip() + } else { + if (this._currentElementWithTooltip && e !== this._currentElementWithTooltip) return; + this._unpinTooltip() + } + } + _onScroll(t, { + target: e + }) { + this._currentElementWithTooltip && (e.contains(this.balloonPanelView.element) && e.contains(this._currentElementWithTooltip) || this._unpinTooltip()) + } + _pinTooltip(t, { + text: e, + position: n, + cssClass: o + }) { + const i = Ei(tf._editors.values()).ui.view.body; + i.has(this.balloonPanelView) || i.add(this.balloonPanelView), this.tooltipTextView.text = e, this.balloonPanelView.pin({ + target: t, + positions: tf.getPositioningFunctions(n) + }), this._resizeObserver = new Wo(t, (() => { + Jo(t) || this._unpinTooltip() + })), this.balloonPanelView.class = [Xp, o].filter((t => t)).join(" "); + for (const t of tf._editors) this.listenTo(t.ui, "update", this._updateTooltipPosition.bind(this), { + priority: "low" + }); + this._currentElementWithTooltip = t, this._currentTooltipPosition = n + } + _unpinTooltip() { + this._pinTooltipDebounced.cancel(), this.balloonPanelView.unpin(); + for (const t of tf._editors) this.stopListening(t.ui, "update"); + this._currentElementWithTooltip = null, this._currentTooltipPosition = null, this._resizeObserver && this._resizeObserver.destroy() + } + _updateTooltipPosition() { + Jo(this._currentElementWithTooltip) ? this.balloonPanelView.pin({ + target: this._currentElementWithTooltip, + positions: tf.getPositioningFunctions(this._currentTooltipPosition) + }) : this._unpinTooltip() + } + }; + let ef = tf; + + function nf(t) { + return Co(t) ? t.closest("[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])") : null + } + ef.defaultBalloonPositions = Jp({ + heightOffset: 5, + sideOffset: 13 + }), ef._editors = new Set, ef._instance = null; + const of = function(t, e, n) { + var o = !0, + i = !0; + if ("function" != typeof t) throw new TypeError("Expected a function"); + return O(n) && (o = "leading" in n ? !!n.leading : o, i = "trailing" in n ? !!n.trailing : i), Fa(t, e, { + leading: o, + maxWait: e, + trailing: i + }) + }; + var rf = Object.defineProperty, + sf = Object.getOwnPropertySymbols, + af = Object.prototype.hasOwnProperty, + lf = Object.prototype.propertyIsEnumerable, + cf = (t, e, n) => e in t ? rf(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + df = (t, e) => { + for (var n in e || (e = {})) af.call(e, n) && cf(t, n, e[n]); + if (sf) + for (var n of sf(e)) lf.call(e, n) && cf(t, n, e[n]); + return t + }; + const hf = 50, + uf = 350, + gf = "Powered by", + mf = { + top: -99999, + left: -99999, + name: "invalid", + config: { + withArrow: !1 + } + }; + class pf extends(So()) { + constructor(t) { + super(), this.editor = t, this._balloonView = null, this._lastFocusedEditableElement = null, this._showBalloonThrottled = of(this._showBalloon.bind(this), 50, { + leading: !0 + }), t.on("ready", this._handleEditorReady.bind(this)) + } + destroy() { + const t = this._balloonView; + t && (t.unpin(), this._balloonView = null), this._showBalloonThrottled.cancel(), this.stopListening() + } + _handleEditorReady() { + const t = this.editor; + (!!t.config.get("ui.poweredBy.forceVisible") || "VALID" !== function(t) { + function e(t) { + return t.length >= 40 && t.length <= 255 ? "VALID" : "INVALID" + } + if (!t) return "INVALID"; + let n = ""; + try { + n = atob(t) + } catch (t) { + return "INVALID" + } + const o = n.split("-"), + i = o[0], + r = o[1]; + if (!r) return e(t); + try { + atob(r) + } catch (n) { + try { + if (atob(i), !atob(i).length) return e(t) + } catch (n) { + return e(t) + } + } + if (i.length < 40 || i.length > 255) return "INVALID"; + let s = ""; + try { + atob(i), s = atob(r) + } catch (t) { + return "INVALID" + } + if (8 !== s.length) return "INVALID"; + const a = Number(s.substring(0, 4)), + l = Number(s.substring(4, 6)) - 1, + c = Number(s.substring(6, 8)), + d = new Date(a, l, c); + return d < _ || isNaN(Number(d)) ? "INVALID" : "VALID" + }(t.config.get("licenseKey"))) && t.ui.view && (t.ui.focusTracker.on("change:isFocused", ((t, e, n) => { + this._updateLastFocusedEditableElement(), n ? this._showBalloon() : this._hideBalloon() + })), t.ui.focusTracker.on("change:focusedElement", ((t, e, n) => { + this._updateLastFocusedEditableElement(), n && this._showBalloon() + })), t.ui.on("update", (() => { + this._showBalloonThrottled() + }))) + } + _createBalloonView() { + const t = this.editor, + e = this._balloonView = new Kp, + n = kf(t), + o = new ff(t.locale, n.label); + e.content.add(o), e.set({ + class: "ck-powered-by-balloon" + }), t.ui.view.body.add(e), t.ui.focusTracker.add(e.element), this._balloonView = e + } + _showBalloon() { + if (!this._lastFocusedEditableElement) return; + const t = function(t, e) { + const n = kf(t), + o = "right" === n.side ? function(t, e) { + return bf(t, e, ((t, n) => t.left + t.width - n.width - e.horizontalOffset)) + }(e, n) : function(t, e) { + return bf(t, e, (t => t.left + e.horizontalOffset)) + }(e, n); + return { + target: e, + positions: [o] + } + }(this.editor, this._lastFocusedEditableElement); + t && (this._balloonView || this._createBalloonView(), this._balloonView.pin(t)) + } + _hideBalloon() { + this._balloonView && this._balloonView.unpin() + } + _updateLastFocusedEditableElement() { + const t = this.editor, + e = t.ui.focusTracker.isFocused, + n = t.ui.focusTracker.focusedElement; + if (!e || !n) return void(this._lastFocusedEditableElement = null); + const o = Array.from(t.ui.getEditableElementsNames()).map((e => t.ui.getEditableElement(e))); + o.includes(n) ? this._lastFocusedEditableElement = n : this._lastFocusedEditableElement = o[0] + } + } + class ff extends cg { + constructor(t, e) { + super(t); + const n = new Vg, + o = this.bindTemplate; + n.set({ + content: '\n', + isColorInherited: !1 + }), n.extendTemplate({ + attributes: { + style: { + width: "53px", + height: "10px" + } + } + }), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-powered-by"], + "aria-hidden": !0 + }, + children: [{ + tag: "a", + attributes: { + href: "https://ckeditor.com/?utm_source=ckeditor&utm_medium=referral&utm_campaign=701Dn000000hVgmIAE_powered_by_ckeditor_logo", + target: "_blank", + tabindex: "-1" + }, + children: [...e ? [{ + tag: "span", + attributes: { + class: ["ck", "ck-powered-by__label"] + }, + children: [e] + }] : [], n], + on: { + dragstart: o.to((t => t.preventDefault())) + } + }] + }) + } + } + + function bf(t, e, n) { + return (o, i) => { + const r = o.getVisible(); + if (!r) return mf; + if (o.width < uf || o.height < hf) return mf; + let s; + s = "inside" === e.position ? o.bottom - i.height : o.bottom - i.height / 2, s -= e.verticalOffset; + const a = n(o, i); + if ("inside" === e.position) { + const t = i.clone().moveTo(a, s); + if (t.getIntersectionArea(r) < t.getArea()) return mf + } else { + const e = function(t) { + let e = t.parentElement; + if (!e) return null; + for (; + "BODY" != e.tagName;) { + const t = e.style.overflowY || Po.window.getComputedStyle(e).overflowY; + if ("auto" === t || "scroll" === t) break; + if (e = e.parentElement, !e) return null + } + return e + }(t); + if (e) { + const t = new Mo(e); + if (r.bottom + i.height / 2 > t.bottom) return mf + } + } + return { + top: s, + left: a, + name: `position_${e.position}-side_${e.side}`, + config: { + withArrow: !1 + } + } + } + } + + function kf(t) { + const e = t.config.get("ui.poweredBy"), + n = e && e.position || "border"; + return df({ + position: n, + label: gf, + verticalOffset: "inside" === n ? 5 : 0, + horizontalOffset: 5, + side: "ltr" === t.locale.contentLanguageDirection ? "right" : "left" + }, e) + } + var wf = Object.defineProperty, + Af = Object.getOwnPropertySymbols, + Cf = Object.prototype.hasOwnProperty, + _f = Object.prototype.propertyIsEnumerable, + vf = (t, e, n) => e in t ? wf(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class yf extends(q()) { + constructor(t) { + super(), this.isReady = !1, this._editableElementsMap = new Map, this._focusableToolbarDefinitions = []; + const e = t.editing.view; + this.editor = t, this.componentFactory = new Vp(t), this.focusTracker = new Di, this.tooltipManager = new ef(t), this.poweredBy = new pf(t), this.set("viewportOffset", this._readViewportOffsetFromConfig()), this.once("ready", (() => { + this.isReady = !0 + })), this.listenTo(e.document, "layoutChanged", this.update.bind(this)), this.listenTo(e, "scrollToTheSelection", this._handleScrollToTheSelection.bind(this)), this._initFocusTracking() + } + get element() { + return null + } + update() { + this.fire("update") + } + destroy() { + this.stopListening(), this.focusTracker.destroy(), this.tooltipManager.destroy(this.editor), this.poweredBy.destroy(); + for (const t of this._editableElementsMap.values()) t.ckeditorInstance = null, this.editor.keystrokes.stopListening(t); + this._editableElementsMap = new Map, this._focusableToolbarDefinitions = [] + } + setEditableElement(t, e) { + this._editableElementsMap.set(t, e), e.ckeditorInstance || (e.ckeditorInstance = this.editor), this.focusTracker.add(e); + const n = () => { + this.editor.editing.view.getDomRoot(t) || this.editor.keystrokes.listenTo(e) + }; + this.isReady ? n() : this.once("ready", n) + } + removeEditableElement(t) { + const e = this._editableElementsMap.get(t); + e && (this._editableElementsMap.delete(t), this.editor.keystrokes.stopListening(e), this.focusTracker.remove(e), e.ckeditorInstance = null) + } + getEditableElement(t = "main") { + return this._editableElementsMap.get(t) + } + getEditableElementsNames() { + return this._editableElementsMap.keys() + } + addToolbar(t, e = {}) { + t.isRendered ? (this.focusTracker.add(t.element), this.editor.keystrokes.listenTo(t.element)) : t.once("render", (() => { + this.focusTracker.add(t.element), this.editor.keystrokes.listenTo(t.element) + })), this._focusableToolbarDefinitions.push({ + toolbarView: t, + options: e + }) + } + get _editableElements() { + return console.warn("editor-ui-deprecated-editable-elements: The EditorUI#_editableElements property has been deprecated and will be removed in the near future.", { + editorUI: this + }), this._editableElementsMap + } + _readViewportOffsetFromConfig() { + const t = this.editor, + e = t.config.get("ui.viewportOffset"); + if (e) return e; + const n = t.config.get("toolbar.viewportTopOffset"); + return n ? (console.warn("editor-ui-deprecated-viewport-offset-config: The `toolbar.vieportTopOffset` configuration option is deprecated. It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead."), { + top: n + }) : { + top: 0 + } + } + _initFocusTracking() { + const t = this.editor, + e = t.editing.view; + let n, o; + t.keystrokes.set("Alt+F10", ((t, i) => { + const r = this.focusTracker.focusedElement; + Array.from(this._editableElementsMap.values()).includes(r) && !Array.from(e.domRoots.values()).includes(r) && (n = r); + const s = this._getCurrentFocusedToolbarDefinition(); + s && o || (o = this._getFocusableCandidateToolbarDefinitions()); + for (let t = 0; t < o.length; t++) { + const t = o.shift(); + if (o.push(t), t !== s && this._focusFocusableCandidateToolbar(t)) { + s && s.options.afterBlur && s.options.afterBlur(); + break + } + } + i() + })), t.keystrokes.set("Esc", ((e, o) => { + const i = this._getCurrentFocusedToolbarDefinition(); + i && (n ? (n.focus(), n = null) : t.editing.view.focus(), i.options.afterBlur && i.options.afterBlur(), o()) + })) + } + _getFocusableCandidateToolbarDefinitions() { + const t = []; + for (const e of this._focusableToolbarDefinitions) { + const { + toolbarView: n, + options: o + } = e; + (Jo(n.element) || o.beforeFocus) && t.push(e) + } + return t.sort(((t, e) => xf(t) - xf(e))), t + } + _getCurrentFocusedToolbarDefinition() { + for (const t of this._focusableToolbarDefinitions) + if (t.toolbarView.element && t.toolbarView.element.contains(this.focusTracker.focusedElement)) return t; + return null + } + _focusFocusableCandidateToolbar(t) { + const { + toolbarView: e, + options: { + beforeFocus: n + } + } = t; + return n && n(), !!Jo(e.element) && (e.focus(), !0) + } + _handleScrollToTheSelection(t, e) { + const n = ((t, e) => { + for (var n in e || (e = {})) Cf.call(e, n) && vf(t, n, e[n]); + if (Af) + for (var n of Af(e)) _f.call(e, n) && vf(t, n, e[n]); + return t + })({ + top: 0, + bottom: 0, + left: 0, + right: 0 + }, this.viewportOffset); + e.viewportOffset.top += n.top, e.viewportOffset.bottom += n.bottom, e.viewportOffset.left += n.left, e.viewportOffset.right += n.right + } + } + + function xf(t) { + const { + toolbarView: e, + options: n + } = t; + let o = 10; + return Jo(e.element) && o--, n.isContextual && o--, o + } + var Ef = n(9688), + Df = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Ef.Z, Df); + Ef.Z.locals; + class Sf extends cg { + constructor(t) { + super(t), this.body = new Ig(t) + } + render() { + super.render(), this.body.attachToDom() + } + destroy() { + return this.body.detachFromDom(), super.destroy() + } + } + class Tf extends cg { + constructor(t, e, n) { + super(t), this.name = null, this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-content", "ck-editor__editable", "ck-rounded-corners"], + lang: t.contentLanguage, + dir: t.contentLanguageDirection + } + }), this.set("isFocused", !1), this._editableElement = n, this._hasExternalElement = !!this._editableElement, this._editingView = e + } + render() { + super.render(), this._hasExternalElement ? this.template.apply(this.element = this._editableElement) : this._editableElement = this.element, this.on("change:isFocused", (() => this._updateIsFocusedClasses())), this._updateIsFocusedClasses() + } + destroy() { + this._hasExternalElement && this.template.revert(this._editableElement), super.destroy() + } + get hasExternalElement() { + return this._hasExternalElement + } + _updateIsFocusedClasses() { + const t = this._editingView; + + function e(e) { + t.change((n => { + const o = t.document.getRoot(e.name); + n.addClass(e.isFocused ? "ck-focused" : "ck-blurred", o), n.removeClass(e.isFocused ? "ck-blurred" : "ck-focused", o) + })) + } + t.isRenderingInProgress ? function n(o) { + t.once("change:isRenderingInProgress", ((t, i, r) => { + r ? n(o) : e(o) + })) + }(this) : e(this) + } + } + class Bf extends Tf { + constructor(t, e, n, o = {}) { + super(t, e, n); + const i = t.t; + this.extendTemplate({ + attributes: { + role: "textbox", + class: "ck-editor__editable_inline" + } + }), this._generateLabel = o.label || (() => i("Editor editing area: %0", this.name)) + } + render() { + super.render(); + const t = this._editingView; + t.change((e => { + const n = t.document.getRoot(this.name); + e.setAttribute("aria-label", this._generateLabel(this), n) + })) + } + } + var If = n(8847), + Pf = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(If.Z, Pf); + If.Z.locals; + class Rf extends cg { + constructor(t, e = {}) { + super(t); + const n = this.bindTemplate; + this.set("label", e.label || ""), this.set("class", e.class || null), this.children = this.createCollection(), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-form__header", n.to("class")] + }, + children: this.children + }); + const o = new cg(t); + o.setTemplate({ + tag: "h2", + attributes: { + class: ["ck", "ck-form__header__label"] + }, + children: [{ + text: n.to("label") + }] + }), this.children.add(o) + } + } + class zf extends ji { + static get pluginName() { + return "Notification" + } + init() { + this.on("show:warning", ((t, e) => { + window.alert(e.message) + }), { + priority: "lowest" + }) + } + showSuccess(t, e = {}) { + this._showNotification({ + message: t, + type: "success", + namespace: e.namespace, + title: e.title + }) + } + showInfo(t, e = {}) { + this._showNotification({ + message: t, + type: "info", + namespace: e.namespace, + title: e.title + }) + } + showWarning(t, e = {}) { + this._showNotification({ + message: t, + type: "warning", + namespace: e.namespace, + title: e.title + }) + } + _showNotification(t) { + const e = t.namespace ? `show:${t.type}:${t.namespace}` : `show:${t.type}`; + this.fire(e, { + message: t.message, + type: t.type, + title: t.title || "" + }) + } + } + class Vf extends(q()) { + constructor(t, e) { + super(), e && Ca(this, e), t && this.set(t) + } + } + const Of = ''; + var Ff = n(4650), + Mf = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Ff.Z, Mf); + Ff.Z.locals; + var Nf = n(7676), + Lf = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Nf.Z, Lf); + Nf.Z.locals; + const Hf = $o("px"); + class jf extends Vi { + constructor(t) { + super(t), this._viewToStack = new Map, this._idToStack = new Map, this._view = null, this._rotatorView = null, this._fakePanelsView = null, this.positionLimiter = () => { + const t = this.editor.editing.view, + e = t.document.selection.editableElement; + return e ? t.domConverter.mapViewToDom(e.root) : null + }, this.set("visibleView", null), this.set("_numberOfStacks", 0), this.set("_singleViewMode", !1) + } + static get pluginName() { + return "ContextualBalloon" + } + destroy() { + super.destroy(), this._view && this._view.destroy(), this._rotatorView && this._rotatorView.destroy(), this._fakePanelsView && this._fakePanelsView.destroy() + } + get view() { + return this._view || this._createPanelView(), this._view + } + hasView(t) { + return Array.from(this._viewToStack.keys()).includes(t) + } + add(t) { + if (this._view || this._createPanelView(), this.hasView(t.view)) throw new b("contextualballoon-add-view-exist", [this, t]); + const e = t.stackId || "main"; + if (!this._idToStack.has(e)) return this._idToStack.set(e, new Map([ + [t.view, t] + ])), this._viewToStack.set(t.view, this._idToStack.get(e)), this._numberOfStacks = this._idToStack.size, void(this._visibleStack && !t.singleViewMode || this.showStack(e)); + const n = this._idToStack.get(e); + t.singleViewMode && this.showStack(e), n.set(t.view, t), this._viewToStack.set(t.view, n), n === this._visibleStack && this._showView(t) + } + remove(t) { + if (!this.hasView(t)) throw new b("contextualballoon-remove-view-not-exist", [this, t]); + const e = this._viewToStack.get(t); + this._singleViewMode && this.visibleView === t && (this._singleViewMode = !1), this.visibleView === t && (1 === e.size ? this._idToStack.size > 1 ? this._showNextStack() : (this.view.hide(), this.visibleView = null, this._rotatorView.hideView()) : this._showView(Array.from(e.values())[e.size - 2])), 1 === e.size ? (this._idToStack.delete(this._getStackId(e)), this._numberOfStacks = this._idToStack.size) : e.delete(t), this._viewToStack.delete(t) + } + updatePosition(t) { + t && (this._visibleStack.get(this.visibleView).position = t), this.view.pin(this._getBalloonPosition()), this._fakePanelsView.updatePosition() + } + showStack(t) { + this.visibleStack = t; + const e = this._idToStack.get(t); + if (!e) throw new b("contextualballoon-showstack-stack-not-exist", this); + this._visibleStack !== e && this._showView(Array.from(e.values()).pop()) + } + _createPanelView() { + this._view = new Kp(this.editor.locale), this.editor.ui.view.body.add(this._view), this.editor.ui.focusTracker.add(this._view.element), this._rotatorView = this._createRotatorView(), this._fakePanelsView = this._createFakePanelsView() + } + get _visibleStack() { + return this._viewToStack.get(this.visibleView) + } + _getStackId(t) { + return Array.from(this._idToStack.entries()).find((e => e[1] === t))[0] + } + _showNextStack() { + const t = Array.from(this._idToStack.values()); + let e = t.indexOf(this._visibleStack) + 1; + t[e] || (e = 0), this.showStack(this._getStackId(t[e])) + } + _showPrevStack() { + const t = Array.from(this._idToStack.values()); + let e = t.indexOf(this._visibleStack) - 1; + t[e] || (e = t.length - 1), this.showStack(this._getStackId(t[e])) + } + _createRotatorView() { + const t = new qf(this.editor.locale), + e = this.editor.locale.t; + return this.view.content.add(t), t.bind("isNavigationVisible").to(this, "_numberOfStacks", this, "_singleViewMode", ((t, e) => !e && t > 1)), t.on("change:isNavigationVisible", (() => this.updatePosition()), { + priority: "low" + }), t.bind("counter").to(this, "visibleView", this, "_numberOfStacks", ((t, n) => { + if (n < 2) return ""; + const o = Array.from(this._idToStack.values()).indexOf(this._visibleStack) + 1; + return e("%0 of %1", [o, n]) + })), t.buttonNextView.on("execute", (() => { + t.focusTracker.isFocused && this.editor.editing.view.focus(), this._showNextStack() + })), t.buttonPrevView.on("execute", (() => { + t.focusTracker.isFocused && this.editor.editing.view.focus(), this._showPrevStack() + })), t + } + _createFakePanelsView() { + const t = new Wf(this.editor.locale, this.view); + return t.bind("numberOfPanels").to(this, "_numberOfStacks", this, "_singleViewMode", ((t, e) => !e && t >= 2 ? Math.min(t - 1, 2) : 0)), t.listenTo(this.view, "change:top", (() => t.updatePosition())), t.listenTo(this.view, "change:left", (() => t.updatePosition())), this.editor.ui.view.body.add(t), t + } + _showView({ + view: t, + balloonClassName: e = "", + withArrow: n = !0, + singleViewMode: o = !1 + }) { + this.view.class = e, this.view.withArrow = n, this._rotatorView.showView(t), this.visibleView = t, this.view.pin(this._getBalloonPosition()), this._fakePanelsView.updatePosition(), o && (this._singleViewMode = !0) + } + _getBalloonPosition() { + let t = Array.from(this._visibleStack.values()).pop().position; + return t && (t.limiter || (t = Object.assign({}, t, { + limiter: this.positionLimiter + })), t = Object.assign({}, t, { + viewportOffsetConfig: this.editor.ui.viewportOffset + })), t + } + } + class qf extends cg { + constructor(t) { + super(t); + const e = t.t, + n = this.bindTemplate; + this.set("isNavigationVisible", !0), this.focusTracker = new Di, this.buttonPrevView = this._createButtonView(e("Previous"), Of), this.buttonNextView = this._createButtonView(e("Next"), ''), this.content = this.createCollection(), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-balloon-rotator"], + "z-index": "-1" + }, + children: [{ + tag: "div", + attributes: { + class: ["ck-balloon-rotator__navigation", n.to("isNavigationVisible", (t => t ? "" : "ck-hidden"))] + }, + children: [this.buttonPrevView, { + tag: "span", + attributes: { + class: ["ck-balloon-rotator__counter"] + }, + children: [{ + text: n.to("counter") + }] + }, this.buttonNextView] + }, { + tag: "div", + attributes: { + class: "ck-balloon-rotator__content" + }, + children: this.content + }] + }) + } + render() { + super.render(), this.focusTracker.add(this.element) + } + destroy() { + super.destroy(), this.focusTracker.destroy() + } + showView(t) { + this.hideView(), this.content.add(t) + } + hideView() { + this.content.clear() + } + _createButtonView(t, e) { + const n = new Mg(this.locale); + return n.set({ + label: t, + icon: e, + tooltip: !0 + }), n + } + } + class Wf extends cg { + constructor(t, e) { + super(t); + const n = this.bindTemplate; + this.set("top", 0), this.set("left", 0), this.set("height", 0), this.set("width", 0), this.set("numberOfPanels", 0), this.content = this.createCollection(), this._balloonPanelView = e, this.setTemplate({ + tag: "div", + attributes: { + class: ["ck-fake-panel", n.to("numberOfPanels", (t => t ? "" : "ck-hidden"))], + style: { + top: n.to("top", Hf), + left: n.to("left", Hf), + width: n.to("width", Hf), + height: n.to("height", Hf) + } + }, + children: this.content + }), this.on("change:numberOfPanels", ((t, e, n, o) => { + n > o ? this._addPanels(n - o) : this._removePanels(o - n), this.updatePosition() + })) + } + _addPanels(t) { + for (; t--;) { + const t = new cg; + t.setTemplate({ + tag: "div" + }), this.content.add(t), this.registerChild(t) + } + } + _removePanels(t) { + for (; t--;) { + const t = this.content.last; + this.content.remove(t), this.deregisterChild(t), t.destroy() + } + } + updatePosition() { + if (this.numberOfPanels) { + const { + top: t, + left: e + } = this._balloonPanelView, { + width: n, + height: o + } = new Mo(this._balloonPanelView.element); + Object.assign(this, { + top: t, + left: e, + width: n, + height: o + }) + } + } + } + var Uf = n(5868), + $f = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Uf.Z, $f); + Uf.Z.locals, $o("px"); + const Gf = $o("px"); + class Kf extends Vi { + constructor(t) { + super(t), this._resizeObserver = null, this._balloonConfig = vm(t.config.get("balloonToolbar")), this.toolbarView = this._createToolbarView(), this.focusTracker = new Di, t.ui.once("ready", (() => { + this.focusTracker.add(t.ui.getEditableElement()), this.focusTracker.add(this.toolbarView.element) + })), t.ui.addToolbar(this.toolbarView, { + beforeFocus: () => this.show(!0), + afterBlur: () => this.hide(), + isContextual: !0 + }), this._balloon = t.plugins.get(jf), this._fireSelectionChangeDebounced = Fa((() => this.fire("_selectionChangeDebounced")), 200), this.decorate("show") + } + static get pluginName() { + return "BalloonToolbar" + } + static get requires() { + return [jf] + } + init() { + const t = this.editor, + e = t.model.document.selection; + this.listenTo(this.focusTracker, "change:isFocused", ((t, e, n) => { + const o = this._balloon.visibleView === this.toolbarView; + !n && o ? this.hide() : n && this.show() + })), this.listenTo(e, "change:range", ((t, n) => { + (n.directChange || e.isCollapsed) && this.hide(), this._fireSelectionChangeDebounced() + })), this.listenTo(this, "_selectionChangeDebounced", (() => { + this.editor.editing.view.document.isFocused && this.show() + })), this._balloonConfig.shouldNotGroupWhenFull || this.listenTo(t, "ready", (() => { + const e = t.ui.view.editable.element; + this._resizeObserver = new Wo(e, (t => { + this.toolbarView.maxWidth = Gf(.9 * t.contentRect.width) + })) + })), this.listenTo(this.toolbarView, "groupedItemsUpdate", (() => { + this._updatePosition() + })) + } + afterInit() { + const t = this.editor.ui.componentFactory; + this.toolbarView.fillFromConfig(this._balloonConfig, t) + } + _createToolbarView() { + const t = this.editor.locale.t, + e = !this._balloonConfig.shouldNotGroupWhenFull, + n = new Sm(this.editor.locale, { + shouldGroupWhenFull: e, + isFloating: !0 + }); + return n.ariaLabel = t("Editor contextual toolbar"), n.render(), n + } + show(t = !1) { + const e = this.editor, + n = e.model.document.selection, + o = e.model.schema; + this._balloon.hasView(this.toolbarView) || n.isCollapsed && !t || function(t, e) { + if (1 === t.rangeCount) return !1; + return [...t.getRanges()].every((t => { + const n = t.getContainedElement(); + return n && e.isSelectable(n) + })) + }(n, o) || Array.from(this.toolbarView.items).every((t => void 0 !== t.isEnabled && !t.isEnabled)) || (this.listenTo(this.editor.ui, "update", (() => { + this._updatePosition() + })), this._balloon.add({ + view: this.toolbarView, + position: this._getBalloonPositionData(), + balloonClassName: "ck-toolbar-container" + })) + } + hide() { + this._balloon.hasView(this.toolbarView) && (this.stopListening(this.editor.ui, "update"), this._balloon.remove(this.toolbarView)) + } + _getBalloonPositionData() { + const t = this.editor.editing.view, + e = t.document, + n = e.selection, + o = e.selection.isBackward; + return { + target: () => { + const e = o ? n.getFirstRange() : n.getLastRange(), + i = Mo.getDomRangeRects(t.domConverter.viewRangeToDom(e)); + return o ? i[0] : (i.length > 1 && 0 === i[i.length - 1].width && i.pop(), i[i.length - 1]) + }, + positions: this._getBalloonPositions(o) + } + } + _updatePosition() { + this._balloon.updatePosition(this._getBalloonPositionData()) + } + destroy() { + super.destroy(), this.stopListening(), this._fireSelectionChangeDebounced.cancel(), this.toolbarView.destroy(), this.focusTracker.destroy(), this._resizeObserver && this._resizeObserver.destroy() + } + _getBalloonPositions(t) { + const e = i.isSafari && i.isiOS ? Jp({ + heightOffset: Math.max(Kp.arrowHeightOffset, Math.round(20 / Po.window.visualViewport.scale)) + }) : Kp.defaultPositions; + return t ? [e.northWestArrowSouth, e.northWestArrowSouthWest, e.northWestArrowSouthEast, e.northWestArrowSouthMiddleEast, e.northWestArrowSouthMiddleWest, e.southWestArrowNorth, e.southWestArrowNorthWest, e.southWestArrowNorthEast, e.southWestArrowNorthMiddleWest, e.southWestArrowNorthMiddleEast] : [e.southEastArrowNorth, e.southEastArrowNorthEast, e.southEastArrowNorthWest, e.southEastArrowNorthMiddleEast, e.southEastArrowNorthMiddleWest, e.northEastArrowSouth, e.northEastArrowSouthEast, e.northEastArrowSouthWest, e.northEastArrowSouthMiddleEast, e.northEastArrowSouthMiddleWest] + } + } + var Zf = n(9695), + Jf = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Zf.Z, Jf); + Zf.Z.locals; + const Yf = $o("px"); + class Qf extends Mg { + constructor(t) { + super(t); + const e = this.bindTemplate; + this.isVisible = !1, this.isToggleable = !0, this.set("top", 0), this.set("left", 0), this.extendTemplate({ + attributes: { + class: "ck-block-toolbar-button", + style: { + top: e.to("top", (t => Yf(t))), + left: e.to("left", (t => Yf(t))) + } + } + }) + } + } + const Xf = $o("px"), + { + pilcrow: tb + } = eg; + const eb = ''; + class nb { + constructor(t) { + if (this.crashes = [], this.state = "initializing", this._now = Date.now, this.crashes = [], this._crashNumberLimit = "number" == typeof t.crashNumberLimit ? t.crashNumberLimit : 3, this._minimumNonErrorTimePeriod = "number" == typeof t.minimumNonErrorTimePeriod ? t.minimumNonErrorTimePeriod : 5e3, this._boundErrorHandler = t => { + const e = "error" in t ? t.error : t.reason; + e instanceof Error && this._handleError(e, t) + }, this._listeners = {}, !this._restart) throw new Error("The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.") + } + destroy() { + this._stopErrorHandling(), this._listeners = {} + } + on(t, e) { + this._listeners[t] || (this._listeners[t] = []), this._listeners[t].push(e) + } + off(t, e) { + this._listeners[t] = this._listeners[t].filter((t => t !== e)) + } + _fire(t, ...e) { + const n = this._listeners[t] || []; + for (const t of n) t.apply(this, [null, ...e]) + } + _startErrorHandling() { + window.addEventListener("error", this._boundErrorHandler), window.addEventListener("unhandledrejection", this._boundErrorHandler) + } + _stopErrorHandling() { + window.removeEventListener("error", this._boundErrorHandler), window.removeEventListener("unhandledrejection", this._boundErrorHandler) + } + _handleError(t, e) { + if (this._shouldReactToError(t)) { + this.crashes.push({ + message: t.message, + stack: t.stack, + filename: e instanceof ErrorEvent ? e.filename : void 0, + lineno: e instanceof ErrorEvent ? e.lineno : void 0, + colno: e instanceof ErrorEvent ? e.colno : void 0, + date: this._now() + }); + const n = this._shouldRestart(); + this.state = "crashed", this._fire("stateChange"), this._fire("error", { + error: t, + causesRestart: n + }), n ? this._restart() : (this.state = "crashedPermanently", this._fire("stateChange")) + } + } + _shouldReactToError(t) { + return t.is && t.is("CKEditorError") && void 0 !== t.context && null !== t.context && "ready" === this.state && this._isErrorComingFromThisItem(t) + } + _shouldRestart() { + if (this.crashes.length <= this._crashNumberLimit) return !0; + return (this.crashes[this.crashes.length - 1].date - this.crashes[this.crashes.length - 1 - this._crashNumberLimit].date) / this._crashNumberLimit > this._minimumNonErrorTimePeriod + } + } + + function ob(t, e = new Set) { + const n = [t], + o = new Set; + let i = 0; + for (; n.length > i;) { + const t = n[i++]; + if (!o.has(t) && ib(t) && !e.has(t)) + if (o.add(t), Symbol.iterator in t) try { + for (const e of t) n.push(e) + } catch (t) {} else + for (const e in t) "defaultValue" !== e && n.push(t[e]) + } + return o + } + + function ib(t) { + const e = Object.prototype.toString.call(t), + n = typeof t; + return !("number" === n || "boolean" === n || "string" === n || "symbol" === n || "function" === n || "[object Date]" === e || "[object RegExp]" === e || "[object Module]" === e || null == t || t._watchdogExcluded || t instanceof EventTarget || t instanceof Event) + } + + function rb(t, e, n = new Set) { + if (t === e && ("object" == typeof(o = t) && null !== o)) return !0; + var o; + const i = ob(t, n), + r = ob(e, n); + for (const t of i) + if (r.has(t)) return !0; + return !1 + } + class sb extends nb { + constructor(t, e = {}) { + super(e), this._editor = null, this._throttledSave = of(this._save.bind(this), "number" == typeof e.saveInterval ? e.saveInterval : 5e3), t && (this._creator = (e, n) => t.create(e, n)), this._destructor = t => t.destroy() + } + get editor() { + return this._editor + } + get _item() { + return this._editor + } + setCreator(t) { + this._creator = t + } + setDestructor(t) { + this._destructor = t + } + _restart() { + return Promise.resolve().then((() => (this.state = "initializing", this._fire("stateChange"), this._destroy()))).catch((t => { + console.error("An error happened during the editor destroying.", t) + })).then((() => { + if ("string" == typeof this._elementOrData) return this.create(this._data, this._config, this._config.context); + { + const t = Object.assign({}, this._config, { + initialData: this._data + }); + return this.create(this._elementOrData, t, t.context) + } + })).then((() => { + this._fire("restart") + })) + } + create(t = this._elementOrData, e = this._config, n) { + return Promise.resolve().then((() => (super._startErrorHandling(), this._elementOrData = t, this._config = this._cloneEditorConfiguration(e) || {}, this._config.context = n, this._creator(t, this._config)))).then((t => { + this._editor = t, t.model.document.on("change:data", this._throttledSave), this._lastDocumentVersion = t.model.document.version, this._data = this._getData(), this.state = "ready", this._fire("stateChange") + })) + } + destroy() { + return Promise.resolve().then((() => (this.state = "destroyed", this._fire("stateChange"), super.destroy(), this._destroy()))) + } + _destroy() { + return Promise.resolve().then((() => { + this._stopErrorHandling(), this._throttledSave.flush(); + const t = this._editor; + return this._editor = null, t.model.document.off("change:data", this._throttledSave), this._destructor(t) + })) + } + _save() { + const t = this._editor.model.document.version; + try { + this._data = this._getData(), this._lastDocumentVersion = t + } catch (t) { + console.error(t, "An error happened during restoring editor data. Editor will be restored from the previously saved data.") + } + } + _setExcludedProperties(t) { + this._excludedProps = t + } + _getData() { + const t = {}; + for (const e of this._editor.model.document.getRootNames()) t[e] = this._editor.data.get({ + rootName: e + }); + return t + } + _isErrorComingFromThisItem(t) { + return rb(this._editor, t.context, this._excludedProps) + } + _cloneEditorConfiguration(t) { + return Ao(t, ((t, e) => Co(t) || "context" === e ? t : void 0)) + } + } + const ab = Symbol("MainQueueId"); + class lb { + constructor() { + this._onEmptyCallbacks = [], this._queues = new Map, this._activeActions = 0 + } + onEmpty(t) { + this._onEmptyCallbacks.push(t) + } + enqueue(t, e) { + const n = t === ab; + this._activeActions++, this._queues.get(t) || this._queues.set(t, Promise.resolve()); + const o = (n ? Promise.all(this._queues.values()) : Promise.all([this._queues.get(ab), this._queues.get(t)])).then(e), + i = o.catch((() => {})); + return this._queues.set(t, i), o.finally((() => { + this._activeActions--, this._queues.get(t) === i && 0 === this._activeActions && this._onEmptyCallbacks.forEach((t => t())) + })) + } + } + + function cb(t) { + return Array.isArray(t) ? t : [t] + } + class db extends yf { + constructor(t, e) { + super(t), this.view = e + } + get element() { + return this.view.editable.element + } + init() { + const t = this.editor, + e = this.view, + n = t.editing.view, + o = e.editable, + i = n.document.getRoot(); + o.name = i.rootName, e.render(); + const r = o.element; + this.setEditableElement(o.name, r), o.bind("isFocused").to(this.focusTracker), n.attachDomRoot(r), this._initPlaceholder(), this.fire("ready") + } + destroy() { + super.destroy(); + const t = this.view; + this.editor.editing.view.detachDomRoot(t.editable.name), t.destroy() + } + _initPlaceholder() { + const t = this.editor, + e = t.editing.view, + n = e.document.getRoot(), + o = (t.sourceElement, t.config.get("placeholder")); + if (o) { + const t = "string" == typeof o ? o : o[n.rootName]; + t && Zi({ + view: e, + element: n, + text: t, + isDirectHost: !1, + keepOnFocus: !0 + }) + } + } + } + class hb extends Sf { + constructor(t, e, n) { + super(t); + const o = t.t; + this.editable = new Bf(t, e, n, { + label: t => o("Rich Text Editor. Editing area: %0", t.name) + }) + } + render() { + super.render(), this.registerChild(this.editable) + } + } + class ub extends(Qu(Xu(Yu))) { + constructor(t, e = {}) { + if (!gb(t) && void 0 !== e.initialData) throw new b("editor-create-initial-data", null); + super(e), void 0 === this.config.get("initialData") && this.config.set("initialData", function(t) { + return gb(t) ? (e = t, e instanceof HTMLTextAreaElement ? e.value : e.innerHTML) : t; + var e + }(t)), gb(t) && (this.sourceElement = t, function(t, e) { + if (e.ckeditorInstance) throw new b("editor-source-element-already-used", t); + e.ckeditorInstance = t, t.once("destroy", (() => { + delete e.ckeditorInstance + })) + }(this, t)); + const n = this.config.get("plugins"); + n.push(Kf), this.config.set("plugins", n), this.config.define("balloonToolbar", this.config.get("toolbar")), this.model.document.createRoot(); + const o = new hb(this.locale, this.editing.view, this.sourceElement); + this.ui = new db(this, o), + function(t) { + if (!Mt(t.updateSourceElement)) throw new b("attachtoform-missing-elementapi-interface", t); + const e = t.sourceElement; + if (function(t) { + return !!t && "textarea" === t.tagName.toLowerCase() + }(e) && e.form) { + let n; + const o = e.form, + i = () => t.updateSourceElement(); + Mt(o.submit) && (n = o.submit, o.submit = () => { + i(), n.apply(o) + }), o.addEventListener("submit", i), t.on("destroy", (() => { + o.removeEventListener("submit", i), n && (o.submit = n) + })) + } + }(this) + } + destroy() { + const t = this.getData(); + return this.ui.destroy(), super.destroy().then((() => { + this.sourceElement && this.updateSourceElement(t) + })) + } + static create(t, e = {}) { + return new Promise((n => { + if (gb(t) && "TEXTAREA" === t.tagName) throw new b("editor-wrong-element", null); + const o = new this(t, e); + n(o.initPlugins().then((() => o.ui.init())).then((() => o.data.init(o.config.get("initialData")))).then((() => o.fire("ready"))).then((() => o))) + })) + } + } + + function gb(t) { + return Co(t) + } + ub.Context = Hi, ub.EditorWatchdog = sb, ub.ContextWatchdog = class extends nb { + constructor(t, e = {}) { + super(e), this._watchdogs = new Map, this._context = null, this._contextProps = new Set, this._actionQueues = new lb, this._watchdogConfig = e, this._creator = e => t.create(e), this._destructor = t => t.destroy(), this._actionQueues.onEmpty((() => { + "initializing" === this.state && (this.state = "ready", this._fire("stateChange")) + })) + } + setCreator(t) { + this._creator = t + } + setDestructor(t) { + this._destructor = t + } + get context() { + return this._context + } + create(t = {}) { + return this._actionQueues.enqueue(ab, (() => (this._contextConfig = t, this._create()))) + } + getItem(t) { + return this._getWatchdog(t)._item + } + getItemState(t) { + return this._getWatchdog(t).state + } + add(t) { + const e = cb(t); + return Promise.all(e.map((t => this._actionQueues.enqueue(t.id, (() => { + if ("destroyed" === this.state) throw new Error("Cannot add items to destroyed watchdog."); + if (!this._context) throw new Error("Context was not created yet. You should call the `ContextWatchdog#create()` method first."); + let e; + if (this._watchdogs.has(t.id)) throw new Error(`Item with the given id is already added: '${t.id}'.`); + if ("editor" === t.type) return e = new sb(null, this._watchdogConfig), e.setCreator(t.creator), e._setExcludedProperties(this._contextProps), t.destructor && e.setDestructor(t.destructor), this._watchdogs.set(t.id, e), e.on("error", ((n, { + error: o, + causesRestart: i + }) => { + this._fire("itemError", { + itemId: t.id, + error: o + }), i && this._actionQueues.enqueue(t.id, (() => new Promise((n => { + const o = () => { + e.off("restart", o), this._fire("itemRestart", { + itemId: t.id + }), n() + }; + e.on("restart", o) + })))) + })), e.create(t.sourceElementOrData, t.config, this._context); + throw new Error(`Not supported item type: '${t.type}'.`) + }))))) + } + remove(t) { + const e = cb(t); + return Promise.all(e.map((t => this._actionQueues.enqueue(t, (() => { + const e = this._getWatchdog(t); + return this._watchdogs.delete(t), e.destroy() + }))))) + } + destroy() { + return this._actionQueues.enqueue(ab, (() => (this.state = "destroyed", this._fire("stateChange"), super.destroy(), this._destroy()))) + } + _restart() { + return this._actionQueues.enqueue(ab, (() => (this.state = "initializing", this._fire("stateChange"), this._destroy().catch((t => { + console.error("An error happened during destroying the context or items.", t) + })).then((() => this._create())).then((() => this._fire("restart")))))) + } + _create() { + return Promise.resolve().then((() => (this._startErrorHandling(), this._creator(this._contextConfig)))).then((t => (this._context = t, this._contextProps = ob(this._context), Promise.all(Array.from(this._watchdogs.values()).map((t => (t._setExcludedProperties(this._contextProps), t.create(void 0, void 0, this._context)))))))) + } + _destroy() { + return Promise.resolve().then((() => { + this._stopErrorHandling(); + const t = this._context; + return this._context = null, this._contextProps = new Set, Promise.all(Array.from(this._watchdogs.values()).map((t => t.destroy()))).then((() => this._destructor(t))) + })) + } + _getWatchdog(t) { + const e = this._watchdogs.get(t); + if (!e) throw new Error(`Item with the given id was not registered: ${t}.`); + return e + } + _isErrorComingFromThisItem(t) { + for (const e of this._watchdogs.values()) + if (e._isErrorComingFromThisItem(t)) return !1; + return rb(this._context, t.context) + } + }; + var mb = n(6764), + pb = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(mb.Z, pb); + mb.Z.locals; + var fb = n(2822), + bb = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(fb.Z, bb); + fb.Z.locals; + class kb extends cg { + constructor(t) { + super(t); + const e = t.t; + this.set("matchCount", 0), this.set("highlightOffset", 0), this.set("isDirty", !1), this.set("_areCommandsEnabled", {}), this.set("_resultsCounterText", ""), this.set("_matchCase", !1), this.set("_wholeWordsOnly", !1), this.bind("_searchResultsFound").to(this, "matchCount", this, "isDirty", ((t, e) => t > 0 && !e)), this._findInputView = this._createInputField(e("Find in text…")), this._replaceInputView = this._createInputField(e("Replace with…")), this._findButtonView = this._createButton({ + label: e("Find"), + class: "ck-button-find ck-button-action", + withText: !0 + }), this._findPrevButtonView = this._createButton({ + label: e("Previous result"), + class: "ck-button-prev", + icon: Of, + keystroke: "Shift+F3", + tooltip: !0 + }), this._findNextButtonView = this._createButton({ + label: e("Next result"), + class: "ck-button-next", + icon: Of, + keystroke: "F3", + tooltip: !0 + }), this._optionsDropdown = this._createOptionsDropdown(), this._replaceButtonView = this._createButton({ + label: e("Replace"), + class: "ck-button-replace", + withText: !0 + }), this._replaceAllButtonView = this._createButton({ + label: e("Replace all"), + class: "ck-button-replaceall", + withText: !0 + }), this._findFieldsetView = this._createFindFieldset(), this._replaceFieldsetView = this._createReplaceFieldset(), this._focusTracker = new Di, this._keystrokes = new Si, this._focusables = new sg, this._focusCycler = new wm({ + focusables: this._focusables, + focusTracker: this._focusTracker, + keystrokeHandler: this._keystrokes, + actions: { + focusPrevious: "shift + tab", + focusNext: "tab" + } + }), this.setTemplate({ + tag: "form", + attributes: { + class: ["ck", "ck-find-and-replace-form"], + tabindex: "-1" + }, + children: [new Rf(t, { + label: e("Find and replace") + }), this._findFieldsetView, this._replaceFieldsetView] + }) + } + render() { + super.render(), ig({ + view: this + }), this._initFocusCycling(), this._initKeystrokeHandling() + } + destroy() { + super.destroy(), this._focusTracker.destroy(), this._keystrokes.destroy() + } + focus() { + this._focusCycler.focusFirst() + } + reset() { + this._findInputView.errorText = null, this.isDirty = !0 + } + get _textToFind() { + return this._findInputView.fieldView.element.value + } + get _textToReplace() { + return this._replaceInputView.fieldView.element.value + } + _createFindFieldset() { + const t = this.locale, + e = new cg(t); + return this._findInputView.fieldView.on("input", (() => { + this.isDirty = !0 + })), this._findButtonView.on("execute", this._onFindButtonExecute.bind(this)), this._findPrevButtonView.delegate("execute").to(this, "findPrevious"), this._findNextButtonView.delegate("execute").to(this, "findNext"), this._findPrevButtonView.bind("isEnabled").to(this, "_areCommandsEnabled", (({ + findPrevious: t + }) => t)), this._findNextButtonView.bind("isEnabled").to(this, "_areCommandsEnabled", (({ + findNext: t + }) => t)), this._injectFindResultsCounter(), e.setTemplate({ + tag: "fieldset", + attributes: { + class: ["ck", "ck-find-and-replace-form__find"] + }, + children: [this._findInputView, this._findButtonView, this._findPrevButtonView, this._findNextButtonView] + }), e + } + _onFindButtonExecute() { + if (this._textToFind) this.isDirty = !1, this.fire("findNext", { + searchText: this._textToFind, + matchCase: this._matchCase, + wholeWords: this._wholeWordsOnly + }); + else { + const t = this.t; + this._findInputView.errorText = t("Text to find must not be empty.") + } + } + _injectFindResultsCounter() { + const t = this.locale, + e = t.t, + n = this.bindTemplate, + o = new cg(this.locale); + this.bind("_resultsCounterText").to(this, "highlightOffset", this, "matchCount", ((t, n) => e("%0 of %1", [t, n]))), o.setTemplate({ + tag: "span", + attributes: { + class: ["ck", "ck-results-counter", n.if("isDirty", "ck-hidden")] + }, + children: [{ + text: n.to("_resultsCounterText") + }] + }); + const i = () => { + const e = this._findInputView.fieldView.element; + if (!e || !Jo(e)) return; + const n = new Mo(o.element).width, + i = "ltr" === t.uiLanguageDirection ? "paddingRight" : "paddingLeft"; + e.style[i] = n ? `calc( 2 * var(--ck-spacing-standard) + ${n}px )` : "" + }; + this.on("change:_resultsCounterText", i, { + priority: "low" + }), this.on("change:isDirty", i, { + priority: "low" + }), this._findInputView.template.children[0].children.push(o) + } + _createReplaceFieldset() { + const t = this.locale.t, + e = new cg(this.locale); + return this._replaceButtonView.bind("isEnabled").to(this, "_areCommandsEnabled", this, "_searchResultsFound", (({ + replace: t + }, e) => t && e)), this._replaceAllButtonView.bind("isEnabled").to(this, "_areCommandsEnabled", this, "_searchResultsFound", (({ + replaceAll: t + }, e) => t && e)), this._replaceInputView.bind("isEnabled").to(this, "_areCommandsEnabled", this, "_searchResultsFound", (({ + replace: t + }, e) => t && e)), this._replaceInputView.bind("infoText").to(this._replaceInputView, "isEnabled", this._replaceInputView, "isFocused", ((e, n) => e || !n ? "" : t("Tip: Find some text first in order to replace it."))), this._replaceButtonView.on("execute", (() => { + this.fire("replace", { + searchText: this._textToFind, + replaceText: this._textToReplace + }) + })), this._replaceAllButtonView.on("execute", (() => { + this.fire("replaceAll", { + searchText: this._textToFind, + replaceText: this._textToReplace + }), this.focus() + })), e.setTemplate({ + tag: "fieldset", + attributes: { + class: ["ck", "ck-find-and-replace-form__replace"] + }, + children: [this._replaceInputView, this._optionsDropdown, this._replaceButtonView, this._replaceAllButtonView] + }), e + } + _createOptionsDropdown() { + const t = this.locale.t, + e = Wm(this.locale); + e.class = "ck-options-dropdown", e.buttonView.set({ + withText: !1, + label: t("Show options"), + icon: eg.cog, + tooltip: !0 + }); + const n = new Vf({ + withText: !0, + label: t("Match case"), + _isMatchCaseSwitch: !0 + }), + o = new Vf({ + withText: !0, + label: t("Whole words only") + }); + return n.bind("isOn").to(this, "_matchCase"), o.bind("isOn").to(this, "_wholeWordsOnly"), e.on("execute", (t => { + t.source._isMatchCaseSwitch ? this._matchCase = !this._matchCase : this._wholeWordsOnly = !this._wholeWordsOnly, this.isDirty = !0 + })), Gm(e, new xi([{ + type: "switchbutton", + model: n + }, { + type: "switchbutton", + model: o + }])), e + } + _initFocusCycling() { + [this._findInputView, this._findButtonView, this._findPrevButtonView, this._findNextButtonView, this._replaceInputView, this._optionsDropdown, this._replaceButtonView, this._replaceAllButtonView].forEach((t => { + this._focusables.add(t), this._focusTracker.add(t.element) + })) + } + _initKeystrokeHandling() { + const t = t => t.stopPropagation(), + e = t => { + t.stopPropagation(), t.preventDefault() + }; + this._keystrokes.listenTo(this.element), this._keystrokes.set("f3", (t => { + e(t), this._findNextButtonView.fire("execute") + })), this._keystrokes.set("shift+f3", (t => { + e(t), this._findPrevButtonView.fire("execute") + })), this._keystrokes.set("enter", (t => { + const n = t.target; + n === this._findInputView.fieldView.element ? (this._areCommandsEnabled.findNext ? this._findNextButtonView.fire("execute") : this._findButtonView.fire("execute"), e(t)) : n !== this._replaceInputView.fieldView.element || this.isDirty || (this._replaceButtonView.fire("execute"), e(t)) + })), this._keystrokes.set("shift+enter", (t => { + t.target === this._findInputView.fieldView.element && (this._areCommandsEnabled.findPrevious ? this._findPrevButtonView.fire("execute") : this._findButtonView.fire("execute"), e(t)) + })), this._keystrokes.set("arrowright", t), this._keystrokes.set("arrowleft", t), this._keystrokes.set("arrowup", t), this._keystrokes.set("arrowdown", t) + } + _createButton(t) { + const e = new Mg(this.locale); + return e.set(t), e + } + _createInputField(t) { + const e = new sm(this.locale, Jm); + return e.label = t, e + } + } + class wb extends Vi { + constructor(t) { + super(t), this.formView = null + } + static get pluginName() { + return "FindAndReplaceUI" + } + init() { + const t = this.editor; + t.ui.componentFactory.add("findAndReplace", (e => { + const n = Wm(e), + o = t.commands.get("find"); + return n.bind("isEnabled").to(o), n.once("change:isOpen", (() => { + this.formView = new(og(kb))(t.locale), n.panelView.children.add(this.formView), this._setupFormView(this.formView) + })), n.on("change:isOpen", ((t, e, n) => { + n ? (this.formView.disableCssTransitions(), this.formView.reset(), this.formView._findInputView.fieldView.select(), this.formView.enableCssTransitions()) : this.fire("searchReseted") + }), { + priority: "low" + }), this._setupDropdownButton(n), n + })) + } + _setupDropdownButton(t) { + const e = this.editor.locale.t; + t.buttonView.set({ + icon: '', + label: e("Find and replace"), + tooltip: !0 + }) + } + _setupFormView(t) { + const e = this.editor.commands, + n = this.editor.plugins.get("FindAndReplaceEditing").state, + o = { + before: -1, + same: 0, + after: 1, + different: 1 + }; + t.bind("highlightOffset").to(n, "highlightedResult", (t => t ? Array.from(n.results).sort(((t, e) => o[t.marker.getStart().compareWith(e.marker.getStart())])).indexOf(t) + 1 : 0)), t.listenTo(n.results, "change", (() => { + t.matchCount = n.results.length + })); + const i = e.get("findNext"), + r = e.get("findPrevious"), + s = e.get("replace"), + a = e.get("replaceAll"); + t.bind("_areCommandsEnabled").to(i, "isEnabled", r, "isEnabled", s, "isEnabled", a, "isEnabled", ((t, e, n, o) => ({ + findNext: t, + findPrevious: e, + replace: n, + replaceAll: o + }))), t.delegate("findNext", "findPrevious", "replace", "replaceAll").to(this), t.on("change:isDirty", ((t, e, n) => { + n && this.fire("searchReseted") + })) + } + } + class Ab extends Fi { + constructor(t, e) { + super(t), this.isEnabled = !0, this.affectsData = !1, this._state = e + } + execute(t, { + matchCase: e, + wholeWords: n + } = {}) { + const { + editor: o + } = this, { + model: i + } = o, r = o.plugins.get("FindAndReplaceUtils"); + let s; + "string" == typeof t ? (s = r.findByTextCallback(t, { + matchCase: e, + wholeWords: n + }), this._state.searchText = t) : s = t; + const a = i.document.getRootNames().reduce(((t, e) => r.updateFindResultFromRange(i.createRangeIn(i.document.getRoot(e)), i, s, t)), null); + return this._state.clear(i), this._state.results.addMany(a), this._state.highlightedResult = a.get(0), "string" == typeof t && (this._state.searchText = t), this._state.matchCase = !!e, this._state.matchWholeWords = !!n, { + results: a, + findCallback: s + } + } + } + class Cb extends Fi { + constructor(t, e) { + super(t), this.isEnabled = !0, this._state = e, this._isEnabledBasedOnSelection = !1 + } + _replace(t, e) { + const { + model: n + } = this.editor, o = e.marker.getRange(); + n.canEditAt(o) && n.change((i => { + if ("$graveyard" === o.root.rootName) return void this._state.results.remove(e); + let r = {}; + for (const t of o.getItems()) + if (t.is("$text") || t.is("$textProxy")) { + r = t.getAttributes(); + break + } n.insertContent(i.createText(t, r), o), this._state.results.has(e) && this._state.results.remove(e) + })) + } + } + class _b extends Cb { + execute(t, e) { + this._replace(t, e) + } + } + class vb extends Cb { + execute(t, e) { + const { + editor: n + } = this, { + model: o + } = n, i = n.plugins.get("FindAndReplaceUtils"), r = e instanceof xi ? e : o.document.getRootNames().reduce(((t, n) => i.updateFindResultFromRange(o.createRangeIn(o.document.getRoot(n)), o, i.findByTextCallback(e, this._state), t)), null); + r.length && [...r].forEach((e => { + this._replace(t, e) + })) + } + } + class yb extends Fi { + constructor(t, e) { + super(t), this.affectsData = !1, this._state = e, this.isEnabled = !1, this.listenTo(this._state.results, "change", (() => { + this.isEnabled = this._state.results.length > 1 + })) + } + refresh() { + this.isEnabled = this._state.results.length > 1 + } + execute() { + const t = this._state.results, + e = t.getIndex(this._state.highlightedResult), + n = e + 1 >= t.length ? 0 : e + 1; + this._state.highlightedResult = this._state.results.get(n) + } + } + class xb extends yb { + execute() { + const t = this._state.results.getIndex(this._state.highlightedResult), + e = t - 1 < 0 ? this._state.results.length - 1 : t - 1; + this._state.highlightedResult = this._state.results.get(e) + } + } + class Eb extends(q()) { + constructor(t) { + super(), this.set("results", new xi), this.set("highlightedResult", null), this.set("searchText", ""), this.set("replaceText", ""), this.set("matchCase", !1), this.set("matchWholeWords", !1), this.results.on("change", ((e, { + removed: n, + index: o + }) => { + if (Array.from(n).length) { + let e = !1; + if (t.change((o => { + for (const i of n) this.highlightedResult === i && (e = !0), t.markers.has(i.marker.name) && o.removeMarker(i.marker) + })), e) { + const t = o >= this.results.length ? 0 : o; + this.highlightedResult = this.results.get(t) + } + } + })) + } + clear(t) { + this.searchText = "", t.change((e => { + if (this.highlightedResult) { + const n = this.highlightedResult.marker.name.split(":")[1], + o = t.markers.get(`findResultHighlighted:${n}`); + o && e.removeMarker(o) + } [...this.results].forEach((({ + marker: t + }) => { + e.removeMarker(t) + })) + })), this.results.clear() + } + } + var Db = /[\\^$.*+?()[\]{}|]/g, + Sb = RegExp(Db.source); + const Tb = function(t) { + return (t = vr(t)) && Sb.test(t) ? t.replace(Db, "\\$&") : t + }; + class Bb extends Vi { + static get pluginName() { + return "FindAndReplaceUtils" + } + updateFindResultFromRange(t, e, n, o) { + const i = o || new xi; + return e.change((o => { + [...t].forEach((({ + type: t, + item: r + }) => { + if ("elementStart" === t && e.schema.checkChild(r, "$text")) { + const t = n({ + item: r, + text: this.rangeToText(e.createRangeIn(r)) + }); + if (!t) return; + t.forEach((t => { + const e = `findResult:${g()}`, + n = o.addMarker(e, { + usingOperation: !1, + affectsData: !1, + range: o.createRange(o.createPositionAt(r, t.start), o.createPositionAt(r, t.end)) + }), + s = function(t, e) { + const n = t.find((({ + marker: t + }) => e.getStart().isBefore(t.getStart()))); + return n ? t.getIndex(n) : t.length + }(i, n); + i.add({ + id: e, + label: t.label, + marker: n + }, s) + })) + } + })) + })), i + } + rangeToText(t) { + return Array.from(t.getItems()).reduce(((t, e) => e.is("$text") || e.is("$textProxy") ? t + e.data : `${t}\n`), "") + } + findByTextCallback(t, e) { + let n = "gu"; + e.matchCase || (n += "i"); + let o = `(${Tb(t)})`; + if (e.wholeWords) { + const e = "[^a-zA-ZÀ-ɏḀ-ỿ]"; + new RegExp("^" + e).test(t) || (o = `(^|${e}|_)${o}`), new RegExp(e + "$").test(t) || (o = `${o}(?=_|${e}|$)`) + } + const i = new RegExp(o, n); + return function({ + text: t + }) { + return [...t.matchAll(i)].map(Ib) + } + } + } + + function Ib(t) { + const e = t.length - 1; + let n = t.index; + return 3 === t.length && (n += t[1].length), { + label: t[e], + start: n, + end: n + t[e].length + } + } + var Pb = n(9932), + Rb = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Pb.Z, Rb); + Pb.Z.locals; + class zb extends Vi { + static get requires() { + return [Bb] + } + static get pluginName() { + return "FindAndReplaceEditing" + } + init() { + this._activeResults = null, this.state = new Eb(this.editor.model), this._defineConverters(), this._defineCommands(), this.listenTo(this.state, "change:highlightedResult", ((t, e, n, o) => { + const { + model: i + } = this.editor; + i.change((t => { + if (o) { + const e = o.marker.name.split(":")[1], + n = i.markers.get(`findResultHighlighted:${e}`); + n && t.removeMarker(n) + } + if (n) { + const e = n.marker.name.split(":")[1]; + t.addMarker(`findResultHighlighted:${e}`, { + usingOperation: !1, + affectsData: !1, + range: n.marker.getRange() + }) + } + })) + })); + const t = Fa(((t, e, n) => { + if (n) { + const t = this.editor.editing.view.domConverter, + e = this.editor.editing.mapper.toViewRange(n.marker.getRange()); + ni({ + target: t.viewRangeToDom(e), + viewportOffset: 40 + }) + } + }).bind(this), 32); + this.listenTo(this.state, "change:highlightedResult", t, { + priority: "low" + }), this.listenTo(this.editor, "destroy", t.cancel) + } + find(t) { + const { + editor: e + } = this, { + model: n + } = e, { + findCallback: o, + results: i + } = e.execute("find", t); + return this._activeResults = i, this.listenTo(n.document, "change:data", (() => function(t, e, n) { + const o = new Set, + i = new Set, + r = e.model; + r.document.differ.getChanges().forEach((t => { + "$text" === t.name || r.schema.isInline(t.position.nodeAfter) ? (o.add(t.position.parent), [...r.markers.getMarkersAtPosition(t.position)].forEach((t => { + i.add(t.name) + }))) : "insert" === t.type && o.add(t.position.nodeAfter) + })), r.document.differ.getChangedMarkers().forEach((({ + name: t, + data: { + newRange: e + } + }) => { + e && "$graveyard" === e.start.root.rootName && i.add(t) + })), o.forEach((t => { + [...r.markers.getMarkersIntersectingRange(r.createRangeIn(t))].forEach((t => i.add(t.name))) + })), r.change((e => { + i.forEach((n => { + t.has(n) && t.remove(n), e.removeMarker(n) + })) + })), o.forEach((o => { + e.plugins.get("FindAndReplaceUtils").updateFindResultFromRange(r.createRangeOn(o), r, n, t) + })) + }(this._activeResults, e, o))), this._activeResults + } + stop() { + this._activeResults && (this.stopListening(this.editor.model.document), this.state.clear(this.editor.model), this._activeResults = null) + } + _defineCommands() { + this.editor.commands.add("find", new Ab(this.editor, this.state)), this.editor.commands.add("findNext", new yb(this.editor, this.state)), this.editor.commands.add("findPrevious", new xb(this.editor, this.state)), this.editor.commands.add("replace", new _b(this.editor, this.state)), this.editor.commands.add("replaceAll", new vb(this.editor, this.state)) + } + _defineConverters() { + const { + editor: t + } = this; + t.conversion.for("editingDowncast").markerToHighlight({ + model: "findResult", + view: ({ + markerName: t + }) => { + const [, e] = t.split(":"); + return { + name: "span", + classes: ["ck-find-result"], + attributes: { + "data-find-result": e + } + } + } + }), t.conversion.for("editingDowncast").markerToHighlight({ + model: "findResultHighlighted", + view: ({ + markerName: t + }) => { + const [, e] = t.split(":"); + return { + name: "span", + classes: ["ck-find-result_selected"], + attributes: { + "data-find-result": e + } + } + } + }) + } + } + class Vb extends(q()) { + constructor() { + super(); + const t = new window.FileReader; + this._reader = t, this._data = void 0, this.set("loaded", 0), t.onprogress = t => { + this.loaded = t.loaded + } + } + get error() { + return this._reader.error + } + get data() { + return this._data + } + read(t) { + const e = this._reader; + return this.total = t.size, new Promise(((n, o) => { + e.onload = () => { + const t = e.result; + this._data = t, n(t) + }, e.onerror = () => { + o("error") + }, e.onabort = () => { + o("aborted") + }, this._reader.readAsDataURL(t) + })) + } + abort() { + this._reader.abort() + } + } + class Ob extends Vi { + constructor() { + super(...arguments), this.loaders = new xi, this._loadersMap = new Map, this._pendingAction = null + } + static get pluginName() { + return "FileRepository" + } + static get requires() { + return [tg] + } + init() { + this.loaders.on("change", (() => this._updatePendingAction())), this.set("uploaded", 0), this.set("uploadTotal", null), this.bind("uploadedPercent").to(this, "uploaded", this, "uploadTotal", ((t, e) => e ? t / e * 100 : 0)) + } + getLoader(t) { + return this._loadersMap.get(t) || null + } + createLoader(t) { + if (!this.createUploadAdapter) return k("filerepository-no-upload-adapter"), null; + const e = new Fb(Promise.resolve(t), this.createUploadAdapter); + return this.loaders.add(e), this._loadersMap.set(t, e), t instanceof Promise && e.file.then((t => { + this._loadersMap.set(t, e) + })).catch((() => {})), e.on("change:uploaded", (() => { + let t = 0; + for (const e of this.loaders) t += e.uploaded; + this.uploaded = t + })), e.on("change:uploadTotal", (() => { + let t = 0; + for (const e of this.loaders) e.uploadTotal && (t += e.uploadTotal); + this.uploadTotal = t + })), e + } + destroyLoader(t) { + const e = t instanceof Fb ? t : this.getLoader(t); + e._destroy(), this.loaders.remove(e), this._loadersMap.forEach(((t, n) => { + t === e && this._loadersMap.delete(n) + })) + } + _updatePendingAction() { + const t = this.editor.plugins.get(tg); + if (this.loaders.length) { + if (!this._pendingAction) { + const e = this.editor.t, + n = t => `${e("Upload in progress")} ${parseInt(t)}%.`; + this._pendingAction = t.add(n(this.uploadedPercent)), this._pendingAction.bind("message").to(this, "uploadedPercent", n) + } + } else t.remove(this._pendingAction), this._pendingAction = null + } + } + class Fb extends(q()) { + constructor(t, e) { + super(), this.id = g(), this._filePromiseWrapper = this._createFilePromiseWrapper(t), this._adapter = e(this), this._reader = new Vb, this.set("status", "idle"), this.set("uploaded", 0), this.set("uploadTotal", null), this.bind("uploadedPercent").to(this, "uploaded", this, "uploadTotal", ((t, e) => e ? t / e * 100 : 0)), this.set("uploadResponse", null) + } + get file() { + return this._filePromiseWrapper ? this._filePromiseWrapper.promise.then((t => this._filePromiseWrapper ? t : null)) : Promise.resolve(null) + } + get data() { + return this._reader.data + } + read() { + if ("idle" != this.status) throw new b("filerepository-read-wrong-status", this); + return this.status = "reading", this.file.then((t => this._reader.read(t))).then((t => { + if ("reading" !== this.status) throw this.status; + return this.status = "idle", t + })).catch((t => { + if ("aborted" === t) throw this.status = "aborted", "aborted"; + throw this.status = "error", this._reader.error ? this._reader.error : t + })) + } + upload() { + if ("idle" != this.status) throw new b("filerepository-upload-wrong-status", this); + return this.status = "uploading", this.file.then((() => this._adapter.upload())).then((t => (this.uploadResponse = t, this.status = "idle", t))).catch((t => { + if ("aborted" === this.status) throw "aborted"; + throw this.status = "error", t + })) + } + abort() { + const t = this.status; + this.status = "aborted", this._filePromiseWrapper.isFulfilled ? "reading" == t ? this._reader.abort() : "uploading" == t && this._adapter.abort && this._adapter.abort() : (this._filePromiseWrapper.promise.catch((() => {})), this._filePromiseWrapper.rejecter("aborted")), this._destroy() + } + _destroy() { + this._filePromiseWrapper = void 0, this._reader = void 0, this._adapter = void 0, this.uploadResponse = void 0 + } + _createFilePromiseWrapper(t) { + const e = {}; + return e.promise = new Promise(((n, o) => { + e.rejecter = o, e.isFulfilled = !1, t.then((t => { + e.isFulfilled = !0, n(t) + })).catch((t => { + e.isFulfilled = !0, o(t) + })) + })), e + } + } + class Mb extends cg { + constructor(t) { + super(t), this.buttonView = new Mg(t), this._fileInputView = new Nb(t), this._fileInputView.bind("acceptedType").to(this), this._fileInputView.bind("allowMultipleFiles").to(this), this._fileInputView.delegate("done").to(this), this.setTemplate({ + tag: "span", + attributes: { + class: "ck-file-dialog-button" + }, + children: [this.buttonView, this._fileInputView] + }), this.buttonView.on("execute", (() => { + this._fileInputView.open() + })) + } + focus() { + this.buttonView.focus() + } + } + class Nb extends cg { + constructor(t) { + super(t), this.set("acceptedType", void 0), this.set("allowMultipleFiles", !1); + const e = this.bindTemplate; + this.setTemplate({ + tag: "input", + attributes: { + class: ["ck-hidden"], + type: "file", + tabindex: "-1", + accept: e.to("acceptedType"), + multiple: e.to("allowMultipleFiles") + }, + on: { + change: e.to((() => { + this.element && this.element.files && this.element.files.length && this.fire("done", this.element.files), this.element.value = "" + })) + } + }) + } + open() { + this.element.click() + } + } + Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable; + const Lb = "ckCsrfToken", + Hb = "abcdefghijklmnopqrstuvwxyz0123456789"; + + function jb() { + let t = function(t) { + t = t.toLowerCase(); + const e = document.cookie.split(";"); + for (const n of e) { + const e = n.split("="); + if (decodeURIComponent(e[0].trim().toLowerCase()) === t) return decodeURIComponent(e[1]) + } + return null + }(Lb); + var e, n; + return t && 40 == t.length || (t = function(t) { + let e = ""; + const n = new Uint8Array(t); + window.crypto.getRandomValues(n); + for (let t = 0; t < n.length; t++) { + const o = Hb.charAt(n[t] % Hb.length); + e += Math.random() > .5 ? o.toUpperCase() : o + } + return e + }(40), e = Lb, n = t, document.cookie = encodeURIComponent(e) + "=" + encodeURIComponent(n) + ";path=/"), t + } + class qb { + constructor(t, e, n) { + this.loader = t, this.url = e, this.t = n + } + upload() { + return this.loader.file.then((t => new Promise(((e, n) => { + this._initRequest(), this._initListeners(e, n, t), this._sendRequest(t) + })))) + } + abort() { + this.xhr && this.xhr.abort() + } + _initRequest() { + const t = this.xhr = new XMLHttpRequest; + t.open("POST", this.url, !0), t.responseType = "json" + } + _initListeners(t, e, n) { + const o = this.xhr, + i = this.loader, + r = (0, this.t)("Cannot upload file:") + ` ${n.name}.`; + o.addEventListener("error", (() => e(r))), o.addEventListener("abort", (() => e())), o.addEventListener("load", (() => { + const n = o.response; + if (!n || !n.uploaded) return e(n && n.error && n.error.message ? n.error.message : r); + t({ + default: n.url + }) + })), o.upload && o.upload.addEventListener("progress", (t => { + t.lengthComputable && (i.uploadTotal = t.total, i.uploaded = t.loaded) + })) + } + _sendRequest(t) { + const e = new FormData; + e.append("upload", t), e.append("ckCsrfToken", jb()), this.xhr.send(e) + } + } + class Wb { + constructor(t, e = 20) { + this._batch = null, this.model = t, this._size = 0, this.limit = e, this._isLocked = !1, this._changeCallback = (t, e) => { + e.isLocal && e.isUndoable && e !== this._batch && this._reset(!0) + }, this._selectionChangeCallback = () => { + this._reset() + }, this.model.document.on("change", this._changeCallback), this.model.document.selection.on("change:range", this._selectionChangeCallback), this.model.document.selection.on("change:attribute", this._selectionChangeCallback) + } + get batch() { + return this._batch || (this._batch = this.model.createBatch({ + isTyping: !0 + })), this._batch + } + get size() { + return this._size + } + input(t) { + this._size += t, this._size >= this.limit && this._reset(!0) + } + get isLocked() { + return this._isLocked + } + lock() { + this._isLocked = !0 + } + unlock() { + this._isLocked = !1 + } + destroy() { + this.model.document.off("change", this._changeCallback), this.model.document.selection.off("change:range", this._selectionChangeCallback), this.model.document.selection.off("change:attribute", this._selectionChangeCallback) + } + _reset(t = !1) { + this.isLocked && !t || (this._batch = null, this._size = 0) + } + } + class Ub extends Fi { + constructor(t, e) { + super(t), this._buffer = new Wb(t.model, e), this._isEnabledBasedOnSelection = !1 + } + get buffer() { + return this._buffer + } + destroy() { + super.destroy(), this._buffer.destroy() + } + execute(t = {}) { + const e = this.editor.model, + n = e.document, + o = t.text || "", + i = o.length; + let r = n.selection; + if (t.selection ? r = t.selection : t.range && (r = e.createSelection(t.range)), !e.canEditAt(r)) return; + const s = t.resultRange; + e.enqueueChange(this._buffer.batch, (t => { + this._buffer.lock(), e.deleteContent(r), o && e.insertContent(t.createText(o, n.selection.getAttributes()), r), s ? t.setSelection(s) : r.is("documentSelection") || t.setSelection(r), this._buffer.unlock(), this._buffer.input(i) + })) + } + } + const $b = ["insertText", "insertReplacementText"]; + class Gb extends Aa { + constructor(t) { + super(t), i.isAndroid && $b.push("insertCompositionText"); + const e = t.document; + e.on("beforeinput", ((n, o) => { + if (!this.isEnabled) return; + const { + data: i, + targetRanges: r, + inputType: s, + domEvent: a + } = o; + if (!$b.includes(s)) return; + const l = new h(e, "insertText"); + e.fire(l, new _a(t, a, { + text: i, + selection: t.createSelection(r) + })), l.stop.called && n.stop() + })), e.on("compositionend", ((n, { + data: o, + domEvent: r + }) => { + this.isEnabled && !i.isAndroid && o && e.fire("insertText", new _a(t, r, { + text: o, + selection: e.selection + })) + }), { + priority: "lowest" + }) + } + observe() {} + stopObserving() {} + } + class Kb extends Vi { + static get pluginName() { + return "Input" + } + init() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = e.document.selection; + n.addObserver(Gb); + const r = new Ub(t, t.config.get("typing.undoStep") || 20); + t.commands.add("insertText", r), t.commands.add("input", r), this.listenTo(n.document, "insertText", ((o, r) => { + n.document.isComposing || r.preventDefault(); + const { + text: s, + selection: a, + resultRange: l + } = r, c = Array.from(a.getRanges()).map((e => t.editing.mapper.toModelRange(e))); + let d = s; + if (i.isAndroid) { + const t = Array.from(c[0].getItems()).reduce(((t, e) => t + (e.is("$textProxy") ? e.data : "")), ""); + t && (t.length <= d.length ? d.startsWith(t) && (d = d.substring(t.length), c[0].start = c[0].start.getShiftedBy(t.length)) : t.startsWith(d) && (c[0].start = c[0].start.getShiftedBy(d.length), d = "")) + } + const h = { + text: d, + selection: e.createSelection(c) + }; + l && (h.resultRange = t.editing.mapper.toModelRange(l)), t.execute("insertText", h) + })), i.isAndroid ? this.listenTo(n.document, "keydown", ((t, i) => { + !o.isCollapsed && 229 == i.keyCode && n.document.isComposing && Zb(e, r) + })) : this.listenTo(n.document, "compositionstart", (() => { + o.isCollapsed || Zb(e, r) + })) + } + } + + function Zb(t, e) { + if (!e.isEnabled) return; + const n = e.buffer; + n.lock(), t.enqueueChange(n.batch, (() => { + t.deleteContent(t.document.selection) + })), n.unlock() + } + class Jb extends Fi { + constructor(t, e) { + super(t), this.direction = e, this._buffer = new Wb(t.model, t.config.get("typing.undoStep")), this._isEnabledBasedOnSelection = !1 + } + get buffer() { + return this._buffer + } + execute(t = {}) { + const e = this.editor.model, + n = e.document; + e.enqueueChange(this._buffer.batch, (o => { + this._buffer.lock(); + const i = o.createSelection(t.selection || n.selection); + if (!e.canEditAt(i)) return; + const r = t.sequence || 1, + s = i.isCollapsed; + if (i.isCollapsed && e.modifySelection(i, { + direction: this.direction, + unit: t.unit, + treatEmojiAsSingleUnit: !0 + }), this._shouldEntireContentBeReplacedWithParagraph(r)) return void this._replaceEntireContentWithParagraph(o); + if (this._shouldReplaceFirstBlockWithParagraph(i, r)) return void this.editor.execute("paragraph", { + selection: i + }); + if (i.isCollapsed) return; + let a = 0; + i.getFirstRange().getMinimalFlatRanges().forEach((t => { + a += J(t.getWalker({ + singleCharacters: !0, + ignoreElementEnd: !0, + shallow: !0 + })) + })), e.deleteContent(i, { + doNotResetEntireContent: s, + direction: this.direction + }), this._buffer.input(a), o.setSelection(i), this._buffer.unlock() + })) + } + _shouldEntireContentBeReplacedWithParagraph(t) { + if (t > 1) return !1; + const e = this.editor.model, + n = e.document.selection, + o = e.schema.getLimitElement(n); + if (!(n.isCollapsed && n.containsEntireContent(o))) return !1; + if (!e.schema.checkChild(o, "paragraph")) return !1; + const i = o.getChild(0); + return !i || !i.is("element", "paragraph") + } + _replaceEntireContentWithParagraph(t) { + const e = this.editor.model, + n = e.document.selection, + o = e.schema.getLimitElement(n), + i = t.createElement("paragraph"); + t.remove(t.createRangeIn(o)), t.insert(i, o), t.setSelection(i, 0) + } + _shouldReplaceFirstBlockWithParagraph(t, e) { + const n = this.editor.model; + if (e > 1 || "backward" != this.direction) return !1; + if (!t.isCollapsed) return !1; + const o = t.getFirstPosition(), + i = n.schema.getLimitElement(o), + r = i.getChild(0); + return o.parent == r && (!!t.containsEntireContent(r) && (!!n.schema.checkChild(i, "paragraph") && "paragraph" != r.name)) + } + } + const Yb = "word", + Qb = "selection", + Xb = "backward", + tk = "forward", + ek = { + deleteContent: { + unit: Qb, + direction: Xb + }, + deleteContentBackward: { + unit: "codePoint", + direction: Xb + }, + deleteWordBackward: { + unit: Yb, + direction: Xb + }, + deleteHardLineBackward: { + unit: Qb, + direction: Xb + }, + deleteSoftLineBackward: { + unit: Qb, + direction: Xb + }, + deleteContentForward: { + unit: "character", + direction: tk + }, + deleteWordForward: { + unit: Yb, + direction: tk + }, + deleteHardLineForward: { + unit: Qb, + direction: tk + }, + deleteSoftLineForward: { + unit: Qb, + direction: tk + } + }; + class nk extends Aa { + constructor(t) { + super(t); + const e = t.document; + let n = 0; + e.on("keydown", (() => { + n++ + })), e.on("keyup", (() => { + n = 0 + })), e.on("beforeinput", ((o, r) => { + if (!this.isEnabled) return; + const { + targetRanges: s, + domEvent: a, + inputType: l + } = r, c = ek[l]; + if (!c) return; + const d = { + direction: c.direction, + unit: c.unit, + sequence: n + }; + d.unit == Qb && (d.selectionToRemove = t.createSelection(s[0])), "deleteContentBackward" === l && (i.isAndroid && (d.sequence = 1), function(t) { + if (1 != t.length || t[0].isCollapsed) return !1; + const e = t[0].getWalker({ + direction: "backward", + singleCharacters: !0, + ignoreElementEnd: !0 + }); + let n = 0; + for (const { + nextPosition: t + } + of e) { + if (t.parent.is("$text")) { + const e = t.parent.data, + o = t.offset; + if (Ii(e, o) || Pi(e, o) || zi(e, o)) continue; + n++ + } else n++; + if (n > 1) return !0 + } + return !1 + }(s) && (d.unit = Qb, d.selectionToRemove = t.createSelection(s))); + const h = new ks(e, "delete", s[0]); + e.fire(h, new _a(t, a, d)), h.stop.called && o.stop() + })), i.isBlink && function(t) { + const e = t.view, + n = e.document; + let o = null, + i = !1; + + function r(t) { + return t == mi.backspace || t == mi.delete + } + + function s(t) { + return t == mi.backspace ? Xb : tk + } + n.on("keydown", ((t, { + keyCode: e + }) => { + o = e, i = !1 + })), n.on("keyup", ((a, { + keyCode: l, + domEvent: c + }) => { + const d = n.selection, + h = t.isEnabled && l == o && r(l) && !d.isCollapsed && !i; + if (o = null, h) { + const t = d.getFirstRange(), + o = new ks(n, "delete", t), + i = { + unit: Qb, + direction: s(l), + selectionToRemove: d + }; + n.fire(o, new _a(e, c, i)) + } + })), n.on("beforeinput", ((t, { + inputType: e + }) => { + const n = ek[e]; + r(o) && n && n.direction == s(o) && (i = !0) + }), { + priority: "high" + }), n.on("beforeinput", ((t, { + inputType: e, + data: n + }) => { + o == mi.delete && "insertText" == e && "" == n && t.stop() + }), { + priority: "high" + }) + }(this) + } + observe() {} + stopObserving() {} + } + class ok extends Vi { + static get pluginName() { + return "Delete" + } + init() { + const t = this.editor, + e = t.editing.view, + n = e.document, + o = t.model.document; + e.addObserver(nk), this._undoOnBackspace = !1; + const i = new Jb(t, "forward"); + t.commands.add("deleteForward", i), t.commands.add("forwardDelete", i), t.commands.add("delete", new Jb(t, "backward")), this.listenTo(n, "delete", ((o, i) => { + n.isComposing || i.preventDefault(); + const { + direction: r, + sequence: s, + selectionToRemove: a, + unit: l + } = i, c = "forward" === r ? "deleteForward" : "delete", d = { + sequence: s + }; + if ("selection" == l) { + const e = Array.from(a.getRanges()).map((e => t.editing.mapper.toModelRange(e))); + d.selection = t.model.createSelection(e) + } else d.unit = l; + t.execute(c, d), e.scrollToTheSelection() + }), { + priority: "low" + }), this.editor.plugins.has("UndoEditing") && (this.listenTo(n, "delete", ((e, n) => { + this._undoOnBackspace && "backward" == n.direction && 1 == n.sequence && "codePoint" == n.unit && (this._undoOnBackspace = !1, t.execute("undo"), n.preventDefault(), e.stop()) + }), { + context: "$capture" + }), this.listenTo(o, "change", (() => { + this._undoOnBackspace = !1 + }))) + } + requestUndoOnBackspace() { + this.editor.plugins.has("UndoEditing") && (this._undoOnBackspace = !0) + } + } + + function ik(t, e) { + let n = t.start; + return { + text: Array.from(t.getWalker({ + ignoreElementEnd: !1 + })).reduce(((t, { + item: o + }) => o.is("$text") || o.is("$textProxy") ? t + o.data : (n = e.createPositionAfter(o), "")), ""), + range: e.createRange(n, t.end) + } + } + class rk extends(q()) { + constructor(t, e) { + super(), this.model = t, this.testCallback = e, this._hasMatch = !1, this.set("isEnabled", !0), this.on("change:isEnabled", (() => { + this.isEnabled ? this._startListening() : (this.stopListening(t.document.selection), this.stopListening(t.document)) + })), this._startListening() + } + get hasMatch() { + return this._hasMatch + } + _startListening() { + const t = this.model.document; + this.listenTo(t.selection, "change:range", ((e, { + directChange: n + }) => { + n && (t.selection.isCollapsed ? this._evaluateTextBeforeSelection("selection") : this.hasMatch && (this.fire("unmatched"), this._hasMatch = !1)) + })), this.listenTo(t, "change:data", ((t, e) => { + !e.isUndo && e.isLocal && this._evaluateTextBeforeSelection("data", { + batch: e + }) + })) + } + _evaluateTextBeforeSelection(t, e = {}) { + const n = this.model, + o = n.document.selection, + i = n.createRange(n.createPositionAt(o.focus.parent, 0), o.focus), + { + text: r, + range: s + } = ik(i, n), + a = this.testCallback(r); + if (!a && this.hasMatch && this.fire("unmatched"), this._hasMatch = !!a, a) { + const n = Object.assign(e, { + text: r, + range: s + }); + "object" == typeof a && Object.assign(n, a), this.fire(`matched:${t}`, n) + } + } + } + class sk extends Vi { + constructor(t) { + super(t), this.attributes = new Set, this._overrideUid = null + } + static get pluginName() { + return "TwoStepCaretMovement" + } + init() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = t.locale, + i = e.document.selection; + this.listenTo(n.document, "arrowKey", ((t, e) => { + if (!i.isCollapsed) return; + if (e.shiftKey || e.altKey || e.ctrlKey) return; + const n = e.keyCode == mi.arrowright, + r = e.keyCode == mi.arrowleft; + if (!n && !r) return; + const s = o.contentLanguageDirection; + let a = !1; + a = "ltr" === s && n || "rtl" === s && r ? this._handleForwardMovement(e) : this._handleBackwardMovement(e), !0 === a && t.stop() + }), { + context: "$text", + priority: "highest" + }), this._isNextGravityRestorationSkipped = !1, this.listenTo(i, "change:range", ((t, e) => { + this._isNextGravityRestorationSkipped ? this._isNextGravityRestorationSkipped = !1 : this._isGravityOverridden && (!e.directChange && dk(i.getFirstPosition(), this.attributes) || this._restoreGravity()) + })) + } + registerAttribute(t) { + this.attributes.add(t) + } + _handleForwardMovement(t) { + const e = this.attributes, + n = this.editor.model.document.selection, + o = n.getFirstPosition(); + return !this._isGravityOverridden && ((!o.isAtStart || !ak(n, e)) && (!!dk(o, e) && (ck(t), this._overrideGravity(), !0))) + } + _handleBackwardMovement(t) { + const e = this.attributes, + n = this.editor.model, + o = n.document.selection, + i = o.getFirstPosition(); + return this._isGravityOverridden ? (ck(t), this._restoreGravity(), lk(n, e, i), !0) : i.isAtStart ? !!ak(o, e) && (ck(t), lk(n, e, i), !0) : !! function(t, e) { + const n = t.getShiftedBy(-1); + return dk(n, e) + }(i, e) && (i.isAtEnd && !ak(o, e) && dk(i, e) ? (ck(t), lk(n, e, i), !0) : (this._isNextGravityRestorationSkipped = !0, this._overrideGravity(), !1)) + } + get _isGravityOverridden() { + return !!this._overrideUid + } + _overrideGravity() { + this._overrideUid = this.editor.model.change((t => t.overrideSelectionGravity())) + } + _restoreGravity() { + this.editor.model.change((t => { + t.restoreSelectionGravity(this._overrideUid), this._overrideUid = null + })) + } + } + + function ak(t, e) { + for (const n of e) + if (t.hasAttribute(n)) return !0; + return !1 + } + + function lk(t, e, n) { + const o = n.nodeBefore; + t.change((t => { + o ? t.setSelectionAttribute(o.getAttributes()) : t.removeSelectionAttribute(e) + })) + } + + function ck(t) { + t.preventDefault() + } + + function dk(t, e) { + const { + nodeBefore: n, + nodeAfter: o + } = t; + for (const t of e) { + const e = n ? n.getAttribute(t) : void 0; + if ((o ? o.getAttribute(t) : void 0) !== e) return !0 + } + return !1 + } + const hk = { + copyright: { + from: "(c)", + to: "©" + }, + registeredTrademark: { + from: "(r)", + to: "®" + }, + trademark: { + from: "(tm)", + to: "™" + }, + oneHalf: { + from: /(^|[^/a-z0-9])(1\/2)([^/a-z0-9])$/i, + to: [null, "½", null] + }, + oneThird: { + from: /(^|[^/a-z0-9])(1\/3)([^/a-z0-9])$/i, + to: [null, "⅓", null] + }, + twoThirds: { + from: /(^|[^/a-z0-9])(2\/3)([^/a-z0-9])$/i, + to: [null, "⅔", null] + }, + oneForth: { + from: /(^|[^/a-z0-9])(1\/4)([^/a-z0-9])$/i, + to: [null, "¼", null] + }, + threeQuarters: { + from: /(^|[^/a-z0-9])(3\/4)([^/a-z0-9])$/i, + to: [null, "¾", null] + }, + lessThanOrEqual: { + from: "<=", + to: "≤" + }, + greaterThanOrEqual: { + from: ">=", + to: "≥" + }, + notEqual: { + from: "!=", + to: "≠" + }, + arrowLeft: { + from: "<-", + to: "←" + }, + arrowRight: { + from: "->", + to: "→" + }, + horizontalEllipsis: { + from: "...", + to: "…" + }, + enDash: { + from: /(^| )(--)( )$/, + to: [null, "–", null] + }, + emDash: { + from: /(^| )(---)( )$/, + to: [null, "—", null] + }, + quotesPrimary: { + from: bk('"'), + to: [null, "“", null, "”"] + }, + quotesSecondary: { + from: bk("'"), + to: [null, "‘", null, "’"] + }, + quotesPrimaryEnGb: { + from: bk("'"), + to: [null, "‘", null, "’"] + }, + quotesSecondaryEnGb: { + from: bk('"'), + to: [null, "“", null, "”"] + }, + quotesPrimaryPl: { + from: bk('"'), + to: [null, "„", null, "”"] + }, + quotesSecondaryPl: { + from: bk("'"), + to: [null, "‚", null, "’"] + } + }, + uk = { + symbols: ["copyright", "registeredTrademark", "trademark"], + mathematical: ["oneHalf", "oneThird", "twoThirds", "oneForth", "threeQuarters", "lessThanOrEqual", "greaterThanOrEqual", "notEqual", "arrowLeft", "arrowRight"], + typography: ["horizontalEllipsis", "enDash", "emDash"], + quotes: ["quotesPrimary", "quotesSecondary"] + }, + gk = ["symbols", "mathematical", "typography", "quotes"]; + + function mk(t) { + return "string" == typeof t ? new RegExp(`(${Tb(t)})$`) : t + } + + function pk(t) { + return "string" == typeof t ? () => [t] : t instanceof Array ? () => t : t + } + + function fk(t) { + return (t.textNode ? t.textNode : t.nodeAfter).getAttributes() + } + + function bk(t) { + return new RegExp(`(^|\\s)(${t})([^${t}]*)(${t})$`) + } + + function kk(t, e, n, o) { + return o.createRange(wk(t, e, n, !0, o), wk(t, e, n, !1, o)) + } + + function wk(t, e, n, o, i) { + let r = t.textNode || (o ? t.nodeBefore : t.nodeAfter), + s = null; + for (; r && r.getAttribute(e) == n;) s = r, r = o ? r.previousSibling : r.nextSibling; + return s ? i.createPositionAt(s, o ? "before" : "after") : t + } + + function Ak(t, e, n, o) { + const i = t.editing.view, + r = new Set; + i.document.registerPostFixer((i => { + const s = t.model.document.selection; + let a = !1; + if (s.hasAttribute(e)) { + const l = kk(s.getFirstPosition(), e, s.getAttribute(e), t.model), + c = t.editing.mapper.toViewRange(l); + for (const t of c.getItems()) t.is("element", n) && !t.hasClass(o) && (i.addClass(o, t), r.add(t), a = !0) + } + return a + })), t.conversion.for("editingDowncast").add((t => { + function e() { + i.change((t => { + for (const e of r.values()) t.removeClass(o, e), r.delete(e) + })) + } + t.on("insert", e, { + priority: "highest" + }), t.on("remove", e, { + priority: "highest" + }), t.on("attribute", e, { + priority: "highest" + }), t.on("selection", e, { + priority: "highest" + }) + })) + } + + function Ck(t, e, n, o) { + let i, r = null; + "function" == typeof o ? i = o : (r = t.commands.get(o), i = () => { + t.execute(o) + }), t.model.document.on("change:data", ((s, a) => { + if (r && !r.isEnabled || !e.isEnabled) return; + const l = Ei(t.model.document.selection.getRanges()); + if (!l.isCollapsed) return; + if (a.isUndo || !a.isLocal) return; + const c = Array.from(t.model.document.differ.getChanges()), + d = c[0]; + if (1 != c.length || "insert" !== d.type || "$text" != d.name || 1 != d.length) return; + const h = d.position.parent; + if (h.is("element", "codeBlock")) return; + if (h.is("element", "listItem") && "function" != typeof o && !["numberedList", "bulletedList", "todoList"].includes(o)) return; + if (r && !0 === r.value) return; + const u = h.getChild(0), + g = t.model.createRangeOn(u); + if (!g.containsRange(l) && !l.end.isEqual(g.end)) return; + const m = n.exec(u.data.substr(0, l.end.offset)); + m && t.model.enqueueChange((e => { + const n = e.createPositionAt(h, 0), + o = e.createPositionAt(h, m[0].length), + r = new ec(n, o); + if (!1 !== i({ + match: m + })) { + e.remove(r); + const n = t.model.document.selection.getFirstRange(), + o = e.createRangeIn(h); + !h.isEmpty || o.isEqual(n) || o.containsRange(n, !0) || e.remove(h) + } + r.detach(), t.model.enqueueChange((() => { + t.plugins.get("Delete").requestUndoOnBackspace() + })) + })) + })) + } + + function _k(t, e, n, o) { + let i, r; + n instanceof RegExp ? i = n : r = n, r = r || (t => { + let e; + const n = [], + o = []; + for (; null !== (e = i.exec(t)) && !(e && e.length < 4);) { + let { + index: t, + 1: i, + 2: r, + 3: s + } = e; + const a = i + r + s; + t += e[0].length - a.length; + const l = [t, t + i.length], + c = [t + i.length + r.length, t + i.length + r.length + s.length]; + n.push(l), n.push(c), o.push([t + i.length, t + i.length + r.length]) + } + return { + remove: n, + format: o + } + }), t.model.document.on("change:data", ((n, i) => { + if (i.isUndo || !i.isLocal || !e.isEnabled) return; + const s = t.model, + a = s.document.selection; + if (!a.isCollapsed) return; + const l = Array.from(s.document.differ.getChanges()), + c = l[0]; + if (1 != l.length || "insert" !== c.type || "$text" != c.name || 1 != c.length) return; + const d = a.focus, + h = d.parent, + { + text: u, + range: g + } = function(t, e) { + let n = t.start; + const o = Array.from(t.getItems()).reduce(((t, o) => !o.is("$text") && !o.is("$textProxy") || o.getAttribute("code") ? (n = e.createPositionAfter(o), "") : t + o.data), ""); + return { + text: o, + range: e.createRange(n, t.end) + } + }(s.createRange(s.createPositionAt(h, 0), d), s), + m = r(u), + p = vk(g.start, m.format, s), + f = vk(g.start, m.remove, s); + p.length && f.length && s.enqueueChange((e => { + if (!1 !== o(e, p)) { + for (const t of f.reverse()) e.remove(t); + s.enqueueChange((() => { + t.plugins.get("Delete").requestUndoOnBackspace() + })) + } + })) + })) + } + + function vk(t, e, n) { + return e.filter((t => void 0 !== t[0] && void 0 !== t[1])).map((e => n.createRange(t.getShiftedBy(e[0]), t.getShiftedBy(e[1])))) + } + + function yk(t, e) { + return (n, o) => { + if (!t.commands.get(e).isEnabled) return !1; + const i = t.model.schema.getValidRanges(o, e); + for (const t of i) n.setAttribute(e, !0, t); + n.removeSelectionAttribute(e) + } + } + class xk extends Fi { + constructor(t, e) { + super(t), this.attributeKey = e + } + refresh() { + const t = this.editor.model, + e = t.document; + this.value = this._getValueFromFirstAllowedNode(), this.isEnabled = t.schema.checkAttributeInSelection(e.selection, this.attributeKey) + } + execute(t = {}) { + const e = this.editor.model, + n = e.document.selection, + o = void 0 === t.forceValue ? !this.value : t.forceValue; + e.change((t => { + if (n.isCollapsed) o ? t.setSelectionAttribute(this.attributeKey, !0) : t.removeSelectionAttribute(this.attributeKey); + else { + const i = e.schema.getValidRanges(n.getRanges(), this.attributeKey); + for (const e of i) o ? t.setAttribute(this.attributeKey, o, e) : t.removeAttribute(this.attributeKey, e) + } + })) + } + _getValueFromFirstAllowedNode() { + const t = this.editor.model, + e = t.schema, + n = t.document.selection; + if (n.isCollapsed) return n.hasAttribute(this.attributeKey); + for (const t of n.getRanges()) + for (const n of t.getItems()) + if (e.checkAttribute(n, this.attributeKey)) return n.hasAttribute(this.attributeKey); + return !1 + } + } + const Ek = "bold"; + class Dk extends Vi { + static get pluginName() { + return "BoldEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Ek + }), t.model.schema.setAttributeProperties(Ek, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Ek, + view: "strong", + upcastAlso: ["b", t => { + const e = t.getStyle("font-weight"); + return e && ("bold" == e || Number(e) >= 600) ? { + name: !0, + styles: ["font-weight"] + } : null + }] + }), t.commands.add(Ek, new xk(t, Ek)), t.keystrokes.set("CTRL+B", Ek) + } + } + const Sk = "bold"; + class Tk extends Vi { + static get pluginName() { + return "BoldUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(Sk, (n => { + const o = t.commands.get(Sk), + i = new Mg(n); + return i.set({ + label: e("Bold"), + icon: eg.bold, + keystroke: "CTRL+B", + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(Sk), t.editing.view.focus() + })), i + })) + } + } + const Bk = "code"; + class Ik extends Vi { + static get pluginName() { + return "CodeEditing" + } + static get requires() { + return [sk] + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Bk + }), t.model.schema.setAttributeProperties(Bk, { + isFormatting: !0, + copyOnEnter: !1 + }), t.conversion.attributeToElement({ + model: Bk, + view: "code", + upcastAlso: { + styles: { + "word-wrap": "break-word" + } + } + }), t.commands.add(Bk, new xk(t, Bk)), t.plugins.get(sk).registerAttribute(Bk), Ak(t, Bk, "code", "ck-code_selected") + } + } + var Pk = n(8603), + Rk = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Pk.Z, Rk); + Pk.Z.locals; + const zk = "code"; + class Vk extends Vi { + static get pluginName() { + return "CodeUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(zk, (n => { + const o = t.commands.get(zk), + i = new Mg(n); + return i.set({ + label: e("Code"), + icon: '', + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(zk), t.editing.view.focus() + })), i + })) + } + } + const Ok = "italic"; + class Fk extends Vi { + static get pluginName() { + return "ItalicEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Ok + }), t.model.schema.setAttributeProperties(Ok, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Ok, + view: "i", + upcastAlso: ["em", { + styles: { + "font-style": "italic" + } + }] + }), t.commands.add(Ok, new xk(t, Ok)), t.keystrokes.set("CTRL+I", Ok) + } + } + const Mk = "italic"; + class Nk extends Vi { + static get pluginName() { + return "ItalicUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(Mk, (n => { + const o = t.commands.get(Mk), + i = new Mg(n); + return i.set({ + label: e("Italic"), + icon: '', + keystroke: "CTRL+I", + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(Mk), t.editing.view.focus() + })), i + })) + } + } + const Lk = "strikethrough"; + class Hk extends Vi { + static get pluginName() { + return "StrikethroughEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Lk + }), t.model.schema.setAttributeProperties(Lk, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Lk, + view: "s", + upcastAlso: ["del", "strike", { + styles: { + "text-decoration": "line-through" + } + }] + }), t.commands.add(Lk, new xk(t, Lk)), t.keystrokes.set("CTRL+SHIFT+X", "strikethrough") + } + } + const jk = "strikethrough"; + class qk extends Vi { + static get pluginName() { + return "StrikethroughUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(jk, (n => { + const o = t.commands.get(jk), + i = new Mg(n); + return i.set({ + label: e("Strikethrough"), + icon: '', + keystroke: "CTRL+SHIFT+X", + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(jk), t.editing.view.focus() + })), i + })) + } + } + const Wk = "subscript"; + class Uk extends Vi { + static get pluginName() { + return "SubscriptEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Wk + }), t.model.schema.setAttributeProperties(Wk, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Wk, + view: "sub", + upcastAlso: [{ + styles: { + "vertical-align": "sub" + } + }] + }), t.commands.add(Wk, new xk(t, Wk)) + } + } + const $k = "subscript"; + class Gk extends Vi { + static get pluginName() { + return "SubscriptUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add($k, (n => { + const o = t.commands.get($k), + i = new Mg(n); + return i.set({ + label: e("Subscript"), + icon: '', + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute($k), t.editing.view.focus() + })), i + })) + } + } + const Kk = "superscript"; + class Zk extends Vi { + static get pluginName() { + return "SuperscriptEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Kk + }), t.model.schema.setAttributeProperties(Kk, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Kk, + view: "sup", + upcastAlso: [{ + styles: { + "vertical-align": "super" + } + }] + }), t.commands.add(Kk, new xk(t, Kk)) + } + } + const Jk = "superscript"; + class Yk extends Vi { + static get pluginName() { + return "SuperscriptUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(Jk, (n => { + const o = t.commands.get(Jk), + i = new Mg(n); + return i.set({ + label: e("Superscript"), + icon: '', + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(Jk), t.editing.view.focus() + })), i + })) + } + } + const Qk = "underline"; + class Xk extends Vi { + static get pluginName() { + return "UnderlineEditing" + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: Qk + }), t.model.schema.setAttributeProperties(Qk, { + isFormatting: !0, + copyOnEnter: !0 + }), t.conversion.attributeToElement({ + model: Qk, + view: "u", + upcastAlso: { + styles: { + "text-decoration": "underline" + } + } + }), t.commands.add(Qk, new xk(t, Qk)), t.keystrokes.set("CTRL+U", "underline") + } + } + const tw = "underline"; + class ew extends Vi { + static get pluginName() { + return "UnderlineUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add(tw, (n => { + const o = t.commands.get(tw), + i = new Mg(n); + return i.set({ + label: e("Underline"), + icon: '', + keystroke: "CTRL+U", + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute(tw), t.editing.view.focus() + })), i + })) + } + } + + function* nw(t, e) { + for (const n of e) n && t.getAttributeProperties(n[0]).copyOnEnter && (yield n) + } + class ow extends Fi { + execute() { + this.editor.model.change((t => { + this.enterBlock(t), this.fire("afterExecute", { + writer: t + }) + })) + } + enterBlock(t) { + const e = this.editor.model, + n = e.document.selection, + o = e.schema, + i = n.isCollapsed, + r = n.getFirstRange(), + s = r.start.parent, + a = r.end.parent; + if (o.isLimit(s) || o.isLimit(a)) return i || s != a || e.deleteContent(n), !1; + if (i) { + const e = nw(t.model.schema, n.getAttributes()); + return iw(t, r.start), t.setSelectionAttribute(e), !0 + } { + const o = !(r.start.isAtStart && r.end.isAtEnd), + i = s == a; + if (e.deleteContent(n, { + leaveUnmerged: o + }), o) { + if (i) return iw(t, n.focus), !0; + t.setSelection(a, 0) + } + } + return !1 + } + } + + function iw(t, e) { + t.split(e), t.setSelection(e.parent.nextSibling, 0) + } + const rw = { + insertParagraph: { + isSoft: !1 + }, + insertLineBreak: { + isSoft: !0 + } + }; + class sw extends Aa { + constructor(t) { + super(t); + const e = this.document; + let n = !1; + e.on("keydown", ((t, e) => { + n = e.shiftKey + })), e.on("beforeinput", ((o, r) => { + if (!this.isEnabled) return; + let s = r.inputType; + i.isSafari && n && "insertParagraph" == s && (s = "insertLineBreak"); + const a = r.domEvent, + l = rw[s]; + if (!l) return; + const c = new ks(e, "enter", r.targetRanges[0]); + e.fire(c, new _a(t, a, { + isSoft: l.isSoft + })), c.stop.called && o.stop() + })) + } + observe() {} + stopObserving() {} + } + class aw extends Vi { + static get pluginName() { + return "Enter" + } + init() { + const t = this.editor, + e = t.editing.view, + n = e.document; + e.addObserver(sw), t.commands.add("enter", new ow(t)), this.listenTo(n, "enter", ((o, i) => { + n.isComposing || i.preventDefault(), i.isSoft || (t.execute("enter"), e.scrollToTheSelection()) + }), { + priority: "low" + }) + } + } + class lw extends Fi { + execute() { + const t = this.editor.model, + e = t.document; + t.change((n => { + ! function(t, e, n) { + const o = n.isCollapsed, + i = n.getFirstRange(), + r = i.start.parent, + s = i.end.parent, + a = r == s; + if (o) { + const o = nw(t.schema, n.getAttributes()); + cw(t, e, i.end), e.removeSelectionAttribute(n.getAttributeKeys()), e.setSelectionAttribute(o) + } else { + const o = !(i.start.isAtStart && i.end.isAtEnd); + t.deleteContent(n, { + leaveUnmerged: o + }), a ? cw(t, e, n.focus) : o && e.setSelection(s, 0) + } + }(t, n, e.selection), this.fire("afterExecute", { + writer: n + }) + })) + } + refresh() { + const t = this.editor.model, + e = t.document; + this.isEnabled = function(t, e) { + if (e.rangeCount > 1) return !1; + const n = e.anchor; + if (!n || !t.checkChild(n, "softBreak")) return !1; + const o = e.getFirstRange(), + i = o.start.parent, + r = o.end.parent; + if ((dw(i, t) || dw(r, t)) && i !== r) return !1; + return !0 + }(t.schema, e.selection) + } + } + + function cw(t, e, n) { + const o = e.createElement("softBreak"); + t.insertContent(o, n), e.setSelection(o, "after") + } + + function dw(t, e) { + return !t.is("rootElement") && (e.isLimit(t) || dw(t.parent, e)) + } + class hw extends Vi { + static get pluginName() { + return "ShiftEnter" + } + init() { + const t = this.editor, + e = t.model.schema, + n = t.conversion, + o = t.editing.view, + i = o.document; + e.register("softBreak", { + allowWhere: "$text", + isInline: !0 + }), n.for("upcast").elementToElement({ + model: "softBreak", + view: "br" + }), n.for("downcast").elementToElement({ + model: "softBreak", + view: (t, { + writer: e + }) => e.createEmptyElement("br") + }), o.addObserver(sw), t.commands.add("shiftEnter", new lw(t)), this.listenTo(i, "enter", ((e, n) => { + i.isComposing || n.preventDefault(), n.isSoft && (t.execute("shiftEnter"), o.scrollToTheSelection()) + }), { + priority: "low" + }) + } + } + class uw extends Fi { + refresh() { + this.value = this._getValue(), this.isEnabled = this._checkEnabled() + } + execute(t = {}) { + const e = this.editor.model, + n = e.schema, + o = e.document.selection, + i = Array.from(o.getSelectedBlocks()), + r = void 0 === t.forceValue ? !this.value : t.forceValue; + e.change((t => { + if (r) { + const e = i.filter((t => gw(t) || pw(n, t))); + this._applyQuote(t, e) + } else this._removeQuote(t, i.filter(gw)) + })) + } + _getValue() { + const t = Ei(this.editor.model.document.selection.getSelectedBlocks()); + return !(!t || !gw(t)) + } + _checkEnabled() { + if (this.value) return !0; + const t = this.editor.model.document.selection, + e = this.editor.model.schema, + n = Ei(t.getSelectedBlocks()); + return !!n && pw(e, n) + } + _removeQuote(t, e) { + mw(t, e).reverse().forEach((e => { + if (e.start.isAtStart && e.end.isAtEnd) return void t.unwrap(e.start.parent); + if (e.start.isAtStart) { + const n = t.createPositionBefore(e.start.parent); + return void t.move(e, n) + } + e.end.isAtEnd || t.split(e.end); + const n = t.createPositionAfter(e.end.parent); + t.move(e, n) + })) + } + _applyQuote(t, e) { + const n = []; + mw(t, e).reverse().forEach((e => { + let o = gw(e.start); + o || (o = t.createElement("blockQuote"), t.wrap(e, o)), n.push(o) + })), n.reverse().reduce(((e, n) => e.nextSibling == n ? (t.merge(t.createPositionAfter(e)), e) : n)) + } + } + + function gw(t) { + return "blockQuote" == t.parent.name ? t.parent : null + } + + function mw(t, e) { + let n, o = 0; + const i = []; + for (; o < e.length;) { + const r = e[o], + s = e[o + 1]; + n || (n = t.createPositionBefore(r)), s && r.nextSibling == s || (i.push(t.createRange(n, t.createPositionAfter(r))), n = null), o++ + } + return i + } + + function pw(t, e) { + const n = t.checkChild(e.parent, "blockQuote"), + o = t.checkChild(["$root", "blockQuote"], e); + return n && o + } + class fw extends Vi { + static get pluginName() { + return "BlockQuoteEditing" + } + static get requires() { + return [aw, ok] + } + init() { + const t = this.editor, + e = t.model.schema; + t.commands.add("blockQuote", new uw(t)), e.register("blockQuote", { + inheritAllFrom: "$container" + }), t.conversion.elementToElement({ + model: "blockQuote", + view: "blockquote" + }), t.model.document.registerPostFixer((n => { + const o = t.model.document.differ.getChanges(); + for (const t of o) + if ("insert" == t.type) { + const o = t.position.nodeAfter; + if (!o) continue; + if (o.is("element", "blockQuote") && o.isEmpty) return n.remove(o), !0; + if (o.is("element", "blockQuote") && !e.checkChild(t.position, o)) return n.unwrap(o), !0; + if (o.is("element")) { + const t = n.createRangeIn(o); + for (const o of t.getItems()) + if (o.is("element", "blockQuote") && !e.checkChild(n.createPositionBefore(o), o)) return n.unwrap(o), !0 + } + } else if ("remove" == t.type) { + const e = t.position.parent; + if (e.is("element", "blockQuote") && e.isEmpty) return n.remove(e), !0 + } + return !1 + })); + const n = this.editor.editing.view.document, + o = t.model.document.selection, + i = t.commands.get("blockQuote"); + this.listenTo(n, "enter", ((e, n) => { + if (!o.isCollapsed || !i.value) return; + o.getLastPosition().parent.isEmpty && (t.execute("blockQuote"), t.editing.view.scrollToTheSelection(), n.preventDefault(), e.stop()) + }), { + context: "blockquote" + }), this.listenTo(n, "delete", ((e, n) => { + if ("backward" != n.direction || !o.isCollapsed || !i.value) return; + const r = o.getLastPosition().parent; + r.isEmpty && !r.previousSibling && (t.execute("blockQuote"), t.editing.view.scrollToTheSelection(), n.preventDefault(), e.stop()) + }), { + context: "blockquote" + }) + } + } + var bw = n(3062), + kw = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(bw.Z, kw); + bw.Z.locals; + class ww extends Vi { + static get pluginName() { + return "BlockQuoteUI" + } + init() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add("blockQuote", (n => { + const o = t.commands.get("blockQuote"), + i = new Mg(n); + return i.set({ + label: e("Block quote"), + icon: eg.quote, + tooltip: !0, + isToggleable: !0 + }), i.bind("isOn", "isEnabled").to(o, "value", "isEnabled"), this.listenTo(i, "execute", (() => { + t.execute("blockQuote"), t.editing.view.focus() + })), i + })) + } + } + class Aw extends Fi { + constructor(t) { + super(t), this._isEnabledBasedOnSelection = !1 + } + refresh() { + const t = this.editor.model, + e = Ei(t.document.selection.getSelectedBlocks()); + this.value = !!e && e.is("element", "paragraph"), this.isEnabled = !!e && Cw(e, t.schema) + } + execute(t = {}) { + const e = this.editor.model, + n = e.document, + o = t.selection || n.selection; + e.canEditAt(o) && e.change((t => { + const n = o.getSelectedBlocks(); + for (const o of n) !o.is("element", "paragraph") && Cw(o, e.schema) && t.rename(o, "paragraph") + })) + } + } + + function Cw(t, e) { + return e.checkChild(t.parent, "paragraph") && !e.isObject(t) + } + class _w extends Fi { + constructor(t) { + super(t), this._isEnabledBasedOnSelection = !1 + } + execute(t) { + const e = this.editor.model, + n = t.attributes; + let o = t.position; + e.canEditAt(o) && e.change((t => { + const i = t.createElement("paragraph"); + if (n && e.schema.setAllowedAttributes(i, n, t), !e.schema.checkChild(o.parent, i)) { + const n = e.schema.findAllowedParent(o, i); + if (!n) return; + o = t.split(o, n).position + } + e.insertContent(i, o), t.setSelection(i, "in") + })) + } + } + const vw = class extends Vi { + static get pluginName() { + return "Paragraph" + } + init() { + const t = this.editor, + e = t.model; + t.commands.add("paragraph", new Aw(t)), t.commands.add("insertParagraph", new _w(t)), e.schema.register("paragraph", { + inheritAllFrom: "$block" + }), t.conversion.elementToElement({ + model: "paragraph", + view: "p" + }), t.conversion.for("upcast").elementToElement({ + model: (t, { + writer: e + }) => vw.paragraphLikeElements.has(t.name) ? t.isEmpty ? null : e.createElement("paragraph") : null, + view: /.+/, + converterPriority: "low" + }) + } + }; + let yw = vw; + yw.paragraphLikeElements = new Set(["blockquote", "dd", "div", "dt", "h1", "h2", "h3", "h4", "h5", "h6", "li", "p", "td", "th"]); + const xw = eg.paragraph; + class Ew extends Fi { + constructor(t, e) { + super(t), this.modelElements = e + } + refresh() { + const t = Ei(this.editor.model.document.selection.getSelectedBlocks()); + this.value = !!t && this.modelElements.includes(t.name) && t.name, this.isEnabled = !!t && this.modelElements.some((e => Dw(t, e, this.editor.model.schema))) + } + execute(t) { + const e = this.editor.model, + n = e.document, + o = t.value; + e.change((t => { + const i = Array.from(n.selection.getSelectedBlocks()).filter((t => Dw(t, o, e.schema))); + for (const e of i) e.is("element", o) || t.rename(e, o) + })) + } + } + + function Dw(t, e, n) { + return n.checkChild(t.parent, e) && !n.isObject(t) + } + const Sw = "paragraph"; + class Tw extends Vi { + static get pluginName() { + return "HeadingEditing" + } + constructor(t) { + super(t), t.config.define("heading", { + options: [{ + model: "paragraph", + title: "Paragraph", + class: "ck-heading_paragraph" + }, { + model: "heading1", + view: "h2", + title: "Heading 1", + class: "ck-heading_heading1" + }, { + model: "heading2", + view: "h3", + title: "Heading 2", + class: "ck-heading_heading2" + }, { + model: "heading3", + view: "h4", + title: "Heading 3", + class: "ck-heading_heading3" + }] + }) + } + static get requires() { + return [yw] + } + init() { + const t = this.editor, + e = t.config.get("heading.options"), + n = []; + for (const o of e) "paragraph" !== o.model && (t.model.schema.register(o.model, { + inheritAllFrom: "$block" + }), t.conversion.elementToElement(o), n.push(o.model)); + this._addDefaultH1Conversion(t), t.commands.add("heading", new Ew(t, n)) + } + afterInit() { + const t = this.editor, + e = t.commands.get("enter"), + n = t.config.get("heading.options"); + e && this.listenTo(e, "afterExecute", ((e, o) => { + const i = t.model.document.selection.getFirstPosition().parent; + n.some((t => i.is("element", t.model))) && !i.is("element", Sw) && 0 === i.childCount && o.writer.rename(i, Sw) + })) + } + _addDefaultH1Conversion(t) { + t.conversion.for("upcast").elementToElement({ + model: "heading1", + view: "h1", + converterPriority: m.low + 1 + }) + } + } + + function Bw(t) { + const e = t.t, + n = { + Paragraph: e("Paragraph"), + "Heading 1": e("Heading 1"), + "Heading 2": e("Heading 2"), + "Heading 3": e("Heading 3"), + "Heading 4": e("Heading 4"), + "Heading 5": e("Heading 5"), + "Heading 6": e("Heading 6") + }; + return t.config.get("heading.options").map((t => { + const e = n[t.title]; + return e && e != t.title && (t.title = e), t + })) + } + var Iw = n(8733), + Pw = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Iw.Z, Pw); + Iw.Z.locals; + class Rw extends Vi { + static get pluginName() { + return "HeadingUI" + } + init() { + const t = this.editor, + e = t.t, + n = Bw(t), + o = e("Choose heading"), + i = e("Heading"); + t.ui.componentFactory.add("heading", (e => { + const r = {}, + s = new xi, + a = t.commands.get("heading"), + l = t.commands.get("paragraph"), + c = [a]; + for (const t of n) { + const e = { + type: "button", + model: new Vf({ + label: t.title, + class: t.class, + role: "menuitemradio", + withText: !0 + }) + }; + "paragraph" === t.model ? (e.model.bind("isOn").to(l, "value"), e.model.set("commandName", "paragraph"), c.push(l)) : (e.model.bind("isOn").to(a, "value", (e => e === t.model)), e.model.set({ + commandName: "heading", + commandValue: t.model + })), s.add(e), r[t.model] = t.title + } + const d = Wm(e); + return Gm(d, s, { + ariaLabel: i, + role: "menu" + }), d.buttonView.set({ + ariaLabel: i, + ariaLabelledBy: void 0, + isOn: !1, + withText: !0, + tooltip: i + }), d.extendTemplate({ + attributes: { + class: ["ck-heading-dropdown"] + } + }), d.bind("isEnabled").toMany(c, "isEnabled", ((...t) => t.some((t => t)))), d.buttonView.bind("label").to(a, "value", l, "value", ((t, e) => { + const n = t || e && "paragraph"; + return "boolean" == typeof n ? o : r[n] ? r[n] : o + })), this.listenTo(d, "execute", (e => { + const { + commandName: n, + commandValue: o + } = e.source; + t.execute(n, o ? { + value: o + } : void 0), t.editing.view.focus() + })), d + })) + } + } + const zw = { + heading1: '', + heading2: '', + heading3: '', + heading4: '', + heading5: '', + heading6: '' + }; + class Vw extends va { + constructor(t) { + super(t), this.domEventType = ["paste", "copy", "cut", "drop", "dragover", "dragstart", "dragend", "dragenter", "dragleave"]; + const e = this.document; + + function n(t) { + return (n, o) => { + o.preventDefault(); + const i = o.dropRange ? [o.dropRange] : null, + r = new h(e, t); + e.fire(r, { + dataTransfer: o.dataTransfer, + method: n.name, + targetRanges: i, + target: o.target, + domEvent: o.domEvent + }), r.stop.called && o.stopPropagation() + } + } + this.listenTo(e, "paste", n("clipboardInput"), { + priority: "low" + }), this.listenTo(e, "drop", n("clipboardInput"), { + priority: "low" + }), this.listenTo(e, "dragover", n("dragging"), { + priority: "low" + }) + } + onDomEvent(t) { + const e = "clipboardData" in t ? t.clipboardData : t.dataTransfer, + n = "drop" == t.type || "paste" == t.type, + o = { + dataTransfer: new hl(e, { + cacheFiles: n + }) + }; + "drop" != t.type && "dragover" != t.type || (o.dropRange = function(t, e) { + const n = e.target.ownerDocument, + o = e.clientX, + i = e.clientY; + let r; + n.caretRangeFromPoint && n.caretRangeFromPoint(o, i) ? r = n.caretRangeFromPoint(o, i) : e.rangeParent && (r = n.createRange(), r.setStart(e.rangeParent, e.rangeOffset), r.collapse(!0)); + if (r) return t.domConverter.domRangeToView(r); + return null + }(this.view, t)), this.fire(t.type, t, o) + } + } + const Ow = ["figcaption", "li"]; + + function Fw(t) { + let e = ""; + if (t.is("$text") || t.is("$textProxy")) e = t.data; + else if (t.is("element", "img") && t.hasAttribute("alt")) e = t.getAttribute("alt"); + else if (t.is("element", "br")) e = "\n"; + else { + let n = null; + for (const o of t.getChildren()) { + const t = Fw(o); + n && (n.is("containerElement") || o.is("containerElement")) && (Ow.includes(n.name) || Ow.includes(o.name) ? e += "\n" : e += "\n\n"), e += t, n = o + } + } + return e + } + class Mw extends Vi { + static get pluginName() { + return "ClipboardPipeline" + } + init() { + this.editor.editing.view.addObserver(Vw), this._setupPasteDrop(), this._setupCopyCut() + } + _setupPasteDrop() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = n.document; + this.listenTo(o, "clipboardInput", ((e, n) => { + "paste" != n.method || t.model.canEditAt(t.model.document.selection) || e.stop() + }), { + priority: "highest" + }), this.listenTo(o, "clipboardInput", ((t, e) => { + const o = e.dataTransfer; + let i; + if (e.content) i = e.content; + else { + let t = ""; + o.getData("text/html") ? t = function(t) { + return t.replace(/(\s+)<\/span>/g, ((t, e) => 1 == e.length ? " " : e)).replace(//g, "") + }(o.getData("text/html")) : o.getData("text/plain") && (((r = (r = o.getData("text/plain")).replace(//g, ">").replace(/\r?\n\r?\n/g, "

").replace(/\r?\n/g, "
").replace(/\t/g, "    ").replace(/^\s/, " ").replace(/\s$/, " ").replace(/\s\s/g, "  ")).includes("

") || r.includes("
")) && (r = `

${r}

`), t = r), i = this.editor.data.htmlProcessor.toView(t) + } + var r; + const s = new h(this, "inputTransformation"); + this.fire(s, { + content: i, + dataTransfer: o, + targetRanges: e.targetRanges, + method: e.method + }), s.stop.called && t.stop(), n.scrollToTheSelection() + }), { + priority: "low" + }), this.listenTo(this, "inputTransformation", ((t, n) => { + if (n.content.isEmpty) return; + const o = this.editor.data.toModel(n.content, "$clipboardHolder"); + 0 != o.childCount && (t.stop(), e.change((() => { + this.fire("contentInsertion", { + content: o, + method: n.method, + dataTransfer: n.dataTransfer, + targetRanges: n.targetRanges + }) + }))) + }), { + priority: "low" + }), this.listenTo(this, "contentInsertion", ((t, n) => { + n.resultRange = e.insertContent(n.content) + }), { + priority: "low" + }) + } + _setupCopyCut() { + const t = this.editor, + e = t.model.document, + n = t.editing.view.document, + o = (o, i) => { + const r = i.dataTransfer; + i.preventDefault(); + const s = t.data.toView(t.model.getSelectedContent(e.selection)); + n.fire("clipboardOutput", { + dataTransfer: r, + content: s, + method: o.name + }) + }; + this.listenTo(n, "copy", o, { + priority: "low" + }), this.listenTo(n, "cut", ((e, n) => { + t.model.canEditAt(t.model.document.selection) ? o(e, n) : n.preventDefault() + }), { + priority: "low" + }), this.listenTo(n, "clipboardOutput", ((n, o) => { + o.content.isEmpty || (o.dataTransfer.setData("text/html", this.editor.data.htmlProcessor.toData(o.content)), o.dataTransfer.setData("text/plain", Fw(o.content))), "cut" == o.method && t.model.deleteContent(e.selection) + }), { + priority: "low" + }) + } + } + class Nw extends(S()) { + constructor() { + super(...arguments), this._stack = [] + } + add(t, e) { + const n = this._stack, + o = n[0]; + this._insertDescriptor(t); + const i = n[0]; + o === i || Lw(o, i) || this.fire("change:top", { + oldDescriptor: o, + newDescriptor: i, + writer: e + }) + } + remove(t, e) { + const n = this._stack, + o = n[0]; + this._removeDescriptor(t); + const i = n[0]; + o === i || Lw(o, i) || this.fire("change:top", { + oldDescriptor: o, + newDescriptor: i, + writer: e + }) + } + _insertDescriptor(t) { + const e = this._stack, + n = e.findIndex((e => e.id === t.id)); + if (Lw(t, e[n])) return; + n > -1 && e.splice(n, 1); + let o = 0; + for (; e[o] && Hw(e[o], t);) o++; + e.splice(o, 0, t) + } + _removeDescriptor(t) { + const e = this._stack, + n = e.findIndex((e => e.id === t)); + n > -1 && e.splice(n, 1) + } + } + + function Lw(t, e) { + return t && e && t.priority == e.priority && jw(t.classes) == jw(e.classes) + } + + function Hw(t, e) { + return t.priority > e.priority || !(t.priority < e.priority) && jw(t.classes) > jw(e.classes) + } + + function jw(t) { + return Array.isArray(t) ? t.sort().join(",") : t + } + const qw = '', + Ww = "ck-widget", + Uw = "ck-widget_selected"; + + function $w(t) { + return !!t.is("element") && !!t.getCustomProperty("widget") + } + + function Gw(t, e, n = {}) { + if (!t.is("containerElement")) throw new b("widget-to-widget-wrong-element-type", null, { + element: t + }); + return e.setAttribute("contenteditable", "false", t), e.addClass(Ww, t), e.setCustomProperty("widget", !0, t), t.getFillerOffset = tA, e.setCustomProperty("widgetLabel", [], t), n.label && function(t, e) { + const n = t.getCustomProperty("widgetLabel"); + n.push(e) + }(t, n.label), n.hasSelectionHandle && function(t, e) { + const n = e.createUIElement("div", { + class: "ck ck-widget__selection-handle" + }, (function(t) { + const e = this.toDomElement(t), + n = new Vg; + return n.set("content", qw), n.render(), e.appendChild(n.element), e + })); + e.insert(e.createPositionAt(t, 0), n), e.addClass(["ck-widget_with-selection-handle"], t) + }(t, e), Jw(t, e), t + } + + function Kw(t, e, n) { + if (e.classes && n.addClass(Ai(e.classes), t), e.attributes) + for (const o in e.attributes) n.setAttribute(o, e.attributes[o], t) + } + + function Zw(t, e, n) { + if (e.classes && n.removeClass(Ai(e.classes), t), e.attributes) + for (const o in e.attributes) n.removeAttribute(o, t) + } + + function Jw(t, e, n = Kw, o = Zw) { + const i = new Nw; + i.on("change:top", ((e, i) => { + i.oldDescriptor && o(t, i.oldDescriptor, i.writer), i.newDescriptor && n(t, i.newDescriptor, i.writer) + })); + e.setCustomProperty("addHighlight", ((t, e, n) => i.add(e, n)), t), e.setCustomProperty("removeHighlight", ((t, e, n) => i.remove(e, n)), t) + } + + function Yw(t, e, n = {}) { + return e.addClass(["ck-editor__editable", "ck-editor__nested-editable"], t), e.setAttribute("role", "textbox", t), n.label && e.setAttribute("aria-label", n.label, t), e.setAttribute("contenteditable", t.isReadOnly ? "false" : "true", t), t.on("change:isReadOnly", ((n, o, i) => { + e.setAttribute("contenteditable", i ? "false" : "true", t) + })), t.on("change:isFocused", ((n, o, i) => { + i ? e.addClass("ck-editor__nested-editable_focused", t) : e.removeClass("ck-editor__nested-editable_focused", t) + })), Jw(t, e), t + } + + function Qw(t, e) { + const n = t.getSelectedElement(); + if (n) { + const o = oA(t); + if (o) return e.createRange(e.createPositionAt(n, o)) + } + return Qh(t, e) + } + + function Xw(t, e) { + return (n, o) => { + const { + mapper: i, + viewPosition: r + } = o, s = i.findMappedViewAncestor(r); + if (!e(s)) return; + const a = i.toModelElement(s); + o.modelPosition = t.createPositionAt(a, r.isAtStart ? "before" : "after") + } + } + + function tA() { + return null + } + const eA = "widget-type-around"; + + function nA(t, e, n) { + return !!t && $w(t) && !n.isInline(e) + } + + function oA(t) { + return t.getAttribute(eA) + } + var iA = n(4921), + rA = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(iA.Z, rA); + iA.Z.locals; + const sA = ["before", "after"], + aA = (new DOMParser).parseFromString('', "image/svg+xml").firstChild, + lA = "ck-widget__type-around_disabled"; + class cA extends Vi { + constructor() { + super(...arguments), this._currentFakeCaretModelElement = null + } + static get pluginName() { + return "WidgetTypeAround" + } + static get requires() { + return [aw, ok] + } + init() { + const t = this.editor, + e = t.editing.view; + this.on("change:isEnabled", ((n, o, i) => { + e.change((t => { + for (const n of e.document.roots) i ? t.removeClass(lA, n) : t.addClass(lA, n) + })), i || t.model.change((t => { + t.removeSelectionAttribute(eA) + })) + })), this._enableTypeAroundUIInjection(), this._enableInsertingParagraphsOnButtonClick(), this._enableInsertingParagraphsOnEnterKeypress(), this._enableInsertingParagraphsOnTypingKeystroke(), this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows(), this._enableDeleteIntegration(), this._enableInsertContentIntegration(), this._enableInsertObjectIntegration(), this._enableDeleteContentIntegration() + } + destroy() { + super.destroy(), this._currentFakeCaretModelElement = null + } + _insertParagraph(t, e) { + const n = this.editor, + o = n.editing.view, + i = n.model.schema.getAttributesWithProperty(t, "copyOnReplace", !0); + n.execute("insertParagraph", { + position: n.model.createPositionAt(t, e), + attributes: i + }), o.focus(), o.scrollToTheSelection() + } + _listenToIfEnabled(t, e, n, o) { + this.listenTo(t, e, ((...t) => { + this.isEnabled && n(...t) + }), o) + } + _insertParagraphAccordingToFakeCaretPosition() { + const t = this.editor.model.document.selection, + e = oA(t); + if (!e) return !1; + const n = t.getSelectedElement(); + return this._insertParagraph(n, e), !0 + } + _enableTypeAroundUIInjection() { + const t = this.editor, + e = t.model.schema, + n = t.locale.t, + o = { + before: n("Insert paragraph before block"), + after: n("Insert paragraph after block") + }; + t.editing.downcastDispatcher.on("insert", ((t, i, r) => { + const s = r.mapper.toViewElement(i.item); + if (s && nA(s, i.item, e)) { + ! function(t, e, n) { + const o = t.createUIElement("div", { + class: "ck ck-reset_all ck-widget__type-around" + }, (function(t) { + const n = this.toDomElement(t); + return function(t, e) { + for (const n of sA) { + const o = new dg({ + tag: "div", + attributes: { + class: ["ck", "ck-widget__type-around__button", `ck-widget__type-around__button_${n}`], + title: e[n], + "aria-hidden": "true" + }, + children: [t.ownerDocument.importNode(aA, !0)] + }); + t.appendChild(o.render()) + } + }(n, e), + function(t) { + const e = new dg({ + tag: "div", + attributes: { + class: ["ck", "ck-widget__type-around__fake-caret"] + } + }); + t.appendChild(e.render()) + }(n), n + })); + t.insert(t.createPositionAt(n, "end"), o) + }(r.writer, o, s); + s.getCustomProperty("widgetLabel").push((() => this.isEnabled ? n("Press Enter to type after or press Shift + Enter to type before the widget") : "")) + } + }), { + priority: "low" + }) + } + _enableTypeAroundFakeCaretActivationUsingKeyboardArrows() { + const t = this.editor, + e = t.model, + n = e.document.selection, + o = e.schema, + i = t.editing.view; + + function r(t) { + return `ck-widget_type-around_show-fake-caret_${t}` + } + this._listenToIfEnabled(i.document, "arrowKey", ((t, e) => { + this._handleArrowKeyPress(t, e) + }), { + context: [$w, "$text"], + priority: "high" + }), this._listenToIfEnabled(n, "change:range", ((e, n) => { + n.directChange && t.model.change((t => { + t.removeSelectionAttribute(eA) + })) + })), this._listenToIfEnabled(e.document, "change:data", (() => { + const e = n.getSelectedElement(); + if (e) { + if (nA(t.editing.mapper.toViewElement(e), e, o)) return + } + t.model.change((t => { + t.removeSelectionAttribute(eA) + })) + })), this._listenToIfEnabled(t.editing.downcastDispatcher, "selection", ((t, e, n) => { + const i = n.writer; + if (this._currentFakeCaretModelElement) { + const t = n.mapper.toViewElement(this._currentFakeCaretModelElement); + t && (i.removeClass(sA.map(r), t), this._currentFakeCaretModelElement = null) + } + const s = e.selection.getSelectedElement(); + if (!s) return; + const a = n.mapper.toViewElement(s); + if (!nA(a, s, o)) return; + const l = oA(e.selection); + l && (i.addClass(r(l), a), this._currentFakeCaretModelElement = s) + })), this._listenToIfEnabled(t.ui.focusTracker, "change:isFocused", ((e, n, o) => { + o || t.model.change((t => { + t.removeSelectionAttribute(eA) + })) + })) + } + _handleArrowKeyPress(t, e) { + const n = this.editor, + o = n.model, + i = o.document.selection, + r = o.schema, + s = n.editing.view, + a = function(t, e) { + const n = wi(t, e); + return "down" === n || "right" === n + }(e.keyCode, n.locale.contentLanguageDirection), + l = s.document.selection.getSelectedElement(); + let c; + nA(l, n.editing.mapper.toModelElement(l), r) ? c = this._handleArrowKeyPressOnSelectedWidget(a) : i.isCollapsed ? c = this._handleArrowKeyPressWhenSelectionNextToAWidget(a) : e.shiftKey || (c = this._handleArrowKeyPressWhenNonCollapsedSelection(a)), c && (e.preventDefault(), t.stop()) + } + _handleArrowKeyPressOnSelectedWidget(t) { + const e = this.editor.model, + n = oA(e.document.selection); + return e.change((e => { + if (!n) return e.setSelectionAttribute(eA, t ? "after" : "before"), !0; + if (!(n === (t ? "after" : "before"))) return e.removeSelectionAttribute(eA), !0; + return !1 + })) + } + _handleArrowKeyPressWhenSelectionNextToAWidget(t) { + const e = this.editor, + n = e.model, + o = n.schema, + i = e.plugins.get("Widget"), + r = i._getObjectElementNextToSelection(t); + return !!nA(e.editing.mapper.toViewElement(r), r, o) && (n.change((e => { + i._setSelectionOverElement(r), e.setSelectionAttribute(eA, t ? "before" : "after") + })), !0) + } + _handleArrowKeyPressWhenNonCollapsedSelection(t) { + const e = this.editor, + n = e.model, + o = n.schema, + i = e.editing.mapper, + r = n.document.selection, + s = t ? r.getLastPosition().nodeBefore : r.getFirstPosition().nodeAfter; + return !!nA(i.toViewElement(s), s, o) && (n.change((e => { + e.setSelection(s, "on"), e.setSelectionAttribute(eA, t ? "after" : "before") + })), !0) + } + _enableInsertingParagraphsOnButtonClick() { + const t = this.editor, + e = t.editing.view; + this._listenToIfEnabled(e.document, "mousedown", ((n, o) => { + const i = o.domTarget.closest(".ck-widget__type-around__button"); + if (!i) return; + const r = function(t) { + return t.classList.contains("ck-widget__type-around__button_before") ? "before" : "after" + }(i), + s = function(t, e) { + const n = t.closest(".ck-widget"); + return e.mapDomToView(n) + }(i, e.domConverter), + a = t.editing.mapper.toModelElement(s); + this._insertParagraph(a, r), o.preventDefault(), n.stop() + })) + } + _enableInsertingParagraphsOnEnterKeypress() { + const t = this.editor, + e = t.model.document.selection, + n = t.editing.view; + this._listenToIfEnabled(n.document, "enter", ((n, o) => { + if ("atTarget" != n.eventPhase) return; + const i = e.getSelectedElement(), + r = t.editing.mapper.toViewElement(i), + s = t.model.schema; + let a; + this._insertParagraphAccordingToFakeCaretPosition() ? a = !0 : nA(r, i, s) && (this._insertParagraph(i, o.isSoft ? "before" : "after"), a = !0), a && (o.preventDefault(), n.stop()) + }), { + context: $w + }) + } + _enableInsertingParagraphsOnTypingKeystroke() { + const t = this.editor.editing.view.document; + this._listenToIfEnabled(t, "insertText", ((e, n) => { + this._insertParagraphAccordingToFakeCaretPosition() && (n.selection = t.selection) + }), { + priority: "high" + }), i.isAndroid ? this._listenToIfEnabled(t, "keydown", ((t, e) => { + 229 == e.keyCode && this._insertParagraphAccordingToFakeCaretPosition() + })) : this._listenToIfEnabled(t, "compositionstart", (() => { + this._insertParagraphAccordingToFakeCaretPosition() + }), { + priority: "high" + }) + } + _enableDeleteIntegration() { + const t = this.editor, + e = t.editing.view, + n = t.model, + o = n.schema; + this._listenToIfEnabled(e.document, "delete", ((e, i) => { + if ("atTarget" != e.eventPhase) return; + const r = oA(n.document.selection); + if (!r) return; + const s = i.direction, + a = n.document.selection.getSelectedElement(), + l = "forward" == s; + if ("before" === r === l) t.execute("delete", { + selection: n.createSelection(a, "on") + }); + else { + const e = o.getNearestSelectionRange(n.createPositionAt(a, r), s); + if (e) + if (e.isCollapsed) { + const i = n.createSelection(e.start); + if (n.modifySelection(i, { + direction: s + }), i.focus.isEqual(e.start)) { + const t = function(t, e) { + let n = e; + for (const o of e.getAncestors({ + parentFirst: !0 + })) { + if (o.childCount > 1 || t.isLimit(o)) break; + n = o + } + return n + }(o, e.start.parent); + n.deleteContent(n.createSelection(t, "on"), { + doNotAutoparagraph: !0 + }) + } else n.change((n => { + n.setSelection(e), t.execute(l ? "deleteForward" : "delete") + })) + } else n.change((n => { + n.setSelection(e), t.execute(l ? "deleteForward" : "delete") + })) + } + i.preventDefault(), e.stop() + }), { + context: $w + }) + } + _enableInsertContentIntegration() { + const t = this.editor, + e = this.editor.model, + n = e.document.selection; + this._listenToIfEnabled(t.model, "insertContent", ((t, [o, i]) => { + if (i && !i.is("documentSelection")) return; + const r = oA(n); + return r ? (t.stop(), e.change((t => { + const i = n.getSelectedElement(), + s = e.createPositionAt(i, r), + a = t.createSelection(s), + l = e.insertContent(o, a); + return t.setSelection(a), l + }))) : void 0 + }), { + priority: "high" + }) + } + _enableInsertObjectIntegration() { + const t = this.editor, + e = this.editor.model.document.selection; + this._listenToIfEnabled(t.model, "insertObject", ((t, n) => { + const [, o, i = {}] = n; + if (o && !o.is("documentSelection")) return; + const r = oA(e); + r && (i.findOptimalPosition = r, n[3] = i) + }), { + priority: "high" + }) + } + _enableDeleteContentIntegration() { + const t = this.editor, + e = this.editor.model.document.selection; + this._listenToIfEnabled(t.model, "deleteContent", ((t, [n]) => { + if (n && !n.is("documentSelection")) return; + oA(e) && t.stop() + }), { + priority: "high" + }) + } + } + + function dA(t) { + const e = t.model; + return (n, o) => { + const i = o.keyCode == mi.arrowup, + r = o.keyCode == mi.arrowdown, + s = o.shiftKey, + a = e.document.selection; + if (!i && !r) return; + const l = r; + if (s && function(t, e) { + return !t.isCollapsed && t.isBackward == e + }(a, l)) return; + const c = function(t, e, n) { + const o = t.model; + if (n) { + const t = e.isCollapsed ? e.focus : e.getLastPosition(), + n = hA(o, t, "forward"); + if (!n) return null; + const i = o.createRange(t, n), + r = uA(o.schema, i, "backward"); + return r ? o.createRange(t, r) : null + } { + const t = e.isCollapsed ? e.focus : e.getFirstPosition(), + n = hA(o, t, "backward"); + if (!n) return null; + const i = o.createRange(n, t), + r = uA(o.schema, i, "forward"); + return r ? o.createRange(r, t) : null + } + }(t, a, l); + if (c) { + if (c.isCollapsed) { + if (a.isCollapsed) return; + if (s) return + }(c.isCollapsed || function(t, e, n) { + const o = t.model, + i = t.view.domConverter; + if (n) { + const t = o.createSelection(e.start); + o.modifySelection(t), t.focus.isAtEnd || e.start.isEqual(t.focus) || (e = o.createRange(t.focus, e.end)) + } + const r = t.mapper.toViewRange(e), + s = i.viewRangeToDom(r), + a = Mo.getDomRangeRects(s); + let l; + for (const t of a) + if (void 0 !== l) { + if (Math.round(t.top) >= l) return !1; + l = Math.max(l, Math.round(t.bottom)) + } else l = Math.round(t.bottom); + return !0 + }(t, c, l)) && (e.change((t => { + const n = l ? c.end : c.start; + if (s) { + const o = e.createSelection(a.anchor); + o.setFocus(n), t.setSelection(o) + } else t.setSelection(n) + })), n.stop(), o.preventDefault(), o.stopPropagation()) + } + } + } + + function hA(t, e, n) { + const o = t.schema, + i = t.createRangeIn(e.root), + r = "forward" == n ? "elementStart" : "elementEnd"; + for (const { + previousPosition: t, + item: s, + type: a + } + of i.getWalker({ + startPosition: e, + direction: n + })) { + if (o.isLimit(s) && !o.isInline(s)) return t; + if (a == r && o.isBlock(s)) return null + } + return null + } + + function uA(t, e, n) { + const o = "backward" == n ? e.end : e.start; + if (t.checkChild(o, "$text")) return o; + for (const { + nextPosition: o + } + of e.getWalker({ + direction: n + })) + if (t.checkChild(o, "$text")) return o; + return null + } + var gA = n(3488), + mA = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(gA.Z, mA); + gA.Z.locals; + class pA extends Vi { + constructor() { + super(...arguments), this._previouslySelected = new Set + } + static get pluginName() { + return "Widget" + } + static get requires() { + return [cA, ok] + } + init() { + const t = this.editor, + e = t.editing.view, + n = e.document; + this.editor.editing.downcastDispatcher.on("selection", ((e, n, o) => { + const i = o.writer, + r = n.selection; + if (r.isCollapsed) return; + const s = r.getSelectedElement(); + if (!s) return; + const a = t.editing.mapper.toViewElement(s); + var l; + $w(a) && (o.consumable.consume(r, "selection") && i.setSelection(i.createRangeOn(a), { + fake: !0, + label: (l = a, l.getCustomProperty("widgetLabel").reduce(((t, e) => "function" == typeof e ? t ? t + ". " + e() : e() : t ? t + ". " + e : e), "")) + })) + })), this.editor.editing.downcastDispatcher.on("selection", ((t, e, n) => { + this._clearPreviouslySelectedWidgets(n.writer); + const o = n.writer, + i = o.document.selection; + let r = null; + for (const t of i.getRanges()) + for (const e of t) { + const t = e.item; + $w(t) && !fA(t, r) && (o.addClass(Uw, t), this._previouslySelected.add(t), r = t) + } + }), { + priority: "low" + }), e.addObserver(lu), this.listenTo(n, "mousedown", ((...t) => this._onMousedown(...t))), this.listenTo(n, "arrowKey", ((...t) => { + this._handleSelectionChangeOnArrowKeyPress(...t) + }), { + context: [$w, "$text"] + }), this.listenTo(n, "arrowKey", ((...t) => { + this._preventDefaultOnArrowKeyPress(...t) + }), { + context: "$root" + }), this.listenTo(n, "arrowKey", dA(this.editor.editing), { + context: "$text" + }), this.listenTo(n, "delete", ((t, e) => { + this._handleDelete("forward" == e.direction) && (e.preventDefault(), t.stop()) + }), { + context: "$root" + }) + } + _onMousedown(t, e) { + const n = this.editor, + o = n.editing.view, + r = o.document; + let s = e.target; + if (function(t) { + let e = t; + for (; e;) { + if (e.is("editableElement") && !e.is("rootElement")) return !0; + if ($w(e)) return !1; + e = e.parent + } + return !1 + }(s)) { + if ((i.isSafari || i.isGecko) && e.domEvent.detail >= 3) { + const t = n.editing.mapper, + o = s.is("attributeElement") ? s.findAncestor((t => !t.is("attributeElement"))) : s, + i = t.toModelElement(o); + e.preventDefault(), this.editor.model.change((t => { + t.setSelection(i, "in") + })) + } + return + } + if (!$w(s) && (s = s.findAncestor($w), !s)) return; + i.isAndroid && e.preventDefault(), r.isFocused || o.focus(); + const a = n.editing.mapper.toModelElement(s); + this._setSelectionOverElement(a) + } + _handleSelectionChangeOnArrowKeyPress(t, e) { + const n = e.keyCode, + o = this.editor.model, + i = o.schema, + r = o.document.selection, + s = r.getSelectedElement(), + a = wi(n, this.editor.locale.contentLanguageDirection), + l = "down" == a || "right" == a, + c = "up" == a || "down" == a; + if (s && i.isObject(s)) { + const n = l ? r.getLastPosition() : r.getFirstPosition(), + s = i.getNearestSelectionRange(n, l ? "forward" : "backward"); + return void(s && (o.change((t => { + t.setSelection(s) + })), e.preventDefault(), t.stop())) + } + if (!r.isCollapsed && !e.shiftKey) { + const n = r.getFirstPosition(), + s = r.getLastPosition(), + a = n.nodeAfter, + c = s.nodeBefore; + return void((a && i.isObject(a) || c && i.isObject(c)) && (o.change((t => { + t.setSelection(l ? s : n) + })), e.preventDefault(), t.stop())) + } + if (!r.isCollapsed) return; + const d = this._getObjectElementNextToSelection(l); + if (d && i.isObject(d)) { + if (i.isInline(d) && c) return; + this._setSelectionOverElement(d), e.preventDefault(), t.stop() + } + } + _preventDefaultOnArrowKeyPress(t, e) { + const n = this.editor.model, + o = n.schema, + i = n.document.selection.getSelectedElement(); + i && o.isObject(i) && (e.preventDefault(), t.stop()) + } + _handleDelete(t) { + const e = this.editor.model.document.selection; + if (!this.editor.model.canEditAt(e)) return; + if (!e.isCollapsed) return; + const n = this._getObjectElementNextToSelection(t); + return n ? (this.editor.model.change((t => { + let o = e.anchor.parent; + for (; o.isEmpty;) { + const e = o; + o = e.parent, t.remove(e) + } + this._setSelectionOverElement(n) + })), !0) : void 0 + } + _setSelectionOverElement(t) { + this.editor.model.change((e => { + e.setSelection(e.createRangeOn(t)) + })) + } + _getObjectElementNextToSelection(t) { + const e = this.editor.model, + n = e.schema, + o = e.document.selection, + i = e.createSelection(o); + if (e.modifySelection(i, { + direction: t ? "forward" : "backward" + }), i.isEqual(o)) return null; + const r = t ? i.focus.nodeBefore : i.focus.nodeAfter; + return r && n.isObject(r) ? r : null + } + _clearPreviouslySelectedWidgets(t) { + for (const e of this._previouslySelected) t.removeClass(Uw, e); + this._previouslySelected.clear() + } + } + + function fA(t, e) { + return !!e && Array.from(t.getAncestors()).includes(e) + } + class bA extends Vi { + constructor() { + super(...arguments), this._toolbarDefinitions = new Map + } + static get requires() { + return [jf] + } + static get pluginName() { + return "WidgetToolbarRepository" + } + init() { + const t = this.editor; + if (t.plugins.has("BalloonToolbar")) { + const e = t.plugins.get("BalloonToolbar"); + this.listenTo(e, "show", (e => { + (function(t) { + const e = t.getSelectedElement(); + return !(!e || !$w(e)) + })(t.editing.view.document.selection) && e.stop() + }), { + priority: "high" + }) + } + this._balloon = this.editor.plugins.get("ContextualBalloon"), this.on("change:isEnabled", (() => { + this._updateToolbarsVisibility() + })), this.listenTo(t.ui, "update", (() => { + this._updateToolbarsVisibility() + })), this.listenTo(t.ui.focusTracker, "change:isFocused", (() => { + this._updateToolbarsVisibility() + }), { + priority: "low" + }) + } + destroy() { + super.destroy(); + for (const t of this._toolbarDefinitions.values()) t.view.destroy() + } + register(t, { + ariaLabel: e, + items: n, + getRelatedElement: o, + balloonClassName: i = "ck-toolbar-container" + }) { + if (!n.length) return void k("widget-toolbar-no-items", { + toolbarId: t + }); + const r = this.editor, + s = r.t, + a = new Sm(r.locale); + if (a.ariaLabel = e || s("Widget toolbar"), this._toolbarDefinitions.has(t)) throw new b("widget-toolbar-duplicated", this, { + toolbarId: t + }); + const l = { + view: a, + getRelatedElement: o, + balloonClassName: i, + itemsConfig: n, + initialized: !1 + }; + r.ui.addToolbar(a, { + isContextual: !0, + beforeFocus: () => { + const t = o(r.editing.view.document.selection); + t && this._showToolbar(l, t) + }, + afterBlur: () => { + this._hideToolbar(l) + } + }), this._toolbarDefinitions.set(t, l) + } + _updateToolbarsVisibility() { + let t = 0, + e = null, + n = null; + for (const o of this._toolbarDefinitions.values()) { + const i = o.getRelatedElement(this.editor.editing.view.document.selection); + if (this.isEnabled && i) + if (this.editor.ui.focusTracker.isFocused) { + const r = i.getAncestors().length; + r > t && (t = r, e = i, n = o) + } else this._isToolbarVisible(o) && this._hideToolbar(o); + else this._isToolbarInBalloon(o) && this._hideToolbar(o) + } + n && this._showToolbar(n, e) + } + _hideToolbar(t) { + this._balloon.remove(t.view), this.stopListening(this._balloon, "change:visibleView") + } + _showToolbar(t, e) { + this._isToolbarVisible(t) ? kA(this.editor, e) : this._isToolbarInBalloon(t) || (t.initialized || (t.initialized = !0, t.view.fillFromConfig(t.itemsConfig, this.editor.ui.componentFactory)), this._balloon.add({ + view: t.view, + position: wA(this.editor, e), + balloonClassName: t.balloonClassName + }), this.listenTo(this._balloon, "change:visibleView", (() => { + for (const t of this._toolbarDefinitions.values()) + if (this._isToolbarVisible(t)) { + const e = t.getRelatedElement(this.editor.editing.view.document.selection); + kA(this.editor, e) + } + }))) + } + _isToolbarVisible(t) { + return this._balloon.visibleView === t.view + } + _isToolbarInBalloon(t) { + return this._balloon.hasView(t.view) + } + } + + function kA(t, e) { + const n = t.plugins.get("ContextualBalloon"), + o = wA(t, e); + n.updatePosition(o) + } + + function wA(t, e) { + const n = t.editing.view, + o = Kp.defaultPositions; + return { + target: n.domConverter.mapViewToDom(e), + positions: [o.northArrowSouth, o.northArrowSouthWest, o.northArrowSouthEast, o.southArrowNorth, o.southArrowNorthWest, o.southArrowNorthEast, o.viewportStickyNorth] + } + } + class AA extends(q()) { + constructor(t) { + super(), this.set("activeHandlePosition", null), this.set("proposedWidthPercents", null), this.set("proposedWidth", null), this.set("proposedHeight", null), this.set("proposedHandleHostWidth", null), this.set("proposedHandleHostHeight", null), this._options = t, this._referenceCoordinates = null + } + get originalWidth() { + return this._originalWidth + } + get originalHeight() { + return this._originalHeight + } + get originalWidthPercents() { + return this._originalWidthPercents + } + get aspectRatio() { + return this._aspectRatio + } + begin(t, e, n) { + const o = new Mo(e); + this.activeHandlePosition = function(t) { + const e = ["top-left", "top-right", "bottom-right", "bottom-left"]; + for (const n of e) + if (t.classList.contains(CA(n))) return n + }(t), this._referenceCoordinates = function(t, e) { + const n = new Mo(t), + o = e.split("-"), + i = { + x: "right" == o[1] ? n.right : n.left, + y: "bottom" == o[0] ? n.bottom : n.top + }; + return i.x += t.ownerDocument.defaultView.scrollX, i.y += t.ownerDocument.defaultView.scrollY, i + }(e, function(t) { + const e = t.split("-"), + n = { + top: "bottom", + bottom: "top", + left: "right", + right: "left" + }; + return `${n[e[0]]}-${n[e[1]]}` + }(this.activeHandlePosition)), this._originalWidth = o.width, this._originalHeight = o.height, this._aspectRatio = o.width / o.height; + const i = n.style.width; + i && i.match(/^\d+(\.\d*)?%$/) ? this._originalWidthPercents = parseFloat(i) : this._originalWidthPercents = function(t, e) { + const n = t.parentElement; + let o = parseFloat(n.ownerDocument.defaultView.getComputedStyle(n).width); + const i = 5; + let r = 0, + s = n; + for (; isNaN(o);) { + if (s = s.parentElement, ++r > i) return 0; + o = parseFloat(n.ownerDocument.defaultView.getComputedStyle(s).width) + } + return e.width / o * 100 + }(n, o) + } + update(t) { + this.proposedWidth = t.width, this.proposedHeight = t.height, this.proposedWidthPercents = t.widthPercents, this.proposedHandleHostWidth = t.handleHostWidth, this.proposedHandleHostHeight = t.handleHostHeight + } + } + + function CA(t) { + return `ck-widget__resizer__handle-${t}` + } + class _A extends cg { + constructor() { + super(); + const t = this.bindTemplate; + this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-size-view", t.to("_viewPosition", (t => t ? `ck-orientation-${t}` : ""))], + style: { + display: t.if("_isVisible", "none", (t => !t)) + } + }, + children: [{ + text: t.to("_label") + }] + }) + } + _bindToState(t, e) { + this.bind("_isVisible").to(e, "proposedWidth", e, "proposedHeight", ((t, e) => null !== t && null !== e)), this.bind("_label").to(e, "proposedHandleHostWidth", e, "proposedHandleHostHeight", e, "proposedWidthPercents", ((e, n, o) => "px" === t.unit ? `${e}×${n}` : `${o}%`)), this.bind("_viewPosition").to(e, "activeHandlePosition", e, "proposedHandleHostWidth", e, "proposedHandleHostHeight", ((t, e, n) => e < 50 || n < 50 ? "above-center" : t)) + } + _dismiss() { + this.unbind(), this._isVisible = !1 + } + } + var vA = Object.defineProperty, + yA = Object.defineProperties, + xA = Object.getOwnPropertyDescriptors, + EA = Object.getOwnPropertySymbols, + DA = Object.prototype.hasOwnProperty, + SA = Object.prototype.propertyIsEnumerable, + TA = (t, e, n) => e in t ? vA(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class BA extends(q()) { + constructor(t) { + super(), this._viewResizerWrapper = null, this._options = t, this.set("isEnabled", !0), this.set("isSelected", !1), this.bind("isVisible").to(this, "isEnabled", this, "isSelected", ((t, e) => t && e)), this.decorate("begin"), this.decorate("cancel"), this.decorate("commit"), this.decorate("updateSize"), this.on("commit", (t => { + this.state.proposedWidth || this.state.proposedWidthPercents || (this._cleanup(), t.stop()) + }), { + priority: "high" + }) + } + get state() { + return this._state + } + show() { + this._options.editor.editing.view.change((t => { + t.removeClass("ck-hidden", this._viewResizerWrapper) + })) + } + hide() { + this._options.editor.editing.view.change((t => { + t.addClass("ck-hidden", this._viewResizerWrapper) + })) + } + attach() { + const t = this, + e = this._options.viewElement; + this._options.editor.editing.view.change((n => { + const o = n.createUIElement("div", { + class: "ck ck-reset_all ck-widget__resizer" + }, (function(e) { + const n = this.toDomElement(e); + return t._appendHandles(n), t._appendSizeUI(n), n + })); + n.insert(n.createPositionAt(e, "end"), o), n.addClass("ck-widget_with-resizer", e), this._viewResizerWrapper = o, this.isVisible || this.hide() + })), this.on("change:isVisible", (() => { + this.isVisible ? (this.show(), this.redraw()) : this.hide() + })) + } + begin(t) { + this._state = new AA(this._options), this._sizeView._bindToState(this._options, this.state), this._initialViewWidth = this._options.viewElement.getStyle("width"), this.state.begin(t, this._getHandleHost(), this._getResizeHost()) + } + updateSize(t) { + const e = this._proposeNewSize(t); + this._options.editor.editing.view.change((t => { + const n = this._options.unit || "%", + o = ("%" === n ? e.widthPercents : e.width) + n; + t.setStyle("width", o, this._options.viewElement) + })); + const n = this._getHandleHost(), + o = new Mo(n), + i = Math.round(o.width), + r = Math.round(o.height), + s = new Mo(n); + var a; + e.width = Math.round(s.width), e.height = Math.round(s.height), this.redraw(o), this.state.update((a = ((t, e) => { + for (var n in e || (e = {})) DA.call(e, n) && TA(t, n, e[n]); + if (EA) + for (var n of EA(e)) SA.call(e, n) && TA(t, n, e[n]); + return t + })({}, e), yA(a, xA({ + handleHostWidth: i, + handleHostHeight: r + })))) + } + commit() { + const t = this._options.unit || "%", + e = ("%" === t ? this.state.proposedWidthPercents : this.state.proposedWidth) + t; + this._options.editor.editing.view.change((() => { + this._cleanup(), this._options.onCommit(e) + })) + } + cancel() { + this._cleanup() + } + destroy() { + this.cancel() + } + redraw(t) { + const e = this._domResizerWrapper; + if (!((n = e) && n.ownerDocument && n.ownerDocument.contains(n))) return; + var n; + const o = e.parentElement, + i = this._getHandleHost(), + r = this._viewResizerWrapper, + s = [r.getStyle("width"), r.getStyle("height"), r.getStyle("left"), r.getStyle("top")]; + let a; + if (o.isSameNode(i)) { + const e = t || new Mo(i); + a = [e.width + "px", e.height + "px", void 0, void 0] + } else a = [i.offsetWidth + "px", i.offsetHeight + "px", i.offsetLeft + "px", i.offsetTop + "px"]; + "same" !== Y(s, a) && this._options.editor.editing.view.change((t => { + t.setStyle({ + width: a[0], + height: a[1], + left: a[2], + top: a[3] + }, r) + })) + } + containsHandle(t) { + return this._domResizerWrapper.contains(t) + } + static isResizeHandle(t) { + return t.classList.contains("ck-widget__resizer__handle") + } + _cleanup() { + this._sizeView._dismiss(); + this._options.editor.editing.view.change((t => { + t.setStyle("width", this._initialViewWidth, this._options.viewElement) + })) + } + _proposeNewSize(t) { + const e = this.state, + n = { + x: (o = t).pageX, + y: o.pageY + }; + var o; + const i = !this._options.isCentered || this._options.isCentered(this), + r = { + x: e._referenceCoordinates.x - (n.x + e.originalWidth), + y: n.y - e.originalHeight - e._referenceCoordinates.y + }; + i && e.activeHandlePosition.endsWith("-right") && (r.x = n.x - (e._referenceCoordinates.x + e.originalWidth)), i && (r.x *= 2); + let s = Math.abs(e.originalWidth + r.x), + a = Math.abs(e.originalHeight + r.y); + return "width" == (s / e.aspectRatio > a ? "width" : "height") ? a = s / e.aspectRatio : s = a * e.aspectRatio, { + width: Math.round(s), + height: Math.round(a), + widthPercents: Math.min(Math.round(e.originalWidthPercents / e.originalWidth * s * 100) / 100, 100) + } + } + _getResizeHost() { + const t = this._domResizerWrapper.parentElement; + return this._options.getResizeHost(t) + } + _getHandleHost() { + const t = this._domResizerWrapper.parentElement; + return this._options.getHandleHost(t) + } + get _domResizerWrapper() { + return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper) + } + _appendHandles(t) { + const e = ["top-left", "top-right", "bottom-right", "bottom-left"]; + for (const o of e) t.appendChild(new dg({ + tag: "div", + attributes: { + class: "ck-widget__resizer__handle " + (n = o, `ck-widget__resizer__handle-${n}`) + } + }).render()); + var n + } + _appendSizeUI(t) { + this._sizeView = new _A, this._sizeView.render(), t.appendChild(this._sizeView.element) + } + } + var IA = n(8506), + PA = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(IA.Z, PA); + IA.Z.locals; + class RA extends Vi { + constructor() { + super(...arguments), this._resizers = new Map + } + static get pluginName() { + return "WidgetResize" + } + init() { + const t = this.editor.editing, + e = Po.window.document; + this.set("selectedResizer", null), this.set("_activeResizer", null), t.view.addObserver(lu), this._observer = new(So()), this.listenTo(t.view.document, "mousedown", this._mouseDownListener.bind(this), { + priority: "high" + }), this._observer.listenTo(e, "mousemove", this._mouseMoveListener.bind(this)), this._observer.listenTo(e, "mouseup", this._mouseUpListener.bind(this)), this._redrawSelectedResizerThrottled = of((() => this.redrawSelectedResizer()), 200), this.editor.ui.on("update", this._redrawSelectedResizerThrottled), this.editor.model.document.on("change", (() => { + for (const [t, e] of this._resizers) t.isAttached() || (this._resizers.delete(t), e.destroy()) + }), { + priority: "lowest" + }), this._observer.listenTo(Po.window, "resize", this._redrawSelectedResizerThrottled); + const n = this.editor.editing.view.document.selection; + n.on("change", (() => { + const t = n.getSelectedElement(), + e = this.getResizerByViewElement(t) || null; + e ? this.select(e) : this.deselect() + })) + } + redrawSelectedResizer() { + this.selectedResizer && this.selectedResizer.isVisible && this.selectedResizer.redraw() + } + destroy() { + super.destroy(), this._observer.stopListening(); + for (const t of this._resizers.values()) t.destroy(); + this._redrawSelectedResizerThrottled.cancel() + } + select(t) { + this.deselect(), this.selectedResizer = t, this.selectedResizer.isSelected = !0 + } + deselect() { + this.selectedResizer && (this.selectedResizer.isSelected = !1), this.selectedResizer = null + } + attachTo(t) { + const e = new BA(t), + n = this.editor.plugins; + if (e.attach(), n.has("WidgetToolbarRepository")) { + const t = n.get("WidgetToolbarRepository"); + e.on("begin", (() => { + t.forceDisabled("resize") + }), { + priority: "lowest" + }), e.on("cancel", (() => { + t.clearForceDisabled("resize") + }), { + priority: "highest" + }), e.on("commit", (() => { + t.clearForceDisabled("resize") + }), { + priority: "highest" + }) + } + this._resizers.set(t.viewElement, e); + const o = this.editor.editing.view.document.selection.getSelectedElement(); + return this.getResizerByViewElement(o) == e && this.select(e), e + } + getResizerByViewElement(t) { + return this._resizers.get(t) + } + _getResizerByHandle(t) { + for (const e of this._resizers.values()) + if (e.containsHandle(t)) return e + } + _mouseDownListener(t, e) { + const n = e.domTarget; + BA.isResizeHandle(n) && (this._activeResizer = this._getResizerByHandle(n) || null, this._activeResizer && (this._activeResizer.begin(n), t.stop(), e.preventDefault())) + } + _mouseMoveListener(t, e) { + this._activeResizer && this._activeResizer.updateSize(e) + } + _mouseUpListener() { + this._activeResizer && (this._activeResizer.commit(), this._activeResizer = null) + } + } + var zA = n(903), + VA = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(zA.Z, VA); + zA.Z.locals; + class OA extends Vi { + static get pluginName() { + return "DragDrop" + } + static get requires() { + return [Mw, pA] + } + init() { + const t = this.editor, + e = t.editing.view; + this._draggedRange = null, this._draggingUid = "", this._draggableElement = null, this._updateDropMarkerThrottled = of((t => this._updateDropMarker(t)), 40), this._removeDropMarkerDelayed = Bi((() => this._removeDropMarker()), 40), this._clearDraggableAttributesDelayed = Bi((() => this._clearDraggableAttributes()), 40), t.plugins.has("DragDropExperimental") ? this.forceDisabled("DragDropExperimental") : (e.addObserver(Vw), e.addObserver(lu), this._setupDragging(), this._setupContentInsertionIntegration(), this._setupClipboardInputIntegration(), this._setupDropMarker(), this._setupDraggableAttributeHandling(), this.listenTo(t, "change:isReadOnly", ((t, e, n) => { + n ? this.forceDisabled("readOnlyMode") : this.clearForceDisabled("readOnlyMode") + })), this.on("change:isEnabled", ((t, e, n) => { + n || this._finalizeDragging(!1) + })), i.isAndroid && this.forceDisabled("noAndroidSupport")) + } + destroy() { + return this._draggedRange && (this._draggedRange.detach(), this._draggedRange = null), this._updateDropMarkerThrottled.cancel(), this._removeDropMarkerDelayed.cancel(), this._clearDraggableAttributesDelayed.cancel(), super.destroy() + } + _setupDragging() { + const t = this.editor, + e = t.model, + n = e.document, + o = t.editing.view, + r = o.document; + this.listenTo(r, "dragstart", ((o, i) => { + const s = n.selection; + if (i.target && i.target.is("editableElement")) return void i.preventDefault(); + const a = i.target ? NA(i.target) : null; + if (a) { + const n = t.editing.mapper.toModelElement(a); + if (this._draggedRange = ec.fromRange(e.createRangeOn(n)), t.plugins.has("WidgetToolbarRepository")) { + t.plugins.get("WidgetToolbarRepository").forceDisabled("dragDrop") + } + } else if (!r.selection.isCollapsed) { + const t = r.selection.getSelectedElement(); + t && $w(t) || (this._draggedRange = ec.fromRange(s.getFirstRange())) + } + if (!this._draggedRange) return void i.preventDefault(); + this._draggingUid = g(); + const l = this.isEnabled && t.model.canEditAt(this._draggedRange); + i.dataTransfer.effectAllowed = l ? "copyMove" : "copy", i.dataTransfer.setData("application/ckeditor5-dragging-uid", this._draggingUid); + const c = e.createSelection(this._draggedRange.toRange()), + d = t.data.toView(e.getSelectedContent(c)); + r.fire("clipboardOutput", { + dataTransfer: i.dataTransfer, + content: d, + method: "dragstart" + }), l || (this._draggedRange.detach(), this._draggedRange = null, this._draggingUid = "") + }), { + priority: "low" + }), this.listenTo(r, "dragend", ((t, e) => { + this._finalizeDragging(!e.dataTransfer.isCanceled && "move" == e.dataTransfer.dropEffect) + }), { + priority: "low" + }), this.listenTo(r, "dragenter", (() => { + this.isEnabled && o.focus() + })), this.listenTo(r, "dragleave", (() => { + this._removeDropMarkerDelayed() + })), this.listenTo(r, "dragging", ((e, n) => { + if (!this.isEnabled) return void(n.dataTransfer.dropEffect = "none"); + this._removeDropMarkerDelayed.cancel(); + const o = FA(t, n.targetRanges, n.target); + t.model.canEditAt(o) ? (this._draggedRange || (n.dataTransfer.dropEffect = "copy"), i.isGecko || ("copy" == n.dataTransfer.effectAllowed ? n.dataTransfer.dropEffect = "copy" : ["all", "copyMove"].includes(n.dataTransfer.effectAllowed) && (n.dataTransfer.dropEffect = "move")), o && this._updateDropMarkerThrottled(o)) : n.dataTransfer.dropEffect = "none" + }), { + priority: "low" + }) + } + _setupClipboardInputIntegration() { + const t = this.editor, + e = t.editing.view.document; + this.listenTo(e, "clipboardInput", ((e, n) => { + if ("drop" != n.method) return; + const o = FA(t, n.targetRanges, n.target); + if (this._removeDropMarker(), !o || !t.model.canEditAt(o)) return this._finalizeDragging(!1), void e.stop(); + this._draggedRange && this._draggingUid != n.dataTransfer.getData("application/ckeditor5-dragging-uid") && (this._draggedRange.detach(), this._draggedRange = null, this._draggingUid = ""); + if ("move" == MA(n.dataTransfer) && this._draggedRange && this._draggedRange.containsRange(o, !0)) return this._finalizeDragging(!1), void e.stop(); + n.targetRanges = [t.editing.mapper.toViewRange(o)] + }), { + priority: "high" + }) + } + _setupContentInsertionIntegration() { + const t = this.editor.plugins.get(Mw); + t.on("contentInsertion", ((t, e) => { + if (!this.isEnabled || "drop" !== e.method) return; + const n = e.targetRanges.map((t => this.editor.editing.mapper.toModelRange(t))); + this.editor.model.change((t => t.setSelection(n))) + }), { + priority: "high" + }), t.on("contentInsertion", ((t, e) => { + if (!this.isEnabled || "drop" !== e.method) return; + const n = "move" == MA(e.dataTransfer), + o = !e.resultRange || !e.resultRange.isCollapsed; + this._finalizeDragging(o && n) + }), { + priority: "lowest" + }) + } + _setupDraggableAttributeHandling() { + const t = this.editor, + e = t.editing.view, + n = e.document; + this.listenTo(n, "mousedown", ((o, r) => { + if (i.isAndroid || !r) return; + this._clearDraggableAttributesDelayed.cancel(); + let s = NA(r.target); + if (i.isBlink && !s && !n.selection.isCollapsed) { + const t = n.selection.getSelectedElement(); + if (!t || !$w(t)) { + const t = n.selection.editableElement; + t && !t.isReadOnly && (s = t) + } + } + s && (e.change((t => { + t.setAttribute("draggable", "true", s) + })), this._draggableElement = t.editing.mapper.toModelElement(s)) + })), this.listenTo(n, "mouseup", (() => { + i.isAndroid || this._clearDraggableAttributesDelayed() + })) + } + _clearDraggableAttributes() { + const t = this.editor.editing; + t.view.change((e => { + this._draggableElement && "$graveyard" != this._draggableElement.root.rootName && e.removeAttribute("draggable", t.mapper.toViewElement(this._draggableElement)), this._draggableElement = null + })) + } + _setupDropMarker() { + const t = this.editor; + t.conversion.for("editingDowncast").markerToHighlight({ + model: "drop-target", + view: { + classes: ["ck-clipboard-drop-target-range"] + } + }), t.conversion.for("editingDowncast").markerToElement({ + model: "drop-target", + view: (e, { + writer: n + }) => { + if (t.model.schema.checkChild(e.markerRange.start, "$text")) return n.createUIElement("span", { + class: "ck ck-clipboard-drop-target-position" + }, (function(t) { + const e = this.toDomElement(t); + return e.append("⁠", t.createElement("span"), "⁠"), e + })) + } + }) + } + _updateDropMarker(t) { + const e = this.editor, + n = e.model.markers; + e.model.change((e => { + n.has("drop-target") ? n.get("drop-target").getRange().isEqual(t) || e.updateMarker("drop-target", { + range: t + }) : e.addMarker("drop-target", { + range: t, + usingOperation: !1, + affectsData: !1 + }) + })) + } + _removeDropMarker() { + const t = this.editor.model; + this._removeDropMarkerDelayed.cancel(), this._updateDropMarkerThrottled.cancel(), t.markers.has("drop-target") && t.change((t => { + t.removeMarker("drop-target") + })) + } + _finalizeDragging(t) { + const e = this.editor, + n = e.model; + if (this._removeDropMarker(), this._clearDraggableAttributes(), e.plugins.has("WidgetToolbarRepository")) { + e.plugins.get("WidgetToolbarRepository").clearForceDisabled("dragDrop") + } + this._draggingUid = "", this._draggedRange && (t && this.isEnabled && n.deleteContent(n.createSelection(this._draggedRange), { + doNotAutoparagraph: !0 + }), this._draggedRange.detach(), this._draggedRange = null) + } + } + + function FA(t, e, n) { + const o = t.model, + r = t.editing.mapper; + let s = null; + const a = e ? e[0].start : null; + if (n.is("uiElement") && (n = n.parent), s = function(t, e) { + const n = t.model, + o = t.editing.mapper; + if ($w(e)) return n.createRangeOn(o.toModelElement(e)); + if (!e.is("editableElement")) { + const t = e.findAncestor((t => $w(t) || t.is("editableElement"))); + if ($w(t)) return n.createRangeOn(o.toModelElement(t)) + } + return null + }(t, n), s) return s; + const l = function(t, e) { + const n = t.editing.mapper, + o = t.editing.view, + i = n.toModelElement(e); + if (i) return i; + const r = o.createPositionBefore(e), + s = n.findMappedViewAncestor(r); + return n.toModelElement(s) + }(t, n), + c = a ? r.toModelPosition(a) : null; + return c ? (s = function(t, e, n) { + const o = t.model; + if (!o.schema.checkChild(n, "$block")) return null; + const i = o.createPositionAt(n, 0), + r = e.path.slice(0, i.path.length), + s = o.createPositionFromPath(e.root, r), + a = s.nodeAfter; + if (a && o.schema.isObject(a)) return o.createRangeOn(a); + return null + }(t, c, l), s || (s = o.schema.getNearestSelectionRange(c, i.isGecko ? "forward" : "backward"), s || function(t, e) { + const n = t.model; + let o = e; + for (; o;) { + if (n.schema.isObject(o)) return n.createRangeOn(o); + o = o.parent + } + return null + }(t, c.parent))) : function(t, e) { + const n = t.model, + o = n.schema, + i = n.createPositionAt(e, 0); + return o.getNearestSelectionRange(i, "forward") + }(t, l) + } + + function MA(t) { + return i.isGecko ? t.dropEffect : ["all", "copyMove"].includes(t.effectAllowed) ? "move" : "copy" + } + + function NA(t) { + if (t.is("editableElement")) return null; + if (t.hasClass("ck-widget__selection-handle")) return t.findAncestor($w); + if ($w(t)) return t; + const e = t.findAncestor((t => $w(t) || t.is("editableElement"))); + return $w(e) ? e : null + } + class LA extends Vi { + static get pluginName() { + return "PastePlainText" + } + static get requires() { + return [Mw] + } + init() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = n.document, + i = e.document.selection; + let r = !1; + n.addObserver(Vw), this.listenTo(o, "keydown", ((t, e) => { + r = e.shiftKey + })), t.plugins.get(Mw).on("contentInsertion", ((t, n) => { + (r || function(t, e) { + if (t.childCount > 1) return !1; + const n = t.getChild(0); + if (e.isObject(n)) return !1; + return 0 == Array.from(n.getAttributeKeys()).length + }(n.content, e.schema)) && e.change((t => { + const o = Array.from(i.getAttributes()).filter((([t]) => e.schema.getAttributeProperties(t).isFormatting)); + i.isCollapsed || e.deleteContent(i, { + doNotAutoparagraph: !0 + }), o.push(...i.getAttributes()); + const r = t.createRangeIn(n.content); + for (const e of r.getItems()) e.is("$textProxy") && t.setAttributes(o, e) + })) + })) + } + } + class HA extends Vi { + static get pluginName() { + return "Clipboard" + } + static get requires() { + return [Mw, OA, LA] + } + } + $o("px"); + Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable; + var jA = Object.defineProperty, + qA = Object.getOwnPropertySymbols, + WA = Object.prototype.hasOwnProperty, + UA = Object.prototype.propertyIsEnumerable, + $A = (t, e, n) => e in t ? jA(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class GA extends Fi { + constructor(t) { + super(t), this._stack = [], this._createdBatches = new WeakSet, this.refresh(), this._isEnabledBasedOnSelection = !1, this.listenTo(t.data, "set", ((t, e) => { + e[1] = ((t, e) => { + for (var n in e || (e = {})) WA.call(e, n) && $A(t, n, e[n]); + if (qA) + for (var n of qA(e)) UA.call(e, n) && $A(t, n, e[n]); + return t + })({}, e[1]); + const n = e[1]; + n.batchType || (n.batchType = { + isUndoable: !1 + }) + }), { + priority: "high" + }), this.listenTo(t.data, "set", ((t, e) => { + e[1].batchType.isUndoable || this.clearStack() + })) + } + refresh() { + this.isEnabled = this._stack.length > 0 + } + get createdBatches() { + return this._createdBatches + } + addBatch(t) { + const e = this.editor.model.document.selection, + n = { + ranges: e.hasOwnRange ? Array.from(e.getRanges()) : [], + isBackward: e.isBackward + }; + this._stack.push({ + batch: t, + selection: n + }), this.refresh() + } + clearStack() { + this._stack = [], this.refresh() + } + _restoreSelection(t, e, n) { + const o = this.editor.model, + i = o.document, + r = [], + s = t.map((t => t.getTransformedByOperations(n))), + a = s.flat(); + for (const t of s) { + const e = t.filter((t => t.root != i.graveyard)).filter((t => !ZA(t, a))); + e.length && (KA(e), r.push(e[0])) + } + r.length && o.change((t => { + t.setSelection(r, { + backward: e + }) + })) + } + _undo(t, e) { + const n = this.editor.model, + o = n.document; + this._createdBatches.add(e); + const i = t.operations.slice().filter((t => t.isDocumentOperation)); + i.reverse(); + for (const t of i) { + const i = t.baseVersion + 1, + r = Array.from(o.history.getOperations(i)), + s = Gd([t.getReversed()], r, { + useRelations: !0, + document: this.editor.model.document, + padWithNoOps: !1, + forceWeakRemove: !0 + }).operationsA; + for (let i of s) { + const r = i.affectedSelectable; + r && !n.canEditAt(r) && (i = new Fd(i.baseVersion)), e.addOperation(i), n.applyOperation(i), o.history.setOperationAsUndone(t, i) + } + } + } + } + + function KA(t) { + t.sort(((t, e) => t.start.isBefore(e.start) ? -1 : 1)); + for (let e = 1; e < t.length; e++) { + const n = t[e - 1].getJoined(t[e], !0); + n && (e--, t.splice(e, 2, n)) + } + } + + function ZA(t, e) { + return e.some((e => e !== t && e.containsRange(t, !0))) + } + class JA extends GA { + execute(t = null) { + const e = t ? this._stack.findIndex((e => e.batch == t)) : this._stack.length - 1, + n = this._stack.splice(e, 1)[0], + o = this.editor.model.createBatch({ + isUndo: !0 + }); + this.editor.model.enqueueChange(o, (() => { + this._undo(n.batch, o); + const t = this.editor.model.document.history.getOperations(n.batch.baseVersion); + this._restoreSelection(n.selection.ranges, n.selection.isBackward, t), this.fire("revert", n.batch, o) + })), this.refresh() + } + } + class YA extends GA { + execute() { + const t = this._stack.pop(), + e = this.editor.model.createBatch({ + isUndo: !0 + }); + this.editor.model.enqueueChange(e, (() => { + const n = t.batch.operations[t.batch.operations.length - 1].baseVersion + 1, + o = this.editor.model.document.history.getOperations(n); + this._restoreSelection(t.selection.ranges, t.selection.isBackward, o), this._undo(t.batch, e) + })), this.refresh() + } + } + class QA extends Vi { + constructor() { + super(...arguments), this._batchRegistry = new WeakSet + } + static get pluginName() { + return "UndoEditing" + } + init() { + const t = this.editor; + this._undoCommand = new JA(t), this._redoCommand = new YA(t), t.commands.add("undo", this._undoCommand), t.commands.add("redo", this._redoCommand), this.listenTo(t.model, "applyOperation", ((t, e) => { + const n = e[0]; + if (!n.isDocumentOperation) return; + const o = n.batch, + i = this._redoCommand.createdBatches.has(o), + r = this._undoCommand.createdBatches.has(o); + this._batchRegistry.has(o) || (this._batchRegistry.add(o), o.isUndoable && (i ? this._undoCommand.addBatch(o) : r || (this._undoCommand.addBatch(o), this._redoCommand.clearStack()))) + }), { + priority: "highest" + }), this.listenTo(this._undoCommand, "revert", ((t, e, n) => { + this._redoCommand.addBatch(n) + })), t.keystrokes.set("CTRL+Z", "undo"), t.keystrokes.set("CTRL+Y", "redo"), t.keystrokes.set("CTRL+SHIFT+Z", "redo") + } + } + const XA = '', + tC = ''; + class eC extends Vi { + static get pluginName() { + return "UndoUI" + } + init() { + const t = this.editor, + e = t.locale, + n = t.t, + o = "ltr" == e.uiLanguageDirection ? XA : tC, + i = "ltr" == e.uiLanguageDirection ? tC : XA; + this._addButton("undo", n("Undo"), "CTRL+Z", o), this._addButton("redo", n("Redo"), "CTRL+Y", i) + } + _addButton(t, e, n, o) { + const i = this.editor; + i.ui.componentFactory.add(t, (r => { + const s = i.commands.get(t), + a = new Mg(r); + return a.set({ + label: e, + icon: o, + keystroke: n, + tooltip: !0 + }), a.bind("isEnabled").to(s, "isEnabled"), this.listenTo(a, "execute", (() => { + i.execute(t), i.editing.view.focus() + })), a + })) + } + } + class nC extends Vi { + static get requires() { + return [QA, eC] + } + static get pluginName() { + return "Undo" + } + } + + function oC(t) { + return t.createContainerElement("figure", { + class: "image" + }, [t.createEmptyElement("img"), t.createSlot("children")]) + } + + function iC(t, e) { + const n = t.plugins.get("ImageUtils"), + o = t.plugins.has("ImageInlineEditing") && t.plugins.has("ImageBlockEditing"); + return t => { + if (!n.isInlineImageView(t)) return null; + if (!o) return i(t); + return ("block" == t.getStyle("display") || t.findAncestor(n.isBlockImageView) ? "imageBlock" : "imageInline") !== e ? null : i(t) + }; + + function i(t) { + const e = { + name: !0 + }; + return t.hasAttribute("src") && (e.attributes = ["src"]), e + } + } + + function rC(t, e) { + const n = Ei(e.getSelectedBlocks()); + return !n || t.isObject(n) || n.isEmpty && "listItem" != n.name ? "imageBlock" : "imageInline" + } + var sC = Object.defineProperty, + aC = Object.getOwnPropertySymbols, + lC = Object.prototype.hasOwnProperty, + cC = Object.prototype.propertyIsEnumerable, + dC = (t, e, n) => e in t ? sC(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + hC = (t, e) => { + for (var n in e || (e = {})) lC.call(e, n) && dC(t, n, e[n]); + if (aC) + for (var n of aC(e)) cC.call(e, n) && dC(t, n, e[n]); + return t + }; + class uC extends Vi { + static get pluginName() { + return "ImageUtils" + } + isImage(t) { + return this.isInlineImage(t) || this.isBlockImage(t) + } + isInlineImageView(t) { + return !!t && t.is("element", "img") + } + isBlockImageView(t) { + return !!t && t.is("element", "figure") && t.hasClass("image") + } + insertImage(t = {}, e = null, n = null) { + const o = this.editor, + i = o.model, + r = i.document.selection; + n = gC(o, e || r, n), t = hC(hC({}, Object.fromEntries(r.getAttributes())), t); + for (const e in t) i.schema.checkAttribute(n, e) || delete t[e]; + return i.change((o => { + const r = o.createElement(n, t); + return i.insertObject(r, e, null, { + setSelection: "on", + findOptimalPosition: e || "imageInline" == n ? void 0 : "auto" + }), r.parent ? r : null + })) + } + getClosestSelectedImageWidget(t) { + const e = t.getFirstPosition(); + if (!e) return null; + const n = t.getSelectedElement(); + if (n && this.isImageWidget(n)) return n; + let o = e.parent; + for (; o;) { + if (o.is("element") && this.isImageWidget(o)) return o; + o = o.parent + } + return null + } + getClosestSelectedImageElement(t) { + const e = t.getSelectedElement(); + return this.isImage(e) ? e : t.getFirstPosition().findAncestor("imageBlock") + } + isImageAllowed() { + const t = this.editor.model.document.selection; + return function(t, e) { + const n = gC(t, e, null); + if ("imageBlock" == n) { + const n = function(t, e) { + const n = Qw(t, e), + o = n.start.parent; + if (o.isEmpty && !o.is("element", "$root")) return o.parent; + return o + }(e, t.model); + if (t.model.schema.checkChild(n, "imageBlock")) return !0 + } else if (t.model.schema.checkChild(e.focus, "imageInline")) return !0; + return !1 + }(this.editor, t) && function(t) { + return [...t.focus.getAncestors()].every((t => !t.is("element", "imageBlock"))) + }(t) + } + toImageWidget(t, e, n) { + e.setCustomProperty("image", !0, t); + return Gw(t, e, { + label: () => { + const e = this.findViewImgElement(t).getAttribute("alt"); + return e ? `${e} ${n}` : n + } + }) + } + isImageWidget(t) { + return !!t.getCustomProperty("image") && $w(t) + } + isBlockImage(t) { + return !!t && t.is("element", "imageBlock") + } + isInlineImage(t) { + return !!t && t.is("element", "imageInline") + } + findViewImgElement(t) { + if (this.isInlineImageView(t)) return t; + const e = this.editor.editing.view; + for (const { + item: n + } + of e.createRangeIn(t)) + if (this.isInlineImageView(n)) return n + } + } + + function gC(t, e, n) { + const o = t.model.schema, + i = t.config.get("image.insert.type"); + return t.plugins.has("ImageBlockEditing") ? t.plugins.has("ImageInlineEditing") ? n || ("inline" === i ? "imageInline" : "block" === i ? "imageBlock" : e.is("selection") ? rC(o, e) : o.checkChild(e, "imageInline") ? "imageInline" : "imageBlock") : "imageBlock" : "imageInline" + } + Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable; + new RegExp(String(/^(http(s)?:\/\/)?[\w-]+\.[\w.~:/[\]@!$&'()*+,;=%-]+/.source + /\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)/.source + /(\?[\w.~:/[\]@!$&'()*+,;=%-]*)?/.source + /(#[\w.~:/[\]@!$&'()*+,;=%-]*)?$/.source)); + class mC extends Fi { + refresh() { + const t = this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection); + this.isEnabled = !!t, this.isEnabled && t.hasAttribute("alt") ? this.value = t.getAttribute("alt") : this.value = !1 + } + execute(t) { + const e = this.editor, + n = e.plugins.get("ImageUtils"), + o = e.model, + i = n.getClosestSelectedImageElement(o.document.selection); + o.change((e => { + e.setAttribute("alt", t.newValue, i) + })) + } + } + class pC extends Vi { + static get requires() { + return [uC] + } + static get pluginName() { + return "ImageTextAlternativeEditing" + } + init() { + this.editor.commands.add("imageTextAlternative", new mC(this.editor)) + } + } + var fC = n(1905), + bC = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(fC.Z, bC); + fC.Z.locals; + class kC extends cg { + constructor(t) { + super(t); + const e = this.locale.t; + this.focusTracker = new Di, this.keystrokes = new Si, this.labeledInput = this._createLabeledInputView(), this.saveButtonView = this._createButton(e("Save"), eg.check, "ck-button-save"), this.saveButtonView.type = "submit", this.cancelButtonView = this._createButton(e("Cancel"), eg.cancel, "ck-button-cancel", "cancel"), this._focusables = new sg, this._focusCycler = new wm({ + focusables: this._focusables, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: "shift + tab", + focusNext: "tab" + } + }), this.setTemplate({ + tag: "form", + attributes: { + class: ["ck", "ck-text-alternative-form", "ck-responsive-form"], + tabindex: "-1" + }, + children: [this.labeledInput, this.saveButtonView, this.cancelButtonView] + }) + } + render() { + super.render(), this.keystrokes.listenTo(this.element), ig({ + view: this + }), [this.labeledInput, this.saveButtonView, this.cancelButtonView].forEach((t => { + this._focusables.add(t), this.focusTracker.add(t.element) + })) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + _createButton(t, e, n, o) { + const i = new Mg(this.locale); + return i.set({ + label: t, + icon: e, + tooltip: !0 + }), i.extendTemplate({ + attributes: { + class: n + } + }), o && i.delegate("execute").to(this, o), i + } + _createLabeledInputView() { + const t = this.locale.t, + e = new sm(this.locale, Jm); + return e.label = t("Text alternative"), e + } + } + + function wC(t) { + const e = t.editing.view, + n = Kp.defaultPositions, + o = t.plugins.get("ImageUtils"); + return { + target: e.domConverter.mapViewToDom(o.getClosestSelectedImageWidget(e.document.selection)), + positions: [n.northArrowSouth, n.northArrowSouthWest, n.northArrowSouthEast, n.southArrowNorth, n.southArrowNorthWest, n.southArrowNorthEast, n.viewportStickyNorth] + } + } + class AC extends Vi { + static get requires() { + return [jf] + } + static get pluginName() { + return "ImageTextAlternativeUI" + } + init() { + this._createButton() + } + destroy() { + super.destroy(), this._form && this._form.destroy() + } + _createButton() { + const t = this.editor, + e = t.t; + t.ui.componentFactory.add("imageTextAlternative", (n => { + const o = t.commands.get("imageTextAlternative"), + i = new Mg(n); + return i.set({ + label: e("Change image text alternative"), + icon: eg.lowVision, + tooltip: !0 + }), i.bind("isEnabled").to(o, "isEnabled"), i.bind("isOn").to(o, "value", (t => !!t)), this.listenTo(i, "execute", (() => { + this._showForm() + })), i + })) + } + _createForm() { + const t = this.editor, + e = t.editing.view.document, + n = t.plugins.get("ImageUtils"); + this._balloon = this.editor.plugins.get("ContextualBalloon"), this._form = new(og(kC))(t.locale), this._form.render(), this.listenTo(this._form, "submit", (() => { + t.execute("imageTextAlternative", { + newValue: this._form.labeledInput.fieldView.element.value + }), this._hideForm(!0) + })), this.listenTo(this._form, "cancel", (() => { + this._hideForm(!0) + })), this._form.keystrokes.set("Esc", ((t, e) => { + this._hideForm(!0), e() + })), this.listenTo(t.ui, "update", (() => { + n.getClosestSelectedImageWidget(e.selection) ? this._isVisible && function(t) { + const e = t.plugins.get("ContextualBalloon"); + if (t.plugins.get("ImageUtils").getClosestSelectedImageWidget(t.editing.view.document.selection)) { + const n = wC(t); + e.updatePosition(n) + } + }(t) : this._hideForm(!0) + })), ng({ + emitter: this._form, + activator: () => this._isVisible, + contextElements: () => [this._balloon.view.element], + callback: () => this._hideForm() + }) + } + _showForm() { + if (this._isVisible) return; + this._form || this._createForm(); + const t = this.editor, + e = t.commands.get("imageTextAlternative"), + n = this._form.labeledInput; + this._form.disableCssTransitions(), this._isInBalloon || this._balloon.add({ + view: this._form, + position: wC(t) + }), n.fieldView.value = n.fieldView.element.value = e.value || "", this._form.labeledInput.fieldView.select(), this._form.enableCssTransitions() + } + _hideForm(t = !1) { + this._isInBalloon && (this._form.focusTracker.isFocused && this._form.saveButtonView.focus(), this._balloon.remove(this._form), t && this.editor.editing.view.focus()) + } + get _isVisible() { + return !!this._balloon && this._balloon.visibleView === this._form + } + get _isInBalloon() { + return !!this._balloon && this._balloon.hasView(this._form) + } + } + class CC extends Vi { + static get requires() { + return [pC, AC] + } + static get pluginName() { + return "ImageTextAlternative" + } + } + + function _C(t, e) { + const n = (e, n, o) => { + if (!o.consumable.consume(n.item, e.name)) return; + const i = o.writer, + r = o.mapper.toViewElement(n.item), + s = t.findViewImgElement(r); + if (null === n.attributeNewValue) { + const t = n.attributeOldValue; + t && t.data && (i.removeAttribute("srcset", s), i.removeAttribute("sizes", s), t.width && i.removeAttribute("width", s)) + } else { + const t = n.attributeNewValue; + t && t.data && (i.setAttribute("srcset", t.data, s), i.setAttribute("sizes", "100vw", s), t.width && i.setAttribute("width", t.width, s)) + } + }; + return t => { + t.on(`attribute:srcset:${e}`, n) + } + } + + function vC(t, e, n) { + const o = (e, n, o) => { + if (!o.consumable.consume(n.item, e.name)) return; + const i = o.writer, + r = o.mapper.toViewElement(n.item), + s = t.findViewImgElement(r); + i.setAttribute(n.attributeKey, n.attributeNewValue || "", s) + }; + return t => { + t.on(`attribute:${n}:${e}`, o) + } + } + class yC extends Aa { + observe(t) { + this.listenTo(t, "load", ((t, e) => { + const n = e.target; + this.checkShouldIgnoreEventFromTarget(n) || "IMG" == n.tagName && this._fireEvents(e) + }), { + useCapture: !0 + }) + } + stopObserving(t) { + this.stopListening(t) + } + _fireEvents(t) { + this.isEnabled && (this.document.fire("layoutChanged"), this.document.fire("imageLoaded", t)) + } + } + var xC = Object.defineProperty, + EC = Object.getOwnPropertySymbols, + DC = Object.prototype.hasOwnProperty, + SC = Object.prototype.propertyIsEnumerable, + TC = (t, e, n) => e in t ? xC(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + BC = (t, e) => { + for (var n in e || (e = {})) DC.call(e, n) && TC(t, n, e[n]); + if (EC) + for (var n of EC(e)) SC.call(e, n) && TC(t, n, e[n]); + return t + }; + class IC extends Fi { + constructor(t) { + super(t); + const e = t.config.get("image.insert.type"); + t.plugins.has("ImageBlockEditing") || "block" === e && k("image-block-plugin-required"), t.plugins.has("ImageInlineEditing") || "inline" === e && k("image-inline-plugin-required") + } + refresh() { + const t = this.editor.plugins.get("ImageUtils"); + this.isEnabled = t.isImageAllowed() + } + execute(t) { + const e = Ai(t.source), + n = this.editor.model.document.selection, + o = this.editor.plugins.get("ImageUtils"), + i = Object.fromEntries(n.getAttributes()); + e.forEach(((t, e) => { + const r = n.getSelectedElement(); + if ("string" == typeof t && (t = { + src: t + }), e && r && o.isImage(r)) { + const e = this.editor.model.createPositionAfter(r); + o.insertImage(BC(BC({}, t), i), e) + } else o.insertImage(BC(BC({}, t), i)) + })) + } + } + class PC extends Fi { + refresh() { + const t = this.editor.plugins.get("ImageUtils"), + e = this.editor.model.document.selection.getSelectedElement(); + this.isEnabled = t.isImage(e), this.value = this.isEnabled ? e.getAttribute("src") : null + } + execute(t) { + const e = this.editor.model.document.selection.getSelectedElement(); + this.editor.model.change((n => { + n.setAttribute("src", t.source, e), n.removeAttribute("srcset", e), n.removeAttribute("sizes", e) + })) + } + } + class RC extends Vi { + static get requires() { + return [uC] + } + static get pluginName() { + return "ImageEditing" + } + init() { + const t = this.editor, + e = t.conversion; + t.editing.view.addObserver(yC), e.for("upcast").attributeToAttribute({ + view: { + name: "img", + key: "alt" + }, + model: "alt" + }).attributeToAttribute({ + view: { + name: "img", + key: "srcset" + }, + model: { + key: "srcset", + value: t => { + const e = { + data: t.getAttribute("srcset") + }; + return t.hasAttribute("width") && (e.width = t.getAttribute("width")), e + } + } + }); + const n = new IC(t), + o = new PC(t); + t.commands.add("insertImage", n), t.commands.add("replaceImageSource", o), t.commands.add("imageInsert", n) + } + } + class zC extends Fi { + constructor(t, e) { + super(t), this._modelElementName = e + } + refresh() { + const t = this.editor.plugins.get("ImageUtils"), + e = t.getClosestSelectedImageElement(this.editor.model.document.selection); + "imageBlock" === this._modelElementName ? this.isEnabled = t.isInlineImage(e) : this.isEnabled = t.isBlockImage(e) + } + execute() { + const t = this.editor, + e = this.editor.model, + n = t.plugins.get("ImageUtils"), + o = n.getClosestSelectedImageElement(e.document.selection), + i = Object.fromEntries(o.getAttributes()); + return i.src || i.uploadId ? e.change((t => { + const r = Array.from(e.markers).filter((t => t.getRange().containsItem(o))), + s = n.insertImage(i, e.createSelection(o, "on"), this._modelElementName); + if (!s) return null; + const a = t.createRangeOn(s); + for (const e of r) { + const n = e.getRange(), + o = "$graveyard" != n.root.rootName ? n.getJoined(a, !0) : a; + t.updateMarker(e, { + range: o + }) + } + return { + oldElement: o, + newElement: s + } + })) : null + } + } + class VC extends Vi { + static get requires() { + return [RC, uC, Mw] + } + static get pluginName() { + return "ImageBlockEditing" + } + init() { + const t = this.editor; + t.model.schema.register("imageBlock", { + inheritAllFrom: "$blockObject", + allowAttributes: ["alt", "src", "srcset"] + }), this._setupConversion(), t.plugins.has("ImageInlineEditing") && (t.commands.add("imageTypeBlock", new zC(this.editor, "imageBlock")), this._setupClipboardIntegration()) + } + _setupConversion() { + const t = this.editor, + e = t.t, + n = t.conversion, + o = t.plugins.get("ImageUtils"); + n.for("dataDowncast").elementToStructure({ + model: "imageBlock", + view: (t, { + writer: e + }) => oC(e) + }), n.for("editingDowncast").elementToStructure({ + model: "imageBlock", + view: (t, { + writer: n + }) => o.toImageWidget(oC(n), n, e("image widget")) + }), n.for("downcast").add(vC(o, "imageBlock", "src")).add(vC(o, "imageBlock", "alt")).add(_C(o, "imageBlock")), n.for("upcast").elementToElement({ + view: iC(t, "imageBlock"), + model: (t, { + writer: e + }) => e.createElement("imageBlock", t.hasAttribute("src") ? { + src: t.getAttribute("src") + } : void 0) + }).add(function(t) { + const e = (e, n, o) => { + if (!o.consumable.test(n.viewItem, { + name: !0, + classes: "image" + })) return; + const i = t.findViewImgElement(n.viewItem); + if (!i || !o.consumable.test(i, { + name: !0 + })) return; + o.consumable.consume(n.viewItem, { + name: !0, + classes: "image" + }); + const r = Ei(o.convertItem(i, n.modelCursor).modelRange.getItems()); + r ? (o.convertChildren(n.viewItem, r), o.updateConversionResult(r, n)) : o.consumable.revert(n.viewItem, { + name: !0, + classes: "image" + }) + }; + return t => { + t.on("element:figure", e) + } + }(o)) + } + _setupClipboardIntegration() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = t.plugins.get("ImageUtils"), + i = t.plugins.get("ClipboardPipeline"); + this.listenTo(i, "inputTransformation", ((i, r) => { + const s = Array.from(r.content.getChildren()); + let a; + if (!s.every(o.isInlineImageView)) return; + a = r.targetRanges ? t.editing.mapper.toModelRange(r.targetRanges[0]) : e.document.selection.getFirstRange(); + const l = e.createSelection(a); + if ("imageBlock" === rC(e.schema, l)) { + const t = new cu(n.document), + e = s.map((e => t.createElement("figure", { + class: "image" + }, e))); + r.content = t.createDocumentFragment(e) + } + })) + } + } + var OC = n(3508), + FC = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(OC.Z, FC); + OC.Z.locals; + class MC extends Vi { + static get requires() { + return [VC, pA, CC] + } + static get pluginName() { + return "ImageBlock" + } + } + class NC extends Vi { + static get requires() { + return [RC, uC, Mw] + } + static get pluginName() { + return "ImageInlineEditing" + } + init() { + const t = this.editor, + e = t.model.schema; + e.register("imageInline", { + inheritAllFrom: "$inlineObject", + allowAttributes: ["alt", "src", "srcset"] + }), e.addChildCheck(((t, e) => { + if (t.endsWith("caption") && "imageInline" === e.name) return !1 + })), this._setupConversion(), t.plugins.has("ImageBlockEditing") && (t.commands.add("imageTypeInline", new zC(this.editor, "imageInline")), this._setupClipboardIntegration()) + } + _setupConversion() { + const t = this.editor, + e = t.t, + n = t.conversion, + o = t.plugins.get("ImageUtils"); + n.for("dataDowncast").elementToElement({ + model: "imageInline", + view: (t, { + writer: e + }) => e.createEmptyElement("img") + }), n.for("editingDowncast").elementToStructure({ + model: "imageInline", + view: (t, { + writer: n + }) => o.toImageWidget(function(t) { + return t.createContainerElement("span", { + class: "image-inline" + }, t.createEmptyElement("img")) + }(n), n, e("image widget")) + }), n.for("downcast").add(vC(o, "imageInline", "src")).add(vC(o, "imageInline", "alt")).add(_C(o, "imageInline")), n.for("upcast").elementToElement({ + view: iC(t, "imageInline"), + model: (t, { + writer: e + }) => e.createElement("imageInline", t.hasAttribute("src") ? { + src: t.getAttribute("src") + } : void 0) + }) + } + _setupClipboardIntegration() { + const t = this.editor, + e = t.model, + n = t.editing.view, + o = t.plugins.get("ImageUtils"), + i = t.plugins.get("ClipboardPipeline"); + this.listenTo(i, "inputTransformation", ((i, r) => { + const s = Array.from(r.content.getChildren()); + let a; + if (!s.every(o.isBlockImageView)) return; + a = r.targetRanges ? t.editing.mapper.toModelRange(r.targetRanges[0]) : e.document.selection.getFirstRange(); + const l = e.createSelection(a); + if ("imageInline" === rC(e.schema, l)) { + const t = new cu(n.document), + e = s.map((e => 1 === e.childCount ? (Array.from(e.getAttributes()).forEach((n => t.setAttribute(...n, o.findViewImgElement(e)))), e.getChild(0)) : e)); + r.content = t.createDocumentFragment(e) + } + })) + } + } + class LC extends Vi { + static get requires() { + return [NC, pA, CC] + } + static get pluginName() { + return "ImageInline" + } + } + class HC extends Vi { + static get pluginName() { + return "ImageCaptionUtils" + } + static get requires() { + return [uC] + } + getCaptionFromImageModelElement(t) { + for (const e of t.getChildren()) + if (e && e.is("element", "caption")) return e; + return null + } + getCaptionFromModelSelection(t) { + const e = this.editor.plugins.get("ImageUtils"), + n = t.getFirstPosition().findAncestor("caption"); + return n && e.isBlockImage(n.parent) ? n : null + } + matchImageCaptionViewElement(t) { + const e = this.editor.plugins.get("ImageUtils"); + return "figcaption" == t.name && e.isBlockImageView(t.parent) ? { + name: !0 + } : null + } + } + class jC extends Fi { + refresh() { + const t = this.editor, + e = t.plugins.get("ImageCaptionUtils"), + n = t.plugins.get("ImageUtils"); + if (!t.plugins.has(VC)) return this.isEnabled = !1, void(this.value = !1); + const o = t.model.document.selection, + i = o.getSelectedElement(); + if (!i) { + const t = e.getCaptionFromModelSelection(o); + return this.isEnabled = !!t, void(this.value = !!t) + } + this.isEnabled = n.isImage(i), this.isEnabled ? this.value = !!e.getCaptionFromImageModelElement(i) : this.value = !1 + } + execute(t = {}) { + const { + focusCaptionOnShow: e + } = t; + this.editor.model.change((t => { + this.value ? this._hideImageCaption(t) : this._showImageCaption(t, e) + })) + } + _showImageCaption(t, e) { + const n = this.editor.model.document.selection, + o = this.editor.plugins.get("ImageCaptionEditing"), + i = this.editor.plugins.get("ImageUtils"); + let r = n.getSelectedElement(); + const s = o._getSavedCaption(r); + i.isInlineImage(r) && (this.editor.execute("imageTypeBlock"), r = n.getSelectedElement()); + const a = s || t.createElement("caption"); + t.append(a, r), e && t.setSelection(a, "in") + } + _hideImageCaption(t) { + const e = this.editor, + n = e.model.document.selection, + o = e.plugins.get("ImageCaptionEditing"), + i = e.plugins.get("ImageCaptionUtils"); + let r, s = n.getSelectedElement(); + s ? r = i.getCaptionFromImageModelElement(s) : (r = i.getCaptionFromModelSelection(n), s = r.parent), o._saveCaption(s, r), t.setSelection(s, "on"), t.remove(r) + } + } + class qC extends Vi { + constructor(t) { + super(t), this._savedCaptionsMap = new WeakMap + } + static get requires() { + return [uC, HC] + } + static get pluginName() { + return "ImageCaptionEditing" + } + init() { + const t = this.editor, + e = t.model.schema; + e.isRegistered("caption") ? e.extend("caption", { + allowIn: "imageBlock" + }) : e.register("caption", { + allowIn: "imageBlock", + allowContentOf: "$block", + isLimit: !0 + }), t.commands.add("toggleImageCaption", new jC(this.editor)), this._setupConversion(), this._setupImageTypeCommandsIntegration(), this._registerCaptionReconversion() + } + _setupConversion() { + const t = this.editor, + e = t.editing.view, + n = t.plugins.get("ImageUtils"), + o = t.plugins.get("ImageCaptionUtils"), + i = t.t; + t.conversion.for("upcast").elementToElement({ + view: t => o.matchImageCaptionViewElement(t), + model: "caption" + }), t.conversion.for("dataDowncast").elementToElement({ + model: "caption", + view: (t, { + writer: e + }) => n.isBlockImage(t.parent) ? e.createContainerElement("figcaption") : null + }), t.conversion.for("editingDowncast").elementToElement({ + model: "caption", + view: (t, { + writer: o + }) => { + if (!n.isBlockImage(t.parent)) return null; + const r = o.createEditableElement("figcaption"); + o.setCustomProperty("imageCaption", !0, r), Zi({ + view: e, + element: r, + text: i("Enter image caption"), + keepOnFocus: !0 + }); + const s = t.parent.getAttribute("alt"); + return Yw(r, o, { + label: s ? i("Caption for image: %0", [s]) : i("Caption for the image") + }) + } + }) + } + _setupImageTypeCommandsIntegration() { + const t = this.editor, + e = t.plugins.get("ImageUtils"), + n = t.plugins.get("ImageCaptionUtils"), + o = t.commands.get("imageTypeInline"), + i = t.commands.get("imageTypeBlock"), + r = t => { + if (!t.return) return; + const { + oldElement: o, + newElement: i + } = t.return; + if (!o) return; + if (e.isBlockImage(o)) { + const t = n.getCaptionFromImageModelElement(o); + if (t) return void this._saveCaption(i, t) + } + const r = this._getSavedCaption(o); + r && this._saveCaption(i, r) + }; + o && this.listenTo(o, "execute", r, { + priority: "low" + }), i && this.listenTo(i, "execute", r, { + priority: "low" + }) + } + _getSavedCaption(t) { + const e = this._savedCaptionsMap.get(t); + return e ? vl.fromJSON(e) : null + } + _saveCaption(t, e) { + this._savedCaptionsMap.set(t, e.toJSON()) + } + _registerCaptionReconversion() { + const t = this.editor, + e = t.model, + n = t.plugins.get("ImageUtils"), + o = t.plugins.get("ImageCaptionUtils"); + e.document.on("change:data", (() => { + const i = e.document.differ.getChanges(); + for (const e of i) { + if ("alt" !== e.attributeKey) continue; + const i = e.range.start.nodeAfter; + if (n.isBlockImage(i)) { + const e = o.getCaptionFromImageModelElement(i); + if (!e) return; + t.editing.reconvertItem(e) + } + } + })) + } + } + class WC extends Vi { + static get requires() { + return [HC] + } + static get pluginName() { + return "ImageCaptionUI" + } + init() { + const t = this.editor, + e = t.editing.view, + n = t.plugins.get("ImageCaptionUtils"), + o = t.t; + t.ui.componentFactory.add("toggleImageCaption", (i => { + const r = t.commands.get("toggleImageCaption"), + s = new Mg(i); + return s.set({ + icon: eg.caption, + tooltip: !0, + isToggleable: !0 + }), s.bind("isOn", "isEnabled").to(r, "value", "isEnabled"), s.bind("label").to(r, "value", (t => o(t ? "Toggle caption off" : "Toggle caption on"))), this.listenTo(s, "execute", (() => { + t.execute("toggleImageCaption", { + focusCaptionOnShow: !0 + }); + const o = n.getCaptionFromModelSelection(t.model.document.selection); + if (o) { + const n = t.editing.mapper.toViewElement(o); + e.scrollToTheSelection(), e.change((t => { + t.addClass("image__caption_highlighted", n) + })) + } + t.editing.view.focus() + })), s + })) + } + } + var UC = n(2640), + $C = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(UC.Z, $C); + UC.Z.locals; + + function GC(t) { + const e = t.map((t => t.replace("+", "\\+"))); + return new RegExp(`^image\\/(${e.join("|")})$`) + } + + function KC(t) { + return new Promise(((e, n) => { + const o = t.getAttribute("src"); + fetch(o).then((t => t.blob())).then((t => { + const n = ZC(t, o), + i = n.replace("image/", ""), + r = new File([t], `image.${i}`, { + type: n + }); + e(r) + })).catch((t => t && "TypeError" === t.name ? function(t) { + return function(t) { + return new Promise(((e, n) => { + const o = Po.document.createElement("img"); + o.addEventListener("load", (() => { + const t = Po.document.createElement("canvas"); + t.width = o.width, t.height = o.height; + t.getContext("2d").drawImage(o, 0, 0), t.toBlob((t => t ? e(t) : n())) + })), o.addEventListener("error", (() => n())), o.src = t + })) + }(t).then((e => { + const n = ZC(e, t), + o = n.replace("image/", ""); + return new File([e], `image.${o}`, { + type: n + }) + })) + }(o).then(e).catch(n) : n(t))) + })) + } + + function ZC(t, e) { + return t.type ? t.type : e.match(/data:(image\/\w+);base64/) ? e.match(/data:(image\/\w+);base64/)[1].toLowerCase() : "image/jpeg" + } + class JC extends Vi { + static get pluginName() { + return "ImageUploadUI" + } + init() { + const t = this.editor, + e = t.t, + n = n => { + const o = new Mb(n), + i = t.commands.get("uploadImage"), + r = t.config.get("image.upload.types"), + s = GC(r); + return o.set({ + acceptedType: r.map((t => `image/${t}`)).join(","), + allowMultipleFiles: !0 + }), o.buttonView.set({ + label: e("Insert image"), + icon: eg.image, + tooltip: !0 + }), o.buttonView.bind("isEnabled").to(i), o.on("done", ((e, n) => { + const o = Array.from(n).filter((t => s.test(t.type))); + o.length && (t.execute("uploadImage", { + file: o + }), t.editing.view.focus()) + })), o + }; + t.ui.componentFactory.add("uploadImage", n), t.ui.componentFactory.add("imageUpload", n) + } + } + var YC = n(3689), + QC = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(YC.Z, QC); + YC.Z.locals; + var XC = n(4036), + t_ = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(XC.Z, t_); + XC.Z.locals; + var e_ = n(3773), + n_ = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(e_.Z, n_); + e_.Z.locals; + class o_ extends Vi { + constructor(t) { + super(t), this.uploadStatusChange = (t, e, n) => { + const o = this.editor, + i = e.item, + r = i.getAttribute("uploadId"); + if (!n.consumable.consume(e.item, t.name)) return; + const s = o.plugins.get("ImageUtils"), + a = o.plugins.get(Ob), + l = r ? e.attributeNewValue : null, + c = this.placeholder, + d = o.editing.mapper.toViewElement(i), + h = n.writer; + if ("reading" == l) return i_(d, h), void r_(s, c, d, h); + if ("uploading" == l) { + const t = a.loaders.get(r); + return i_(d, h), void(t ? (s_(d, h), function(t, e, n, o) { + const i = function(t) { + const e = t.createUIElement("div", { + class: "ck-progress-bar" + }); + return t.setCustomProperty("progressBar", !0, e), e + }(e); + e.insert(e.createPositionAt(t, "end"), i), n.on("change:uploadedPercent", ((t, e, n) => { + o.change((t => { + t.setStyle("width", n + "%", i) + })) + })) + }(d, h, t, o.editing.view), function(t, e, n, o) { + if (o.data) { + const i = t.findViewImgElement(e); + n.setAttribute("src", o.data, i) + } + }(s, d, h, t)) : r_(s, c, d, h)) + } + "complete" == l && a.loaders.get(r) && function(t, e, n) { + const o = e.createUIElement("div", { + class: "ck-image-upload-complete-icon" + }); + e.insert(e.createPositionAt(t, "end"), o), setTimeout((() => { + n.change((t => t.remove(t.createRangeOn(o)))) + }), 3e3) + }(d, h, o.editing.view), + function(t, e) { + l_(t, e, "progressBar") + }(d, h), s_(d, h), + function(t, e) { + e.removeClass("ck-appear", t) + }(d, h) + }, this.placeholder = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" + } + static get pluginName() { + return "ImageUploadProgress" + } + init() { + const t = this.editor; + t.plugins.has("ImageBlockEditing") && t.editing.downcastDispatcher.on("attribute:uploadStatus:imageBlock", this.uploadStatusChange), t.plugins.has("ImageInlineEditing") && t.editing.downcastDispatcher.on("attribute:uploadStatus:imageInline", this.uploadStatusChange) + } + } + + function i_(t, e) { + t.hasClass("ck-appear") || e.addClass("ck-appear", t) + } + + function r_(t, e, n, o) { + n.hasClass("ck-image-upload-placeholder") || o.addClass("ck-image-upload-placeholder", n); + const i = t.findViewImgElement(n); + i.getAttribute("src") !== e && o.setAttribute("src", e, i), a_(n, "placeholder") || o.insert(o.createPositionAfter(i), function(t) { + const e = t.createUIElement("div", { + class: "ck-upload-placeholder-loader" + }); + return t.setCustomProperty("placeholder", !0, e), e + }(o)) + } + + function s_(t, e) { + t.hasClass("ck-image-upload-placeholder") && e.removeClass("ck-image-upload-placeholder", t), l_(t, e, "placeholder") + } + + function a_(t, e) { + for (const n of t.getChildren()) + if (n.getCustomProperty(e)) return n + } + + function l_(t, e, n) { + const o = a_(t, n); + o && e.remove(e.createRangeOn(o)) + } + var c_ = Object.defineProperty, + d_ = Object.defineProperties, + h_ = Object.getOwnPropertyDescriptors, + u_ = Object.getOwnPropertySymbols, + g_ = Object.prototype.hasOwnProperty, + m_ = Object.prototype.propertyIsEnumerable, + p_ = (t, e, n) => e in t ? c_(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n; + class f_ extends Fi { + refresh() { + const t = this.editor, + e = t.plugins.get("ImageUtils"), + n = t.model.document.selection.getSelectedElement(); + this.isEnabled = e.isImageAllowed() || e.isImage(n) + } + execute(t) { + const e = Ai(t.file), + n = this.editor.model.document.selection, + o = this.editor.plugins.get("ImageUtils"), + i = Object.fromEntries(n.getAttributes()); + e.forEach(((t, e) => { + const r = n.getSelectedElement(); + if (e && r && o.isImage(r)) { + const e = this.editor.model.createPositionAfter(r); + this._uploadImage(t, i, e) + } else this._uploadImage(t, i) + })) + } + _uploadImage(t, e, n) { + const o = this.editor, + i = o.plugins.get(Ob).createLoader(t), + r = o.plugins.get("ImageUtils"); + var s, a; + i && r.insertImage((s = ((t, e) => { + for (var n in e || (e = {})) g_.call(e, n) && p_(t, n, e[n]); + if (u_) + for (var n of u_(e)) m_.call(e, n) && p_(t, n, e[n]); + return t + })({}, e), a = { + uploadId: i.id + }, d_(s, h_(a))), n) + } + } + class b_ extends Vi { + constructor(t) { + super(t), t.config.define("image", { + upload: { + types: ["jpeg", "png", "gif", "bmp", "webp", "tiff"] + } + }), this._uploadImageElements = new Map + } + static get requires() { + return [Ob, zf, Mw, uC] + } + static get pluginName() { + return "ImageUploadEditing" + } + init() { + const t = this.editor, + e = t.model.document, + n = t.conversion, + o = t.plugins.get(Ob), + i = t.plugins.get("ImageUtils"), + r = t.plugins.get("ClipboardPipeline"), + s = GC(t.config.get("image.upload.types")), + a = new f_(t); + t.commands.add("uploadImage", a), t.commands.add("imageUpload", a), n.for("upcast").attributeToAttribute({ + view: { + name: "img", + key: "uploadId" + }, + model: "uploadId" + }), this.listenTo(t.editing.view.document, "clipboardInput", ((e, n) => { + if (o = n.dataTransfer, Array.from(o.types).includes("text/html") && "" !== o.getData("text/html")) return; + var o; + const i = Array.from(n.dataTransfer.files).filter((t => !!t && s.test(t.type))); + i.length && (e.stop(), t.model.change((e => { + n.targetRanges && e.setSelection(n.targetRanges.map((e => t.editing.mapper.toModelRange(e)))), t.model.enqueueChange((() => { + t.execute("uploadImage", { + file: i + }) + })) + }))) + })), this.listenTo(r, "inputTransformation", ((e, n) => { + const r = Array.from(t.editing.view.createRangeIn(n.content)).map((t => t.item)).filter((t => function(t, e) { + return !(!t.isInlineImageView(e) || !e.getAttribute("src") || !e.getAttribute("src").match(/^data:image\/\w+;base64,/g) && !e.getAttribute("src").match(/^blob:/g)) + }(i, t) && !t.getAttribute("uploadProcessed"))).map((t => ({ + promise: KC(t), + imageElement: t + }))); + if (!r.length) return; + const s = new cu(t.editing.view.document); + for (const t of r) { + s.setAttribute("uploadProcessed", !0, t.imageElement); + const e = o.createLoader(t.promise); + e && (s.setAttribute("src", "", t.imageElement), s.setAttribute("uploadId", e.id, t.imageElement)) + } + })), t.editing.view.document.on("dragover", ((t, e) => { + e.preventDefault() + })), e.on("change", (() => { + const n = e.differ.getChanges({ + includeChangesInGraveyard: !0 + }).reverse(), + i = new Set; + for (const e of n) + if ("insert" == e.type && "$text" != e.name) { + const n = e.position.nodeAfter, + r = "$graveyard" == e.position.root.rootName; + for (const e of k_(t, n)) { + const t = e.getAttribute("uploadId"); + if (!t) continue; + const n = o.loaders.get(t); + n && (r ? i.has(t) || n.abort() : (i.add(t), this._uploadImageElements.set(t, e), "idle" == n.status && this._readAndUpload(n))) + } + } + })), this.on("uploadComplete", ((t, { + imageElement: e, + data: n + }) => { + const o = n.urls ? n.urls : n; + this.editor.model.change((t => { + t.setAttribute("src", o.default, e), this._parseAndSetSrcsetAttributeOnImage(o, e, t) + })) + }), { + priority: "low" + }) + } + afterInit() { + const t = this.editor.model.schema; + this.editor.plugins.has("ImageBlockEditing") && t.extend("imageBlock", { + allowAttributes: ["uploadId", "uploadStatus"] + }), this.editor.plugins.has("ImageInlineEditing") && t.extend("imageInline", { + allowAttributes: ["uploadId", "uploadStatus"] + }) + } + _readAndUpload(t) { + const e = this.editor, + n = e.model, + o = e.locale.t, + r = e.plugins.get(Ob), + s = e.plugins.get(zf), + a = e.plugins.get("ImageUtils"), + l = this._uploadImageElements; + return n.enqueueChange({ + isUndoable: !1 + }, (e => { + e.setAttribute("uploadStatus", "reading", l.get(t.id)) + })), t.read().then((() => { + const o = t.upload(), + r = l.get(t.id); + if (i.isSafari) { + const t = e.editing.mapper.toViewElement(r), + n = a.findViewImgElement(t); + e.editing.view.once("render", (() => { + if (!n.parent) return; + const t = e.editing.view.domConverter.mapViewToDom(n.parent); + if (!t) return; + const o = t.style.display; + t.style.display = "none", t._ckHack = t.offsetHeight, t.style.display = o + })) + } + return n.enqueueChange({ + isUndoable: !1 + }, (t => { + t.setAttribute("uploadStatus", "uploading", r) + })), o + })).then((e => { + n.enqueueChange({ + isUndoable: !1 + }, (n => { + const o = l.get(t.id); + n.setAttribute("uploadStatus", "complete", o), this.fire("uploadComplete", { + data: e, + imageElement: o + }) + })), c() + })).catch((e => { + if ("error" !== t.status && "aborted" !== t.status) throw e; + "error" == t.status && e && s.showWarning(e, { + title: o("Upload failed"), + namespace: "upload" + }), n.enqueueChange({ + isUndoable: !1 + }, (e => { + e.remove(l.get(t.id)) + })), c() + })); + + function c() { + n.enqueueChange({ + isUndoable: !1 + }, (e => { + const n = l.get(t.id); + e.removeAttribute("uploadId", n), e.removeAttribute("uploadStatus", n), l.delete(t.id) + })), r.destroyLoader(t) + } + } + _parseAndSetSrcsetAttributeOnImage(t, e, n) { + let o = 0; + const i = Object.keys(t).filter((t => { + const e = parseInt(t, 10); + if (!isNaN(e)) return o = Math.max(o, e), !0 + })).map((e => `${t[e]} ${e}w`)).join(", "); + "" != i && n.setAttribute("srcset", { + data: i, + width: o + }, e) + } + } + + function k_(t, e) { + const n = t.plugins.get("ImageUtils"); + return Array.from(t.model.createRangeOn(e)).filter((t => n.isImage(t.item))).map((t => t.item)) + } + var w_ = n(1568), + A_ = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(w_.Z, A_); + w_.Z.locals; + var C_ = n(3535), + __ = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(C_.Z, __); + C_.Z.locals; + class v_ extends Fi { + refresh() { + const t = this.editor, + e = t.plugins.get("ImageUtils").getClosestSelectedImageElement(t.model.document.selection); + this.isEnabled = !!e, e && e.hasAttribute("width") ? this.value = { + width: e.getAttribute("width"), + height: null + } : this.value = null + } + execute(t) { + const e = this.editor, + n = e.model, + o = e.plugins.get("ImageUtils").getClosestSelectedImageElement(n.document.selection); + this.value = { + width: t.width, + height: null + }, o && n.change((e => { + e.setAttribute("width", t.width, o) + })) + } + } + class y_ extends Vi { + static get requires() { + return [uC] + } + static get pluginName() { + return "ImageResizeEditing" + } + constructor(t) { + super(t), t.config.define("image", { + resizeUnit: "%", + resizeOptions: [{ + name: "resizeImage:original", + value: null, + icon: "original" + }, { + name: "resizeImage:25", + value: "25", + icon: "small" + }, { + name: "resizeImage:50", + value: "50", + icon: "medium" + }, { + name: "resizeImage:75", + value: "75", + icon: "large" + }] + }) + } + init() { + const t = this.editor, + e = new v_(t); + this._registerSchema(), this._registerConverters("imageBlock"), this._registerConverters("imageInline"), t.commands.add("resizeImage", e), t.commands.add("imageResize", e) + } + _registerSchema() { + this.editor.plugins.has("ImageBlockEditing") && this.editor.model.schema.extend("imageBlock", { + allowAttributes: "width" + }), this.editor.plugins.has("ImageInlineEditing") && this.editor.model.schema.extend("imageInline", { + allowAttributes: "width" + }) + } + _registerConverters(t) { + const e = this.editor; + e.conversion.for("downcast").add((e => e.on(`attribute:width:${t}`, ((t, e, n) => { + if (!n.consumable.consume(e.item, t.name)) return; + const o = n.writer, + i = n.mapper.toViewElement(e.item); + null !== e.attributeNewValue ? (o.setStyle("width", e.attributeNewValue, i), o.addClass("image_resized", i)) : (o.removeStyle("width", i), o.removeClass("image_resized", i)) + })))), e.conversion.for("upcast").attributeToAttribute({ + view: { + name: "imageBlock" === t ? "figure" : "img", + styles: { + width: /.+/ + } + }, + model: { + key: "width", + value: t => t.getStyle("width") + } + }) + } + } + const x_ = { + small: eg.objectSizeSmall, + medium: eg.objectSizeMedium, + large: eg.objectSizeLarge, + original: eg.objectSizeFull + }; + class E_ extends Vi { + constructor(t) { + super(t), this._resizeUnit = t.config.get("image.resizeUnit") + } + static get requires() { + return [y_] + } + static get pluginName() { + return "ImageResizeButtons" + } + init() { + const t = this.editor, + e = t.config.get("image.resizeOptions"), + n = t.commands.get("resizeImage"); + this.bind("isEnabled").to(n); + for (const t of e) this._registerImageResizeButton(t); + this._registerImageResizeDropdown(e) + } + _registerImageResizeButton(t) { + const e = this.editor, + { + name: n, + value: o, + icon: i + } = t, + r = o ? o + this._resizeUnit : null; + e.ui.componentFactory.add(n, (n => { + const o = new Mg(n), + s = e.commands.get("resizeImage"), + a = this._getOptionLabelValue(t, !0); + if (!x_[i]) throw new b("imageresizebuttons-missing-icon", e, t); + return o.set({ + label: a, + icon: x_[i], + tooltip: a, + isToggleable: !0 + }), o.bind("isEnabled").to(this), o.bind("isOn").to(s, "value", D_(r)), this.listenTo(o, "execute", (() => { + e.execute("resizeImage", { + width: r + }) + })), o + })) + } + _registerImageResizeDropdown(t) { + const e = this.editor, + n = e.t, + o = t.find((t => !t.value)), + i = i => { + const r = e.commands.get("resizeImage"), + s = Wm(i, km), + a = s.buttonView, + l = n("Resize image"); + return a.set({ + tooltip: l, + commandValue: o.value, + icon: x_.medium, + isToggleable: !0, + label: this._getOptionLabelValue(o), + withText: !0, + class: "ck-resize-image-button", + ariaLabel: l, + ariaLabelledBy: void 0 + }), a.bind("label").to(r, "value", (t => t && t.width ? t.width : this._getOptionLabelValue(o))), s.bind("isEnabled").to(this), Gm(s, (() => this._getResizeDropdownListItemDefinitions(t, r)), { + ariaLabel: n("Image resize list"), + role: "menu" + }), this.listenTo(s, "execute", (t => { + e.execute(t.source.commandName, { + width: t.source.commandValue + }), e.editing.view.focus() + })), s + }; + e.ui.componentFactory.add("resizeImage", i), e.ui.componentFactory.add("imageResize", i) + } + _getOptionLabelValue(t, e = !1) { + const n = this.editor.t; + return t.label ? t.label : e ? t.value ? n("Resize image to %0", t.value + this._resizeUnit) : n("Resize image to the original size") : t.value ? t.value + this._resizeUnit : n("Original") + } + _getResizeDropdownListItemDefinitions(t, e) { + const n = new xi; + return t.map((t => { + const o = t.value ? t.value + this._resizeUnit : null, + i = { + type: "button", + model: new Vf({ + commandName: "resizeImage", + commandValue: o, + label: this._getOptionLabelValue(t), + role: "menuitemradio", + withText: !0, + icon: null + }) + }; + i.model.bind("isOn").to(e, "value", D_(o)), n.add(i) + })), n + } + } + + function D_(t) { + return e => null === t && e === t || null !== e && e.width === t + } + const S_ = /(image|image-inline)/, + T_ = "image_resized"; + class B_ extends Vi { + static get requires() { + return [RA] + } + static get pluginName() { + return "ImageResizeHandles" + } + init() { + const t = this.editor.commands.get("resizeImage"); + this.bind("isEnabled").to(t), this._setupResizerCreator() + } + _setupResizerCreator() { + const t = this.editor, + e = t.editing.view; + e.addObserver(yC), this.listenTo(e.document, "imageLoaded", ((n, o) => { + if (!o.target.matches("figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img")) return; + const i = t.editing.view.domConverter, + r = i.domToView(o.target).findAncestor({ + classes: S_ + }); + let s = this.editor.plugins.get(RA).getResizerByViewElement(r); + if (s) return void s.redraw(); + const a = t.editing.mapper, + l = a.toModelElement(r); + s = t.plugins.get(RA).attachTo({ + unit: t.config.get("image.resizeUnit"), + modelElement: l, + viewElement: r, + editor: t, + getHandleHost: t => t.querySelector("img"), + getResizeHost: () => i.mapViewToDom(a.toViewElement(l.parent)), + isCentered() { + const t = l.getAttribute("imageStyle"); + return !t || "block" == t || "alignCenter" == t + }, + onCommit(n) { + e.change((t => { + t.removeClass(T_, r) + })), t.execute("resizeImage", { + width: n + }) + } + }), s.on("updateSize", (() => { + r.hasClass(T_) || e.change((t => { + t.addClass(T_, r) + })) + })), s.bind("isEnabled").to(this) + })) + } + } + var I_ = n(6270), + P_ = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(I_.Z, P_); + I_.Z.locals; + class R_ extends Fi { + constructor(t, e) { + super(t), this._defaultStyles = { + imageBlock: !1, + imageInline: !1 + }, this._styles = new Map(e.map((t => { + if (t.isDefault) + for (const e of t.modelElements) this._defaultStyles[e] = t.name; + return [t.name, t] + }))) + } + refresh() { + const t = this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection); + this.isEnabled = !!t, this.isEnabled ? t.hasAttribute("imageStyle") ? this.value = t.getAttribute("imageStyle") : this.value = this._defaultStyles[t.name] : this.value = !1 + } + execute(t = {}) { + const e = this.editor, + n = e.model, + o = e.plugins.get("ImageUtils"); + n.change((e => { + const i = t.value; + let r = o.getClosestSelectedImageElement(n.document.selection); + i && this.shouldConvertImageType(i, r) && (this.editor.execute(o.isBlockImage(r) ? "imageTypeInline" : "imageTypeBlock"), r = o.getClosestSelectedImageElement(n.document.selection)), !i || this._styles.get(i).isDefault ? e.removeAttribute("imageStyle", r) : e.setAttribute("imageStyle", i, r) + })) + } + shouldConvertImageType(t, e) { + return !this._styles.get(t).modelElements.includes(e.name) + } + } + var z_ = Object.defineProperty, + V_ = Object.getOwnPropertySymbols, + O_ = Object.prototype.hasOwnProperty, + F_ = Object.prototype.propertyIsEnumerable, + M_ = (t, e, n) => e in t ? z_(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + N_ = (t, e) => { + for (var n in e || (e = {})) O_.call(e, n) && M_(t, n, e[n]); + if (V_) + for (var n of V_(e)) F_.call(e, n) && M_(t, n, e[n]); + return t + }; + const { + objectFullWidth: L_, + objectInline: H_, + objectLeft: j_, + objectRight: q_, + objectCenter: W_, + objectBlockLeft: U_, + objectBlockRight: $_ + } = eg, G_ = { + get inline() { + return { + name: "inline", + title: "In line", + icon: H_, + modelElements: ["imageInline"], + isDefault: !0 + } + }, + get alignLeft() { + return { + name: "alignLeft", + title: "Left aligned image", + icon: j_, + modelElements: ["imageBlock", "imageInline"], + className: "image-style-align-left" + } + }, + get alignBlockLeft() { + return { + name: "alignBlockLeft", + title: "Left aligned image", + icon: U_, + modelElements: ["imageBlock"], + className: "image-style-block-align-left" + } + }, + get alignCenter() { + return { + name: "alignCenter", + title: "Centered image", + icon: W_, + modelElements: ["imageBlock"], + className: "image-style-align-center" + } + }, + get alignRight() { + return { + name: "alignRight", + title: "Right aligned image", + icon: q_, + modelElements: ["imageBlock", "imageInline"], + className: "image-style-align-right" + } + }, + get alignBlockRight() { + return { + name: "alignBlockRight", + title: "Right aligned image", + icon: $_, + modelElements: ["imageBlock"], + className: "image-style-block-align-right" + } + }, + get block() { + return { + name: "block", + title: "Centered image", + icon: W_, + modelElements: ["imageBlock"], + isDefault: !0 + } + }, + get side() { + return { + name: "side", + title: "Side image", + icon: q_, + modelElements: ["imageBlock"], + className: "image-style-side" + } + } + }, K_ = { + full: L_, + left: U_, + right: $_, + center: W_, + inlineLeft: j_, + inlineRight: q_, + inline: H_ + }, Z_ = [{ + name: "imageStyle:wrapText", + title: "Wrap text", + defaultItem: "imageStyle:alignLeft", + items: ["imageStyle:alignLeft", "imageStyle:alignRight"] + }, { + name: "imageStyle:breakText", + title: "Break text", + defaultItem: "imageStyle:block", + items: ["imageStyle:alignBlockLeft", "imageStyle:block", "imageStyle:alignBlockRight"] + }]; + + function J_(t) { + k("image-style-configuration-definition-invalid", t) + } + const Y_ = { + normalizeStyles: function(t) { + return (t.configuredStyles.options || []).map((t => function(t) { + t = "string" == typeof t ? G_[t] ? N_({}, G_[t]) : { + name: t + } : function(t, e) { + const n = N_({}, e); + for (const o in t) Object.prototype.hasOwnProperty.call(e, o) || (n[o] = t[o]); + return n + }(G_[t.name], t); + "string" == typeof t.icon && (t.icon = K_[t.icon] || t.icon); + return t + }(t))).filter((e => function(t, { + isBlockPluginLoaded: e, + isInlinePluginLoaded: n + }) { + const { + modelElements: o, + name: i + } = t; + if (!(o && o.length && i)) return J_({ + style: t + }), !1; + { + const i = [e ? "imageBlock" : null, n ? "imageInline" : null]; + if (!o.some((t => i.includes(t)))) return k("image-style-missing-dependency", { + style: t, + missingPlugins: o.map((t => "imageBlock" === t ? "ImageBlockEditing" : "ImageInlineEditing")) + }), !1 + } + return !0 + }(e, t))) + }, + getDefaultStylesConfiguration: function(t, e) { + return t && e ? { + options: ["inline", "alignLeft", "alignRight", "alignCenter", "alignBlockLeft", "alignBlockRight", "block", "side"] + } : t ? { + options: ["block", "side"] + } : e ? { + options: ["inline", "alignLeft", "alignRight"] + } : {} + }, + getDefaultDropdownDefinitions: function(t) { + return t.has("ImageBlockEditing") && t.has("ImageInlineEditing") ? [...Z_] : [] + }, + warnInvalidStyle: J_, + DEFAULT_OPTIONS: G_, + DEFAULT_ICONS: K_, + DEFAULT_DROPDOWN_DEFINITIONS: Z_ + }; + + function Q_(t, e) { + for (const n of e) + if (n.name === t) return n + } + class X_ extends Vi { + static get pluginName() { + return "ImageStyleEditing" + } + static get requires() { + return [uC] + } + init() { + const { + normalizeStyles: t, + getDefaultStylesConfiguration: e + } = Y_, n = this.editor, o = n.plugins.has("ImageBlockEditing"), i = n.plugins.has("ImageInlineEditing"); + n.config.define("image.styles", e(o, i)), this.normalizedStyles = t({ + configuredStyles: n.config.get("image.styles"), + isBlockPluginLoaded: o, + isInlinePluginLoaded: i + }), this._setupConversion(o, i), this._setupPostFixer(), n.commands.add("imageStyle", new R_(n, this.normalizedStyles)) + } + _setupConversion(t, e) { + const n = this.editor, + o = n.model.schema, + i = (r = this.normalizedStyles, (t, e, n) => { + if (!n.consumable.consume(e.item, t.name)) return; + const o = Q_(e.attributeNewValue, r), + i = Q_(e.attributeOldValue, r), + s = n.mapper.toViewElement(e.item), + a = n.writer; + i && a.removeClass(i.className, s), o && a.addClass(o.className, s) + }); + var r; + const s = function(t) { + const e = { + imageInline: t.filter((t => !t.isDefault && t.modelElements.includes("imageInline"))), + imageBlock: t.filter((t => !t.isDefault && t.modelElements.includes("imageBlock"))) + }; + return (t, n, o) => { + if (!n.modelRange) return; + const i = n.viewItem, + r = Ei(n.modelRange.getItems()); + if (r && o.schema.checkAttribute(r, "imageStyle")) + for (const t of e[r.name]) o.consumable.consume(i, { + classes: t.className + }) && o.writer.setAttribute("imageStyle", t.name, r) + } + }(this.normalizedStyles); + n.editing.downcastDispatcher.on("attribute:imageStyle", i), n.data.downcastDispatcher.on("attribute:imageStyle", i), t && (o.extend("imageBlock", { + allowAttributes: "imageStyle" + }), n.data.upcastDispatcher.on("element:figure", s, { + priority: "low" + })), e && (o.extend("imageInline", { + allowAttributes: "imageStyle" + }), n.data.upcastDispatcher.on("element:img", s, { + priority: "low" + })) + } + _setupPostFixer() { + const t = this.editor, + e = t.model.document, + n = t.plugins.get(uC), + o = new Map(this.normalizedStyles.map((t => [t.name, t]))); + e.registerPostFixer((t => { + let i = !1; + for (const r of e.differ.getChanges()) + if ("insert" == r.type || "attribute" == r.type && "imageStyle" == r.attributeKey) { + let e = "insert" == r.type ? r.position.nodeAfter : r.range.start.nodeAfter; + if (e && e.is("element", "paragraph") && e.childCount > 0 && (e = e.getChild(0)), !n.isImage(e)) continue; + const s = e.getAttribute("imageStyle"); + if (!s) continue; + const a = o.get(s); + a && a.modelElements.includes(e.name) || (t.removeAttribute("imageStyle", e), i = !0) + } return i + })) + } + } + var tv = n(5083), + ev = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(tv.Z, ev); + tv.Z.locals; + class nv extends Vi { + static get requires() { + return [X_] + } + static get pluginName() { + return "ImageStyleUI" + } + get localizedDefaultStylesTitles() { + const t = this.editor.t; + return { + "Wrap text": t("Wrap text"), + "Break text": t("Break text"), + "In line": t("In line"), + "Full size image": t("Full size image"), + "Side image": t("Side image"), + "Left aligned image": t("Left aligned image"), + "Centered image": t("Centered image"), + "Right aligned image": t("Right aligned image") + } + } + init() { + const t = this.editor.plugins, + e = this.editor.config.get("image.toolbar") || [], + n = ov(t.get("ImageStyleEditing").normalizedStyles, this.localizedDefaultStylesTitles); + for (const t of n) this._createButton(t); + const o = ov([...e.filter(O), ...Y_.getDefaultDropdownDefinitions(t)], this.localizedDefaultStylesTitles); + for (const t of o) this._createDropdown(t, n) + } + _createDropdown(t, e) { + const n = this.editor.ui.componentFactory; + n.add(t.name, (o => { + let i; + const { + defaultItem: r, + items: s, + title: a + } = t, l = s.filter((t => e.find((({ + name: e + }) => iv(e) === t)))).map((t => { + const e = n.create(t); + return t === r && (i = e), e + })); + s.length !== l.length && Y_.warnInvalidStyle({ + dropdown: t + }); + const c = Wm(o, Nm), + d = c.buttonView, + h = d.arrowView; + return Um(c, l, { + enableActiveItemFocusOnDropdownOpen: !0 + }), d.set({ + label: rv(a, i.label), + class: null, + tooltip: !0 + }), h.unbind("label"), h.set({ + label: a + }), d.bind("icon").toMany(l, "isOn", ((...t) => { + const e = t.findIndex(Lr); + return e < 0 ? i.icon : l[e].icon + })), d.bind("label").toMany(l, "isOn", ((...t) => { + const e = t.findIndex(Lr); + return rv(a, e < 0 ? i.label : l[e].label) + })), d.bind("isOn").toMany(l, "isOn", ((...t) => t.some(Lr))), d.bind("class").toMany(l, "isOn", ((...t) => t.some(Lr) ? "ck-splitbutton_flatten" : void 0)), d.on("execute", (() => { + l.some((({ + isOn: t + }) => t)) ? c.isOpen = !c.isOpen : i.fire("execute") + })), c.bind("isEnabled").toMany(l, "isEnabled", ((...t) => t.some(Lr))), this.listenTo(c, "execute", (() => { + this.editor.editing.view.focus() + })), c + })) + } + _createButton(t) { + const e = t.name; + this.editor.ui.componentFactory.add(iv(e), (n => { + const o = this.editor.commands.get("imageStyle"), + i = new Mg(n); + return i.set({ + label: t.title, + icon: t.icon, + tooltip: !0, + isToggleable: !0 + }), i.bind("isEnabled").to(o, "isEnabled"), i.bind("isOn").to(o, "value", (t => t === e)), i.on("execute", this._executeCommand.bind(this, e)), i + })) + } + _executeCommand(t) { + this.editor.execute("imageStyle", { + value: t + }), this.editor.editing.view.focus() + } + } + + function ov(t, e) { + for (const n of t) e[n.title] && (n.title = e[n.title]); + return t + } + + function iv(t) { + return `imageStyle:${t}` + } + + function rv(t, e) { + return (t ? t + ": " : "") + e + } + class sv { + constructor() { + this._definitions = new Set + } + get length() { + return this._definitions.size + } + add(t) { + Array.isArray(t) ? t.forEach((t => this._definitions.add(t))) : this._definitions.add(t) + } + getDispatcher() { + return t => { + t.on("attribute:linkHref", ((t, e, n) => { + if (!n.consumable.test(e.item, "attribute:linkHref")) return; + if (!e.item.is("selection") && !n.schema.isInline(e.item)) return; + const o = n.writer, + i = o.document.selection; + for (const t of this._definitions) { + const r = o.createAttributeElement("a", t.attributes, { + priority: 5 + }); + t.classes && o.addClass(t.classes, r); + for (const e in t.styles) o.setStyle(e, t.styles[e], r); + o.setCustomProperty("link", !0, r), t.callback(e.attributeNewValue) ? e.item.is("selection") ? o.wrap(i.getFirstRange(), r) : o.wrap(n.mapper.toViewRange(e.range), r) : o.unwrap(n.mapper.toViewRange(e.range), r) + } + }), { + priority: "high" + }) + } + } + getDispatcherForLinkedImage() { + return t => { + t.on("attribute:linkHref:imageBlock", ((t, e, { + writer: n, + mapper: o + }) => { + const i = o.toViewElement(e.item), + r = Array.from(i.getChildren()).find((t => t.is("element", "a"))); + for (const t of this._definitions) { + const o = Ti(t.attributes); + if (t.callback(e.attributeNewValue)) { + for (const [t, e] of o) "class" === t ? n.addClass(e, r) : n.setAttribute(t, e, r); + t.classes && n.addClass(t.classes, r); + for (const e in t.styles) n.setStyle(e, t.styles[e], r) + } else { + for (const [t, e] of o) "class" === t ? n.removeClass(e, r) : n.removeAttribute(t, r); + t.classes && n.removeClass(t.classes, r); + for (const e in t.styles) n.removeStyle(e, r) + } + } + })) + } + } + } + const av = function(t, e, n) { + var o = t.length; + return n = void 0 === n ? o : n, !e && n >= o ? t : Sr(t, e, n) + }; + var lv = RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"); + const cv = function(t) { + return lv.test(t) + }; + const dv = function(t) { + return t.split("") + }; + var hv = "\\ud800-\\udfff", + uv = "[" + hv + "]", + gv = "[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]", + mv = "\\ud83c[\\udffb-\\udfff]", + pv = "[^" + hv + "]", + fv = "(?:\\ud83c[\\udde6-\\uddff]){2}", + bv = "[\\ud800-\\udbff][\\udc00-\\udfff]", + kv = "(?:" + gv + "|" + mv + ")" + "?", + wv = "[\\ufe0e\\ufe0f]?", + Av = wv + kv + ("(?:\\u200d(?:" + [pv, fv, bv].join("|") + ")" + wv + kv + ")*"), + Cv = "(?:" + [pv + gv + "?", gv, fv, bv, uv].join("|") + ")", + _v = RegExp(mv + "(?=" + mv + ")|" + Cv + Av, "g"); + const vv = function(t) { + return t.match(_v) || [] + }; + const yv = function(t) { + return cv(t) ? vv(t) : dv(t) + }; + const xv = function(t) { + return function(e) { + e = vr(e); + var n = cv(e) ? yv(e) : void 0, + o = n ? n[0] : e.charAt(0), + i = n ? av(n, 1).join("") : e.slice(1); + return o[t]() + i + } + }("toUpperCase"), + Ev = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g, + Dv = /^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i, + Sv = /^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i, + Tv = /^((\w+:(\/{2,})?)|(\W))/i, + Bv = "Ctrl+K"; + + function Iv(t, { + writer: e + }) { + const n = e.createAttributeElement("a", { + href: t + }, { + priority: 5 + }); + return e.setCustomProperty("link", !0, n), n + } + + function Pv(t) { + const e = String(t); + return function(t) { + const e = t.replace(Ev, ""); + return !!e.match(Dv) + }(e) ? e : "#" + } + + function Rv(t, e) { + return !!t && e.checkAttribute(t.name, "linkHref") + } + + function zv(t, e) { + const n = (o = t, Sv.test(o) ? "mailto:" : e); + var o; + const i = !!n && !Vv(t); + return t && i ? n + t : t + } + + function Vv(t) { + return Tv.test(t) + } + + function Ov(t) { + window.open(t, "_blank", "noopener") + } + class Fv extends Fi { + constructor() { + super(...arguments), this.manualDecorators = new xi, this.automaticDecorators = new sv + } + restoreManualDecoratorStates() { + for (const t of this.manualDecorators) t.value = this._getDecoratorStateFromModel(t.id) + } + refresh() { + const t = this.editor.model, + e = t.document.selection, + n = e.getSelectedElement() || Ei(e.getSelectedBlocks()); + Rv(n, t.schema) ? (this.value = n.getAttribute("linkHref"), this.isEnabled = t.schema.checkAttribute(n, "linkHref")) : (this.value = e.getAttribute("linkHref"), this.isEnabled = t.schema.checkAttributeInSelection(e, "linkHref")); + for (const t of this.manualDecorators) t.value = this._getDecoratorStateFromModel(t.id) + } + execute(t, e = {}) { + const n = this.editor.model, + o = n.document.selection, + i = [], + r = []; + for (const t in e) e[t] ? i.push(t) : r.push(t); + n.change((e => { + if (o.isCollapsed) { + const s = o.getFirstPosition(); + if (o.hasAttribute("linkHref")) { + const a = Mv(o); + let l = kk(s, "linkHref", o.getAttribute("linkHref"), n); + o.getAttribute("linkHref") === a && (l = this._updateLinkContent(n, e, l, t)), e.setAttribute("linkHref", t, l), i.forEach((t => { + e.setAttribute(t, !0, l) + })), r.forEach((t => { + e.removeAttribute(t, l) + })), e.setSelection(e.createPositionAfter(l.end.nodeBefore)) + } else if ("" !== t) { + const r = Ti(o.getAttributes()); + r.set("linkHref", t), i.forEach((t => { + r.set(t, !0) + })); + const { + end: a + } = n.insertContent(e.createText(t, r), s); + e.setSelection(a) + } ["linkHref", ...i, ...r].forEach((t => { + e.removeSelectionAttribute(t) + })) + } else { + const s = n.schema.getValidRanges(o.getRanges(), "linkHref"), + a = []; + for (const t of o.getSelectedBlocks()) n.schema.checkAttribute(t, "linkHref") && a.push(e.createRangeOn(t)); + const l = a.slice(); + for (const t of s) this._isRangeToUpdate(t, a) && l.push(t); + for (const s of l) { + let a = s; + if (1 === l.length) { + const i = Mv(o); + o.getAttribute("linkHref") === i && (a = this._updateLinkContent(n, e, s, t), e.setSelection(e.createSelection(a))) + } + e.setAttribute("linkHref", t, a), i.forEach((t => { + e.setAttribute(t, !0, a) + })), r.forEach((t => { + e.removeAttribute(t, a) + })) + } + } + })) + } + _getDecoratorStateFromModel(t) { + const e = this.editor.model, + n = e.document.selection, + o = n.getSelectedElement(); + return Rv(o, e.schema) ? o.getAttribute(t) : n.getAttribute(t) + } + _isRangeToUpdate(t, e) { + for (const n of e) + if (n.containsRange(t)) return !1; + return !0 + } + _updateLinkContent(t, e, n, o) { + const i = e.createText(o, { + linkHref: o + }); + return t.insertContent(i, n) + } + } + + function Mv(t) { + if (t.isCollapsed) { + const e = t.getFirstPosition(); + return e.textNode && e.textNode.data + } { + const e = Array.from(t.getFirstRange().getItems()); + if (e.length > 1) return null; + const n = e[0]; + return n.is("$text") || n.is("$textProxy") ? n.data : null + } + } + class Nv extends Fi { + refresh() { + const t = this.editor.model, + e = t.document.selection, + n = e.getSelectedElement(); + Rv(n, t.schema) ? this.isEnabled = t.schema.checkAttribute(n, "linkHref") : this.isEnabled = t.schema.checkAttributeInSelection(e, "linkHref") + } + execute() { + const t = this.editor, + e = this.editor.model, + n = e.document.selection, + o = t.commands.get("link"); + e.change((t => { + const i = n.isCollapsed ? [kk(n.getFirstPosition(), "linkHref", n.getAttribute("linkHref"), e)] : e.schema.getValidRanges(n.getRanges(), "linkHref"); + for (const e of i) + if (t.removeAttribute("linkHref", e), o) + for (const n of o.manualDecorators) t.removeAttribute(n.id, e) + })) + } + } + class Lv extends(q()) { + constructor({ + id: t, + label: e, + attributes: n, + classes: o, + styles: i, + defaultValue: r + }) { + super(), this.id = t, this.set("value", void 0), this.defaultValue = r, this.label = e, this.attributes = n, this.classes = o, this.styles = i + } + _createPattern() { + return { + attributes: this.attributes, + classes: this.classes, + styles: this.styles + } + } + } + var Hv = n(1134), + jv = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Hv.Z, jv); + Hv.Z.locals; + var qv = Object.defineProperty, + Wv = Object.getOwnPropertySymbols, + Uv = Object.prototype.hasOwnProperty, + $v = Object.prototype.propertyIsEnumerable, + Gv = (t, e, n) => e in t ? qv(t, e, { + enumerable: !0, + configurable: !0, + writable: !0, + value: n + }) : t[e] = n, + Kv = (t, e) => { + for (var n in e || (e = {})) Uv.call(e, n) && Gv(t, n, e[n]); + if (Wv) + for (var n of Wv(e)) $v.call(e, n) && Gv(t, n, e[n]); + return t + }; + const Zv = "automatic", + Jv = /^(https?:)?\/\//; + class Yv extends Vi { + static get pluginName() { + return "LinkEditing" + } + static get requires() { + return [sk, Kb, Mw] + } + constructor(t) { + super(t), t.config.define("link", { + addTargetToExternalLinks: !1 + }) + } + init() { + const t = this.editor; + t.model.schema.extend("$text", { + allowAttributes: "linkHref" + }), t.conversion.for("dataDowncast").attributeToElement({ + model: "linkHref", + view: Iv + }), t.conversion.for("editingDowncast").attributeToElement({ + model: "linkHref", + view: (t, e) => Iv(Pv(t), e) + }), t.conversion.for("upcast").elementToAttribute({ + view: { + name: "a", + attributes: { + href: !0 + } + }, + model: { + key: "linkHref", + value: t => t.getAttribute("href") + } + }), t.commands.add("link", new Fv(t)), t.commands.add("unlink", new Nv(t)); + const e = function(t, e) { + const n = { + "Open in a new tab": t("Open in a new tab"), + Downloadable: t("Downloadable") + }; + return e.forEach((t => ("label" in t && n[t.label] && (t.label = n[t.label]), t))), e + }(t.t, function(t) { + const e = []; + if (t) + for (const [n, o] of Object.entries(t)) { + const t = Object.assign({}, o, { + id: `link${xv(n)}` + }); + e.push(t) + } + return e + }(t.config.get("link.decorators"))); + this._enableAutomaticDecorators(e.filter((t => t.mode === Zv))), this._enableManualDecorators(e.filter((t => "manual" === t.mode))); + t.plugins.get(sk).registerAttribute("linkHref"), Ak(t, "linkHref", "a", "ck-link_selected"), this._enableInsertContentSelectionAttributesFixer(), this._enableClickingAfterLink(), this._enableTypingOverLink(), this._handleDeleteContentAfterLink(), this._enableClipboardIntegration() + } + _enableAutomaticDecorators(t) { + const e = this.editor, + n = e.commands.get("link").automaticDecorators; + e.config.get("link.addTargetToExternalLinks") && n.add({ + id: "linkIsExternal", + mode: Zv, + callback: t => !!t && Jv.test(t), + attributes: { + target: "_blank", + rel: "noopener noreferrer" + } + }), n.add(t), n.length && e.conversion.for("downcast").add(n.getDispatcher()) + } + _enableManualDecorators(t) { + if (!t.length) return; + const e = this.editor, + n = e.commands.get("link").manualDecorators; + t.forEach((t => { + e.model.schema.extend("$text", { + allowAttributes: t.id + }); + const o = new Lv(t); + n.add(o), e.conversion.for("downcast").attributeToElement({ + model: o.id, + view: (t, { + writer: e, + schema: n + }, { + item: i + }) => { + if ((i.is("selection") || n.isInline(i)) && t) { + const t = e.createAttributeElement("a", o.attributes, { + priority: 5 + }); + o.classes && e.addClass(o.classes, t); + for (const n in o.styles) e.setStyle(n, o.styles[n], t); + return e.setCustomProperty("link", !0, t), t + } + } + }), e.conversion.for("upcast").elementToAttribute({ + view: Kv({ + name: "a" + }, o._createPattern()), + model: { + key: o.id + } + }) + })) + } + _enableLinkOpen() { + const t = this.editor, + e = t.editing.view.document; + this.listenTo(e, "click", ((t, e) => { + if (!(i.isMac ? e.domEvent.metaKey : e.domEvent.ctrlKey)) return; + let n = e.domTarget; + if ("a" != n.tagName.toLowerCase() && (n = n.closest("a")), !n) return; + const o = n.getAttribute("href"); + o && (t.stop(), e.preventDefault(), Ov(o)) + }), { + context: "$capture" + }), this.listenTo(e, "keydown", ((e, n) => { + const o = t.commands.get("link").value; + !!o && n.keyCode === mi.enter && n.altKey && (e.stop(), Ov(o)) + })) + } + _enableInsertContentSelectionAttributesFixer() { + const t = this.editor.model, + e = t.document.selection; + this.listenTo(t, "insertContent", (() => { + const n = e.anchor.nodeBefore, + o = e.anchor.nodeAfter; + e.hasAttribute("linkHref") && n && n.hasAttribute("linkHref") && (o && o.hasAttribute("linkHref") || t.change((e => { + Qv(e, ty(t.schema)) + }))) + }), { + priority: "low" + }) + } + _enableClickingAfterLink() { + const t = this.editor, + e = t.model; + t.editing.view.addObserver(lu); + let n = !1; + this.listenTo(t.editing.view.document, "mousedown", (() => { + n = !0 + })), this.listenTo(t.editing.view.document, "selectionChange", (() => { + if (!n) return; + n = !1; + const t = e.document.selection; + if (!t.isCollapsed) return; + if (!t.hasAttribute("linkHref")) return; + const o = t.getFirstPosition(), + i = kk(o, "linkHref", t.getAttribute("linkHref"), e); + (o.isTouching(i.start) || o.isTouching(i.end)) && e.change((t => { + Qv(t, ty(e.schema)) + })) + })) + } + _enableTypingOverLink() { + const t = this.editor, + e = t.editing.view; + let n = null, + o = !1; + this.listenTo(e.document, "delete", (() => { + o = !0 + }), { + priority: "high" + }), this.listenTo(t.model, "deleteContent", (() => { + const e = t.model.document.selection; + e.isCollapsed || (o ? o = !1 : Xv(t) && function(t) { + const e = t.document.selection, + n = e.getFirstPosition(), + o = e.getLastPosition(), + i = n.nodeAfter; + if (!i) return !1; + if (!i.is("$text")) return !1; + if (!i.hasAttribute("linkHref")) return !1; + const r = o.textNode || o.nodeBefore; + if (i === r) return !0; + return kk(n, "linkHref", i.getAttribute("linkHref"), t).containsRange(t.createRange(n, o), !0) + }(t.model) && (n = e.getAttributes())) + }), { + priority: "high" + }), this.listenTo(t.model, "insertContent", ((e, [i]) => { + o = !1, Xv(t) && n && (t.model.change((t => { + for (const [e, o] of n) t.setAttribute(e, o, i) + })), n = null) + }), { + priority: "high" + }) + } + _handleDeleteContentAfterLink() { + const t = this.editor, + e = t.model, + n = e.document.selection, + o = t.editing.view; + let i = !1, + r = !1; + this.listenTo(o.document, "delete", ((t, e) => { + r = "backward" === e.direction + }), { + priority: "high" + }), this.listenTo(e, "deleteContent", (() => { + i = !1; + const t = n.getFirstPosition(), + o = n.getAttribute("linkHref"); + if (!o) return; + const r = kk(t, "linkHref", o, e); + i = r.containsPosition(t) || r.end.isEqual(t) + }), { + priority: "high" + }), this.listenTo(e, "deleteContent", (() => { + r && (r = !1, i || t.model.enqueueChange((t => { + Qv(t, ty(e.schema)) + }))) + }), { + priority: "low" + }) + } + _enableClipboardIntegration() { + const t = this.editor, + e = t.model, + n = this.editor.config.get("link.defaultProtocol"); + n && this.listenTo(t.plugins.get("ClipboardPipeline"), "contentInsertion", ((t, o) => { + e.change((t => { + const e = t.createRangeIn(o.content); + for (const o of e.getItems()) + if (o.hasAttribute("linkHref")) { + const e = zv(o.getAttribute("linkHref"), n); + t.setAttribute("linkHref", e, o) + } + })) + })) + } + } + + function Qv(t, e) { + t.removeSelectionAttribute("linkHref"); + for (const n of e) t.removeSelectionAttribute(n) + } + + function Xv(t) { + return t.model.change((t => t.batch)).isTyping + } + + function ty(t) { + return t.getDefinition("$text").allowAttributes.filter((t => t.startsWith("link"))) + } + var ey = n(8117), + ny = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(ey.Z, ny); + ey.Z.locals; + class oy extends cg { + constructor(t, e) { + super(t), this.focusTracker = new Di, this.keystrokes = new Si, this._focusables = new sg; + const n = t.t; + this.urlInputView = this._createUrlInput(), this.saveButtonView = this._createButton(n("Save"), eg.check, "ck-button-save"), this.saveButtonView.type = "submit", this.cancelButtonView = this._createButton(n("Cancel"), eg.cancel, "ck-button-cancel", "cancel"), this._manualDecoratorSwitches = this._createManualDecoratorSwitches(e), this.children = this._createFormChildren(e.manualDecorators), this._focusCycler = new wm({ + focusables: this._focusables, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: "shift + tab", + focusNext: "tab" + } + }); + const o = ["ck", "ck-link-form", "ck-responsive-form"]; + e.manualDecorators.length && o.push("ck-link-form_layout-vertical", "ck-vertical-form"), this.setTemplate({ + tag: "form", + attributes: { + class: o, + tabindex: "-1" + }, + children: this.children + }) + } + getDecoratorSwitchesState() { + return Array.from(this._manualDecoratorSwitches).reduce(((t, e) => (t[e.name] = e.isOn, t)), {}) + } + render() { + super.render(), ig({ + view: this + }); + [this.urlInputView, ...this._manualDecoratorSwitches, this.saveButtonView, this.cancelButtonView].forEach((t => { + this._focusables.add(t), this.focusTracker.add(t.element) + })), this.keystrokes.listenTo(this.element) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + focus() { + this._focusCycler.focusFirst() + } + _createUrlInput() { + const t = this.locale.t, + e = new sm(this.locale, Jm); + return e.label = t("Link URL"), e + } + _createButton(t, e, n, o) { + const i = new Mg(this.locale); + return i.set({ + label: t, + icon: e, + tooltip: !0 + }), i.extendTemplate({ + attributes: { + class: n + } + }), o && i.delegate("execute").to(this, o), i + } + _createManualDecoratorSwitches(t) { + const e = this.createCollection(); + for (const n of t.manualDecorators) { + const o = new Hg(this.locale); + o.set({ + name: n.id, + label: n.label, + withText: !0 + }), o.bind("isOn").toMany([n, t], "value", ((t, e) => void 0 === e && void 0 === t ? !!n.defaultValue : !!t)), o.on("execute", (() => { + n.set("value", !o.isOn) + })), e.add(o) + } + return e + } + _createFormChildren(t) { + const e = this.createCollection(); + if (e.add(this.urlInputView), t.length) { + const t = new cg; + t.setTemplate({ + tag: "ul", + children: this._manualDecoratorSwitches.map((t => ({ + tag: "li", + children: [t], + attributes: { + class: ["ck", "ck-list__item"] + } + }))), + attributes: { + class: ["ck", "ck-reset", "ck-list"] + } + }), e.add(t) + } + return e.add(this.saveButtonView), e.add(this.cancelButtonView), e + } + } + var iy = n(9376), + ry = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(iy.Z, ry); + iy.Z.locals; + class sy extends cg { + constructor(t) { + super(t), this.focusTracker = new Di, this.keystrokes = new Si, this._focusables = new sg; + const e = t.t; + this.previewButtonView = this._createPreviewButton(), this.unlinkButtonView = this._createButton(e("Unlink"), '', "unlink"), this.editButtonView = this._createButton(e("Edit link"), eg.pencil, "edit"), this.set("href", void 0), this._focusCycler = new wm({ + focusables: this._focusables, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: "shift + tab", + focusNext: "tab" + } + }), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-link-actions", "ck-responsive-form"], + tabindex: "-1" + }, + children: [this.previewButtonView, this.editButtonView, this.unlinkButtonView] + }) + } + render() { + super.render(); + [this.previewButtonView, this.editButtonView, this.unlinkButtonView].forEach((t => { + this._focusables.add(t), this.focusTracker.add(t.element) + })), this.keystrokes.listenTo(this.element) + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + focus() { + this._focusCycler.focusFirst() + } + _createButton(t, e, n) { + const o = new Mg(this.locale); + return o.set({ + label: t, + icon: e, + tooltip: !0 + }), o.delegate("execute").to(this, n), o + } + _createPreviewButton() { + const t = new Mg(this.locale), + e = this.bindTemplate, + n = this.t; + return t.set({ + withText: !0, + tooltip: n("Open link in new tab") + }), t.extendTemplate({ + attributes: { + class: ["ck", "ck-link-actions__preview"], + href: e.to("href", (t => t && Pv(t))), + target: "_blank", + rel: "noopener noreferrer" + } + }), t.bind("label").to(this, "href", (t => t || n("This link has no URL"))), t.bind("isEnabled").to(this, "href", (t => !!t)), t.template.tag = "a", t.template.eventListeners = {}, t + } + } + const ay = "link-ui"; + class ly extends Vi { + constructor() { + super(...arguments), this.actionsView = null, this.formView = null + } + static get requires() { + return [jf] + } + static get pluginName() { + return "LinkUI" + } + init() { + const t = this.editor; + t.editing.view.addObserver(au), this._balloon = t.plugins.get(jf), this._createToolbarLinkButton(), this._enableBalloonActivators(), t.conversion.for("editingDowncast").markerToHighlight({ + model: ay, + view: { + classes: ["ck-fake-link-selection"] + } + }), t.conversion.for("editingDowncast").markerToElement({ + model: ay, + view: { + name: "span", + classes: ["ck-fake-link-selection", "ck-fake-link-selection_collapsed"] + } + }) + } + destroy() { + super.destroy(), this.formView && this.formView.destroy(), this.actionsView && this.actionsView.destroy() + } + _createViews() { + this.actionsView = this._createActionsView(), this.formView = this._createFormView(), this._enableUserBalloonInteractions() + } + _createActionsView() { + const t = this.editor, + e = new sy(t.locale), + n = t.commands.get("link"), + o = t.commands.get("unlink"); + return e.bind("href").to(n, "value"), e.editButtonView.bind("isEnabled").to(n), e.unlinkButtonView.bind("isEnabled").to(o), this.listenTo(e, "edit", (() => { + this._addFormView() + })), this.listenTo(e, "unlink", (() => { + t.execute("unlink"), this._hideUI() + })), e.keystrokes.set("Esc", ((t, e) => { + this._hideUI(), e() + })), e.keystrokes.set(Bv, ((t, e) => { + this._addFormView(), e() + })), e + } + _createFormView() { + const t = this.editor, + e = t.commands.get("link"), + n = t.config.get("link.defaultProtocol"), + o = new(og(oy))(t.locale, e); + return o.urlInputView.fieldView.bind("value").to(e, "value"), o.urlInputView.bind("isEnabled").to(e, "isEnabled"), o.saveButtonView.bind("isEnabled").to(e), this.listenTo(o, "submit", (() => { + const { + value: e + } = o.urlInputView.fieldView.element, i = zv(e, n); + t.execute("link", i, o.getDecoratorSwitchesState()), this._closeFormView() + })), this.listenTo(o, "cancel", (() => { + this._closeFormView() + })), o.keystrokes.set("Esc", ((t, e) => { + this._closeFormView(), e() + })), o + } + _createToolbarLinkButton() { + const t = this.editor, + e = t.commands.get("link"), + n = t.t; + t.ui.componentFactory.add("link", (t => { + const o = new Mg(t); + return o.isEnabled = !0, o.label = n("Link"), o.icon = '', o.keystroke = Bv, o.tooltip = !0, o.isToggleable = !0, o.bind("isEnabled").to(e, "isEnabled"), o.bind("isOn").to(e, "value", (t => !!t)), this.listenTo(o, "execute", (() => this._showUI(!0))), o + })) + } + _enableBalloonActivators() { + const t = this.editor, + e = t.editing.view.document; + this.listenTo(e, "click", (() => { + this._getSelectedLinkElement() && this._showUI() + })), t.keystrokes.set(Bv, ((e, n) => { + n(), t.commands.get("link").isEnabled && this._showUI(!0) + })) + } + _enableUserBalloonInteractions() { + this.editor.keystrokes.set("Tab", ((t, e) => { + this._areActionsVisible && !this.actionsView.focusTracker.isFocused && (this.actionsView.focus(), e()) + }), { + priority: "high" + }), this.editor.keystrokes.set("Esc", ((t, e) => { + this._isUIVisible && (this._hideUI(), e()) + })), ng({ + emitter: this.formView, + activator: () => this._isUIInPanel, + contextElements: () => [this._balloon.view.element], + callback: () => this._hideUI() + }) + } + _addActionsView() { + this.actionsView || this._createViews(), this._areActionsInPanel || this._balloon.add({ + view: this.actionsView, + position: this._getBalloonPositionData() + }) + } + _addFormView() { + if (this.formView || this._createViews(), this._isFormInPanel) return; + const t = this.editor.commands.get("link"); + this.formView.disableCssTransitions(), this._balloon.add({ + view: this.formView, + position: this._getBalloonPositionData() + }), this._balloon.visibleView === this.formView && this.formView.urlInputView.fieldView.select(), this.formView.enableCssTransitions(), this.formView.urlInputView.fieldView.element.value = t.value || "" + } + _closeFormView() { + const t = this.editor.commands.get("link"); + t.restoreManualDecoratorStates(), void 0 !== t.value ? this._removeFormView() : this._hideUI() + } + _removeFormView() { + this._isFormInPanel && (this.formView.saveButtonView.focus(), this._balloon.remove(this.formView), this.editor.editing.view.focus(), this._hideFakeVisualSelection()) + } + _showUI(t = !1) { + this.formView || this._createViews(), this._getSelectedLinkElement() ? (this._areActionsVisible ? this._addFormView() : this._addActionsView(), t && this._balloon.showStack("main")) : (this._showFakeVisualSelection(), this._addActionsView(), t && this._balloon.showStack("main"), this._addFormView()), this._startUpdatingUI() + } + _hideUI() { + if (!this._isUIInPanel) return; + const t = this.editor; + this.stopListening(t.ui, "update"), this.stopListening(this._balloon, "change:visibleView"), t.editing.view.focus(), this._removeFormView(), this._balloon.remove(this.actionsView), this._hideFakeVisualSelection() + } + _startUpdatingUI() { + const t = this.editor, + e = t.editing.view.document; + let n = this._getSelectedLinkElement(), + o = r(); + const i = () => { + const t = this._getSelectedLinkElement(), + e = r(); + n && !t || !n && e !== o ? this._hideUI() : this._isUIVisible && this._balloon.updatePosition(this._getBalloonPositionData()), n = t, o = e + }; + + function r() { + return e.selection.focus.getAncestors().reverse().find((t => t.is("element"))) + } + this.listenTo(t.ui, "update", i), this.listenTo(this._balloon, "change:visibleView", i) + } + get _isFormInPanel() { + return !!this.formView && this._balloon.hasView(this.formView) + } + get _areActionsInPanel() { + return !!this.actionsView && this._balloon.hasView(this.actionsView) + } + get _areActionsVisible() { + return !!this.actionsView && this._balloon.visibleView === this.actionsView + } + get _isUIInPanel() { + return this._isFormInPanel || this._areActionsInPanel + } + get _isUIVisible() { + const t = this._balloon.visibleView; + return !!this.formView && t == this.formView || this._areActionsVisible + } + _getBalloonPositionData() { + const t = this.editor.editing.view, + e = this.editor.model, + n = t.document; + let o; + if (e.markers.has(ay)) { + const e = Array.from(this.editor.editing.mapper.markerNameToElements(ay)), + n = t.createRange(t.createPositionBefore(e[0]), t.createPositionAfter(e[e.length - 1])); + o = t.domConverter.viewRangeToDom(n) + } else o = () => { + const e = this._getSelectedLinkElement(); + return e ? t.domConverter.mapViewToDom(e) : t.domConverter.viewRangeToDom(n.selection.getFirstRange()) + }; + return { + target: o + } + } + _getSelectedLinkElement() { + const t = this.editor.editing.view, + e = t.document.selection, + n = e.getSelectedElement(); + if (e.isCollapsed || n && $w(n)) return cy(e.getFirstPosition()); + { + const n = e.getFirstRange().getTrimmed(), + o = cy(n.start), + i = cy(n.end); + return o && o == i && t.createRangeIn(o).getTrimmed().isEqual(n) ? o : null + } + } + _showFakeVisualSelection() { + const t = this.editor.model; + t.change((e => { + const n = t.document.selection.getFirstRange(); + if (t.markers.has(ay)) e.updateMarker(ay, { + range: n + }); + else if (n.start.isAtEnd) { + const o = n.start.getLastMatchingPosition((({ + item: e + }) => !t.schema.isContent(e)), { + boundaries: n + }); + e.addMarker(ay, { + usingOperation: !1, + affectsData: !1, + range: e.createRange(o, n.end) + }) + } else e.addMarker(ay, { + usingOperation: !1, + affectsData: !1, + range: n + }) + })) + } + _hideFakeVisualSelection() { + const t = this.editor.model; + t.markers.has(ay) && t.change((t => { + t.removeMarker(ay) + })) + } + } + + function cy(t) { + return t.getAncestors().find((t => { + return (e = t).is("attributeElement") && !!e.getCustomProperty("link"); + var e + })) || null + } + const dy = new RegExp("(^|\\s)(((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(((?!www\\.)|(www\\.))(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+(?:[a-z\\u00a1-\\uffff]{2,63})))(?::\\d{2,5})?(?:[/?#]\\S*)?)|((www.|(\\S+@))((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+(?:[a-z\\u00a1-\\uffff]{2,63})))$", "i"); + class hy extends Vi { + static get requires() { + return [ok] + } + static get pluginName() { + return "AutoLink" + } + init() { + const t = this.editor.model.document.selection; + t.on("change:range", (() => { + this.isEnabled = !t.anchor.parent.is("element", "codeBlock") + })), this._enableTypingHandling() + } + afterInit() { + this._enableEnterHandling(), this._enableShiftEnterHandling() + } + _enableTypingHandling() { + const t = this.editor, + e = new rk(t.model, (t => { + if (! function(t) { + return t.length > 4 && " " === t[t.length - 1] && " " !== t[t.length - 2] + }(t)) return; + const e = uy(t.substr(0, t.length - 1)); + return e ? { + url: e + } : void 0 + })); + e.on("matched:data", ((e, n) => { + const { + batch: o, + range: i, + url: r + } = n; + if (!o.isTyping) return; + const s = i.end.getShiftedBy(-1), + a = s.getShiftedBy(-r.length), + l = t.model.createRange(a, s); + this._applyAutoLink(r, l) + })), e.bind("isEnabled").to(this) + } + _enableEnterHandling() { + const t = this.editor, + e = t.model, + n = t.commands.get("enter"); + n && n.on("execute", (() => { + const t = e.document.selection.getFirstPosition(); + if (!t.parent.previousSibling) return; + const n = e.createRangeIn(t.parent.previousSibling); + this._checkAndApplyAutoLinkOnRange(n) + })) + } + _enableShiftEnterHandling() { + const t = this.editor, + e = t.model, + n = t.commands.get("shiftEnter"); + n && n.on("execute", (() => { + const t = e.document.selection.getFirstPosition(), + n = e.createRange(e.createPositionAt(t.parent, 0), t.getShiftedBy(-1)); + this._checkAndApplyAutoLinkOnRange(n) + })) + } + _checkAndApplyAutoLinkOnRange(t) { + const e = this.editor.model, + { + text: n, + range: o + } = ik(t, e), + i = uy(n); + if (i) { + const t = e.createRange(o.end.getShiftedBy(-i.length), o.end); + this._applyAutoLink(i, t) + } + } + _applyAutoLink(t, e) { + const n = this.editor.model, + o = zv(t, this.editor.config.get("link.defaultProtocol")); + this.isEnabled && function(t, e) { + return e.schema.checkAttributeInSelection(e.createSelection(t), "linkHref") + }(e, n) && Vv(o) && ! function(t) { + const e = t.start.nodeAfter; + return !!e && e.hasAttribute("linkHref") + }(e) && this._persistAutoLink(o, e) + } + _persistAutoLink(t, e) { + const n = this.editor.model, + o = this.editor.plugins.get("Delete"); + n.enqueueChange((i => { + i.setAttribute("linkHref", t, e), n.enqueueChange((() => { + o.requestUndoOnBackspace() + })) + })) + } + } + + function uy(t) { + const e = dy.exec(t); + return e ? e[2] : null + } + var gy = n(3088), + my = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(gy.Z, my); + gy.Z.locals; + class py { + constructor(t, e) { + this._startElement = t, this._referenceIndent = t.getAttribute("listIndent"), this._isForward = "forward" == e.direction, this._includeSelf = !!e.includeSelf, this._sameAttributes = toArray(e.sameAttributes || []), this._sameIndent = !!e.sameIndent, this._lowerIndent = !!e.lowerIndent, this._higherIndent = !!e.higherIndent + } + static first(t, e) { + const n = new this(t, e)[Symbol.iterator](); + return first(n) + }*[Symbol.iterator]() { + const t = []; + for (const { + node: e + } + of fy(this._getStartNode(), this._isForward ? "forward" : "backward")) { + const n = e.getAttribute("listIndent"); + if (n < this._referenceIndent) { + if (!this._lowerIndent) break; + this._referenceIndent = n + } else if (n > this._referenceIndent) { + if (!this._higherIndent) continue; + if (!this._isForward) { + t.push(e); + continue + } + } else { + if (!this._sameIndent) { + if (this._higherIndent) { + t.length && (yield* t, t.length = 0); + break + } + continue + } + if (this._sameAttributes.some((t => e.getAttribute(t) !== this._startElement.getAttribute(t)))) break + } + t.length && (yield* t, t.length = 0), yield e + } + } + _getStartNode() { + return this._includeSelf ? this._startElement : this._isForward ? this._startElement.nextSibling : this._startElement.previousSibling + } + } + + function* fy(t, e = "forward") { + const n = "forward" == e; + let o = null; + for (; isListItemBlock(t);) yield { + node: t, + previous: o + }, o = t, t = n ? t.nextSibling : t.previousSibling + } + class by { + constructor(t) { + this._listHead = t + } [Symbol.iterator]() { + return fy(this._listHead, "forward") + } + } + Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable; + var ky = n(5730), + wy = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(ky.Z, wy); + ky.Z.locals; + var Ay = n(4564), + Cy = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Ay.Z, Cy); + Ay.Z.locals; + + function _y(t, e) { + const n = e.mapper, + o = e.writer, + i = "numbered" == t.getAttribute("listType") ? "ol" : "ul", + r = function(t) { + const e = t.createContainerElement("li"); + return e.getFillerOffset = zy, e + }(o), + s = o.createContainerElement(i, null); + return o.insert(o.createPositionAt(s, 0), r), n.bindElements(t, r), r + } + + function vy(t, e, n, o) { + const i = e.parent, + r = n.mapper, + s = n.writer; + let a = r.toViewPosition(o.createPositionBefore(t)); + const l = Ey(t.previousSibling, { + sameIndent: !0, + smallerIndent: !0, + listIndent: t.getAttribute("listIndent") + }), + c = t.previousSibling; + if (l && l.getAttribute("listIndent") == t.getAttribute("listIndent")) { + const t = r.toViewElement(l); + a = s.breakContainer(s.createPositionAfter(t)) + } else if (c && "listItem" == c.name) { + a = r.toViewPosition(o.createPositionAt(c, "end")); + const t = r.findMappedViewAncestor(a), + e = Sy(t); + a = e ? s.createPositionBefore(e) : s.createPositionAt(t, "end") + } else a = r.toViewPosition(o.createPositionBefore(t)); + if (a = xy(a), s.insert(a, i), c && "listItem" == c.name) { + const t = r.toViewElement(c), + n = s.createRange(s.createPositionAt(t, 0), a).getWalker({ + ignoreElementEnd: !0 + }); + for (const t of n) + if (t.item.is("element", "li")) { + const o = s.breakContainer(s.createPositionBefore(t.item)), + i = t.item.parent, + r = s.createPositionAt(e, "end"); + yy(s, r.nodeBefore, r.nodeAfter), s.move(s.createRangeOn(i), r), n._position = o + } + } else { + const n = i.nextSibling; + if (n && (n.is("element", "ul") || n.is("element", "ol"))) { + let o = null; + for (const e of n.getChildren()) { + const n = r.toModelElement(e); + if (!(n && n.getAttribute("listIndent") > t.getAttribute("listIndent"))) break; + o = e + } + o && (s.breakContainer(s.createPositionAfter(o)), s.move(s.createRangeOn(o.parent), s.createPositionAt(e, "end"))) + } + } + yy(s, i, i.nextSibling), yy(s, i.previousSibling, i) + } + + function yy(t, e, n) { + return !e || !n || "ul" != e.name && "ol" != e.name || e.name != n.name || e.getAttribute("class") !== n.getAttribute("class") ? null : t.mergeContainers(t.createPositionAfter(e)) + } + + function xy(t) { + return t.getLastMatchingPosition((t => t.item.is("uiElement"))) + } + + function Ey(t, e) { + const n = !!e.sameIndent, + o = !!e.smallerIndent, + i = e.listIndent; + let r = t; + for (; r && "listItem" == r.name;) { + const t = r.getAttribute("listIndent"); + if (n && i == t || o && i > t) return r; + r = "forward" === e.direction ? r.nextSibling : r.previousSibling + } + return null + } + + function Dy(t, e, n, o) { + t.ui.componentFactory.add(e, (i => { + const r = t.commands.get(e), + s = new Mg(i); + return s.set({ + label: n, + icon: o, + tooltip: !0, + isToggleable: !0 + }), s.bind("isOn", "isEnabled").to(r, "value", "isEnabled"), s.on("execute", (() => { + t.execute(e), t.editing.view.focus() + })), s + })) + } + + function Sy(t) { + for (const e of t.getChildren()) + if ("ul" == e.name || "ol" == e.name) return e; + return null + } + + function Ty(t, e) { + const n = [], + o = t.parent, + i = { + ignoreElementEnd: !1, + startPosition: t, + shallow: !0, + direction: e + }, + r = o.getAttribute("listIndent"), + s = [...new yl(i)].filter((t => t.item.is("element"))).map((t => t.item)); + for (const t of s) { + if (!t.is("element", "listItem")) break; + if (t.getAttribute("listIndent") < r) break; + if (!(t.getAttribute("listIndent") > r)) { + if (t.getAttribute("listType") !== o.getAttribute("listType")) break; + if (t.getAttribute("listStyle") !== o.getAttribute("listStyle")) break; + if (t.getAttribute("listReversed") !== o.getAttribute("listReversed")) break; + if (t.getAttribute("listStart") !== o.getAttribute("listStart")) break; + "backward" === e ? n.unshift(t) : n.push(t) + } + } + return n + } + + function By(t) { + let e = [...t.document.selection.getSelectedBlocks()].filter((t => t.is("element", "listItem"))).map((e => { + const n = t.change((t => t.createPositionAt(e, 0))); + return [...Ty(n, "backward"), ...Ty(n, "forward")] + })).flat(); + return e = [...new Set(e)], e + } + const Iy = ["disc", "circle", "square"], + Py = ["decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin"]; + + function Ry(t) { + return Iy.includes(t) ? "bulleted" : Py.includes(t) ? "numbered" : null + } + + function zy() { + const t = !this.isEmpty && ("ul" == this.getChild(0).name || "ol" == this.getChild(0).name); + return this.isEmpty || t ? 0 : ls.call(this) + } + const Vy = '', + Oy = ''; + class Fy extends Vi { + static get pluginName() { + return "ListUI" + } + init() { + const t = this.editor.t; + Dy(this.editor, "numberedList", t("Numbered List"), Vy), Dy(this.editor, "bulletedList", t("Bulleted List"), Oy) + } + } + const My = {}, + Ny = {}, + Ly = {}, + Hy = [{ + listStyle: "disc", + typeAttribute: "disc", + listType: "bulleted" + }, { + listStyle: "circle", + typeAttribute: "circle", + listType: "bulleted" + }, { + listStyle: "square", + typeAttribute: "square", + listType: "bulleted" + }, { + listStyle: "decimal", + typeAttribute: "1", + listType: "numbered" + }, { + listStyle: "decimal-leading-zero", + typeAttribute: null, + listType: "numbered" + }, { + listStyle: "lower-roman", + typeAttribute: "i", + listType: "numbered" + }, { + listStyle: "upper-roman", + typeAttribute: "I", + listType: "numbered" + }, { + listStyle: "lower-alpha", + typeAttribute: "a", + listType: "numbered" + }, { + listStyle: "upper-alpha", + typeAttribute: "A", + listType: "numbered" + }, { + listStyle: "lower-latin", + typeAttribute: "a", + listType: "numbered" + }, { + listStyle: "upper-latin", + typeAttribute: "A", + listType: "numbered" + }]; + for (const { + listStyle: t, + typeAttribute: e, + listType: n + } + of Hy) My[t] = n, Ny[t] = e, e && (Ly[e] = t); + var jy = n(4721), + qy = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(jy.Z, qy); + jy.Z.locals; + class Wy extends cg { + constructor(t, e) { + super(t); + const n = this.bindTemplate; + this.set("isCollapsed", !1), this.set("label", ""), this.buttonView = this._createButtonView(), this.children = this.createCollection(), this.set("_collapsibleAriaLabelUid", void 0), e && this.children.addMany(e), this.setTemplate({ + tag: "div", + attributes: { + class: ["ck", "ck-collapsible", n.if("isCollapsed", "ck-collapsible_collapsed")] + }, + children: [this.buttonView, { + tag: "div", + attributes: { + class: ["ck", "ck-collapsible__children"], + role: "region", + hidden: n.if("isCollapsed", "hidden"), + "aria-labelledby": n.to("_collapsibleAriaLabelUid") + }, + children: this.children + }] + }) + } + render() { + super.render(), this._collapsibleAriaLabelUid = this.buttonView.labelView.element.id + } + _createButtonView() { + const t = new Mg(this.locale), + e = t.bindTemplate; + return t.set({ + withText: !0, + icon: bm + }), t.extendTemplate({ + attributes: { + "aria-expanded": e.to("isOn", (t => String(t))) + } + }), t.bind("label").to(this), t.bind("isOn").to(this, "isCollapsed", (t => !t)), t.on("execute", (() => { + this.isCollapsed = !this.isCollapsed + })), t + } + } + var Uy = n(6082), + $y = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Uy.Z, $y); + Uy.Z.locals; + class Gy extends cg { + constructor(t, { + enabledProperties: e, + styleButtonViews: n, + styleGridAriaLabel: o + }) { + super(t), this.stylesView = null, this.additionalPropertiesCollapsibleView = null, this.startIndexFieldView = null, this.reversedSwitchButtonView = null, this.focusTracker = new Di, this.keystrokes = new Si, this.focusables = new sg; + const i = ["ck", "ck-list-properties"]; + this.children = this.createCollection(), this.focusCycler = new wm({ + focusables: this.focusables, + focusTracker: this.focusTracker, + keystrokeHandler: this.keystrokes, + actions: { + focusPrevious: "shift + tab", + focusNext: "tab" + } + }), e.styles ? (this.stylesView = this._createStylesView(n, o), this.children.add(this.stylesView)) : i.push("ck-list-properties_without-styles"), (e.startIndex || e.reversed) && (this._addNumberedListPropertyViews(e), i.push("ck-list-properties_with-numbered-properties")), this.setTemplate({ + tag: "div", + attributes: { + class: i + }, + children: this.children + }) + } + render() { + if (super.render(), this.stylesView) { + this.focusables.add(this.stylesView), this.focusTracker.add(this.stylesView.element), (this.startIndexFieldView || this.reversedSwitchButtonView) && (this.focusables.add(this.children.last.buttonView), this.focusTracker.add(this.children.last.buttonView.element)); + for (const t of this.stylesView.children) this.stylesView.focusTracker.add(t.element); + rg({ + keystrokeHandler: this.stylesView.keystrokes, + focusTracker: this.stylesView.focusTracker, + gridItems: this.stylesView.children, + numberOfColumns: () => Po.window.getComputedStyle(this.stylesView.element).getPropertyValue("grid-template-columns").split(" ").length, + uiLanguageDirection: this.locale && this.locale.uiLanguageDirection + }) + } + if (this.startIndexFieldView) { + this.focusables.add(this.startIndexFieldView), this.focusTracker.add(this.startIndexFieldView.element); + const t = t => t.stopPropagation(); + this.keystrokes.set("arrowright", t), this.keystrokes.set("arrowleft", t), this.keystrokes.set("arrowup", t), this.keystrokes.set("arrowdown", t) + } + this.reversedSwitchButtonView && (this.focusables.add(this.reversedSwitchButtonView), this.focusTracker.add(this.reversedSwitchButtonView.element)), this.keystrokes.listenTo(this.element) + } + focus() { + this.focusCycler.focusFirst() + } + focusLast() { + this.focusCycler.focusLast() + } + destroy() { + super.destroy(), this.focusTracker.destroy(), this.keystrokes.destroy() + } + _createStylesView(t, e) { + const n = new cg(this.locale); + return n.children = n.createCollection(), n.children.addMany(t), n.setTemplate({ + tag: "div", + attributes: { + "aria-label": e, + class: ["ck", "ck-list-styles-list"] + }, + children: n.children + }), n.children.delegate("execute").to(this), n.focus = function() { + this.children.first.focus() + }, n.focusTracker = new Di, n.keystrokes = new Si, n.render(), n.keystrokes.listenTo(n.element), n + } + _addNumberedListPropertyViews(t) { + const e = this.locale.t, + n = []; + t.startIndex && (this.startIndexFieldView = this._createStartIndexField(), n.push(this.startIndexFieldView)), t.reversed && (this.reversedSwitchButtonView = this._createReversedSwitchButton(), n.push(this.reversedSwitchButtonView)), t.styles ? (this.additionalPropertiesCollapsibleView = new Wy(this.locale, n), this.additionalPropertiesCollapsibleView.set({ + label: e("List properties"), + isCollapsed: !0 + }), this.additionalPropertiesCollapsibleView.buttonView.bind("isEnabled").toMany(n, "isEnabled", ((...t) => t.some((t => t)))), this.additionalPropertiesCollapsibleView.buttonView.on("change:isEnabled", ((t, e, n) => { + n || (this.additionalPropertiesCollapsibleView.isCollapsed = !0) + })), this.children.add(this.additionalPropertiesCollapsibleView)) : this.children.addMany(n) + } + _createStartIndexField() { + const t = this.locale.t, + e = new sm(this.locale, Ym); + return e.set({ + label: t("Start at"), + class: "ck-numbered-list-properties__start-index" + }), e.fieldView.set({ + min: 0, + step: 1, + value: 1, + inputMode: "numeric" + }), e.fieldView.on("input", (() => { + const n = e.fieldView.element, + o = n.valueAsNumber; + Number.isNaN(o) || (n.checkValidity() ? this.fire("listStart", { + startIndex: o + }) : e.errorText = t("Start index must be greater than 0.")) + })), e + } + _createReversedSwitchButton() { + const t = this.locale.t, + e = new Hg(this.locale); + return e.set({ + withText: !0, + label: t("Reversed order"), + class: "ck-numbered-list-properties__reversed-order" + }), e.delegate("execute").to(this, "listReversed"), e + } + } + var Ky = n(2417), + Zy = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Ky.Z, Zy); + Ky.Z.locals; + class Jy extends Vi { + static get pluginName() { + return "ListPropertiesUI" + } + init() { + const t = this.editor, + e = t.locale.t, + n = t.config.get("list.properties"); + n.styles && t.ui.componentFactory.add("bulletedList", Yy({ + editor: t, + parentCommandName: "bulletedList", + buttonLabel: e("Bulleted List"), + buttonIcon: Oy, + styleGridAriaLabel: e("Bulleted list styles toolbar"), + styleDefinitions: [{ + label: e("Toggle the disc list style"), + tooltip: e("Disc"), + type: "disc", + icon: '' + }, { + label: e("Toggle the circle list style"), + tooltip: e("Circle"), + type: "circle", + icon: '' + }, { + label: e("Toggle the square list style"), + tooltip: e("Square"), + type: "square", + icon: '' + }] + })), (n.styles || n.startIndex || n.reversed) && t.ui.componentFactory.add("numberedList", Yy({ + editor: t, + parentCommandName: "numberedList", + buttonLabel: e("Numbered List"), + buttonIcon: Vy, + styleGridAriaLabel: e("Numbered list styles toolbar"), + styleDefinitions: [{ + label: e("Toggle the decimal list style"), + tooltip: e("Decimal"), + type: "decimal", + icon: '' + }, { + label: e("Toggle the decimal with leading zero list style"), + tooltip: e("Decimal with leading zero"), + type: "decimal-leading-zero", + icon: '' + }, { + label: e("Toggle the lower–roman list style"), + tooltip: e("Lower–roman"), + type: "lower-roman", + icon: '' + }, { + label: e("Toggle the upper–roman list style"), + tooltip: e("Upper-roman"), + type: "upper-roman", + icon: '' + }, { + label: e("Toggle the lower–latin list style"), + tooltip: e("Lower-latin"), + type: "lower-latin", + icon: '' + }, { + label: e("Toggle the upper–latin list style"), + tooltip: e("Upper-latin"), + type: "upper-latin", + icon: '' + }] + })) + } + } + + function Yy({ + editor: t, + parentCommandName: e, + buttonLabel: n, + buttonIcon: o, + styleGridAriaLabel: i, + styleDefinitions: r + }) { + const s = t.commands.get(e); + return a => { + const l = Wm(a, Nm), + c = l.buttonView; + return l.bind("isEnabled").to(s), l.class = "ck-list-styles-dropdown", c.on("execute", (() => { + t.execute(e), t.editing.view.focus() + })), c.set({ + label: n, + icon: o, + tooltip: !0, + isToggleable: !0 + }), c.bind("isOn").to(s, "value", (t => !!t)), l.once("change:isOpen", (() => { + const n = function({ + editor: t, + dropdownView: e, + parentCommandName: n, + styleDefinitions: o, + styleGridAriaLabel: i + }) { + const r = t.locale, + s = t.config.get("list.properties"); + let a = null; + "numberedList" != n && (s.startIndex = !1, s.reversed = !1); + if (s.styles) { + const e = t.commands.get("listStyle"), + i = function({ + editor: t, + listStyleCommand: e, + parentCommandName: n + }) { + const o = t.locale, + i = t.commands.get(n); + return ({ + label: n, + type: r, + icon: s, + tooltip: a + }) => { + const l = new Mg(o); + return l.set({ + label: n, + icon: s, + tooltip: a + }), e.on("change:value", (() => { + l.isOn = e.value === r + })), l.on("execute", (() => { + i.value ? e.value !== r ? t.execute("listStyle", { + type: r + }) : t.execute("listStyle", { + type: e.defaultType + }) : t.model.change((() => { + t.execute("listStyle", { + type: r + }) + })) + })), l + } + }({ + editor: t, + parentCommandName: n, + listStyleCommand: e + }), + r = "function" == typeof e.isStyleTypeSupported ? t => e.isStyleTypeSupported(t.type) : () => !0; + a = o.filter(r).map(i) + } + const l = new Gy(r, { + styleGridAriaLabel: i, + enabledProperties: s, + styleButtonViews: a + }); + s.styles && Zm(e, (() => l.stylesView.children.find((t => t.isOn)))); + if (s.startIndex) { + const e = t.commands.get("listStart"); + l.startIndexFieldView.bind("isEnabled").to(e), l.startIndexFieldView.fieldView.bind("value").to(e), l.on("listStart", ((e, n) => t.execute("listStart", n))) + } + if (s.reversed) { + const e = t.commands.get("listReversed"); + l.reversedSwitchButtonView.bind("isEnabled").to(e), l.reversedSwitchButtonView.bind("isOn").to(e, "value", (t => !!t)), l.on("listReversed", (() => { + const n = e.value; + t.execute("listReversed", { + reversed: !n + }) + })) + } + return l.delegate("execute").to(e), l + }({ + editor: t, + dropdownView: l, + parentCommandName: e, + styleGridAriaLabel: i, + styleDefinitions: r + }); + l.panelView.children.add(n) + })), l.on("execute", (() => { + t.editing.view.focus() + })), l + } + } + class Qy extends Fi { + constructor(t, e) { + super(t), this._indentBy = "forward" == e ? 1 : -1 + } + refresh() { + this.isEnabled = this._checkEnabled() + } + execute() { + const t = this.editor.model, + e = t.document; + let n = Array.from(e.selection.getSelectedBlocks()); + t.change((t => { + const e = n[n.length - 1]; + let o = e.nextSibling; + for (; o && "listItem" == o.name && o.getAttribute("listIndent") > e.getAttribute("listIndent");) n.push(o), o = o.nextSibling; + this._indentBy < 0 && (n = n.reverse()); + for (const e of n) { + const n = e.getAttribute("listIndent") + this._indentBy; + n < 0 ? t.rename(e, "paragraph") : t.setAttribute("listIndent", n, e) + } + this.fire("_executeCleanup", n) + })) + } + _checkEnabled() { + const t = Ei(this.editor.model.document.selection.getSelectedBlocks()); + if (!t || !t.is("element", "listItem")) return !1; + if (this._indentBy > 0) { + const e = t.getAttribute("listIndent"), + n = t.getAttribute("listType"); + let o = t.previousSibling; + for (; o && o.is("element", "listItem") && o.getAttribute("listIndent") >= e;) { + if (o.getAttribute("listIndent") == e) return o.getAttribute("listType") == n; + o = o.previousSibling + } + return !1 + } + return !0 + } + } + class Xy extends Fi { + constructor(t, e) { + super(t), this.type = e + } + refresh() { + this.value = this._getValue(), this.isEnabled = this._checkEnabled() + } + execute(t = {}) { + const e = this.editor.model, + n = e.document, + o = Array.from(n.selection.getSelectedBlocks()).filter((t => ex(t, e.schema))), + i = void 0 !== t.forceValue ? !t.forceValue : this.value; + e.change((t => { + if (i) { + let e = o[o.length - 1].nextSibling, + n = Number.POSITIVE_INFINITY, + i = []; + for (; e && "listItem" == e.name && 0 !== e.getAttribute("listIndent");) { + const t = e.getAttribute("listIndent"); + t < n && (n = t); + const o = t - n; + i.push({ + element: e, + listIndent: o + }), e = e.nextSibling + } + i = i.reverse(); + for (const e of i) t.setAttribute("listIndent", e.listIndent, e.element) + } + if (!i) { + let t = Number.POSITIVE_INFINITY; + for (const e of o) e.is("element", "listItem") && e.getAttribute("listIndent") < t && (t = e.getAttribute("listIndent")); + t = 0 === t ? 1 : t, tx(o, !0, t), tx(o, !1, t) + } + for (const e of o.reverse()) i && "listItem" == e.name ? t.rename(e, "paragraph") : i || "listItem" == e.name ? i || "listItem" != e.name || e.getAttribute("listType") == this.type || t.setAttribute("listType", this.type, e) : (t.setAttributes({ + listType: this.type, + listIndent: 0 + }, e), t.rename(e, "listItem")); + this.fire("_executeCleanup", o) + })) + } + _getValue() { + const t = Ei(this.editor.model.document.selection.getSelectedBlocks()); + return !!t && t.is("element", "listItem") && t.getAttribute("listType") == this.type + } + _checkEnabled() { + if (this.value) return !0; + const t = this.editor.model.document.selection, + e = this.editor.model.schema, + n = Ei(t.getSelectedBlocks()); + return !!n && ex(n, e) + } + } + + function tx(t, e, n) { + const o = e ? t[0] : t[t.length - 1]; + if (o.is("element", "listItem")) { + let i = o[e ? "previousSibling" : "nextSibling"], + r = o.getAttribute("listIndent"); + for (; i && i.is("element", "listItem") && i.getAttribute("listIndent") >= n;) r > i.getAttribute("listIndent") && (r = i.getAttribute("listIndent")), i.getAttribute("listIndent") == r && t[e ? "unshift" : "push"](i), i = i[e ? "previousSibling" : "nextSibling"] + } + } + + function ex(t, e) { + return e.checkChild(t.parent, "listItem") && !e.isObject(t) + } + class nx extends Vi { + static get pluginName() { + return "ListUtils" + } + getListTypeFromListStyleType(t) { + return Ry(t) + } + getSelectedListItems(t) { + return By(t) + } + getSiblingNodes(t, e) { + return Ty(t, e) + } + } + + function ox(t) { + return (e, n, o) => { + const i = o.consumable; + if (!i.test(n.item, "insert") || !i.test(n.item, "attribute:listType") || !i.test(n.item, "attribute:listIndent")) return; + i.consume(n.item, "insert"), i.consume(n.item, "attribute:listType"), i.consume(n.item, "attribute:listIndent"); + const r = n.item; + vy(r, _y(r, o), o, t) + } + } + const ix = (t, e, n) => { + if (!n.consumable.test(e.item, t.name)) return; + const o = n.mapper.toViewElement(e.item), + i = n.writer; + i.breakContainer(i.createPositionBefore(o)), i.breakContainer(i.createPositionAfter(o)); + const r = o.parent, + s = "numbered" == e.attributeNewValue ? "ol" : "ul"; + i.rename(s, r) + }, + rx = (t, e, n) => { + n.consumable.consume(e.item, t.name); + const o = n.mapper.toViewElement(e.item).parent, + i = n.writer; + yy(i, o, o.nextSibling), yy(i, o.previousSibling, o) + }; + const sx = (t, e, n) => { + if (n.consumable.test(e.item, t.name) && "listItem" != e.item.name) { + let t = n.mapper.toViewPosition(e.range.start); + const o = n.writer, + i = []; + for (; + ("ul" == t.parent.name || "ol" == t.parent.name) && (t = o.breakContainer(t), "li" == t.parent.name);) { + const e = t, + n = o.createPositionAt(t.parent, "end"); + if (!e.isEqual(n)) { + const t = o.remove(o.createRange(e, n)); + i.push(t) + } + t = o.createPositionAfter(t.parent) + } + if (i.length > 0) { + for (let e = 0; e < i.length; e++) { + const n = t.nodeBefore; + if (t = o.insert(t, i[e]).end, e > 0) { + const e = yy(o, n, n.nextSibling); + e && e.parent == n && t.offset-- + } + } + yy(o, t.nodeBefore, t.nodeAfter) + } + } + }, + ax = (t, e, n) => { + const o = n.mapper.toViewPosition(e.position), + i = o.nodeBefore, + r = o.nodeAfter; + yy(n.writer, i, r) + }, + lx = (t, e, n) => { + if (n.consumable.consume(e.viewItem, { + name: !0 + })) { + const t = n.writer, + o = t.createElement("listItem"), + i = function(t) { + let e = 0, + n = t.parent; + for (; n;) { + if (n.is("element", "li")) e++; + else { + const t = n.previousSibling; + t && t.is("element", "li") && e++ + } + n = n.parent + } + return e + }(e.viewItem); + t.setAttribute("listIndent", i, o); + const r = e.viewItem.parent && "ol" == e.viewItem.parent.name ? "numbered" : "bulleted"; + if (t.setAttribute("listType", r, o), !n.safeInsert(o, e.modelCursor)) return; + const s = function(t, e, n) { + const { + writer: o, + schema: i + } = n; + let r = o.createPositionAfter(t); + for (const s of e) + if ("ul" == s.name || "ol" == s.name) r = n.convertItem(s, r).modelCursor; + else { + const e = n.convertItem(s, o.createPositionAt(t, "end")), + a = e.modelRange.start.nodeAfter; + a && a.is("element") && !i.checkChild(t, a.name) && (t = e.modelCursor.parent.is("element", "listItem") ? e.modelCursor.parent : gx(e.modelCursor), r = o.createPositionAfter(t)) + } return r + }(o, e.viewItem.getChildren(), n); + e.modelRange = t.createRange(e.modelCursor, s), n.updateConversionResult(o, e) + } + }, + cx = (t, e, n) => { + if (n.consumable.test(e.viewItem, { + name: !0 + })) { + const t = Array.from(e.viewItem.getChildren()); + for (const e of t) { + !(e.is("element", "li") || px(e)) && e._remove() + } + } + }, + dx = (t, e, n) => { + if (n.consumable.test(e.viewItem, { + name: !0 + })) { + if (0 === e.viewItem.childCount) return; + const t = [...e.viewItem.getChildren()]; + let n = !1; + for (const e of t) n && !px(e) && e._remove(), px(e) && (n = !0) + } + }; + + function hx(t) { + return (e, n) => { + if (n.isPhantom) return; + const o = n.modelPosition.nodeBefore; + if (o && o.is("element", "listItem")) { + const e = n.mapper.toViewElement(o), + i = e.getAncestors().find(px), + r = t.createPositionAt(e, 0).getWalker(); + for (const t of r) { + if ("elementStart" == t.type && t.item.is("element", "li")) { + n.viewPosition = t.previousPosition; + break + } + if ("elementEnd" == t.type && t.item == i) { + n.viewPosition = t.nextPosition; + break + } + } + } + } + } + const ux = function(t, [e, n]) { + const o = this; + let i, r = e.is("documentFragment") ? e.getChild(0) : e; + if (i = n ? o.createSelection(n) : o.document.selection, r && r.is("element", "listItem")) { + const t = i.getFirstPosition(); + let e = null; + if (t.parent.is("element", "listItem") ? e = t.parent : t.nodeBefore && t.nodeBefore.is("element", "listItem") && (e = t.nodeBefore), e) { + const t = e.getAttribute("listIndent"); + if (t > 0) + for (; r && r.is("element", "listItem");) r._setAttribute("listIndent", r.getAttribute("listIndent") + t), r = r.nextSibling + } + } + }; + + function gx(t) { + const e = new yl({ + startPosition: t + }); + let n; + do { + n = e.next() + } while (!n.value.item.is("element", "listItem")); + return n.value.item + } + + function mx(t, e, n, o, i, r) { + const s = Ey(e.nodeBefore, { + sameIndent: !0, + smallerIndent: !0, + listIndent: t + }), + a = i.mapper, + l = i.writer, + c = s ? s.getAttribute("listIndent") : null; + let d; + if (s) + if (c == t) { + const t = a.toViewElement(s).parent; + d = l.createPositionAfter(t) + } else { + const t = r.createPositionAt(s, "end"); + d = a.toViewPosition(t) + } + else d = n; + d = xy(d); + for (const t of [...o.getChildren()]) px(t) && (d = l.move(l.createRangeOn(t), d).end, yy(l, t, t.nextSibling), yy(l, t.previousSibling, t)) + } + + function px(t) { + return t.is("element", "ol") || t.is("element", "ul") + } + class fx extends Vi { + static get pluginName() { + return "ListEditing" + } + static get requires() { + return [aw, ok, nx] + } + init() { + const t = this.editor; + t.model.schema.register("listItem", { + inheritAllFrom: "$block", + allowAttributes: ["listType", "listIndent"] + }); + const e = t.data, + n = t.editing; + var o; + t.model.document.registerPostFixer((e => function(t, e) { + const n = t.document.differ.getChanges(), + o = new Map; + let i = !1; + for (const o of n) + if ("insert" == o.type && "listItem" == o.name) r(o.position); + else if ("insert" == o.type && "listItem" != o.name) { + if ("$text" != o.name) { + const n = o.position.nodeAfter; + n.hasAttribute("listIndent") && (e.removeAttribute("listIndent", n), i = !0), n.hasAttribute("listType") && (e.removeAttribute("listType", n), i = !0), n.hasAttribute("listStyle") && (e.removeAttribute("listStyle", n), i = !0), n.hasAttribute("listReversed") && (e.removeAttribute("listReversed", n), i = !0), n.hasAttribute("listStart") && (e.removeAttribute("listStart", n), i = !0); + for (const e of Array.from(t.createRangeIn(n)).filter((t => t.item.is("element", "listItem")))) r(e.previousPosition) + } + r(o.position.getShiftedBy(o.length)) + } else "remove" == o.type && "listItem" == o.name ? r(o.position) : ("attribute" == o.type && "listIndent" == o.attributeKey || "attribute" == o.type && "listType" == o.attributeKey) && r(o.range.start); + for (const t of o.values()) s(t), a(t); + return i; + + function r(t) { + const e = t.nodeBefore; + if (e && e.is("element", "listItem")) { + let t = e; + if (o.has(t)) return; + for (let e = t.previousSibling; e && e.is("element", "listItem"); e = t.previousSibling) + if (t = e, o.has(t)) return; + o.set(e, t) + } else { + const e = t.nodeAfter; + e && e.is("element", "listItem") && o.set(e, e) + } + } + + function s(t) { + let n = 0, + o = null; + for (; t && t.is("element", "listItem");) { + const r = t.getAttribute("listIndent"); + if (r > n) { + let s; + null === o ? (o = r - n, s = n) : (o > r && (o = r), s = r - o), e.setAttribute("listIndent", s, t), i = !0 + } else o = null, n = t.getAttribute("listIndent") + 1; + t = t.nextSibling + } + } + + function a(t) { + let n = [], + o = null; + for (; t && t.is("element", "listItem");) { + const r = t.getAttribute("listIndent"); + if (o && o.getAttribute("listIndent") > r && (n = n.slice(0, r + 1)), 0 != r) + if (n[r]) { + const o = n[r]; + t.getAttribute("listType") != o && (e.setAttribute("listType", o, t), i = !0) + } else n[r] = t.getAttribute("listType"); + o = t, t = t.nextSibling + } + } + }(t.model, e))), n.mapper.registerViewToModelLength("li", bx), e.mapper.registerViewToModelLength("li", bx), n.mapper.on("modelToViewPosition", hx(n.view)), n.mapper.on("viewToModelPosition", (o = t.model, (t, e) => { + const n = e.viewPosition, + i = n.parent, + r = e.mapper; + if ("ul" == i.name || "ol" == i.name) { + if (n.isAtEnd) { + const t = r.toModelElement(n.nodeBefore), + i = r.getModelLength(n.nodeBefore); + e.modelPosition = o.createPositionBefore(t).getShiftedBy(i) + } else { + const t = r.toModelElement(n.nodeAfter); + e.modelPosition = o.createPositionBefore(t) + } + t.stop() + } else if ("li" == i.name && n.nodeBefore && ("ul" == n.nodeBefore.name || "ol" == n.nodeBefore.name)) { + const s = r.toModelElement(i); + let a = 1, + l = n.nodeBefore; + for (; l && px(l);) a += r.getModelLength(l), l = l.previousSibling; + e.modelPosition = o.createPositionBefore(s).getShiftedBy(a), t.stop() + } + })), e.mapper.on("modelToViewPosition", hx(n.view)), t.conversion.for("editingDowncast").add((e => { + e.on("insert", sx, { + priority: "high" + }), e.on("insert:listItem", ox(t.model)), e.on("attribute:listType:listItem", ix, { + priority: "high" + }), e.on("attribute:listType:listItem", rx, { + priority: "low" + }), e.on("attribute:listIndent:listItem", function(t) { + return (e, n, o) => { + if (!o.consumable.consume(n.item, "attribute:listIndent")) return; + const i = o.mapper.toViewElement(n.item), + r = o.writer; + r.breakContainer(r.createPositionBefore(i)), r.breakContainer(r.createPositionAfter(i)); + const s = i.parent, + a = s.previousSibling, + l = r.createRangeOn(s); + r.remove(l), a && a.nextSibling && yy(r, a, a.nextSibling), mx(n.attributeOldValue + 1, n.range.start, l.start, i, o, t), vy(n.item, i, o, t); + for (const t of n.item.getChildren()) o.consumable.consume(t, "insert") + } + }(t.model)), e.on("remove:listItem", function(t) { + return (e, n, o) => { + const i = o.mapper.toViewPosition(n.position).getLastMatchingPosition((t => !t.item.is("element", "li"))).nodeAfter, + r = o.writer; + r.breakContainer(r.createPositionBefore(i)), r.breakContainer(r.createPositionAfter(i)); + const s = i.parent, + a = s.previousSibling, + l = r.createRangeOn(s), + c = r.remove(l); + a && a.nextSibling && yy(r, a, a.nextSibling), mx(o.mapper.toModelElement(i).getAttribute("listIndent") + 1, n.position, l.start, i, o, t); + for (const t of r.createRangeIn(c).getItems()) o.mapper.unbindViewElement(t); + e.stop() + } + }(t.model)), e.on("remove", ax, { + priority: "low" + }) + })), t.conversion.for("dataDowncast").add((e => { + e.on("insert", sx, { + priority: "high" + }), e.on("insert:listItem", ox(t.model)) + })), t.conversion.for("upcast").add((t => { + t.on("element:ul", cx, { + priority: "high" + }), t.on("element:ol", cx, { + priority: "high" + }), t.on("element:li", dx, { + priority: "high" + }), t.on("element:li", lx) + })), t.model.on("insertContent", ux, { + priority: "high" + }), t.commands.add("numberedList", new Xy(t, "numbered")), t.commands.add("bulletedList", new Xy(t, "bulleted")), t.commands.add("indentList", new Qy(t, "forward")), t.commands.add("outdentList", new Qy(t, "backward")); + const i = n.view.document; + this.listenTo(i, "enter", ((t, e) => { + const n = this.editor.model.document, + o = n.selection.getLastPosition().parent; + n.selection.isCollapsed && "listItem" == o.name && o.isEmpty && (this.editor.execute("outdentList"), e.preventDefault(), t.stop()) + }), { + context: "li" + }), this.listenTo(i, "delete", ((t, e) => { + if ("backward" !== e.direction) return; + const n = this.editor.model.document.selection; + if (!n.isCollapsed) return; + const o = n.getFirstPosition(); + if (!o.isAtStart) return; + const i = o.parent; + if ("listItem" !== i.name) return; + i.previousSibling && "listItem" === i.previousSibling.name || (this.editor.execute("outdentList"), e.preventDefault(), t.stop()) + }), { + context: "li" + }), this.listenTo(t.editing.view.document, "tab", ((e, n) => { + const o = n.shiftKey ? "outdentList" : "indentList"; + this.editor.commands.get(o).isEnabled && (t.execute(o), n.stopPropagation(), n.preventDefault(), e.stop()) + }), { + context: "li" + }) + } + afterInit() { + const t = this.editor.commands, + e = t.get("indent"), + n = t.get("outdent"); + e && e.registerChildCommand(t.get("indentList")), n && n.registerChildCommand(t.get("outdentList")) + } + } + + function bx(t) { + let e = 1; + for (const n of t.getChildren()) + if ("ul" == n.name || "ol" == n.name) + for (const t of n.getChildren()) e += bx(t); + return e + } + class kx extends Fi { + constructor(t, e) { + super(t), this.defaultType = e + } + refresh() { + this.value = this._getValue(), this.isEnabled = this._checkEnabled() + } + execute(t = {}) { + this._tryToConvertItemsToList(t); + const e = this.editor.model, + n = By(e); + n.length && e.change((e => { + for (const o of n) e.setAttribute("listStyle", t.type || this.defaultType, o) + })) + } + _getValue() { + const t = this.editor.model.document.selection.getFirstPosition().parent; + return t && t.is("element", "listItem") ? t.getAttribute("listStyle") : null + } + _checkEnabled() { + const t = this.editor, + e = t.commands.get("numberedList"), + n = t.commands.get("bulletedList"); + return e.isEnabled || n.isEnabled + } + _tryToConvertItemsToList(t) { + if (!t.type) return; + const e = Ry(t.type); + if (!e) return; + const n = this.editor, + o = `${e}List`; + n.commands.get(o).value || n.execute(o) + } + } + class wx extends Fi { + refresh() { + const t = this._getValue(); + this.value = t, this.isEnabled = null != t + } + execute(t = {}) { + const e = this.editor.model, + n = By(e).filter((t => "numbered" == t.getAttribute("listType"))); + e.change((e => { + for (const o of n) e.setAttribute("listReversed", !!t.reversed, o) + })) + } + _getValue() { + const t = this.editor.model.document.selection.getFirstPosition().parent; + return t && t.is("element", "listItem") && "numbered" == t.getAttribute("listType") ? t.getAttribute("listReversed") : null + } + } + class Ax extends Fi { + refresh() { + const t = this._getValue(); + this.value = t, this.isEnabled = null != t + } + execute({ + startIndex: t = 1 + } = {}) { + const e = this.editor.model, + n = By(e).filter((t => "numbered" == t.getAttribute("listType"))); + e.change((e => { + for (const o of n) e.setAttribute("listStart", t >= 0 ? t : 1, o) + })) + } + _getValue() { + const t = this.editor.model.document.selection.getFirstPosition().parent; + return t && t.is("element", "listItem") && "numbered" == t.getAttribute("listType") ? t.getAttribute("listStart") : null + } + } + const Cx = "default"; + class _x extends Vi { + static get requires() { + return [fx] + } + static get pluginName() { + return "ListPropertiesEditing" + } + constructor(t) { + super(t), t.config.define("list", { + properties: { + styles: !0, + startIndex: !1, + reversed: !1 + } + }) + } + init() { + const t = this.editor, + e = t.model, + n = function(t) { + const e = []; + t.styles && e.push({ + attributeName: "listStyle", + defaultValue: Cx, + addCommand(t) { + t.commands.add("listStyle", new kx(t, Cx)) + }, + appliesToListItem: () => !0, + setAttributeOnDowncast(t, e, n) { + e && e !== Cx ? t.setStyle("list-style-type", e, n) : t.removeStyle("list-style-type", n) + }, + getAttributeOnUpcast: t => t.getStyle("list-style-type") || Cx + }); + t.reversed && e.push({ + attributeName: "listReversed", + defaultValue: !1, + addCommand(t) { + t.commands.add("listReversed", new wx(t)) + }, + appliesToListItem: t => "numbered" == t.getAttribute("listType"), + setAttributeOnDowncast(t, e, n) { + e ? t.setAttribute("reversed", "reversed", n) : t.removeAttribute("reversed", n) + }, + getAttributeOnUpcast: t => t.hasAttribute("reversed") + }); + t.startIndex && e.push({ + attributeName: "listStart", + defaultValue: 1, + addCommand(t) { + t.commands.add("listStart", new Ax(t)) + }, + appliesToListItem: t => "numbered" == t.getAttribute("listType"), + setAttributeOnDowncast(t, e, n) { + 0 == e || e > 1 ? t.setAttribute("start", e, n) : t.removeAttribute("start", n) + }, + getAttributeOnUpcast(t) { + const e = t.getAttribute("start"); + return e >= 0 ? e : 1 + } + }); + return e + }(t.config.get("list.properties")); + e.schema.extend("listItem", { + allowAttributes: n.map((t => t.attributeName)) + }); + for (const e of n) e.addCommand(t); + var o; + this.listenTo(t.commands.get("indentList"), "_executeCleanup", function(t, e) { + return (n, o) => { + const i = o[0], + r = i.getAttribute("listIndent"), + s = o.filter((t => t.getAttribute("listIndent") === r)); + let a = null; + i.previousSibling.getAttribute("listIndent") + 1 !== r && (a = Ey(i.previousSibling, { + sameIndent: !0, + direction: "backward", + listIndent: r + })), t.model.change((t => { + for (const n of s) + for (const o of e) + if (o.appliesToListItem(n)) { + const e = null == a ? o.defaultValue : a.getAttribute(o.attributeName); + t.setAttribute(o.attributeName, e, n) + } + })) + } + }(t, n)), this.listenTo(t.commands.get("outdentList"), "_executeCleanup", function(t, e) { + return (n, o) => { + if (!(o = o.reverse().filter((t => t.is("element", "listItem")))).length) return; + const i = o[0].getAttribute("listIndent"), + r = o[0].getAttribute("listType"); + let s = o[0].previousSibling; + if (s.is("element", "listItem")) + for (; s.getAttribute("listIndent") !== i;) s = s.previousSibling; + else s = null; + s || (s = o[o.length - 1].nextSibling), s && s.is("element", "listItem") && s.getAttribute("listType") === r && t.model.change((t => { + const n = o.filter((t => t.getAttribute("listIndent") === i)); + for (const o of n) + for (const n of e) + if (n.appliesToListItem(o)) { + const e = n.attributeName, + i = s.getAttribute(e); + t.setAttribute(e, i, o) + } + })) + } + }(t, n)), this.listenTo(t.commands.get("bulletedList"), "_executeCleanup", xx(t)), this.listenTo(t.commands.get("numberedList"), "_executeCleanup", xx(t)), e.document.registerPostFixer(function(t, e) { + return n => { + let o = !1; + const i = Ex(t.model.document.differ.getChanges()).filter((t => "todo" !== t.getAttribute("listType"))); + if (!i.length) return o; + let r = i[i.length - 1].nextSibling; + if ((!r || !r.is("element", "listItem")) && (r = i[0].previousSibling, r)) { + const t = i[0].getAttribute("listIndent"); + for (; r.is("element", "listItem") && r.getAttribute("listIndent") !== t && (r = r.previousSibling, r);); + } + for (const t of e) { + const e = t.attributeName; + for (const s of i) + if (t.appliesToListItem(s)) + if (s.hasAttribute(e)) { + const i = s.previousSibling; + yx(i, s, t.attributeName) && (n.setAttribute(e, i.getAttribute(e), s), o = !0) + } else vx(r, s, t) ? n.setAttribute(e, r.getAttribute(e), s) : n.setAttribute(e, t.defaultValue, s), o = !0; + else n.removeAttribute(e, s) + } + return o + } + }(t, n)), t.conversion.for("upcast").add((o = n, t => { + t.on("element:li", ((t, e, n) => { + if (!e.modelRange) return; + const i = e.viewItem.parent, + r = e.modelRange.start.nodeAfter || e.modelRange.end.nodeBefore; + for (const t of o) + if (t.appliesToListItem(r)) { + const e = t.getAttributeOnUpcast(i); + n.writer.setAttribute(t.attributeName, e, r) + } + }), { + priority: "low" + }) + })), t.conversion.for("downcast").add(function(t) { + return n => { + for (const o of t) n.on(`attribute:${o.attributeName}:listItem`, ((t, n, i) => { + const r = i.writer, + s = n.item, + a = Ey(s.previousSibling, { + sameIndent: !0, + listIndent: s.getAttribute("listIndent"), + direction: "backward" + }), + l = i.mapper.toViewElement(s); + e(s, a) || r.breakContainer(r.createPositionBefore(l)), o.setAttributeOnDowncast(r, n.attributeNewValue, l.parent) + }), { + priority: "low" + }) + }; + + function e(t, e) { + return e && t.getAttribute("listType") === e.getAttribute("listType") && t.getAttribute("listIndent") === e.getAttribute("listIndent") && t.getAttribute("listStyle") === e.getAttribute("listStyle") && t.getAttribute("listReversed") === e.getAttribute("listReversed") && t.getAttribute("listStart") === e.getAttribute("listStart") + } + }(n)), this._mergeListAttributesWhileMergingLists(n) + } + afterInit() { + const t = this.editor; + t.commands.get("todoList") && t.model.document.registerPostFixer(function(t) { + return e => { + const n = Ex(t.model.document.differ.getChanges()).filter((t => "todo" === t.getAttribute("listType") && (t.hasAttribute("listStyle") || t.hasAttribute("listReversed") || t.hasAttribute("listStart")))); + if (!n.length) return !1; + for (const t of n) e.removeAttribute("listStyle", t), e.removeAttribute("listReversed", t), e.removeAttribute("listStart", t); + return !0 + } + }(t)) + } + _mergeListAttributesWhileMergingLists(t) { + const e = this.editor.model; + let n; + this.listenTo(e, "deleteContent", ((t, [e]) => { + const o = e.getFirstPosition(), + i = e.getLastPosition(); + if (o.parent === i.parent) return; + if (!o.parent.is("element", "listItem")) return; + const r = i.parent.nextSibling; + if (!r || !r.is("element", "listItem")) return; + const s = Ey(o.parent, { + sameIndent: !0, + listIndent: r.getAttribute("listIndent") + }); + s && s.getAttribute("listType") === r.getAttribute("listType") && (n = s) + }), { + priority: "high" + }), this.listenTo(e, "deleteContent", (() => { + n && (e.change((e => { + const o = Ey(n.nextSibling, { + sameIndent: !0, + listIndent: n.getAttribute("listIndent"), + direction: "forward" + }); + if (!o) return void(n = null); + const i = [o, ...Ty(e.createPositionAt(o, 0), "forward")]; + for (const o of i) + for (const i of t) + if (i.appliesToListItem(o)) { + const t = i.attributeName, + r = n.getAttribute(t); + e.setAttribute(t, r, o) + } + })), n = null) + }), { + priority: "low" + }) + } + } + + function vx(t, e, n) { + if (!t) return !1; + const o = t.getAttribute(n.attributeName); + return !!o && (o != n.defaultValue && t.getAttribute("listType") === e.getAttribute("listType")) + } + + function yx(t, e, n) { + if (!t || !t.is("element", "listItem")) return !1; + if (e.getAttribute("listType") !== t.getAttribute("listType")) return !1; + const o = t.getAttribute("listIndent"); + if (o < 1 || o !== e.getAttribute("listIndent")) return !1; + const i = t.getAttribute(n); + return !(!i || i === e.getAttribute(n)) + } + + function xx(t) { + return (e, n) => { + n = n.filter((t => t.is("element", "listItem"))), t.model.change((t => { + for (const e of n) t.removeAttribute("listStyle", e) + })) + } + } + + function Ex(t) { + const e = []; + for (const n of t) { + const t = Dx(n); + t && t.is("element", "listItem") && e.push(t) + } + return e + } + + function Dx(t) { + return "attribute" === t.type ? t.range.start.nodeAfter : "insert" === t.type ? t.position.nodeAfter : null + } + const Sx = "todoListChecked"; + class Tx extends Fi { + constructor(t) { + super(t), this._selectedElements = [], this.on("execute", (() => { + this.refresh() + }), { + priority: "highest" + }) + } + refresh() { + this._selectedElements = this._getSelectedItems(), this.value = this._selectedElements.every((t => !!t.getAttribute(Sx))), this.isEnabled = !!this._selectedElements.length + } + _getSelectedItems() { + const t = this.editor.model, + e = t.schema, + n = t.document.selection.getFirstRange(), + o = n.start.parent, + i = []; + e.checkAttribute(o, Sx) && i.push(o); + for (const t of n.getItems()) e.checkAttribute(t, Sx) && !i.includes(t) && i.push(t); + return i + } + execute(t = {}) { + this.editor.model.change((e => { + for (const n of this._selectedElements) { + (void 0 === t.forceValue ? !this.value : t.forceValue) ? e.setAttribute(Sx, !0, n): e.removeAttribute(Sx, n) + } + })) + } + } + const Bx = (t, e, n) => { + const o = e.modelCursor, + i = o.parent, + r = e.viewItem; + if ("checkbox" != r.getAttribute("type") || "listItem" != i.name || !o.isAtStart) return; + if (!n.consumable.consume(r, { + name: !0 + })) return; + const s = n.writer; + s.setAttribute("listType", "todo", i), e.viewItem.hasAttribute("checked") && s.setAttribute("todoListChecked", !0, i), e.modelRange = s.createRange(o) + }; + + function Ix(t) { + return (e, n) => { + const o = n.modelPosition, + i = o.parent; + if (!i.is("element", "listItem") || "todo" != i.getAttribute("listType")) return; + const r = Rx(n.mapper.toViewElement(i), t); + r && (n.viewPosition = n.mapper.findPositionIn(r, o.offset)) + } + } + + function Px(t, e, n, o) { + return e.createUIElement("label", { + class: "todo-list__label", + contenteditable: !1 + }, (function(e) { + const i = pt(document, "input", { + type: "checkbox", + tabindex: "-1" + }); + n && i.setAttribute("checked", "checked"), i.addEventListener("change", (() => o(t))); + const r = this.toDomElement(e); + return r.appendChild(i), r + })) + } + + function Rx(t, e) { + const n = e.createRangeIn(t); + for (const t of n) + if (t.item.is("containerElement", "span") && t.item.hasClass("todo-list__label__description")) return t.item + } + const zx = bi("Ctrl+Enter"); + class Vx extends Vi { + static get pluginName() { + return "TodoListEditing" + } + static get requires() { + return [fx] + } + init() { + const t = this.editor, + { + editing: e, + data: n, + model: o + } = t; + o.schema.extend("listItem", { + allowAttributes: ["todoListChecked"] + }), o.schema.addAttributeCheck(((t, e) => { + const n = t.last; + if ("todoListChecked" == e && "listItem" == n.name && "todo" != n.getAttribute("listType")) return !1 + })), t.commands.add("todoList", new Xy(t, "todo")); + const i = new Tx(t); + var r, s; + t.commands.add("checkTodoList", i), t.commands.add("todoListCheck", i), n.downcastDispatcher.on("insert:listItem", function(t) { + return (e, n, o) => { + const i = o.consumable; + if (!i.test(n.item, "insert") || !i.test(n.item, "attribute:listType") || !i.test(n.item, "attribute:listIndent")) return; + if ("todo" != n.item.getAttribute("listType")) return; + const r = n.item; + i.consume(r, "insert"), i.consume(r, "attribute:listType"), i.consume(r, "attribute:listIndent"), i.consume(r, "attribute:todoListChecked"); + const s = o.writer, + a = _y(r, o); + s.addClass("todo-list", a.parent); + const l = s.createContainerElement("label", { + class: "todo-list__label" + }), + c = s.createEmptyElement("input", { + type: "checkbox", + disabled: "disabled" + }), + d = s.createContainerElement("span", { + class: "todo-list__label__description" + }); + r.getAttribute("todoListChecked") && s.setAttribute("checked", "checked", c), s.insert(s.createPositionAt(a, 0), l), s.insert(s.createPositionAt(l, 0), c), s.insert(s.createPositionAfter(c), d), vy(r, a, o, t) + } + }(o), { + priority: "high" + }), n.upcastDispatcher.on("element:input", Bx, { + priority: "high" + }), e.downcastDispatcher.on("insert:listItem", function(t, e) { + return (n, o, i) => { + const r = i.consumable; + if (!r.test(o.item, "insert") || !r.test(o.item, "attribute:listType") || !r.test(o.item, "attribute:listIndent")) return; + if ("todo" != o.item.getAttribute("listType")) return; + const s = o.item; + r.consume(s, "insert"), r.consume(s, "attribute:listType"), r.consume(s, "attribute:listIndent"), r.consume(s, "attribute:todoListChecked"); + const a = i.writer, + l = _y(s, i), + c = !!s.getAttribute("todoListChecked"), + d = Px(s, a, c, e), + h = a.createContainerElement("span", { + class: "todo-list__label__description" + }); + a.addClass("todo-list", l.parent), a.insert(a.createPositionAt(l, 0), d), a.insert(a.createPositionAfter(d), h), vy(s, l, i, t) + } + }(o, (t => this._handleCheckmarkChange(t))), { + priority: "high" + }), e.downcastDispatcher.on("attribute:listType:listItem", (r = t => this._handleCheckmarkChange(t), s = e.view, (t, e, n) => { + if (!n.consumable.consume(e.item, t.name)) return; + const o = n.mapper.toViewElement(e.item), + i = n.writer, + a = function(t, e) { + const n = e.createRangeIn(t); + for (const t of n) + if (t.item.is("uiElement", "label")) return t.item + }(o, s); + if ("todo" == e.attributeNewValue) { + const t = !!e.item.getAttribute("todoListChecked"), + n = Px(e.item, i, t, r), + s = i.createContainerElement("span", { + class: "todo-list__label__description" + }), + a = i.createRangeIn(o), + l = Sy(o), + c = xy(a.start), + d = l ? i.createPositionBefore(l) : a.end, + h = i.createRange(c, d); + i.addClass("todo-list", o.parent), i.move(h, i.createPositionAt(s, 0)), i.insert(i.createPositionAt(o, 0), n), i.insert(i.createPositionAfter(n), s) + } else if ("todo" == e.attributeOldValue) { + const t = Rx(o, s); + i.removeClass("todo-list", o.parent), i.remove(a), i.move(i.createRangeIn(t), i.createPositionBefore(t)), i.remove(t) + } + })), e.downcastDispatcher.on("attribute:todoListChecked:listItem", function(t) { + return (e, n, o) => { + if ("todo" != n.item.getAttribute("listType")) return; + if (!o.consumable.consume(n.item, "attribute:todoListChecked")) return; + const { + mapper: i, + writer: r + } = o, s = !!n.item.getAttribute("todoListChecked"), a = i.toViewElement(n.item).getChild(0), l = Px(n.item, r, s, t); + r.insert(r.createPositionAfter(a), l), r.remove(a) + } + }((t => this._handleCheckmarkChange(t)))), e.mapper.on("modelToViewPosition", Ix(e.view)), n.mapper.on("modelToViewPosition", Ix(e.view)), this.listenTo(e.view.document, "arrowKey", function(t, e) { + return (n, o) => { + if ("left" != wi(o.keyCode, e.contentLanguageDirection)) return; + const i = t.schema, + r = t.document.selection; + if (!r.isCollapsed) return; + const s = r.getFirstPosition(), + a = s.parent; + if ("listItem" === a.name && "todo" == a.getAttribute("listType") && s.isAtStart) { + const e = i.getNearestSelectionRange(t.createPositionBefore(a), "backward"); + e && t.change((t => t.setSelection(e))), o.preventDefault(), o.stopPropagation(), n.stop() + } + } + }(o, t.locale), { + context: "li" + }), this.listenTo(e.view.document, "keydown", ((e, n) => { + fi(n) === zx && (t.execute("checkTodoList"), e.stop()) + }), { + priority: "high" + }); + const a = new Set; + this.listenTo(o, "applyOperation", ((t, e) => { + const n = e[0]; + if ("rename" == n.type && "listItem" == n.oldName) { + const t = n.position.nodeAfter; + t.hasAttribute("todoListChecked") && a.add(t) + } else if ("changeAttribute" == n.type && "listType" == n.key && "todo" === n.oldValue) + for (const t of n.range.getItems()) t.hasAttribute("todoListChecked") && "todo" !== t.getAttribute("listType") && a.add(t) + })), o.document.registerPostFixer((t => { + let e = !1; + for (const n of a) t.removeAttribute("todoListChecked", n), e = !0; + return a.clear(), e + })) + } + _handleCheckmarkChange(t) { + const e = this.editor, + n = e.model, + o = Array.from(n.document.selection.getRanges()); + n.change((n => { + n.setSelection(t, "end"), e.execute("checkTodoList"), n.setSelection(o) + })) + } + } + class Ox extends Vi { + static get pluginName() { + return "TodoListUI" + } + init() { + const t = this.editor.t; + Dy(this.editor, "todoList", t("To-do List"), '') + } + } + var Fx = n(1199), + Mx = { + injectType: "singletonStyleTag", + attributes: { + "data-cke": !0 + }, + insert: "head", + singleton: !0 + }; + Ui()(Fx.Z, Mx); + Fx.Z.locals; + + function Nx(t, e) { + if (!t.childCount) return; + const n = new cu(t.document), + o = function(t, e) { + const n = e.createRangeIn(t), + o = new rr({ + name: /^p|h\d+$/, + styles: { + "mso-list": /.*/ + } + }), + i = []; + for (const t of n) + if ("elementStart" === t.type && o.match(t.item)) { + const e = jx(t.item); + i.push({ + element: t.item, + id: e.id, + order: e.order, + indent: e.indent + }) + } return i + }(t, n); + if (!o.length) return; + let i = null, + r = 1; + o.forEach(((t, s) => { + const a = function(t, e) { + if (!t) return !0; + if (t.id !== e.id) return e.indent - t.indent != 1; + const n = e.element.previousSibling; + if (!n) return !0; + return o = n, !(o.is("element", "ol") || o.is("element", "ul")); + var o + }(o[s - 1], t), + l = a ? null : o[s - 1], + c = (h = t, (d = l) ? h.indent - d.indent : h.indent - 1); + var d, h; + if (a && (i = null, r = 1), !i || 0 !== c) { + const o = function(t, e) { + const n = new RegExp(`@list l${t.id}:level${t.indent}\\s*({[^}]*)`, "gi"), + o = /mso-level-number-format:([^;]{0,100});/gi, + i = /mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi, + r = n.exec(e); + let s = "decimal", + a = "ol", + l = null; + if (r && r[1]) { + const e = o.exec(r[1]); + if (e && e[1] && (s = e[1].trim(), a = "bullet" !== s && "image" !== s ? "ol" : "ul"), "bullet" === s) { + const e = function(t) { + const e = function(t) { + if (t.getChild(0).is("$text")) return null; + for (const e of t.getChildren()) { + if (!e.is("element", "span")) continue; + const t = e.getChild(0); + if (t) return t.is("$text") ? t : t.getChild(0) + } + return null + }(t); + if (!e) return null; + const n = e._data; + if ("o" === n) return "circle"; + if ("·" === n) return "disc"; + if ("§" === n) return "square"; + return null + }(t.element); + e && (s = e) + } else { + const t = i.exec(r[1]); + t && t[1] && (l = parseInt(t[1])) + } + } + return { + type: a, + startIndex: l, + style: Lx(s) + } + }(t, e); + if (i) { + if (t.indent > r) { + const t = i.getChild(i.childCount - 1), + e = t.getChild(t.childCount - 1); + i = Hx(o, e, n), r += 1 + } else if (t.indent < r) { + const e = r - t.indent; + i = function(t, e) { + const n = t.getAncestors({ + parentFirst: !0 + }); + let o = null, + i = 0; + for (const t of n) + if ((t.is("element", "ul") || t.is("element", "ol")) && i++, i === e) { + o = t; + break + } return o + }(i, e), r = t.indent + } + } else i = Hx(o, t.element, n); + t.indent <= r && (i.is("element", o.type) || (i = n.rename(o.type, i))) + } + const u = function(t, e) { + return function(t, e) { + const n = new rr({ + name: "span", + styles: { + "mso-list": "Ignore" + } + }), + o = e.createRangeIn(t); + for (const t of o) "elementStart" === t.type && n.match(t.item) && e.remove(t.item) + }(t, e), e.removeStyle("text-indent", t), e.rename("li", t) + }(t.element, n); + n.appendChild(u, i) + })) + } + + function Lx(t) { + if (t.startsWith("arabic-leading-zero")) return "decimal-leading-zero"; + switch (t) { + case "alpha-upper": + return "upper-alpha"; + case "alpha-lower": + return "lower-alpha"; + case "roman-upper": + return "upper-roman"; + case "roman-lower": + return "lower-roman"; + case "circle": + case "disc": + case "square": + return t; + default: + return null + } + } + + function Hx(t, e, n) { + const o = e.parent, + i = n.createElement(t.type), + r = o.getChildIndex(e) + 1; + return n.insertChild(r, i, o), t.style && n.setStyle("list-style-type", t.style, i), t.startIndex && t.startIndex > 1 && n.setAttribute("start", t.startIndex, i), i + } + + function jx(t) { + const e = {}, + n = t.getStyle("mso-list"); + if (n) { + const t = n.match(/(^|\s{1,100})l(\d+)/i), + o = n.match(/\s{0,100}lfo(\d+)/i), + i = n.match(/\s{0,100}level(\d+)/i); + t && o && i && (e.id = t[2], e.order = o[1], e.indent = parseInt(i[1])) + } + return e + } + + function qx(t, e) { + if (!t.childCount) return; + const n = new cu(t.document), + o = function(t, e) { + const n = e.createRangeIn(t), + o = new rr({ + name: /v:(.+)/ + }), + i = []; + for (const t of n) { + if ("elementStart" != t.type) continue; + const e = t.item, + n = e.previousSibling, + r = n && n.is("element") ? n.name : null; + o.match(e) && e.getAttribute("o:gfxdata") && "v:shapetype" !== r && i.push(t.item.getAttribute("id")) + } + return i + }(t, n); + ! function(t, e, n) { + const o = n.createRangeIn(e), + i = new rr({ + name: "img" + }), + r = []; + for (const e of o) + if (e.item.is("element") && i.match(e.item)) { + const n = e.item, + o = n.getAttribute("v:shapes") ? n.getAttribute("v:shapes").split(" ") : []; + o.length && o.every((e => t.indexOf(e) > -1)) ? r.push(n) : n.getAttribute("src") || r.push(n) + } for (const t of r) n.remove(t) + }(o, t, n), + function(t, e, n) { + const o = n.createRangeIn(e), + i = []; + for (const e of o) + if ("elementStart" == e.type && e.item.is("element", "v:shape")) { + const n = e.item.getAttribute("id"); + if (t.includes(n)) continue; + r(e.item.parent.getChildren(), n) || i.push(e.item) + } for (const t of i) { + const e = { + src: s(t) + }; + t.hasAttribute("alt") && (e.alt = t.getAttribute("alt")); + const o = n.createElement("img", e); + n.insertChild(t.index + 1, o, t.parent) + } + + function r(t, e) { + for (const n of t) + if (n.is("element")) { + if ("img" == n.name && n.getAttribute("v:shapes") == e) return !0; + if (r(n.getChildren(), e)) return !0 + } return !1 + } + + function s(t) { + for (const e of t.getChildren()) + if (e.is("element") && e.getAttribute("src")) return e.getAttribute("src") + } + }(o, t, n), + function(t, e) { + const n = e.createRangeIn(t), + o = new rr({ + name: /v:(.+)/ + }), + i = []; + for (const t of n) "elementStart" == t.type && o.match(t.item) && i.push(t.item); + for (const t of i) e.remove(t) + }(t, n); + const i = function(t, e) { + const n = e.createRangeIn(t), + o = new rr({ + name: "img" + }), + i = []; + for (const t of n) t.item.is("element") && o.match(t.item) && t.item.getAttribute("src").startsWith("file://") && i.push(t.item); + return i + }(t, n); + i.length && function(t, e, n) { + if (t.length === e.length) + for (let o = 0; o < t.length; o++) { + const i = `data:${e[o].type};base64,${Wx(e[o].hex)}`; + n.setAttribute("src", i, t[o]) + } + }(i, function(t) { + if (!t) return []; + const e = /{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/, + n = new RegExp("(?:(" + e.source + "))([\\da-fA-F\\s]+)\\}", "g"), + o = t.match(n), + i = []; + if (o) + for (const t of o) { + let n = !1; + t.includes("\\pngblip") ? n = "image/png" : t.includes("\\jpegblip") && (n = "image/jpeg"), n && i.push({ + hex: t.replace(e, "").replace(/[^\da-fA-F]/g, ""), + type: n + }) + } + return i + }(e), n) + } + + function Wx(t) { + return btoa(t.match(/\w{2}/g).map((t => String.fromCharCode(parseInt(t, 16)))).join("")) + } + const Ux = //i, + $x = /xmlns:o="urn:schemas-microsoft-com/i; + class Gx { + constructor(t) { + this.document = t + } + isActive(t) { + return Ux.test(t) || $x.test(t) + } + execute(t) { + const { + body: e, + stylesString: n + } = t._parsedData; + Nx(e, n), qx(e, t.dataTransfer.getData("text/rtf")), t.content = e + } + } + + function Kx(t, e, n, { + blockElements: o, + inlineObjectElements: i + }) { + let r = n.createPositionAt(t, "forward" == e ? "after" : "before"); + return r = r.getLastMatchingPosition((({ + item: t + }) => t.is("element") && !o.includes(t.name) && !i.includes(t.name)), { + direction: e + }), "forward" == e ? r.nodeAfter : r.nodeBefore + } + + function Zx(t, e) { + return !!t && t.is("element") && e.includes(t.name) + } + const Jx = /id=("|')docs-internal-guid-[-0-9a-f]+("|')/i; + class Yx { + constructor(t) { + this.document = t + } + isActive(t) { + return Jx.test(t) + } + execute(t) { + const e = new cu(this.document), + { + body: n + } = t._parsedData; + ! function(t, e) { + for (const n of t.getChildren()) + if (n.is("element", "b") && "normal" === n.getStyle("font-weight")) { + const o = t.getChildIndex(n); + e.remove(n), e.insertChild(o, n.getChildren(), t) + } + }(n, e), + function(t, e) { + for (const n of e.createRangeIn(t)) { + const t = n.item; + if (t.is("element", "li")) { + const n = t.getChild(0); + n && n.is("element", "p") && e.unwrapElement(n) + } + } + }(n, e), + function(t, e) { + const n = new xs(e.document.stylesProcessor), + o = new fa(n, { + renderingMode: "data" + }), + i = o.blockElements, + r = o.inlineObjectElements, + s = []; + for (const n of e.createRangeIn(t)) { + const t = n.item; + if (t.is("element", "br")) { + const n = Kx(t, "forward", e, { + blockElements: i, + inlineObjectElements: r + }), + o = Kx(t, "backward", e, { + blockElements: i, + inlineObjectElements: r + }), + a = Zx(n, i); + (Zx(o, i) || a) && s.push(t) + } + } + for (const t of s) t.hasClass("Apple-interchange-newline") ? e.remove(t) : e.replace(t, e.createElement("p")) + }(n, e), t.content = n + } + } + const Qx = /(\s+)<\/span>/g, ((t, e) => 1 === e.length ? " " : Array(e.length + 1).join("  ").substr(0, e.length))) + } + + function eE(t, e) { + const n = new DOMParser, + o = function(t) { + return tE(tE(t)).replace(/([^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g, "$1$2").replace(/<\/span>/g, "").replace(/()[\r\n]+(<\/span>)/g, "$1 $2").replace(/ <\//g, " <\/o:p>/g, " ").replace(/( |\u00A0)<\/o:p>/g, "").replace(/>([^\S\r\n]*[\r\n]\s*)<") + }(function(t) { + const e = "", + n = "", + o = t.indexOf(e); + if (o < 0) return t; + const i = t.indexOf(n, o + e.length); + return t.substring(0, o + e.length) + (i >= 0 ? t.substring(i) : "") + }(t = t.replace(/ active bar + focus bar: active + border 1px dotted #090402 (inside the blue border) + + table left/right border: #EDEDED 'light gray' + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 16px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-vista/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-vista/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 0px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 16px; + height: 16px; + display: inline-block; + margin-left: 3px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 16px; + height: 16px; + margin-left: 3px; + margin-top: 0px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-vista/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -80px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -16px -80px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -96px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -16px -96px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -64px -80px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -80px -80px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -64px -96px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -80px -96px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -32px -80px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -48px -80px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -32px -96px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -48px -96px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 3px; + background-position: 0px -32px; +} +span.fancytree-checkbox:hover { + background-position: -16px -32px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -48px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -16px -48px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -64px -32px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -80px -32px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -64px -48px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -80px -48px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -32px -32px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -48px -32px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -32px -48px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -48px -48px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -32px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -48px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -64px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -32px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -48px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 3px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -16px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -48px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -80px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -16px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -16px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -32px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -48px -16px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -64px -16px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -80px -16px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-vista/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -112px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 1px; + min-height: 16px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 16px; + padding: 0 3px 0 3px; + margin: 0px 0 0 3px; + border: 1px solid transparent; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -32px -112px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -16px -112px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 32px; + position: absolute; + background-position: 0px -128px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 64px; + background-position: 0px -144px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -64px -128px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -32px -128px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-vista/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-vista/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-vista/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-vista/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -80px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -16px -80px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Node titles + */ +span.fancytree-title { + border: 1px solid transparent; +} +span.fancytree-title:hover { + background-color: #F2F7FD; + border-color: #B8D6FB; +} +span.fancytree-focused span.fancytree-title { + background-color: #EFEBDE; + outline: 1px dotted gray; +} +span.fancytree-selected span.fancytree-title { + font-style: italic; +} +span.fancytree-active span.fancytree-title { + border: 1px solid #99DEFD; + background-color: #D8F0FA; +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table { + border-collapse: collapse; +} +table.fancytree-ext-table tbody tr.fancytree-focused { + background-color: #99DEFD; +} +table.fancytree-ext-table tbody tr.fancytree-active { + background-color: royalblue; +} +table.fancytree-ext-table tbody tr.fancytree-selected { + background-color: #99FDDE; +} +/******************************************************************************* + * 'columnview' extension + */ +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #ccc; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: royalblue; +} diff --git a/code/libraries/fancytree/skin-vista/ui.fancytree.less b/code/libraries/fancytree/skin-vista/ui.fancytree.less new file mode 100644 index 00000000000..3fe67237f6c --- /dev/null +++ b/code/libraries/fancytree/skin-vista/ui.fancytree.less @@ -0,0 +1,115 @@ +/*! + * Fancytree "Vista" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +/* +both: + unselected background: #FCFCFC 'nearly white' + hover bar (unselected, inactive): #F8FCFE..#EFF9FE (border: #D8F0FA) 'very light blue' + active node: #F6FBFD..#D5EFFC (border: #99DEFD) 'light blue' + active node with hover: #F2F9FD..#C4E8FA (border: #B6E6FB) + +Tree view: + active node, tree inactive: #FAFAFB..#E5E5E5 (border: #D9D9D9) 'light gray, selected, but tree not active' + +List view: + selected bar: --> active bar + focus bar: active + border 1px dotted #090402 (inside the blue border) + + table left/right border: #EDEDED 'light gray' + */ + +// Import common styles +@import "../skin-common.less"; + + +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ + + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) + +@fancy-icon-width: 16px; +@fancy-icon-height: 16px; +@fancy-line-height: 16px; +@fancy-icon-spacing: 3px; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-vista/"; + +// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': +// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif"); +// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS +// instead of linking to that file: +// @fancy-inline-sprites: true; + + +/******************************************************************************* + * Node titles + */ +span.fancytree-title { + border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover +} +span.fancytree-title:hover { + background-color: #F2F7FD; // light blue + border-color: #B8D6FB; // darker light blue +} +.fancytree-folder span.fancytree-title { + // font-weight: bold; +} +span.fancytree-focused span.fancytree-title { + background-color: #EFEBDE; // gray + outline: 1px dotted gray; +} +span.fancytree-has-children span.fancytree-title { + // font-style: oblique; +} +span.fancytree-expanded span.fancytree-title { +} +span.fancytree-selected span.fancytree-title { + font-style: italic; +} +span.fancytree-active span.fancytree-title { + border: 1px solid #99DEFD; + background-color: #D8F0FA; +} + +/******************************************************************************* + * 'table' extension + */ + +table.fancytree-ext-table { + border-collapse: collapse; + tbody tr.fancytree-focused { + background-color: #99DEFD; + } + tbody tr.fancytree-active { + background-color: royalblue; + } + tbody tr.fancytree-selected { + background-color: #99FDDE; + } +} + +/******************************************************************************* + * 'columnview' extension + */ + +table.fancytree-ext-columnview { + span.fancytree-node.fancytree-expanded { + background-color: #ccc; + } + span.fancytree-node.fancytree-active { + background-color: royalblue; + } +} diff --git a/code/libraries/fancytree/skin-vista/ui.fancytree.min.css b/code/libraries/fancytree/skin-vista/ui.fancytree.min.css new file mode 100644 index 00000000000..232eb27a14a --- /dev/null +++ b/code/libraries/fancytree/skin-vista/ui.fancytree.min.css @@ -0,0 +1,6 @@ +/*! + * Fancytree "Vista" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-vista/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-vista/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:0}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-vista/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-vista/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px 0 3px;margin:0 0 0 3px;border:1px solid transparent;-webkit-border-radius:0px;-moz-border-radius:0;-ms-border-radius:0px;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-vista/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-vista/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-vista/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-vista/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}span.fancytree-title{border:1px solid transparent}span.fancytree-title:hover{background-color:#f2f7fd;border-color:#b8d6fb}span.fancytree-focused span.fancytree-title{background-color:#efebde;outline:1px dotted gray}span.fancytree-selected span.fancytree-title{font-style:italic}span.fancytree-active span.fancytree-title{border:1px solid #99defd;background-color:#d8f0fa}table.fancytree-ext-table{border-collapse:collapse}table.fancytree-ext-table tbody tr.fancytree-focused{background-color:#99defd}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#4169e1}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#99fdde}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#ccc}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#4169e1} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-vista/vline-rtl.gif b/code/libraries/fancytree/skin-vista/vline-rtl.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-vista/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-vista/vline.gif b/code/libraries/fancytree/skin-vista/vline.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-vista/vline.gif differ diff --git a/code/libraries/fancytree/skin-win7/icons-rtl.gif b/code/libraries/fancytree/skin-win7/icons-rtl.gif new file mode 100644 index 00000000000..443e1e40961 Binary files /dev/null and b/code/libraries/fancytree/skin-win7/icons-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win7/icons.gif b/code/libraries/fancytree/skin-win7/icons.gif new file mode 100644 index 00000000000..0097b1f0406 Binary files /dev/null and b/code/libraries/fancytree/skin-win7/icons.gif differ diff --git a/code/libraries/fancytree/skin-win7/loading.gif b/code/libraries/fancytree/skin-win7/loading.gif new file mode 100644 index 00000000000..ef88497ccc2 Binary files /dev/null and b/code/libraries/fancytree/skin-win7/loading.gif differ diff --git a/code/libraries/fancytree/skin-win7/ui.fancytree.css b/code/libraries/fancytree/skin-win7/ui.fancytree.css new file mode 100644 index 00000000000..fdd5191548a --- /dev/null +++ b/code/libraries/fancytree/skin-win7/ui.fancytree.css @@ -0,0 +1,822 @@ +/*! + * Fancytree "Win7" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 16px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-win7/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-win7/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 2px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 16px; + height: 16px; + display: inline-block; + margin-left: 3px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 16px; + height: 16px; + margin-left: 3px; + margin-top: 2px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win7/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -80px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -16px -80px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -96px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -16px -96px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -64px -80px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -80px -80px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -64px -96px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -80px -96px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -32px -80px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -48px -80px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -32px -96px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -48px -96px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 3px; + background-position: 0px -32px; +} +span.fancytree-checkbox:hover { + background-position: -16px -32px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -48px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -16px -48px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -64px -32px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -80px -32px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -64px -48px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -80px -48px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -32px -32px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -48px -32px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -32px -48px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -48px -48px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -32px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -48px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -64px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -32px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -48px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 3px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -16px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -48px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -80px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -16px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -16px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -32px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -48px -16px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -64px -16px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -80px -16px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-win7/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -112px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 1px; + min-height: 20px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 20px; + padding: 0 3px 0 3px; + margin: 0px 0 0 3px; + border: 1px solid transparent; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -32px -112px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -16px -112px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 32px; + position: absolute; + background-position: 0px -128px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 64px; + background-position: 0px -144px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -64px -128px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -32px -128px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-win7/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win7/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-win7/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-win7/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -80px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -16px -80px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Node titles + */ +span.fancytree-active .fancytree-title, +span.fancytree-selected .fancytree-title { + border-color: #d9d9d9; + background: #e5e5e5; + color: inherit; + background: -moz-linear-gradient(top, #fafafb 0%, #e5e5e5 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafb), color-stop(100%, #e5e5e5)); + background: -webkit-linear-gradient(top, #fafafb 0%, #e5e5e5 100%); + background: -o-linear-gradient(top, #fafafb 0%, #e5e5e5 100%); + background: -ms-linear-gradient(top, #fafafb 0%, #e5e5e5 100%); + background: linear-gradient(to bottom, #fafafb 0%, #e5e5e5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafb', endColorstr='#e5e5e5', GradientType=0); +} +span.fancytree-selected .fancytree-title { + font-style: italic; +} +.fancytree-treefocus span.fancytree-active .fancytree-title, +.fancytree-treefocus span.fancytree-selected .fancytree-title { + border-color: #99defd; + background: #f6fbfd; + color: inherit; + background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f6fbfd), color-stop(100%, #d5effc)); + background: -webkit-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -o-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -ms-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: linear-gradient(to bottom, #f6fbfd 0%, #d5effc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6fbfd', endColorstr='#d5effc', GradientType=0); +} +.fancytree-treefocus span.fancytree-focused span.fancytree-title { + border: 1px solid #719acb; +} +span.fancytree-title:hover { + border-color: #d8f0fa; + background: #f8fcfe; + color: inherit; + background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8fcfe), color-stop(100%, #eff9fe)); + background: -webkit-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -o-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -ms-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: linear-gradient(to bottom, #f8fcfe 0%, #eff9fe 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fcfe', endColorstr='#eff9fe', GradientType=0); +} +span.fancytree-active .fancytree-title:hover, +span.fancytree-selected .fancytree-title:hover { + border-color: #719acb; + background: #f2f9fd; + color: inherit; + background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f9fd), color-stop(100%, #c4e8fa)); + background: -webkit-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -o-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -ms-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: linear-gradient(to bottom, #f2f9fd 0%, #c4e8fa 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f9fd', endColorstr='#c4e8fa', GradientType=0); +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody tr td { + border: 1px solid #ededed; +} +table.fancytree-ext-table tbody tr:hover { + border-color: inherit; + background: #f8fcfe; + color: inherit; + background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f8fcfe), color-stop(100%, #eff9fe)); + background: -webkit-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -o-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: -ms-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + background: linear-gradient(to bottom, #f8fcfe 0%, #eff9fe 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8fcfe', endColorstr='#eff9fe', GradientType=0); + outline: 1px solid #d8f0fa; +} +table.fancytree-ext-table tbody tr.fancytree-focused { + outline: 1px dotted #090402; +} +table.fancytree-ext-table tbody span.fancytree-focused span.fancytree-title { + outline: solid dotted black; +} +table.fancytree-ext-table tbody span.fancytree-title:hover { + border: 1px solid transparent; + background: inherit; + background: transparent; + background: none; + filter: none; +} +table.fancytree-ext-table tbody tr.fancytree-active:hover, +table.fancytree-ext-table tbody tr.fancytree-selected:hover { + border-color: inherit; + background: #f2f9fd; + color: inherit; + background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f2f9fd), color-stop(100%, #c4e8fa)); + background: -webkit-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -o-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: -ms-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + background: linear-gradient(to bottom, #f2f9fd 0%, #c4e8fa 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f2f9fd', endColorstr='#c4e8fa', GradientType=0); + outline: 1px solid #B6E6FB; +} +table.fancytree-ext-table tbody tr.fancytree-active, +table.fancytree-ext-table tbody tr.fancytree-selected { + border-color: inherit; + background: #f6fbfd; + color: inherit; + background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f6fbfd), color-stop(100%, #d5effc)); + background: -webkit-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -o-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: -ms-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + background: linear-gradient(to bottom, #f6fbfd 0%, #d5effc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f6fbfd', endColorstr='#d5effc', GradientType=0); + outline: 1px solid #99DEFD; +} diff --git a/code/libraries/fancytree/skin-win7/ui.fancytree.less b/code/libraries/fancytree/skin-win7/ui.fancytree.less new file mode 100644 index 00000000000..087702f5621 --- /dev/null +++ b/code/libraries/fancytree/skin-win7/ui.fancytree.less @@ -0,0 +1,155 @@ +/*! + * Fancytree "Win7" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +// Fancytree Win7 styles + +// both: +// unselected background: #FCFCFC 'nearly white', no border +// +// hover bar (unselected, inactive): #fcfdfe..#EFF9FE (border: #b8d6fb) 'very light blue' +// background: #f8fcfe; // +// background: -moz-linear-gradient(top, #f8fcfe 0%, #eff9fe 100%); + +// active node: #F6FBFD..#D5EFFC (border: #719acb) 'light blue' +// background: #f6fbfd; +// background: -moz-linear-gradient(top, #f6fbfd 0%, #d5effc 100%); + +// active node with hover: #F2F9FD..#C4E8FA (border: #B6E6FB) +// background: #f2f9fd; +// background: -moz-linear-gradient(top, #f2f9fd 0%, #c4e8fa 100%); + +// Tree view: +// active node, tree inactive: #FAFAFB..#E5E5E5 (border: #D9D9D9) 'light gray, selected, but tree not active' +// background: #fafafb; +// background: -moz-linear-gradient(top, #fafafb 0%, #e5e5e5 100%); + +// List view: +// selected bar: --> active bar +// focus bar: active + border 1px dotted #090402 (inside the blue border) + +// table left/right border: #EDEDED 'light gray' + +// Import common styles +@import "../skin-common.less"; + + +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) + +@fancy-line-height: 20px; // height of a nodes selection bar including borders +@fancy-node-v-spacing: 1px; // gap between two node borders +@fancy-icon-width: 16px; +@fancy-icon-height: 16px; +@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title +@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon +@fancy-title-ofs-top: 0px; // extra vertical offset for title +@fancy-node-border-width: 1px; +@fancy-node-border-radius: 3px; +@fancy-node-outline-width: 1px; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-win7/"; + +// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': +// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif"); +// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS +// instead of linking to that file: +// @fancy-inline-sprites: true; + + +ul.fancytree-container { + +} + +/******************************************************************************* + * Node titles + */ +span.fancytree-title { +} +// active nodes inside an UN-focused tree are gray instead of blue +span.fancytree-active .fancytree-title, +span.fancytree-selected .fancytree-title { + .spanStyleMixin(inherit, #e5e5e5, #d9d9d9, #fafafb, #e5e5e5); +} +span.fancytree-selected .fancytree-title { + font-style: italic; +} +// Markers inside an active tree +.fancytree-treefocus { + span.fancytree-active .fancytree-title, + span.fancytree-selected .fancytree-title { + .spanStyleMixin(inherit, #f6fbfd, #99defd, #f6fbfd, #d5effc); + } + span.fancytree-focused span.fancytree-title { + border: @fancy-node-border-width solid #719acb; + } +} +// Hover is always colored (even if tree is inactive) +span.fancytree-title:hover { + .spanStyleMixin(inherit, #f8fcfe, #d8f0fa, #f8fcfe, #eff9fe); +} +span.fancytree-active .fancytree-title:hover, +span.fancytree-selected .fancytree-title:hover { + .spanStyleMixin(inherit, #f2f9fd, #719acb, #f2f9fd, #c4e8fa); +} + +/******************************************************************************* + * 'table' extension + */ + +table.fancytree-ext-table tbody { + tr td { + border: 1px solid #ededed; + } + tr:hover { + .spanStyleMixin(inherit, #f8fcfe, inherit, #f8fcfe, #eff9fe); + outline: 1px solid #d8f0fa; + } + // tr:hover td { + // outline: 1px solid #D8F0FA; + // } + tr.fancytree-focused { + // background-color: #99DEFD; + outline: 1px dotted #090402; + } + span.fancytree-focused span.fancytree-title { + outline: solid dotted black; + } + + // Title gets a white background, when hovered. Undo standard node formatting + span.fancytree-title:hover { + border: 1px solid transparent; + background: inherit; + background: transparent; + background: none; + filter: none; + } + + tr.fancytree-active:hover, + tr.fancytree-selected:hover { + .spanStyleMixin(inherit, #f2f9fd, inherit, #f2f9fd, #c4e8fa); + outline: 1px solid #B6E6FB; + } + tr.fancytree-active, + tr.fancytree-selected { + .spanStyleMixin(inherit, #f6fbfd, inherit, #f6fbfd, #d5effc); + outline: 1px solid #99DEFD; + } + // tr.fancytree-selected .fancytree-title { + // font-style: italic; + // } + +} diff --git a/code/libraries/fancytree/skin-win7/ui.fancytree.min.css b/code/libraries/fancytree/skin-win7/ui.fancytree.min.css new file mode 100644 index 00000000000..bcbe5ebace5 --- /dev/null +++ b/code/libraries/fancytree/skin-win7/ui.fancytree.min.css @@ -0,0 +1,6 @@ +/*! + * Fancytree "Win7" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-win7/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-win7/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:2px}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:2px;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win7/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-win7/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:20px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:20px;padding:0 3px 0 3px;margin:0 0 0 3px;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-win7/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win7/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-win7/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-win7/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}span.fancytree-active .fancytree-title,span.fancytree-selected .fancytree-title{border-color:#d9d9d9;background:#e5e5e5;color:inherit;background:-moz-linear-gradient(top,#fafafb 0,#e5e5e5 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fafafb),color-stop(100%,#e5e5e5));background:-webkit-linear-gradient(top,#fafafb 0,#e5e5e5 100%);background:-o-linear-gradient(top,#fafafb 0,#e5e5e5 100%);background:-ms-linear-gradient(top,#fafafb 0,#e5e5e5 100%);background:linear-gradient(to bottom,#fafafb 0,#e5e5e5 100%)}span.fancytree-selected .fancytree-title{font-style:italic}.fancytree-treefocus span.fancytree-active .fancytree-title,.fancytree-treefocus span.fancytree-selected .fancytree-title{border-color:#99defd;background:#f6fbfd;color:inherit;background:-moz-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f6fbfd),color-stop(100%,#d5effc));background:-webkit-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-o-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-ms-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:linear-gradient(to bottom,#f6fbfd 0,#d5effc 100%)}.fancytree-treefocus span.fancytree-focused span.fancytree-title{border:1px solid #719acb}span.fancytree-title:hover{border-color:#d8f0fa;background:#f8fcfe;color:inherit;background:-moz-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f8fcfe),color-stop(100%,#eff9fe));background:-webkit-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-o-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-ms-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:linear-gradient(to bottom,#f8fcfe 0,#eff9fe 100%)}span.fancytree-active .fancytree-title:hover,span.fancytree-selected .fancytree-title:hover{border-color:#719acb;background:#f2f9fd;color:inherit;background:-moz-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f2f9fd),color-stop(100%,#c4e8fa));background:-webkit-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-o-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-ms-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:linear-gradient(to bottom,#f2f9fd 0,#c4e8fa 100%)}table.fancytree-ext-table tbody tr td{border:1px solid #ededed}table.fancytree-ext-table tbody tr:hover{border-color:inherit;background:#f8fcfe;color:inherit;background:-moz-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f8fcfe),color-stop(100%,#eff9fe));background:-webkit-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-o-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:-ms-linear-gradient(top,#f8fcfe 0,#eff9fe 100%);background:linear-gradient(to bottom,#f8fcfe 0,#eff9fe 100%);outline:1px solid #d8f0fa}table.fancytree-ext-table tbody tr.fancytree-focused{outline:1px dotted #090402}table.fancytree-ext-table tbody span.fancytree-focused span.fancytree-title{outline:solid dotted black}table.fancytree-ext-table tbody span.fancytree-title:hover{border:1px solid transparent;background:inherit;background:0 0;background:0 0;filter:none}table.fancytree-ext-table tbody tr.fancytree-active:hover,table.fancytree-ext-table tbody tr.fancytree-selected:hover{border-color:inherit;background:#f2f9fd;color:inherit;background:-moz-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f2f9fd),color-stop(100%,#c4e8fa));background:-webkit-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-o-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:-ms-linear-gradient(top,#f2f9fd 0,#c4e8fa 100%);background:linear-gradient(to bottom,#f2f9fd 0,#c4e8fa 100%);outline:1px solid #B6E6FB}table.fancytree-ext-table tbody tr.fancytree-active,table.fancytree-ext-table tbody tr.fancytree-selected{border-color:inherit;background:#f6fbfd;color:inherit;background:-moz-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#f6fbfd),color-stop(100%,#d5effc));background:-webkit-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-o-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:-ms-linear-gradient(top,#f6fbfd 0,#d5effc 100%);background:linear-gradient(to bottom,#f6fbfd 0,#d5effc 100%);outline:1px solid #99DEFD} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-win7/vline-rtl.gif b/code/libraries/fancytree/skin-win7/vline-rtl.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win7/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win7/vline.gif b/code/libraries/fancytree/skin-win7/vline.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win7/vline.gif differ diff --git a/code/libraries/fancytree/skin-win8-n/icons-rtl.gif b/code/libraries/fancytree/skin-win8-n/icons-rtl.gif new file mode 100644 index 00000000000..443e1e40961 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-n/icons-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8-n/icons.gif b/code/libraries/fancytree/skin-win8-n/icons.gif new file mode 100644 index 00000000000..0097b1f0406 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-n/icons.gif differ diff --git a/code/libraries/fancytree/skin-win8-n/loading.gif b/code/libraries/fancytree/skin-win8-n/loading.gif new file mode 100644 index 00000000000..ef88497ccc2 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-n/loading.gif differ diff --git a/code/libraries/fancytree/skin-win8-n/ui.fancytree.css b/code/libraries/fancytree/skin-win8-n/ui.fancytree.css new file mode 100644 index 00000000000..73113d6f058 --- /dev/null +++ b/code/libraries/fancytree/skin-win8-n/ui.fancytree.css @@ -0,0 +1,767 @@ +/*! + * Fancytree "win8" skin (highlighting the node span instead of title-only). + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 16px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-win8-n/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-win8-n/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 0px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 16px; + height: 16px; + display: inline-block; + margin-left: 3px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 16px; + height: 16px; + margin-left: 3px; + margin-top: 0px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8-n/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -80px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -16px -80px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -96px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -16px -96px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -64px -80px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -80px -80px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -64px -96px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -80px -96px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -32px -80px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -48px -80px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -32px -96px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -48px -96px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 3px; + background-position: 0px -32px; +} +span.fancytree-checkbox:hover { + background-position: -16px -32px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -48px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -16px -48px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -64px -32px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -80px -32px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -64px -48px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -80px -48px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -32px -32px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -48px -32px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -32px -48px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -48px -48px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -32px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -48px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -64px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -32px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -48px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 3px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -16px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -48px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -80px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -16px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -16px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -32px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -48px -16px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -64px -16px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -80px -16px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-win8-n/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -112px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 1px; + min-height: 16px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 16px; + padding: 0 3px 0 3px; + margin: 0px 0 0 3px; + border: 1px solid transparent; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -32px -112px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -16px -112px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 32px; + position: absolute; + background-position: 0px -128px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 64px; + background-position: 0px -144px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -64px -128px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -32px -128px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-win8-n/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8-n/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-win8-n/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-win8-n/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -80px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -16px -80px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Node titles + */ +.fancytree-plain span.fancytree-node { + border: 1px solid transparent; +} +.fancytree-plain span.fancytree-node:hover { + background-color: #E5F3FB; + border-color: #70C0E7; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused { + border-color: #3399FF; +} +.fancytree-plain span.fancytree-node.fancytree-active, +.fancytree-plain span.fancytree-node.fancytree-selected { + background-color: #F7F7F7; + border-color: #DEDEDE; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active, +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected, +.fancytree-plain span.fancytree-node.fancytree-active:hover, +.fancytree-plain span.fancytree-node.fancytree-selected:hover { + background-color: #CBE8F6; + border-color: #26A0DA; +} +.fancytree-plain .fancytree-node.fancytree-selected { + font-style: italic; +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody tr td { + border: 1px solid #EDEDED; +} +table.fancytree-ext-table tbody span.fancytree-node, +table.fancytree-ext-table tbody span.fancytree-node:hover { + border: none; + background: none; +} +table.fancytree-ext-table tbody tr:hover { + background-color: #E5F3FB; + outline: 1px solid #70C0E7; +} +table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title { + outline: 1px dotted black; +} +table.fancytree-ext-table tbody tr.fancytree-active:hover, +table.fancytree-ext-table tbody tr.fancytree-selected:hover { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table tbody tr.fancytree-active { + background-color: #F7F7F7; + outline: 1px solid #DEDEDE; +} +table.fancytree-ext-table tbody tr.fancytree-selected { + background-color: #F7F7F7; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected { + background-color: #CBE8F6; +} diff --git a/code/libraries/fancytree/skin-win8-n/ui.fancytree.less b/code/libraries/fancytree/skin-win8-n/ui.fancytree.less new file mode 100644 index 00000000000..633827ec61f --- /dev/null +++ b/code/libraries/fancytree/skin-win8-n/ui.fancytree.less @@ -0,0 +1,145 @@ +/*! + * Fancytree "win8" skin (highlighting the node span instead of title-only). + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +// Import common styles +@import "../skin-common.less"; + + +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ + +// Borders have NO radius and NO gradients are used! + +// both: +// unselected background: white +// hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue' +// active node: #CBE8F6 (border: #26A0DA) 'light blue' +// active node with hover: wie active node + +// Tree view: +// active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active' + +// List view: +// selected bar: --> active bar +// focus bar: transparent(white) + border 1px solid #3399FF () + +// table left/right border: #EDEDED 'light gray' + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) +// Set to `true` to inline icon sprite into CSS: +// @fancy-inline-sprites: true; +@fancy-icon-width: 16px; +@fancy-icon-height: 16px; +@fancy-line-height: 16px; +@fancy-icon-spacing: 3px; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-win8-n/"; +// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': +// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif"); +// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS +// instead of linking to that file: +// @fancy-inline-sprites: true; + + +/******************************************************************************* + * Node titles + */ +.fancytree-plain { + span.fancytree-node { + border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover + } + span.fancytree-node:hover { + background-color: #E5F3FB; + border-color: #70C0E7; + } + &.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused { + border-color: #3399FF; + // outline: 1px solid #3399FF; + } + span.fancytree-node.fancytree-active, + span.fancytree-node.fancytree-selected { // active/selcted nodes inside inactive tree + background-color: #F7F7F7; + border-color: #DEDEDE; + } + &.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active, + &.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected, + span.fancytree-node.fancytree-active:hover, + span.fancytree-node.fancytree-selected:hover { + background-color: #CBE8F6; + border-color: #26A0DA; + } + .fancytree-node.fancytree-selected { + font-style: italic; + } +} + +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody { + tr td { + border: 1px solid #EDEDED; + } + span.fancytree-node, + span.fancytree-node:hover { // undo standard tree css + border: none; + background: none; + } + // Title gets a white background, when hovered. Undo standard node formatting + // span.fancytree-title:hover { + // border: none; //1px solid transparent; + // background: inherit; + // background: transparent; + // background: none; + // filter: none; + // } + tr:hover { + background-color: #E5F3FB; + outline: 1px solid #70C0E7; + } + // tr:hover td { + // outline: 1px solid #D8F0FA; + // } + // tr.fancytree-focused { + // border-color: #3399FF; + // outline: 1px dotted black; + // } + tr.fancytree-focused span.fancytree-title { + outline: 1px dotted black; + } + + tr.fancytree-active:hover, + tr.fancytree-selected:hover { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; + } + tr.fancytree-active { // dimmed, if inside inactive tree + background-color: #F7F7F7; + outline: 1px solid #DEDEDE; + } + tr.fancytree-selected { // dimmed, if inside inactive tree + background-color: #F7F7F7; + } +} + +table.fancytree-ext-table.fancytree-treefocus tbody { + tr.fancytree-active { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; + } + tr.fancytree-selected { + background-color: #CBE8F6; + } +} diff --git a/code/libraries/fancytree/skin-win8-n/ui.fancytree.min.css b/code/libraries/fancytree/skin-win8-n/ui.fancytree.min.css new file mode 100644 index 00000000000..8dfa9fd9755 --- /dev/null +++ b/code/libraries/fancytree/skin-win8-n/ui.fancytree.min.css @@ -0,0 +1,6 @@ +/*! + * Fancytree "win8" skin (highlighting the node span instead of title-only). + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-win8-n/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-win8-n/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:0}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8-n/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-win8-n/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px 0 3px;margin:0 0 0 3px;border:1px solid transparent;-webkit-border-radius:0px;-moz-border-radius:0;-ms-border-radius:0px;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-win8-n/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8-n/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-win8-n/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-win8-n/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}.fancytree-plain span.fancytree-node{border:1px solid transparent}.fancytree-plain span.fancytree-node:hover{background-color:#e5f3fb;border-color:#70c0e7}.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused{border-color:#39f}.fancytree-plain span.fancytree-node.fancytree-active,.fancytree-plain span.fancytree-node.fancytree-selected{background-color:#f7f7f7;border-color:#dedede}.fancytree-plain span.fancytree-node.fancytree-active:hover,.fancytree-plain span.fancytree-node.fancytree-selected:hover,.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active,.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected{background-color:#cbe8f6;border-color:#26a0da}.fancytree-plain .fancytree-node.fancytree-selected{font-style:italic}table.fancytree-ext-table tbody tr td{border:1px solid #ededed}table.fancytree-ext-table tbody span.fancytree-node,table.fancytree-ext-table tbody span.fancytree-node:hover{border:none;background:0 0}table.fancytree-ext-table tbody tr:hover{background-color:#e5f3fb;outline:1px solid #70C0E7}table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title{outline:1px dotted black}table.fancytree-ext-table tbody tr.fancytree-active:hover,table.fancytree-ext-table tbody tr.fancytree-selected:hover{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#f7f7f7;outline:1px solid #DEDEDE}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#f7f7f7}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected{background-color:#cbe8f6} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-win8-n/vline-rtl.gif b/code/libraries/fancytree/skin-win8-n/vline-rtl.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-n/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8-n/vline.gif b/code/libraries/fancytree/skin-win8-n/vline.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-n/vline.gif differ diff --git a/code/libraries/fancytree/skin-win8-xxl/icons-rtl.gif b/code/libraries/fancytree/skin-win8-xxl/icons-rtl.gif new file mode 100644 index 00000000000..0ce1c5b1cb6 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-xxl/icons-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8-xxl/icons.gif b/code/libraries/fancytree/skin-win8-xxl/icons.gif new file mode 100644 index 00000000000..f3abe16af9a Binary files /dev/null and b/code/libraries/fancytree/skin-win8-xxl/icons.gif differ diff --git a/code/libraries/fancytree/skin-win8-xxl/loading.gif b/code/libraries/fancytree/skin-win8-xxl/loading.gif new file mode 100644 index 00000000000..8031e4407ac Binary files /dev/null and b/code/libraries/fancytree/skin-win8-xxl/loading.gif differ diff --git a/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.css b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.css new file mode 100644 index 00000000000..e4aff213e3a --- /dev/null +++ b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.css @@ -0,0 +1,775 @@ +/*! + * Fancytree "Win8" 32x32 skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 32px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-win8-xxl/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 32px; + height: 32px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-win8-xxl/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 0px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 32px; + height: 32px; + display: inline-block; + margin-left: 6px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 32px; + height: 32px; + margin-left: 6px; + margin-top: 0px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8-xxl/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -128px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -32px -128px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -160px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -32px -160px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -192px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -32px -192px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -128px -160px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -160px -160px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -128px -192px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -160px -192px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -64px -160px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -96px -160px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -64px -192px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -96px -192px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 6px; + background-position: 0px -64px; +} +span.fancytree-checkbox:hover { + background-position: -32px -64px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -96px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -96px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -128px -64px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -160px -64px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -128px -96px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -160px -96px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -64px -64px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -96px -64px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -64px -96px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -96px -96px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -64px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -96px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -128px -64px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -64px -64px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -64px -96px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 6px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -96px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -128px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -160px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -32px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -32px -32px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -64px -32px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -96px -32px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -128px -32px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -160px -32px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-win8-xxl/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -224px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 1px; + min-height: 32px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 32px; + padding: 0 3px 0 3px; + margin: 0px 0 0 6px; + border: 1px solid transparent; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -64px -224px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -32px -224px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 64px; + position: absolute; + background-position: 0px -256px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 128px; + background-position: 0px -288px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -128px -256px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -64px -256px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-win8-xxl/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8-xxl/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-win8-xxl/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-win8-xxl/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -160px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -32px -160px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/*! + * Fancytree "Win8" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Node titles + */ +.fancytree-plain span.fancytree-title { + border: 1px solid transparent; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title { + border-color: #3399ff; +} +.fancytree-plain span.fancytree-active span.fancytree-title, +.fancytree-plain span.fancytree-selected span.fancytree-title { + background-color: #f7f7f7; + border-color: #dedede; +} +.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title { + font-style: italic; +} +.fancytree-plain span.fancytree-node:hover span.fancytree-title { + background-color: #eff9fe; + border-color: #70c0e7; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title, +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title { + background-color: #cbe8f6; + border-color: #26a0da; +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody tr td { + border: 1px solid #EDEDED; +} +table.fancytree-ext-table tbody span.fancytree-node, +table.fancytree-ext-table tbody span.fancytree-node:hover { + border: none; + background: none; +} +table.fancytree-ext-table tbody tr:hover { + background-color: #E5F3FB; + outline: 1px solid #70C0E7; +} +table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title { + outline: 1px dotted black; +} +table.fancytree-ext-table tbody tr.fancytree-active:hover, +table.fancytree-ext-table tbody tr.fancytree-selected:hover { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table tbody tr.fancytree-active { + background-color: #F7F7F7; + outline: 1px solid #DEDEDE; +} +table.fancytree-ext-table tbody tr.fancytree-selected { + background-color: #F7F7F7; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected { + background-color: #CBE8F6; +} +ul.fancytree-container { + font-size: 20pt; + padding: 6px; +} diff --git a/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.less b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.less new file mode 100644 index 00000000000..2241d972a71 --- /dev/null +++ b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.less @@ -0,0 +1,40 @@ +/*! + * Fancytree "Win8" 32x32 skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +// Import common styles +@import "../skin-common.less"; + +// Import standard win8 +@import "../skin-win8/ui.fancytree.less"; + + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) + +@fancy-level-indent: 32px; +@fancy-line-height: 32px; // height of a nodes selection bar including borders +@fancy-node-v-spacing: 1px; // gap between two node borders +@fancy-icon-width: 32px; +@fancy-icon-height: 32px; +@fancy-icon-spacing: 6px; // margin between icon/icon or icon/title +@fancy-icon-ofs-top: 0px; // extra vertical offset for expander, checkbox and icon +@fancy-title-ofs-top: 0px; // extra vertical offset for title +@fancy-node-border-width: 1px; +@fancy-node-border-radius: 0px; +@fancy-node-outline-width: 1px; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-win8-xxl/"; + +ul.fancytree-container { +// font-family: tahoma, arial, helvetica; + font-size: 20pt; + padding: 6px; +} diff --git a/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.min.css b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.min.css new file mode 100644 index 00000000000..9c7e9ca0bdd --- /dev/null +++ b/code/libraries/fancytree/skin-win8-xxl/ui.fancytree.min.css @@ -0,0 +1,11 @@ +/*! + * Fancytree "Win8" 32x32 skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 32px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-win8-xxl/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:32px;height:32px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-win8-xxl/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:0}span.fancytree-custom-icon{width:32px;height:32px;display:inline-block;margin-left:6px;background-position:0 0}img.fancytree-icon{width:32px;height:32px;margin-left:6px;margin-top:0;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8-xxl/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -128px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-32px -128px}.fancytree-exp-c span.fancytree-expander{background-position:0 -160px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-32px -160px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -192px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-32px -192px}.fancytree-exp-cd span.fancytree-expander{background-position:-128px -160px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-160px -160px}.fancytree-exp-cdl span.fancytree-expander{background-position:-128px -192px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-160px -192px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-64px -160px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-96px -160px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-64px -192px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-96px -192px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:6px;background-position:0 -64px}span.fancytree-checkbox:hover{background-position:-32px -64px}span.fancytree-checkbox.fancytree-radio{background-position:0 -96px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -96px}.fancytree-partsel span.fancytree-checkbox{background-position:-128px -64px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-160px -64px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-128px -96px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-160px -96px}.fancytree-selected span.fancytree-checkbox{background-position:-64px -64px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-96px -64px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-64px -96px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-96px -96px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -64px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -96px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-128px -64px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-64px -64px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-64px -96px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:6px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-64px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-96px 0}.fancytree-ico-e span.fancytree-icon{background-position:-128px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-160px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -32px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-32px -32px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-64px -32px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-96px -32px}.fancytree-ico-ef span.fancytree-icon{background-position:-128px -32px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-160px -32px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-win8-xxl/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -224px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:32px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:32px;padding:0 3px 0 3px;margin:0 0 0 6px;border:1px solid transparent;-webkit-border-radius:0px;-moz-border-radius:0;-ms-border-radius:0px;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-64px -224px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-32px -224px}#fancytree-drop-marker{width:64px;position:absolute;background-position:0 -256px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:128px;background-position:0 -288px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-128px -256px}#fancytree-drop-marker.fancytree-drop-move{background-position:-64px -256px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-win8-xxl/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8-xxl/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-win8-xxl/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-win8-xxl/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -160px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-32px -160px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}/*! + * Fancytree "Win8" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-plain span.fancytree-title{border:1px solid transparent}.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title{border-color:#39f}.fancytree-plain span.fancytree-active span.fancytree-title,.fancytree-plain span.fancytree-selected span.fancytree-title{background-color:#f7f7f7;border-color:#dedede}.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title{font-style:italic}.fancytree-plain span.fancytree-node:hover span.fancytree-title{background-color:#eff9fe;border-color:#70c0e7}.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title,.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title{background-color:#cbe8f6;border-color:#26a0da}table.fancytree-ext-table tbody tr td{border:1px solid #ededed}table.fancytree-ext-table tbody span.fancytree-node,table.fancytree-ext-table tbody span.fancytree-node:hover{border:none;background:0 0}table.fancytree-ext-table tbody tr:hover{background-color:#e5f3fb;outline:1px solid #70C0E7}table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title{outline:1px dotted black}table.fancytree-ext-table tbody tr.fancytree-active:hover,table.fancytree-ext-table tbody tr.fancytree-selected:hover{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#f7f7f7;outline:1px solid #DEDEDE}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#f7f7f7}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected{background-color:#cbe8f6}ul.fancytree-container{font-size:20pt;padding:6px} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-win8-xxl/vline-rtl.gif b/code/libraries/fancytree/skin-win8-xxl/vline-rtl.gif new file mode 100644 index 00000000000..8b5a2791cf0 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-xxl/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8-xxl/vline.gif b/code/libraries/fancytree/skin-win8-xxl/vline.gif new file mode 100644 index 00000000000..214e4dda995 Binary files /dev/null and b/code/libraries/fancytree/skin-win8-xxl/vline.gif differ diff --git a/code/libraries/fancytree/skin-win8/icons-rtl.gif b/code/libraries/fancytree/skin-win8/icons-rtl.gif new file mode 100644 index 00000000000..443e1e40961 Binary files /dev/null and b/code/libraries/fancytree/skin-win8/icons-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8/icons.gif b/code/libraries/fancytree/skin-win8/icons.gif new file mode 100644 index 00000000000..0097b1f0406 Binary files /dev/null and b/code/libraries/fancytree/skin-win8/icons.gif differ diff --git a/code/libraries/fancytree/skin-win8/loading.gif b/code/libraries/fancytree/skin-win8/loading.gif new file mode 100644 index 00000000000..ef88497ccc2 Binary files /dev/null and b/code/libraries/fancytree/skin-win8/loading.gif differ diff --git a/code/libraries/fancytree/skin-win8/ui.fancytree.css b/code/libraries/fancytree/skin-win8/ui.fancytree.css new file mode 100644 index 00000000000..8a0ba4bed69 --- /dev/null +++ b/code/libraries/fancytree/skin-win8/ui.fancytree.css @@ -0,0 +1,765 @@ +/*! + * Fancytree "Win8" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 16px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-win8/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-win8/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 2px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 16px; + height: 16px; + display: inline-block; + margin-left: 3px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 16px; + height: 16px; + margin-left: 3px; + margin-top: 2px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -80px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -16px -80px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -96px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -16px -96px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -64px -80px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -80px -80px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -64px -96px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -80px -96px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -32px -80px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -48px -80px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -32px -96px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -48px -96px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 3px; + background-position: 0px -32px; +} +span.fancytree-checkbox:hover { + background-position: -16px -32px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -48px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -16px -48px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -64px -32px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -80px -32px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -64px -48px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -80px -48px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -32px -32px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -48px -32px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -32px -48px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -48px -48px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -32px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -48px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -64px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -32px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -48px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 3px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -16px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -48px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -80px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -16px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -16px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -32px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -48px -16px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -64px -16px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -80px -16px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-win8/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -112px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 0px; + min-height: 20px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 20px; + padding: 0 3px 0 3px; + margin: 0px 0 0 3px; + border: 1px solid transparent; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -32px -112px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -16px -112px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 32px; + position: absolute; + background-position: 0px -128px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 64px; + background-position: 0px -144px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -64px -128px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -32px -128px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-win8/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-win8/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-win8/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-win8/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -80px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -16px -80px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Node titles + */ +.fancytree-plain span.fancytree-title { + border: 1px solid transparent; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title { + border-color: #3399ff; +} +.fancytree-plain span.fancytree-active span.fancytree-title, +.fancytree-plain span.fancytree-selected span.fancytree-title { + background-color: #f7f7f7; + border-color: #dedede; +} +.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title { + font-style: italic; +} +.fancytree-plain span.fancytree-node:hover span.fancytree-title { + background-color: #eff9fe; + border-color: #70c0e7; +} +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title, +.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title { + background-color: #cbe8f6; + border-color: #26a0da; +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody tr td { + border: 1px solid #EDEDED; +} +table.fancytree-ext-table tbody span.fancytree-node, +table.fancytree-ext-table tbody span.fancytree-node:hover { + border: none; + background: none; +} +table.fancytree-ext-table tbody tr:hover { + background-color: #E5F3FB; + outline: 1px solid #70C0E7; +} +table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title { + outline: 1px dotted black; +} +table.fancytree-ext-table tbody tr.fancytree-active:hover, +table.fancytree-ext-table tbody tr.fancytree-selected:hover { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table tbody tr.fancytree-active { + background-color: #F7F7F7; + outline: 1px solid #DEDEDE; +} +table.fancytree-ext-table tbody tr.fancytree-selected { + background-color: #F7F7F7; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; +} +table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected { + background-color: #CBE8F6; +} diff --git a/code/libraries/fancytree/skin-win8/ui.fancytree.less b/code/libraries/fancytree/skin-win8/ui.fancytree.less new file mode 100644 index 00000000000..443cbe3d4c0 --- /dev/null +++ b/code/libraries/fancytree/skin-win8/ui.fancytree.less @@ -0,0 +1,155 @@ +/*! + * Fancytree "Win8" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +// Import common styles +@import "../skin-common.less"; + + +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ + +// Borders have NO radius and NO gradients are used! + +// both: +// unselected background: white +// hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue' +// active node: #CBE8F6 (border: #26A0DA) 'light blue' +// active node with hover: wie active node + +// Tree view: +// active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active' + +// List view: +// selected bar: --> active bar +// focus bar: transparent(white) + border 1px solid #3399FF () + +// table left/right border: #EDEDED 'light gray' + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) + +@fancy-line-height: 20px; // height of a nodes selection bar including borders +@fancy-node-v-spacing: 0px; // gap between two node borders +@fancy-icon-width: 16px; +@fancy-icon-height: 16px; +@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title +@fancy-icon-ofs-top: 2px; // extra vertical offset for expander, checkbox and icon +@fancy-title-ofs-top: 0px; // extra vertical offset for title +@fancy-node-border-width: 1px; +@fancy-node-border-radius: 0px; +@fancy-node-outline-width: 1px; + + +// @fancy-icon-width: 16px; +// @fancy-icon-height: 16px; +// @fancy-line-height: 16px; +// @fancy-icon-spacing: 3px; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-win8/"; + +// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': +// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif"); +// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS +// instead of linking to that file: +// @fancy-inline-sprites: true; + +/******************************************************************************* + * Node titles + */ +.fancytree-plain { + span.fancytree-title { + border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover + } + &.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title { + border-color: #3399ff; + } + span.fancytree-active span.fancytree-title, + span.fancytree-selected span.fancytree-title { // active/selcted nodes inside inactive tree + background-color: #f7f7f7; + border-color: #dedede; + } + span.fancytree-node span.fancytree-selected span.fancytree-title { + font-style: italic; + } + span.fancytree-node:hover span.fancytree-title { + background-color: #eff9fe; // hover is always colored, even if tree is unfocused + border-color: #70c0e7; + } + &.fancytree-container.fancytree-treefocus { + span.fancytree-active span.fancytree-title, + span.fancytree-selected span.fancytree-title { + background-color: #cbe8f6; + border-color: #26a0da; + } + } +} + +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table tbody { + tr td { + border: 1px solid #EDEDED; + } + span.fancytree-node, + span.fancytree-node:hover { // undo standard tree css + border: none; + background: none; + } + // Title gets a white background, when hovered. Undo standard node formatting + // span.fancytree-title:hover { + // border: none; //1px solid transparent; + // background: inherit; + // background: transparent; + // background: none; + // filter: none; + // } + tr:hover { + background-color: #E5F3FB; + outline: 1px solid #70C0E7; + } + // tr:hover td { + // outline: 1px solid #D8F0FA; + // } + // tr.fancytree-focused { + // border-color: #3399FF; + // outline: 1px dotted black; + // } + tr.fancytree-focused span.fancytree-title { + outline: 1px dotted black; + } + + tr.fancytree-active:hover, + tr.fancytree-selected:hover { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; + } + tr.fancytree-active { // dimmed, if inside inactive tree + background-color: #F7F7F7; + outline: 1px solid #DEDEDE; + } + tr.fancytree-selected { // dimmed, if inside inactive tree + background-color: #F7F7F7; + } +} + +table.fancytree-ext-table.fancytree-treefocus tbody { + tr.fancytree-active { + background-color: #CBE8F6; + outline: 1px solid #26A0DA; + } + tr.fancytree-selected { + background-color: #CBE8F6; + } +} diff --git a/code/libraries/fancytree/skin-win8/ui.fancytree.min.css b/code/libraries/fancytree/skin-win8/ui.fancytree.min.css new file mode 100644 index 00000000000..a701af5c291 --- /dev/null +++ b/code/libraries/fancytree/skin-win8/ui.fancytree.min.css @@ -0,0 +1,6 @@ +/*! + * Fancytree "Win8" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-win8/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-win8/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:2px}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:2px;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-win8/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:0;min-height:20px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:20px;padding:0 3px 0 3px;margin:0 0 0 3px;border:1px solid transparent;-webkit-border-radius:0px;-moz-border-radius:0;-ms-border-radius:0px;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-win8/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-win8/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-win8/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-win8/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}.fancytree-plain span.fancytree-title{border:1px solid transparent}.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-focused span.fancytree-title{border-color:#39f}.fancytree-plain span.fancytree-active span.fancytree-title,.fancytree-plain span.fancytree-selected span.fancytree-title{background-color:#f7f7f7;border-color:#dedede}.fancytree-plain span.fancytree-node span.fancytree-selected span.fancytree-title{font-style:italic}.fancytree-plain span.fancytree-node:hover span.fancytree-title{background-color:#eff9fe;border-color:#70c0e7}.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title,.fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title{background-color:#cbe8f6;border-color:#26a0da}table.fancytree-ext-table tbody tr td{border:1px solid #ededed}table.fancytree-ext-table tbody span.fancytree-node,table.fancytree-ext-table tbody span.fancytree-node:hover{border:none;background:0 0}table.fancytree-ext-table tbody tr:hover{background-color:#e5f3fb;outline:1px solid #70C0E7}table.fancytree-ext-table tbody tr.fancytree-focused span.fancytree-title{outline:1px dotted black}table.fancytree-ext-table tbody tr.fancytree-active:hover,table.fancytree-ext-table tbody tr.fancytree-selected:hover{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#f7f7f7;outline:1px solid #DEDEDE}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#f7f7f7}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active{background-color:#cbe8f6;outline:1px solid #26A0DA}table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected{background-color:#cbe8f6} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-win8/vline-rtl.gif b/code/libraries/fancytree/skin-win8/vline-rtl.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win8/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-win8/vline.gif b/code/libraries/fancytree/skin-win8/vline.gif new file mode 100644 index 00000000000..f9b42329286 Binary files /dev/null and b/code/libraries/fancytree/skin-win8/vline.gif differ diff --git a/code/libraries/fancytree/skin-xp/icons-rtl.gif b/code/libraries/fancytree/skin-xp/icons-rtl.gif new file mode 100644 index 00000000000..d59b0f5600c Binary files /dev/null and b/code/libraries/fancytree/skin-xp/icons-rtl.gif differ diff --git a/code/libraries/fancytree/skin-xp/icons.gif b/code/libraries/fancytree/skin-xp/icons.gif new file mode 100644 index 00000000000..a58eb93f12a Binary files /dev/null and b/code/libraries/fancytree/skin-xp/icons.gif differ diff --git a/code/libraries/fancytree/skin-xp/loading.gif b/code/libraries/fancytree/skin-xp/loading.gif new file mode 100644 index 00000000000..251df0544cd Binary files /dev/null and b/code/libraries/fancytree/skin-xp/loading.gif differ diff --git a/code/libraries/fancytree/skin-xp/ui.fancytree.css b/code/libraries/fancytree/skin-xp/ui.fancytree.css new file mode 100644 index 00000000000..855c0ffbb55 --- /dev/null +++ b/code/libraries/fancytree/skin-xp/ui.fancytree.css @@ -0,0 +1,779 @@ +/*! + * Fancytree "XP" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ +/******************************************************************************* + * Common Styles for Fancytree Skins. + * + * This section is automatically generated from the `skin-common.less` template. + * + * Copyright (c) 2008-2023, Martin Wendt (https://wwWendt.de) + * Released under the MIT license + * https://github.com/mar10/fancytree/wiki/LicenseInfo + * + * @version 2.38.3 + * @date 2023-02-01T20:52:50Z +******************************************************************************/ +/*------------------------------------------------------------------------------ + * Helpers + *----------------------------------------------------------------------------*/ +.fancytree-helper-hidden { + display: none; +} +.fancytree-helper-indeterminate-cb { + color: #777; +} +.fancytree-helper-disabled { + color: #c0c0c0; +} +/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */ +.fancytree-helper-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +/*------------------------------------------------------------------------------ + * Container and UL / LI + *----------------------------------------------------------------------------*/ +ul.fancytree-container { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + white-space: nowrap; + padding: 3px; + margin: 0; + background-color: white; + border: 1px dotted gray; + min-height: 0%; + position: relative; +} +ul.fancytree-container ul { + padding: 0 0 0 16px; + margin: 0; +} +ul.fancytree-container ul > li:before { + content: none; +} +ul.fancytree-container li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + margin: 0; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +.ui-fancytree-disabled ul.fancytree-container { + opacity: 0.5; + background-color: silver; +} +ul.fancytree-connectors.fancytree-container li { + background-image: url("../skin-xp/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container li.fancytree-lastsib, +ul.fancytree-no-connector > li { + background-image: none; +} +li.fancytree-animating { + position: relative; +} +/*------------------------------------------------------------------------------ + * Common icon definitions + *----------------------------------------------------------------------------*/ +span.fancytree-empty, +span.fancytree-vline, +span.fancytree-expander, +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-drag-helper-img, +#fancytree-drop-marker { + width: 16px; + height: 16px; + display: inline-block; + vertical-align: top; + background-repeat: no-repeat; + background-image: url("../skin-xp/icons.gif"); + background-position: 0px 0px; +} +span.fancytree-icon, +span.fancytree-checkbox, +span.fancytree-expander, +span.fancytree-custom-icon { + margin-top: 0px; +} +/* Used by icon option: */ +span.fancytree-custom-icon { + width: 16px; + height: 16px; + display: inline-block; + margin-left: 3px; + background-position: 0px 0px; +} +/* Used by 'icon' node option: */ +img.fancytree-icon { + width: 16px; + height: 16px; + margin-left: 3px; + margin-top: 0px; + vertical-align: top; + border-style: none; +} +/*------------------------------------------------------------------------------ + * Expander icon + * + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-exp- + * 1st character: 'e': expanded, 'c': collapsed, 'n': no children + * 2nd character (optional): 'd': lazy (Delayed) + * 3rd character (optional): 'l': Last sibling + *----------------------------------------------------------------------------*/ +span.fancytree-expander { + cursor: pointer; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: none; + cursor: default; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-xp/icons.gif"); + margin-top: 0; +} +.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander, +.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +.fancytree-exp-c span.fancytree-expander { + background-position: 0px -80px; +} +.fancytree-exp-c span.fancytree-expander:hover { + background-position: -16px -80px; +} +.fancytree-exp-cl span.fancytree-expander { + background-position: 0px -96px; +} +.fancytree-exp-cl span.fancytree-expander:hover { + background-position: -16px -96px; +} +.fancytree-exp-cd span.fancytree-expander { + background-position: -64px -80px; +} +.fancytree-exp-cd span.fancytree-expander:hover { + background-position: -80px -80px; +} +.fancytree-exp-cdl span.fancytree-expander { + background-position: -64px -96px; +} +.fancytree-exp-cdl span.fancytree-expander:hover { + background-position: -80px -96px; +} +.fancytree-exp-e span.fancytree-expander, +.fancytree-exp-ed span.fancytree-expander { + background-position: -32px -80px; +} +.fancytree-exp-e span.fancytree-expander:hover, +.fancytree-exp-ed span.fancytree-expander:hover { + background-position: -48px -80px; +} +.fancytree-exp-el span.fancytree-expander, +.fancytree-exp-edl span.fancytree-expander { + background-position: -32px -96px; +} +.fancytree-exp-el span.fancytree-expander:hover, +.fancytree-exp-edl span.fancytree-expander:hover { + background-position: -48px -96px; +} +/* Fade out expanders, when container is not hovered or active */ +.fancytree-fade-expander span.fancytree-expander { + transition: opacity 1.5s; + opacity: 0; +} +.fancytree-fade-expander:hover span.fancytree-expander, +.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander, +.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander { + transition: opacity 0.6s; + opacity: 1; +} +/*------------------------------------------------------------------------------ + * Checkbox icon + *----------------------------------------------------------------------------*/ +span.fancytree-checkbox { + margin-left: 3px; + background-position: 0px -32px; +} +span.fancytree-checkbox:hover { + background-position: -16px -32px; +} +span.fancytree-checkbox.fancytree-radio { + background-position: 0px -48px; +} +span.fancytree-checkbox.fancytree-radio:hover { + background-position: -16px -48px; +} +.fancytree-partsel span.fancytree-checkbox { + background-position: -64px -32px; +} +.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -80px -32px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio { + background-position: -64px -48px; +} +.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover { + background-position: -80px -48px; +} +.fancytree-selected span.fancytree-checkbox { + background-position: -32px -32px; +} +.fancytree-selected span.fancytree-checkbox:hover { + background-position: -48px -32px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio { + background-position: -32px -48px; +} +.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -48px -48px; +} +.fancytree-unselectable span.fancytree-checkbox { + opacity: 0.4; + filter: alpha(opacity=40); +} +.fancytree-unselectable span.fancytree-checkbox:hover { + background-position: 0px -32px; +} +.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover { + background-position: 0px -48px; +} +.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover { + background-position: -64px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover { + background-position: -32px -32px; +} +.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover { + background-position: -32px -48px; +} +.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox { + visibility: hidden; +} +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox { + visibility: unset; +} +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox, +.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox { + visibility: unset; +} +/*------------------------------------------------------------------------------ + * Node type icon + * Note: IE6 doesn't correctly evaluate multiples class names, + * so we create combined class names that can be used in the CSS. + * + * Prefix: fancytree-ico- + * 1st character: 'e': expanded, 'c': collapsed + * 2nd character (optional): 'f': folder + *----------------------------------------------------------------------------*/ +span.fancytree-icon { + margin-left: 3px; + background-position: 0px 0px; +} +/* Documents */ +.fancytree-ico-c span.fancytree-icon:hover { + background-position: -16px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon { + background-position: -32px 0px; +} +.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover { + background-position: -48px 0px; +} +.fancytree-ico-e span.fancytree-icon { + background-position: -64px 0px; +} +.fancytree-ico-e span.fancytree-icon:hover { + background-position: -80px 0px; +} +/* Folders */ +.fancytree-ico-cf span.fancytree-icon { + background-position: 0px -16px; +} +.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -16px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon { + background-position: -32px -16px; +} +.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover { + background-position: -48px -16px; +} +.fancytree-ico-ef span.fancytree-icon { + background-position: -64px -16px; +} +.fancytree-ico-ef span.fancytree-icon:hover { + background-position: -80px -16px; +} +.fancytree-loading span.fancytree-expander, +.fancytree-loading span.fancytree-expander:hover, +.fancytree-statusnode-loading span.fancytree-icon, +.fancytree-statusnode-loading span.fancytree-icon:hover, +span.fancytree-icon.fancytree-icon-loading { + background-image: url("../skin-xp/loading.gif"); + background-position: 0px 0px; +} +/* Status node icons */ +.fancytree-statusnode-error span.fancytree-icon, +.fancytree-statusnode-error span.fancytree-icon:hover { + background-position: 0px -112px; +} +/*------------------------------------------------------------------------------ + * Node titles and highlighting + *----------------------------------------------------------------------------*/ +span.fancytree-node { + /* See #117 */ + display: inherit; + width: 100%; + margin-top: 1px; + min-height: 16px; +} +span.fancytree-title { + color: black; + cursor: pointer; + display: inline-block; + vertical-align: top; + min-height: 16px; + padding: 0 3px 0 3px; + margin: 0px 0 0 3px; + border: 0 solid transparent; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + -ms-border-radius: 0px; + -o-border-radius: 0px; + border-radius: 0px; +} +span.fancytree-node.fancytree-error span.fancytree-title { + color: red; +} +/*------------------------------------------------------------------------------ + * Drag'n'drop support + *----------------------------------------------------------------------------*/ +/* ext-dnd5: */ +span.fancytree-childcounter { + color: #fff; + background: #337ab7; + border: 1px solid gray; + border-radius: 10px; + padding: 2px; + text-align: center; +} +/* ext-dnd: */ +div.fancytree-drag-helper span.fancytree-childcounter, +div.fancytree-drag-helper span.fancytree-dnd-modifier { + display: inline-block; + color: #fff; + background: #337ab7; + border: 1px solid gray; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +div.fancytree-drag-helper span.fancytree-childcounter { + position: absolute; + top: -6px; + right: -6px; +} +div.fancytree-drag-helper span.fancytree-dnd-modifier { + background: #5cb85c; + border: none; + font-weight: bolder; +} +div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img { + background-position: -32px -112px; +} +div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img { + background-position: -16px -112px; +} +/*** Drop marker icon *********************************************************/ +#fancytree-drop-marker { + width: 32px; + position: absolute; + background-position: 0px -128px; + margin: 0; +} +#fancytree-drop-marker.fancytree-drop-after, +#fancytree-drop-marker.fancytree-drop-before { + width: 64px; + background-position: 0px -144px; +} +#fancytree-drop-marker.fancytree-drop-copy { + background-position: -64px -128px; +} +#fancytree-drop-marker.fancytree-drop-move { + background-position: -32px -128px; +} +/*** Source node while dragging ***********************************************/ +span.fancytree-drag-source.fancytree-drag-remove { + opacity: 0.15; +} +/*** Target node while dragging cursor is over it *****************************/ +/*------------------------------------------------------------------------------ + * 'rtl' option + *----------------------------------------------------------------------------*/ +.fancytree-container.fancytree-rtl .fancytree-title { + /*unicode-bidi: bidi-override;*/ + /* optional: reverse title letters */ +} +.fancytree-container.fancytree-rtl span.fancytree-connector, +.fancytree-container.fancytree-rtl span.fancytree-expander, +.fancytree-container.fancytree-rtl span.fancytree-icon, +.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img { + background-image: url("../skin-xp/icons-rtl.gif"); +} +.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: none; +} +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander, +.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-xp/icons-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl ul { + padding: 0 16px 0 0; +} +ul.fancytree-container.fancytree-rtl.fancytree-connectors li { + background-position: right 0; + background-image: url("../skin-xp/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl li.fancytree-lastsib, +ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li { + background-image: none; +} +#fancytree-drop-marker.fancytree-rtl { + background-image: url("../skin-xp/icons-rtl.gif"); +} +/*------------------------------------------------------------------------------ + * 'table' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-table { + font-family: tahoma, arial, helvetica; + font-size: 10pt; + border-collapse: collapse; + /* ext-ariagrid */ +} +table.fancytree-ext-table span.fancytree-node { + display: inline-block; + box-sizing: border-box; +} +table.fancytree-ext-table td.fancytree-status-merged { + text-align: center; + font-style: italic; + color: #c0c0c0; +} +table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged { + color: red; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td { + background-color: #eee; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell { + background-color: #cbe8f6; +} +table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell { + background-color: #3875d7; +} +/*------------------------------------------------------------------------------ + * 'columnview' extension + *----------------------------------------------------------------------------*/ +table.fancytree-ext-columnview tbody tr td { + position: relative; + border: 1px solid gray; + vertical-align: top; + overflow: auto; +} +table.fancytree-ext-columnview tbody tr td > ul { + padding: 0; +} +table.fancytree-ext-columnview tbody tr td > ul li { + list-style-image: none; + list-style-position: outside; + list-style-type: none; + -moz-background-clip: border; + -moz-background-inline-policy: continuous; + -moz-background-origin: padding; + background-attachment: scroll; + background-color: transparent; + background-position: 0px 0px; + background-repeat: repeat-y; + background-image: none; + /* no v-lines */ + margin: 0; +} +table.fancytree-ext-columnview span.fancytree-node { + position: relative; + /* allow positioning of embedded spans */ + display: inline-block; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded { + background-color: #e0e0e0; +} +table.fancytree-ext-columnview span.fancytree-node.fancytree-active { + background-color: #cbe8f6; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right { + position: absolute; + right: 3px; + background-position: 0px -80px; +} +table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover { + background-position: -16px -80px; +} +/*------------------------------------------------------------------------------ + * 'filter' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title { + color: black; + font-weight: normal; +} +.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: bold; +} +.fancytree-ext-filter-hide tr.fancytree-hide, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide { + display: none; +} +.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title { + color: #c0c0c0; + font-weight: lighter; +} +.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title, +.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title { + color: black; + font-weight: normal; +} +/* Hide expanders if all child nodes are hidden by filter */ +.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander { + visibility: hidden; +} +.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander, +.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander { + visibility: visible; +} +.fancytree-ext-childcounter span.fancytree-icon, +.fancytree-ext-filter span.fancytree-icon, +.fancytree-ext-childcounter span.fancytree-custom-icon, +.fancytree-ext-filter span.fancytree-custom-icon { + position: relative; +} +.fancytree-ext-childcounter span.fancytree-childcounter, +.fancytree-ext-filter span.fancytree-childcounter { + color: #fff; + background: #777; + border: 1px solid gray; + position: absolute; + top: -6px; + right: -6px; + min-width: 10px; + height: 10px; + line-height: 1; + vertical-align: baseline; + border-radius: 10px; + padding: 2px; + text-align: center; + font-size: 9px; +} +/*------------------------------------------------------------------------------ + * 'wide' extension + *----------------------------------------------------------------------------*/ +ul.fancytree-ext-wide { + position: relative; + min-width: 100%; + z-index: 2; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +ul.fancytree-ext-wide span.fancytree-node > span { + position: relative; + z-index: 2; +} +ul.fancytree-ext-wide span.fancytree-node span.fancytree-title { + position: absolute; + z-index: 1; + left: 0px; + min-width: 100%; + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +/*------------------------------------------------------------------------------ + * 'fixed' extension + *----------------------------------------------------------------------------*/ +.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden { + display: none; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom { + border-bottom: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right { + border-right: 3px solid rgba(0, 0, 0, 0.75); +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl { + position: absolute; + overflow: hidden; + z-index: 3; + top: 0px; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr { + position: absolute; + overflow: hidden; + z-index: 2; + top: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl { + position: absolute; + overflow: hidden; + z-index: 2; + left: 0px; +} +.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br { + position: absolute; + overflow: scroll; + z-index: 1; +} +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ +/******************************************************************************* + * Tree container + */ +ul.fancytree-container li { + background-image: url("../skin-xp/vline.gif"); + background-position: 0 0; +} +ul.fancytree-container.fancytree-rtl li { + background-position: right 0; + background-image: url("../skin-xp/vline-rtl.gif"); +} +ul.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander { + background-image: url("../skin-xp/icons-rtl.gif"); + background-position: 0px -64px; +} +ul.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-xp/icons-rtl.gif"); + background-position: -16px -64px; +} +ul.fancytree-container li.fancytree-lastsib { + background-image: none; +} +ul.fancytree-no-connector > li { + background-image: none; +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + background-image: url("../skin-xp/icons.gif"); +} +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-n span.fancytree-expander:hover { + background-position: 0px -64px; +} +.fancytree-exp-nl span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander:hover { + background-position: -16px -64px; +} +/******************************************************************************* + * Node titles + */ +span.fancytree-title { + border: 0 solid transparent; +} +span.fancytree-title:hover { + background-color: #F2F7FD; + border-color: #B8D6FB; +} +span.fancytree-focused span.fancytree-title { + outline: 1px dotted black; + background-color: #EFEBDE; +} +.fancytree-folder span.fancytree-title { + font-weight: bold; +} +.fancytree-selected span.fancytree-title { + color: green; + font-style: italic; +} +.fancytree-active span.fancytree-title { + background-color: #3169C6 !important; + color: white !important; +} +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table { + border-collapse: collapse; +} +table.fancytree-ext-table tbody tr.fancytree-focused { + background-color: #99DEFD; +} +table.fancytree-ext-table tbody tr.fancytree-active { + background-color: royalblue; +} +table.fancytree-ext-table tbody tr.fancytree-selected { + background-color: #99FDDE; +} diff --git a/code/libraries/fancytree/skin-xp/ui.fancytree.less b/code/libraries/fancytree/skin-xp/ui.fancytree.less new file mode 100644 index 00000000000..189eaf296d3 --- /dev/null +++ b/code/libraries/fancytree/skin-xp/ui.fancytree.less @@ -0,0 +1,129 @@ +/*! + * Fancytree "XP" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */ + +// Import common styles +@import "../skin-common.less"; + + +/******************************************************************************* + * Styles specific to this skin. + * + * This section is automatically generated from the `ui-fancytree.less` template. + ******************************************************************************/ + +// Override the variable after the import. +// NOTE: Variables are always resolved as the last definition, even if it is +// after where it is used. +@fancy-use-sprites: true; // false: suppress all background images (i.e. icons) + +@fancy-icon-width: 16px; +@fancy-icon-height: 16px; +@fancy-icon-spacing: 3px; +@fancy-node-border-width: 0; + +// We need to define this variable here (not in skin-common.less) to make it +// work with grunt and webpack: +@fancy-image-prefix: "./skin-xp/"; + +// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': +// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif"); +// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS +// instead of linking to that file: +// @fancy-inline-sprites: true; + + +/******************************************************************************* + * Tree container + */ +ul.fancytree-container { + li { + // background-image: url("vline.gif"); + // Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif': + background-image: data-uri("@{fancy-image-prefix}vline.gif"); + background-position: 0 0; + } + &.fancytree-rtl { + li { + background-position: right 0; + background-image: url("@{fancy-image-prefix}vline-rtl.gif"); + } + .fancytree-exp-n span.fancytree-expander { + background-image: url("@{fancy-image-prefix}icons-rtl.gif"); + .useSprite(0, 4); + } + .fancytree-exp-nl span.fancytree-expander { + background-image: url("@{fancy-image-prefix}icons-rtl.gif"); + .useSprite(1, 4); + } + } + // Suppress lines for last child node + li.fancytree-lastsib { + background-image: none; + } +} +// Suppress lines if level is fixed expanded (option minExpandLevel) +ul.fancytree-no-connector > li { + background-image: none; +} + +// XP theme always displays connectors (not only when .fancytree-connectors is set) +.fancytree-exp-n span.fancytree-expander, +.fancytree-exp-nl span.fancytree-expander { + .setBgImageUrl("icons.gif"); + // margin-top: 0; +} +.fancytree-exp-n span.fancytree-expander, // End-node, not last sibling +.fancytree-exp-n span.fancytree-expander:hover { + .useSprite(0, 4); +} +.fancytree-exp-nl span.fancytree-expander, // End-node, last sibling +.fancytree-exp-nl span.fancytree-expander:hover { + .useSprite(1, 4); +} + +/******************************************************************************* + * Node titles + */ + +span.fancytree-title { + border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover +} +span.fancytree-title:hover { + background-color: #F2F7FD; // light blue + border-color: #B8D6FB; // darker light blue +} +span.fancytree-focused span.fancytree-title { + outline: 1px dotted black; + background-color: #EFEBDE; // gray +} +.fancytree-folder span.fancytree-title { + font-weight: bold; +} +.fancytree-selected span.fancytree-title { + color: green; + font-style: italic; +} +.fancytree-active span.fancytree-title { + background-color: #3169C6 !important; + color: white !important; // @ IE6 +} + +/******************************************************************************* + * 'table' extension + */ +table.fancytree-ext-table { + border-collapse: collapse; + tbody tr.fancytree-focused { + background-color: #99DEFD; + } + tbody tr.fancytree-active { + background-color: royalblue; + } + tbody tr.fancytree-selected { + background-color: #99FDDE; + } +} diff --git a/code/libraries/fancytree/skin-xp/ui.fancytree.min.css b/code/libraries/fancytree/skin-xp/ui.fancytree.min.css new file mode 100644 index 00000000000..7d70f5e61da --- /dev/null +++ b/code/libraries/fancytree/skin-xp/ui.fancytree.min.css @@ -0,0 +1,6 @@ +/*! + * Fancytree "XP" skin. + * + * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from + * the LESS templates. + */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url("../skin-xp/vline.gif");background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url("../skin-xp/icons.gif");background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:0}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-xp/icons.gif");margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url("../skin-xp/loading.gif");background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px 0 3px;margin:0 0 0 3px;border:0 solid transparent;-webkit-border-radius:0px;-moz-border-radius:0;-ms-border-radius:0px;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url("../skin-xp/icons-rtl.gif")}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-xp/icons-rtl.gif")}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url("../skin-xp/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url("../skin-xp/icons-rtl.gif")}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}ul.fancytree-container li{background-image:url("../skin-xp/vline.gif");background-position:0 0}ul.fancytree-container.fancytree-rtl li{background-position:right 0;background-image:url("../skin-xp/vline-rtl.gif")}ul.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander{background-image:url("../skin-xp/icons-rtl.gif");background-position:0 -64px}ul.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-xp/icons-rtl.gif");background-position:-16px -64px}ul.fancytree-container li.fancytree-lastsib{background-image:none}ul.fancytree-no-connector>li{background-image:none}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:url("../skin-xp/icons.gif")}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-exp-nl span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}span.fancytree-title{border:0 solid transparent}span.fancytree-title:hover{background-color:#f2f7fd;border-color:#b8d6fb}span.fancytree-focused span.fancytree-title{outline:1px dotted black;background-color:#efebde}.fancytree-folder span.fancytree-title{font-weight:700}.fancytree-selected span.fancytree-title{color:green;font-style:italic}.fancytree-active span.fancytree-title{background-color:#3169c6!important;color:#fff!important}table.fancytree-ext-table{border-collapse:collapse}table.fancytree-ext-table tbody tr.fancytree-focused{background-color:#99defd}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#4169e1}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#99fdde} \ No newline at end of file diff --git a/code/libraries/fancytree/skin-xp/vline-rtl.gif b/code/libraries/fancytree/skin-xp/vline-rtl.gif new file mode 100644 index 00000000000..0400cb3eeac Binary files /dev/null and b/code/libraries/fancytree/skin-xp/vline-rtl.gif differ diff --git a/code/libraries/fancytree/skin-xp/vline.gif b/code/libraries/fancytree/skin-xp/vline.gif new file mode 100644 index 00000000000..1b00ae50e0f Binary files /dev/null and b/code/libraries/fancytree/skin-xp/vline.gif differ diff --git a/libraries/force-graph.min.js b/code/libraries/force-graph.min.js similarity index 100% rename from libraries/force-graph.min.js rename to code/libraries/force-graph.min.js diff --git a/libraries/jquery.hotkeys.js b/code/libraries/jquery.hotkeys.js similarity index 100% rename from libraries/jquery.hotkeys.js rename to code/libraries/jquery.hotkeys.js diff --git a/libraries/jquery.js b/code/libraries/jquery.js similarity index 100% rename from libraries/jquery.js rename to code/libraries/jquery.js diff --git a/libraries/jquery.mark.es6.min.js b/code/libraries/jquery.mark.es6.min.js similarity index 100% rename from libraries/jquery.mark.es6.min.js rename to code/libraries/jquery.mark.es6.min.js diff --git a/libraries/jquery.min.js b/code/libraries/jquery.min.js similarity index 100% rename from libraries/jquery.min.js rename to code/libraries/jquery.min.js diff --git a/libraries/jquery.min.map b/code/libraries/jquery.min.map similarity index 100% rename from libraries/jquery.min.map rename to code/libraries/jquery.min.map diff --git a/libraries/jsplumb.js b/code/libraries/jsplumb.js similarity index 100% rename from libraries/jsplumb.js rename to code/libraries/jsplumb.js diff --git a/libraries/katex/README.md b/code/libraries/katex/README.md similarity index 100% rename from libraries/katex/README.md rename to code/libraries/katex/README.md diff --git a/libraries/katex/auto-render.js b/code/libraries/katex/auto-render.js similarity index 100% rename from libraries/katex/auto-render.js rename to code/libraries/katex/auto-render.js diff --git a/libraries/katex/auto-render.min.js b/code/libraries/katex/auto-render.min.js similarity index 100% rename from libraries/katex/auto-render.min.js rename to code/libraries/katex/auto-render.min.js diff --git a/libraries/katex/auto-render.mjs b/code/libraries/katex/auto-render.mjs similarity index 100% rename from libraries/katex/auto-render.mjs rename to code/libraries/katex/auto-render.mjs diff --git a/libraries/katex/fonts/KaTeX_AMS-Regular.ttf b/code/libraries/katex/fonts/KaTeX_AMS-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_AMS-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_AMS-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_AMS-Regular.woff b/code/libraries/katex/fonts/KaTeX_AMS-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_AMS-Regular.woff rename to code/libraries/katex/fonts/KaTeX_AMS-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_AMS-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_AMS-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_AMS-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_AMS-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Bold.ttf rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.ttf diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff b/code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff2 rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Bold.woff2 diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff b/code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Caligraphic-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Bold.ttf b/code/libraries/katex/fonts/KaTeX_Fraktur-Bold.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Bold.ttf rename to code/libraries/katex/fonts/KaTeX_Fraktur-Bold.ttf diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff b/code/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Bold.woff rename to code/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/code/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Bold.woff2 rename to code/libraries/katex/fonts/KaTeX_Fraktur-Bold.woff2 diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Fraktur-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Fraktur-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff b/code/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Fraktur-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Fraktur-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Main-Bold.ttf b/code/libraries/katex/fonts/KaTeX_Main-Bold.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Bold.ttf rename to code/libraries/katex/fonts/KaTeX_Main-Bold.ttf diff --git a/libraries/katex/fonts/KaTeX_Main-Bold.woff b/code/libraries/katex/fonts/KaTeX_Main-Bold.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Bold.woff rename to code/libraries/katex/fonts/KaTeX_Main-Bold.woff diff --git a/libraries/katex/fonts/KaTeX_Main-Bold.woff2 b/code/libraries/katex/fonts/KaTeX_Main-Bold.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Bold.woff2 rename to code/libraries/katex/fonts/KaTeX_Main-Bold.woff2 diff --git a/libraries/katex/fonts/KaTeX_Main-BoldItalic.ttf b/code/libraries/katex/fonts/KaTeX_Main-BoldItalic.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-BoldItalic.ttf rename to code/libraries/katex/fonts/KaTeX_Main-BoldItalic.ttf diff --git a/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff b/code/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-BoldItalic.woff rename to code/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff diff --git a/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/code/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-BoldItalic.woff2 rename to code/libraries/katex/fonts/KaTeX_Main-BoldItalic.woff2 diff --git a/libraries/katex/fonts/KaTeX_Main-Italic.ttf b/code/libraries/katex/fonts/KaTeX_Main-Italic.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Italic.ttf rename to code/libraries/katex/fonts/KaTeX_Main-Italic.ttf diff --git a/libraries/katex/fonts/KaTeX_Main-Italic.woff b/code/libraries/katex/fonts/KaTeX_Main-Italic.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Italic.woff rename to code/libraries/katex/fonts/KaTeX_Main-Italic.woff diff --git a/libraries/katex/fonts/KaTeX_Main-Italic.woff2 b/code/libraries/katex/fonts/KaTeX_Main-Italic.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Italic.woff2 rename to code/libraries/katex/fonts/KaTeX_Main-Italic.woff2 diff --git a/libraries/katex/fonts/KaTeX_Main-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Main-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Main-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Main-Regular.woff b/code/libraries/katex/fonts/KaTeX_Main-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Main-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Main-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Main-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Main-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Main-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Math-BoldItalic.ttf b/code/libraries/katex/fonts/KaTeX_Math-BoldItalic.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-BoldItalic.ttf rename to code/libraries/katex/fonts/KaTeX_Math-BoldItalic.ttf diff --git a/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff b/code/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-BoldItalic.woff rename to code/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff diff --git a/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/code/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-BoldItalic.woff2 rename to code/libraries/katex/fonts/KaTeX_Math-BoldItalic.woff2 diff --git a/libraries/katex/fonts/KaTeX_Math-Italic.ttf b/code/libraries/katex/fonts/KaTeX_Math-Italic.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-Italic.ttf rename to code/libraries/katex/fonts/KaTeX_Math-Italic.ttf diff --git a/libraries/katex/fonts/KaTeX_Math-Italic.woff b/code/libraries/katex/fonts/KaTeX_Math-Italic.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-Italic.woff rename to code/libraries/katex/fonts/KaTeX_Math-Italic.woff diff --git a/libraries/katex/fonts/KaTeX_Math-Italic.woff2 b/code/libraries/katex/fonts/KaTeX_Math-Italic.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Math-Italic.woff2 rename to code/libraries/katex/fonts/KaTeX_Math-Italic.woff2 diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Bold.ttf b/code/libraries/katex/fonts/KaTeX_SansSerif-Bold.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Bold.ttf rename to code/libraries/katex/fonts/KaTeX_SansSerif-Bold.ttf diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff b/code/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Bold.woff rename to code/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/code/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Bold.woff2 rename to code/libraries/katex/fonts/KaTeX_SansSerif-Bold.woff2 diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Italic.ttf b/code/libraries/katex/fonts/KaTeX_SansSerif-Italic.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Italic.ttf rename to code/libraries/katex/fonts/KaTeX_SansSerif-Italic.ttf diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff b/code/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Italic.woff rename to code/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/code/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Italic.woff2 rename to code/libraries/katex/fonts/KaTeX_SansSerif-Italic.woff2 diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Regular.ttf b/code/libraries/katex/fonts/KaTeX_SansSerif-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_SansSerif-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff b/code/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Regular.woff rename to code/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_SansSerif-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_SansSerif-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Script-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Script-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Script-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Script-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Script-Regular.woff b/code/libraries/katex/fonts/KaTeX_Script-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Script-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Script-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Script-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Script-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Script-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Script-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Size1-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Size1-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Size1-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Size1-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Size1-Regular.woff b/code/libraries/katex/fonts/KaTeX_Size1-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Size1-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Size1-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Size1-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Size1-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Size1-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Size1-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Size2-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Size2-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Size2-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Size2-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Size2-Regular.woff b/code/libraries/katex/fonts/KaTeX_Size2-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Size2-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Size2-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Size2-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Size2-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Size2-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Size2-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Size3-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Size3-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Size3-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Size3-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Size3-Regular.woff b/code/libraries/katex/fonts/KaTeX_Size3-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Size3-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Size3-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Size3-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Size3-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Size3-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Size3-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Size4-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Size4-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Size4-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Size4-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Size4-Regular.woff b/code/libraries/katex/fonts/KaTeX_Size4-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Size4-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Size4-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Size4-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Size4-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Size4-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Size4-Regular.woff2 diff --git a/libraries/katex/fonts/KaTeX_Typewriter-Regular.ttf b/code/libraries/katex/fonts/KaTeX_Typewriter-Regular.ttf similarity index 100% rename from libraries/katex/fonts/KaTeX_Typewriter-Regular.ttf rename to code/libraries/katex/fonts/KaTeX_Typewriter-Regular.ttf diff --git a/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff b/code/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff similarity index 100% rename from libraries/katex/fonts/KaTeX_Typewriter-Regular.woff rename to code/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff diff --git a/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/code/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff2 similarity index 100% rename from libraries/katex/fonts/KaTeX_Typewriter-Regular.woff2 rename to code/libraries/katex/fonts/KaTeX_Typewriter-Regular.woff2 diff --git a/libraries/katex/katex.css b/code/libraries/katex/katex.css similarity index 100% rename from libraries/katex/katex.css rename to code/libraries/katex/katex.css diff --git a/libraries/katex/katex.js b/code/libraries/katex/katex.js similarity index 100% rename from libraries/katex/katex.js rename to code/libraries/katex/katex.js diff --git a/libraries/katex/katex.min.css b/code/libraries/katex/katex.min.css similarity index 100% rename from libraries/katex/katex.min.css rename to code/libraries/katex/katex.min.css diff --git a/libraries/katex/katex.min.js b/code/libraries/katex/katex.min.js similarity index 100% rename from libraries/katex/katex.min.js rename to code/libraries/katex/katex.min.js diff --git a/libraries/katex/katex.mjs b/code/libraries/katex/katex.mjs similarity index 100% rename from libraries/katex/katex.mjs rename to code/libraries/katex/katex.mjs diff --git a/libraries/katex/mhchem.js b/code/libraries/katex/mhchem.js similarity index 100% rename from libraries/katex/mhchem.js rename to code/libraries/katex/mhchem.js diff --git a/libraries/katex/mhchem.min.js b/code/libraries/katex/mhchem.min.js similarity index 100% rename from libraries/katex/mhchem.min.js rename to code/libraries/katex/mhchem.min.js diff --git a/libraries/katex/mhchem.mjs b/code/libraries/katex/mhchem.mjs similarity index 100% rename from libraries/katex/mhchem.mjs rename to code/libraries/katex/mhchem.mjs diff --git a/libraries/knockout.min.js b/code/libraries/knockout.min.js similarity index 100% rename from libraries/knockout.min.js rename to code/libraries/knockout.min.js diff --git a/libraries/mermaid.min.js b/code/libraries/mermaid.min.js similarity index 100% rename from libraries/mermaid.min.js rename to code/libraries/mermaid.min.js diff --git a/libraries/normalize.min.css b/code/libraries/normalize.min.css similarity index 100% rename from libraries/normalize.min.css rename to code/libraries/normalize.min.css diff --git a/libraries/panzoom.js b/code/libraries/panzoom.js similarity index 100% rename from libraries/panzoom.js rename to code/libraries/panzoom.js diff --git a/libraries/printThis.js b/code/libraries/printThis.js similarity index 100% rename from libraries/printThis.js rename to code/libraries/printThis.js diff --git a/libraries/split.min.js b/code/libraries/split.min.js similarity index 100% rename from libraries/split.min.js rename to code/libraries/split.min.js diff --git a/libraries/wheel-zoom.min.js b/code/libraries/wheel-zoom.min.js similarity index 100% rename from libraries/wheel-zoom.min.js rename to code/libraries/wheel-zoom.min.js diff --git a/nodemon.json b/code/nodemon.json similarity index 100% rename from nodemon.json rename to code/nodemon.json diff --git a/package-lock.json b/code/package-lock.json similarity index 100% rename from package-lock.json rename to code/package-lock.json diff --git a/package.json b/code/package.json similarity index 100% rename from package.json rename to code/package.json diff --git a/code/run.sh b/code/run.sh new file mode 100755 index 00000000000..a9885d8b284 --- /dev/null +++ b/code/run.sh @@ -0,0 +1,4 @@ +SOURCE="$(dirname "$(readlink -f "$0")")" + +TRILIUM_DATA_DIR="$SOURCE/db-data" bash -c "npm run start-server-no-dir" + diff --git a/spec-es6/attribute_parser.spec.js b/code/spec-es6/attribute_parser.spec.js similarity index 100% rename from spec-es6/attribute_parser.spec.js rename to code/spec-es6/attribute_parser.spec.js diff --git a/spec-es6/mini_test.js b/code/spec-es6/mini_test.js similarity index 100% rename from spec-es6/mini_test.js rename to code/spec-es6/mini_test.js diff --git a/spec/search/becca_mocking.js b/code/spec/search/becca_mocking.js similarity index 100% rename from spec/search/becca_mocking.js rename to code/spec/search/becca_mocking.js diff --git a/spec/search/lexer.spec.js b/code/spec/search/lexer.spec.js similarity index 100% rename from spec/search/lexer.spec.js rename to code/spec/search/lexer.spec.js diff --git a/spec/search/parens.spec.js b/code/spec/search/parens.spec.js similarity index 100% rename from spec/search/parens.spec.js rename to code/spec/search/parens.spec.js diff --git a/spec/search/parser.spec.js b/code/spec/search/parser.spec.js similarity index 100% rename from spec/search/parser.spec.js rename to code/spec/search/parser.spec.js diff --git a/spec/search/search.spec.js b/code/spec/search/search.spec.js similarity index 100% rename from spec/search/search.spec.js rename to code/spec/search/search.spec.js diff --git a/spec/search/value_extractor.spec.js b/code/spec/search/value_extractor.spec.js similarity index 100% rename from spec/search/value_extractor.spec.js rename to code/spec/search/value_extractor.spec.js diff --git a/spec/support/jasmine.json b/code/spec/support/jasmine.json similarity index 100% rename from spec/support/jasmine.json rename to code/spec/support/jasmine.json diff --git a/src/anonymize.js b/code/src/anonymize.js similarity index 100% rename from src/anonymize.js rename to code/src/anonymize.js diff --git a/src/app.js b/code/src/app.js similarity index 100% rename from src/app.js rename to code/src/app.js diff --git a/src/becca/becca.js b/code/src/becca/becca.js similarity index 94% rename from src/becca/becca.js rename to code/src/becca/becca.js index 8b1a3fcb973..ea1b827168a 100644 --- a/src/becca/becca.js +++ b/code/src/becca/becca.js @@ -79,6 +79,18 @@ class Becca { return this.notes[noteId]; } + getSwimlaneTasks(swimlaneId) { + const result = []; + const attrs = Object.values(this.attributes); + for(const i in attrs) { + const a = attrs[i]; + if (a.type === 'taskprop' && a.name === 'swimlane' && a.value === swimlaneId) { + result.push( this.notes[attrs[i].noteId]); + } + } + return result; + } + /** @returns {BNote|null} */ getNoteOrThrow(noteId) { const note = this.notes[noteId]; @@ -124,6 +136,11 @@ class Becca { return branch; } + getChildren(noteId) { + const note = this.getNote(noteId); + return note.getChildNotes(); + } + /** @returns {BAttribute|null} */ getAttribute(attributeId) { return this.attributes[attributeId]; @@ -151,7 +168,6 @@ class Becca { const BRevision = require("./entities/brevision"); // avoiding circular dependency problems return row ? new BRevision(row) : null; } - /** @returns {BAttachment|null} */ getAttachment(attachmentId, opts = {}) { opts.includeContentLength = !!opts.includeContentLength; diff --git a/src/becca/becca_loader.js b/code/src/becca/becca_loader.js similarity index 100% rename from src/becca/becca_loader.js rename to code/src/becca/becca_loader.js diff --git a/src/becca/becca_service.js b/code/src/becca/becca_service.js similarity index 100% rename from src/becca/becca_service.js rename to code/src/becca/becca_service.js diff --git a/src/becca/entities/abstract_becca_entity.js b/code/src/becca/entities/abstract_becca_entity.js similarity index 100% rename from src/becca/entities/abstract_becca_entity.js rename to code/src/becca/entities/abstract_becca_entity.js diff --git a/src/becca/entities/battachment.js b/code/src/becca/entities/battachment.js similarity index 100% rename from src/becca/entities/battachment.js rename to code/src/becca/entities/battachment.js diff --git a/src/becca/entities/battribute.js b/code/src/becca/entities/battribute.js similarity index 98% rename from src/becca/entities/battribute.js rename to code/src/becca/entities/battribute.js index 41046b7e164..db3102946eb 100644 --- a/src/becca/entities/battribute.js +++ b/code/src/becca/entities/battribute.js @@ -87,7 +87,7 @@ class BAttribute extends AbstractBeccaEntity { } validate() { - if (!["label", "relation"].includes(this.type)) { + if (!["label", "relation", "taskprop", "swimlaneprop", "dashboardprop"].includes(this.type)) { throw new Error(`Invalid attribute type '${this.type}' in attribute '${this.attributeId}' of note '${this.noteId}'`); } diff --git a/src/becca/entities/bblob.js b/code/src/becca/entities/bblob.js similarity index 100% rename from src/becca/entities/bblob.js rename to code/src/becca/entities/bblob.js diff --git a/src/becca/entities/bbranch.js b/code/src/becca/entities/bbranch.js similarity index 100% rename from src/becca/entities/bbranch.js rename to code/src/becca/entities/bbranch.js diff --git a/src/becca/entities/betapi_token.js b/code/src/becca/entities/betapi_token.js similarity index 100% rename from src/becca/entities/betapi_token.js rename to code/src/becca/entities/betapi_token.js diff --git a/src/becca/entities/bnote.js b/code/src/becca/entities/bnote.js similarity index 100% rename from src/becca/entities/bnote.js rename to code/src/becca/entities/bnote.js diff --git a/src/becca/entities/boption.js b/code/src/becca/entities/boption.js similarity index 100% rename from src/becca/entities/boption.js rename to code/src/becca/entities/boption.js diff --git a/src/becca/entities/brecent_note.js b/code/src/becca/entities/brecent_note.js similarity index 100% rename from src/becca/entities/brecent_note.js rename to code/src/becca/entities/brecent_note.js diff --git a/src/becca/entities/brevision.js b/code/src/becca/entities/brevision.js similarity index 100% rename from src/becca/entities/brevision.js rename to code/src/becca/entities/brevision.js diff --git a/src/becca/entity_constructor.js b/code/src/becca/entity_constructor.js similarity index 100% rename from src/becca/entity_constructor.js rename to code/src/becca/entity_constructor.js diff --git a/src/becca/similarity.js b/code/src/becca/similarity.js similarity index 100% rename from src/becca/similarity.js rename to code/src/becca/similarity.js diff --git a/src/errors/not_found_error.js b/code/src/errors/not_found_error.js similarity index 100% rename from src/errors/not_found_error.js rename to code/src/errors/not_found_error.js diff --git a/src/errors/validation_error.js b/code/src/errors/validation_error.js similarity index 100% rename from src/errors/validation_error.js rename to code/src/errors/validation_error.js diff --git a/src/etapi/app_info.js b/code/src/etapi/app_info.js similarity index 100% rename from src/etapi/app_info.js rename to code/src/etapi/app_info.js diff --git a/src/etapi/attachments.js b/code/src/etapi/attachments.js similarity index 100% rename from src/etapi/attachments.js rename to code/src/etapi/attachments.js diff --git a/src/etapi/attributes.js b/code/src/etapi/attributes.js similarity index 100% rename from src/etapi/attributes.js rename to code/src/etapi/attributes.js diff --git a/src/etapi/auth.js b/code/src/etapi/auth.js similarity index 100% rename from src/etapi/auth.js rename to code/src/etapi/auth.js diff --git a/src/etapi/backup.js b/code/src/etapi/backup.js similarity index 100% rename from src/etapi/backup.js rename to code/src/etapi/backup.js diff --git a/src/etapi/branches.js b/code/src/etapi/branches.js similarity index 100% rename from src/etapi/branches.js rename to code/src/etapi/branches.js diff --git a/src/etapi/etapi.openapi.yaml b/code/src/etapi/etapi.openapi.yaml similarity index 100% rename from src/etapi/etapi.openapi.yaml rename to code/src/etapi/etapi.openapi.yaml diff --git a/src/etapi/etapi_utils.js b/code/src/etapi/etapi_utils.js similarity index 100% rename from src/etapi/etapi_utils.js rename to code/src/etapi/etapi_utils.js diff --git a/src/etapi/mappers.js b/code/src/etapi/mappers.js similarity index 100% rename from src/etapi/mappers.js rename to code/src/etapi/mappers.js diff --git a/src/etapi/notes.js b/code/src/etapi/notes.js similarity index 100% rename from src/etapi/notes.js rename to code/src/etapi/notes.js diff --git a/src/etapi/spec.js b/code/src/etapi/spec.js similarity index 100% rename from src/etapi/spec.js rename to code/src/etapi/spec.js diff --git a/src/etapi/special_notes.js b/code/src/etapi/special_notes.js similarity index 100% rename from src/etapi/special_notes.js rename to code/src/etapi/special_notes.js diff --git a/src/etapi/validators.js b/code/src/etapi/validators.js similarity index 100% rename from src/etapi/validators.js rename to code/src/etapi/validators.js diff --git a/src/public/app/components/app_context.js b/code/src/public/app/components/app_context.js similarity index 100% rename from src/public/app/components/app_context.js rename to code/src/public/app/components/app_context.js diff --git a/src/public/app/components/component.js b/code/src/public/app/components/component.js similarity index 100% rename from src/public/app/components/component.js rename to code/src/public/app/components/component.js diff --git a/src/public/app/components/entrypoints.js b/code/src/public/app/components/entrypoints.js similarity index 100% rename from src/public/app/components/entrypoints.js rename to code/src/public/app/components/entrypoints.js diff --git a/src/public/app/components/main_tree_executors.js b/code/src/public/app/components/main_tree_executors.js similarity index 100% rename from src/public/app/components/main_tree_executors.js rename to code/src/public/app/components/main_tree_executors.js diff --git a/src/public/app/components/mobile_screen_switcher.js b/code/src/public/app/components/mobile_screen_switcher.js similarity index 100% rename from src/public/app/components/mobile_screen_switcher.js rename to code/src/public/app/components/mobile_screen_switcher.js diff --git a/src/public/app/components/note_context.js b/code/src/public/app/components/note_context.js similarity index 100% rename from src/public/app/components/note_context.js rename to code/src/public/app/components/note_context.js diff --git a/src/public/app/components/root_command_executor.js b/code/src/public/app/components/root_command_executor.js similarity index 100% rename from src/public/app/components/root_command_executor.js rename to code/src/public/app/components/root_command_executor.js diff --git a/src/public/app/components/shortcut_component.js b/code/src/public/app/components/shortcut_component.js similarity index 100% rename from src/public/app/components/shortcut_component.js rename to code/src/public/app/components/shortcut_component.js diff --git a/src/public/app/components/tab_manager.js b/code/src/public/app/components/tab_manager.js similarity index 100% rename from src/public/app/components/tab_manager.js rename to code/src/public/app/components/tab_manager.js diff --git a/src/public/app/components/zoom.js b/code/src/public/app/components/zoom.js similarity index 100% rename from src/public/app/components/zoom.js rename to code/src/public/app/components/zoom.js diff --git a/src/public/app/desktop.js b/code/src/public/app/desktop.js similarity index 100% rename from src/public/app/desktop.js rename to code/src/public/app/desktop.js diff --git a/src/public/app/doc_notes/hidden.html b/code/src/public/app/doc_notes/hidden.html similarity index 100% rename from src/public/app/doc_notes/hidden.html rename to code/src/public/app/doc_notes/hidden.html diff --git a/src/public/app/doc_notes/launchbar_command_launcher.html b/code/src/public/app/doc_notes/launchbar_command_launcher.html similarity index 100% rename from src/public/app/doc_notes/launchbar_command_launcher.html rename to code/src/public/app/doc_notes/launchbar_command_launcher.html diff --git a/src/public/app/doc_notes/launchbar_history_navigation.html b/code/src/public/app/doc_notes/launchbar_history_navigation.html similarity index 100% rename from src/public/app/doc_notes/launchbar_history_navigation.html rename to code/src/public/app/doc_notes/launchbar_history_navigation.html diff --git a/src/public/app/doc_notes/launchbar_intro.html b/code/src/public/app/doc_notes/launchbar_intro.html similarity index 100% rename from src/public/app/doc_notes/launchbar_intro.html rename to code/src/public/app/doc_notes/launchbar_intro.html diff --git a/src/public/app/doc_notes/launchbar_note_launcher.html b/code/src/public/app/doc_notes/launchbar_note_launcher.html similarity index 100% rename from src/public/app/doc_notes/launchbar_note_launcher.html rename to code/src/public/app/doc_notes/launchbar_note_launcher.html diff --git a/src/public/app/doc_notes/launchbar_script_launcher.html b/code/src/public/app/doc_notes/launchbar_script_launcher.html similarity index 100% rename from src/public/app/doc_notes/launchbar_script_launcher.html rename to code/src/public/app/doc_notes/launchbar_script_launcher.html diff --git a/src/public/app/doc_notes/launchbar_spacer.html b/code/src/public/app/doc_notes/launchbar_spacer.html similarity index 100% rename from src/public/app/doc_notes/launchbar_spacer.html rename to code/src/public/app/doc_notes/launchbar_spacer.html diff --git a/src/public/app/doc_notes/launchbar_widget_launcher.html b/code/src/public/app/doc_notes/launchbar_widget_launcher.html similarity index 100% rename from src/public/app/doc_notes/launchbar_widget_launcher.html rename to code/src/public/app/doc_notes/launchbar_widget_launcher.html diff --git a/src/public/app/doc_notes/share.html b/code/src/public/app/doc_notes/share.html similarity index 100% rename from src/public/app/doc_notes/share.html rename to code/src/public/app/doc_notes/share.html diff --git a/src/public/app/doc_notes/user_hidden.html b/code/src/public/app/doc_notes/user_hidden.html similarity index 100% rename from src/public/app/doc_notes/user_hidden.html rename to code/src/public/app/doc_notes/user_hidden.html diff --git a/src/public/app/entities/fattachment.js b/code/src/public/app/entities/fattachment.js similarity index 100% rename from src/public/app/entities/fattachment.js rename to code/src/public/app/entities/fattachment.js diff --git a/src/public/app/entities/fattribute.js b/code/src/public/app/entities/fattribute.js similarity index 100% rename from src/public/app/entities/fattribute.js rename to code/src/public/app/entities/fattribute.js diff --git a/src/public/app/entities/fblob.js b/code/src/public/app/entities/fblob.js similarity index 100% rename from src/public/app/entities/fblob.js rename to code/src/public/app/entities/fblob.js diff --git a/src/public/app/entities/fbranch.js b/code/src/public/app/entities/fbranch.js similarity index 100% rename from src/public/app/entities/fbranch.js rename to code/src/public/app/entities/fbranch.js diff --git a/src/public/app/entities/fnote.js b/code/src/public/app/entities/fnote.js similarity index 100% rename from src/public/app/entities/fnote.js rename to code/src/public/app/entities/fnote.js diff --git a/src/public/app/layouts/desktop_layout.js b/code/src/public/app/layouts/desktop_layout.js similarity index 62% rename from src/public/app/layouts/desktop_layout.js rename to code/src/public/app/layouts/desktop_layout.js index 76a05b7e2d9..e9979b2000b 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/code/src/public/app/layouts/desktop_layout.js @@ -78,12 +78,105 @@ import HideFloatingButtonsButton from "../widgets/floating_buttons/hide_floating import ScriptExecutorWidget from "../widgets/ribbon_widgets/script_executor.js"; import MovePaneButton from "../widgets/buttons/move_pane_button.js"; import UploadAttachmentsDialog from "../widgets/dialogs/upload_attachments.js"; +import TaskPriorityWidget from "../widgets/task_priority.js"; +import TaskDeadlineWidget from "../widgets/task_deadline.js"; +import TaskStatusWidget from "../widgets/task_status.js"; +import TaskCommentsWidget from "../widgets/task_comments.js"; +import TaskDescriptionWidget from "../widgets/task_description.js"; +import TaskRelationsWidget from "../widgets/task_relations.js"; +import ConditionalFlexContainer from "../widgets/containers/conditional_flex_container.js"; +import TaskSwimlaneWidget from "../widgets/task_swimlane.js"; +import CreateNewFollowUpButton from "../widgets/buttons/create_new_follow_up.js"; +import NewTaskDialog from "../widgets/dialogs/new_task_dialog.js"; +import MarkTaskAsDoneButton from "../widgets/buttons/mark_task_as_done_button.js"; export default class DesktopLayout { constructor(customWidgets) { this.customWidgets = customWidgets; } + generateNoteWidget() { + return new NoteWrapperWidget() + .child(new FlexContainer('row').class('title-row') + .css("height", "50px") + .css("min-height", "50px") + .css('align-items', "center") + .cssBlock('.title-row > * { margin: 5px; }') + .child(new NoteIconWidget()) + .child(new NoteTitleWidget()) + .child(new SpacerWidget(0, 1)) + .child(new MovePaneButton(true)) + .child(new MovePaneButton(false)) + .child(new ClosePaneButton()) + .child(new CreatePaneButton()) + ) + .child(new ConditionalFlexContainer('row', (noteContext) => { + return noteContext && noteContext.note && (noteContext.note.type == "task"); + }).class('title-row') + .css("height", "50px") + .css("min-height", "50px") + .css('align-items', "center") + .cssBlock('.title-row > * { margin: 5px; }') + .child(new TaskPriorityWidget()) + .child(new TaskStatusWidget()) + .child(new TaskDeadlineWidget()) + .child(new TaskSwimlaneWidget())) + .child( + new RibbonContainer() + // the order of the widgets matter. Some of these want to "activate" themselves + // when visible. When this happens to multiple of them, the first one "wins". + // promoted attributes should always win. + .ribbon(new PromotedAttributesWidget()) + .ribbon(new ScriptExecutorWidget()) + .ribbon(new SearchDefinitionWidget()) + .ribbon(new EditedNotesWidget()) + .ribbon(new BookPropertiesWidget()) + .ribbon(new NotePropertiesWidget()) + .ribbon(new FilePropertiesWidget()) + .ribbon(new ImagePropertiesWidget()) + .ribbon(new BasicPropertiesWidget()) + .ribbon(new OwnedAttributeListWidget()) + .ribbon(new InheritedAttributesWidget()) + .ribbon(new NotePathsWidget()) + .ribbon(new NoteMapRibbonWidget()) + .ribbon(new SimilarNotesWidget()) + .ribbon(new NoteInfoWidget()) + .button(new CreateNewFollowUpButton()) + .button(new MarkTaskAsDoneButton()) + .button(new RevisionsButton()) + .button(new NoteActionsWidget()) + + ) + .child(new SharedInfoWidget()) + .child(new WatchedFileUpdateStatusWidget()) + .child(new FloatingButtons() + .child(new EditButton()) + .child(new CodeButtonsWidget()) + .child(new RelationMapButtons()) + .child(new MermaidExportButton()) + //.child(new BacklinksWidget()) + .child(new HideFloatingButtonsButton()) + ) + .child(new MermaidWidget()) + .child(new ScrollingContainer() + .filling() + .child(new SqlTableSchemasWidget()) + .child(new NoteDetailWidget()) + .child(new TaskDescriptionWidget()) + .child(new TaskRelationsWidget()) + .child(new TaskCommentsWidget()) + .child(new NoteListWidget()) + .child(new SearchResultWidget()) + .child(new SqlResultWidget()) + ) + .child(new ApiLogWidget()) + .child(new FindWidget()) + .child( + ...this.customWidgets.get('node-detail-pane'), // typo, let's keep it for a while as BC + ...this.customWidgets.get('note-detail-pane') + ); + } + getRootWidget(appContext) { appContext.noteTreeWidget = new NoteTreeWidget(); @@ -117,76 +210,15 @@ export default class DesktopLayout { .collapsible() .id('center-pane') .child(new SplitNoteContainer(() => - new NoteWrapperWidget() - .child(new FlexContainer('row').class('title-row') - .css("height", "50px") - .css("min-height", "50px") - .css('align-items', "center") - .cssBlock('.title-row > * { margin: 5px; }') - .child(new NoteIconWidget()) - .child(new NoteTitleWidget()) - .child(new SpacerWidget(0, 1)) - .child(new MovePaneButton(true)) - .child(new MovePaneButton(false)) - .child(new ClosePaneButton()) - .child(new CreatePaneButton()) - ) - .child( - new RibbonContainer() - // the order of the widgets matter. Some of these want to "activate" themselves - // when visible. When this happens to multiple of them, the first one "wins". - // promoted attributes should always win. - .ribbon(new PromotedAttributesWidget()) - .ribbon(new ScriptExecutorWidget()) - .ribbon(new SearchDefinitionWidget()) - .ribbon(new EditedNotesWidget()) - .ribbon(new BookPropertiesWidget()) - .ribbon(new NotePropertiesWidget()) - .ribbon(new FilePropertiesWidget()) - .ribbon(new ImagePropertiesWidget()) - .ribbon(new BasicPropertiesWidget()) - .ribbon(new OwnedAttributeListWidget()) - .ribbon(new InheritedAttributesWidget()) - .ribbon(new NotePathsWidget()) - .ribbon(new NoteMapRibbonWidget()) - .ribbon(new SimilarNotesWidget()) - .ribbon(new NoteInfoWidget()) - .button(new RevisionsButton()) - .button(new NoteActionsWidget()) - ) - .child(new SharedInfoWidget()) - .child(new WatchedFileUpdateStatusWidget()) - .child(new FloatingButtons() - .child(new EditButton()) - .child(new CodeButtonsWidget()) - .child(new RelationMapButtons()) - .child(new MermaidExportButton()) - .child(new BacklinksWidget()) - .child(new HideFloatingButtonsButton()) - ) - .child(new MermaidWidget()) - .child( - new ScrollingContainer() - .filling() - .child(new SqlTableSchemasWidget()) - .child(new NoteDetailWidget()) - .child(new NoteListWidget()) - .child(new SearchResultWidget()) - .child(new SqlResultWidget()) - ) - .child(new ApiLogWidget()) - .child(new FindWidget()) - .child( - ...this.customWidgets.get('node-detail-pane'), // typo, let's keep it for a while as BC - ...this.customWidgets.get('note-detail-pane') - ) + this.generateNoteWidget() + this.generateNoteWidget() ) ) .child(...this.customWidgets.get('center-pane')) ) .child(new RightPaneContainer() .child(new TocWidget()) - .child(new HighlightsListWidget()) + //.child(new HighlightsListWidget()) .child(...this.customWidgets.get('right-pane')) ) ) @@ -210,6 +242,8 @@ export default class DesktopLayout { .child(new MarkdownImportDialog()) .child(new ProtectedSessionPasswordDialog()) .child(new RevisionsDialog()) + .child(new NewTaskDialog()) + .child(new NewTaskDialog()) .child(new DeleteNotesDialog()) .child(new InfoDialog()) .child(new ConfirmDialog()) diff --git a/src/public/app/layouts/mobile_layout.js b/code/src/public/app/layouts/mobile_layout.js similarity index 100% rename from src/public/app/layouts/mobile_layout.js rename to code/src/public/app/layouts/mobile_layout.js diff --git a/src/public/app/menus/context_menu.js b/code/src/public/app/menus/context_menu.js similarity index 100% rename from src/public/app/menus/context_menu.js rename to code/src/public/app/menus/context_menu.js diff --git a/src/public/app/menus/electron_context_menu.js b/code/src/public/app/menus/electron_context_menu.js similarity index 100% rename from src/public/app/menus/electron_context_menu.js rename to code/src/public/app/menus/electron_context_menu.js diff --git a/src/public/app/menus/launcher_context_menu.js b/code/src/public/app/menus/launcher_context_menu.js similarity index 100% rename from src/public/app/menus/launcher_context_menu.js rename to code/src/public/app/menus/launcher_context_menu.js diff --git a/src/public/app/menus/link_context_menu.js b/code/src/public/app/menus/link_context_menu.js similarity index 100% rename from src/public/app/menus/link_context_menu.js rename to code/src/public/app/menus/link_context_menu.js diff --git a/src/public/app/menus/tree_context_menu.js b/code/src/public/app/menus/tree_context_menu.js similarity index 100% rename from src/public/app/menus/tree_context_menu.js rename to code/src/public/app/menus/tree_context_menu.js diff --git a/src/public/app/mobile.js b/code/src/public/app/mobile.js similarity index 100% rename from src/public/app/mobile.js rename to code/src/public/app/mobile.js diff --git a/src/public/app/services/attribute_autocomplete.js b/code/src/public/app/services/attribute_autocomplete.js similarity index 100% rename from src/public/app/services/attribute_autocomplete.js rename to code/src/public/app/services/attribute_autocomplete.js diff --git a/src/public/app/services/attribute_parser.js b/code/src/public/app/services/attribute_parser.js similarity index 100% rename from src/public/app/services/attribute_parser.js rename to code/src/public/app/services/attribute_parser.js diff --git a/src/public/app/services/attribute_renderer.js b/code/src/public/app/services/attribute_renderer.js similarity index 88% rename from src/public/app/services/attribute_renderer.js rename to code/src/public/app/services/attribute_renderer.js index 8916665a39b..df78ba23029 100644 --- a/src/public/app/services/attribute_renderer.js +++ b/code/src/public/app/services/attribute_renderer.js @@ -22,7 +22,11 @@ async function renderAttribute(attribute, renderIsInheritable) { $attr.append(document.createTextNode(`~${attribute.name}${isInheritable}=`)); $attr.append(await createLink(attribute.value)); } - } else { + } else if (attribute.type === 'taskprop') { + $attr.append(`name: ${attribute.name}, value: ${attribute.value}, type: ${attribute.type}`) + } else if (attribute.type === 'dashboardprop' || attribute.type == 'swimlaneprop') { + return ""; + }else { ws.logError(`Unknown attr type: ${attribute.type}`); } @@ -66,7 +70,9 @@ async function renderAttributes(attributes, renderIsInheritable) { for (let i = 0; i < attributes.length; i++) { const attribute = attributes[i]; - + if (attribute.type === 'taskprop' || attribute.type === 'swimlaneprop' || attribute.type === 'dashboardprop') { + continue; + } const $attr = await renderAttribute(attribute, renderIsInheritable); $container.append($attr.html()); // .html() to get only inner HTML, we don't want any spans diff --git a/src/public/app/services/attributes.js b/code/src/public/app/services/attributes.js similarity index 100% rename from src/public/app/services/attributes.js rename to code/src/public/app/services/attributes.js diff --git a/src/public/app/services/branches.js b/code/src/public/app/services/branches.js similarity index 100% rename from src/public/app/services/branches.js rename to code/src/public/app/services/branches.js diff --git a/src/public/app/services/bulk_action.js b/code/src/public/app/services/bulk_action.js similarity index 100% rename from src/public/app/services/bulk_action.js rename to code/src/public/app/services/bulk_action.js diff --git a/src/public/app/services/bundle.js b/code/src/public/app/services/bundle.js similarity index 100% rename from src/public/app/services/bundle.js rename to code/src/public/app/services/bundle.js diff --git a/src/public/app/services/clipboard.js b/code/src/public/app/services/clipboard.js similarity index 100% rename from src/public/app/services/clipboard.js rename to code/src/public/app/services/clipboard.js diff --git a/src/public/app/services/content_renderer.js b/code/src/public/app/services/content_renderer.js similarity index 61% rename from src/public/app/services/content_renderer.js rename to code/src/public/app/services/content_renderer.js index 801ba066db8..34c66e0758f 100644 --- a/src/public/app/services/content_renderer.js +++ b/code/src/public/app/services/content_renderer.js @@ -9,7 +9,7 @@ import linkService from "./link.js"; import treeService from "./tree.js"; import FNote from "../entities/fnote.js"; import FAttachment from "../entities/fattachment.js"; - +import task from "./task.js"; let idCounter = 1; /** @@ -49,6 +49,9 @@ async function getRenderedContent(entity, options = {}) { $renderedContent.append($content); } + else if (type === 'swimlane') { + await renderSwimlane(entity, $renderedContent); + } else if (type === 'canvas') { await renderCanvas(entity, $renderedContent); } @@ -85,6 +88,216 @@ async function getRenderedContent(entity, options = {}) { }; } +async function renderSwimlaneItem(item, renderedContent, index) { + + const addPriorityTag = (parent, priority) => { + switch (priority) { + case "urgent": + addTag(parent, "HIGH PRIO", "#e34242"); + return; + + case "show_stopper": + addTag(parent, "BLOCKER", "#9e0606"); + return; + default: + break; + } + }; + + const addStatusTag = (parent, item) => { + const status = item['status']; + switch (status) { + case "default": + addTag(parent, "IN QUEUE", "#0088ff"); + break; + + case "postponed": + addTag(parent, "POSTPONED", "yellow"); + break; + + case "blocked": + addTag(parent, "BLOCKED", "orange"); + break; + + case "done": + addTag(parent, "DONE", "#00ff00"); + break; + default: + break; + } + }; + + const addTag = (element, text, color) => { + const tag = $(`${text}`); + tag.css('border-color', color); + tag.css('background-color', color); + element.append(tag); + }; + + const prepareDeadline = (element, deadline) => { + if (deadline === undefined || deadline === '1999-01-01') { + element.hide(); + } else { + const diff = dayjs(deadline).diff(dayjs(), 'day'); + if (diff <= 0) { + element.attr('severity', 'HOLYCOW'); + } else if (diff < 3) { + element.attr('severity', 'REDZONE'); + } else if (diff < 7) { + element.attr('severity', 'CAUTION'); + } + } + }; + + const addTags = (parentElement, data) => { + addStatusTag(parentElement, data); + addPriorityTag(parentElement, priority); + }; + + const title = item['title']; + const priority = item['priority']; + const href = item['href']; + const taskId = item['taskId']; + const deadline = item['deadline']; + const styleSuffix = `${taskId}-${index}`; + const parents = await froca.getParentNotes(taskId); + const parent = await froca.getNote(parents[0]); + + const newTPL = ` +
+ +
${title}
+
${parent.title}
+
${deadline}
+
+
+ `; + + const swimlaneItem = $(newTPL); + swimlaneItem + .addClass('block-link') + .attr('data-href', `#${href}`) + .on('click', e => linkService.goToLink(e)); + const tagsParent = swimlaneItem.find('.task-swimlane-list-item-tags'); + + prepareDeadline(swimlaneItem.find('.task-swimlane-list-item-deadline'), deadline); + addTags(tagsParent, item); + + renderedContent.append(swimlaneItem); +} + +async function renderSwimlane(note, renderedContent) { + const tasks = await task.getSwimlaneTasks(note.noteId, true); + var ind = 0; + for (const i in tasks) { + const newGrouping = $(`
`); + if (tasks[i].length > 1) { + newGrouping.addClass('task-swimlane-list-item-group'); + } + for(const j in tasks[i]){ + await renderSwimlaneItem(tasks[i][j], newGrouping, ind++); + } + renderedContent.append(newGrouping); + } +} + /** @param {FNote} note */ async function renderText(note, $renderedContent) { // entity must be FNote diff --git a/src/public/app/services/css_class_manager.js b/code/src/public/app/services/css_class_manager.js similarity index 100% rename from src/public/app/services/css_class_manager.js rename to code/src/public/app/services/css_class_manager.js diff --git a/src/public/app/services/date_notes.js b/code/src/public/app/services/date_notes.js similarity index 100% rename from src/public/app/services/date_notes.js rename to code/src/public/app/services/date_notes.js diff --git a/src/public/app/services/debounce.js b/code/src/public/app/services/debounce.js similarity index 100% rename from src/public/app/services/debounce.js rename to code/src/public/app/services/debounce.js diff --git a/src/public/app/services/dialog.js b/code/src/public/app/services/dialog.js similarity index 100% rename from src/public/app/services/dialog.js rename to code/src/public/app/services/dialog.js diff --git a/src/public/app/services/file_watcher.js b/code/src/public/app/services/file_watcher.js similarity index 100% rename from src/public/app/services/file_watcher.js rename to code/src/public/app/services/file_watcher.js diff --git a/src/public/app/services/froca.js b/code/src/public/app/services/froca.js similarity index 82% rename from src/public/app/services/froca.js rename to code/src/public/app/services/froca.js index 3b3e4158c5a..b0b36794df3 100644 --- a/src/public/app/services/froca.js +++ b/code/src/public/app/services/froca.js @@ -60,7 +60,8 @@ class Froca { const noteIdsToSort = new Set(); for (const noteRow of noteRows) { - const {noteId} = noteRow; + const { noteId } = noteRow; + const { noteId } = noteRow; let note = this.notes[noteId]; @@ -132,7 +133,8 @@ class Froca { } for (const attributeRow of attributeRows) { - const {attributeId} = attributeRow; + const { attributeId } = attributeRow; + const { attributeId } = attributeRow; this.attributes[attributeId] = new FAttribute(this, attributeRow); @@ -171,7 +173,8 @@ class Froca { this.addResp(resp); - appContext.triggerEvent('notesReloaded', {noteIds}); + appContext.triggerEvent('notesReloaded', { noteIds }); + appContext.triggerEvent('notesReloaded', { noteIds }); } async loadSearchNote(noteId) { @@ -181,7 +184,8 @@ class Froca { return; } - const {searchResultNoteIds, highlightedTokens, error} = await server.get(`search-note/${note.noteId}`); + const { searchResultNoteIds, highlightedTokens, error } = await server.get(`search-note/${note.noteId}`); + const { searchResultNoteIds, highlightedTokens, error } = await server.get(`search-note/${note.noteId}`); if (!Array.isArray(searchResultNoteIds)) { throw new Error(`Search note '${note.noteId}' failed: ${searchResultNoteIds}`); @@ -214,7 +218,8 @@ class Froca { froca.notes[note.noteId].searchResultsLoaded = true; froca.notes[note.noteId].highlightedTokens = highlightedTokens; - return {error}; + return { error }; + return { error }; } /** @returns {FNote[]} */ @@ -237,7 +242,7 @@ class Froca { const missingNoteIds = noteIds.filter(noteId => !this.notes[noteId]); await this.reloadNotes(missingNoteIds); - + return noteIds.map(noteId => { if (!this.notes[noteId] && !silentNotFoundError) { console.trace(`Can't find note '${noteId}'`); @@ -249,6 +254,30 @@ class Froca { }).filter(note => !!note); } + getSwimlaneTasks(swimlaneId) { + const result = []; + const attrs = Object.values(this.attributes); + for (const i in attrs) { + const a = attrs[i]; + if (a.type === 'taskprop' && a.name === 'swimlane' && a.value === swimlaneId) { + result.push(this.notes[attrs[i].noteId]); + } + } + return result; + } + + getSwimlaneTasks(swimlaneId) { + const result = []; + const attrs = Object.values(this.attributes); + for (const i in attrs) { + const a = attrs[i]; + if (a.type === 'taskprop' && a.name === 'swimlane' && a.value === swimlaneId) { + result.push(this.notes[attrs[i].noteId]); + } + } + return result; + } + /** @returns {Promise} */ async noteExists(noteId) { const notes = await this.getNotes([noteId], true); @@ -270,6 +299,26 @@ class Froca { return (await this.getNotes([noteId], silentNotFoundError))[0]; } + async getParentNotes(noteId) { + const note = await this.getNote(noteId); + return note.parents; + } + + async getAttributes(noteId) { + const n = await this.getNote(noteId); + return n.attributes.map((attrId) => this.attributes[attrId]); + } + + async getParentNotes(noteId) { + const note = await this.getNote(noteId); + return note.parents; + } + + async getAttributes(noteId) { + const n = await this.getNote(noteId); + return n.attributes.map((attrId) => this.attributes[attrId]); + } + /** @returns {FNote|null} */ getNoteFromCache(noteId) { if (!noteId) { @@ -367,6 +416,39 @@ class Froca { }); } + async createAttribute(noteId, attribute) { + + await server.put(`notes/${noteId}/set-attribute`, attribute); + } + + async isParentOf(p, note) { + const parents = note.parents; + if (p in parents) { + return true; + } + + for (const i in parents) { + const parent = await this.getNote(parents[i]); + const res = await this.isParentOf(p, parent); + if (res) { + return true; + } + } + + return false; + } + + async getParentsList(note) { + const res = [note]; + var parents = note.parents; + while (parents && parents.length > 0) { + var n = await this.getNote(parents[0]); + res.unshift(n); + parents = n.parents; + } + return res; + } + /** @returns {Promise} */ async getBlob(entityType, entityId) { const key = `${entityType}-${entityId}`; diff --git a/src/public/app/services/froca_updater.js b/code/src/public/app/services/froca_updater.js similarity index 100% rename from src/public/app/services/froca_updater.js rename to code/src/public/app/services/froca_updater.js diff --git a/src/public/app/services/frontend_script_api.js b/code/src/public/app/services/frontend_script_api.js similarity index 100% rename from src/public/app/services/frontend_script_api.js rename to code/src/public/app/services/frontend_script_api.js diff --git a/src/public/app/services/glob.js b/code/src/public/app/services/glob.js similarity index 100% rename from src/public/app/services/glob.js rename to code/src/public/app/services/glob.js diff --git a/src/public/app/services/hoisted_note.js b/code/src/public/app/services/hoisted_note.js similarity index 100% rename from src/public/app/services/hoisted_note.js rename to code/src/public/app/services/hoisted_note.js diff --git a/src/public/app/services/image.js b/code/src/public/app/services/image.js similarity index 100% rename from src/public/app/services/image.js rename to code/src/public/app/services/image.js diff --git a/src/public/app/services/import.js b/code/src/public/app/services/import.js similarity index 100% rename from src/public/app/services/import.js rename to code/src/public/app/services/import.js diff --git a/src/public/app/services/keyboard_actions.js b/code/src/public/app/services/keyboard_actions.js similarity index 100% rename from src/public/app/services/keyboard_actions.js rename to code/src/public/app/services/keyboard_actions.js diff --git a/src/public/app/services/library_loader.js b/code/src/public/app/services/library_loader.js similarity index 100% rename from src/public/app/services/library_loader.js rename to code/src/public/app/services/library_loader.js diff --git a/src/public/app/services/link.js b/code/src/public/app/services/link.js similarity index 100% rename from src/public/app/services/link.js rename to code/src/public/app/services/link.js diff --git a/src/public/app/services/load_results.js b/code/src/public/app/services/load_results.js similarity index 100% rename from src/public/app/services/load_results.js rename to code/src/public/app/services/load_results.js diff --git a/src/public/app/services/mac_init.js b/code/src/public/app/services/mac_init.js similarity index 100% rename from src/public/app/services/mac_init.js rename to code/src/public/app/services/mac_init.js diff --git a/src/public/app/services/mime_types.js b/code/src/public/app/services/mime_types.js similarity index 100% rename from src/public/app/services/mime_types.js rename to code/src/public/app/services/mime_types.js diff --git a/src/public/app/services/note_attribute_cache.js b/code/src/public/app/services/note_attribute_cache.js similarity index 100% rename from src/public/app/services/note_attribute_cache.js rename to code/src/public/app/services/note_attribute_cache.js diff --git a/src/public/app/services/note_autocomplete.js b/code/src/public/app/services/note_autocomplete.js similarity index 100% rename from src/public/app/services/note_autocomplete.js rename to code/src/public/app/services/note_autocomplete.js diff --git a/src/public/app/services/note_content_renderer.js b/code/src/public/app/services/note_content_renderer.js similarity index 100% rename from src/public/app/services/note_content_renderer.js rename to code/src/public/app/services/note_content_renderer.js diff --git a/src/public/app/services/note_create.js b/code/src/public/app/services/note_create.js similarity index 99% rename from src/public/app/services/note_create.js rename to code/src/public/app/services/note_create.js index 8b8fb1a3620..c0cf985b350 100644 --- a/src/public/app/services/note_create.js +++ b/code/src/public/app/services/note_create.js @@ -67,7 +67,7 @@ async function createNote(parentNotePath, options = {}) { const noteEntity = await froca.getNote(note.noteId); const branchEntity = froca.getBranch(branch.branchId); - + return { note: noteEntity, branch: branchEntity diff --git a/src/public/app/services/note_list_renderer.js b/code/src/public/app/services/note_list_renderer.js similarity index 99% rename from src/public/app/services/note_list_renderer.js rename to code/src/public/app/services/note_list_renderer.js index a60f8c73177..2dda657ed75 100644 --- a/src/public/app/services/note_list_renderer.js +++ b/code/src/public/app/services/note_list_renderer.js @@ -205,7 +205,7 @@ class NoteListRenderer { } async renderList() { - if (this.noteIds.length === 0) { + if (this.parentNote.type === 'swimlane_dashboard' || this.noteIds.length === 0) { this.$noteList.hide(); return; } diff --git a/src/public/app/services/note_tooltip.js b/code/src/public/app/services/note_tooltip.js similarity index 100% rename from src/public/app/services/note_tooltip.js rename to code/src/public/app/services/note_tooltip.js diff --git a/src/public/app/services/note_types.js b/code/src/public/app/services/note_types.js similarity index 100% rename from src/public/app/services/note_types.js rename to code/src/public/app/services/note_types.js diff --git a/src/public/app/services/open.js b/code/src/public/app/services/open.js similarity index 100% rename from src/public/app/services/open.js rename to code/src/public/app/services/open.js diff --git a/src/public/app/services/options.js b/code/src/public/app/services/options.js similarity index 100% rename from src/public/app/services/options.js rename to code/src/public/app/services/options.js diff --git a/src/public/app/services/promoted_attribute_definition_parser.js b/code/src/public/app/services/promoted_attribute_definition_parser.js similarity index 75% rename from src/public/app/services/promoted_attribute_definition_parser.js rename to code/src/public/app/services/promoted_attribute_definition_parser.js index 423164fc1c8..ac19b0679dd 100644 --- a/src/public/app/services/promoted_attribute_definition_parser.js +++ b/code/src/public/app/services/promoted_attribute_definition_parser.js @@ -6,7 +6,7 @@ function parse(value) { if (token === 'promoted') { defObj.isPromoted = true; } - else if (['text', 'number', 'boolean', 'date', 'datetime', 'url'].includes(token)) { + else if (['text', 'number', 'boolean', 'date', 'enum', 'datetime', 'url'].includes(token)) { defObj.labelType = token; } else if (['single', 'multi'].includes(token)) { @@ -17,6 +17,11 @@ function parse(value) { defObj.numberPrecision = parseInt(chunks[1]); } + else if (token.startsWith('enumValues')) { + const chunks = token.split('='); + + defObj.enumValues = chunks[1].split(','); + } else if (token.startsWith('inverse')) { const chunks = token.split('='); diff --git a/src/public/app/services/protected_session.js b/code/src/public/app/services/protected_session.js similarity index 100% rename from src/public/app/services/protected_session.js rename to code/src/public/app/services/protected_session.js diff --git a/src/public/app/services/protected_session_holder.js b/code/src/public/app/services/protected_session_holder.js similarity index 100% rename from src/public/app/services/protected_session_holder.js rename to code/src/public/app/services/protected_session_holder.js diff --git a/src/public/app/services/render.js b/code/src/public/app/services/render.js similarity index 100% rename from src/public/app/services/render.js rename to code/src/public/app/services/render.js diff --git a/src/public/app/services/resizer.js b/code/src/public/app/services/resizer.js similarity index 100% rename from src/public/app/services/resizer.js rename to code/src/public/app/services/resizer.js diff --git a/src/public/app/services/script_context.js b/code/src/public/app/services/script_context.js similarity index 100% rename from src/public/app/services/script_context.js rename to code/src/public/app/services/script_context.js diff --git a/src/public/app/services/search.js b/code/src/public/app/services/search.js similarity index 100% rename from src/public/app/services/search.js rename to code/src/public/app/services/search.js diff --git a/src/public/app/services/server.js b/code/src/public/app/services/server.js similarity index 100% rename from src/public/app/services/server.js rename to code/src/public/app/services/server.js diff --git a/src/public/app/services/shortcuts.js b/code/src/public/app/services/shortcuts.js similarity index 100% rename from src/public/app/services/shortcuts.js rename to code/src/public/app/services/shortcuts.js diff --git a/src/public/app/services/spaced_update.js b/code/src/public/app/services/spaced_update.js similarity index 100% rename from src/public/app/services/spaced_update.js rename to code/src/public/app/services/spaced_update.js diff --git a/code/src/public/app/services/swimlane_list_renderer.js b/code/src/public/app/services/swimlane_list_renderer.js new file mode 100644 index 00000000000..ddd5c9c0ae0 --- /dev/null +++ b/code/src/public/app/services/swimlane_list_renderer.js @@ -0,0 +1,652 @@ +import linkService from "./link.js"; +import froca from "./froca.js"; +import attributeRenderer from "./attribute_renderer.js"; +import libraryLoader from "./library_loader.js"; +import taskService from "./task.js"; + +const getSwimlaneTPL = (styleSuffix, title, parentTitle, deadline) => {return ` +
+ +
${title}
+
${parentTitle}
+
${deadline}
+
+
+`}; + +const getCardTPL = (noteId) => { return ` +
+ +
+`}; + +const TPL = ` +
+ + +
+
+ +
+ +
+
+
`; + +class SwimlaneListRenderer { + /* + * We're using noteIds so that it's not necessary to load all notes at once when paging + */ + constructor($parentDOM, $parent) { + this.$noteList = $(TPL); + + // note list must be added to the DOM immediately, otherwise some functionality scripting (canvas) won't work + $parentDOM.empty(); + + this.parentNote = $parent; + const includedSwimlanes = this.getIncludedSwimlanes(); + const noteIds = $parent.getChildNoteIds(); + + this.noteIds = noteIds.filter(noteId => !includedSwimlanes.has(noteId) && noteId !== '_hidden'); + + if (this.noteIds.length === 0) { + return; + } + + $parentDOM.append(this.$noteList); + + this.page = 1; + this.pageSize = parseInt($parent.getLabelValue('pageSize')); + + if (!this.pageSize || this.pageSize < 1) { + this.pageSize = 20; + } + + this.viewType = $parent.getLabelValue('viewType'); + + if (!['list', 'grid'].includes(this.viewType)) { + // when not explicitly set, decide based on the note type + this.viewType = $parent.type === 'search' ? 'list' : 'grid'; + } + + this.$noteList.addClass(`${this.viewType}-view`); + + this.showNotePath = true; + } + + /** @returns {Set} list of noteIds included (images, included notes) in the parent note and which + * don't have to be shown in the note list. */ + getIncludedSwimlanes() { + const includedLinks = this.parentNote + ? this.parentNote.getRelations().filter(rel => rel.name === 'imageLink' || rel.name === 'includeNoteLink') + : []; + + return new Set(includedLinks.map(rel => rel.value)); + } + + async renderList() { + if (this.parentNote.type !== 'swimlane_dashboard' || this.noteIds.length === 0) { + this.$noteList.hide(); + return; + } + + this.swimlanes = {}; + + const highlightedTokens = this.parentNote.highlightedTokens || []; + if (highlightedTokens.length > 0) { + await libraryLoader.requireLibrary(libraryLoader.MARKJS); + + this.highlightRegex = new RegExp(highlightedTokens.join("|"), 'gi'); + } else { + this.highlightRegex = null; + } + + this.$noteList.show(); + + const $container = this.$noteList.find('.swimlane-list-container').empty(); + + const startIdx = (this.page - 1) * this.pageSize; + const endIdx = startIdx + this.pageSize; + + const pageNoteIds = this.noteIds.slice(startIdx, Math.min(endIdx, this.noteIds.length)); + const pageNotes = await froca.getNotes(pageNoteIds); + + for (const note of pageNotes) { + const $card = await this.renderNote(note, this.parentNote.isLabelTruthy('expanded')); + + $container.append($card); + } + + this.renderPager(); + + return this.$noteList; + } + + renderPager() { + const $pager = this.$noteList.find('.swimlane-list-pager').empty(); + const pageCount = Math.ceil(this.noteIds.length / this.pageSize); + + $pager.toggle(pageCount > 1); + + let lastPrinted; + + for (let i = 1; i <= pageCount; i++) { + if (pageCount < 20 || i <= 5 || pageCount - i <= 5 || Math.abs(this.page - i) <= 2) { + lastPrinted = true; + + $pager.append( + i === this.page + ? $('').text(i).css('text-decoration', 'underline').css('font-weight', "bold") + : $('') + .text(i) + .on('click', () => { + this.page = i; + this.renderList(); + }), + "   " + ); + } + else if (lastPrinted) { + $pager.append("...   "); + + lastPrinted = false; + } + } + } + + async renderNote(note, expand = false) { + const {$renderedAttributes} = await attributeRenderer.renderNormalAttributes(note); + + const noteHeader = ` +
+ + +
+ `; + + const title = $(noteHeader); + const $card = $(getCardTPL(note.noteId)) + .attr('data-swimlane-id', note.noteId) + .append( + title + .append($renderedAttributes) + ); + + await this.toggleContent($card, note, expand); + + title.on('change', () => { + const input = title.find('input'); + if (input[0].checked) { + $card.find('.type-swimlane').hide(); + } else { + $card.find('.type-swimlane').show(); + } + }); + + return $card; + } + + async toggleContent($card, note, expand) { + if (this.viewType === 'list' && ((expand && $card.hasClass("expanded")) || (!expand && !$card.hasClass("expanded")))) { + return; + } + + const $expander = $card.find('> .swimlane-book-header .swimlane-expander'); + + if (expand || this.viewType === 'grid') { + $card.addClass("expanded"); + $expander.addClass("bx-chevron-down").removeClass("bx-chevron-right"); + } + else { + $card.removeClass("expanded"); + $expander.addClass("bx-chevron-right").removeClass("bx-chevron-down"); + } + + if ((expand || this.viewType === 'grid') && $card.find('.swimlane-book-content').length === 0) { + $card.append(await this.renderNoteContent(note.noteId)); + } + } + + async renderSwimlaneItem(item, renderedContent, index) { + + const addPriorityTag = (parent, priority) => { + switch (priority) { + case "urgent": + addTag(parent, "HIGH PRIO", "#e34242"); + return; + + case "show_stopper": + addTag(parent, "BLOCKER", "#9e0606"); + return; + default: + break; + } + }; + + const addStatusTag = (parent, item) => { + const status = item['status']; + switch (status) { + case "default": + addTag(parent, "IN QUEUE", "#0088ff"); + break; + + case "postponed": + addTag(parent, "POSTPONED", "yellow"); + break; + + case "blocked": + addTag(parent, "BLOCKED", "orange"); + break; + + case "done": + addTag(parent, "DONE", "#00ff00"); + break; + default: + break; + } + }; + + const addTag = (element, text, color) => { + const tag = $(`${text}`); + tag.css('border-color', color); + tag.css('background-color', color); + element.append(tag); + }; + + const prepareDeadline = (element, deadline) => { + if (deadline === undefined || deadline === '1999-01-01') { + element.hide(); + } else { + const diff = dayjs(deadline).diff(dayjs(), 'day'); + if (diff <= 0) { + element.attr('severity', 'HOLYCOW'); + } else if (diff < 3) { + element.attr('severity', 'REDZONE'); + } else if (diff < 7) { + element.attr('severity', 'CAUTION'); + } + } + }; + + const addTags = (parentElement, data) => { + addStatusTag(parentElement, data); + addPriorityTag(parentElement, priority); + }; + + const title = item['title']; + const priority = item['priority']; + const href = item['href']; + const taskId = item['taskId']; + const deadline = item['deadline']; + const styleSuffix = `${taskId}-${index}`; + const parents = await froca.getParentNotes(taskId); + const parent = await froca.getNote(parents[0]); + + const swimlaneItem = $(getSwimlaneTPL(styleSuffix, title, parent.title, deadline)); + swimlaneItem + .addClass('block-link') + .attr('data-href', `#${href}`) + .on('click', e => linkService.goToLink(e)); + const tagsParent = swimlaneItem.find('.task-swimlane-list-item-tags'); + + prepareDeadline(swimlaneItem.find('.task-swimlane-list-item-deadline'), deadline); + addTags(tagsParent, item); + + renderedContent.append(swimlaneItem); + } + + async getSwimlaneTasks(swimlaneId) { + const renderedContent = $('
'); + const tasks = await taskService.getSwimlaneTasks(swimlaneId, true); + var ind = 0; + for (const i in tasks) { + const newGrouping = $(`
`); + if (tasks[i].length > 1) { + newGrouping.addClass('task-swimlane-list-item-group'); + } + for(const j in tasks[i]){ + await this.renderSwimlaneItem(tasks[i][j], newGrouping, ind++); + } + renderedContent.append(newGrouping); + } + + this.swimlanes[swimlaneId] = tasks.flat().map(a => a['taskId']); + + return renderedContent; + } + + async applySwimlaneUpdates(swimlaneId, updatedTaskId, updatedProp, newValue) { + const parentCard = this.$noteList?.find(`.swimlane-book-card-innercontent-${swimlaneId}`); + parentCard?.children()?.last().remove(); + parentCard.append(await this.getSwimlaneTasks(swimlaneId)); + } + + async renderNoteContent(noteId) { + const $content = $(`
`); + + try { + const $renderedContent = await this.getSwimlaneTasks(noteId); + + $content.append($renderedContent); + $content.addClass(`type-swimlane`); + } catch (e) { + console.log(`Caught error while rendering note '${noteId}' of type swimlane: ${e.message}, stack: ${e.stack}`); + + $content.append("rendering error"); + } + + if (this.viewType === 'list') { + const imageLinks = note.getRelations('imageLink'); + + const childNotes = (await note.getChildNotes()) + .filter(childNote => !imageLinks.find(rel => rel.value === childNote.noteId)); + + for (const childNote of childNotes) { + $content.append(await this.renderNote(childNote)); + } + } + + return $content; + } + + async taskTitleUpdatedEvent(e) { + Object.entries(this.swimlanes).forEach(([swimlaneId, taskIds]) => { + if (taskIds.includes(e.taskId)) { + this.applySwimlaneUpdates(swimlaneId, e.noteId, "title", e.newTitle); + } + }); + } + + async taskPropUpdatedEvent(e) { + Object.entries(this.swimlanes).forEach(([swimlaneId, taskIds]) => { + if (taskIds.includes(e.taskId)) { + this.applySwimlaneUpdates(swimlaneId, e.taskId, e.prop, e.newValue); + } + }); + } +} + +export default SwimlaneListRenderer; diff --git a/src/public/app/services/sync.js b/code/src/public/app/services/sync.js similarity index 100% rename from src/public/app/services/sync.js rename to code/src/public/app/services/sync.js diff --git a/code/src/public/app/services/task.js b/code/src/public/app/services/task.js new file mode 100644 index 00000000000..9afd594e898 --- /dev/null +++ b/code/src/public/app/services/task.js @@ -0,0 +1,357 @@ +import server from "./server.js"; +import froca from "./froca.js"; +import toastService from "./toast.js"; +import FAttribute from "../entities/fattribute.js"; +import noteCreateService from "../services/note_create.js"; +const TASKPROP = "taskprop"; + +async function getTaskProps(task) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return; + } + + const resp = await server.get(`tree?subTreeNoteId=${task.noteId}`); + let props = {}; + const attributeRows = resp.attributes; + for (const attributeRow of attributeRows) { + const { attributeId } = attributeRow; + + if (task && !task.attributes.includes(attributeId)) { + continue; + } + + let attr = new FAttribute(this, attributeRow); + props[attr.name] = attr.value; + } + + + return props; +} + +async function updateTaskDescription(task, newDescription) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return; + } + + await server.put(`notes/${task.noteId}/set-attribute`, { + value: newDescription, + name: "description", + type: TASKPROP + }); +} + +async function removeTaskDeadline(task) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return; + } + + server.put(`notes/${task.noteId}/attribute`, { + value: 1, + name: "hasDeadline", + type: TASKPROP + }); +} + +async function updateTaskDeadline(task, newDeadline) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return; + } + + + await server.put(`notes/${task.noteId}/set-attribute`, { + value: newDeadline, + name: "deadline", + type: "taskprop" + }); +} + +async function findMainBucket(note) { + if (!note) { + return null; + } + if (note.type === "bucket") { + return note; + } + + const parents = note.parents; + + for (const i in parents) { + const parent = await froca.getNote(parents[i]); + const res = await findMainBucket(parent); + if (res) { + return res; + } + } + + return null; +} + +async function getDoneSwimlaneId(note) { + + const main = await findMainBucket(note); + + const attrs = await froca.getAttributes(main.noteId); + + return attrs.find(a => a.name === 'doneTasksParent')?.value; +} + +async function updateTaskPriority(note, priority) { + if (!note) { + return null; + } + if (note.type !== "task") { + return; + } + + await server.put(`notes/${note.noteId}/set-attribute`, { + type: "taskprop", + name: "prio", + value: priority + }); +} + +async function updateTaskSwimlane(note, swimlane) { + if (!note) { + return null; + } + if (note.type !== "task") { + return; + } + + await server.put(`notes/${note.noteId}/set-attribute`, { + type: "taskprop", + name: "swimlane", + value: swimlane + }); +} + +async function updateTaskStatus(taskId, newStatus) { + const note = await froca.getNote(taskId); + if (note.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return false; + } + + const attrs = note.attributes; + + await server.put(`notes/${taskId}/set-attribute`, { + attributeId: attrs.find(a => a.name === 'state'), + type: 'taskprop', + name: 'state', + value: newStatus + }); +} + +async function markTaskAsDone(task) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while this is: ${task.type}`); + return false; + } + + await server.put(`notes/${task.noteId}/set-attribute`, { + type: 'taskprop', + name: 'state', + value: 'done' + }); + + const done = await getDoneSwimlaneId(task); + + await server.put(`notes/${task.noteId}/set-attribute`, { + type: 'taskprop', + name: 'swimlane', + value: done + }); + + return true; +} + +async function isDone(note) { + if (note.type !== 'task') { + return false; + } + + const fnote = await froca.getNote(note.noteId); + + if (fnote.children && fnote.children.length > 0) { + return false; + } + + const attrs = await froca.getAttributes(note.noteId); + for (const i in attrs) { + if (attrs[i].name === 'state') { + return (attrs[i].value === 'done'); + } + } + + return false; +} + +async function getSwimlaneTasks(swimlaneId, sorted = false) { + + const tasks = await server.get(`swimlanes/${swimlaneId}/tasks`); + + if (!sorted) return tasks; + const normal = []; + const nice_to_have = []; + const urgent = []; + const show_stopper = []; + for (const i in tasks) { + + const deadline = tasks[i]['deadline']; + if (deadline !== undefined && deadline !== '1999-01-01') { + const diff = dayjs(deadline).diff(dayjs(), 'day'); + if (diff <= 0) { + show_stopper.push(tasks[i]); + continue; + } else if (diff < 3) { + urgent.push(tasks[i]); + continue; + } + } + + switch (tasks[i]['priority']) { + case 'nice_to_have': + nice_to_have.push(tasks[i]); + break; + case 'normal': + normal.push(tasks[i]); + break; + case 'urgent': + urgent.push(tasks[i]); + break; + case 'show_stopper': + show_stopper.push(tasks[i]); + break; + } + } + + const getCommonParent = async (note1, note2) => { + if (!note1 || !note2) { + throw new Error('note1 and note2 cannot be null'); + } + const note1Parents = await froca.getParentsList(note1); + const note2ParentIds = (await froca.getParentsList(note2)).map(n => n.noteId); + + var common = null; + + for( var i = 1 ; i < note1Parents.length; i++) { + if (note2ParentIds.includes(note1Parents[i].noteId) && ['task', 'text'].includes(note1Parents[i].type)){ + common = note1Parents[i]; + + } + } + return common; + }; + + const tasksAreRelated = async (a,b) => { + const t1 = await froca.getNote(a.taskId); + const t2 = await froca.getNote(b.taskId); + const parent = await getCommonParent(t1, t2); + + if (!parent){ + return false; + } + return true; + }; + const sortedList = [...show_stopper, ...urgent, ...normal, ...nice_to_have]; + const result = []; + const skipList = {}; + for (let i = 0; i < sortedList.length; i++) { + if (skipList[i]){ + continue; + } + const tempList = []; + tempList.push(sortedList[i]); + skipList[i] = true; + for (let j = i + 1; j < sortedList.length; j++) { + if (skipList[j]){ + continue; + } + if ((await tasksAreRelated(sortedList[i], sortedList[j])) === true) { + skipList[j] = true; + tempList.push(sortedList[j]); + } + } + result.push(tempList); + } + + return result; +} + +async function getTaskStatus(task) { + if (task.type !== "task") { + toastService.showAndLogError(`Note needs to be of task type, while it is: ${task.type}`); + return; + } + + const attrs = await server.get(`notes/${task.noteId}/attributes`); + for (const i in attrs) { + const attr = attrs[i]; + if (attr.type === 'taskprop' && attr.name === 'state') { + return attr.value; + } + } + + await server.post(`notes/${this.$noteId}/attributes`, { + name: 'state', + type: 'taskprop', + value: 'default' + }); + return 'default'; +} + +function shouldBlink(priority) { + return (priority === 'show_stopper' || priority === 'blocker'); +} + +async function createNewTask(path, title, description, deadline, swimlane) { + const result = await noteCreateService.createNote(path, { + type: "task", + mime: "text/html", + title: title, + activate: false + }); + + await updateTaskSwimlane(result.note, swimlane); + await updateTaskDeadline(result.note, deadline); + await updateTaskDeadline(result.note, deadline); + await updateTaskDescription(result.note, description); +} + +function getTaskStatusText(str) { + switch (str) { + case "default": + return 'NOT STARTED'; + case "in_progress": + return 'IN PROGRESS'; + case "postponed": + return 'POSTPONED'; + case "blocked": + return 'BLOCKED'; + case "done": + return 'DONE'; + default: + return ''; + } +} + +export default { + getTaskProps, + createNewTask, + markTaskAsDone, + updateTaskDeadline, + updateTaskDescription, + updateTaskStatus, + findMainBucket, + isDone, + getDoneSwimlaneId, + removeTaskDeadline, + getTaskStatus, + shouldBlink, + getTaskStatusText, + getSwimlaneTasks +}; diff --git a/src/public/app/services/toast.js b/code/src/public/app/services/toast.js similarity index 100% rename from src/public/app/services/toast.js rename to code/src/public/app/services/toast.js diff --git a/src/public/app/services/tree.js b/code/src/public/app/services/tree.js similarity index 100% rename from src/public/app/services/tree.js rename to code/src/public/app/services/tree.js diff --git a/src/public/app/services/utils.js b/code/src/public/app/services/utils.js similarity index 92% rename from src/public/app/services/utils.js rename to code/src/public/app/services/utils.js index e17606c1e40..7421d2b79cc 100644 --- a/src/public/app/services/utils.js +++ b/code/src/public/app/services/utils.js @@ -77,6 +77,34 @@ function formatDateTime(date) { return `${formatDate(date)} ${formatTime(date)}`; } +function getTextWidth(text, parentElement = document.body) { + function getCssStyle(element, prop) { + return window.getComputedStyle(element, null).getPropertyValue(prop); + } + + function getCanvasFont(el) { + const fontWeight = getCssStyle(el, 'font-weight') || 'normal'; + const fontSize = getCssStyle(el, 'font-size') || '1em'; + const fontFamily = getCssStyle(el, 'font-family') || 'Times New Roman'; + return `${fontWeight} ${fontSize} ${fontFamily}`; + } + + const font = getCanvasFont(parentElement); + const canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas")); + const context = canvas.getContext("2d"); + context.font = font; + const metrics = context.measureText(text); + return metrics.width; +} + +function localNowDate() { + return dayjs().format('YYYY-MM-DD'); +} + +function localDateInFutureDays(numberOfDays) { + return dayjs().add(numberOfDays, 'day').format('YYYY-MM-DD'); +} + function localNowDateTime() { return dayjs().format('YYYY-MM-DD HH:mm:ss.SSSZZ'); } @@ -244,7 +272,6 @@ async function openDialog($dialog, closeActDialog = true) { saveFocusedElement(); $dialog.modal(); - $dialog.on('hidden.bs.modal', () => { $(".aa-input").autocomplete("close"); @@ -502,7 +529,10 @@ export default { formatDateTime, formatTimeInterval, formatSize, + getTextWidth, + localNowDate, localNowDateTime, + localDateInFutureDays, now, isElectron, isMac, diff --git a/src/public/app/services/validation_error.js b/code/src/public/app/services/validation_error.js similarity index 100% rename from src/public/app/services/validation_error.js rename to code/src/public/app/services/validation_error.js diff --git a/src/public/app/services/ws.js b/code/src/public/app/services/ws.js similarity index 100% rename from src/public/app/services/ws.js rename to code/src/public/app/services/ws.js diff --git a/src/public/app/setup.js b/code/src/public/app/setup.js similarity index 100% rename from src/public/app/setup.js rename to code/src/public/app/setup.js diff --git a/src/public/app/share.js b/code/src/public/app/share.js similarity index 100% rename from src/public/app/share.js rename to code/src/public/app/share.js diff --git a/src/public/app/utils/mutex.js b/code/src/public/app/utils/mutex.js similarity index 100% rename from src/public/app/utils/mutex.js rename to code/src/public/app/utils/mutex.js diff --git a/src/public/app/widgets/api_log.js b/code/src/public/app/widgets/api_log.js similarity index 100% rename from src/public/app/widgets/api_log.js rename to code/src/public/app/widgets/api_log.js diff --git a/src/public/app/widgets/attachment_detail.js b/code/src/public/app/widgets/attachment_detail.js similarity index 100% rename from src/public/app/widgets/attachment_detail.js rename to code/src/public/app/widgets/attachment_detail.js diff --git a/src/public/app/widgets/attribute_widgets/attribute_detail.js b/code/src/public/app/widgets/attribute_widgets/attribute_detail.js similarity index 96% rename from src/public/app/widgets/attribute_widgets/attribute_detail.js rename to code/src/public/app/widgets/attribute_widgets/attribute_detail.js index 7ddfe288258..1736aae0061 100644 --- a/src/public/app/widgets/attribute_widgets/attribute_detail.js +++ b/code/src/public/app/widgets/attribute_widgets/attribute_detail.js @@ -116,10 +116,20 @@ const TPL = ` + + + Custom Enum Values: + +
+ +

*List of comma-separated enum values

+
+ + Precision: @@ -292,16 +302,7 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { } }); this.$inputName.on('change', () => this.userEditedAttribute()); - this.$inputName.on('autocomplete:closed', () => this.userEditedAttribute()); - - this.$inputName.on('focus', () => { - attributeAutocompleteService.initAttributeNameAutocomplete({ - $el: this.$inputName, - attributeType: () => ['relation', 'relation-definition'].includes(this.attrType) ? 'relation' : 'label', - open: true - }); - }); - + this.$rowValue = this.$widget.find('.attr-row-value'); this.$inputValue = this.$widget.find('.attr-input-value'); this.$inputValue.on('input', ev => { @@ -331,6 +332,10 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { this.$inputLabelType = this.$widget.find('.attr-input-label-type'); this.$inputLabelType.on('change', () => this.userEditedAttribute()); + this.$rowEnumValue = this.$widget.find('.attr-row-enum'); + this.$rowEnumValueInput = this.$widget.find('.attr-input-enum'); + this.$rowEnumValueInput.on('change', () => this.userEditedAttribute()); + this.$rowNumberPrecision = this.$widget.find('.attr-row-number-precision'); this.$inputNumberPrecision = this.$widget.find('.attr-input-number-precision'); this.$inputNumberPrecision.on('change', () => this.userEditedAttribute()); @@ -463,6 +468,14 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { .val(definition.labelType) .attr('disabled', () => !isOwned); + this.$rowEnumValue.toggle(this.attrType === 'label-definition' && definition.labelType === 'enum'); + if (definition.labelType === 'enum') { + + } + this.$rowEnumValueInput + .val(definition.enumValue) + .attr('disabled', () => !isOwned); + this.$rowNumberPrecision.toggle(this.attrType === 'label-definition' && definition.labelType === 'number'); this.$inputNumberPrecision .val(definition.numberPrecision) @@ -682,13 +695,15 @@ export default class AttributeDetailWidget extends NoteContextAwareWidget { if (this.$inputLabelType.val() === 'number' && this.$inputNumberPrecision.val() !== '') { props.push(`precision=${this.$inputNumberPrecision.val()}`); + } else if (this.$inputLabelType.val() === 'enum' && this.$rowEnumValueInput.val() !== '') { + props.push(`enumValues=${this.$rowEnumValueInput.val()}`); } } else if (this.attrType === 'relation-definition' && this.$inputInverseRelation.val().trim().length > 0) { const inverseRelationName = this.$inputInverseRelation.val(); props.push(`inverse=${utils.filterAttributeName(inverseRelationName)}`); } - + this.$rowNumberPrecision.toggle( this.attrType === 'label-definition' && this.$inputLabelType.val() === 'number'); diff --git a/src/public/app/widgets/attribute_widgets/attribute_editor.js b/code/src/public/app/widgets/attribute_widgets/attribute_editor.js similarity index 100% rename from src/public/app/widgets/attribute_widgets/attribute_editor.js rename to code/src/public/app/widgets/attribute_widgets/attribute_editor.js diff --git a/src/public/app/widgets/basic_widget.js b/code/src/public/app/widgets/basic_widget.js similarity index 100% rename from src/public/app/widgets/basic_widget.js rename to code/src/public/app/widgets/basic_widget.js diff --git a/src/public/app/widgets/bookmark_buttons.js b/code/src/public/app/widgets/bookmark_buttons.js similarity index 100% rename from src/public/app/widgets/bookmark_buttons.js rename to code/src/public/app/widgets/bookmark_buttons.js diff --git a/src/public/app/widgets/bookmark_switch.js b/code/src/public/app/widgets/bookmark_switch.js similarity index 100% rename from src/public/app/widgets/bookmark_switch.js rename to code/src/public/app/widgets/bookmark_switch.js diff --git a/code/src/public/app/widgets/bucket.js b/code/src/public/app/widgets/bucket.js new file mode 100644 index 00000000000..ec17ad0e4a4 --- /dev/null +++ b/code/src/public/app/widgets/bucket.js @@ -0,0 +1,177 @@ +import NoteContextAwareWidget from "./note_context_aware_widget.js"; +import AttributeDetailWidget from "./attribute_widgets/attribute_detail.js"; +import froca from "../services/froca.js"; +const TPL = ` +
+ +
Dashboard
+ +
Default swimlane
+ +
Done Bucket
+ +
De-prioritized Bucket
+ +
`; + +export default class BucketWidget extends NoteContextAwareWidget { + constructor() { + super(); + + this.createDefaultAttrs(); + + this.attributeDetailWidget = new AttributeDetailWidget() + .contentSized() + .setParent(this); + } + static getType() { return "bucket"; } + + doRender() { + this.$widget = $(TPL); + + this.$buttons = { + doneTasksParent: this.$widget.find('.done-bucket-button'), + deprioTasksParent: this.$widget.find('.deprioritized-bucket-button'), + dashboardParent: this.$widget.find('.dashboard-bucket-button'), + defaultBucketParent: this.$widget.find('.default-bucket-button') + }; + + this.$widget.append(this.attributeDetailWidget.render()); + + this.updateButtons((name, b) => { + b.on('click', async (e) => { + if (!this.$attrs[name]) { + return; + } + + await this.attributeDetailWidget.refresh(); + + const rect = e.target.getBoundingClientRect(); + await this.createRelation(name, (rect.left + rect.right) / 2, rect.bottom); + }); + }); + + super.doRender(); + } + + createDefaultAttrs() { + + const createDefaultAttr = (name) => { + return { + name, + type: 'relation', + value: '', + noteId: this.noteId, + isInheritable: false + }; + }; + + this.$attrs = { + doneTasksParent: createDefaultAttr('doneTasksParent'), + deprioTasksParent: createDefaultAttr('deprioTasksParent'), + dashboardParent: createDefaultAttr('dashboardParent'), + defaultBucketParent: createDefaultAttr('defaultBucketParent') + }; + } + + isEnabled() { + return super.isEnabled() + && this.noteContext && this.noteContext.note && (this.noteContext.note.type == "bucket"); + } + + async createRelation(relationName, x, y) { + + const attrs = [this.$attrs[relationName]]; + await this.attributeDetailWidget.showAttributeDetail({ + allAttributes: attrs, + attribute: this.$attrs[relationName], + isOwned: true, + x, + y, + focus: 'name' + }); + } + + async saveAttributesCommand() { + const attr = this.attributeDetailWidget.attribute; + await froca.createAttribute(this.noteId, attr); + this.attributeDetailWidget.hide(); + } + + updateButtons(callback) { + for (const [name, btn] of Object.entries(this.$buttons)) { + callback(name, btn); + } + } + + enable_buttons() { + this.updateButtons((_, b) => { + b.html('Create'); + b.prop('disabled', false); + }); + } + + disable_buttons() { + this.$attrs = { + doneTasksParent: {}, + deprioTasksParent: {}, + dashboardParent: {}, + defaultBucketParent: {} + }; + + this.updateButtons((_, b) => { + b.html('Create'); + b.prop('disabled', true); + }); + } + + getAttr(note, attrName, callback) { + froca.getAttributes(note.noteId).then(attrs =>{ + for(const i in attrs) { + const attr = attrs[i]; + if (attr.name === attrName) { + callback(attr); + } + } + }); + } + + async refreshWithNote(note) { + if (note.type !== 'bucket') { + this.disable_buttons(); + return; + } + + const updateAttr = (attrName) => { + this.getAttr(note, attrName, v => { + this.$attrs[attrName] = { + attributeId: v.attributeId, + name: v.name, + type: v.type, + value: v.value, + noteId: v.noteId + }; + this.$buttons[attrName].html('Edit'); + }); + }; + + this.enable_buttons(); + this.createDefaultAttrs(); + + this.$note = note; + + updateAttr('doneTasksParent'); + updateAttr('deprioTasksParent'); + updateAttr('dashboardParent'); + updateAttr('defaultBucketParent'); + } +} \ No newline at end of file diff --git a/src/public/app/widgets/bulk_actions/abstract_bulk_action.js b/code/src/public/app/widgets/bulk_actions/abstract_bulk_action.js similarity index 100% rename from src/public/app/widgets/bulk_actions/abstract_bulk_action.js rename to code/src/public/app/widgets/bulk_actions/abstract_bulk_action.js diff --git a/src/public/app/widgets/bulk_actions/execute_script.js b/code/src/public/app/widgets/bulk_actions/execute_script.js similarity index 100% rename from src/public/app/widgets/bulk_actions/execute_script.js rename to code/src/public/app/widgets/bulk_actions/execute_script.js diff --git a/src/public/app/widgets/bulk_actions/label/add_label.js b/code/src/public/app/widgets/bulk_actions/label/add_label.js similarity index 100% rename from src/public/app/widgets/bulk_actions/label/add_label.js rename to code/src/public/app/widgets/bulk_actions/label/add_label.js diff --git a/src/public/app/widgets/bulk_actions/label/delete_label.js b/code/src/public/app/widgets/bulk_actions/label/delete_label.js similarity index 100% rename from src/public/app/widgets/bulk_actions/label/delete_label.js rename to code/src/public/app/widgets/bulk_actions/label/delete_label.js diff --git a/src/public/app/widgets/bulk_actions/label/rename_label.js b/code/src/public/app/widgets/bulk_actions/label/rename_label.js similarity index 100% rename from src/public/app/widgets/bulk_actions/label/rename_label.js rename to code/src/public/app/widgets/bulk_actions/label/rename_label.js diff --git a/src/public/app/widgets/bulk_actions/label/update_label_value.js b/code/src/public/app/widgets/bulk_actions/label/update_label_value.js similarity index 100% rename from src/public/app/widgets/bulk_actions/label/update_label_value.js rename to code/src/public/app/widgets/bulk_actions/label/update_label_value.js diff --git a/src/public/app/widgets/bulk_actions/note/delete_note.js b/code/src/public/app/widgets/bulk_actions/note/delete_note.js similarity index 100% rename from src/public/app/widgets/bulk_actions/note/delete_note.js rename to code/src/public/app/widgets/bulk_actions/note/delete_note.js diff --git a/src/public/app/widgets/bulk_actions/note/delete_revisions.js b/code/src/public/app/widgets/bulk_actions/note/delete_revisions.js similarity index 100% rename from src/public/app/widgets/bulk_actions/note/delete_revisions.js rename to code/src/public/app/widgets/bulk_actions/note/delete_revisions.js diff --git a/src/public/app/widgets/bulk_actions/note/move_note.js b/code/src/public/app/widgets/bulk_actions/note/move_note.js similarity index 100% rename from src/public/app/widgets/bulk_actions/note/move_note.js rename to code/src/public/app/widgets/bulk_actions/note/move_note.js diff --git a/src/public/app/widgets/bulk_actions/note/rename_note.js b/code/src/public/app/widgets/bulk_actions/note/rename_note.js similarity index 100% rename from src/public/app/widgets/bulk_actions/note/rename_note.js rename to code/src/public/app/widgets/bulk_actions/note/rename_note.js diff --git a/src/public/app/widgets/bulk_actions/relation/add_relation.js b/code/src/public/app/widgets/bulk_actions/relation/add_relation.js similarity index 100% rename from src/public/app/widgets/bulk_actions/relation/add_relation.js rename to code/src/public/app/widgets/bulk_actions/relation/add_relation.js diff --git a/src/public/app/widgets/bulk_actions/relation/delete_relation.js b/code/src/public/app/widgets/bulk_actions/relation/delete_relation.js similarity index 100% rename from src/public/app/widgets/bulk_actions/relation/delete_relation.js rename to code/src/public/app/widgets/bulk_actions/relation/delete_relation.js diff --git a/src/public/app/widgets/bulk_actions/relation/rename_relation.js b/code/src/public/app/widgets/bulk_actions/relation/rename_relation.js similarity index 100% rename from src/public/app/widgets/bulk_actions/relation/rename_relation.js rename to code/src/public/app/widgets/bulk_actions/relation/rename_relation.js diff --git a/src/public/app/widgets/bulk_actions/relation/update_relation_target.js b/code/src/public/app/widgets/bulk_actions/relation/update_relation_target.js similarity index 100% rename from src/public/app/widgets/bulk_actions/relation/update_relation_target.js rename to code/src/public/app/widgets/bulk_actions/relation/update_relation_target.js diff --git a/src/public/app/widgets/buttons/abstract_button.js b/code/src/public/app/widgets/buttons/abstract_button.js similarity index 100% rename from src/public/app/widgets/buttons/abstract_button.js rename to code/src/public/app/widgets/buttons/abstract_button.js diff --git a/src/public/app/widgets/buttons/attachments_actions.js b/code/src/public/app/widgets/buttons/attachments_actions.js similarity index 100% rename from src/public/app/widgets/buttons/attachments_actions.js rename to code/src/public/app/widgets/buttons/attachments_actions.js diff --git a/src/public/app/widgets/buttons/bookmark_folder.js b/code/src/public/app/widgets/buttons/bookmark_folder.js similarity index 100% rename from src/public/app/widgets/buttons/bookmark_folder.js rename to code/src/public/app/widgets/buttons/bookmark_folder.js diff --git a/src/public/app/widgets/buttons/button_from_note.js b/code/src/public/app/widgets/buttons/button_from_note.js similarity index 100% rename from src/public/app/widgets/buttons/button_from_note.js rename to code/src/public/app/widgets/buttons/button_from_note.js diff --git a/src/public/app/widgets/buttons/calendar.js b/code/src/public/app/widgets/buttons/calendar.js similarity index 100% rename from src/public/app/widgets/buttons/calendar.js rename to code/src/public/app/widgets/buttons/calendar.js diff --git a/src/public/app/widgets/buttons/close_pane_button.js b/code/src/public/app/widgets/buttons/close_pane_button.js similarity index 100% rename from src/public/app/widgets/buttons/close_pane_button.js rename to code/src/public/app/widgets/buttons/close_pane_button.js diff --git a/src/public/app/widgets/buttons/command_button.js b/code/src/public/app/widgets/buttons/command_button.js similarity index 100% rename from src/public/app/widgets/buttons/command_button.js rename to code/src/public/app/widgets/buttons/command_button.js diff --git a/code/src/public/app/widgets/buttons/create_new_follow_up.js b/code/src/public/app/widgets/buttons/create_new_follow_up.js new file mode 100644 index 00000000000..acb40ef9c21 --- /dev/null +++ b/code/src/public/app/widgets/buttons/create_new_follow_up.js @@ -0,0 +1,32 @@ +import CommandButtonWidget from "./command_button.js"; + +export default class CreateNewFollowUpButton extends CommandButtonWidget { + constructor() { + super(); + this.icon('bx-book-add') + .title("Create Follow up") + .command("createFollowUp") + .titlePlacement("bottom") + .class("icon-action"); + } + + isEnabled() { + return super.isEnabled() && this.note?.type === 'text'; + } +} +import CommandButtonWidget from "./command_button.js"; + +export default class CreateNewFollowUpButton extends CommandButtonWidget { + constructor() { + super(); + this.icon('bx-task') + .title("Create Follow up") + .command("createFollowUp") + .titlePlacement("bottom") + .class("icon-action"); + } + + isEnabled() { + return super.isEnabled() && this.note?.type === 'text'; + } +} \ No newline at end of file diff --git a/src/public/app/widgets/buttons/create_pane_button.js b/code/src/public/app/widgets/buttons/create_pane_button.js similarity index 100% rename from src/public/app/widgets/buttons/create_pane_button.js rename to code/src/public/app/widgets/buttons/create_pane_button.js diff --git a/src/public/app/widgets/buttons/edit_button.js b/code/src/public/app/widgets/buttons/edit_button.js similarity index 100% rename from src/public/app/widgets/buttons/edit_button.js rename to code/src/public/app/widgets/buttons/edit_button.js diff --git a/src/public/app/widgets/buttons/global_menu.js b/code/src/public/app/widgets/buttons/global_menu.js similarity index 100% rename from src/public/app/widgets/buttons/global_menu.js rename to code/src/public/app/widgets/buttons/global_menu.js diff --git a/src/public/app/widgets/buttons/history_navigation.js b/code/src/public/app/widgets/buttons/history_navigation.js similarity index 100% rename from src/public/app/widgets/buttons/history_navigation.js rename to code/src/public/app/widgets/buttons/history_navigation.js diff --git a/src/public/app/widgets/buttons/launcher/abstract_launcher.js b/code/src/public/app/widgets/buttons/launcher/abstract_launcher.js similarity index 100% rename from src/public/app/widgets/buttons/launcher/abstract_launcher.js rename to code/src/public/app/widgets/buttons/launcher/abstract_launcher.js diff --git a/src/public/app/widgets/buttons/launcher/note_launcher.js b/code/src/public/app/widgets/buttons/launcher/note_launcher.js similarity index 100% rename from src/public/app/widgets/buttons/launcher/note_launcher.js rename to code/src/public/app/widgets/buttons/launcher/note_launcher.js diff --git a/src/public/app/widgets/buttons/launcher/script_launcher.js b/code/src/public/app/widgets/buttons/launcher/script_launcher.js similarity index 100% rename from src/public/app/widgets/buttons/launcher/script_launcher.js rename to code/src/public/app/widgets/buttons/launcher/script_launcher.js diff --git a/src/public/app/widgets/buttons/launcher/today_launcher.js b/code/src/public/app/widgets/buttons/launcher/today_launcher.js similarity index 100% rename from src/public/app/widgets/buttons/launcher/today_launcher.js rename to code/src/public/app/widgets/buttons/launcher/today_launcher.js diff --git a/src/public/app/widgets/buttons/left_pane_toggle.js b/code/src/public/app/widgets/buttons/left_pane_toggle.js similarity index 100% rename from src/public/app/widgets/buttons/left_pane_toggle.js rename to code/src/public/app/widgets/buttons/left_pane_toggle.js diff --git a/code/src/public/app/widgets/buttons/mark_task_as_done_button.js b/code/src/public/app/widgets/buttons/mark_task_as_done_button.js new file mode 100644 index 00000000000..1fe60e21101 --- /dev/null +++ b/code/src/public/app/widgets/buttons/mark_task_as_done_button.js @@ -0,0 +1,16 @@ +import CommandButtonWidget from "./command_button.js"; + +export default class MarkTaskAsDoneButton extends CommandButtonWidget { + constructor() { + super(); + this.icon('bx-check-square') + .title("Mark As Done") + .command("markAsDone") + .titlePlacement("bottom") + .class("icon-action"); + } + + isEnabled() { + return super.isEnabled() && this.note?.type === 'task'; + } +} \ No newline at end of file diff --git a/src/public/app/widgets/buttons/move_pane_button.js b/code/src/public/app/widgets/buttons/move_pane_button.js similarity index 100% rename from src/public/app/widgets/buttons/move_pane_button.js rename to code/src/public/app/widgets/buttons/move_pane_button.js diff --git a/src/public/app/widgets/buttons/note_actions.js b/code/src/public/app/widgets/buttons/note_actions.js similarity index 100% rename from src/public/app/widgets/buttons/note_actions.js rename to code/src/public/app/widgets/buttons/note_actions.js diff --git a/src/public/app/widgets/buttons/onclick_button.js b/code/src/public/app/widgets/buttons/onclick_button.js similarity index 100% rename from src/public/app/widgets/buttons/onclick_button.js rename to code/src/public/app/widgets/buttons/onclick_button.js diff --git a/src/public/app/widgets/buttons/open_note_button_widget.js b/code/src/public/app/widgets/buttons/open_note_button_widget.js similarity index 100% rename from src/public/app/widgets/buttons/open_note_button_widget.js rename to code/src/public/app/widgets/buttons/open_note_button_widget.js diff --git a/src/public/app/widgets/buttons/protected_session_status.js b/code/src/public/app/widgets/buttons/protected_session_status.js similarity index 100% rename from src/public/app/widgets/buttons/protected_session_status.js rename to code/src/public/app/widgets/buttons/protected_session_status.js diff --git a/src/public/app/widgets/buttons/revisions_button.js b/code/src/public/app/widgets/buttons/revisions_button.js similarity index 100% rename from src/public/app/widgets/buttons/revisions_button.js rename to code/src/public/app/widgets/buttons/revisions_button.js diff --git a/src/public/app/widgets/buttons/right_dropdown_button.js b/code/src/public/app/widgets/buttons/right_dropdown_button.js similarity index 100% rename from src/public/app/widgets/buttons/right_dropdown_button.js rename to code/src/public/app/widgets/buttons/right_dropdown_button.js diff --git a/src/public/app/widgets/buttons/update_available.js b/code/src/public/app/widgets/buttons/update_available.js similarity index 100% rename from src/public/app/widgets/buttons/update_available.js rename to code/src/public/app/widgets/buttons/update_available.js diff --git a/code/src/public/app/widgets/containers/conditional_flex_container.js b/code/src/public/app/widgets/containers/conditional_flex_container.js new file mode 100644 index 00000000000..1bb2be095bc --- /dev/null +++ b/code/src/public/app/widgets/containers/conditional_flex_container.js @@ -0,0 +1,31 @@ +import NoteContextAwareWidget from "../note_context_aware_widget.js"; +import Container from "./container.js"; + +export default class ConditionalFlexContainer extends NoteContextAwareWidget { + constructor(direction, condition) { + super(); + this.$condition = condition; + if (!direction || !['row', 'column'].includes(direction)) { + throw new Error(`Direction argument given as '${direction}', use either 'row' or 'column'`); + } + + this.attrs.style = `display: flex; flex-direction: ${direction};`; + } + + doRender() { + this.$widget = $(`
`); + this.renderChildren(); + } + + renderChildren() { + for (const widget of this.children) { + this.$widget.append(widget.render()); + } + } + + isEnabled() { + return super.isEnabled() + // main note context should not be closeable + && this.$condition && this.$condition(this.noteContext); + } +} diff --git a/src/public/app/widgets/containers/container.js b/code/src/public/app/widgets/containers/container.js similarity index 100% rename from src/public/app/widgets/containers/container.js rename to code/src/public/app/widgets/containers/container.js diff --git a/src/public/app/widgets/containers/flex_container.js b/code/src/public/app/widgets/containers/flex_container.js similarity index 100% rename from src/public/app/widgets/containers/flex_container.js rename to code/src/public/app/widgets/containers/flex_container.js diff --git a/src/public/app/widgets/containers/launcher.js b/code/src/public/app/widgets/containers/launcher.js similarity index 100% rename from src/public/app/widgets/containers/launcher.js rename to code/src/public/app/widgets/containers/launcher.js diff --git a/src/public/app/widgets/containers/launcher_container.js b/code/src/public/app/widgets/containers/launcher_container.js similarity index 100% rename from src/public/app/widgets/containers/launcher_container.js rename to code/src/public/app/widgets/containers/launcher_container.js diff --git a/src/public/app/widgets/containers/left_pane_container.js b/code/src/public/app/widgets/containers/left_pane_container.js similarity index 100% rename from src/public/app/widgets/containers/left_pane_container.js rename to code/src/public/app/widgets/containers/left_pane_container.js diff --git a/src/public/app/widgets/containers/ribbon_container.js b/code/src/public/app/widgets/containers/ribbon_container.js similarity index 99% rename from src/public/app/widgets/containers/ribbon_container.js rename to code/src/public/app/widgets/containers/ribbon_container.js index a132a0aaf2a..d3c965c2fc9 100644 --- a/src/public/app/widgets/containers/ribbon_container.js +++ b/code/src/public/app/widgets/containers/ribbon_container.js @@ -338,7 +338,7 @@ export default class RibbonContainer extends NoteContextAwareWidget { } } - entitiesReloadedEvent({loadResults}) { + async entitiesReloadedEvent({loadResults}) { if (loadResults.isNoteReloaded(this.noteId) && this.lastNoteType !== this.note.type) { // note type influences the list of available ribbon tabs the most // check for the type is so that we don't update on each title rename @@ -347,7 +347,7 @@ export default class RibbonContainer extends NoteContextAwareWidget { this.refresh(); } else if (loadResults.getAttributeRows(this.componentId).find(attr => attributeService.isAffecting(attr, this.note))) { - this.refreshWithNote(this.note, true); + await this.refreshWithNote(this.note, true); } } diff --git a/src/public/app/widgets/containers/right_pane_container.js b/code/src/public/app/widgets/containers/right_pane_container.js similarity index 100% rename from src/public/app/widgets/containers/right_pane_container.js rename to code/src/public/app/widgets/containers/right_pane_container.js diff --git a/src/public/app/widgets/containers/root_container.js b/code/src/public/app/widgets/containers/root_container.js similarity index 100% rename from src/public/app/widgets/containers/root_container.js rename to code/src/public/app/widgets/containers/root_container.js diff --git a/src/public/app/widgets/containers/scrolling_container.js b/code/src/public/app/widgets/containers/scrolling_container.js similarity index 100% rename from src/public/app/widgets/containers/scrolling_container.js rename to code/src/public/app/widgets/containers/scrolling_container.js diff --git a/src/public/app/widgets/containers/split_note_container.js b/code/src/public/app/widgets/containers/split_note_container.js similarity index 100% rename from src/public/app/widgets/containers/split_note_container.js rename to code/src/public/app/widgets/containers/split_note_container.js diff --git a/src/public/app/widgets/dialogs/about.js b/code/src/public/app/widgets/dialogs/about.js similarity index 100% rename from src/public/app/widgets/dialogs/about.js rename to code/src/public/app/widgets/dialogs/about.js diff --git a/src/public/app/widgets/dialogs/add_link.js b/code/src/public/app/widgets/dialogs/add_link.js similarity index 100% rename from src/public/app/widgets/dialogs/add_link.js rename to code/src/public/app/widgets/dialogs/add_link.js diff --git a/src/public/app/widgets/dialogs/branch_prefix.js b/code/src/public/app/widgets/dialogs/branch_prefix.js similarity index 100% rename from src/public/app/widgets/dialogs/branch_prefix.js rename to code/src/public/app/widgets/dialogs/branch_prefix.js diff --git a/src/public/app/widgets/dialogs/bulk_actions.js b/code/src/public/app/widgets/dialogs/bulk_actions.js similarity index 100% rename from src/public/app/widgets/dialogs/bulk_actions.js rename to code/src/public/app/widgets/dialogs/bulk_actions.js diff --git a/src/public/app/widgets/dialogs/clone_to.js b/code/src/public/app/widgets/dialogs/clone_to.js similarity index 100% rename from src/public/app/widgets/dialogs/clone_to.js rename to code/src/public/app/widgets/dialogs/clone_to.js diff --git a/src/public/app/widgets/dialogs/confirm.js b/code/src/public/app/widgets/dialogs/confirm.js similarity index 100% rename from src/public/app/widgets/dialogs/confirm.js rename to code/src/public/app/widgets/dialogs/confirm.js diff --git a/src/public/app/widgets/dialogs/delete_notes.js b/code/src/public/app/widgets/dialogs/delete_notes.js similarity index 100% rename from src/public/app/widgets/dialogs/delete_notes.js rename to code/src/public/app/widgets/dialogs/delete_notes.js diff --git a/src/public/app/widgets/dialogs/export.js b/code/src/public/app/widgets/dialogs/export.js similarity index 100% rename from src/public/app/widgets/dialogs/export.js rename to code/src/public/app/widgets/dialogs/export.js diff --git a/src/public/app/widgets/dialogs/help.js b/code/src/public/app/widgets/dialogs/help.js similarity index 100% rename from src/public/app/widgets/dialogs/help.js rename to code/src/public/app/widgets/dialogs/help.js diff --git a/src/public/app/widgets/dialogs/import.js b/code/src/public/app/widgets/dialogs/import.js similarity index 100% rename from src/public/app/widgets/dialogs/import.js rename to code/src/public/app/widgets/dialogs/import.js diff --git a/src/public/app/widgets/dialogs/include_note.js b/code/src/public/app/widgets/dialogs/include_note.js similarity index 100% rename from src/public/app/widgets/dialogs/include_note.js rename to code/src/public/app/widgets/dialogs/include_note.js diff --git a/src/public/app/widgets/dialogs/info.js b/code/src/public/app/widgets/dialogs/info.js similarity index 100% rename from src/public/app/widgets/dialogs/info.js rename to code/src/public/app/widgets/dialogs/info.js diff --git a/src/public/app/widgets/dialogs/jump_to_note.js b/code/src/public/app/widgets/dialogs/jump_to_note.js similarity index 100% rename from src/public/app/widgets/dialogs/jump_to_note.js rename to code/src/public/app/widgets/dialogs/jump_to_note.js diff --git a/src/public/app/widgets/dialogs/markdown_import.js b/code/src/public/app/widgets/dialogs/markdown_import.js similarity index 100% rename from src/public/app/widgets/dialogs/markdown_import.js rename to code/src/public/app/widgets/dialogs/markdown_import.js diff --git a/src/public/app/widgets/dialogs/move_to.js b/code/src/public/app/widgets/dialogs/move_to.js similarity index 100% rename from src/public/app/widgets/dialogs/move_to.js rename to code/src/public/app/widgets/dialogs/move_to.js diff --git a/code/src/public/app/widgets/dialogs/new_task_dialog.js b/code/src/public/app/widgets/dialogs/new_task_dialog.js new file mode 100644 index 00000000000..2b0ac506e16 --- /dev/null +++ b/code/src/public/app/widgets/dialogs/new_task_dialog.js @@ -0,0 +1,248 @@ +import libraryLoader from "../../services/library_loader.js"; +import utils from '../../services/utils.js'; +import appContext from "../../components/app_context.js"; +import BasicWidget from "../basic_widget.js"; +import dialogService from "../../services/dialog.js"; +import mimeTypesService from '../../services/mime_types.js'; +import taskService from "../../services/task.js"; +import froca from "../../services/froca.js"; +const ENABLE_INSPECTOR = false; + +const TPL = ` +`; + +export default class NewTaskDialog extends BasicWidget { + constructor() { + super(); + } + + doRender() { + this.$widget = $(TPL); + this.contentSized(); + this.$editor = this.$widget.find('.new-task-dialog-textarea'); + this.$submit = this.$widget.find('.submit'); + + this.$submit.on('click', async () => { + const description = this.new_task_watchdog.editor.getData(); + await taskService.createNewTask(this.$parent, this.$widget.find('.title').val(), description, this.$deadline, this.$swimlane ); + utils.closeActiveDialog(); + }); + + this.$widget.show(); + + this.initialized = this.initEditor(); + + super.doRender(); + } + + async createFollowUpEvent({parent = appContext.tabManager.getActiveContextNoteId()}) { + this.$parent = parent; + const parentNote = await froca.getNote(parent); + const main = await taskService.findMainBucket(parentNote); + if (main === null) { + throw new Error('Could not find the main bucket'); + } + + const attrs = main.getAttributes(); + + const defaultBucket = attrs.find(a => a.name === 'defaultBucketParent').value; + + if (this.new_task_watchdog?.editor) { + this.new_task_watchdog.editor.setData(''); + } + this.$title = "Follow up - " + utils.localNowDate(); + this.$priority = "normal"; + this.$deadline = utils.localDateInFutureDays(2); + this.$swimlane = defaultBucket; + this.$widget.find('.priority').html(this.$priority); + this.$widget.find('.deadline').html(this.$deadline); + this.$widget.find('.title').val(this.$title); + + utils.openDialog(this.$widget); + } + + async initEditor() { + await libraryLoader.requireLibrary(libraryLoader.CKEDITOR); + + const codeBlockLanguages = (await mimeTypesService.getMimeTypes()).filter(mt => mt.enabled).map(mt => ({ + language: mt.mime.toLowerCase().replace(/[\W_]+/g,"-"), + label: mt.title + })); + + this.new_task_watchdog = new EditorWatchdog(BalloonEditor, { + minimumNonErrorTimePeriod: 5000, + crashNumberLimit: 3, + saveInterval: 5000 + }); + + this.new_task_watchdog.on('statusChange', () => { + const currentState = this.new_task_watchdog.state; + + if (!['crashed', 'crashedPermanently'].includes(currentState)) { + return; + } + + console.log(`CKEditor changed to ${currentState}`); + + this.new_task_watchdog.crashes.forEach(crashInfo => console.log(crashInfo)); + + if (currentState === 'crashedPermanently') { + dialogService.info(`Editing component keeps crashing. Please try restarting Trilium. If problem persists, consider creating a bug report.`); + + this.new_task_watchdog.editor.enableReadOnlyMode('crashed-editor'); + } + }); + + this.new_task_watchdog.setCreator(async (elementOrData, editorConfig) => { + const editor = await BalloonEditor.create(elementOrData, editorConfig); + + if (glob.isDev && ENABLE_INSPECTOR) { + await import(/* webpackIgnore: true */'../../../libraries/ckeditor/inspector.js'); + CKEditorInspector.attach(editor); + } + + return editor; + }); + + + await this.new_task_watchdog.create(this.$editor[0], { + placeholder: "The task description goes here...", + codeBlock: { + languages: codeBlockLanguages + }, + math: { + engine: 'katex', + outputType: 'span', // or script + lazyLoad: async () => await libraryLoader.requireLibrary(libraryLoader.KATEX), + forceOutputType: false, // forces output to use outputType + enablePreview: true // Enable preview view + } + }); + } + show() {} + + getEditor() { + return this.new_task_watchdog?.editor; + } + + cleanup() { + if (this.new_task_watchdog?.editor) { + this.new_task_watchdog.editor.setData(''); + } + } + + insertDateTimeToTextCommand() { + const date = new Date(); + const dateString = utils.formatDateTime(date); + + this.addTextToEditor(dateString); + } + + async addLinkToEditor(linkHref, linkTitle) { + await this.initialized; + + this.new_task_watchdog.editor.model.change(writer => { + const insertPosition = this.new_task_watchdog.editor.model.document.selection.getFirstPosition(); + writer.insertText(linkTitle, {linkHref: linkHref}, insertPosition); + }); + } + + addTextToActiveEditorEvent({text}) { + if (!this.isActive()) { + return; + } + + this.addTextToEditor(text); + } + + // returns true if user selected some text, false if there's no selection + hasSelection() { + const model = this.new_task_watchdog.editor.model; + const selection = model.document.selection; + + return !selection.isCollapsed; + } + + async executeWithTextEditorEvent({callback, resolve, ntxId}) { + if (!this.isNoteContext(ntxId)) { + return; + } + + await this.initialized; + + if (callback) { + callback(this.new_task_watchdog.editor); + } + + resolve(this.new_task_watchdog.editor); + } + + beforeUnloadEvent() { + } + + async addTextToEditor(text) { + await this.initialized; + + this.new_task_watchdog.editor.model.change(writer => { + const insertPosition = this.new_task_watchdog.editor.model.document.selection.getLastPosition(); + writer.insertText(text, insertPosition); + }); + } + + async addLink(notePath, linkTitle) { + await this.initialized; + + if (linkTitle) { + if (this.hasSelection()) { + this.new_task_watchdog.editor.execute('link', `#${notePath}`); + } else { + await this.addLinkToEditor(`#${notePath}`, linkTitle); + } + } + else { + this.new_task_watchdog.editor.execute('referenceLink', { href: '#' + notePath }); + } + + this.new_task_watchdog.editor.editing.view.focus(); + } + +} diff --git a/src/public/app/widgets/dialogs/note_type_chooser.js b/code/src/public/app/widgets/dialogs/note_type_chooser.js similarity index 100% rename from src/public/app/widgets/dialogs/note_type_chooser.js rename to code/src/public/app/widgets/dialogs/note_type_chooser.js diff --git a/src/public/app/widgets/dialogs/password_not_set.js b/code/src/public/app/widgets/dialogs/password_not_set.js similarity index 100% rename from src/public/app/widgets/dialogs/password_not_set.js rename to code/src/public/app/widgets/dialogs/password_not_set.js diff --git a/src/public/app/widgets/dialogs/prompt.js b/code/src/public/app/widgets/dialogs/prompt.js similarity index 100% rename from src/public/app/widgets/dialogs/prompt.js rename to code/src/public/app/widgets/dialogs/prompt.js diff --git a/src/public/app/widgets/dialogs/protected_session_password.js b/code/src/public/app/widgets/dialogs/protected_session_password.js similarity index 100% rename from src/public/app/widgets/dialogs/protected_session_password.js rename to code/src/public/app/widgets/dialogs/protected_session_password.js diff --git a/src/public/app/widgets/dialogs/recent_changes.js b/code/src/public/app/widgets/dialogs/recent_changes.js similarity index 100% rename from src/public/app/widgets/dialogs/recent_changes.js rename to code/src/public/app/widgets/dialogs/recent_changes.js diff --git a/src/public/app/widgets/dialogs/revisions.js b/code/src/public/app/widgets/dialogs/revisions.js similarity index 100% rename from src/public/app/widgets/dialogs/revisions.js rename to code/src/public/app/widgets/dialogs/revisions.js diff --git a/src/public/app/widgets/dialogs/sort_child_notes.js b/code/src/public/app/widgets/dialogs/sort_child_notes.js similarity index 100% rename from src/public/app/widgets/dialogs/sort_child_notes.js rename to code/src/public/app/widgets/dialogs/sort_child_notes.js diff --git a/src/public/app/widgets/dialogs/upload_attachments.js b/code/src/public/app/widgets/dialogs/upload_attachments.js similarity index 100% rename from src/public/app/widgets/dialogs/upload_attachments.js rename to code/src/public/app/widgets/dialogs/upload_attachments.js diff --git a/src/public/app/widgets/editability_select.js b/code/src/public/app/widgets/editability_select.js similarity index 100% rename from src/public/app/widgets/editability_select.js rename to code/src/public/app/widgets/editability_select.js diff --git a/src/public/app/widgets/find.js b/code/src/public/app/widgets/find.js similarity index 100% rename from src/public/app/widgets/find.js rename to code/src/public/app/widgets/find.js diff --git a/src/public/app/widgets/find_in_code.js b/code/src/public/app/widgets/find_in_code.js similarity index 100% rename from src/public/app/widgets/find_in_code.js rename to code/src/public/app/widgets/find_in_code.js diff --git a/src/public/app/widgets/find_in_html.js b/code/src/public/app/widgets/find_in_html.js similarity index 100% rename from src/public/app/widgets/find_in_html.js rename to code/src/public/app/widgets/find_in_html.js diff --git a/src/public/app/widgets/find_in_text.js b/code/src/public/app/widgets/find_in_text.js similarity index 100% rename from src/public/app/widgets/find_in_text.js rename to code/src/public/app/widgets/find_in_text.js diff --git a/src/public/app/widgets/floating_buttons/code_buttons.js b/code/src/public/app/widgets/floating_buttons/code_buttons.js similarity index 100% rename from src/public/app/widgets/floating_buttons/code_buttons.js rename to code/src/public/app/widgets/floating_buttons/code_buttons.js diff --git a/src/public/app/widgets/floating_buttons/floating_buttons.js b/code/src/public/app/widgets/floating_buttons/floating_buttons.js similarity index 100% rename from src/public/app/widgets/floating_buttons/floating_buttons.js rename to code/src/public/app/widgets/floating_buttons/floating_buttons.js diff --git a/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js b/code/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js similarity index 100% rename from src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js rename to code/src/public/app/widgets/floating_buttons/hide_floating_buttons_button.js diff --git a/src/public/app/widgets/floating_buttons/mermaid_export_button.js b/code/src/public/app/widgets/floating_buttons/mermaid_export_button.js similarity index 100% rename from src/public/app/widgets/floating_buttons/mermaid_export_button.js rename to code/src/public/app/widgets/floating_buttons/mermaid_export_button.js diff --git a/src/public/app/widgets/floating_buttons/relation_map_buttons.js b/code/src/public/app/widgets/floating_buttons/relation_map_buttons.js similarity index 100% rename from src/public/app/widgets/floating_buttons/relation_map_buttons.js rename to code/src/public/app/widgets/floating_buttons/relation_map_buttons.js diff --git a/src/public/app/widgets/floating_buttons/zpetne_odkazy.js b/code/src/public/app/widgets/floating_buttons/zpetne_odkazy.js similarity index 100% rename from src/public/app/widgets/floating_buttons/zpetne_odkazy.js rename to code/src/public/app/widgets/floating_buttons/zpetne_odkazy.js diff --git a/src/public/app/widgets/highlights_list.js b/code/src/public/app/widgets/highlights_list.js similarity index 100% rename from src/public/app/widgets/highlights_list.js rename to code/src/public/app/widgets/highlights_list.js diff --git a/src/public/app/widgets/icon_list.js b/code/src/public/app/widgets/icon_list.js similarity index 100% rename from src/public/app/widgets/icon_list.js rename to code/src/public/app/widgets/icon_list.js diff --git a/src/public/app/widgets/mermaid.js b/code/src/public/app/widgets/mermaid.js similarity index 100% rename from src/public/app/widgets/mermaid.js rename to code/src/public/app/widgets/mermaid.js diff --git a/src/public/app/widgets/mobile_widgets/close_detail_button.js b/code/src/public/app/widgets/mobile_widgets/close_detail_button.js similarity index 100% rename from src/public/app/widgets/mobile_widgets/close_detail_button.js rename to code/src/public/app/widgets/mobile_widgets/close_detail_button.js diff --git a/src/public/app/widgets/mobile_widgets/mobile_detail_menu.js b/code/src/public/app/widgets/mobile_widgets/mobile_detail_menu.js similarity index 100% rename from src/public/app/widgets/mobile_widgets/mobile_detail_menu.js rename to code/src/public/app/widgets/mobile_widgets/mobile_detail_menu.js diff --git a/src/public/app/widgets/mobile_widgets/screen_container.js b/code/src/public/app/widgets/mobile_widgets/screen_container.js similarity index 100% rename from src/public/app/widgets/mobile_widgets/screen_container.js rename to code/src/public/app/widgets/mobile_widgets/screen_container.js diff --git a/src/public/app/widgets/note_context_aware_widget.js b/code/src/public/app/widgets/note_context_aware_widget.js similarity index 100% rename from src/public/app/widgets/note_context_aware_widget.js rename to code/src/public/app/widgets/note_context_aware_widget.js diff --git a/code/src/public/app/widgets/note_create_new_task.js b/code/src/public/app/widgets/note_create_new_task.js new file mode 100644 index 00000000000..1ea1d681bab --- /dev/null +++ b/code/src/public/app/widgets/note_create_new_task.js @@ -0,0 +1,120 @@ +import NoteContextAwareWidget from "./note_context_aware_widget.js"; +import protectedSessionHolder from "../services/protected_session_holder.js"; +import SpacedUpdate from "../services/spaced_update.js"; +import appContext from "../components/app_context.js"; +import taskService from "../services/task.js"; +import utils from "../services/utils.js"; + +const TPL = ` +
+ +

Create a follow up task

+ +
`; + +export default class TaskCreationForNoteWidget extends NoteContextAwareWidget { + constructor() { + super(); + + this.spacedUpdate = new SpacedUpdate(async () => { + + protectedSessionHolder.touchProtectedSessionIfNecessary(this.note); + + }); + + this.deleteNoteOnEscape = false; + + appContext.addBeforeUnloadListener(this); + } + + isEnabled() { + return super.isEnabled() + && this.noteContext && this.noteContext.note && (this.noteContext.note.type === "text"); + } + + doRender() { + this.$widget = $(TPL); + const input = this.$widget.find('.note-new-task-widget-new-comment'); + + input.on('keydown',async (e) => { + if (e.code === 'Enter' && !e.shiftKey) { + const description = input.val(); + input.val(''); + await this.createNewTask(description); + } + }); + super.doRender(); + } + + async createNewTask(description) { + const note = appContext.tabManager.getActiveContextNote(); + + if (!note) { + return; + } + + await taskService.createNewTask(appContext.tabManager.getActiveContextNotePath(), "Follow up - " + utils.localNowDate(), description, "default", utils.localNowDate(), ''); + } + + async refreshWithNote(note) { + if (note.type !== "text") { + this.$note = null; + return; + } + + this.$note = note; + } + + async beforeNoteSwitchEvent({noteContext}) { + if (this.isNoteContext(noteContext.ntxId)) { + await this.spacedUpdate.updateNowIfNecessary(); + } + } + + async beforeNoteContextRemoveEvent({ntxIds}) { + if (this.isNoteContext(ntxIds)) { + await this.spacedUpdate.updateNowIfNecessary(); + } + } + + focusOnTitleEvent() { + if (this.noteContext && this.noteContext.isActive()) { + + } + } + + focusAndSelectTitleEvent({isNewNote} = {isNewNote: false}) { + if (this.noteContext && this.noteContext.isActive()) { + + + this.deleteNoteOnEscape = isNewNote; + } + } + + entitiesReloadedEvent({loadResults}) { + if (loadResults.isNoteReloaded(this.noteId)) { + // not updating the title specifically since the synced title might be older than what the user is currently typing + this.setProtectedStatus(this.note); + } + + if (loadResults.isNoteReloaded(this.noteId, this.componentId)) { + this.refresh(); + } + } + + setProtectedStatus(note) { + + } + + beforeUnloadEvent() { + return this.spacedUpdate.isAllSavedAndTriggerUpdate(); + } +} diff --git a/src/public/app/widgets/note_detail.js b/code/src/public/app/widgets/note_detail.js similarity index 89% rename from src/public/app/widgets/note_detail.js rename to code/src/public/app/widgets/note_detail.js index 3b0fdbbf7e4..caa0aab30fa 100644 --- a/src/public/app/widgets/note_detail.js +++ b/code/src/public/app/widgets/note_detail.js @@ -9,8 +9,18 @@ import noteCreateService from "../services/note_create.js"; import attributeService from "../services/attributes.js"; import attributeRenderer from "../services/attribute_renderer.js"; +import BucketWidget from "./bucket.js"; +import BucketWidget from "./bucket.js"; import EmptyTypeWidget from "./type_widgets/empty.js"; import EditableTextTypeWidget from "./type_widgets/editable_text.js"; +import ReadOnlyTaskTypeWidget from "./type_widgets/read_only_task.js" +import EditableTaskTypeWidget from "./type_widgets/editable_task.js" +import SwimlaneTypeWidget from "./type_widgets/swimlane.js"; +import TaskOverviewTypeWidget from "./type_widgets/task_overview.js"; +import ReadOnlyTaskTypeWidget from "./type_widgets/read_only_task.js" +import EditableTaskTypeWidget from "./type_widgets/editable_task.js" +import SwimlaneTypeWidget from "./type_widgets/swimlane.js"; +import TaskOverviewTypeWidget from "./type_widgets/task_overview.js"; import EditableCodeTypeWidget from "./type_widgets/editable_code.js"; import FileTypeWidget from "./type_widgets/file.js"; import ImageTypeWidget from "./type_widgets/image.js"; @@ -50,6 +60,16 @@ const typeWidgetClasses = { 'readOnlyText': ReadOnlyTextTypeWidget, 'editableCode': EditableCodeTypeWidget, 'readOnlyCode': ReadOnlyCodeTypeWidget, + 'readOnlyTask': ReadOnlyTaskTypeWidget, + 'editableTask': EditableTaskTypeWidget, + 'swimlane' : SwimlaneTypeWidget, + 'taskOverview' : TaskOverviewTypeWidget, + 'noteBucket' : BucketWidget, + 'readOnlyTask': ReadOnlyTaskTypeWidget, + 'editableTask': EditableTaskTypeWidget, + 'swimlane' : SwimlaneTypeWidget, + 'taskOverview' : TaskOverviewTypeWidget, + 'noteBucket' : BucketWidget, 'file': FileTypeWidget, 'image': ImageTypeWidget, 'search': NoneTypeWidget, @@ -169,6 +189,21 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { if (type === 'text' && viewScope.viewMode === 'source') { type = 'readOnlyCode'; + } else if (type === 'task') { + let readOnly = await this.noteContext.isReadOnly(); + if (readOnly) { + type = 'readOnlyTask'; + } else { + type = 'editableTask'; + } + } else if (type === 'category') { + type = 'editableTask'; + } else if (type === 'swimlane') { + type = 'swimlane'; + } else if (type === 'swimlane_dashboard') { + type = 'taskOverview'; + } else if (type === 'bucket') { + type = 'noteBucket'; } else if (viewScope.viewMode === 'attachments') { type = viewScope.attachmentId ? 'attachmentDetail' : 'attachmentList'; } else if (type === 'text' && await this.noteContext.isReadOnly()) { diff --git a/src/public/app/widgets/note_icon.js b/code/src/public/app/widgets/note_icon.js similarity index 100% rename from src/public/app/widgets/note_icon.js rename to code/src/public/app/widgets/note_icon.js diff --git a/src/public/app/widgets/note_list.js b/code/src/public/app/widgets/note_list.js similarity index 100% rename from src/public/app/widgets/note_list.js rename to code/src/public/app/widgets/note_list.js diff --git a/src/public/app/widgets/note_map.js b/code/src/public/app/widgets/note_map.js similarity index 100% rename from src/public/app/widgets/note_map.js rename to code/src/public/app/widgets/note_map.js diff --git a/src/public/app/widgets/note_title.js b/code/src/public/app/widgets/note_title.js similarity index 96% rename from src/public/app/widgets/note_title.js rename to code/src/public/app/widgets/note_title.js index 08505627a6c..0ad57b855a0 100644 --- a/src/public/app/widgets/note_title.js +++ b/code/src/public/app/widgets/note_title.js @@ -39,6 +39,11 @@ export default class NoteTitleWidget extends NoteContextAwareWidget { protectedSessionHolder.touchProtectedSessionIfNecessary(this.note); await server.put(`notes/${this.noteId}/title`, {title}, this.componentId); + + await appContext.triggerEvent('noteTitleUpdated', { + noteId: this.noteId, + newTitle: title + }); }); this.deleteNoteOnEscape = false; diff --git a/src/public/app/widgets/note_tree.js b/code/src/public/app/widgets/note_tree.js similarity index 53% rename from src/public/app/widgets/note_tree.js rename to code/src/public/app/widgets/note_tree.js index bbbcc9905ef..6c94e1b56f7 100644 --- a/src/public/app/widgets/note_tree.js +++ b/code/src/public/app/widgets/note_tree.js @@ -19,6 +19,8 @@ import options from "../services/options.js"; import protectedSessionHolder from "../services/protected_session_holder.js"; import dialogService from "../services/dialog.js"; import shortcutService from "../services/shortcuts.js"; +import taskService from "../services/task.js" +import taskService from "../services/task.js" const TPL = `
@@ -147,6 +149,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { super(); this.treeName = "main"; // legacy value + this.hideDoneTasks = false; + this.hideDoneTasks = false; } doRender() { @@ -165,6 +169,22 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { }); }); + this.$tree.on("mousedown", ".mark-task-done", async e => { + const node = $.ui.fancytree.getNode(e); + const note = await froca.getNote(node.data.noteId); + + await taskService.markTaskAsDone(note); + + await appContext.triggerEvent('taskStatusUpdated', { + noteId: note.noteId, + newStatus: 'done' + }); + await appContext.triggerEvent('taskSwimlaneUpdated', { + noteId: note.noteId, + newSwimlane: 'Done' + }); + }); + this.$tree.on("mousedown", ".enter-workspace-button", e => { const node = $.ui.fancytree.getNode(e); @@ -235,6 +255,31 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { this.setupNoteTitleTooltip(); } + async taskStatusUpdatedEvent(e) { + + const noteId = e.noteId; + + const traverse = (node, noteId) => { + if (node.data.noteId === noteId) { + return node; + } else { + for(const i in node.children){ + const res = traverse(node.children[i], noteId); + if (res) { + return res; + } + } + } + return null; + }; + const node = traverse(this.tree.getRootNode().children[0], noteId); + if (node) { + await this.updateNode(node); + } else { + console.log('task this ID not found'); + } + } + setupNoteTitleTooltip() { // the following will dynamically set tree item's tooltip if the whole item's text is not currently visible // if the whole text is visible then no tooltip is show since that's unnecessarily distracting @@ -280,365 +325,738 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { } initFancyTree() { - const treeData = [this.prepareRootNode()]; - - this.$tree.fancytree({ - titlesTabbable: true, - keyboard: true, - extensions: ["dnd5", "clones", "filter"], - source: treeData, - scrollOfs: { - top: 100, - bottom: 100 - }, - scrollParent: this.$tree, - minExpandLevel: 2, // root can't be collapsed - click: (event, data) => { - this.activityDetected(); - - const targetType = data.targetType; - const node = data.node; - - if (node.isSelected() && targetType === 'icon') { - this.triggerCommand('openBulkActionsDialog', { - selectedOrActiveNoteIds: this.getSelectedOrActiveNoteIds(node) - }); + this.prepareRootNode().then( d => { + const treeData = [d]; + this.$tree.fancytree({ + titlesTabbable: true, + keyboard: true, + extensions: ["dnd5", "clones", "filter"], + source: treeData, + scrollOfs: { + top: 100, + bottom: 100 + }, + scrollParent: this.$tree, + minExpandLevel: 2, // root can't be collapsed + click: (event, data) => { + this.activityDetected(); + this.prepareRootNode().then( d => { + const treeData = [d]; + this.$tree.fancytree({ + titlesTabbable: true, + keyboard: true, + extensions: ["dnd5", "clones", "filter"], + source: treeData, + scrollOfs: { + top: 100, + bottom: 100 + }, + scrollParent: this.$tree, + minExpandLevel: 2, // root can't be collapsed + click: (event, data) => { + this.activityDetected(); + + const targetType = data.targetType; + const node = data.node; + const targetType = data.targetType; + const node = data.node; + + if (node.isSelected() && targetType === 'icon') { + this.triggerCommand('openBulkActionsDialog', { + selectedOrActiveNoteIds: this.getSelectedOrActiveNoteIds(node) + }); + if (node.isSelected() && targetType === 'icon') { + this.triggerCommand('openBulkActionsDialog', { + selectedOrActiveNoteIds: this.getSelectedOrActiveNoteIds(node) + }); - return false; - } - else if (targetType === 'title' || targetType === 'icon') { - if (event.shiftKey) { - const activeNode = this.getActiveNode(); + return false; + } + else if (targetType === 'title' || targetType === 'icon') { + if (event.shiftKey) { + const activeNode = this.getActiveNode(); + return false; + } + else if (targetType === 'title' || targetType === 'icon') { + if (event.shiftKey) { + const activeNode = this.getActiveNode(); - if (activeNode.getParent() !== node.getParent()) { - return; - } + if (activeNode.getParent() !== node.getParent()) { + return; + } + if (activeNode.getParent() !== node.getParent()) { + return; + } - this.clearSelectedNodes(); + this.clearSelectedNodes(); + this.clearSelectedNodes(); + + function selectInBetween(first, second) { + for (let i = 0; first && first !== second && i < 10000; i++) { + first.setSelected(true); + first = first.getNextSibling(); + } + function selectInBetween(first, second) { + for (let i = 0; first && first !== second && i < 10000; i++) { + first.setSelected(true); + first = first.getNextSibling(); + } + + second.setSelected(); + } + second.setSelected(); + } - function selectInBetween(first, second) { - for (let i = 0; first && first !== second && i < 10000; i++) { - first.setSelected(true); - first = first.getNextSibling(); + if (activeNode.getIndex() < node.getIndex()) { + selectInBetween(activeNode, node); + } else { + selectInBetween(node, activeNode); + } + if (activeNode.getIndex() < node.getIndex()) { + selectInBetween(activeNode, node); + } else { + selectInBetween(node, activeNode); } - second.setSelected(); + node.setFocus(true); } - - if (activeNode.getIndex() < node.getIndex()) { - selectInBetween(activeNode, node); - } else { - selectInBetween(node, activeNode); + else if ((!utils.isMac() && event.ctrlKey) || (utils.isMac() && event.metaKey)) { + const notePath = treeService.getNotePath(node); + appContext.tabManager.openTabWithNoteWithHoisting(notePath); + } + else if (event.altKey) { + node.setSelected(!node.isSelected()); + node.setFocus(true); + } + else if (data.node.isActive()) { + // this is important for single column mobile view, otherwise it's not possible to see again previously displayed note + this.tree.reactivate(true); + } + else { + node.setActive(); + } + node.setFocus(true); + } + else if ((!utils.isMac() && event.ctrlKey) || (utils.isMac() && event.metaKey)) { + const notePath = treeService.getNotePath(node); + appContext.tabManager.openTabWithNoteWithHoisting(notePath); + } + else if (event.altKey) { + node.setSelected(!node.isSelected()); + node.setFocus(true); + } + else if (data.node.isActive()) { + // this is important for single column mobile view, otherwise it's not possible to see again previously displayed note + this.tree.reactivate(true); + } + else { + node.setActive(); } - node.setFocus(true); - } - else if ((!utils.isMac() && event.ctrlKey) || (utils.isMac() && event.metaKey)) { - const notePath = treeService.getNotePath(node); - appContext.tabManager.openTabWithNoteWithHoisting(notePath); - } - else if (event.altKey) { - node.setSelected(!node.isSelected()); - node.setFocus(true); + return false; } - else if (data.node.isActive()) { - // this is important for single column mobile view, otherwise it's not possible to see again previously displayed note - this.tree.reactivate(true); + }, + beforeActivate: (event, {node}) => { + // hidden subtree is hidden hackily - we want it to be present in the tree so that we can switch to it + // without reloading the whole tree, but we want it to be hidden when hoisted to root. FancyTree allows + // filtering the display only by ascendant - i.e. if the root is visible, all the descendants are as well. + // We solve it by hiding the hidden subtree via CSS (class "hidden-node-is-hidden"), + // but then we need to prevent activating it, e.g. by keyboard + return false; } - else { - node.setActive(); + }, + beforeActivate: (event, {node}) => { + // hidden subtree is hidden hackily - we want it to be present in the tree so that we can switch to it + // without reloading the whole tree, but we want it to be hidden when hoisted to root. FancyTree allows + // filtering the display only by ascendant - i.e. if the root is visible, all the descendants are as well. + // We solve it by hiding the hidden subtree via CSS (class "hidden-node-is-hidden"), + // but then we need to prevent activating it, e.g. by keyboard + + if (hoistedNoteService.getHoistedNoteId() === '_hidden') { + // if we're hoisted in hidden subtree, we want to avoid crossing to "visible" tree, + // which could happen via UP key from hidden root + if (hoistedNoteService.getHoistedNoteId() === '_hidden') { + // if we're hoisted in hidden subtree, we want to avoid crossing to "visible" tree, + // which could happen via UP key from hidden root + + return node.data.noteId !== 'root'; } - - return false; - } - }, - beforeActivate: (event, {node}) => { - // hidden subtree is hidden hackily - we want it to be present in the tree so that we can switch to it - // without reloading the whole tree, but we want it to be hidden when hoisted to root. FancyTree allows - // filtering the display only by ascendant - i.e. if the root is visible, all the descendants are as well. - // We solve it by hiding the hidden subtree via CSS (class "hidden-node-is-hidden"), - // but then we need to prevent activating it, e.g. by keyboard - - if (hoistedNoteService.getHoistedNoteId() === '_hidden') { - // if we're hoisted in hidden subtree, we want to avoid crossing to "visible" tree, - // which could happen via UP key from hidden root - - return node.data.noteId !== 'root'; - } - - // we're not hoisted to hidden subtree, the only way to cross is via DOWN key to the hidden root - return node.data.noteId !== '_hidden'; - }, - activate: async (event, data) => { - // click event won't propagate so let's close context menu manually - contextMenu.hide(); - - this.clearSelectedNodes(); - - const notePath = treeService.getNotePath(data.node); - - const activeNoteContext = appContext.tabManager.getActiveContext(); - await activeNoteContext.setNote(notePath); - }, - expand: (event, data) => this.setExpanded(data.node.data.branchId, true), - collapse: (event, data) => this.setExpanded(data.node.data.branchId, false), - filter: { - counter: false, - mode: "hide", - autoExpand: true - }, - dnd5: { - autoExpandMS: 600, - preventLazyParents: false, - dragStart: (node, data) => { - if (['root', '_hidden', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId) - || node.data.noteId.startsWith("_options")) { - return false; + return node.data.noteId !== 'root'; } - const notes = this.getSelectedOrActiveNodes(node).map(node => ({ - noteId: node.data.noteId, - branchId: node.data.branchId, - title: node.title - })); + // we're not hoisted to hidden subtree, the only way to cross is via DOWN key to the hidden root + return node.data.noteId !== '_hidden'; + }, + activate: async (event, data) => { + // click event won't propagate so let's close context menu manually + contextMenu.hide(); + // we're not hoisted to hidden subtree, the only way to cross is via DOWN key to the hidden root + return node.data.noteId !== '_hidden'; + }, + activate: async (event, data) => { + // click event won't propagate so let's close context menu manually + contextMenu.hide(); - if (notes.length === 1) { - linkService.createLink(notes[0].noteId, {referenceLink: true}) - .then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML)); - } - else { - Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => { - const $list = $("
    ").append(...links.map($link => $("
  • ").append($link))); + this.clearSelectedNodes(); + this.clearSelectedNodes(); - data.dataTransfer.setData("text/html", $list[0].outerHTML); - }); - } + const notePath = treeService.getNotePath(data.node); + const notePath = treeService.getNotePath(data.node); - data.dataTransfer.setData("text", JSON.stringify(notes)); - return true; // allow dragging to start + const activeNoteContext = appContext.tabManager.getActiveContext(); + await activeNoteContext.setNote(notePath); }, - dragEnter: (node, data) => { - if (node.data.noteType === 'search') { - return false; - } else if (node.data.noteId === '_lbRoot') { - return false; - } else if (node.data.noteId.startsWith('_options')) { - return false; - } else if (node.data.noteType === 'launcher') { - return ['before', 'after']; - } else if (['_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId)) { - return ['over']; - } else { - return true; - } + expand: (event, data) => this.setExpanded(data.node.data.branchId, true), + collapse: (event, data) => this.setExpanded(data.node.data.branchId, false), + filter: { + counter: false, + mode: "hide", + autoExpand: true }, - dragDrop: async (node, data) => { - if ((data.hitMode === 'over' && node.data.noteType === 'search') || - (['after', 'before'].includes(data.hitMode) - && (node.data.noteId === hoistedNoteService.getHoistedNoteId() || node.getParent().data.noteType === 'search'))) { + dnd5: { + autoExpandMS: 600, + preventLazyParents: false, + dragStart: (node, data) => { + if (['root', '_hidden', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId) + || node.data.noteId.startsWith("_options")) { + return false; + } + const activeNoteContext = appContext.tabManager.getActiveContext(); + await activeNoteContext.setNote(notePath); + }, + expand: (event, data) => this.setExpanded(data.node.data.branchId, true), + collapse: (event, data) => this.setExpanded(data.node.data.branchId, false), + filter: { + counter: false, + mode: "hide", + autoExpand: true + }, + dnd5: { + autoExpandMS: 600, + preventLazyParents: false, + dragStart: (node, data) => { + if (['root', '_hidden', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId) + || node.data.noteId.startsWith("_options")) { + return false; + } - await dialogService.info("Dropping notes into this location is not allowed."); + const notes = this.getSelectedOrActiveNodes(node).map(node => ({ + noteId: node.data.noteId, + branchId: node.data.branchId, + title: node.title + })); + const notes = this.getSelectedOrActiveNodes(node).map(node => ({ + noteId: node.data.noteId, + branchId: node.data.branchId, + title: node.title + })); + + if (notes.length === 1) { + linkService.createLink(notes[0].noteId, {referenceLink: true}) + .then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML)); + } + else { + Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => { + const $list = $("
      ").append(...links.map($link => $("
    • ").append($link))); + if (notes.length === 1) { + linkService.createLink(notes[0].noteId, {referenceLink: true}) + .then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML)); + } + else { + Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => { + const $list = $("
        ").append(...links.map($link => $("
      • ").append($link))); - return; - } + data.dataTransfer.setData("text/html", $list[0].outerHTML); + }); + } + data.dataTransfer.setData("text/html", $list[0].outerHTML); + }); + } - const dataTransfer = data.dataTransfer; + data.dataTransfer.setData("text", JSON.stringify(notes)); + return true; // allow dragging to start + }, + dragEnter: (node, data) => { + if (node.data.noteType === 'search') { + return false; + } else if (node.data.noteId === '_lbRoot') { + return false; + } else if (node.data.noteId.startsWith('_options')) { + return false; + } else if (node.data.noteType === 'launcher') { + return ['before', 'after']; + } else if (['_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId)) { + return ['over']; + } else { + return true; + } + }, + dragDrop: async (node, data) => { + if ((data.hitMode === 'over' && node.data.noteType === 'search') || + (['after', 'before'].includes(data.hitMode) + && (node.data.noteId === hoistedNoteService.getHoistedNoteId() || node.getParent().data.noteType === 'search'))) { + data.dataTransfer.setData("text", JSON.stringify(notes)); + return true; // allow dragging to start + }, + dragEnter: (node, data) => { + if (node.data.noteType === 'search') { + return false; + } else if (node.data.noteId === '_lbRoot') { + return false; + } else if (node.data.noteId.startsWith('_options')) { + return false; + } else if (node.data.noteType === 'launcher') { + return ['before', 'after']; + } else if (['_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(node.data.noteId)) { + return ['over']; + } else { + return true; + } + }, + dragDrop: async (node, data) => { + if ((data.hitMode === 'over' && node.data.noteType === 'search') || + (['after', 'before'].includes(data.hitMode) + && (node.data.noteId === hoistedNoteService.getHoistedNoteId() || node.getParent().data.noteType === 'search'))) { - if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { - const files = [...dataTransfer.files]; // chrome has issue that dataTransfer.files empties after async operation + await dialogService.info("Dropping notes into this location is not allowed."); + await dialogService.info("Dropping notes into this location is not allowed."); - const importService = await import('../services/import.js'); + return; + } + return; + } - importService.uploadFiles('notes', node.data.noteId, files, { - safeImport: true, - shrinkImages: true, - textImportedAsText: true, - codeImportedAsCode: true, - explodeArchives: true, - replaceUnderscoresWithSpaces: true - }); + const dataTransfer = data.dataTransfer; + const dataTransfer = data.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + const files = [...dataTransfer.files]; // chrome has issue that dataTransfer.files empties after async operation + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + const files = [...dataTransfer.files]; // chrome has issue that dataTransfer.files empties after async operation + + const importService = await import('../services/import.js'); + const importService = await import('../services/import.js'); + + importService.uploadFiles('notes', node.data.noteId, files, { + safeImport: true, + shrinkImages: true, + textImportedAsText: true, + codeImportedAsCode: true, + explodeArchives: true, + replaceUnderscoresWithSpaces: true + }); + } + else { + const jsonStr = dataTransfer.getData("text"); + let notes = null; + importService.uploadFiles('notes', node.data.noteId, files, { + safeImport: true, + shrinkImages: true, + textImportedAsText: true, + codeImportedAsCode: true, + explodeArchives: true, + replaceUnderscoresWithSpaces: true + }); + } + else { + const jsonStr = dataTransfer.getData("text"); + let notes = null; + + try { + notes = JSON.parse(jsonStr); + } + catch (e) { + logError(`Cannot parse JSON '${jsonStr}' into notes for drop`); + return; + } + try { + notes = JSON.parse(jsonStr); + } + catch (e) { + logError(`Cannot parse JSON '${jsonStr}' into notes for drop`); + return; + } + + // This function MUST be defined to enable dropping of items on the tree. + // data.hitMode is 'before', 'after', or 'over'. + // This function MUST be defined to enable dropping of items on the tree. + // data.hitMode is 'before', 'after', or 'over'. + + const selectedBranchIds = notes.map(note => note.branchId); + const selectedBranchIds = notes.map(note => note.branchId); + + if (data.hitMode === "before") { + branchService.moveBeforeBranch(selectedBranchIds, node.data.branchId); + } else if (data.hitMode === "after") { + branchService.moveAfterBranch(selectedBranchIds, node.data.branchId); + } else if (data.hitMode === "over") { + branchService.moveToParentNote(selectedBranchIds, node.data.branchId); + } else { + throw new Error(`Unknown hitMode '${data.hitMode}'`); + } + } } - else { - const jsonStr = dataTransfer.getData("text"); - let notes = null; + }, + lazyLoad: (event, data) => { + const {noteId, noteType} = data.node.data; + if (data.hitMode === "before") { + branchService.moveBeforeBranch(selectedBranchIds, node.data.branchId); + } else if (data.hitMode === "after") { + branchService.moveAfterBranch(selectedBranchIds, node.data.branchId); + } else if (data.hitMode === "over") { + branchService.moveToParentNote(selectedBranchIds, node.data.branchId); + } else { + throw new Error(`Unknown hitMode '${data.hitMode}'`); + } + } + } + }, + lazyLoad: (event, data) => { + const {noteId, noteType} = data.node.data; + + if (noteType === 'search') { + const notePath = treeService.getNotePath(data.node.getParent()); + if (noteType === 'search') { + const notePath = treeService.getNotePath(data.node.getParent()); - try { - notes = JSON.parse(jsonStr); + // this is a search cycle (search note is a descendant of its own search result) + if (notePath.includes(noteId)) { + data.result = []; + return; } - catch (e) { - logError(`Cannot parse JSON '${jsonStr}' into notes for drop`); + // this is a search cycle (search note is a descendant of its own search result) + if (notePath.includes(noteId)) { + data.result = []; return; } - // This function MUST be defined to enable dropping of items on the tree. - // data.hitMode is 'before', 'after', or 'over'. + data.result = froca.loadSearchNote(noteId).then(() => { + const note = froca.getNoteFromCache(noteId); + data.result = froca.loadSearchNote(noteId).then(() => { + const note = froca.getNoteFromCache(noteId); - const selectedBranchIds = notes.map(note => note.branchId); + let childNoteIds = note.getChildNoteIds(); + let childNoteIds = note.getChildNoteIds(); - if (data.hitMode === "before") { - branchService.moveBeforeBranch(selectedBranchIds, node.data.branchId); - } else if (data.hitMode === "after") { - branchService.moveAfterBranch(selectedBranchIds, node.data.branchId); - } else if (data.hitMode === "over") { - branchService.moveToParentNote(selectedBranchIds, node.data.branchId); - } else { - throw new Error(`Unknown hitMode '${data.hitMode}'`); - } + if (note.type === 'search' && childNoteIds.length > MAX_SEARCH_RESULTS_IN_TREE) { + childNoteIds = childNoteIds.slice(0, MAX_SEARCH_RESULTS_IN_TREE); + } + if (note.type === 'search' && childNoteIds.length > MAX_SEARCH_RESULTS_IN_TREE) { + childNoteIds = childNoteIds.slice(0, MAX_SEARCH_RESULTS_IN_TREE); + } + + return froca.getNotes(childNoteIds); + }).then(() => { + const note = froca.getNoteFromCache(noteId); + return froca.getNotes(childNoteIds); + }).then(() => { + const note = froca.getNoteFromCache(noteId); + + return this.prepareChildren(note); + }); + } + else { + data.result = froca.loadSubTree(noteId).then(note => this.prepareChildren(note)); + } + }, + clones: { + highlightActiveClones: true + }, + enhanceTitle: async function (event, data) { + // console.log('called'); + // console.log(event); + // console.log(data); + // console.trace(); + const node = data.node; + return this.prepareChildren(note); + }); + } + else { + data.result = froca.loadSubTree(noteId).then(note => this.prepareChildren(note)); + } + }, + clones: { + highlightActiveClones: true + }, + enhanceTitle: async function (event, data) { + // console.log('called'); + // console.log(event); + // console.log(data); + // console.trace(); + const node = data.node; + + if (!node.data.noteId) { + // if there's "non-note" node, then don't enhance + // this can happen for e.g. "Load error!" node + return; + } + if (!node.data.noteId) { + // if there's "non-note" node, then don't enhance + // this can happen for e.g. "Load error!" node + return; } - } - }, - lazyLoad: (event, data) => { - const {noteId, noteType} = data.node.data; - if (noteType === 'search') { - const notePath = treeService.getNotePath(data.node.getParent()); + const note = await froca.getNote(node.data.noteId, true); + const note = await froca.getNote(node.data.noteId, true); - // this is a search cycle (search note is a descendant of its own search result) - if (notePath.includes(noteId)) { - data.result = []; + if (!note) { + return; + } + if (!note) { return; } - data.result = froca.loadSearchNote(noteId).then(() => { - const note = froca.getNoteFromCache(noteId); + const activeNoteContext = appContext.tabManager.getActiveContext(); + const activeNoteContext = appContext.tabManager.getActiveContext(); - let childNoteIds = note.getChildNoteIds(); + const $span = $(node.span); - if (note.type === 'search' && childNoteIds.length > MAX_SEARCH_RESULTS_IN_TREE) { - childNoteIds = childNoteIds.slice(0, MAX_SEARCH_RESULTS_IN_TREE); - } + $span.find('.tree-item-tag').remove(); + const $span = $(node.span); - return froca.getNotes(childNoteIds); - }).then(() => { - const note = froca.getNoteFromCache(noteId); + $span.find('.tree-item-tag').remove(); - return this.prepareChildren(note); - }); - } - else { - data.result = froca.loadSubTree(noteId).then(note => this.prepareChildren(note)); - } - }, - clones: { - highlightActiveClones: true - }, - enhanceTitle: async function (event, data) { - const node = data.node; - - if (!node.data.noteId) { - // if there's "non-note" node, then don't enhance - // this can happen for e.g. "Load error!" node - return; - } + $span.find('.tree-item-button').remove(); + $span.find('.tree-item-button').remove(); - const note = await froca.getNote(node.data.noteId, true); + const isHoistedNote = activeNoteContext && activeNoteContext.hoistedNoteId === note.noteId && note.noteId !== 'root'; + const isHoistedNote = activeNoteContext && activeNoteContext.hoistedNoteId === note.noteId && note.noteId !== 'root'; - if (!note) { - return; - } + if (isHoistedNote) { + const $unhoistButton = $('') + .on("click", cancelClickPropagation); + if (isHoistedNote) { + const $unhoistButton = $('') + .on("click", cancelClickPropagation); - const activeNoteContext = appContext.tabManager.getActiveContext(); + // unhoist button is prepended since compared to other buttons, this is not just convenience + // on the mobile interface - it's the only way to unhoist + $span.prepend($unhoistButton); + } + // unhoist button is prepended since compared to other buttons, this is not just convenience + // on the mobile interface - it's the only way to unhoist + $span.prepend($unhoistButton); + } - const $span = $(node.span); + if (note.hasLabel('workspace') && !isHoistedNote) { + const $enterWorkspaceButton = $('') + .on("click", cancelClickPropagation); + if (note.hasLabel('workspace') && !isHoistedNote) { + const $enterWorkspaceButton = $('') + .on("click", cancelClickPropagation); - $span.find('.tree-item-button').remove(); + $span.append($enterWorkspaceButton); + } + $span.append($enterWorkspaceButton); + } - const isHoistedNote = activeNoteContext && activeNoteContext.hoistedNoteId === note.noteId && note.noteId !== 'root'; + if (note.type === 'search') { + const $refreshSearchButton = $('') + .on("click", cancelClickPropagation); + if (note.type === 'search') { + const $refreshSearchButton = $('') + .on("click", cancelClickPropagation); - if (isHoistedNote) { - const $unhoistButton = $('') - .on("click", cancelClickPropagation); + $span.append($refreshSearchButton); + } + $span.append($refreshSearchButton); + } - // unhoist button is prepended since compared to other buttons, this is not just convenience - // on the mobile interface - it's the only way to unhoist - $span.prepend($unhoistButton); - } + const status = note.attributes.map(a => froca.attributes[a]).find(a => a.name === 'state')?.value ?? 'N/A'; - if (note.hasLabel('workspace') && !isHoistedNote) { - const $enterWorkspaceButton = $('') - .on("click", cancelClickPropagation); + if (note.type === 'task') { - $span.append($enterWorkspaceButton); - } + if (status !== 'done') { + const $markDoneButton = $(''); + $span.append($markDoneButton); + } + } - if (note.type === 'search') { - const $refreshSearchButton = $('') - .on("click", cancelClickPropagation); + if (note.type !== 'swimlane' && !['search', 'launcher'].includes(note.type) && !note.isOptions() && !note.isLaunchBarConfig()) { + const $createChildNoteButton = $('') + .on("click", cancelClickPropagation); + const status = note.attributes.map(a => froca.attributes[a]).find(a => a.name === 'state')?.value ?? 'N/A'; - $span.append($refreshSearchButton); - } + if (note.type === 'task') { - if (!['search', 'launcher'].includes(note.type) && !note.isOptions() && !note.isLaunchBarConfig()) { - const $createChildNoteButton = $('') - .on("click", cancelClickPropagation); + if (status !== 'done') { + const $markDoneButton = $(''); + $span.append($markDoneButton); + } + } - $span.append($createChildNoteButton); + if (note.type !== 'swimlane' && !['search', 'launcher'].includes(note.type) && !note.isOptions() && !note.isLaunchBarConfig()) { + const $createChildNoteButton = $('') + .on("click", cancelClickPropagation); + + $span.append($createChildNoteButton); + } + + if (note.type === 'task') { + + const createTag = (text, color) => { + const tag = $(`${text}`); + tag.css('border-color', color); + $span.append(tag); + }; + if (status === 'N/A') { + throw new Error('N/A is not a valid value for task status: ' + note.title); + } + else if (status === 'done'){ + createTag('done', '#00ff00'); + } else { + if (status === 'blocked') { + createTag('blocked', 'orange'); + } else if (status === 'postponed') { + createTag('postponed', 'yellow'); + } else if (status === 'default') { + createTag('not started', 'gray') + } + } + } + }, + // this is done to automatically lazy load all expanded notes after tree load + loadChildren: (event, data) => { + data.node.visit((subNode) => { + // Load all lazy/unloaded child nodes + // (which will trigger `loadChildren` recursively) + if (subNode.isUndefined() && subNode.isExpanded()) { + subNode.load(); + } + }); + }, + select: (event, {node}) => { + $(node.span).find(".fancytree-custom-icon").attr("title", + node.isSelected() ? "Apply bulk actions on selected notes" : ""); + } + }); + }).then(() => { + if (!utils.isMobile()) { + this.getHotKeys().then(hotKeys => { + for (const key in hotKeys) { + const handler = hotKeys[key]; + $span.append($createChildNoteButton); + } + + if (note.type === 'task') { + + const createTag = (text, color) => { + const tag = $(`${text}`); + tag.css('border-color', color); + $span.append(tag); + }; + if (status === 'N/A') { + throw new Error('N/A is not a valid value for task status: ' + note.title); + } + else if (status === 'done'){ + createTag('done', '#00ff00'); + } else { + if (status === 'blocked') { + createTag('blocked', 'orange'); + } else if (status === 'postponed') { + createTag('postponed', 'yellow'); + } else if (status === 'default') { + createTag('not started', 'gray') + } + } + } + }, + // this is done to automatically lazy load all expanded notes after tree load + loadChildren: (event, data) => { + data.node.visit((subNode) => { + // Load all lazy/unloaded child nodes + // (which will trigger `loadChildren` recursively) + if (subNode.isUndefined() && subNode.isExpanded()) { + subNode.load(); + } + }); + }, + select: (event, {node}) => { + $(node.span).find(".fancytree-custom-icon").attr("title", + node.isSelected() ? "Apply bulk actions on selected notes" : ""); } - }, - // this is done to automatically lazy load all expanded notes after tree load - loadChildren: (event, data) => { - data.node.visit((subNode) => { - // Load all lazy/unloaded child nodes - // (which will trigger `loadChildren` recursively) - if (subNode.isUndefined() && subNode.isExpanded()) { - subNode.load(); + }); + }).then(() => { + if (!utils.isMobile()) { + this.getHotKeys().then(hotKeys => { + for (const key in hotKeys) { + const handler = hotKeys[key]; + + $(this.tree.$container).on('keydown', null, key, evt => { + const node = this.tree.getActiveNode(); + return handler(node, evt); + // return false from the handler will stop default handling. + }); + } + }); + } + $(this.tree.$container).on('keydown', null, key, evt => { + const node = this.tree.getActiveNode(); + return handler(node, evt); + // return false from the handler will stop default handling. + }); } }); - }, - select: (event, {node}) => { - $(node.span).find(".fancytree-custom-icon").attr("title", - node.isSelected() ? "Apply bulk actions on selected notes" : ""); } - }); - if (!utils.isMobile()) { - this.getHotKeys().then(hotKeys => { - for (const key in hotKeys) { - const handler = hotKeys[key]; + this.$tree.on('contextmenu', '.fancytree-node', e => { + const node = $.ui.fancytree.getNode(e); + const note = froca.getNoteFromCache(node.data.noteId); + this.$tree.on('contextmenu', '.fancytree-node', e => { + const node = $.ui.fancytree.getNode(e); + const note = froca.getNoteFromCache(node.data.noteId); - $(this.tree.$container).on('keydown', null, key, evt => { - const node = this.tree.getActiveNode(); - return handler(node, evt); - // return false from the handler will stop default handling. + if (note.isLaunchBarConfig()) { + import("../menus/launcher_context_menu.js").then(({default: LauncherContextMenu}) => { + const launcherContextMenu = new LauncherContextMenu(this, node); + launcherContextMenu.show(e); + }); + } else { + import("../menus/tree_context_menu.js").then(({default: TreeContextMenu}) => { + const treeContextMenu = new TreeContextMenu(this, node); + treeContextMenu.show(e); + }); + } + if (note.isLaunchBarConfig()) { + import("../menus/launcher_context_menu.js").then(({default: LauncherContextMenu}) => { + const launcherContextMenu = new LauncherContextMenu(this, node); + launcherContextMenu.show(e); + }); + } else { + import("../menus/tree_context_menu.js").then(({default: TreeContextMenu}) => { + const treeContextMenu = new TreeContextMenu(this, node); + treeContextMenu.show(e); }); } - }); - } - - this.$tree.on('contextmenu', '.fancytree-node', e => { - const node = $.ui.fancytree.getNode(e); - const note = froca.getNoteFromCache(node.data.noteId); - if (note.isLaunchBarConfig()) { - import("../menus/launcher_context_menu.js").then(({default: LauncherContextMenu}) => { - const launcherContextMenu = new LauncherContextMenu(this, node); - launcherContextMenu.show(e); - }); - } else { - import("../menus/tree_context_menu.js").then(({default: TreeContextMenu}) => { - const treeContextMenu = new TreeContextMenu(this, node); - treeContextMenu.show(e); - }); - } + return false; // blocks default browser right click menu + }); + return false; // blocks default browser right click menu + }); - return false; // blocks default browser right click menu + this.tree = $.ui.fancytree.getTree(this.$tree); + }); + this.tree = $.ui.fancytree.getTree(this.$tree); }); - - this.tree = $.ui.fancytree.getTree(this.$tree); } - prepareRootNode() { - return this.prepareNode(froca.getBranch('none_root')); + async prepareRootNode() { + return await this.prepareNode(froca.getBranch('none_root')); + async prepareRootNode() { + return await this.prepareNode(froca.getBranch('none_root')); } /** * @param {FNote} parentNote */ - prepareChildren(parentNote) { + async prepareChildren(parentNote) { + async prepareChildren(parentNote) { utils.assertArguments(parentNote); const noteList = []; + const hideDoneTasks = this.hideDoneTasks; + const hideDoneTasks = this.hideDoneTasks; const hideArchivedNotes = this.hideArchivedNotes; let childBranches = parentNote.getFilteredChildBranches(); @@ -656,7 +1074,24 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { } } - const node = this.prepareNode(branch); + if (hideDoneTasks) { + const note = branch.getNoteFromCache(); + + if (await taskService.isDone(note)) { + continue; + } + } + + const node = await this.prepareNode(branch); + if (hideDoneTasks) { + const note = branch.getNoteFromCache(); + + if (await taskService.isDone(note)) { + continue; + } + } + + const node = await this.prepareNode(branch); noteList.push(node); } @@ -696,7 +1131,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { * @param {FBranch} branch * @param {boolean} forceLazy */ - prepareNode(branch, forceLazy = false) { + async prepareNode(branch, forceLazy = false) { + async prepareNode(branch, forceLazy = false) { const note = branch.getNoteFromCache(); if (!note) { @@ -724,7 +1160,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { }; if (isFolder && node.expanded && !forceLazy) { - node.children = this.prepareChildren(note); + node.children = await this.prepareChildren(note); + node.children = await this.prepareChildren(note); } return node; @@ -1185,7 +1622,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { const frocaBranch = froca.getBranch(branchRow.branchId); // we're forcing lazy since it's not clear if the whole required subtree is in froca - parentNode.addChildren([this.prepareNode(frocaBranch, true)]); + parentNode.addChildren([await this.prepareNode(frocaBranch, true)]); + parentNode.addChildren([await this.prepareNode(frocaBranch, true)]); this.sortChildren(parentNode); @@ -1323,7 +1761,8 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { const activeNotePath = activeNode !== null ? treeService.getNotePath(activeNode) : null; - const rootNode = this.prepareRootNode(); + const rootNode = await this.prepareRootNode(); + const rootNode = await this.prepareRootNode(); await this.batchUpdate(async () => { await this.tree.reload([rootNode]); diff --git a/src/public/app/widgets/note_type.js b/code/src/public/app/widgets/note_type.js similarity index 90% rename from src/public/app/widgets/note_type.js rename to code/src/public/app/widgets/note_type.js index fe60318ae47..8b27bb540cf 100644 --- a/src/public/app/widgets/note_type.js +++ b/code/src/public/app/widgets/note_type.js @@ -13,13 +13,20 @@ const NOTE_TYPES = [ { type: "contentWidget", mime: '', title: "Widget", selectable: false }, { type: "text", mime: "text/html", title: "Text", selectable: true }, + { type: "task", mime: "text/html", title: "Task", selectable: true }, + { type: "category", mime: "text/html", title: "Category", selectable: true }, + { type: "swimlane", mime: "text/html", title: "Swimlane", selectable: true }, + { type: "swimlane_dashboard", mime: "text/html", title: "Task Overview", selectable: true }, { type: "relationMap", mime: "application/json", title: "Relation Map", selectable: true }, { type: "render", mime: '', title: "Render Note", selectable: true }, { type: "canvas", mime: 'application/json', title: "Canvas", selectable: true }, { type: "mermaid", mime: 'text/mermaid', title: "Mermaid Diagram", selectable: true }, { type: "book", mime: '', title: "Book", selectable: true }, { type: "webView", mime: '', title: "Web View", selectable: true }, - { type: "code", mime: 'text/plain', title: "Code", selectable: true } + { type: "code", mime: 'text/plain', title: "Code", selectable: true }, + { type: "bucket", mime: "text/html", title: "Main Bucket", selectable: true } + { type: "code", mime: 'text/plain', title: "Code", selectable: true }, + { type: "bucket", mime: "text/html", title: "Main Bucket", selectable: true } ]; const NOT_SELECTABLE_NOTE_TYPES = NOTE_TYPES.filter(nt => !nt.selectable).map(nt => nt.type); diff --git a/src/public/app/widgets/note_wrapper.js b/code/src/public/app/widgets/note_wrapper.js similarity index 99% rename from src/public/app/widgets/note_wrapper.js rename to code/src/public/app/widgets/note_wrapper.js index 91e9ff3cf5c..1158f86af9c 100644 --- a/src/public/app/widgets/note_wrapper.js +++ b/code/src/public/app/widgets/note_wrapper.js @@ -5,7 +5,7 @@ import attributeService from "../services/attributes.js"; export default class NoteWrapperWidget extends FlexContainer { constructor() { super('column'); - + this.css("flex-grow", "1") .collapsible(); } diff --git a/src/public/app/widgets/protected_note_switch.js b/code/src/public/app/widgets/protected_note_switch.js similarity index 100% rename from src/public/app/widgets/protected_note_switch.js rename to code/src/public/app/widgets/protected_note_switch.js diff --git a/src/public/app/widgets/quick_search.js b/code/src/public/app/widgets/quick_search.js similarity index 100% rename from src/public/app/widgets/quick_search.js rename to code/src/public/app/widgets/quick_search.js diff --git a/src/public/app/widgets/ribbon_widgets/basic_properties.js b/code/src/public/app/widgets/ribbon_widgets/basic_properties.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/basic_properties.js rename to code/src/public/app/widgets/ribbon_widgets/basic_properties.js diff --git a/src/public/app/widgets/ribbon_widgets/book_properties.js b/code/src/public/app/widgets/ribbon_widgets/book_properties.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/book_properties.js rename to code/src/public/app/widgets/ribbon_widgets/book_properties.js diff --git a/src/public/app/widgets/ribbon_widgets/edited_notes.js b/code/src/public/app/widgets/ribbon_widgets/edited_notes.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/edited_notes.js rename to code/src/public/app/widgets/ribbon_widgets/edited_notes.js diff --git a/src/public/app/widgets/ribbon_widgets/file_properties.js b/code/src/public/app/widgets/ribbon_widgets/file_properties.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/file_properties.js rename to code/src/public/app/widgets/ribbon_widgets/file_properties.js diff --git a/src/public/app/widgets/ribbon_widgets/image_properties.js b/code/src/public/app/widgets/ribbon_widgets/image_properties.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/image_properties.js rename to code/src/public/app/widgets/ribbon_widgets/image_properties.js diff --git a/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js b/code/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js rename to code/src/public/app/widgets/ribbon_widgets/inherited_attribute_list.js diff --git a/src/public/app/widgets/ribbon_widgets/note_info_widget.js b/code/src/public/app/widgets/ribbon_widgets/note_info_widget.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/note_info_widget.js rename to code/src/public/app/widgets/ribbon_widgets/note_info_widget.js diff --git a/src/public/app/widgets/ribbon_widgets/note_map.js b/code/src/public/app/widgets/ribbon_widgets/note_map.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/note_map.js rename to code/src/public/app/widgets/ribbon_widgets/note_map.js diff --git a/src/public/app/widgets/ribbon_widgets/note_paths.js b/code/src/public/app/widgets/ribbon_widgets/note_paths.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/note_paths.js rename to code/src/public/app/widgets/ribbon_widgets/note_paths.js diff --git a/src/public/app/widgets/ribbon_widgets/note_properties.js b/code/src/public/app/widgets/ribbon_widgets/note_properties.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/note_properties.js rename to code/src/public/app/widgets/ribbon_widgets/note_properties.js diff --git a/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js b/code/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js similarity index 100% rename from src/public/app/widgets/ribbon_widgets/owned_attribute_list.js rename to code/src/public/app/widgets/ribbon_widgets/owned_attribute_list.js diff --git a/src/public/app/widgets/ribbon_widgets/promoted_attributes.js b/code/src/public/app/widgets/ribbon_widgets/promoted_attributes.js similarity index 95% rename from src/public/app/widgets/ribbon_widgets/promoted_attributes.js rename to code/src/public/app/widgets/ribbon_widgets/promoted_attributes.js index a346d76d57a..c26c9302ba3 100644 --- a/src/public/app/widgets/ribbon_widgets/promoted_attributes.js +++ b/code/src/public/app/widgets/ribbon_widgets/promoted_attributes.js @@ -61,7 +61,7 @@ export default class PromotedAttributesWidget extends NoteContextAwareWidget { } return { - show: true, + show: false, activate: true, title: "Promoted Attributes", icon: "bx bx-table" @@ -114,13 +114,13 @@ export default class PromotedAttributesWidget extends NoteContextAwareWidget { // we replace the whole content in one step, so there can't be any race conditions // (previously we saw promoted attributes doubling) this.$container.empty().append(...$cells); - this.toggleInt(true); + this.toggleInt(false); } async createPromotedAttributeCell(definitionAttr, valueAttr, valueName) { const definition = definitionAttr.getDefinition(); - const $input = $("") + const $input = definition.labelType === 'enum' ? $("